Commit Graph
2847 Commits
Author SHA1 Message Date
Neil fb8d6f950b refactor(github): organize concrete feature owners (#41601) 2026-11-12 09:17:26 -08:00
OrcaWinandOrcaWin 7106c8657d test: remove low-value edit, display, and PTY suites (#41606)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 09:03:19 -08:00
OrcaWinandOrcaWin 895cd026c0 test: remove low-value fixture, relay, and recovery cases (#41591)
* test: remove low-value fixture suites and custom scenarios

* test: prune relay and recovery matrices and refresh retained host journey

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 08:32:10 -08:00
Neil 560a22e00f refactor(cli): organize command dispatch and orchestration owners (#41562)
* refactor(cli): organize command dispatch and orchestration owners

* test(orchestration): retire superseded unbound mail refusal case
2026-11-12 08:12:55 -08:00
OrcaWinandOrcaWin 5f0469ca5f test: remove low-value terminal transport and layout cases (#41584)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 07:43:08 -08:00
Neil 382c7cfcb3 refactor(cli): group plugin and skill implementation owners (#41549) 2026-11-12 05:47:35 -08:00
OrcaWinandOrcaWin 3eb2765e66 test: remove low-value script, queue and docs coverage (#41551)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 05:44:15 -08:00
Neil 255b5c22c1 feat(plugins): host API 1.8 — create workspaces, resume agents, automations (#41528)
* feat(plugins): proposed tier for host methods not yet frozen

A method spec may set `proposed: true`: only development plugins may call
it (others get not_permitted), and the minor, frame/worker method lists,
typings and skill references omit it. The reference renders such methods
in a separate Proposed section; dev workers' host.has answers for them.

* feat(plugins): param capabilities, host confirmations, automation provenance

- PluginHostMethodSpec.paramCapabilities: a passed param can require a
  second capability; executePluginHostCall and the mock host refuse it with
  capability_denied before any audit or effect, and the reference shows it.
- confirmPluginAction generalizes the external-open prompt into a host-owned
  confirmation, exposed as PluginHostServices.confirm (desktop only; absent
  in headless serve). It re-checks the plugin's approval after the answer.
- Automations record createdBy { kind: 'plugin', pluginKey, name }, set by
  the runtime from the in-process plugin caller (RpcContext.plugin), never
  from params; the Automations detail shows "Created by <plugin>".

* feat(plugins): workspace:create, automation:read and automation:write capabilities

New closed-enum kinds (older Orcas refuse such manifests with the engines
message), worker-only, with consent copy that names what each allows;
release floor PLUGIN_HOST_API_1_8_SINCE (1.4.259) joins
PLUGIN_SCHEMA_NEWEST_SINCE. agent:launch copy now says it also resumes.

* feat(plugins): host API 1.8 methods: workspace.create, agent.resume, automation.*

- workspace.create (workspace:create; agent also needs agent:launch): a
  worktree in a Git project, as orca worktree create does; with agent, the
  CLI's agent.launch create-worktree path, so the agent starts after setup.
  Setup is skipped or follows the project's settings; never run, an
  approved hash or a startup command.
- agent.resume (agent:launch): terminal.ensureAgentSession by session id;
  started is false when a terminal already ran it. agents.list rows and
  agent.status.changed carry sessionId.
- automation.list/create/update/delete (automation:read/write): create
  forwards only name, prompt, agent, target, schedule, time zone and
  enabled; update/delete of automations another plugin or the person made
  ask the person first and report cancelled or consent-unavailable.

* test(plugins): host API 1.8 coverage; regenerate plugin artifacts

Covers param capabilities (host and mock host), workspace.create payloads
and refusals, agent.resume keys and adoption, sessionId on agents.list,
automation projection, forbidden create fields, confirmation outcomes,
runtime-set provenance and capability access growth. Regenerates the
reference, schemas, typings, declarative runtime and skill references.

* fix(plugins): host API 1.8 review fixes

- Confirmations spend the frame dialog budget, allow one question per
  plugin at a time and pause after a refusal (rate_limited); a worker's
  question shows in the focused window, else the first visible one.
- Changing what an automation with extra agent settings runs (prompt,
  schedule, resuming) asks first even for its creator, showing the prompt.
- Removing, disabling or blocking a plugin pauses its automations and ends
  its ownership (createdBy.endedAt), so neither re-enabling nor a reinstall
  under the key resumes or edits them silently; the remove dialog says so.
- workspace.create and agent.resume record the terminals they return as
  the plugin's own; a launch that fails after its worktree exists names it.
- Setup-decision refusals are told by the runtime's error class (kept as
  the in-process RPC error's cause); generated names see every worktree
  of the project; resume transcripts match the workspace and host.
- Created by shows the plugin id beside its name.

* fix(plugins): end automation ownership only on uninstall, disable or block

- The ownership sweep no longer reads discovery: only an uninstall
  (announced by the removal path), the disabled list, the kill list or
  the plugin-system switch end it, and only once the service is ready,
  so an unreadable plugins folder pauses nothing. An install under the
  same key after a removal keeps what it creates.
- A new time zone on an automation with extra agent settings asks first.
- A failed launch names only a new worktree made from the requested name.
- Settings' plugins-off state and the CLI's plugin system off and plugin
  disable say that plugin-created automations are paused and stay so.

* fix(plugins): address host API 1.8 review threads

- Confirmations close when the worker's call ends, freeing the plugin's
  turn; they name the automation (short id, project, workspace,
  schedule), show any new prompt, and are refused as `changed` when the
  automation was edited while the person was asked.
- automation.create takes hostId (through the project's setup on that
  host) and a creationKey scoped to the plugin; the runtime rechecks the
  plugin's approval right before the write.
- agent.resume records only terminals it started; both it and
  workspace.create recheck approval before recording.
- automation.list never cuts a schedule (null when too long) or fails on
  an id too long to show.
- The Automations detail says when a creator plugin was removed or
  disabled.
2026-11-12 05:28:13 -08:00
OrcaWinandOrcaWin ca228e9329 test: remove 76 low-value runtime and extractor cases (#41547)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 05:26:04 -08:00
Neil 3b5a433247 refactor(cli): group command handlers and support by feature owner (#41534) 2026-11-12 04:33:34 -08:00
Neil c1982f960f ci(e2e): drop routes to deleted e2e specs (#41527) 2026-11-12 04:04:10 -08:00
Neil 9eb2195c64 refactor(ai-vault): group scanner modules by defining owner (#41520)
* refactor(ai-vault): group scanner modules by defining owner

* refactor(ai-vault): consolidate owner imports and isolate path absence

* Preserve mobile CI triggers for extracted absence predicate
2026-11-12 03:44:09 -08:00
OrcaWinandOrcaWin 0be9bc607b test: retire low-value runtime and cache cases (#41518)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 03:41:39 -08:00
Kelvin Amoaba 20a75e4b44 fix(mobile): shrink chat photos to 2000 px before upload (#41514)
Phone photos went up at full size, and agents refuse images over 5 MiB of base64.

Fixes #40844
2026-11-12 11:22:06 +00:00
OrcaWinandOrcaWin 5608ca036b test: retire low-value browser, VM, and telemetry cases (#41515)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 03:17:30 -08:00
OrcaWinandOrcaWin 3626af2097 test: remove low-value runtime and Codex wrapper cases (#41505)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 03:02:13 -08:00
OrcaWinandOrcaWin 831f655b1d test: remove low-value smoke and fixture assertions (#41493)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:25:47 -08:00
Neil d3b6609ac9 refactor(rpc): group root modules by defining owner (#41475)
* refactor(rpc): group root modules by defining owner

* test(orcad): include JSON CLI failures in launcher diagnostics
2026-11-12 02:18:19 -08:00
OrcaWinandOrcaWin 4214d3da1c test: remove low-value input, media, and browser examples (#41484)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:52:38 -08:00
OrcaWinandOrcaWin eb16a6e351 test: remove low-value input and native decoder checks (#41481)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:30:04 -08:00
OrcaWinandOrcaWin 318bf64769 test: remove low-value catalog and shared checks (#41474)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:13:49 -08:00
OrcaWinandOrcaWin c32480d9e1 test: remove low-value shared and CLI checks (#41465)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:01:57 -08:00
OrcaWinandOrcaWin f70465cf3a test: remove low-value renderer adapter and projection checks (#41462)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:42:28 -08:00
Neil fb58871bdb refactor(claude): group root modules by defining owners (#41437) 2026-11-12 00:20:10 -08:00
OrcaWinandOrcaWin 9ee5ec9fa0 test: remove low-value account wrapper and routing checks (#41447)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:04:18 -08:00
Wooseong KimandKelvin Amoaba b4ca378c61 fix(agent-hooks): keep the Claude session model on hook status (#41058)
* fix(agent-hooks): keep the Claude session model on later hook status

SessionStart reports the model, but the Claude handler dropped it, so the
mobile composer chip stayed on "Model". Publish that model and retain it
when later lead and child events omit it.

* fix(agent-hooks): keep the Claude model across an Orca restart

Claude reports its model only on SessionStart. After a restart the listener's
lead state is empty, so the next hook dropped the saved model from the row.

* test: run the Claude model restart test in the node pool

* fix(agent-hooks): keep the Claude model when a terminal status row lands first

* refactor(agent-hooks): read the Claude lead model once to keep claude-events under the line limit

---------

Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
2026-11-12 07:48:50 +00:00
OrcaWinandOrcaWin 4dcf689fb2 test: remove low-value mobile and host policy suites (#41436)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:25:07 -08:00
Jinwoo Hong 4d50c440be perf(orchestration): read released worker output from its original instead of a saved copy (#41374)
* perf(orchestration): read released worker output from its original instead of a saved copy

* fix(orchestration): keep refusal codes on released chat reads and locate legacy remote transcripts

* test(orchestration): prune flaky-pattern baseline for removed archive tests; guard a cursor read

* fix(orchestration): keep locator fields when stripping copies; never let the optional receipt page block remote release

* test(orchestration): drop removed archive tests from the node-runtime test list

* refactor(orchestration): drop the background strip; old rows keep their saved copy and its reader

* fix(orchestration): give reference rows the empty copy fields older Orca reads, with a note

* test(orchestration): give the slow-exit release mock a stored archive body

* fix(orchestration): record a transcript reference only for agents the reader can open
2026-11-12 01:45:22 -05:00
Neil 176943e8fe refactor(mobile-tasks): group modules by concrete feature owners (#41410)
* refactor(mobile-tasks): group modules by concrete feature owners

* refactor(mobile-tasks): consolidate concrete owner imports

* refactor(mobile-tasks): point recording loaders at concrete owners
2026-11-11 22:40:18 -08:00
OrcaWinandOrcaWin affd908567 test: remove narrow parser, policy, and native projection tests (#41407)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 22:30:38 -08:00
HrithikandHrithik Saini 1b940ba30a fix(i18n): improve Korean translations for Undo, Quit, and Stop (#37042)
- auto.components.activity.clearCompleted.undo: '끄르다' -> '실행 취소'
- rendererRecovery.quit: '그만두다' -> '종료'
- components.native-chat.backgroundTasks.stop: '멈추다' -> '중지'
- auto.components.settings.terminal.search.stop: '멈추다' -> '중지'
- Add key overrides to locale-ko-key-overrides.json

Fixes #37042

Adapted from https://github.com/stablyai/orca/pull/37078 by @hrithiksaini99.
Reported and wording proposed by @Tomk2d in #37042.

Co-authored-by: Hrithik Saini <49943287+hrithiksaini99@users.noreply.github.com>
2026-11-11 22:17:09 -08:00
Neil b9e3912ff8 Call orca.dev for feedback, plugin lists and update notes; accept orca.dev share and download links (#41380)
* chore(endpoints): call orca.dev for feedback, plugin lists and update notes

The site moved to orca.dev. Feedback, connection diagnostics, plugin install
stats, the plugin kill list, update nudges and the changelog feed now use
orca.dev, as do the diagnostics token URL baked into builds and the release
download mirror (downloads.orca.dev). The old hosts serve the same paths,
so released builds keep working.

Skill share links on share.orca.dev are accepted, and the mobile scanner
recognizes the orca.dev Android download code. The old hosts stay accepted.

* chore(ci): leave the release JavaScript benchmark workflow unchanged

Editing it triggers the benchmark, whose parity check currently fails on
arm64 because max-quality brotli output for the mobile page differs by
architecture. The benchmark only needs some diagnostics URL, and the old
host still serves it.
2026-11-11 21:50:31 -08:00
Neil a919371cee refactor(codex-accounts): organize concrete domain owners (#41388)
* refactor(codex-accounts): organize concrete domain owners

* test(codex-accounts): retire vacuous account selection case
2026-11-11 21:49:43 -08:00
OrcaWinandOrcaWin 86f23bbb6b test: remove low-value policy and parser samples (#41397)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 21:35:14 -08:00
OrcaWinandOrcaWin 9a04aa89ef test: remove 56 low-value presentation, CLI, and reload tests (#41389)
* test: remove presentation and command-selection inventories

* test: remove CLI and display projection inventories

* test: remove browser reload projection suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 21:08:44 -08:00
Neil e902c9a65b refactor(workspace-layout): organize concrete domain owners (#41350)
* refactor(workspace-layout): organize concrete domain owners

* test(layout): retire obsolete legacy-leaf publication setup
2026-11-11 20:54:34 -08:00
OrcaWinandOrcaWin bbe22681c2 test: remove notification, icon and native policy inventories (#41375)
* test: remove notification and native policy inventories

* test: remove icon projection samples and tray suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:54:07 -08:00
OrcaWinandOrcaWin bedb2bbaf1 test: remove low-value journal, input and capture examples (#41368)
* test: remove low-value journal and smart-key samples

* test: remove low-value journal, input and capture examples

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:32:02 -08:00
OrcaWinandOrcaWin 2d0f453776 test: remove low-value skill, host, and WSL suites (#41358)
* test: remove low-value skill and host-environment suites

* test: remove WSL notice and status mapping samples

* test: record WSL example coverage retired from broad gates

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:04:37 -08:00
Jinjing b80ac94ba4 fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380) (#40539)
* fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380)

A shell auto-title (oh-my-zsh preexec) names the pane `claude` the moment
the command execs. Claude's `idle_title` rule counts that bare name as weak
idle once output has been quiet for 3s, so a Claude that took >3s to draw
its first frame settled `terminal wait --for tui-idle` on a blank screen.
`dispatch --inject` then pasted into a TUI that had not mounted yet and the
prompt was lost.

Name-only idle lanes (agent rule verdicts that require quiet, and the
sustained-title lane) now also require that the running command has painted
something since the shell's OSC 133;C command-start marker. Shells without
the marker keep today's behavior.

* fix(runtime): corroborate Claude's name-only idle with its own composer marker (STA-2380, C1 F1)

Orca's zsh OSC 133;C hook is first in preexec_functions, so a later user or
framework preexec hook (zsh-you-should-use, a custom echo) prints after the
command-start marker and before Claude runs. The any-visible-byte paint latch
counted that text as Claude's paint, so a silent cold start under such a hook
still settled tui-idle ready-weak on the shell's bare `claude` title.

For agents whose worker start already trusts their composer marker (Claude),
"painted" now means that marker (`❯`+NBSP after DECSET 2031, which no shell
sends) arrived since the command started. Other agents keep any-byte paint;
markerless shells and output gaps keep the permissive default.

Evidence: a real-zsh live-shell test under the production wrapper with
oh-my-zsh title-only, p10k/starship-style silent, and you-should-use-style
printing hooks, replayed through the real wait; runtime tests for the hook
text, a boot banner, the positive bare-title + composer path, and worker-start
readiness plus brief delivery timing.

* fix(ci): route command-paint attribution sources to shell_contracts; attribute live-shell bytes by stream offset (STA-2380, C2 F1/F2)

- pr-shell-contract-prefixes: the live-shell test, terminal-command-paint.ts,
  tui-idle-evidence-source.ts and draft-paste-ready-scanner.ts route to the
  shell_contracts job; a routing test reads the job's step from pr.yml and
  asserts every listed test routes there.
- tui-idle-zsh-preexec-hook-order.live-shell.test: locate the DECSET 2031
  anchor by offset in the accumulated stream, split a straddling read, carry
  pending escapes across the shell/agent halves, and assert attribution is
  invariant under coalescing and 3-byte re-chunking.
- terminal-command-paint: disclose the accepted trade-off (a known Claude with
  marker history but no supported composer signal times out; markerless shells
  and output gaps still fail open; no version cutoff claimed).

* test(ci): stream-offset launch-order proof, route tui-idle-evidence.ts, parse the whole shell-contracts step (STA-2380, C3-1/2/3)

- live-shell test: assert the launch order on the joined bytes by stream
  offset (133;C, then the user hook's output, then the agent's anchor and
  composer); no read-boundary or timestamp assertions remain. Re-chunk
  cases add a split anchor and a shell-tail/agent-start coalesced read.
- pr-shell-contract-prefixes: route tui-idle-evidence.ts, the readiness
  evaluator the live-shell replay exercises.
- routing ratchet: read the step's run script through the YAML parser so
  a blank line or later command cannot truncate it; cross-check against
  the real-shell tests UNIT_EXCLUDE drops so a dropped entry fails rather
  than a smaller count; fixture tests for blank line, exact list, missing
  step.

* test(ci): answer compinit's insecure-directory prompt in the zsh preexec live-shell test (STA-2380)

Ubuntu's global zshrc runs a plain compinit, which on CI runners stops at
"Ignore insecure directories and continue [y] or abort compinit [n]?"
before zle exists, so the stand-in never launched and the shell-contracts
job failed with "no composer frame from the stand-in". Answer the prompt
with y as zsh-startup-hook-pty-harness.ts does. The prompt bytes precede
Orca's OSC 133;C marker, so stream-offset attribution is unchanged.
2026-11-11 19:57:53 -08:00
Brennan Benson 79cf868097 Capture executing stacks and machine state for hangs (#41027)
* Preserve bounded diagnostics for main-thread stalls and observer gaps

* Use a typed file-read fault injection in watchdog coverage

* Record reviewed incident-only watchdog file operations

* Clarify watchdog snapshot types and validated parser conversions

* Place validated object assertion rationale at its conversion

* Capture executing stacks after main and renderer hangs

* Preserve hang capture progress through late cleanup and reporting

* Publish renderer hang baseline before collecting stacks

* Service capture cleanup in packaged watchdog smoke

* Release native capture after dependency load failure
2026-11-11 19:48:48 -08:00
OrcaWinandOrcaWin 1cc94fdfd6 test: remove low-value workspace and launch suites (#41336)
* test: remove low-value workspace and launch coverage

* test: prune removed orphan cleanup timer baseline

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 19:03:54 -08:00
OrcaWinandOrcaWin 6f2e3bde15 test: remove low-value GitHub and launch-default coverage (#41326)
* test: remove low-value GitHub client projections and inventories

* test: remove launch default projection suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 18:20:23 -08:00
OrcaWinandOrcaWin e58bf50c78 test: remove query-plan and eligibility test noise (#41323)
* test: remove internal query-plan assertions

* test: remove startup sweep plan-only suite and mailbox plan observer

* test: remove terminal link grant metadata suite

* test: trim hosted review eligibility projections and probe inventories

* test: keep peer reply selection without query plan assertions

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 18:08:58 -08:00
Neil a0f1cb0ee2 refactor(git): group root modules by concrete domain owners (#41322)
* refactor(git): group root modules by concrete domain owners

* chore(git): reconcile retired-test metadata with owner cleanup
2026-11-11 18:02:15 -08:00
OrcaWinandOrcaWin 252cfa3efd test: remove 34 low-value tests, including five whole suites (#41321)
* test: remove low-value startup and usage suites

* test: drop redundant form driver and lease recipes

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 17:40:04 -08:00
Neil 04158606b5 refactor(git): group command execution by concrete owners (#41316) 2026-11-11 17:05:03 -08:00
Brennan Benson 175f10e32b Run local usage services in a supervised backend process (#40792)
* Move local usage services into a supervised backend process

* Own usage recovery and worker retirement lifetimes

* Preserve answered usage data during background refresh

* Run independent usage scans concurrently in the backend

* Limit backend startup paths to the delegated usage service

* Show usage failures through backend recovery

* Include usage failure strings in the English catalog

* Keep usage update details beside refresh failures

* Resolve usage freshness failure from the final producer snapshot

* Retain the forced refresh completion requirement

* Keep managed backend failures out of application crash reports

* Preserve usage recovery boundaries across backend reconnects

* Match the backend RPC cancellation signal in the usage seam proof

* Avoid serializing backend requests before port delivery

* Keep receiving request validation in the boundary schemas

* test: align usage transport coverage with renderer project

* fix: preserve unknown usage state and renderer retirement

* fix(usage): revalidate tracking before scan admission

* fix(usage): retry failed backend startup on demand

* test(usage): isolate stale backend ownership checks
2026-11-11 16:39:52 -08:00
Brennan Benson 890ad4d8aa Prevent new blocking work on Electron main in CI (#41263)
* WIP: guard blocking main-process APIs with file ratchets

* Cover declared SQLite receivers and preserve daemon guards

* Cover SQL iteration and shared synchronous IPC in ratchets
2026-11-11 16:24:55 -08:00
OrcaWinandOrcaWin 4509730131 test: remove repeated wiring and suspended orchestration suites (#41302)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 16:16:48 -08:00