mirror of
https://github.com/stablyai/orca.git
synced 2026-11-13 17:37:40 +00:00
* Chat UI leaves Experimental: each agent's Chat | CLI choice decides launches
Remove the experimentalNativeChat switch and every gate on it. The Chat
settings page, Default Agent Chat | CLI choice, + menu Chat/CLI rows,
source-control surface choice, Antigravity chat section and orchestration
chat-error switch are always present. What a new launch opens comes only
from the per-agent choice (no saved choice opens a chat) plus the existing
support checks.
- One lookup, nativeChatPreferenceFor, keyed by agent id so host-registered
agents read the same way; unreadable settings still open a terminal.
- A relayed desktop stamp (nativeChatDefault) maps onto the launched agent;
an explicit surface still wins. Old phones' createSupport keeps admitting
by the host's per-agent choice.
- settings.get stops publishing the retired switch keys; nothing in the
repo reads them from a host.
- Startup chat sync and hydration run when some agent can open as a chat
or the machine already holds chats.
- The retired key is stripped on load. The one-time upgrade tip from the
chat upgrade is retired with its audience record; a new record, captured
once from the raw profile, marks which existing profiles had Chat UI off.
- The window-side AI-button tab path, which only ran with the switch off,
is deleted.
* Keep profiles that had Chat UI off on the terminal
Existing users who never turned Chat UI on would otherwise see new agent
launches open as chats, since an agent without a saved choice now opens as
a chat. The one-time load step that records the new audience also sets
every known agent to CLI for those profiles, in the same save and only
when the record was absent, overwriting saved chat choices the old switch
masked. Profiles that had Chat UI on and new profiles are untouched.
Browser profiles keep their own settings, so the web client does the same
once: a stored switch that is not on seeds CLI choices, and dropping the
key marks the step done.
Agents first seen after this step open as chats.
* Agents without a saved Chat | CLI choice open as their CLI
An agent with no saved choice now opens in the terminal for everyone,
including fresh installs and agents first seen later. The one-time load
step carries what launches opened while Chat UI was experimental: with
the switch on, every known agent without a saved choice is saved as
chat; with it off, chat choices the switch masked are saved as CLI.
Existing profiles join the launch tip audience whether the switch was on
or off. Browser profiles get the same carry from their saved key.
The startup chat restore and host agent list now run only when some
agent is saved as chat or the runtime holds chats.
* Chat UI is here: a one-time tip for profiles that upgraded
Profiles saved before Chat UI left Experimental see a "Chat UI is here"
tip once, on the first launch after updating. Fresh installs, unreadable
audience records and the web client never see it.
- Had Chat UI off: says agents can now open as a chat and that the
terminal stays fully supported. "Use Chat UI" saves Chat for every
agent Orca knows (the roster the load step carries), then closes;
"Stay in terminal", close and Escape change nothing.
- Had Chat UI on: says Chat UI is now part of Orca and the terminal
stays supported; one "Got it" closes without changes.
- Both link to Settings -> Agents. The visual is an animated miniature
chat that sends a question, reads a file and draws a flow diagram,
then fades as one and repeats; reduced motion shows the finished
frame.
- The variant comes from main's once-decided audience record over a
new onboarding IPC read; the startup gate waits for it.
- FeatureTipActions takes a secondary label; the frame takes a copy
column class, used here so the buttons line up with the card's
composer. Other tips are unchanged.
- Telemetry: chat_ui_feature_tip_shown and chat_ui_feature_tip_action.
* Preserve owned terminal launches and local chat choices
* Chat UI tip: translate the miniature, honor reduced motion mid-loop
- The miniature's conversation (tab title, prompt, reply, diagram and
arrow labels) is translated in every locale; the composer, permission
chip, working row and Read verb reuse the chat's own strings. File
names, the /login route and the model name stay as written.
- The reply is one paragraph that wraps naturally; words (segmented per
locale, so scripts without spaces still stream) reveal in turn.
Diagram boxes size to their labels and arrow labels never widen the
row.
- Turning reduced motion on mid-loop jumps to the finished still with
no transitions.
- Telemetry records use_chat_ui only after the save succeeds and has a
distinct stay_in_terminal action.
- The dialog renders its own title, so the duplicate catalog copy is
gone; Use Chat UI writes the full roster without re-spreading saved
choices.
- Buttons: the primary's focus ring meets the card's bottom edge.
* Clarify chat and terminal support
* Explain worker CLI integration timeout budget
* Use checked annotations for chat graduation test fixtures
* Store agent surface default separately from per-agent overrides
* Preserve explicit Chat intent across default changes
* Preserve current browser settings during host replies
* Correct browser settings factory and regression types
* Name exported launch fixture mock types and clarify agent defaults
* Preserve settings fallbacks and complete launch test lifecycles
* Check allocated tab identity before launch fixture interpolation
* Drop file links from the Chat UI tip copy
* Register combined integration project for compiler parity probes
* Use checked settings in the launch test fixture
* Settings → Agents: "Open agents as" Chat or Terminal tiles
A new top section in Settings → Agents sets this computer's default for
how agents open: two tiles, Chat ("Rich messages, visuals and images.")
and Terminal ("Each agent's own CLI."), each with a still preview. The
chat preview reuses the tip's copy and flow diagram; the terminal preview
draws Claude Code's interface in the user's terminal theme and font.
- Picking a tile writes only agentDefaultSurface, through the same queue
as the per-agent Chat | CLI rows. The tiles show the saved default; an
agent set on its own row keeps its choice and is not reflected up top.
- If any agent's own choice differs from the new default, one toast names
them ("Claude and Codex stay in the terminal, as you set.") with "Set
all to Chat" / "Set all to Terminal", which drops those choices so they
follow the default. Only agents whose row offers Chat | CLI count. No
toast when nothing differs, and never from the tip.
- "Choose per agent" scrolls to and focuses the Installed list.
- Shown for this computer only (not on a paired host's page); the web
client gets it too. Searchable as "Open agents as".
- Copy in all locales; the tip's intro copy in other locales also drops
"file links", matching English.
* Fix Chat UI settings navigation and acknowledged preference actions
* Keep the agent default surface controls in full Settings
* Keep the per-agent navigation button free of link underlining
* Use checked types and existing presentation primitives for Chat UI tips
* Preserve retired Chat preference data privately
* Align chat E2E fixtures and capture pane lifecycle evidence
* Use typed raw settings in retention contracts
* Fix Chat UI settings search types and localization catalogs
* Consolidate transcript diagnostic imports
* Keep setup-only dependency changes out of the branch
* Update dev education history expectation for Chat UI tip
* test: align chat fixtures with live pane and native menu contracts
* test: capture relay tab selection loss diagnostics
* test: wait for owned shells before synthetic chat fixtures
* test: preserve all-host visibility in SSH observer
* test: bind synthetic transcript fixtures before provider seeding
* test: assert selected chat owner after narrow image preview
* ci: allow fifth compiler project to complete comparison
* Drop 'keeps getting better' from the Chat UI tip's terminal line
* Trim the empty space above the Chat UI tip's visual
* Tighten the space above the Chat UI tip's flow diagram; undo the card resize
* Tighten the Chat UI tip's reply and diagram spacing
* Give the tip's flow diagram a little more room and shorten its tab bar
* Type the web-terminal fixture's chat map without an assertion
* Right-click the selection itself in the chat copy spec
213 lines
6.1 KiB
JSON
213 lines
6.1 KiB
JSON
[
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Idioma",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Langue",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Dil",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Sprache",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "언어",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "言語",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "語言",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "语言",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-advanced-platform-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "ghostty",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-advanced-platform-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Ghostty",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-pane-appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "ghostty",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/terminal-pane-appearance-search.ts",
|
|
"kind": "object-property:keywords",
|
|
"text": "Ghostty",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/sidebar/worktree-card-meta-row.tsx",
|
|
"kind": "jsx-attribute:label",
|
|
"text": "sidebar",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/onboarding/OnboardingLanguageSwitcher.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Switch language",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/component-fixtures/component-fixture-explorer.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Component fixtures",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/component-fixtures/component-fixture-explorer.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "fixtures · files named *.fixture.tsx under src/renderer/src",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/ChatFontFamilySetting.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "fontFamily",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Workspace comment",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Created by automation",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Linked task",
|
|
"dynamic": false,
|
|
"count": 2
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Linked issue",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/lib/worktree-palette-evidence.ts",
|
|
"kind": "object-property:accessibilityLabel",
|
|
"text": "Listening port",
|
|
"dynamic": false,
|
|
"count": 1
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-attribute:title",
|
|
"text": "Claude",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Canonical agent brand in the approved Claude CLI still; preserve the exact brand."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Claude Code",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Canonical CLI product name in the approved terminal still; preserve the exact brand."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "· ~/projects/acme-web",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Literal sample workspace path and CLI separator in the terminal still; paths are not translated."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": ">",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Literal Claude CLI prompt marker in the terminal still; preserve command-line syntax."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "Read",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Actual Claude CLI tool label in the terminal still; preserve the external interface text."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "(src/",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Literal tool-argument path prefix in the terminal still; preserve path and CLI syntax."
|
|
},
|
|
{
|
|
"filePath": "src/renderer/src/components/settings/AgentDefaultSurfacePreviews.tsx",
|
|
"kind": "jsx-text",
|
|
"text": "⎿ Read 84 lines",
|
|
"dynamic": false,
|
|
"count": 1,
|
|
"reason": "Actual Claude CLI tool-result line in the terminal still; preserve the illustrative output and line count."
|
|
}
|
|
]
|