- Document and update the CLI help, specs, and tests to explicitly guide
users toward `orca terminal create --worktree active --command <agent>`
to launch a fresh agent session in the current checkout.
- Update orchestration and orca-cli skills to prefer active-worktree
terminals when dependent on uncommitted files or active branch state,
distinguishing them from separate worktree creation.
* Restore the outlined server card for host headers
Feedback: the bordered card with the server glyph made it clearer that
a host section is a separate machine, not just another group. Bring
that back while keeping the recent quieting: no status dot when
healthy (marks only for connecting/blocked/error/disconnected), no
'This computer' detail on the local host, and collapse/menu/count
behavior unchanged.
Co-authored-by: Orca <help@stably.ai>
* Anchor host badge to its label, indent rows under host cards
Sidebar polish from review:
- The count badge sat in dead space between the label and the
hover-only chevron/menu; it now hugs the label like repo headers
- Rows under a host card get a left inset so projects and workspaces
visibly belong to the machine above them
- A host whose only visible row is a collapsed repo group counted 0
while the group badge said 9; host counts now fall back to header
counts for groups contributing no visible items
Co-authored-by: Orca <help@stably.ai>
* Two-tier sticky headers: pinned host card above pinned group header
When scrolling inside a host section, the host card now stays pinned at
the top (z-30) while project/status group headers hand off beneath it
(z-20, offset by the pinned card height). The host is the outer
hierarchy level, so it is the most persistent context — previously the
first repo header replaced it, losing 'which machine am I on' exactly
when it mattered. The pinned card keeps its collapse/menu/warning
affordances. Handoff rules: the next host card pushes the previous one
out at the viewport top; a group pins only once it reaches the slot
beneath the host card, and a previous host's group can never pin under
the next host. Without host sections the logic degrades to the original
single-tier behavior.
Co-authored-by: Orca <help@stably.ai>
* Revert host-section row indent
The two-tier sticky host card now provides continuous 'inside this
machine' context at any scroll depth, making the static indent
redundant — and it cost 12px of sidebar width on every row while
making multi-host layouts misalign with single-host ones. Host cards
bracketing their sections plus the pinned header carry the ownership
signal on their own.
Co-authored-by: Orca <help@stably.ai>
* Checkpoint multi-host sidebar and project-first notes
Co-authored-by: Orca <help@stably.ai>
* Add project-first compatibility persistence
Co-authored-by: Orca <help@stably.ai>
* Expose project host setup APIs
Co-authored-by: Orca <help@stably.ai>
* Group sidebar rows by project setup
Co-authored-by: Orca <help@stably.ai>
* Document project-first host model discussion
Co-authored-by: Orca <help@stably.ai>
* Resolve workspace creation through project host setups
Co-authored-by: Orca <help@stably.ai>
* Stamp workspace ownership with project host setup
Co-authored-by: Orca <help@stably.ai>
* Add project host setup existing folder API
Co-authored-by: Orca <help@stably.ai>
* Summarize project-first host model discussion
Co-authored-by: Orca <help@stably.ai>
* Add project host setup CLI commands
Co-authored-by: Orca <help@stably.ai>
* Allow CLI worktree creation by project host setup
Co-authored-by: Orca <help@stably.ai>
* Add workspace host setup picker
Co-authored-by: Orca <help@stably.ai>
* Add project host setup settings summary
Co-authored-by: Orca <help@stably.ai>
* Make project host setup settings navigable
Co-authored-by: Orca <help@stably.ai>
* Stabilize project host setup settings selector
Co-authored-by: Orca <help@stably.ai>
* Add project host existing-folder setup form
Co-authored-by: Orca <help@stably.ai>
* Update project host model implementation status
Co-authored-by: Orca <help@stably.ai>
* Keep projects outermost in default sidebar view
Co-authored-by: Orca <help@stably.ai>
* Update project-first sidebar status
Co-authored-by: Orca <help@stably.ai>
* Show host context in project sidebar groups
Co-authored-by: Orca <help@stably.ai>
* Show unavailable hosts in workspace run target
Co-authored-by: Orca <help@stably.ai>
* Import missing project host from composer
Co-authored-by: Orca <help@stably.ai>
* Clone project host setup from composer
Co-authored-by: Orca <help@stably.ai>
* Persist project host setup method
Co-authored-by: Orca <help@stably.ai>
* Clone project hosts over SSH
Co-authored-by: Orca <help@stably.ai>
* Improve SSH clone cancellation cleanup
Co-authored-by: Orca <help@stably.ai>
* Backfill workspace project host ownership
Co-authored-by: Orca <help@stably.ai>
* Gate project host setup runtime capability
Co-authored-by: Orca <help@stably.ai>
* Preserve independent project host setups
Co-authored-by: Orca <help@stably.ai>
* Add project host setup update API
Co-authored-by: Orca <help@stably.ai>
* Add project host setup delete API
Co-authored-by: Orca <help@stably.ai>
* Add project host setup create API
Co-authored-by: Orca <help@stably.ai>
* Expose project host setup lifecycle in renderer store
Co-authored-by: Orca <help@stably.ai>
* Handle independent project host setups in settings
Co-authored-by: Orca <help@stably.ai>
* Add pending host setup action in project settings
Co-authored-by: Orca <help@stably.ai>
* Show pending project host setup status in composer
Co-authored-by: Orca <help@stably.ai>
* Report pending setup state in workspace target resolution
Co-authored-by: Orca <help@stably.ai>
* Use shared host registry for project setup choices
Co-authored-by: Orca <help@stably.ai>
* Add settings clone flow for project host setups
Co-authored-by: Orca <help@stably.ai>
* Gate unavailable project host setup options
Co-authored-by: Orca <help@stably.ai>
* Gate unavailable project setup hosts in settings
Co-authored-by: Orca <help@stably.ai>
* Stream SSH clone progress to renderer
Co-authored-by: Orca <help@stably.ai>
* Update project host model status notes
Co-authored-by: Orca <help@stably.ai>
* Add CLI project host setup clone command
Co-authored-by: Orca <help@stably.ai>
* Make add project host aware
Co-authored-by: Orca <help@stably.ai>
* Complete project host setup validation
Co-authored-by: Orca <help@stably.ai>
* Recover floating workspace terminal WebGL atlas on reopen (#5069)
Co-authored-by: Orca <help@stably.ai>
* Fix stale terminal daemon spawn health (#5064)
Co-authored-by: Orca <help@stably.ai>
* Suspend floating workspace terminal WebGL while the panel is closed (#5073)
Co-authored-by: Orca <help@stably.ai>
* Fix source control branch compare base (#5074)
Co-authored-by: Orca <help@stably.ai>
* Fix workspace-creation tour panel clipped by the Create Worktree dialog (#5078)
* Fix workspace-creation tour panel clipped by the composer dialog
The tour panel portals into dialog/sheet content that clips overflow, but
its position was clamped against the window viewport. With the Project
field spanning nearly the dialog's full width, the panel landed past the
dialog's right edge and overflow-hidden cut it down to a sliver. Clamp
hosted panels within the host's bounds instead, so the panel flips below
the target and stays fully visible.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Add JSDoc docstrings to satisfy CodeRabbit docstring coverage check
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Test hosted contextual tour overlay positioning
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
* release: v1.4.56
* Handle buffer overflows gracefully and truncate diffs fairly (#5083)
- Gracefully fall back to file-name summaries when staged diffs exceed
node/ssh execution maxBuffer limits, preventing generation failures.
- Split oversized diffs by file and allocate budget via water-filling,
ensuring single huge files do not starve smaller human changes.
- Clip truncated diff sections on line boundaries to avoid half-lines.
* Wrap AI generation controls with tooltips and clean i18n dependencies (#5087)
- Wrap the AI generation button in a tooltip so users can see the
disabled reason or the action description on hover.
- Add unit tests verifying tooltip triggers and aria-label safety.
- Simplify memo dependencies in settings metadata and worktree palette
by using 'useTranslation()' to handle language-change rerenders
directly without needing 'i18n.language'.
* fix: address review findings (#5088)
* Fix localization in repository hooks and base ref suggestion toast (#5089)
* Fix localization in base ref toast and custom hook description
- Localize the "commit"/"commits" plural nouns in the base ref toast.
- Translate missing suggestion toast strings for JA, KO, and ZH locales.
- Pass `{{artifact_url}}` as a literal template variable to translate
calls to prevent i18next from treating it as a dynamic placeholder.
* Fix localization reactivity in RepositoryHooksSection
Move static variables containing translation calls into helper functions
and subscribe to translation updates using useTranslation. This ensures
that localized options, descriptions, and error messages refresh
dynamically when the user changes the UI language.
* Fix task page labels after language changes (#5086)
Co-authored-by: Orca <help@stably.ai>
* release: v1.4.57
* Fix automation tabs showing a shell instead of the live agent (#5099)
* Fix automation tabs showing a shell instead of the live agent
Opening a background automation's terminal tab showed a bare shell while
the agent (Claude) kept running headless — the sidebar updated but the
pane was attached to the wrong PTY.
On first mount the restored ptyId equals the tab ptyId, and
isSessionOwnedByWorktree() returns true for it, so connectPanePty routed
the still-live eagerly-spawned PTY into the daemon-reattach branch
(transport.connect({ sessionId })), which spawns a fresh shell and
orphans the live agent PTY instead of adopting it via attach()+replay.
Part A: gate the deferred reattach on the absence of a live eager buffer.
A live eager buffer means the PTY is a still-running local session to
adopt (attach + replay), not a daemon session to re-connect. Daemon
reattach and remote PTYs are unaffected (gated on the eager buffer).
Part B: publish never-mounted background automation tabs into the runtime
graph (gated on a live eager buffer) so the live agent PTY binds to its
real tab instead of surfacing as an orphan `pty:<id>` terminal — fixing
`orca terminal list`, the CLI, and automation session-reuse.
Adds a characterization test (fails on the old code, passes now) and a
runtime-graph publish test.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Harden eager PTY tab adoption
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
* Fix i18n label spacing in menus and settings (#5108)
* fix i18n label spacing
* Fix localized account runtime labels
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
* Improve localization catalog sync workflow (#5110)
Co-authored-by: Orca <help@stably.ai>
* Add Warp terminal theme import (#4714)
Co-authored-by: Orca <help@stably.ai>
* release: v1.4.58
* Tidy README badge layout
* Handle integration credential decrypt failures (#4683)
Co-authored-by: Orca <help@stably.ai>
* Fix git repo telemetry for repo adds (#5121)
Co-authored-by: Orca <help@stably.ai>
* Add feature interaction usage bucket telemetry (#5119)
Co-authored-by: Orca <help@stably.ai>
* Reset WebGL glyph atlases globally to stop cross-terminal glyph corruption (#5122)
Co-authored-by: Orca <help@stably.ai>
* perf(windows): fix 60s startup ACL walk and OpenCode streaming freeze, with benchmark harnesses (#5124)
* release: v1.4.59-rc.0
* Fix packaged shell PATH order (#5125)
Co-authored-by: Orca <help@stably.ai>
* Add Floating Workspace contextual tour (#5062)
* Add floating workspace contextual tour
Co-authored-by: Orca <help@stably.ai>
* Clarify floating workspace tour intro copy
Co-authored-by: Orca <help@stably.ai>
* Differentiate floating workspace tour steps instead of repeating examples
Co-authored-by: Orca <help@stably.ai>
* Lead floating workspace tour with the user benefit
Co-authored-by: Orca <help@stably.ai>
* Pitch floating workspace tour around cross-repo agents
Co-authored-by: Orca <help@stably.ai>
* Refine floating workspace tour step 1 copy
Co-authored-by: Orca <help@stably.ai>
* Anchor floating workspace tour step 2 on the minimize control
Co-authored-by: Orca <help@stably.ai>
* Restore floating workspace tour step 2
Co-authored-by: Orca <help@stably.ai>
* Anchor floating workspace tour steps on New Terminal and New Markdown Note
Co-authored-by: Orca <help@stably.ai>
* Retitle floating workspace tour step 2 as scratchpad
Co-authored-by: Orca <help@stably.ai>
* Add why-comments for tour selector fallback and placement flipping
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Orca <help@stably.ai>
* Fix source control compare base ambiguity (#5127)
Co-authored-by: Orca <help@stably.ai>
* release: v1.4.59-rc.1 [rc-slot:2026-06-10-15]
* release: v1.4.59
* Default-driven create-project flow: name-first form with sensible defaults (#5115)
Co-authored-by: Orca <help@stably.ai>
* Redesign Connect integrations (#4531)
Co-authored-by: Orca <help@stably.ai>
* Expose E2E store via build mode
* File search match counts (#5085)
* Add matchCount to SearchFileResult for accurate per-file hit counts
Co-authored-by: Orca <help@stably.ai>
* Add file search match count design
* rm design doc
---------
Co-authored-by: Orca <help@stably.ai>
* fix: address review findings (#5139)
* perf(windows): avoid blocking daemon pid checks (#5137)
* release: v1.4.60-rc.0
* release: v1.4.60
* Preserve core workflow terms in English and apply CJK spacing (#5141)
* Preserve core workflow and product terms in English across locales
Update translation policy to prevent localization of key terms such as
"Agent", "Commit", "Markdown", and "Terminal". This ensures consistent
jargon and product branding.
Introduce CJK-Latin term spacing to keep these Latin terms legible
when combined with CJK text, while adjusting Korean particle spacing.
Also add overrides to prevent network proxy settings from being
mistranslated as "Agent".
* Preserve repo terminology in English and localize source control labels
Treat "repo" and "repos" (and their capitalized forms) as brand terms
that should remain in English/Latin across CJK and Spanish locales.
Update translation files and policies to replace translated words like
"repositorio" or "リポジトリ" with "repo"/"repos", and fix an issue where
latin brand terms could be incorrectly matched as substrings in larger
words during cleanup.
Additionally, externalize and localize the "Staged Changes", "Changes",
and "Untracked Files" section labels in the source control sidebar.
* UX (#5143)
* UX/copy tweaks (#5142)
* UX/copy tweaks
* UX/copy tweaks
* Fix missed star UI translations (#5148)
* fix: make windows ssh relay deploy survive session teardown (#5136)
* Add option to remove child projects when deleting repo groups (#4702)
Co-authored-by: Orca <help@stably.ai>
* fix: remove checks panel response badge (#5147)
* Add read-only `orca linear` CLI with trusted launch-prompt pointer (V1) (#5126)
Co-authored-by: Orca <help@stably.ai>
* Add AI Vault session history
## Summary
- add AI Vault session scanning and resume command construction
- add the Agents sidebar panel with filtering, grouping, copy/open actions, and local resume launch
- support dragging saved sessions onto terminal split panes
## Validation
- pnpm run lint
- pnpm run typecheck
- pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/register-core-handlers.test.ts src/main/ai-vault/session-scanner.test.ts src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts src/renderer/src/lib/ai-vault-session-drag.test.ts src/renderer/src/lib/launch-ai-vault-session.test.ts
* Default agent launches to yolo permissions mode (#5145)
* Default agent launches to yolo mode
* test: update launch default validations
* Fix Claude usage refresh error copy (#5155)
Co-authored-by: Orca <help@stably.ai>
* Move workspace board to sidebar bottom toolbar (#5146)
Co-authored-by: Orca <help@stably.ai>
* Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (#5154)
Co-authored-by: Orca <help@stably.ai>
* Fix missing spaces in cross-repo switch dialog (#5158)
* Fix Ctrl+Tab switcher selection on release (#5116)
* Fix additional i18n spacing regressions from #4995 (#5159)
* Refine add project selection styling (#5160)
Co-authored-by: Orca <help@stably.ai>
* improve chinese localization (#5162)
* Fix floating workspace needing two clicks after app switch (macOS) (#5128)
* Autofocus feedback textarea when Send Feedback dialog opens (#5164)
* fix: address pr-bug-scan validated finding from #4683 (#5151)
Isolated CredentialDecryptionError per-item in Linear getClients (client.ts:518) and Jira getClients (client.ts:373) on the 'all' selection so one bad credential no longer collapses healthy workspaces
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
* fix: enable claude agent teams by default (#5168)
* Refresh Jira and Linear status after credential errors (#5169)
* fix: address pr-bug-scan validated finding from #4683
Isolated CredentialDecryptionError per-item in Linear getClients (client.ts:518) and Jira getClients (client.ts:373) on the 'all' selection so one bad credential no longer collapses healthy workspaces
* Refresh Jira and Linear status to clear stale credential errors
Ensure stale credential decryption errors are cleared from the store
status once a successful API read completes. By updating the check in
shouldRefreshStatusAfterRead to trigger when a credentialError is
currently set, successful issue or list fetches will trigger a status
check and remove stale error flags.
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
* Hide internal context from AI Vault titles (#5175)
* Fix detached HEAD publish actions (#5173)
* Keep freshly split terminal pane mounted if newborn PTY exits early (#5171)
Prevent a newly split pane from collapsing immediately if its PTY exits
during initial setup before any output is received or input is sent.
This ensures a failed startup session remains visible to the user.
* Route task PR queries by upstream source (#5176)
* Route task PR queries by upstream source
Implements the routing described in docs/tasks-pr-upstream-source.md so task PR and issue queries stay scoped to the selected source.
* rm design doc
* Prevent stale PR refreshes from restoring unlinked review state (#5180)
- Pass `worktreeId` to `fetchPRForBranch` to track active worktree context
- Ignore inflight or queued PR fetches if the worktree has been unlinked
- Include linked PR/MR metadata in the checks panel snapshot key to trigger updates immediately on link/unlink events
* Fix Claude agents management status detection (#5179)
Co-authored-by: Orca <help@stably.ai>
* fix: address review findings (#5177)
* Allow resolving selected review comments with AI (#5184)
* Allow resolving selected PR/MR review comments with AI
Users can now select specific unresolved review comments or threads in
the Checks panel sidebar, queue them, and trigger an AI agent to address
them, marking resolved threads on the host upon agent launch.
- Adds checkboxes and action/send buttons to select and queue comments.
- Builds a structured, robust prompt with sanitized comment metadata.
- Optimistically marks threads resolved on launch with rollback on error.
- Supports both GitHub PRs and GitLab MRs.
* Consolidate PR comment selection state and eliminate effects
Combine independent selection states and context-tracking into a single
state object. Derive active selection data and prune ineligible comments
during render using useMemo instead of relying on asynchronous
useEffect synchronization hooks.
* Improve source control action dialog layout and recipe saving UX (#5153)
* Improve source control agent action dialog layout and recipe UX
- Constrain dialog and scroll area heights to prevent viewport overflow.
- Add variable chips to easily insert the base prompt with tooltip previews.
- Keep the recipe save controls visible when a recipe is already saved, showing informational status text instead of hiding them.
- Update localized copy across multiple languages and reduce textarea rows.
- Add unit tests for the variable chip preview and save target visibility.
* Fix recipe-saved check in source control action dialog
* Evaluate only the selected save target instead of checking all available targets, as the action only writes to the selected target.
* Update daemon PTY adapter test fake PID to prevent collision with real host OS processes during runtime directory lookups.
* fix: remove unsupported agent launch defaults (#5185)
* Update Chinese and Japanese translations for worktrees and fixes (#5187)
- Correct awkward Chinese translation of "fix" ("使固定") to "修复" and "基本的" to "主工作树" (main worktree).
- Improve Japanese translation of "fix" from physical repair ("修理") to software correction ("修正").
* Embed hosted review creation composer directly in Checks panel (#5140)
* Embed hosted review creation composer directly in the Checks panel
- Replaces the modal pull request/merge request creation dialog with an
inline composer embedded in the empty state of the Checks sidebar.
- Extracts and moves pull request generation state to a dedicated store
slice so AI-generated details are persisted across sidebar unmounts.
* Fix hosted review composer feedback
* Combine file search and file explorer right sidebar tabs (#5182)
Unifies file discovery and tree navigation under a single Explorer domain, simplifying the right sidebar activity bar and reducing tab clutter.
* Replaces the standalone 'search' activity bar tab with a nested 'search' subview inside the File Explorer tab
* Introduces 'rightSidebarExplorerView' ('files' | 'search') state to manage the active subview inside the Explorer
* Adds a search button to the File Explorer toolbar and a back button to the search subview for seamless transition
* Exposes 'showRightSidebarFiles' and 'showRightSidebarSearch' store actions to route and seed search queries/include patterns
* Adapts file explorer keybindings, git status polling, and external workspace watchers to respect the active subview
* Maps legacy persisted search tab state to the new explorer search view for backward compatibility
* release: v1.4.61-rc.1
* Add multi-repo folder workspaces (v1) (#5172)
Co-authored-by: Orca <help@stably.ai>
* release: v1.4.61-rc.2
* Hide unavailable project hosts in worktree composer
Co-authored-by: Orca <help@stably.ai>
* Remove inline project host setup from composer
Co-authored-by: Orca <help@stably.ai>
* Mark imported project host setup methods
Co-authored-by: Orca <help@stably.ai>
* Fix rebase merge fallout
Co-authored-by: Orca <help@stably.ai>
* Disable unavailable Add Project hosts
Co-authored-by: Orca <help@stably.ai>
* Compact Add Project host selector
Co-authored-by: Orca <help@stably.ai>
* Hide redundant SSH target chooser
Co-authored-by: Orca <help@stably.ai>
* Browse SSH clone destinations
Co-authored-by: Orca <help@stably.ai>
* Avoid local clone defaults for SSH hosts
Co-authored-by: Orca <help@stably.ai>
* Polish host-aware Add Project flows
Co-authored-by: Orca <help@stably.ai>
* Polish remote host add project flows
Co-authored-by: Orca <help@stably.ai>
* Remove redundant host kind chips
Co-authored-by: Orca <help@stably.ai>
* Fix remote project setup UX gaps
Co-authored-by: Orca <help@stably.ai>
* Fix multihost workspace composer project identity
Co-authored-by: Orca <help@stably.ai>
* Finish host context merge repair
Co-authored-by: Orca <help@stably.ai>
* Continue host context checklist implementation
Co-authored-by: Orca <help@stably.ai>
* Route Linear and Jira tasks by source context
Co-authored-by: Orca <help@stably.ai>
* Preserve Linear task source context in history
Co-authored-by: Orca <help@stably.ai>
* Scope task retry state by source context
Co-authored-by: Orca <help@stably.ai>
* Route GitHub drawer reads by source context
Co-authored-by: Orca <help@stably.ai>
* Guard GitLab selectors with repo context
Co-authored-by: Orca <help@stably.ai>
* Guard GitHub metadata selectors
Co-authored-by: Orca <help@stably.ai>
* Route GitHub task row actions by source context
Co-authored-by: Orca <help@stably.ai>
* Update GitHub source-context checklist status
Co-authored-by: Orca <help@stably.ai>
* Show host ownership for CLI provider accounts
Co-authored-by: Orca <help@stably.ai>
* Persist GitLab task detail source context
Co-authored-by: Orca <help@stably.ai>
* Show host scope for provider API budgets
Co-authored-by: Orca <help@stably.ai>
* Preserve Jira task source context
Co-authored-by: Orca <help@stably.ai>
* Scope Jira optimistic task patches
Co-authored-by: Orca <help@stably.ai>
* Resolve task PR bases on run host
Co-authored-by: Orca <help@stably.ai>
* Record Jira task workspace usage
Co-authored-by: Orca <help@stably.ai>
* Scope Linear optimistic task patches
Co-authored-by: Orca <help@stably.ai>
* Scope GitHub optimistic task patches
Co-authored-by: Orca <help@stably.ai>
* Clean host copy in onboarding flows
Co-authored-by: Orca <help@stably.ai>
* Preserve automation CLI run context
Co-authored-by: Orca <help@stably.ai>
* Add automation CLI source context selector
Co-authored-by: Orca <help@stably.ai>
* Clarify unavailable task source hosts
Co-authored-by: Orca <help@stably.ai>
* Surface host model runtime capability skew
Co-authored-by: Orca <help@stably.ai>
* Use SSH host copy in reconnect dialog
Co-authored-by: Orca <help@stably.ai>
* Show host context in task source picker
Co-authored-by: Orca <help@stably.ai>
* Mark task source display complete
Co-authored-by: Orca <help@stably.ai>
* Clarify provider account host selection
Co-authored-by: Orca <help@stably.ai>
* Guard task source switching boundary
Co-authored-by: Orca <help@stably.ai>
* Mark task source diagnostics persisted
Co-authored-by: Orca <help@stably.ai>
* Mark base resolution host boundary
Co-authored-by: Orca <help@stably.ai>
* Clarify external automation source states
Co-authored-by: Orca <help@stably.ai>
* Harden project host compatibility projection
Co-authored-by: Orca <help@stably.ai>
* Finish host copy audit
Co-authored-by: Orca <help@stably.ai>
* Add provider host scope controls
Co-authored-by: Orca <help@stably.ai>
* Show task source account labels
Co-authored-by: Orca <help@stably.ai>
* Show automation run context in CLI
Co-authored-by: Orca <help@stably.ai>
* Scope Jira task cache lookups by source
Co-authored-by: Orca <help@stably.ai>
* Seed workspace creation from task source context
Co-authored-by: Orca <help@stably.ai>
* Explain disabled external automation actions
Co-authored-by: Orca <help@stably.ai>
* Surface task source runtime capability gaps
Co-authored-by: Orca <help@stably.ai>
* Persist automation run context from UI saves
Co-authored-by: Orca <help@stably.ai>
* Require workspace run capability for setup hosts
Co-authored-by: Orca <help@stably.ai>
* Disable automation runs for stale host setup
Co-authored-by: Orca <help@stably.ai>
* Route GitHub drawer metadata by source host
Co-authored-by: Orca <help@stably.ai>
* Guard runtime project setup mutations by host model
Co-authored-by: Orca <help@stably.ai>
* Route PR page metadata by repo host
Co-authored-by: Orca <help@stably.ai>
* Route PR mention metadata by repo host
Co-authored-by: Orca <help@stably.ai>
* Route GitHub Project edits by view source
Co-authored-by: Orca <help@stably.ai>
* Clarify runtime automation disabled states
Co-authored-by: Orca <help@stably.ai>
* Guard runtime automation backend dispatch
Co-authored-by: Orca <help@stably.ai>
* Preserve GitLab task source identity
Co-authored-by: Orca <help@stably.ai>
* Remove redundant SSH target row in add project
Co-authored-by: Orca <help@stably.ai>
* Add task source provider availability reasons
Co-authored-by: Orca <help@stably.ai>
* Surface task provider preflight availability
Co-authored-by: Orca <help@stably.ai>
* Record local GitHub task source verification
Co-authored-by: Orca <help@stably.ai>
* Record Linear task source verification
Co-authored-by: Orca <help@stably.ai>
* Show automation source context in details
Co-authored-by: Orca <help@stably.ai>
* Record remote capability negotiation coverage
Co-authored-by: Orca <help@stably.ai>
* Record local add project create verification
Co-authored-by: Orca <help@stably.ai>
* Scope Linear cached task reads by source
Co-authored-by: Orca <help@stably.ai>
* Preserve PR generation host ownership
Co-authored-by: Orca <help@stably.ai>
* Route git operations by owner host
Co-authored-by: Orca <help@stably.ai>
* Route delete warnings by worktree owner
Co-authored-by: Orca <help@stably.ai>
* Route editor drops by worktree owner
Co-authored-by: Orca <help@stably.ai>
* Route agent draft paste by tab owner
Co-authored-by: Orca <help@stably.ai>
* Route file explorer requests by worktree owner
Co-authored-by: Orca <help@stably.ai>
* Document remaining host context gaps
Co-authored-by: Orca <help@stably.ai>
* Check runtime task source provider auth
Co-authored-by: Orca <help@stably.ai>
* Validate automation source availability
Co-authored-by: Orca <help@stably.ai>
* Route remaining UI requests by owner host
Co-authored-by: Orca <help@stably.ai>
* Route quick open file listing by worktree owner
Co-authored-by: Orca <help@stably.ai>
* Route typed GitHub lookups by source host
Co-authored-by: Orca <help@stably.ai>
* Centralize automation run identity fallback
Co-authored-by: Orca <help@stably.ai>
* Surface unsupported task source providers
Co-authored-by: Orca <help@stably.ai>
* Document automation legacy repo compatibility
Co-authored-by: Orca <help@stably.ai>
* Record live host model verification
Co-authored-by: Orca <help@stably.ai>
* Quiet disconnected SSH polling
Co-authored-by: Orca <help@stably.ai>
* Verify task drawer source boundaries
Co-authored-by: Orca <help@stably.ai>
* Verify GitLab repo source selectors
Co-authored-by: Orca <help@stably.ai>
* Route automations through owning host
Co-authored-by: Orca <help@stably.ai>
* Update host context verification checklist
Co-authored-by: Orca <help@stably.ai>
* Run remote automations headlessly in serve mode
Co-authored-by: Orca <help@stably.ai>
* Keep setup guide entry stable during refresh
Co-authored-by: Orca <help@stably.ai>
* Keep setup script prompt stable during host switches
Co-authored-by: Orca <help@stably.ai>
* Deduplicate Tasks project picker sources
Co-authored-by: Orca <help@stably.ai>
* Use project identity for Tasks picker dedupe
Co-authored-by: Orca <help@stably.ai>
* Add Tasks source host switcher
Co-authored-by: Orca <help@stably.ai>
* Refine Tasks source picker disclosure
Co-authored-by: Orca <help@stably.ai>
* Polish Tasks source picker hover
Co-authored-by: Orca <help@stably.ai>
* Open Tasks source menu on hover
Co-authored-by: Orca <help@stably.ai>
* Match Tasks source submenu hover behavior
Co-authored-by: Orca <help@stably.ai>
* Open Tasks source submenu from project row hover
Co-authored-by: Orca <help@stably.ai>
* Group automation project hosts
Co-authored-by: Orca <help@stably.ai>
* Tighten automation project picker density
Co-authored-by: Orca <help@stably.ai>
* Show selected host in Tasks project picker
Co-authored-by: Orca <help@stably.ai>
* Hide host labels for single-host project pickers
Co-authored-by: Orca <help@stably.ai>
* Use saved remote server names in host pickers
Co-authored-by: Orca <help@stably.ai>
* Use standard add project start for remote servers
Co-authored-by: Orca <help@stably.ai>
* Use saved host labels in workspace surfaces
Co-authored-by: Orca <help@stably.ai>
* Route remote browser tabs through runtime hosts
Co-authored-by: Orca <help@stably.ai>
* Keep sidebar project-first across grouping modes
Co-authored-by: Orca <help@stably.ai>
* Polish multi-host remote runtime UX
Co-authored-by: Orca <help@stably.ai>
* Fix CI lint and remove design notes
Co-authored-by: Orca <help@stably.ai>
* Fix CI test failures
Co-authored-by: Orca <help@stably.ai>
* Fix Windows CLI path expectation
Co-authored-by: Orca <help@stably.ai>
* Fix CI renderer test expectations
Co-authored-by: Orca <help@stably.ai>
* Fix remaining verify test failures
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Bryant Ung <bryant.ung@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Co-authored-by: Borja <3930245+BorjaLL@users.noreply.github.com>
Co-authored-by: Parker Rex <me@parkerrex.com>
Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Co-authored-by: Trevin Chow <trevin@trevinchow.com>
Co-authored-by: buf0-bot[bot] <252831055+buf0-bot[bot]@users.noreply.github.com>
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
The `worktree.set` RPC already accepts `workspaceStatus`, but the CLI
handler never forwarded it, so the board status could not be changed
from the command line. Pass the flag through, document it in the spec
and root help, and add a CLI test mirroring the existing --comment case.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* WIP: Changes before auto-review fixes
Co-authored-by: Orca <help@stably.ai>
* fix: address auto-review-fix-multi-agent findings
- Replace local ORCA_WORKTREE_ID_SEPARATOR with shared WORKTREE_ID_SEPARATOR
- Make hydrateLocalPtyRegistryAtBoot idempotent (one-shot per process,
but stays retry-eligible until daemon provider is available)
- Strengthen daemon-pty-adapter strict-parser test to actually exercise
the new short-circuit (test would have passed under the old loose
parser too without the change)
- Add eslint-disable max-lines directive to oversized merge test file
Co-authored-by: Orca <help@stably.ai>
* chore: archive auto-review context to .context/
Co-authored-by: Orca <help@stably.ai>
* fix: address auto-review-fix findings
Drop the destructive reconcileOnStartup call from boot-time PTY registry
hydration: a transient listRepoWorktrees failure (returns [] and only
warns) would otherwise let the reconcile pass kill live local sessions.
The boot path is now read-only against the daemon — listSessions() only.
Also: tighten parsePtySessionId to reject degenerate `::` halves; replace
stale pty.ts:1005 references and a misleading local-unknown comment in
the hydrate module; narrow Store dependency to Pick<Store, 'getRepos'>;
log adapter listSessions failures instead of silently swallowing them;
re-anchor design-doc references on stable symbols and align §1b/§1c/§1d
with the implementation.
Co-authored-by: Orca <help@stably.ai>
* docs(resource-usage): update remote badge spec
Co-authored-by: Orca <help@stably.ai>
* test(resource-usage): cover boot hydration failure modes + warm-reattach e2e
Adds the regression coverage flagged in PR #1667's test plan that wasn't
already locked down.
vitest (`hydrate-local-pty-registry.test.ts`):
- daemon offline at first call → no-op, hasHydrated stays false so a
later macOS dock re-activation can retry.
- listSessions rejection caught and logged, does not throw.
- pid-write ordering: a pre-existing registry entry with pid=12345 is
not clobbered by a stale `pid: null` from listSessions (§1d).
- SSH-gate: a session whose repo has a non-null connectionId stays out
of the registry, mirroring the spawn-time gate in pty.ts.
- Happy-path: a local session is registered with the daemon's pid.
Playwright e2e (`resource-usage-warm-reattach.spec.ts`):
Full quit→relaunch cycle against the same userDataDir; asserts that
on the second launch the snapshot includes the warm-reattached PTY
with a real pid before any pane mount, and that the seeded repo
resolves as local (no connectionId). Mirrors the existing
terminal-restart-persistence pattern.
Co-authored-by: Orca <help@stably.ai>
* fix(test): satisfy Pick<Store, 'getRepos'> in hydrator vitest
CI typecheck failed because FakeStore's getRepos returned objects missing
Repo's required fields (path, displayName, badgeColor, addedAt). Fill with
placeholder values; the hydrator only reads id + connectionId, but the
type signature still has to line up.
Co-authored-by: Orca <help@stably.ai>
* chore(resource-usage): drop bug-doc files; strip dead doc refs from comments
Remove docs/resource-usage-remote-mislabel.md (new in this PR) and revert
docs/resource-usage-merge-spec.md to the PR-base state. Strip the
matching `docs/...md §N` pointers from code/test comments, keeping the
surrounding "why" explanations intact so readers still get the
warm-reattach mislabel context.
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Orca <help@stably.ai>
* feat(cli): add browser tab profile controls
* feat(cli): add tab profile automation primitives
* refactor(cli): narrow tab profile automation scope
* chore: retrigger PR checks
* review: harden tab profile automation CLI
- Wait for tab re-registration after browser.tabSetProfile so a follow-up tab list --show-profile reads the new sessionProfileId from BrowserManager instead of the stale one from the previous webview
- Wait for tab registration after browser.tabProfileClone, matching browser.tabCreate, so the cloned browserPageId is operable when the CLI returns
- Short-circuit browser.tabSetProfile when the tab is already on the requested profile so we do not tear down and remount the webview for a no-op switch
- Switch TabShow.worktree from OptionalPlainString to OptionalString to match every other tab schema; empty --worktree should fall back to the active worktree, not pass through as the empty string
- Add max-lines disable to browser.test.ts (file grew past 300 lines after adding the new tab-profile and tab-show tests)
* review: fix useIpcEvents test setup for tab profile API
CI failure: useIpcEvents.test.ts threw at module load with TypeError: window.addEventListener is not a function. The chain: the rebased useIpcEvents.ts imports destroyPersistentWebview from webview-registry, which calls window.addEventListener at module load. The test stubs window via vi.stubGlobal as a plain object without addEventListener, so the typeof window check passes but the call throws.
- webview-registry.ts: tighten the module-load guard to also check that window.addEventListener is callable, so importing this module from a non-DOM-ish test env (vitest node env with stubbed window) does not throw at module load
- useIpcEvents.test.ts: add the new onRequestTabSetProfile and replyTabSetProfile stubs to all 8 window.api.ui mocks so the new IPC subscription registered by useIpcEvents resolves
* review: restore profile CRUD lost during rebase onto 1397-merged main
The rebase brought commit 3242aa27 (refactor: narrow tab profile automation scope) onto a main that already had the lifecycle CRUD from 1397. The refactor commit removes BrowserProfileList/Create/Delete types, runtime methods, RPC registrations and schemas, plus the help/specs entries, because those were the precursor versions in commit 1 of this branch. Post-rebase those removals land on the hardened versions inherited from main, breaking 1397.
Restore:
- runtime-types.ts: BrowserSessionProfile import; ProfileList/Create/Delete result types
- orca-runtime.ts: ProfileList/Create/Delete result type imports; browserProfileList/Create/Delete methods
- browser-core.ts: ProfileCreate, ProfileDelete schema imports; browser.profileList/profileCreate/profileDelete RPC registrations
- browser-schemas.ts: ProfileCreate, ProfileDelete zod schemas
- help.ts: list/create/delete subcommand lines under Browser Automation
- specs/browser-basic.ts: list/create/delete spec entries
---------
Co-authored-by: Nikolatesla-lj <Nikolatesla-lj@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
* feat(orchestration): transport keepalive + delivered_at split for check --wait
Implements the four §3 fixes from the check-wait design doc:
- §3.1 Transport keepalive: long-poll RPCs (orchestration.check --wait) emit
`{"_keepalive":true}` frames every 10s so neither server nor client tears
the socket down on idle. A `longPoll` admission counter capped at 16 fails
fast with `runtime_busy` when saturated; an AbortController wired through
the RPC dispatcher cancels the inner waiter the moment the socket closes.
- §3.2 delivered_at split: push-on-idle now stamps `delivered_at` instead of
flipping `read`, so the check caller remains the sole consumer of its
queue. Adds a synchronous idempotent schema migration that hard-fails on
error.
- §3.3 inbox/check parity: `orchestration inbox --terminal <handle>` and
`orchestration check --all` agree on the same rows (sequence DESC, no
mark-read). `check --unread=false` kept for one release as a compat shim.
- §3.4 CLI heartbeat: `orca orchestration check --wait` emits JSON heartbeat
lines to stderr every 15s so Claude Code's Bash tool sees continuous
output and doesn't auto-background the subprocess.
Tests: extends runtime-rpc, orca-runtime, envelope-schema, orchestration
method, and formatter suites; adds a subprocess test that spawns the built
CLI and verifies stderr line-flushing, heartbeat cadence, and stdout
cleanliness end-to-end.
Co-authored-by: Orca <help@stably.ai>
* feat(orchestration): preamble rules + heartbeat schema
- Preamble (#7, #15, #9): worker_done body ("3-sentence summary" + reportPath),
BEHAVIOR RULE #1 forbidding AskUserQuestion, heartbeat every 5 minutes with
taskId+dispatchId payload, AFTER YOU SEND grace window.
- Schema v2 migration: adds 'heartbeat' to messages.type CHECK, adds
dispatch_contexts.last_heartbeat_at, gated by user_version PRAGMA with
transactional rebuild + explicit CREATE INDEX to avoid silent perf regress.
- DB helpers: recordHeartbeat (dispatched-only), getStaleDispatches,
getThreadMessagesFor (thread+handle scoped for ask).
Co-authored-by: Orca <help@stably.ai>
* feat(orchestration): coordinator heartbeat + stale detector
Handle incoming 'heartbeat' messages by calling recordHeartbeat keyed on
payload.dispatchId (strict — log-and-skip if missing, no taskId fallback so
a straggler heartbeat from a previously-failed dispatch cannot mask a hung
retry per §5.3.4). On every tick after the 10-minute threshold, emit one
log per stale dispatched row — no auto-fail.
Also threads dispatchId through buildDispatchPreamble so workers can
attribute their heartbeats back to the correct dispatch context.
Co-authored-by: Orca <help@stably.ai>
* feat(orchestration): orca orchestration ask verb
Adds a CLI verb that sends a decision_gate message and blocks on the
coordinator's reply, scoped to the outbound message's thread. Group
addresses (@all, @idle, …) are rejected — fan-out questions must use
send --type decision_gate explicitly.
--json emits bare single-line JSON (bypassing printResult) so workers can
pipe `orca orchestration ask … --json | jq -r .answer` without unwrapping
an RPC envelope; human mode prints just the answer. On timeout the verb
exits 1 and returns {answer: null, timedOut: true}.
This is the CLI surface BEHAVIOR RULE #1 in the dispatch preamble points
workers at instead of AskUserQuestion.
Co-authored-by: Orca <help@stably.ai>
* feat(orchestration): QoL bundle — preamble visibility, status enum, dispatch cross-ref, inbox --full
Addresses four items from ORCHESTRATOR_FEEDBACK:
- #5 preamble visibility: `dispatch-show --preamble` regenerates the preamble
text for a task; `dispatch --inject --dry-run` previews without mutating
state; `dispatch --return-preamble` echoes the injected preamble in the JSON
response so coordinators can audit what a worker received.
- #6 status enum validation: CLI rejects unknown `task-update --status` values
with `invalid status '<x>', expected one of: pending, ready, dispatched,
completed, failed, blocked` before the RPC's generic Zod message. Valid
statuses are listed under Notes in `task-update --help`.
- #13 task-list dispatch cross-ref: `task-list --json` now includes
`assignee_handle` and `dispatch_id` for tasks in status=dispatched via a
read-only LEFT JOIN on dispatch_contexts. Non-dispatched rows keep their
legacy shape so existing consumers are unaffected.
- #14 inbox body visibility: `inbox --full` prints body + payload verbatim;
default output is unchanged (id/from/to/subject only).
No DB migrations; join-only change on dispatch_contexts so the sibling
preamble PR's `last_heartbeat_at` column addition will not conflict.
Co-authored-by: Orca <help@stably.ai>
* fix(worktree): prevent stale-base worktree creation and dispatch
Addresses feedback #16 per DESIGN_DOC_STALE_BASE_FIX.md §0. Four v1
components coordinated by a single shared fetch cache on the runtime:
1. Concurrent-fetch-with-gate in UI create path: `createLocalWorktree`
fires `git fetch` BEFORE the suffix loop / PR probe / path
resolution, then awaits right before `addWorktree` so the new branch
always spawns from a fresh remote tip. Renderer sees a two-phase
spinner via the new `createWorktree:progress` IPC event. The cache
is a `Map<repoPath::remote, Promise<void>>` + 30s success-only
timestamp on `OrcaRuntimeService` (§7.1 — shared with dispatch).
2. Dispatch pre-flight drift guard in `Coordinator.dispatchTask`:
probes `rev-list --left-right --count` against the target worktree
and silently returns (preserves `ready`, no circuit-breaker burn)
when `behind > 20` unless the task spec carries
`allow-stale-base: true`. Parsing strips the flag so it never leaks
into the worker's `--- TASK ---` block.
3. Preamble drift section: populated only when dispatch detected drift.
Workers see `--- BASE DRIFT ---` with the N-most-recent subjects
they don't have, so they can pull them in before running.
4. §3.3 Lifecycle: `.finally()` evicts Map entries on BOTH success and
rejection; timestamp is written ONLY on success. Prevents a single
DNS hiccup from wedging every future create on the repo until
restart, and keeps the freshness window honest.
Defers the DB `allow_stale_base` column (§0.2) and the create-time
warn toast; both can layer in later without migration.
Tests: 35 new/updated unit tests covering drift preamble, dispatch
refusal, spec-text flag parsing, fetch Map eviction after rejection,
freshness-window short-circuit, and concurrent-caller serialization.
Co-authored-by: Orca <help@stably.ai>
* test(orchestration): seed v2 DB in migration hard-fail test
After consolidating the schema bump, fresh DBs are initialized directly at
v3 via createTables(), so the v2→v3 ALTER TABLE is skipped on new installs
and the prior test's stub never fired. Seed a v2-shape file on disk so the
guarded ALTER actually runs and the "simulated migration failure" stub
propagates as intended.
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Orca <help@stably.ai>
Audited and rebased PR 1138. Squashed to remove the original untrusted commit stack; hook execution now requires explicit UI trust or CLI --run-hooks opt-in.