From 894caf9845cc59dae91b8bea8fff48cf87805165 Mon Sep 17 00:00:00 2001 From: RSI smoke Date: Tue, 13 Oct 2026 02:16:54 -0600 Subject: [PATCH 1/2] docs: add loop.ts slim-down plan for #127 (planning only) --- PLAN.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 PLAN.md diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..78e88c0 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,49 @@ +# PLAN — Issue #127 slice: engine `loop.ts` slim-down (tests-first) + +## Goal + +Reduce [`src/engine/loop.ts`](src/engine/loop.ts:1) (6567 lines; `HeadlessSession` class at [`src/engine/loop.ts`](src/engine/loop.ts:1363)) toward [`docs/typescript-standards.md`](docs/typescript-standards.md:1) (250-line files, 20-line functions) via tests-first extraction into cohesive modules. No behavior change. If the file is too big to finish, land a coherent partial split with tests + green gates, not a sprawling WIP. + +## Scope boundaries (hard) + +- Owns ONLY [`src/engine/loop.ts`](src/engine/loop.ts:1) + new `src/engine/*` modules + `src/engine/__tests__/*` tests + regenerated baselines. A sibling worker owns `src/orchestrator/cli.ts` + `resume.ts` — do NOT touch them. +- No behavior change: pure moves + thin delegation. Keep all call sites compiling. + +## Step 0 — Measure (record numbers for the closing report) + +1. `npm run coverage -- --filter engine` → record module %. +2. `npm run check-standards` and `npm run check-architecture` → record live violation counts for `loop.ts`. +3. `npx tsc --noEmit` and `npm test` → confirm green baseline before touching anything. + +## Step 1 — Tests FIRST (repo style: `src/*/__tests__/*.test.ts` via `tsx`, auto-discovered by [`scripts/run-tests.mjs`](scripts/run-tests.mjs:1)) + +Match the style of existing [`src/engine/__tests__/loop.test.ts`](src/engine/__tests__/loop.test.ts:1) and siblings (`switch-mode`, `new-task`, `condense`, `pause`, `inject-message`, `iteration-boundary` tests in [`src/engine/__tests__`](src/engine/__tests__:1)). Do not reshape anything until its tests exist and pass. + +Add missing unit tests for every function you will touch, in this order: + +1. Free helpers (cheapest, no session fixture): [`summarizeToolArg`](src/engine/loop.ts:6300), [`truncateHistory`](src/engine/loop.ts:6474), [`stripSupersededReasoning`](src/engine/loop.ts:572), [`isReadOnlyDirectCall`](src/engine/loop.ts:361)/[`isReadOnlyTurnCall`](src/engine/loop.ts:379), [`artifactRejectionNudgeMessage`](src/engine/loop.ts:524), env readers ([`envMaxPauseMs`](src/engine/loop.ts:6493) through [`envStreaming`](src/engine/loop.ts:6560)), [`messagesPrefixEquals`](src/engine/loop.ts:6415), [`sameToolNames`](src/engine/loop.ts:6387). Extend `summarize-tool-arg.test.ts` / add `loop-helpers.test.ts` (keep each test file ≤ 250 lines per standards). +2. Condensation methods: [`maybeCondenseHistory`](src/engine/loop.ts:2584), [`fireBackgroundCondense`](src/engine/loop.ts:2862), [`applyBackgroundCondense`](src/engine/loop.ts:2985), [`recordCondensationUsage`](src/engine/loop.ts:3103) — extend `condense*.test.ts` pattern with a fake `LlmClient` + `BudgetTracker`. +3. Iteration boundary/aux: [`runIterationBoundaryHook`](src/engine/loop.ts:2240), [`scheduleAux`](src/engine/loop.ts:2342)/[`drainAuxWrites`](src/engine/loop.ts:2357), [`checkPauseRequested`](src/engine/loop.ts:2439), [`checkInjectedMessage`](src/engine/loop.ts:2523). +4. Only then touch [`runIterations`](src/engine/loop.ts:3416) (~2070 lines, ends before [`initCheckpoints`](src/engine/loop.ts:5488)) and handlers [`handleNewTask`](src/engine/loop.ts:5662), [`handleSwitchMode`](src/engine/loop.ts:5842), [`handleExtensionManage`](src/engine/loop.ts:5595)/[`handleExtensionCall`](src/engine/loop.ts:5641) — cover via existing `new-task`/`switch-mode`/`iteration-boundary` test patterns first. + +## Step 2 — Refactor (phased; stop at a coherent partial if needed) + +Follow the existing precedent modules (`condense.ts`, `handoff.ts`, `reports.ts`, `usage.ts`, `events.ts`, `lazy-tools.ts`, `local-explore.ts` in [`src/engine`](src/engine/loop.ts:1) dir listing). Each extraction = move + re-export/delegate from `loop.ts` so call sites keep compiling; one commit per module. + +- Phase A (free helpers, lowest risk): extract `src/engine/loop-helpers.ts` — `summarizeToolArg`, `truncateHistory`, `stripSupersededReasoning`, read-only predicates, artifact/citation helpers ([`countVerifiedCitations`](src/engine/loop.ts:613), [`matchingArtifactFileStatus`](src/engine/loop.ts:649)), env readers, `messagesPrefixEquals`/`sameToolNames`, `estimateTokenSize` ([`src/engine/loop.ts`](src/engine/loop.ts:6283)). +- Phase B (condensation): extract `src/engine/loop-condense.ts` — `maybeCondenseHistory`, `fireBackgroundCondense`, `applyBackgroundCondense`, `recordCondensationUsage`, `recordHandoffCondensationUsage` ([`src/engine/loop.ts`](src/engine/loop.ts:3135)). Keep thin methods on the class delegating to functions taking an explicit state/options object (params rule: ≤ 5 params — bundle into options). +- Phase C (handlers): extract `src/engine/loop-handlers.ts` — `handleNewTask`, `handleSwitchMode`, `handleExtensionManage`, `handleExtensionCall`, `handleListTools` ([`src/engine/loop.ts`](src/engine/loop.ts:6056)), `handleActivateSkill` ([`src/engine/loop.ts`](src/engine/loop.ts:6060)), `handleReadSkillReference` ([`src/engine/loop.ts`](src/engine/loop.ts:6083)), `handleRequestTool` ([`src/engine/loop.ts`](src/engine/loop.ts:6105)). +- Phase D (only if A–C green with budget left): carve sub-steps out of `runIterations` (per-iteration helpers: LLM call via [`callMainLlm`](src/engine/loop.ts:3315), tool-dispatch block, stall/nudge block, completion-verification block) into `src/engine/loop-iterations.ts`. Do NOT attempt to move all of `runIterations` in one commit. + +Rules per move: ≤ 250-line new files, ≤ 20-line functions (split further if needed), full type annotations, no `any`, no suppression comments, tabs/double-quotes/no-semicolons/80-col. Watch for import cycles (`loop.ts` ↔ new module) — pass dependencies as parameters, never import the session class back into the extracted module. + +## Step 3 — Verify + close + +Gates, all green in this order: `npx tsc --noEmit`; `npm test` (FULL suite, not just engine); `npm run check-standards`; `npm run check-architecture`; regenerate both baselines in the same change (`npm run check-standards -- --write-baseline`, architecture equivalent — never hand-edit); `npm run coverage -- --min 24` must not regress vs Step 0. Commit per logical unit with `#127` in the message. Push branch, open PR against `master` linking #127, post the issue-closing report (Files changed / Baseline before+after / Boot check / Residual risk / PR link). + +## Risks + +- Cited `loop.ts` lines will drift as you extract — treat them as "approximately here" and re-verify with `outline` before each move. +- `runIterations` carries the most implicit state (`this.*` fields lines 1363–1569); prefer small parameter-object helpers over splitting the method body blindly — a partial A–C split is an acceptable outcome. +- Baseline regen must be in the same commit as the fix, or CI ratchets fail. +- Coverage floor is 24 (`--min 24`); engine-filter percentage from Step 0 is informational, the floor gate is what must not regress. From f02d028671d9997d44afdb4f224e390a8947c397 Mon Sep 17 00:00:00 2001 From: RSI smoke Date: Tue, 13 Oct 2026 04:03:46 -0600 Subject: [PATCH 2/2] Extract shared arg-cursor for orchestrator parsers (#127) Dedupes the --flag=value/next() cursor duplicated across cli.ts and resume.ts into src/orchestrator/arg-cursor.ts with unit tests; regen architecture baseline for moved clone keys. --- PLAN.md | 49 -------- scripts/architecture-baseline.json | 83 ++++++-------- src/orchestrator/__tests__/arg-cursor.test.ts | 108 ++++++++++++++++++ src/orchestrator/arg-cursor.ts | 59 ++++++++++ src/orchestrator/cli.ts | 68 ++--------- src/orchestrator/resume.ts | 49 ++------ 6 files changed, 222 insertions(+), 194 deletions(-) delete mode 100644 PLAN.md create mode 100644 src/orchestrator/__tests__/arg-cursor.test.ts create mode 100644 src/orchestrator/arg-cursor.ts diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index 78e88c0..0000000 --- a/PLAN.md +++ /dev/null @@ -1,49 +0,0 @@ -# PLAN — Issue #127 slice: engine `loop.ts` slim-down (tests-first) - -## Goal - -Reduce [`src/engine/loop.ts`](src/engine/loop.ts:1) (6567 lines; `HeadlessSession` class at [`src/engine/loop.ts`](src/engine/loop.ts:1363)) toward [`docs/typescript-standards.md`](docs/typescript-standards.md:1) (250-line files, 20-line functions) via tests-first extraction into cohesive modules. No behavior change. If the file is too big to finish, land a coherent partial split with tests + green gates, not a sprawling WIP. - -## Scope boundaries (hard) - -- Owns ONLY [`src/engine/loop.ts`](src/engine/loop.ts:1) + new `src/engine/*` modules + `src/engine/__tests__/*` tests + regenerated baselines. A sibling worker owns `src/orchestrator/cli.ts` + `resume.ts` — do NOT touch them. -- No behavior change: pure moves + thin delegation. Keep all call sites compiling. - -## Step 0 — Measure (record numbers for the closing report) - -1. `npm run coverage -- --filter engine` → record module %. -2. `npm run check-standards` and `npm run check-architecture` → record live violation counts for `loop.ts`. -3. `npx tsc --noEmit` and `npm test` → confirm green baseline before touching anything. - -## Step 1 — Tests FIRST (repo style: `src/*/__tests__/*.test.ts` via `tsx`, auto-discovered by [`scripts/run-tests.mjs`](scripts/run-tests.mjs:1)) - -Match the style of existing [`src/engine/__tests__/loop.test.ts`](src/engine/__tests__/loop.test.ts:1) and siblings (`switch-mode`, `new-task`, `condense`, `pause`, `inject-message`, `iteration-boundary` tests in [`src/engine/__tests__`](src/engine/__tests__:1)). Do not reshape anything until its tests exist and pass. - -Add missing unit tests for every function you will touch, in this order: - -1. Free helpers (cheapest, no session fixture): [`summarizeToolArg`](src/engine/loop.ts:6300), [`truncateHistory`](src/engine/loop.ts:6474), [`stripSupersededReasoning`](src/engine/loop.ts:572), [`isReadOnlyDirectCall`](src/engine/loop.ts:361)/[`isReadOnlyTurnCall`](src/engine/loop.ts:379), [`artifactRejectionNudgeMessage`](src/engine/loop.ts:524), env readers ([`envMaxPauseMs`](src/engine/loop.ts:6493) through [`envStreaming`](src/engine/loop.ts:6560)), [`messagesPrefixEquals`](src/engine/loop.ts:6415), [`sameToolNames`](src/engine/loop.ts:6387). Extend `summarize-tool-arg.test.ts` / add `loop-helpers.test.ts` (keep each test file ≤ 250 lines per standards). -2. Condensation methods: [`maybeCondenseHistory`](src/engine/loop.ts:2584), [`fireBackgroundCondense`](src/engine/loop.ts:2862), [`applyBackgroundCondense`](src/engine/loop.ts:2985), [`recordCondensationUsage`](src/engine/loop.ts:3103) — extend `condense*.test.ts` pattern with a fake `LlmClient` + `BudgetTracker`. -3. Iteration boundary/aux: [`runIterationBoundaryHook`](src/engine/loop.ts:2240), [`scheduleAux`](src/engine/loop.ts:2342)/[`drainAuxWrites`](src/engine/loop.ts:2357), [`checkPauseRequested`](src/engine/loop.ts:2439), [`checkInjectedMessage`](src/engine/loop.ts:2523). -4. Only then touch [`runIterations`](src/engine/loop.ts:3416) (~2070 lines, ends before [`initCheckpoints`](src/engine/loop.ts:5488)) and handlers [`handleNewTask`](src/engine/loop.ts:5662), [`handleSwitchMode`](src/engine/loop.ts:5842), [`handleExtensionManage`](src/engine/loop.ts:5595)/[`handleExtensionCall`](src/engine/loop.ts:5641) — cover via existing `new-task`/`switch-mode`/`iteration-boundary` test patterns first. - -## Step 2 — Refactor (phased; stop at a coherent partial if needed) - -Follow the existing precedent modules (`condense.ts`, `handoff.ts`, `reports.ts`, `usage.ts`, `events.ts`, `lazy-tools.ts`, `local-explore.ts` in [`src/engine`](src/engine/loop.ts:1) dir listing). Each extraction = move + re-export/delegate from `loop.ts` so call sites keep compiling; one commit per module. - -- Phase A (free helpers, lowest risk): extract `src/engine/loop-helpers.ts` — `summarizeToolArg`, `truncateHistory`, `stripSupersededReasoning`, read-only predicates, artifact/citation helpers ([`countVerifiedCitations`](src/engine/loop.ts:613), [`matchingArtifactFileStatus`](src/engine/loop.ts:649)), env readers, `messagesPrefixEquals`/`sameToolNames`, `estimateTokenSize` ([`src/engine/loop.ts`](src/engine/loop.ts:6283)). -- Phase B (condensation): extract `src/engine/loop-condense.ts` — `maybeCondenseHistory`, `fireBackgroundCondense`, `applyBackgroundCondense`, `recordCondensationUsage`, `recordHandoffCondensationUsage` ([`src/engine/loop.ts`](src/engine/loop.ts:3135)). Keep thin methods on the class delegating to functions taking an explicit state/options object (params rule: ≤ 5 params — bundle into options). -- Phase C (handlers): extract `src/engine/loop-handlers.ts` — `handleNewTask`, `handleSwitchMode`, `handleExtensionManage`, `handleExtensionCall`, `handleListTools` ([`src/engine/loop.ts`](src/engine/loop.ts:6056)), `handleActivateSkill` ([`src/engine/loop.ts`](src/engine/loop.ts:6060)), `handleReadSkillReference` ([`src/engine/loop.ts`](src/engine/loop.ts:6083)), `handleRequestTool` ([`src/engine/loop.ts`](src/engine/loop.ts:6105)). -- Phase D (only if A–C green with budget left): carve sub-steps out of `runIterations` (per-iteration helpers: LLM call via [`callMainLlm`](src/engine/loop.ts:3315), tool-dispatch block, stall/nudge block, completion-verification block) into `src/engine/loop-iterations.ts`. Do NOT attempt to move all of `runIterations` in one commit. - -Rules per move: ≤ 250-line new files, ≤ 20-line functions (split further if needed), full type annotations, no `any`, no suppression comments, tabs/double-quotes/no-semicolons/80-col. Watch for import cycles (`loop.ts` ↔ new module) — pass dependencies as parameters, never import the session class back into the extracted module. - -## Step 3 — Verify + close - -Gates, all green in this order: `npx tsc --noEmit`; `npm test` (FULL suite, not just engine); `npm run check-standards`; `npm run check-architecture`; regenerate both baselines in the same change (`npm run check-standards -- --write-baseline`, architecture equivalent — never hand-edit); `npm run coverage -- --min 24` must not regress vs Step 0. Commit per logical unit with `#127` in the message. Push branch, open PR against `master` linking #127, post the issue-closing report (Files changed / Baseline before+after / Boot check / Residual risk / PR link). - -## Risks - -- Cited `loop.ts` lines will drift as you extract — treat them as "approximately here" and re-verify with `outline` before each move. -- `runIterations` carries the most implicit state (`this.*` fields lines 1363–1569); prefer small parameter-object helpers over splitting the method body blindly — a partial A–C split is an acceptable outcome. -- Baseline regen must be in the same commit as the fix, or CI ratchets fail. -- Coverage floor is 24 (`--min 24`); engine-filter percentage from Step 0 is informational, the floor gate is what must not regress. diff --git a/scripts/architecture-baseline.json b/scripts/architecture-baseline.json index 79c2c4f..a286f38 100644 --- a/scripts/architecture-baseline.json +++ b/scripts/architecture-baseline.json @@ -4,7 +4,6 @@ "clone 00803486e758 src/engine/__tests__/parser.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/summarizer.test.ts", "clone 0081a7d462ab src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", "clone 0152e2318e4e src/engine/__tests__/new-task.test.ts,src/engine/__tests__/parser.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/engine/__tests__/switch-mode.test.ts", - "clone 0192d8098251 src/orchestrator/resume.ts", "clone 01a56a433e82 src/orchestrator/task-files.ts", "clone 01e5839d0892 src/permissions/commands.ts", "clone 0288db0ddefd src/orchestrator/cli.ts", @@ -27,6 +26,7 @@ "clone 079e0ea3d837 src/engine/__tests__/loop.test.ts", "clone 07ad5f01fab1 src/orchestrator/__tests__/resume.test.ts", "clone 07c2c82de341 src/orchestrator/resume.ts", + "clone 07f9d39ab799 src/orchestrator/resume.ts", "clone 085a3dc0f084 src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts", "clone 08693511f4f2 src/orchestrator/task-files.ts", "clone 08a6c01fdb2d src/orchestrator/__tests__/analyze-cli.test.ts", @@ -50,7 +50,7 @@ "clone 0d74ef204f57 src/llm/muse.ts", "clone 0dec307b58c8 src/engine/local-explore.ts,src/llm/ollama.ts", "clone 0e318183fbfd src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts", - "clone 0e6b600196f9 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts", + "clone 0e6b600196f9 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts", "clone 0e7b8affcb4e src/control/emergency-controller.ts", "clone 0ebf70f447c1 src/orchestrator/__tests__/cli.test.ts", "clone 0ee13df4a9d1 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", @@ -96,6 +96,7 @@ "clone 19c4c40edbae src/engine/__tests__/loop.test.ts", "clone 19d774f4b47a src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone 19de83260e74 src/engine/__tests__/loop.test.ts", + "clone 1a7604033aad src/orchestrator/resume.ts", "clone 1a974e3f1b8f src/engine/__tests__/condense.test.ts", "clone 1a9bcaf25eea src/orchestrator/__tests__/cli.test.ts", "clone 1ad74508c766 src/orchestrator/task-files.ts", @@ -108,7 +109,6 @@ "clone 1c3546eef909 src/orchestrator/__tests__/cli.test.ts", "clone 1c4bbb9846bf src/orchestrator/task-files.ts", "clone 1c7aadc17c2d src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", - "clone 1c8e7d9ba69f src/orchestrator/resume.ts", "clone 1c95522b17e5 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone 1cb8d4dbc25b src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/registration.test.ts", "clone 1d93450ce46b src/dashboard/server.ts", @@ -165,7 +165,6 @@ "clone 2c627b34911b src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts", "clone 2c83ed0d1788 src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts", "clone 2c9f8493e38e src/llm/muse.ts,src/llm/openrouter.ts", - "clone 2d7956d8bf17 src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 2e4f5c004508 src/init/__tests__/cli.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts", "clone 2eefefd492bd src/checkpoints/__tests__/cli.test.ts,src/codemap/__tests__/cli.test.ts,src/codemap/__tests__/units.test.ts,src/dashboard/__tests__/cli.test.ts,src/dashboard/__tests__/page-route.test.ts,src/dashboard/__tests__/self-improvement-metrics.test.ts,src/dashboard/__tests__/sigint-shutdown.test.ts,src/github/__tests__/installations.test.ts,src/orchestrator/__tests__/analyze-cli.test.ts,src/orchestrator/__tests__/cost-estimate.test.ts,src/orchestrator/__tests__/log-analysis.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts,src/orchestrator/__tests__/status.test.ts,src/run-tests-script.test.ts,src/tools/__tests__/set-indentation.test.ts", "clone 2ef48d0cbf0f src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", @@ -174,10 +173,9 @@ "clone 2f29adde55ae src/engine/__tests__/global-modes.test.ts,src/engine/__tests__/prompt.test.ts,src/engine/__tests__/stack-rules-content.test.ts,src/engine/__tests__/stacks.test.ts,src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts", "clone 2f4521043a87 src/engine/__tests__/condense.test.ts", "clone 2fc443c44382 src/orchestrator/cli.ts", - "clone 30244c9090b3 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone 30244c9090b3 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone 306495c80c24 src/dashboard/server.ts", "clone 3095fa9d16ed src/github/cli.ts", - "clone 3111ebf674a5 src/orchestrator/resume.ts", "clone 3154ae4205ef src/orchestrator/cli.ts", "clone 326ecda164bf src/llm/muse.ts,src/llm/openrouter.ts", "clone 3276aaa5ade8 src/orchestrator/__tests__/resume.test.ts", @@ -185,7 +183,7 @@ "clone 3319637fc066 src/engine/local-explore.ts,src/llm/ollama.ts", "clone 3341cac7ce47 src/orchestrator/task-files.ts", "clone 338cc9087bf2 src/dashboard/__tests__/cost-history-routes.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", - "clone 3390241b01d9 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 3390241b01d9 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 33e68b8dfd03 src/llm/muse.ts,src/llm/openrouter.ts", "clone 3437313b4dfa src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts", "clone 34f0de1797fc src/orchestrator/task-files.ts", @@ -196,7 +194,6 @@ "clone 372d3d9aaa5c src/dashboard/server.ts", "clone 377268c89191 src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 37c2a9fe9232 src/watcher/watch.ts", - "clone 381cdc4f5560 src/orchestrator/resume.ts", "clone 38b8f6fe9307 src/orchestrator/__tests__/reviewer.test.ts,src/qa/__tests__/qa.test.ts", "clone 38bdc0f2eae1 src/orchestrator/task-files.ts", "clone 390c6ac50c0b src/orchestrator/cli.ts,src/orchestrator/resume.ts", @@ -231,7 +228,6 @@ "clone 40e273ce917f src/engine/local-explore.ts,src/llm/ollama.ts", "clone 40e88419f6c1 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone 4141f265e8f3 src/tools/__tests__/describe_image.test.ts,src/vision/__tests__/describe.test.ts", - "clone 4171d1cc60bc src/orchestrator/resume.ts", "clone 41b863e3c6d3 src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone 4209e0296c3d src/budget/__tests__/concurrency.test.ts,src/watcher/__tests__/watch.test.ts", "clone 420eb289e209 src/llm/muse.ts,src/llm/openrouter.ts", @@ -268,13 +264,13 @@ "clone 49f715172224 src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/registration.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/tools/__tests__/run-tests.test.ts", "clone 4a1be289d96e src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts", "clone 4b526509ca91 src/orchestrator/resume.ts", - "clone 4b939369857a src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 4b94ae93ab09 src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/registration.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/tools/__tests__/run-tests.test.ts", "clone 4c52d635b095 src/cloud/docker-provider.ts,src/cloud/provider.ts", "clone 4d4b7ced132f src/orchestrator/cli.ts", "clone 4d70161ff45e src/checkpoints/cli.ts,src/decision-proxy/cli.ts", "clone 4dd292628b52 src/codeintel/__tests__/registration.test.ts,src/tools/__tests__/batch.test.ts", "clone 4dee6b8a0f46 src/llm/preflight.ts", + "clone 4e55134d37dc src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 4eaaac6576f7 src/dashboard/__tests__/cost-history-routes.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts", "clone 4f5e8100edc9 src/rsi/__tests__/worker.test.ts", "clone 4f70f8a03f8f src/engine/__tests__/condense.test.ts", @@ -283,6 +279,7 @@ "clone 505ab62c23e5 src/orchestrator/__tests__/resume.test.ts", "clone 50a9a9b338ed src/engine/__tests__/condense.test.ts", "clone 511a4682fc24 src/llm/preflight.ts", + "clone 518063685cd6 src/orchestrator/resume.ts", "clone 51838e15e74c src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts", "clone 51c2328bdc20 src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone 5250c49d4c27 src/llm/preflight.ts", @@ -313,7 +310,7 @@ "clone 57a2a200325b src/tools/browser/service.ts", "clone 5809ea9b6766 src/llm/muse.ts,src/llm/openrouter.ts", "clone 58829a15a8eb src/engine/loop.ts", - "clone 5892d457b317 src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone 5892d457b317 src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone 58a8047af07b src/codesearch/files.ts,src/engine/stacks.ts", "clone 58baed1febbf src/orchestrator/task-files.ts", "clone 58c3fb21d93e src/engine/__tests__/condense.test.ts,src/engine/__tests__/loop.test.ts", @@ -337,15 +334,15 @@ "clone 5e6943aa1599 src/dashboard/__tests__/session-launch.test.ts", "clone 5e9eb7a40cd3 src/engine/__tests__/condense.test.ts", "clone 5f09b011f3c9 src/engine/__tests__/condense.test.ts", - "clone 5f2c88e38fbe src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 5f2c88e38fbe src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 5f2ee4383718 src/github/pr.ts", "clone 5f66e587d856 src/engine/local-explore.ts,src/llm/ollama.ts", - "clone 5f6b2a16f10d src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone 5f6b2a16f10d src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone 5fff6e3ebed7 src/dashboard/__tests__/cost-history-routes.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts", "clone 60c4fdaf31bd src/codesearch/airunner-embedder.ts,src/codesearch/ollama-embedder.ts", - "clone 61046dbb6410 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 61046dbb6410 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 6255fbea917d src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", - "clone 6287c1413aa4 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/parser.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/summarizer.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 6287c1413aa4 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/parser.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/summarizer.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 62d28c84ccfe src/orchestrator/cli.ts", "clone 62ff58c84315 src/engine/__tests__/parser.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/summarizer.test.ts,src/stack-rules-content.test.ts", "clone 6376e4c9bfd3 src/github/__tests__/provision.test.ts", @@ -358,9 +355,8 @@ "clone 64a8e2de29d4 src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone 64c52ff8bbc6 src/dashboard/server.ts", "clone 655648fae3f0 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", - "clone 659104753a4c src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone 659104753a4c src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone 6592f5270188 src/orchestrator/__tests__/reviewer.test.ts,src/qa/__tests__/qa.test.ts", - "clone 6598ff2866f9 src/orchestrator/resume.ts", "clone 65bf7deda970 src/engine/__tests__/stack-rules-content.test.ts,src/stack-rules-content.test.ts", "clone 65e7527aaf4e src/watcher/watch.ts", "clone 6620858d5a93 src/orchestrator/__tests__/cli.test.ts", @@ -384,7 +380,6 @@ "clone 69d258407ea9 src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/settings.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/protected-files.test.ts,src/tools/__tests__/codebase_search.test.ts", "clone 69ff81f6294e src/engine/__tests__/condense.test.ts,src/engine/__tests__/loop.test.ts", "clone 6ad43b2053fa src/engine/__tests__/loop.test.ts", - "clone 6b0ecd47330f src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 6b322a1d1b11 src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", "clone 6b35c8a20e34 src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", "clone 6b5f2e4eff30 src/llm/muse.ts", @@ -399,7 +394,6 @@ "clone 6de3bc55de51 src/engine/loop.ts", "clone 6e0f7e4d8bbd src/orchestrator/cli.ts,src/orchestrator/resume.ts", "clone 6e3afc8af712 src/codesearch/files.ts,src/engine/stacks.ts", - "clone 6e460f149b85 src/orchestrator/resume.ts", "clone 6e67c36eb0ac src/codeintel/__tests__/registration.test.ts,src/tools/__tests__/batch.test.ts", "clone 6ec154ac699f src/llm/preflight.ts", "clone 700ed9396d5d src/orchestrator/cli.ts", @@ -428,11 +422,11 @@ "clone 76fd2afa5e53 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone 76fe651f8360 src/dashboard/server.ts", "clone 775035a6a231 src/dashboard/server.ts", - "clone 7771faf0bdbe src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/docker-provider.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/settings.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/protected-files.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/codebase_search.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 7771faf0bdbe src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/docker-provider.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/settings.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/protected-files.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/codebase_search.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 77a1f2eb17cb src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/settings.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/protected-files.test.ts,src/tools/__tests__/codebase_search.test.ts", "clone 77aa86621a85 src/decision-proxy/__tests__/proxy.test.ts,src/engine/__tests__/switch-mode.test.ts,src/tools/__tests__/codebase_search.test.ts,src/tools/__tests__/execute_command.test.ts", "clone 77db3aa3bdb6 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", - "clone 77f73cc7bae5 src/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone 77f73cc7bae5 src/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone 782fcf6fa16a src/orchestrator/resume.ts", "clone 785455958a9c src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", "clone 78b388a03d57 src/orchestrator/resume.ts", @@ -443,7 +437,7 @@ "clone 794b0e031029 src/codesearch/files.ts,src/engine/stacks.ts", "clone 797b3d3a97db src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts", "clone 799bf418925d src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", - "clone 79ece66b415c src/orchestrator/resume.ts", + "clone 79f47b3164f1 src/orchestrator/resume.ts", "clone 7a154a1f1f61 src/rsi/__tests__/worker.test.ts", "clone 7a1b9f629554 src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone 7a53d4a3fcc7 src/codesearch/files.ts,src/engine/stacks.ts", @@ -454,6 +448,7 @@ "clone 7bae656083ca src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts", "clone 7c53f8bda90c src/orchestrator/__tests__/cli.test.ts", "clone 7cf1a4f8c0d9 src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/pause.test.ts", + "clone 7d2fcb96c253 src/orchestrator/resume.ts", "clone 7d743a1a43b3 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone 7d9fa9503333 src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts", "clone 7ddc99484482 src/dashboard/server.ts", @@ -477,10 +472,12 @@ "clone 82caf3021d55 src/llm/preflight.ts", "clone 831bf9ced367 src/llm/preflight.ts", "clone 831d578fc76e src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", + "clone 83416808124c src/orchestrator/resume.ts", "clone 835d9ff1d83e src/dashboard/__tests__/session-launch.test.ts", "clone 8404a11d6565 src/engine/__tests__/loop.test.ts", "clone 845e4f482386 src/dashboard/server.ts", "clone 84fe1e0bacea src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts", + "clone 85b97c9d7f1a src/orchestrator/resume.ts", "clone 85c4b4effe66 src/engine/local-explore.ts,src/llm/ollama.ts", "clone 85ea6e800321 src/orchestrator/task-files.ts", "clone 85f188b0bc7f src/orchestrator/task-files.ts", @@ -490,7 +487,7 @@ "clone 862e77a7bd8b src/engine/__tests__/loop.test.ts", "clone 86477118fb95 src/__tests__/cli-env.test.ts,src/codesearch/__tests__/embedder-types.test.ts,src/evidence/__tests__/verify-files.test.ts,src/orchestrator/__tests__/task-files.test.ts,src/orchestrator/__tests__/terminal-status.test.ts,src/tools/__tests__/batch-types.test.ts,src/tools/__tests__/paths.test.ts", "clone 868374f44959 src/orchestrator/cli.ts,src/watcher/cli.ts", - "clone 8737d3d18a94 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", + "clone 8737d3d18a94 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts", "clone 8744bca39679 src/engine/__tests__/pause.test.ts", "clone 8752a6162f85 src/dashboard/__tests__/session-launch.test.ts", "clone 8794b8ef2ee4 src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts", @@ -507,9 +504,7 @@ "clone 8b1b3fe137c3 src/llm/openrouter.ts", "clone 8b4721c34bf4 src/engine/loop.ts", "clone 8b665567608f src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts", - "clone 8bfc420c4dd5 src/orchestrator/resume.ts", "clone 8c15aef04331 src/orchestrator/task-files.ts", - "clone 8c409e0976aa src/orchestrator/resume.ts", "clone 8ca0903cd323 src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/settings.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/protected-files.test.ts,src/tools/__tests__/codebase_search.test.ts", "clone 8cbf4767d294 src/engine/local-explore.ts,src/llm/ollama.ts", "clone 8d24cff0cf64 src/engine/__tests__/loop.test.ts", @@ -522,13 +517,12 @@ "clone 8de1c9fc1aef src/orchestrator/__tests__/spawn-model.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts", "clone 8e50e2b946ab src/orchestrator/reviewer.ts,src/qa/qa.ts", "clone 8e9ddf2a6e99 src/cloud/provider.ts,src/orchestrator/cli.ts", - "clone 8ecc5854ad76 src/orchestrator/resume.ts", "clone 8f192c115d58 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", "clone 8f4e267467fa src/engine/local-explore.ts,src/llm/ollama.ts", "clone 8fbaf4437025 src/dashboard/__tests__/cost-history-routes.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts", "clone 8fe789c46bc4 src/orchestrator/__tests__/reviewer.test.ts,src/qa/__tests__/qa.test.ts", "clone 9003da86dcf3 src/codesearch/files.ts,src/engine/stacks.ts", - "clone 902284a95450 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/parser.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/summarizer.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone 902284a95450 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/local-explore.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/parser.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/summarize-tool-arg.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/embed.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/summarizer.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone 90309d08a06e src/engine/local-explore.ts,src/llm/ollama.ts", "clone 90919b289545 src/engine/__tests__/loop.test.ts,src/tools/__tests__/execute_command.test.ts", "clone 90ad7e210e7a src/engine/__tests__/condense.test.ts,src/engine/__tests__/loop.test.ts", @@ -557,7 +551,7 @@ "clone 96a19c419888 src/codeintel/__tests__/registration.test.ts,src/tools/__tests__/batch.test.ts", "clone 96d294f3a39d src/orchestrator/resume.ts", "clone 96d730011cef src/llm/openrouter.ts", - "clone 9716d28923cf src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts", + "clone 9716d28923cf src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts", "clone 978d30338b0a src/engine/__tests__/loop.test.ts", "clone 97ce5883e245 src/orchestrator/task-files.ts", "clone 97f2197071b1 src/orchestrator/task-files.ts", @@ -590,8 +584,7 @@ "clone 9c624706049d src/engine/local-explore.ts,src/llm/ollama.ts", "clone 9c8525dfe1c7 src/github/pr.ts", "clone 9c90c58d80e8 src/budget/__tests__/concurrency.test.ts,src/watcher/__tests__/watch.test.ts", - "clone 9d22b37bc1c0 src/codesearch/cli.ts,src/init/cli.ts,src/orchestrator/cli.ts", - "clone 9d74853717a5 src/orchestrator/resume.ts", + "clone 9d22b37bc1c0 src/codesearch/cli.ts,src/init/cli.ts", "clone 9d767e76cc6d src/budget/__tests__/concurrency.test.ts,src/watcher/__tests__/watch.test.ts", "clone 9e18f809a77e src/github/__tests__/provision.test.ts", "clone 9e56ca4f7c1c src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/settings.test.ts", @@ -602,10 +595,10 @@ "clone 9ee98e35bf15 src/orchestrator/cli.ts,src/watcher/cli.ts", "clone 9f5a1c3e6be5 src/orchestrator/resume.ts", "clone a003fde0f022 src/llm/muse.ts,src/llm/openrouter.ts", - "clone a023cb3be29b src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/cli.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codemap/__tests__/cli.test.ts,src/codemap/__tests__/units.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/cli.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/page-route.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/self-improvement-metrics.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/sigint-shutdown.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/prompt.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/installations.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/analyze-cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/cost-estimate.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/log-analysis.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/status.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/run-tests-script.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/set-indentation.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone a023cb3be29b src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/cli.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codemap/__tests__/cli.test.ts,src/codemap/__tests__/units.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/cli.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/page-route.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/self-improvement-metrics.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/sigint-shutdown.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/prompt.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/installations.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/analyze-cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/cost-estimate.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/log-analysis.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/status.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/run-tests-script.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/set-indentation.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone a0e38675893c src/checkpoints/__tests__/cli.test.ts,src/codemap/__tests__/cli.test.ts,src/codemap/__tests__/units.test.ts,src/dashboard/__tests__/cli.test.ts,src/dashboard/__tests__/page-route.test.ts,src/dashboard/__tests__/self-improvement-metrics.test.ts,src/dashboard/__tests__/sigint-shutdown.test.ts,src/github/__tests__/installations.test.ts,src/orchestrator/__tests__/analyze-cli.test.ts,src/orchestrator/__tests__/cost-estimate.test.ts,src/orchestrator/__tests__/log-analysis.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts,src/orchestrator/__tests__/status.test.ts,src/run-tests-script.test.ts,src/tools/__tests__/set-indentation.test.ts", "clone a100929d0996 src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts", - "clone a1132d316866 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone a1132d316866 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone a11ed931f825 src/codeintel/__tests__/registration.test.ts,src/tools/__tests__/batch.test.ts", "clone a1a26fbf0a56 src/orchestrator/__tests__/status-cli.test.ts", "clone a1c96da14be8 src/codesearch/__tests__/backend-selection.test.ts,src/codesearch/__tests__/index.test.ts,src/codesearch/__tests__/search.test.ts,src/config/__tests__/mode-models.test.ts,src/dashboard/__tests__/file-browser-permissions.test.ts,src/dashboard/__tests__/settings.test.ts,src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/model-resolution.test.ts,src/orchestrator/__tests__/resume.test.ts,src/orchestrator/__tests__/watch.test.ts,src/permissions/__tests__/protected-files.test.ts,src/tools/__tests__/codebase_search.test.ts", @@ -630,7 +623,6 @@ "clone a705b5057bf3 src/codesearch/embedder.ts,src/memory/embed.ts", "clone a70726307e4f src/orchestrator/cli.ts", "clone a7524c1d0b75 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", - "clone a76f4673a07c src/orchestrator/resume.ts", "clone a7ac9999b88e src/checkpoints/__tests__/cli.test.ts,src/codemap/__tests__/cli.test.ts,src/codemap/__tests__/units.test.ts,src/dashboard/__tests__/cli.test.ts,src/dashboard/__tests__/page-route.test.ts,src/dashboard/__tests__/self-improvement-metrics.test.ts,src/dashboard/__tests__/sigint-shutdown.test.ts,src/github/__tests__/installations.test.ts,src/orchestrator/__tests__/analyze-cli.test.ts,src/orchestrator/__tests__/cost-estimate.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts,src/orchestrator/__tests__/log-analysis.test.ts,src/orchestrator/__tests__/spawn-state-reset.test.ts,src/orchestrator/__tests__/status.test.ts,src/run-tests-script.test.ts,src/tools/__tests__/set-indentation.test.ts", "clone a85870eb1a5b src/decision-proxy/__tests__/proxy.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone a89b7f2f4a03 src/checkpoints/cli.ts,src/decision-proxy/cli.ts", @@ -657,12 +649,11 @@ "clone af9c5a7a19dd src/orchestrator/cli.ts,src/watcher/cli.ts", "clone afec75fcac46 src/dashboard/server.ts", "clone b013f5230fd0 src/dashboard/server.ts", - "clone b015f7597479 src/orchestrator/resume.ts", "clone b0d2cf6ccae4 src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts", "clone b1157b77dcf6 src/budget/__tests__/budget.test.ts", "clone b12348060bcb src/llm/muse.ts", "clone b1263c10d333 src/orchestrator/task-files.ts", - "clone b192f224eb48 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", + "clone b192f224eb48 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts", "clone b1b3e76288d4 src/watcher/state.ts", "clone b2518e7a9a96 src/budget/__tests__/concurrency.test.ts,src/watcher/__tests__/watch.test.ts", "clone b2964cf841e6 src/engine/__tests__/loop.test.ts", @@ -693,11 +684,12 @@ "clone b94a982634f6 src/orchestrator/reviewer.ts,src/qa/qa.ts", "clone b9cced506295 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", "clone ba0241fb0a20 src/engine/events.ts,src/engine/usage.ts", - "clone ba4c232793d7 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", + "clone ba4c232793d7 src/budget/__tests__/budget.test.ts,src/budget/__tests__/concurrency.test.ts,src/budget/__tests__/cost.test.ts,src/checkpoints/__tests__/service.test.ts,src/cloud/__tests__/provider.test.ts,src/codeintel/__tests__/call-graph.test.ts,src/codeintel/__tests__/call-hierarchy.test.ts,src/codeintel/__tests__/find-references.test.ts,src/codeintel/__tests__/go-to-definition.test.ts,src/codeintel/__tests__/hover.test.ts,src/codeintel/__tests__/import-graph.test.ts,src/codeintel/__tests__/outline.test.ts,src/codeintel/__tests__/rename-symbol.test.ts,src/codemap/__tests__/build.test.ts,src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/chunk.test.ts,src/codesearch/__tests__/files.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts,src/dashboard/__tests__/aggregate.test.ts,src/dashboard/__tests__/chat-thread.test.ts,src/dashboard/__tests__/checkpoints-routes.test.ts,src/dashboard/__tests__/codemap-routes.test.ts,src/dashboard/__tests__/cost-history-routes.test.ts,src/dashboard/__tests__/events.test.ts,src/dashboard/__tests__/projects-routes.test.ts,src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/timeline.test.ts,src/deploy/__tests__/gate.test.ts,src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts,src/engine/__tests__/inject-message.test.ts,src/engine/__tests__/loop.test.ts,src/engine/__tests__/new-task.test.ts,src/engine/__tests__/pause.test.ts,src/engine/__tests__/switch-mode.test.ts,src/github/__tests__/app-auth.test.ts,src/github/__tests__/cli.test.ts,src/github/__tests__/pr.test.ts,src/github/__tests__/provision.test.ts,src/github/__tests__/push.test.ts,src/index-util.test.ts,src/init/__tests__/cli.test.ts,src/init/__tests__/gitignore.test.ts,src/memory/__tests__/local.test.ts,src/memory/__tests__/memory-wiring.test.ts,src/memory/__tests__/uwuchat.test.ts,src/migrate/cli.test.ts,src/orchestrator/__tests__/arg-cursor.test.ts,src/orchestrator/__tests__/auto-split.test.ts,src/orchestrator/__tests__/cleanup.test.ts,src/orchestrator/__tests__/git-sync.test.ts,src/orchestrator/__tests__/merge-check.test.ts,src/orchestrator/__tests__/pipeline.test.ts,src/orchestrator/__tests__/reviewer.test.ts,src/orchestrator/__tests__/split.test.ts,src/orchestrator/__tests__/state.test.ts,src/orchestrator/__tests__/status-cli.test.ts,src/orchestrator/__tests__/stop-cli.test.ts,src/permissions/__tests__/commands.test.ts,src/permissions/__tests__/store-protection.test.ts,src/project-store.test.ts,src/projects/__tests__/cli.test.ts,src/qa/__tests__/qa.test.ts,src/tools/__tests__/apply_diff.test.ts,src/tools/__tests__/browser-action.test.ts,src/tools/__tests__/decision.test.ts,src/tools/__tests__/describe_image.test.ts,src/tools/__tests__/edit_file.test.ts,src/tools/__tests__/execute_command.test.ts,src/tools/__tests__/language-detect.test.ts,src/tools/__tests__/list-files.test.ts,src/tools/__tests__/local-summarization-gate.test.ts,src/tools/__tests__/output-summarizer.test.ts,src/tools/__tests__/path-safety.test.ts,src/tools/__tests__/read-cache.test.ts,src/tools/__tests__/run-tests.test.ts,src/tools/__tests__/search_replace.test.ts,src/tools/__tests__/update_todo_list.test.ts,src/tools/__tests__/write_to_file.test.ts,src/vision/__tests__/describe.test.ts,src/watcher/__tests__/github.test.ts,src/watcher/__tests__/state.test.ts,src/watcher/__tests__/watch.test.ts", "clone baa20b9ca397 src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts", "clone bac150db44ec src/llm/preflight.ts", "clone bad5d67208cf src/orchestrator/task-files.ts", "clone bad8bd54a28f src/github/pr.ts", + "clone bb2056324f63 src/orchestrator/resume.ts", "clone bb4c05f84289 src/engine/__tests__/loop.test.ts", "clone bb8f0f6482f3 src/orchestrator/task-files.ts", "clone bbd74a959f73 src/llm/preflight.ts", @@ -747,7 +739,6 @@ "clone cb208607f464 src/dashboard/server.ts", "clone cb54ce2ca134 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", "clone cb96538b6cf5 src/engine/__tests__/condense-async.test.ts,src/engine/__tests__/events.test.ts", - "clone cc1f5d942676 src/orchestrator/resume.ts", "clone cc26ee01ab63 src/orchestrator/task-files.ts", "clone cc3b18fef474 src/orchestrator/task-files.ts", "clone ccb15663db25 src/cloud/docker-provider.ts,src/cloud/provider.ts", @@ -768,7 +759,6 @@ "clone d08cb9f5e40b src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone d124c343656a src/dashboard/server.ts", "clone d1443ded5f22 src/orchestrator/__tests__/cli.test.ts", - "clone d1aafefad105 src/orchestrator/resume.ts", "clone d1ee4ce99410 src/dashboard/__tests__/cost-history-routes.test.ts,src/orchestrator/__tests__/cost-history-cli.test.ts,src/orchestrator/__tests__/cost-history.test.ts", "clone d2b2b6f1ef5d src/engine/local-explore.ts,src/llm/ollama.ts", "clone d30c6ba29e84 src/llm/muse.ts,src/llm/openrouter.ts", @@ -782,7 +772,7 @@ "clone d3be3817b6b7 src/dashboard/__tests__/session-launch.test.ts", "clone d420a90f2ca6 src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", "clone d45bb264e88c src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", - "clone d4cdc1c2c168 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone d4cdc1c2c168 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone d4f6305e2c9c src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts", "clone d51f1a5afd2a src/orchestrator/resume.ts", "clone d59611db1320 src/orchestrator/task-files.ts", @@ -805,12 +795,13 @@ "clone d8dfa6d1a846 src/orchestrator/cli.ts", "clone d8e97665e9ec src/checkpoints/__tests__/cli.test.ts,src/codemap/__tests__/cli.test.ts,src/dashboard/__tests__/cli.test.ts", "clone d9003b766f88 src/dashboard/__tests__/server.test.ts,src/dashboard/__tests__/session-launch.test.ts", - "clone d96d4c124839 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/orchestrator/resume.ts", + "clone d96d4c124839 src/dashboard/trend-cli.ts,src/orchestrator/cleanup.ts", "clone d9ab3b61fdbc src/llm/preflight.ts", "clone d9cbef8f79d1 src/engine/local-explore.ts,src/llm/ollama.ts", "clone d9f850b7e82d src/llm/openrouter.ts", "clone d9f911c897cc src/watcher/watch.ts", "clone da3546f56645 src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts", + "clone db1acf0048a8 src/orchestrator/cli.ts", "clone db5ecb1e7fda src/engine/__tests__/loop.test.ts,src/tools/__tests__/execute_command.test.ts", "clone dc4475b3dd6c src/checkpoints/cli.ts,src/decision-proxy/cli.ts", "clone dc8583629f8c src/codesearch/__tests__/airunner-embedder.test.ts,src/codesearch/__tests__/ollama-embedder.test.ts", @@ -819,8 +810,7 @@ "clone dd0c493b152f src/tools/__tests__/execute_command.test.ts", "clone dda5b65e734c src/engine/__tests__/prompt.test.ts,src/llm/__tests__/muse.test.ts,src/llm/__tests__/openrouter.test.ts", "clone dde98d818073 src/cloud/provider.ts,src/orchestrator/cli.ts", - "clone ddf5d3691b74 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", - "clone ddf8ead6ae47 src/orchestrator/resume.ts", + "clone ddf5d3691b74 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone de0450878713 src/llm/muse.ts,src/llm/openrouter.ts", "clone de13d7c2dbd3 src/engine/local-explore.ts,src/llm/ollama.ts", "clone de8f0e7dadef src/github/pr.ts", @@ -848,6 +838,7 @@ "clone e3a4e8050308 src/codesearch/files.ts,src/engine/stacks.ts", "clone e3d13fb47c32 src/orchestrator/__tests__/reviewer.test.ts,src/qa/__tests__/qa.test.ts", "clone e416c30b4843 src/llm/preflight.ts", + "clone e498eb38bb29 src/orchestrator/resume.ts", "clone e4c0c632d2e8 src/engine/__tests__/condense.test.ts", "clone e4cd97daa489 src/__tests__/cli-env.test.ts,src/codesearch/__tests__/embedder-types.test.ts,src/evidence/__tests__/verify-files.test.ts,src/orchestrator/__tests__/task-files.test.ts,src/orchestrator/__tests__/terminal-status.test.ts,src/tools/__tests__/batch-types.test.ts,src/tools/__tests__/paths.test.ts", "clone e5b435a1ec6d src/llm/openrouter.ts", @@ -866,7 +857,7 @@ "clone e982c48f4914 src/engine/__tests__/loop.test.ts", "clone e9c97b7c8083 src/llm/muse.ts,src/llm/openrouter.ts", "clone e9e222742eca src/dashboard/__tests__/session-launch.test.ts,src/dashboard/__tests__/settings.test.ts", - "clone ea05c6ce91f1 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone ea05c6ce91f1 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone ea51784134cb src/llm/preflight.ts", "clone ea54078b7ac8 src/engine/__tests__/condense.test.ts,src/engine/__tests__/events.test.ts", "clone ea84c951ecaa src/llm/preflight.ts", @@ -900,6 +891,8 @@ "clone f351b20bf33d src/dashboard/__tests__/session-launch.test.ts", "clone f38d7696e8d7 src/dashboard/server.ts", "clone f41cb7e808cc src/engine/__tests__/loop.test.ts", + "clone f43217cc6864 src/orchestrator/cli.ts,src/orchestrator/resume.ts", + "clone f4a6bb52ddb3 src/orchestrator/resume.ts", "clone f513643a5502 src/watcher/watch.ts", "clone f5c2b3d5e6aa src/engine/__tests__/new-task.test.ts,src/engine/__tests__/switch-mode.test.ts", "clone f602bc3ce671 src/orchestrator/__tests__/cli.test.ts,src/orchestrator/__tests__/resume.test.ts", @@ -925,7 +918,6 @@ "clone fc018e6a7371 src/orchestrator/__tests__/cli.test.ts", "clone fc35fa2848fb src/codesearch/files.ts,src/engine/stacks.ts", "clone fc4aa9a9577b src/dashboard/__tests__/projects-routes.test.ts,src/projects/__tests__/cli.test.ts", - "clone fc6225614cf8 src/orchestrator/resume.ts", "clone fc927259dfd9 src/orchestrator/__tests__/resume.test.ts", "clone fca1b4455880 src/dashboard/server.ts", "clone fcafd21eb61f src/llm/muse.ts", @@ -933,11 +925,12 @@ "clone fd4671784874 src/orchestrator/task-files.ts", "clone fd96ad43bb68 src/dashboard/server.ts", "clone fdc7b480c695 src/budget/__tests__/concurrency.test.ts,src/watcher/__tests__/watch.test.ts", - "clone fdd1f303d081 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/orchestrator/cli.ts,src/watcher/cli.ts", + "clone fdd1f303d081 src/checkpoints/cli.ts,src/cli.ts,src/codemap/cli.ts,src/codesearch/cli.ts,src/dashboard/cli.ts,src/dashboard/trend-cli.ts,src/decision-proxy/cli.ts,src/github/cli.ts,src/init/cli.ts,src/orchestrator/cleanup.ts,src/watcher/cli.ts", "clone fde9a417c31d src/orchestrator/task-files.ts", "clone fe1809bbace6 src/engine/local-explore.ts,src/llm/ollama.ts", "clone fe525972616a src/watcher/watch.ts", "clone ff5ec5779c4d src/engine/__tests__/loop.test.ts,src/tools/__tests__/execute_command.test.ts", + "clone ff6f42902423 src/orchestrator/cli.ts", "clone ffea56e47c93 src/llm/muse.ts", "src/agent-executor.ts complexity 3a93dee72419", "src/agent-executor.ts complexity e082a59c9c4d", diff --git a/src/orchestrator/__tests__/arg-cursor.test.ts b/src/orchestrator/__tests__/arg-cursor.test.ts new file mode 100644 index 0000000..57d4f5b --- /dev/null +++ b/src/orchestrator/__tests__/arg-cursor.test.ts @@ -0,0 +1,108 @@ +/** + * Unit tests for src/orchestrator/arg-cursor.ts — the shared argv cursor + * that deduplicates the eq/flag/inlineValue/next() preamble copy-pasted + * across the seven orchestrator subcommand parsers (issue #127). + * + * Plain assert-based (no framework), run via `npm test`. + */ + +import assert from "node:assert/strict" + +import { createArgCursor } from "../arg-cursor.js" + +function cursor(argv: string[], i: number): { + flag: string + inline: string | undefined + value: string | undefined +} { + let index = i + const c = createArgCursor(argv, i, () => { + index++ + }) + const value = c.next() + return { flag: c.flag, inline: c.inlineValue, value } +} + +function testSpacedValueConsumesNext(): void { + const seen = cursor(["--repo", "mydir"], 0) + assert.equal(seen.flag, "--repo") + assert.equal(seen.inline, undefined) + assert.equal(seen.value, "mydir") +} + +function testInlineValueBeatsNext(): void { + const seen = cursor(["--repo=mydir", "other"], 0) + assert.equal(seen.flag, "--repo") + assert.equal(seen.inline, "mydir") + assert.equal(seen.value, "mydir") +} + +function testNextRejectsFlagLikeValue(): void { + // Matches the per-parser next(): a following "--..." is not a value. + const seen = cursor(["--repo", "--json"], 0) + assert.equal(seen.value, undefined) +} + +function testNextAtEndIsUndefined(): void { + const seen = cursor(["--repo"], 0) + assert.equal(seen.value, undefined) +} + +function testNextAdvancesIndex(): void { + let index = 0 + const argv = ["--repo", "mydir", "--json"] + const c = createArgCursor(argv, 0, () => { + index++ + }) + assert.equal(c.next(), "mydir") + assert.equal(index, 1, "consuming next advances the parser index") + const c2 = createArgCursor(argv, index, () => { + index++ + }) + // Index now points at the consumed value; a fresh cursor there sees it. + assert.equal(c2.arg, "mydir") +} + +function testNextRawAcceptsDashedValue(): void { + // --deploy-args legitimately starts with "--"; nextRaw bypasses the guard. + let index = 3 + const argv = ["x", "y", "z", "--deploy-args", "--local"] + const c = createArgCursor(argv, 3, () => { + index++ + }) + assert.equal(c.nextRaw(), "--local") + assert.equal(index, 4) +} + +const tests: Array<[string, () => void | Promise]> = [ + ["spaced value is consumed as next", testSpacedValueConsumesNext], + ["inline --flag=value beats next", testInlineValueBeatsNext], + ["flag-like next is not a value", testNextRejectsFlagLikeValue], + ["missing next is undefined", testNextAtEndIsUndefined], + ["consuming next advances the parser index", testNextAdvancesIndex], + ["nextRaw accepts dashed values", testNextRawAcceptsDashedValue], +] + +async function main(): Promise { + let failed = 0 + for (const [name, fn] of tests) { + try { + await fn() + console.log(` ok ${name}`) + } catch (err) { + failed++ + console.error(` FAIL ${name}`) + console.error(err instanceof Error ? err.stack ?? err.message : String(err)) + } + } + if (failed > 0) { + console.error(`\n${failed} test(s) failed`) + process.exit(1) + } + console.log(`\nAll ${tests.length} arg-cursor tests passed`) +} + +main().catch((err) => { + console.error("Test runner crashed:", err) + process.exit(1) +}) diff --git a/src/orchestrator/arg-cursor.ts b/src/orchestrator/arg-cursor.ts new file mode 100644 index 0000000..842ab57 --- /dev/null +++ b/src/orchestrator/arg-cursor.ts @@ -0,0 +1,59 @@ +/** Shared argv cursor for orchestrator subcommand parsers. */ + +export interface ArgCursor { + arg: string + flag: string + inlineValue: string | undefined + next(): string | undefined + nextRaw(): string | undefined +} + +function readNext( + argv: string[], + i: number, + inlineValue: string | undefined, + advance: () => void, +): string | undefined { + if (inlineValue !== undefined) { + return inlineValue + } + const v = argv[i + 1] + if (v === undefined || v.startsWith("--")) { + return undefined + } + advance() + return v +} + +function readNextRaw( + argv: string[], + i: number, + inlineValue: string | undefined, + advance: () => void, +): string | undefined { + if (inlineValue !== undefined) { + return inlineValue + } + const v = argv[i + 1] + if (v === undefined) { + return undefined + } + advance() + return v +} + +export function createArgCursor( + argv: string[], + i: number, + advance: () => void, +): ArgCursor { + const arg = argv[i] ?? "" + const eq = arg.indexOf("=") + const flag = eq === -1 ? arg : arg.slice(0, eq) + const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) + const next = (): string | undefined => + readNext(argv, i, inlineValue, advance) + const nextRaw = (): string | undefined => + readNextRaw(argv, i, inlineValue, advance) + return { arg, flag, inlineValue, next, nextRaw } +} diff --git a/src/orchestrator/cli.ts b/src/orchestrator/cli.ts index 11077d2..2a7f6ad 100644 --- a/src/orchestrator/cli.ts +++ b/src/orchestrator/cli.ts @@ -24,6 +24,7 @@ import * as fs from "node:fs" import * as path from "node:path" import { fileURLToPath } from "node:url" +import { createArgCursor } from "./arg-cursor.js" import { activeSessionCountForRepo, maxConcurrentSessionsFromEnv } from "../budget/concurrency.js" import { issueShape, issueSizeWarnings, splitIssues, type IssueSizeWarning, type SplitIssue, type WorktreeSpec } from "./split.js" import { readCostHistory } from "./cost-history.js" @@ -350,21 +351,9 @@ export function parseOrchestrateArgs(argv: string[]): { options: OrchestrateOpti } for (let i = 0; i < argv.length; i++) { - const arg = argv[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = argv[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next, nextRaw } = createArgCursor(argv, i, () => { i++ - return v - } + }) switch (flag) { case "--executor": { @@ -544,11 +533,10 @@ export function parseOrchestrateArgs(argv: string[]): { options: OrchestrateOpti case "--deploy-args": { // Deploy args legitimately start with "--" (e.g. --local), so // bypass next()'s "--"-rejecting value reader. - const v = inlineValue ?? argv[i + 1] + const v = nextRaw() if (v === undefined) { return { options, error: "Missing value for --deploy-args" } } - i++ options.deployArgs = v break } @@ -1405,21 +1393,9 @@ export function parseStatusArgs(argv: string[]): { options: StatusOptions; error help: false, } for (let i = 0; i < argv.length; i++) { - const arg = argv[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = argv[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(argv, i, () => { i++ - return v - } + }) switch (flag) { case "--repo": { const v = next() @@ -1711,21 +1687,9 @@ export interface StopOptions { export function parseStopArgs(argv: string[]): { options: StopOptions; error?: string } { const options: StopOptions = { repo: "", groups: [], graceMs: 5000, json: false, help: false } for (let i = 0; i < argv.length; i++) { - const arg = argv[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = argv[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(argv, i, () => { i++ - return v - } + }) switch (flag) { case "--repo": { const v = next() @@ -1938,21 +1902,9 @@ interface PipelineCliOptions { export function parsePipelineArgs(argv: string[]): { options: PipelineCliOptions; error?: string } { const options: PipelineCliOptions = { skipFiling: false, help: false } for (let i = 0; i < argv.length; i++) { - const arg = argv[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = argv[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(argv, i, () => { i++ - return v - } + }) switch (flag) { case "--workspace": case "--research-task": diff --git a/src/orchestrator/resume.ts b/src/orchestrator/resume.ts index bd3bc25..e937a5e 100644 --- a/src/orchestrator/resume.ts +++ b/src/orchestrator/resume.ts @@ -31,6 +31,7 @@ import { execFileSync, spawnSync } from "node:child_process" import * as fs from "node:fs" import * as path from "node:path" +import { createArgCursor } from "./arg-cursor.js" import { handleIterationExhaustion, handleQaSessionError, @@ -121,21 +122,9 @@ export function parseReviewArgs(argv: string[]): { options: ReviewCliOptions; er } options.target = target for (let i = 0; i < rest.length; i++) { - const arg = rest[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = rest[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(rest, i, () => { i++ - return v - } + }) switch (flag) { case "--repo": { const v = next() @@ -236,21 +225,9 @@ export function parseReworkArgs(argv: string[]): { options: ReworkCliOptions; er } options.target = target for (let i = 0; i < rest.length; i++) { - const arg = rest[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = rest[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(rest, i, () => { i++ - return v - } + }) switch (flag) { case "--repo": { const v = next() @@ -399,21 +376,9 @@ export function parseResumeArgs(argv: string[]): { options: ResumeCliOptions; er } options.target = target for (let i = 0; i < rest.length; i++) { - const arg = rest[i] - const eq = arg.indexOf("=") - const flag = eq === -1 ? arg : arg.slice(0, eq) - const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1) - const next = (): string | undefined => { - if (inlineValue !== undefined) { - return inlineValue - } - const v = rest[i + 1] - if (v === undefined || v.startsWith("--")) { - return undefined - } + const { arg, flag, next } = createArgCursor(rest, i, () => { i++ - return v - } + }) switch (flag) { case "--repo": { const v = next()