Repository navigation
fix(native-chat): chat copy that promised a retry, an update, or a coming change - #25157
Conversation
…ming change
- Subagent and background-task rows Orca can no longer settle read "status
unavailable" ("2 agents with status unavailable"), not "no recent update",
which implied an update was still coming.
- /compact or /clear refused behind an unconfirmed earlier message says "Wait
for the agent to finish, then try again." There is no Retry for that message.
- The skills menu in SSH chats says skills can't be listed there; a skill typed
by name still goes to the agent.
- A write the host refuses because this agent or location can't run as a chat
says "Orca can't run this agent in a chat here." plus what didn't happen.
- Spanish gains the chat notice, background-task and subagent rows it lacked.
…nd translation fixes - Background-task header counts use one translated sentence per state (stateWorkingCount ... stateIdleCount), so Spanish and French can agree the state with the count; English output is unchanged and pinned by a test. - es: subagent failed/idle/stopped counts and the waiting/blocked reasons read correctly for any count. - fr: "listées" agrees with the feminine "skills" in the SSH skills line. - ja: subagent status-unavailable count uses the 件 counter. - Correct the refusal-table comment: hostUnsupported is also returned and recorded, not only thrown.
Review summaryThe problem. #24594 reworded native chat errors and status rows. Read from the user's side, four of the merged lines still said something untrue:
Spanish was also missing the chat's notice, background-task and subagent rows entirely. What changes for you.
What the review fixed.
What was deferred (not caused by this PR).
Checked and left unchanged.
What was verified.
What wasn't verified.
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review. 📝 WalkthroughWalkthroughAgent-session notices now include a hostUnsupported explanation. Background-task count labels use state-specific translations, and unverifiable statuses say “status unavailable.” SSH skills wording now states that skills cannot be listed. Tests and translations were updated. Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The described copy and Spanish test-expectation updates do not establish a user-facing regression, so no merge-blocking issue is identified. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 1 system. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
hostUnsupportedrefusal copy — thestructured_agent_session_unsupported/hostUnsupportedreason now maps to a newcannotRunHeresentence ("Orca can't run this agent in a chat here.") instead ofnotAvailable, for writes and history reads alike; registered inAGENT_SESSION_WRITE_NOTICE_COPY, the rendererSENTENCESrecord,en.json, anden-runtime-required.json.clientCapabilityMissingandhostDisabledkeepnotAvailable.unverifiablestate word — "no recent update" → "status unavailable" inbackgroundTaskStateWordand the subagent card (single and count forms), so it neither claims an exit nor promises an update. This is shared with the sidebar child-rowreasondetail throughagent-child-row-text.ts, so that surface changes too.- Background-task count sentences —
backgroundTaskCountedStateno longer concatenates a count withbackgroundTaskStateWord; each state gets its own{{value0}} …sentence, letting fr/es agree the count with the state. English/ja/ko/zh read as before; fr/es improve ("2 agents working", not "2 agents fonctionnement"). settleEarlierMessage— now "Wait for the agent to finish, then try again.", dropping the mention of a Retry that isn't on screen.- Skills-menu SSH copy —
skillsUnavailableHostnow says "Skills can't be listed in SSH chats". - Translations — es gains the previously missing
notices,backgroundTasks, andsubagents.statesections (~60 strings); the four reworded lines are hand-translated in fr/ja/ko/zh. All sevenstate*Countkeys exist in all six locales andcannotRunHerein all six. - Tests — refusal notice, autocomplete menus, subagent/background-task rows, history read-error, and the child-row pixel snapshot are updated;
backgroundTask-roster.test.tsadds an exact per-state count-sentence case.
I ran the changed shared/renderer tests plus the child-row parity tests, both web and node typechecks, and all four localization gates locally; everything passes. The new strings are anchored by exact assertions rather than loose matches, so they will fail if the copy regresses. No behavioral, security, or cross-platform concerns found.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
…y-followups # Conflicts: # src/renderer/src/i18n/en-runtime-required.json # src/renderer/src/i18n/locales/es.json # src/shared/agent-session-refusal-notice.ts
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
This run covers the single new commit since the prior pullfrog review — a merge of origin/main — and re-confirms the branch-authored surface is intact.
- Merged
origin/main(b354aab18e) into the branch, resolving three conflicted files.src/shared/agent-session-refusal-notice.tshad been split upstream: the reason-words table moved to the newsrc/shared/agent-session-refusal-reason-words.ts, and the branch'shostUnsupported → cannotRunHereedit (plus itsmessagesUnsettledcomment) landed cleanly in the new file while the old file keeps main's re-export. - Reconciled the
en-runtime-required.jsonandes.jsonlocale conflicts — the branch's rewordedsettleEarlierMessage,cannotRunHere, and per-state background-task count sentences were combined with main's newsendOutcomeLost,receipt,taskList,notices,backgroundTasks, andgoalsections. No duplicate JSON keys were introduced in any of the six catalogs. - Confirmed the four reworded copy lines and their translations (fr/ja/ko/zh/es) survived the merge, along with main's
chatSavedByNewerOrca/updateOrcaToOpenChatadditions thatjournalWrittenByNewerOrca's newhistorystep depends on.
I re-ran the changed shared/renderer tests (136 passing), verify:localization-catalogs, and a duplicate-key scan across all six locale files plus the runtime catalog; everything passes. The merge resolution preserves both sides' work with no dropped changes.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
…o its own PR Restores main's settleEarlierMessage copy in every locale and drops its comment. The refusal's behaviour, not only its words, is being fixed separately.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
This run covers the single new commit since the prior pullfrog review — a revert that narrows the PR's scope.
- Reverted the
/compactunconfirmed-message copy — the branch'ssettleEarlierMessagereword ("Wait for the agent to finish, then try again.") is removed. Main's copy ("Wait for your earlier message to go through, or retry it.") is restored in all six locales,en-runtime-required.json, andagent-session-write-notice-copy.ts, and themessagesUnsettledcomment inagent-session-refusal-reason-words.tsis dropped. The refusal's behaviour fix moves to a follow-up PR, so the PR now matches its own description of three reworded lines.
No test hardcodes the removed value, and the restored strings match main exactly, so the revert is internally consistent. The remaining surface (the cannotRunHere remap, the unverifiable → "status unavailable" word, the per-state background-task count sentences, and the SSH skills copy) is unchanged from the version already reviewed.
deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏
|
Update: scope down to three lines, and screenshots added.
|
…y-followups # Conflicts: # src/renderer/src/components/native-chat/NativeChatBackgroundTaskRun.test.tsx # src/renderer/src/components/sidebar/__snapshots__/subagent-child-row-fallback-pixels.test.tsx.snap
…l-run language test

ELI5
#24594 reworded native chat errors and status rows in plain language. A check of the merged copy from the user's side found lines that still promise something Orca doesn't do, or say less than Orca knows:
This PR rewords three of them, so each line says only what is true. The fourth, the refusal you see when
/compactor/clearis blocked behind an earlier message, moved to a follow-up PR: it needs a behaviour fix, not new words.What Changed
1. Subagent and background-task rows that can no longer change
no recent update/2 agents with no recent updatestatus unavailable/2 agents with status unavailable2. Skills menu in SSH chats
Skills aren't available in SSH chatsSkills can't be listed in SSH chats3. A write refused because this agent or location can't run as a chat
This isn't available in this chat.Orca can't run this agent in a chat here. Your message was not sent.This chat's history couldn't be loaded.Orca can't run this agent in a chat here. This chat's history couldn't be loaded.Chat could not be started. Orca can't run this agent in a chat here.Translations
Only wording changes; there is no behaviour change. Mobile shows the same shared English sentences, so the phone gets item 3 as well.
Why
Two related items were checked and left unchanged:
Linked Issue
Follow-up to #24594.
Visual Proof
Before is main, after is this PR. Each pair shows the same state in a hidden, isolated copy of the app on a Mac, driven through the app's real UI. Each screenshot is the full app window.
1. Subagent card for a subagent that can no longer report (live). A stand-in agent started a background subagent, then the stand-in was ended mid-task.
2. Skills menu in an SSH chat (test hook, not a live SSH chat). The test Mac has no SSH server, so the project was marked as SSH-hosted in the app's memory through the test build's store; the real
/menu then rendered.3. A send refused because this agent can't run in a chat here (seeded state, not a live state). One saved refusal with that reason was written into the chat's local outbox and the window reloaded; the desktop otherwise opens a terminal before this refusal can happen.
Not captured: the background-task strip's summary line (no strip appeared on either build in this state), and the history-pane and chat-start versions of item 3; component tests cover those.
Testing
src/shared/agent-session-refusal-notice.test.ts: every reason × write cell is now pinned with the new wording for "unsupported here" and the old wording for the other two reasons.The read-error, autocomplete, subagent-run, background-task and sidebar child-row tests are updated to the new strings.
background-task-roster.test.ts: a new case pins every state's English count sentence ("2 agents done", "3 stopped"), unchanged from before.Localization checks pass: catalogs, extraction, coverage, and the runtime-required English catalog.
Typecheck: web and node.
I manually tested these changes locally
Automated tests added/updated, or explained why not below
AI Disclosure
Review
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)