Skip to content

feat: rename CUT3 → Rowl branding#17

Closed
timtamtom7 wants to merge 36 commits intoyappologistic:mainfrom
timtamtom7:feat/branding-rename-cut3-to-rowl
Closed

feat: rename CUT3 → Rowl branding#17
timtamtom7 wants to merge 36 commits intoyappologistic:mainfrom
timtamtom7:feat/branding-rename-cut3-to-rowl

Conversation

@timtamtom7
Copy link
Copy Markdown

Summary

Comprehensive branding rename from "CUT3" to "Rowl" across the entire codebase and documentation.

Changes

  • Rename all CUT3_* env vars → ROWL_*
  • Rename all documentation references (README, AGENTS, CONTRIBUTING, KEYBINDINGS, REMOTE, docs/*.md)
  • Rename ServiceMap keys (cut3/*rowl/*)
  • Rename worktree branch prefix (cut3rowl)
  • Rename LocalStorage keys, desktop protocol URL, GitHub PR temp files, User-Agent
  • Rename Git author (CUT3Rowl)
  • Rename provider ID (cut3-kimirowl-kimi)
  • Add backward compat for legacy "CUT3" user data directories
  • Fix macOS x64 update selection test (mock process.arch to properly exercise both code paths)

Testing

  • bun run fmt (636 files formatted)
  • bun run typecheck (0 errors across all packages)
  • bun run test (all tests passing)

timtamtom7 and others added 30 commits April 3, 2026 20:38
- Replace cut3://app websocket origin with rowl://app in networking.ts
- Update desktop websocket connection string tests
- Fix desktop update logic: CUT3 -> Rowl in Apple Silicon update messages
- Fix project creation error messages to use APP_DISPLAY_NAME
- Fix custom themes description: CUT3's -> Rowl's
- Fix server connection banner: restart CUT3 -> restart Rowl
When using Codex with OpenRouter models, the image attachment button
was incorrectly disabled if the OpenRouter catalog hadn't been loaded yet.
This happened because selectedModelSupportsImages returned early with
false when selectedOpenRouterModel was null, without falling back to
check configuredModelsByProvider.codex which has supportsImageInput from
session.configured activity.

Fix: 1) Include configuredModelsByProvider.codex in the
allModelOptionsByProvider.codex merge (matching other providers), and
2) Fall back to allModelOptionsByProvider.codex lookup when
selectedOpenRouterModel is null.

Also includes fmt formatting changes.
…sidebar layout

1. Image attachment UX improvements:
   - Add toast feedback when image attachment fails due to model/provider not supporting images
   - Differentiate tooltip message between OpenCode provider limitation vs model limitation

2. GLM 5 / OpenCode model selection:
   - Throw error when user requests a model that is not available in OpenCode session
   - Include available models list in error message to help user select valid model
   - Fixes silent model selection failure where requested model was ignored

3. Translucent sidebar layout:
   - Remove CSS rule that set sidebar-gap width to 0 when translucent was enabled
   - This rule was causing main content to shift left when sidebar was translucent
   - The sidebar now properly overlays content without affecting its layout
- Normalize zai→z-ai in parseOpenCodeModelsOutput() so GLM models
  use correct OpenRouter API format (z-ai/glm-5v-turbo not zai/glm-5v-turbo)
- Hide attachment UI for OpenCode provider since ACP backend explicitly
  blocks attachments with "text prompts only" error
- Add Collapsible component to ManageModelsDialog provider sections
  - Animated chevron rotation on expand/collapse
  - Click header to toggle, visibility buttons use stopPropagation
  - Provider visibility toggle shows/hides all models via hiddenProviders

- Add providerLog() opt-in logging via CUT3_ENABLE_PROVIDER_EVENT_LOGS=1
  - Model normalization, turn start/completion, session disposal logged
  - SIGKILL fallback after 500ms grace period in disposeContext()

- Add hiddenProviders to AppSettings schema with normalization

- ProviderModelPicker filters hidden providers from available options

- Branding fixes: CUT3 -> Rowl in test fixtures (ProviderHealth,
  codexAppServerManager, opencodeAcpManager, appRelease)

- GLM model normalization already committed in previous session
- Add providerLog() import to copilotAcpManager.ts and kimiAcpManager.ts
- Add turn start/completion logs matching OpenCode pattern
- Add 500ms grace period before SIGKILL in disposeContext()
- Add session disposal and SIGKILL logs for debugging

All ACP providers now have consistent:
- Turn start/completion logging
- Session disposal logging
- SIGKILL fallback after 500ms grace period

This ensures provider event logs are visible end-to-end when
CUT3_ENABLE_PROVIDER_EVENT_LOGS=1 is set.
- Changed keybinding from mod+shift+p to mod+k for command palette
- Added Compact Thread and Search commands to palette
- Added search and compact icons to PALETTE_ICONS
- Updated KEYBINDINGS.md documentation
- RightSidebar.tsx: Collapsible sidebar shell with 5 tabs (PM Chat, Threads, Features, Goals, Context)
- PMChat.tsx: Chat interface for AI Product Manager
- ThreadsTab.tsx: Thread list with goal statements and status
- FeaturesBoard.tsx: Kanban board with drag-and-drop (Backlog, In Progress, Done, Wishlist)
- GoalsTab.tsx: Main goal display with sub-goals list
- ContextTab.tsx: Node-based context visualizer with compression status
- Fix type errors and lint warnings
- Right sidebar shell (collapsible ~320px/~40px)
- PM Chat tab (AI coordinator interface)
- Threads tab (project thread list)
- Features board (Kanban: Backlog/In Progress/Done/Wishlist)
- Goals tab (main goal + sub-goals)
- Context tab (node visualizer for context management)

UI components complete. Service implementations stubbed for next sprint.

Closes #rowl-right-sidebar
- Add goal field to OrchestrationThread schema
- Add goal to ThreadMetaUpdateCommand
- Add goal to Thread interface in web types
- Add ThreadGoalStatement component in chat/
- Add to ChatView above MessagesTimeline
- Update all test fixtures with goal: null

Click to edit goal, auto-saves on blur
- Add goal field to OrchestrationThread schema
- Add goal to ThreadMetaUpdateCommand
- Add goal to Thread interface in web types
- Add ThreadGoalStatement component in chat/
- Add to ChatView above MessagesTimeline
- Update all test fixtures with goal: null

Click to edit goal, auto-saves on blur
- Correct status for Right Sidebar tabs (mock data, not working)
- Thread Goal Statement marked as fully done
- Added architecture notes explaining what's stubbed vs real
- Detailed what needs to be done to complete right sidebar
- Delete mock tab components (PMChat, ThreadsTab, FeaturesBoard, GoalsTab, ContextTab)
- Keep RightSidebar shell only
- Rewrite FEATURE_SPECIFICATIONS.md with completion % tracking
- Only Thread Goal Statement is actually 100% done
- All other features are 0% or shell-only

Rule: Mock UI = 0%. Feature is done when backend + frontend wired to real APIs.
- Import RightSidebar in _chat.tsx
- Add to layout after Outlet
- RightSidebar shell now renders (empty, with tab bar)

Next: Add Threads Tab content
timtamtom7 and others added 6 commits April 9, 2026 15:07
- Fix ProviderHealthBanner showing Codex warning when using other providers
- Remove "Coming soon" section from model dropdown picker
- Add right sidebar toggle button to ChatHeader (matches left sidebar trigger placement)
- Create RightSidebarContext for shared state between components
- Update test to include kilocode in PROVIDER_OPTIONS
fix(web): refine UI controls and right sidebar
- Remove kilocode from PROVIDER_ICON_BY_PROVIDER since contracts don't support it
- Remove kilocode from providerStatus.ts since contracts don't define it
- Remove kilocode from session-logic.test.ts to match actual PROVIDER_OPTIONS
- Remove ThreadsTab import from RightSidebar.tsx since file was deleted
- Add RightSidebarToggle to the actual ChatHeader component in ChatView.tsx
- Add cn import to RightSidebarToggle
- Remove duplicate RightSidebarToggle from chat/ChatHeader.tsx (unused)
- Right sidebar now uses position: fixed overlay when expanded instead of pushing chat content
- Removed group-hover text reveal on tabs (text now hidden)
- Added overflow-hidden to prevent layout issues
- Rename all env vars (CUT3_* → ROWL_*)
- Rename all documentation references
- Rename ServiceMap keys (cut3/* → rowl/*)
- Rename worktree branch prefix
- Rename LocalStorage keys, desktop protocol, User-Agent
- Rename GitHub PR temp files
- Rename provider ID (cut3-kimi → rowl-kimi)
- Add backward compat for legacy CUT3 user data dirs
- Fix macOS x64 update selection test (mock process.arch)
@timtamtom7 timtamtom7 closed this Apr 10, 2026
@github-actions github-actions Bot added the vouch:unvouched PR author is not yet trusted in the VOUCHED list. label Apr 10, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e43648d990

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

import { isOpenRouterGuaranteedFreeSlug } from "./lib/openRouterModels";

const APP_SETTINGS_STORAGE_KEY = "cut3:app-settings:v1";
const APP_SETTINGS_STORAGE_KEY = "rowl:app-settings:v1";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve existing app settings during key rename

Switching APP_SETTINGS_STORAGE_KEY to rowl:app-settings:v1 without a fallback read of the old cut3:app-settings:v1 key causes existing installs to appear reset after upgrade. Users lose persisted preferences (theme, model/provider visibility, binary overrides, etc.) on first launch of this build, even though the underlying localStorage data is still present under the old key.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant