feat: rename CUT3 → Rowl branding#17
Conversation
Rowl rebrand release
- 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
- 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)
There was a problem hiding this comment.
💡 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"; |
There was a problem hiding this comment.
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 👍 / 👎.
Summary
Comprehensive branding rename from "CUT3" to "Rowl" across the entire codebase and documentation.
Changes
CUT3_*env vars →ROWL_*cut3/*→rowl/*)cut3→rowl)CUT3→Rowl)cut3-kimi→rowl-kimi)Testing
bun run fmt(636 files formatted)bun run typecheck(0 errors across all packages)bun run test(all tests passing)