gsd-pi 2.80.0 → 2.81.0-dev.3cddbbba2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -59
- package/dist/claude-cli-check.d.ts +30 -0
- package/dist/claude-cli-check.js +18 -7
- package/dist/cli.js +0 -19
- package/dist/headless-query.d.ts +10 -0
- package/dist/headless-query.js +6 -4
- package/dist/loader-entrypoint.d.ts +8 -0
- package/dist/loader-entrypoint.js +27 -0
- package/dist/loader.js +2 -11
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +6 -3
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/readiness.js +18 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
- package/dist/resources/extensions/github-sync/sync.js +4 -1
- package/dist/resources/extensions/github-sync/templates.js +90 -74
- package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
- package/dist/resources/extensions/gsd/auto/loop.js +566 -526
- package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
- package/dist/resources/extensions/gsd/auto/phases.js +402 -157
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +105 -46
- package/dist/resources/extensions/gsd/auto/session.js +18 -1
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
- package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +80 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
- package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
- package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
- package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
- package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +23 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +248 -187
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +40 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +129 -89
- package/dist/resources/extensions/gsd/auto-prompts.js +382 -20
- package/dist/resources/extensions/gsd/auto-recovery.js +197 -9
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +253 -19
- package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +14 -17
- package/dist/resources/extensions/gsd/auto-worktree.js +324 -374
- package/dist/resources/extensions/gsd/auto.js +502 -130
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +147 -12
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +54 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +356 -58
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +147 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
- package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-config.js +1 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +17 -12
- package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
- package/dist/resources/extensions/gsd/commands-ship.js +23 -46
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
- package/dist/resources/extensions/gsd/component-loader.js +5 -11
- package/dist/resources/extensions/gsd/context-budget.js +37 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-adapter.js +47 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +353 -0
- package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
- package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
- package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
- package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
- package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
- package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
- package/dist/resources/extensions/gsd/db-migration-steps.js +416 -0
- package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
- package/dist/resources/extensions/gsd/db-open-state.js +32 -0
- package/dist/resources/extensions/gsd/db-provider.js +108 -0
- package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
- package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
- package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
- package/dist/resources/extensions/gsd/db-transaction.js +63 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
- package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
- package/dist/resources/extensions/gsd/detection.js +106 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/escalation.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +75 -6
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +331 -1535
- package/dist/resources/extensions/gsd/guided-flow.js +149 -48
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +6 -9
- package/dist/resources/extensions/gsd/init-wizard.js +4 -1
- package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
- package/dist/resources/extensions/gsd/memory-store.js +69 -12
- package/dist/resources/extensions/gsd/migrate/command.js +40 -1
- package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
- package/dist/resources/extensions/gsd/model-router.js +9 -6
- package/dist/resources/extensions/gsd/native-git-bridge.js +46 -22
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/notification-widget.js +21 -3
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
- package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +2 -0
- package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +24 -0
- package/dist/resources/extensions/gsd/process-task-path.js +61 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +37 -7
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +25 -34
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
- package/dist/resources/extensions/gsd/prompts/discuss.md +101 -183
- package/dist/resources/extensions/gsd/prompts/execute-task.md +42 -67
- package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/dist/resources/extensions/gsd/prompts/system.md +65 -107
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
- package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
- package/dist/resources/extensions/gsd/state.js +4 -0
- package/dist/resources/extensions/gsd/tool-contract.js +50 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +20 -16
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -1
- package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
- package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +7 -2
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
- package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
- package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
- package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
- package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +1364 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
- package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/chunks/167.js +2 -0
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-de742b64187e13fe.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/package.json +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.d.ts +2 -7
- package/dist/welcome-screen.js +68 -75
- package/package.json +20 -9
- package/packages/contracts/dist/index.d.ts +3 -0
- package/packages/contracts/dist/index.d.ts.map +1 -0
- package/packages/contracts/dist/index.js +5 -0
- package/packages/contracts/dist/index.js.map +1 -0
- package/packages/contracts/dist/rpc.d.ts +549 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.js +53 -0
- package/packages/contracts/dist/rpc.js.map +1 -0
- package/packages/contracts/dist/rpc.test.d.ts +2 -0
- package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
- package/packages/contracts/dist/rpc.test.js +47 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -0
- package/packages/contracts/dist/workflow.d.ts +180 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -0
- package/packages/contracts/dist/workflow.js +201 -0
- package/packages/contracts/dist/workflow.js.map +1 -0
- package/packages/contracts/package.json +39 -0
- package/packages/contracts/src/index.ts +5 -0
- package/packages/contracts/src/rpc.test.ts +72 -0
- package/packages/contracts/src/rpc.ts +286 -0
- package/packages/contracts/src/workflow.ts +213 -0
- package/packages/contracts/tsconfig.json +25 -0
- package/packages/daemon/package.json +3 -2
- package/packages/daemon/src/event-bridge.test.ts +2 -1
- package/packages/daemon/src/event-bridge.ts +1 -1
- package/packages/daemon/src/event-formatter.test.ts +1 -2
- package/packages/daemon/src/event-formatter.ts +1 -2
- package/packages/daemon/src/session-manager.ts +2 -2
- package/packages/daemon/src/types.ts +3 -18
- package/packages/mcp-server/dist/server.d.ts +13 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +77 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +1 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/types.d.ts +3 -11
- package/packages/mcp-server/dist/types.d.ts.map +1 -1
- package/packages/mcp-server/dist/types.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +24 -57
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -2
- package/packages/mcp-server/src/mcp-server.test.ts +138 -0
- package/packages/mcp-server/src/server.ts +99 -1
- package/packages/mcp-server/src/session-manager.ts +2 -2
- package/packages/mcp-server/src/types.ts +7 -18
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +32 -56
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +9 -2
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +43 -11
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +2 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
- package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
- package/packages/pi-agent-core/dist/token-audit.js +221 -0
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
- package/packages/pi-agent-core/dist/types.d.ts +31 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +52 -11
- package/packages/pi-agent-core/src/index.ts +2 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
- package/packages/pi-agent-core/src/token-audit.ts +287 -0
- package/packages/pi-agent-core/src/types.ts +26 -10
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
- package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/fake-model.js +27 -0
- package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/index.js +8 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +9 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
- package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/fake.js +319 -0
- package/packages/pi-ai/dist/providers/fake.js.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
- package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +2 -0
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/models/fake-model.ts +30 -0
- package/packages/pi-ai/src/models/index.ts +9 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
- package/packages/pi-ai/src/providers/anthropic.ts +22 -9
- package/packages/pi-ai/src/providers/fake.ts +376 -0
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
- package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
- package/packages/pi-ai/src/types.ts +3 -0
- package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
- package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +30 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +78 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +24 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +33 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
- package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +225 -18
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +25 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +113 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +58 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +10 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +51 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +302 -56
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +86 -2
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +111 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +14 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +77 -11
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
- package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +123 -2
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +39 -29
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +51 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/package.json +2 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +91 -0
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
- package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
- package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
- package/packages/pi-coding-agent/src/core/settings-manager.ts +51 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
- package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
- package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
- package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
- package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +325 -20
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +66 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +161 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -13
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +10 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +71 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +327 -68
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +118 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +108 -3
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +101 -11
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
- package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +138 -3
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +39 -29
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +68 -0
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
- package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
- package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
- package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +1 -0
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -0
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/style.d.ts +41 -0
- package/packages/pi-tui/dist/style.d.ts.map +1 -0
- package/packages/pi-tui/dist/style.js +158 -0
- package/packages/pi-tui/dist/style.js.map +1 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +19 -8
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
- package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
- package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
- package/packages/pi-tui/src/index.ts +9 -0
- package/packages/pi-tui/src/overlay-layout.ts +10 -7
- package/packages/pi-tui/src/style.ts +225 -0
- package/packages/pi-tui/src/tui.ts +21 -8
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/README.md +10 -3
- package/packages/rpc-client/dist/index.d.ts +1 -1
- package/packages/rpc-client/dist/index.d.ts.map +1 -1
- package/packages/rpc-client/dist/index.js.map +1 -1
- package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
- package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-client.js.map +1 -1
- package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
- package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
- package/packages/rpc-client/dist/rpc-types.js +3 -11
- package/packages/rpc-client/dist/rpc-types.js.map +1 -1
- package/packages/rpc-client/package.json +4 -1
- package/packages/rpc-client/src/index.ts +1 -1
- package/packages/rpc-client/src/rpc-client.ts +3 -6
- package/packages/rpc-client/src/rpc-types.ts +3 -398
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +123 -2
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +39 -29
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
- package/src/resources/extensions/github-sync/sync.ts +8 -1
- package/src/resources/extensions/github-sync/templates.ts +93 -88
- package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
- package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
- package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +20 -16
- package/src/resources/extensions/gsd/auto/loop.ts +645 -603
- package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
- package/src/resources/extensions/gsd/auto/phases.ts +546 -222
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +119 -46
- package/src/resources/extensions/gsd/auto/session.ts +19 -1
- package/src/resources/extensions/gsd/auto/types.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
- package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +159 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
- package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
- package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
- package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
- package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
- package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +51 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +304 -184
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +48 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +141 -91
- package/src/resources/extensions/gsd/auto-prompts.ts +398 -19
- package/src/resources/extensions/gsd/auto-recovery.ts +207 -7
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +328 -27
- package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +17 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +352 -396
- package/src/resources/extensions/gsd/auto.ts +590 -127
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +181 -12
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +56 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +411 -58
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +153 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
- package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
- package/src/resources/extensions/gsd/commands-config.ts +1 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +17 -12
- package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
- package/src/resources/extensions/gsd/commands-ship.ts +24 -51
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
- package/src/resources/extensions/gsd/component-loader.ts +5 -11
- package/src/resources/extensions/gsd/context-budget.ts +44 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-adapter.ts +75 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +385 -0
- package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
- package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
- package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
- package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
- package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
- package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
- package/src/resources/extensions/gsd/db-migration-steps.ts +459 -0
- package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
- package/src/resources/extensions/gsd/db-open-state.ts +47 -0
- package/src/resources/extensions/gsd/db-provider.ts +148 -0
- package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
- package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
- package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
- package/src/resources/extensions/gsd/db-transaction.ts +76 -0
- package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
- package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
- package/src/resources/extensions/gsd/detection.ts +128 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/escalation.ts +3 -1
- package/src/resources/extensions/gsd/git-service.ts +89 -10
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +399 -1677
- package/src/resources/extensions/gsd/guided-flow.ts +175 -55
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +8 -9
- package/src/resources/extensions/gsd/init-wizard.ts +5 -1
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
- package/src/resources/extensions/gsd/memory-store.ts +77 -12
- package/src/resources/extensions/gsd/migrate/command.ts +47 -1
- package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
- package/src/resources/extensions/gsd/model-router.ts +10 -6
- package/src/resources/extensions/gsd/native-git-bridge.ts +53 -19
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/notification-widget.ts +25 -4
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
- package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +4 -1
- package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +27 -1
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/process-task-path.ts +81 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +36 -7
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +41 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +25 -34
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +70 -98
- package/src/resources/extensions/gsd/prompts/discuss.md +101 -183
- package/src/resources/extensions/gsd/prompts/execute-task.md +42 -67
- package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
- package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +47 -59
- package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
- package/src/resources/extensions/gsd/prompts/queue.md +46 -53
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
- package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
- package/src/resources/extensions/gsd/prompts/system.md +65 -107
- package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
- package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
- package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
- package/src/resources/extensions/gsd/state.ts +6 -3
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +232 -9
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1269 -242
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +363 -18
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -76
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +184 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +160 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
- package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
- package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
- package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +159 -5
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +190 -11
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
- package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
- package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +24 -11
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +100 -38
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
- package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +151 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -11
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +53 -43
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +77 -12
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +267 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
- package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -182
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
- package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
- package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
- package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -1
- package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -91
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
- package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +36 -164
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
- package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
- package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +222 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +65 -56
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
- package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +295 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +330 -0
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +140 -8
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +300 -0
- package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -57
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +154 -0
- package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +197 -78
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +888 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
- package/src/resources/extensions/gsd/tool-contract.ts +82 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +29 -24
- package/src/resources/extensions/gsd/tools/complete-task.ts +5 -2
- package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
- package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +7 -2
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
- package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
- package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
- package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
- package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
- package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
- package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1882 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
- package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
- package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
- package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8336.6f6f30e410419aff.js +0 -10
- package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1247
- package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
- /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{V-3Ehy4B24f9FCGiLPWIM → F5x9E6H9k_52fjqyql93y}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode orchestration, session lifecycle, and stop handling.
|
|
1
3
|
/**
|
|
2
4
|
* GSD Auto Mode — Fresh Session Per Unit
|
|
3
5
|
*
|
|
@@ -14,6 +16,7 @@ import type {
|
|
|
14
16
|
ExtensionAPI,
|
|
15
17
|
ExtensionContext,
|
|
16
18
|
ExtensionCommandContext,
|
|
19
|
+
SessionMessageEntry,
|
|
17
20
|
} from "@gsd/pi-coding-agent";
|
|
18
21
|
|
|
19
22
|
import { deriveState } from "./state.js";
|
|
@@ -30,7 +33,7 @@ import {
|
|
|
30
33
|
setRuntimeKv,
|
|
31
34
|
deleteRuntimeKv,
|
|
32
35
|
} from "./db/runtime-kv.js";
|
|
33
|
-
import { getManifestStatus } from "./files.js";
|
|
36
|
+
import { extractSection, getManifestStatus, splitFrontmatter, parseFrontmatterMap } from "./files.js";
|
|
34
37
|
export { inlinePriorMilestoneSummary } from "./files.js";
|
|
35
38
|
import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
|
|
36
39
|
import {
|
|
@@ -59,6 +62,7 @@ import {
|
|
|
59
62
|
isLockProcessAlive,
|
|
60
63
|
formatCrashInfo,
|
|
61
64
|
emitCrashRecoveredUnitEnd,
|
|
65
|
+
emitOpenUnitEndForUnit,
|
|
62
66
|
} from "./crash-recovery.js";
|
|
63
67
|
import {
|
|
64
68
|
acquireSessionLock,
|
|
@@ -150,6 +154,7 @@ import {
|
|
|
150
154
|
resolveProjectRoot,
|
|
151
155
|
} from "./worktree.js";
|
|
152
156
|
import { GitServiceImpl } from "./git-service.js";
|
|
157
|
+
import { nativeCheckoutBranch } from "./native-git-bridge.js";
|
|
153
158
|
import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
154
159
|
import {
|
|
155
160
|
createAutoWorktree,
|
|
@@ -162,8 +167,6 @@ import {
|
|
|
162
167
|
mergeMilestoneToMain,
|
|
163
168
|
autoWorktreeBranch,
|
|
164
169
|
syncWorktreeStateBack,
|
|
165
|
-
syncProjectRootToWorktree,
|
|
166
|
-
syncStateToProjectRoot,
|
|
167
170
|
readResourceVersion,
|
|
168
171
|
checkResourcesStale,
|
|
169
172
|
escapeStaleWorktree,
|
|
@@ -186,6 +189,8 @@ import { isClosedStatus } from "./status-guards.js";
|
|
|
186
189
|
import {
|
|
187
190
|
type AutoDashboardData,
|
|
188
191
|
updateProgressWidget as _updateProgressWidget,
|
|
192
|
+
setCompletionProgressWidget,
|
|
193
|
+
setAutoOutcomeWidget,
|
|
189
194
|
updateSliceProgressCache,
|
|
190
195
|
clearSliceProgressCache,
|
|
191
196
|
describeNextUnit as _describeNextUnit,
|
|
@@ -199,7 +204,9 @@ import {
|
|
|
199
204
|
deregisterSigtermHandler as _deregisterSigtermHandler,
|
|
200
205
|
detectWorkingTreeActivity,
|
|
201
206
|
} from "./auto-supervisor.js";
|
|
202
|
-
import { isDbAvailable, getMilestone } from "./gsd-db.js";
|
|
207
|
+
import { isDbAvailable, getMilestone, getMilestoneSlices } from "./gsd-db.js";
|
|
208
|
+
import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
|
|
209
|
+
import { writeUnitRuntimeRecord } from "./unit-runtime.js";
|
|
203
210
|
import { countPendingCaptures } from "./captures.js";
|
|
204
211
|
import { CMUX_CHANNELS, type CmuxLogLevel } from "../shared/cmux-events.js";
|
|
205
212
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
@@ -227,21 +234,41 @@ import { bootstrapAutoSession, openProjectDbIfPresent, type BootstrapDeps } from
|
|
|
227
234
|
import { initHealthWidget } from "./health-widget.js";
|
|
228
235
|
import { runLegacyAutoLoop, runUokKernelLoop } from "./auto/loop.js";
|
|
229
236
|
import { resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSessionSwitchInFlight } from "./auto/resolve.js";
|
|
230
|
-
import type { LoopDeps } from "./auto/loop-deps.js";
|
|
237
|
+
import type { LoopDeps, StopAutoOptions } from "./auto/loop-deps.js";
|
|
231
238
|
import type { ErrorContext } from "./auto/types.js";
|
|
232
239
|
import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
233
240
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
234
241
|
import { validateDirectory } from "./validate-directory.js";
|
|
235
242
|
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
236
243
|
import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
|
|
244
|
+
import { reconcileBeforeDispatch } from "./state-reconciliation.js";
|
|
245
|
+
import { compileUnitToolContract } from "./tool-contract.js";
|
|
246
|
+
import { createWorktreeSafetyModule } from "./worktree-safety.js";
|
|
247
|
+
import { resolveManifest } from "./unit-context-manifest.js";
|
|
248
|
+
import { classifyFailure } from "./recovery-classification.js";
|
|
237
249
|
// Slice-level parallelism (#2340)
|
|
238
250
|
import { getEligibleSlices } from "./slice-parallel-eligibility.js";
|
|
239
251
|
import { startSliceParallel } from "./slice-parallel-orchestrator.js";
|
|
240
252
|
import {
|
|
241
|
-
|
|
242
|
-
type
|
|
243
|
-
} from "./worktree-
|
|
253
|
+
WorktreeLifecycle,
|
|
254
|
+
type WorktreeLifecycleDeps,
|
|
255
|
+
} from "./worktree-lifecycle.js";
|
|
256
|
+
import { WorktreeStateProjection } from "./worktree-state-projection.js";
|
|
244
257
|
import { reorderForCaching } from "./prompt-ordering.js";
|
|
258
|
+
import { initTokenCounter } from "./token-counter.js";
|
|
259
|
+
|
|
260
|
+
// Warm the tiktoken encoder at extension startup so context-budget computations
|
|
261
|
+
// can use accurate token counts via countTokensSync without paying the load
|
|
262
|
+
// cost mid-prompt-build. Fire-and-forget — failure falls back to the
|
|
263
|
+
// provider-aware char-ratio estimator already used by getCharsPerToken().
|
|
264
|
+
// Catch rejections explicitly: an unhandled rejection at module-import time
|
|
265
|
+
// can destabilize startup before the engine logger is configured.
|
|
266
|
+
void initTokenCounter().catch((err) => {
|
|
267
|
+
logWarning(
|
|
268
|
+
"engine",
|
|
269
|
+
`token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
270
|
+
);
|
|
271
|
+
});
|
|
245
272
|
|
|
246
273
|
// ─── Session State ─────────────────────────────────────────────────────────
|
|
247
274
|
|
|
@@ -293,11 +320,15 @@ const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
|
293
320
|
* the DB is unavailable (e.g. fresh project before init) we skip registration
|
|
294
321
|
* silently rather than blocking session start.
|
|
295
322
|
*/
|
|
296
|
-
function registerAutoWorkerForSession(
|
|
323
|
+
function registerAutoWorkerForSession(
|
|
324
|
+
session: AutoSession,
|
|
325
|
+
projectRootOverride?: string,
|
|
326
|
+
): void {
|
|
297
327
|
if (session.workerId) return; // already registered (e.g. resume re-runs)
|
|
298
328
|
try {
|
|
299
329
|
const projectRootRealpath = normalizeRealPath(
|
|
300
|
-
|
|
330
|
+
projectRootOverride
|
|
331
|
+
?? session.scope?.workspace.projectRoot
|
|
301
332
|
?? (session.originalBasePath || session.basePath),
|
|
302
333
|
);
|
|
303
334
|
session.workerId = registerAutoWorker({ projectRootRealpath });
|
|
@@ -332,6 +363,14 @@ function restoreProjectRootEnv(): void {
|
|
|
332
363
|
s.projectRootEnvCaptured = false;
|
|
333
364
|
}
|
|
334
365
|
|
|
366
|
+
export function _captureProjectRootEnvForTest(projectRoot: string): void {
|
|
367
|
+
captureProjectRootEnv(projectRoot);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
export function _restoreProjectRootEnvForTest(): void {
|
|
371
|
+
restoreProjectRootEnv();
|
|
372
|
+
}
|
|
373
|
+
|
|
335
374
|
function captureMilestoneLockEnv(milestoneId: string | null): void {
|
|
336
375
|
if (!s.milestoneLockEnvCaptured) {
|
|
337
376
|
s.hadMilestoneLockEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_MILESTONE_LOCK");
|
|
@@ -420,6 +459,22 @@ export function _synthesizePausedSessionRecoveryForTest(
|
|
|
420
459
|
return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
|
|
421
460
|
}
|
|
422
461
|
|
|
462
|
+
// `_resolvePausedResumeBasePathForTest` was retired in ADR-016 phase 2 / B3
|
|
463
|
+
// (#5621). Production callers go through
|
|
464
|
+
// `WorktreeLifecycle.resumeFromPausedSession`; the pure helper for tests is
|
|
465
|
+
// `resolvePausedResumeBasePath` exported from `worktree-lifecycle.ts`.
|
|
466
|
+
|
|
467
|
+
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
468
|
+
|
|
469
|
+
function withDetachedAutoKeepalive<T>(run: Promise<T>): Promise<T> {
|
|
470
|
+
const keepAlive = setInterval(() => {}, DETACHED_AUTO_KEEPALIVE_INTERVAL_MS);
|
|
471
|
+
return run.finally(() => {
|
|
472
|
+
clearInterval(keepAlive);
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
export const _withDetachedAutoKeepaliveForTest = withDetachedAutoKeepalive;
|
|
477
|
+
|
|
423
478
|
export function startAutoDetached(
|
|
424
479
|
ctx: ExtensionCommandContext,
|
|
425
480
|
pi: ExtensionAPI,
|
|
@@ -431,7 +486,7 @@ export function startAutoDetached(
|
|
|
431
486
|
milestoneLock?: string | null;
|
|
432
487
|
},
|
|
433
488
|
): void {
|
|
434
|
-
void startAuto(ctx, pi, base, verboseMode, options).catch((err) => {
|
|
489
|
+
void withDetachedAutoKeepalive(startAuto(ctx, pi, base, verboseMode, options)).catch((err) => {
|
|
435
490
|
const message = getErrorMessage(err);
|
|
436
491
|
ctx.ui.notify(`Auto-start failed: ${message}`, "error");
|
|
437
492
|
logWarning("engine", `auto start error: ${message}`, { file: "auto.ts" });
|
|
@@ -490,9 +545,54 @@ export {
|
|
|
490
545
|
getBudgetEnforcementAction,
|
|
491
546
|
} from "./auto-budget.js";
|
|
492
547
|
|
|
548
|
+
function closeOutSignalInterruptedUnit(currentBasePath: string): void {
|
|
549
|
+
const currentUnit = s.currentUnit;
|
|
550
|
+
if (!currentUnit) return;
|
|
551
|
+
|
|
552
|
+
const reason = "Auto-mode process received a termination signal";
|
|
553
|
+
const errorContext: ErrorContext = {
|
|
554
|
+
message: reason,
|
|
555
|
+
category: "aborted",
|
|
556
|
+
isTransient: false,
|
|
557
|
+
};
|
|
558
|
+
const basePath = s.basePath || currentBasePath;
|
|
559
|
+
|
|
560
|
+
try {
|
|
561
|
+
emitOpenUnitEndForUnit(basePath, currentUnit.type, currentUnit.id, "cancelled", errorContext);
|
|
562
|
+
} catch (err) {
|
|
563
|
+
logWarning("engine", `signal unit-end cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
try {
|
|
567
|
+
writeUnitRuntimeRecord(basePath, currentUnit.type, currentUnit.id, currentUnit.startedAt, {
|
|
568
|
+
phase: "crashed",
|
|
569
|
+
lastProgressAt: Date.now(),
|
|
570
|
+
lastProgressKind: "signal",
|
|
571
|
+
});
|
|
572
|
+
} catch (err) {
|
|
573
|
+
logWarning("engine", `signal runtime cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
try {
|
|
577
|
+
if (s.workerId) markLatestActiveForWorkerCanceled(s.workerId, "signal-exit");
|
|
578
|
+
} catch (err) {
|
|
579
|
+
logWarning("engine", `signal dispatch cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
try {
|
|
583
|
+
resolveAgentEndCancelled(errorContext);
|
|
584
|
+
} catch (err) {
|
|
585
|
+
logWarning("engine", `signal resolve cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
493
589
|
/** Wrapper: register SIGTERM handler and store reference. */
|
|
494
590
|
function registerSigtermHandler(currentBasePath: string): void {
|
|
495
|
-
s.sigtermHandler = _registerSigtermHandler(
|
|
591
|
+
s.sigtermHandler = _registerSigtermHandler(
|
|
592
|
+
currentBasePath,
|
|
593
|
+
s.sigtermHandler,
|
|
594
|
+
() => closeOutSignalInterruptedUnit(currentBasePath),
|
|
595
|
+
);
|
|
496
596
|
}
|
|
497
597
|
|
|
498
598
|
/** Wrapper: deregister SIGTERM handler and clear reference. */
|
|
@@ -566,6 +666,10 @@ export function isAutoActive(): boolean {
|
|
|
566
666
|
return s.active;
|
|
567
667
|
}
|
|
568
668
|
|
|
669
|
+
export function isAutoCompletionStopInProgress(): boolean {
|
|
670
|
+
return s.completionStopInProgress;
|
|
671
|
+
}
|
|
672
|
+
|
|
569
673
|
/** Test-only seam for validating auto-mode guards (#4704). Do not use in production code. */
|
|
570
674
|
export function _setAutoActiveForTest(active: boolean): void {
|
|
571
675
|
s.active = active;
|
|
@@ -595,6 +699,30 @@ export function isAutoPaused(): boolean {
|
|
|
595
699
|
return s.paused;
|
|
596
700
|
}
|
|
597
701
|
|
|
702
|
+
export interface ResumeResourceRefreshDeps {
|
|
703
|
+
env?: NodeJS.ProcessEnv;
|
|
704
|
+
importModule?: (specifier: string) => Promise<any>;
|
|
705
|
+
openProjectDb?: (basePath: string) => Promise<void>;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
export async function refreshResumeResourcesAndDb(
|
|
709
|
+
basePath: string,
|
|
710
|
+
deps: ResumeResourceRefreshDeps = {},
|
|
711
|
+
): Promise<void> {
|
|
712
|
+
const env = deps.env ?? process.env;
|
|
713
|
+
const importModule = deps.importModule ?? ((specifier: string) => import(specifier));
|
|
714
|
+
const agentDir = env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
|
|
715
|
+
const pkgRoot = env.GSD_PKG_ROOT;
|
|
716
|
+
const resourceLoaderPath = pkgRoot
|
|
717
|
+
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
718
|
+
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
719
|
+
const { initResources } = await importModule(resourceLoaderPath);
|
|
720
|
+
initResources(agentDir);
|
|
721
|
+
const { primeCache } = await importModule("./prompt-loader.js");
|
|
722
|
+
primeCache();
|
|
723
|
+
await (deps.openProjectDb ?? openProjectDbIfPresent)(basePath);
|
|
724
|
+
}
|
|
725
|
+
|
|
598
726
|
export function setActiveEngineId(id: string | null): void {
|
|
599
727
|
s.activeEngineId = id;
|
|
600
728
|
}
|
|
@@ -802,6 +930,31 @@ function buildSnapshotOpts(
|
|
|
802
930
|
};
|
|
803
931
|
}
|
|
804
932
|
|
|
933
|
+
function currentUnitLabel(): string | null {
|
|
934
|
+
if (!s.currentUnit) return null;
|
|
935
|
+
return `${unitVerb(s.currentUnit.type)} ${s.currentUnit.id}`;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
function setLifecycleOutcome(
|
|
939
|
+
ctx: ExtensionContext | undefined,
|
|
940
|
+
input: {
|
|
941
|
+
status: "paused" | "stopped" | "blocked" | "failed" | "complete" | "waiting" | "step";
|
|
942
|
+
title: string;
|
|
943
|
+
detail?: string | null;
|
|
944
|
+
nextAction: string;
|
|
945
|
+
commands?: string[];
|
|
946
|
+
unitLabel?: string | null;
|
|
947
|
+
},
|
|
948
|
+
): void {
|
|
949
|
+
if (!ctx?.hasUI) return;
|
|
950
|
+
const { unitLabel: unitLabelOverride, ...rest } = input;
|
|
951
|
+
setAutoOutcomeWidget(ctx, {
|
|
952
|
+
...rest,
|
|
953
|
+
unitLabel: unitLabelOverride !== undefined ? unitLabelOverride : currentUnitLabel(),
|
|
954
|
+
startedAt: s.autoStartTime,
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
|
|
805
958
|
function handleLostSessionLock(
|
|
806
959
|
ctx?: ExtensionContext,
|
|
807
960
|
lockStatus?: SessionLockStatus,
|
|
@@ -849,7 +1002,23 @@ function handleLostSessionLock(
|
|
|
849
1002
|
* the stale unit state, progress widget, status badge, and restores CWD so
|
|
850
1003
|
* the dashboard does not show an orphaned timer and the shell is usable.
|
|
851
1004
|
*/
|
|
852
|
-
function
|
|
1005
|
+
export async function rerootCommandSession(
|
|
1006
|
+
cmdCtx: Pick<ExtensionCommandContext, "newSession"> | null | undefined,
|
|
1007
|
+
workspaceRoot: string,
|
|
1008
|
+
): Promise<{ status: "skipped" | "ok" | "cancelled" | "failed"; error?: string }> {
|
|
1009
|
+
if (!cmdCtx || !workspaceRoot) return { status: "skipped" };
|
|
1010
|
+
try {
|
|
1011
|
+
const result = await cmdCtx.newSession({ workspaceRoot });
|
|
1012
|
+
return result.cancelled ? { status: "cancelled" } : { status: "ok" };
|
|
1013
|
+
} catch (err) {
|
|
1014
|
+
return {
|
|
1015
|
+
status: "failed",
|
|
1016
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void> {
|
|
853
1022
|
s.currentUnit = null;
|
|
854
1023
|
s.active = false;
|
|
855
1024
|
deactivateGSD();
|
|
@@ -873,35 +1042,132 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
|
|
|
873
1042
|
// visible so the user still has a resumable auto-mode signal on screen.
|
|
874
1043
|
if (!s.paused) {
|
|
875
1044
|
ctx.ui.setStatus("gsd-auto", undefined);
|
|
876
|
-
|
|
1045
|
+
if (s.completionStopInProgress) {
|
|
1046
|
+
s.completionStopInProgress = false;
|
|
1047
|
+
}
|
|
877
1048
|
initHealthWidget(ctx);
|
|
878
1049
|
}
|
|
879
1050
|
|
|
880
|
-
//
|
|
1051
|
+
// ADR-016 phase 3 (#5693): the stop-path basePath restore routes through
|
|
1052
|
+
// `Lifecycle.restoreToProjectRoot()`, the sole owner of `s.basePath`
|
|
1053
|
+
// mutation. The verb assigns `s.basePath` before any throwable work
|
|
1054
|
+
// (rebuildGitService, cache invalidation), so a thrown error still leaves
|
|
1055
|
+
// basePath restored — no fallback assignment needed at the call site.
|
|
1056
|
+
// The chdir stays here because `restoreToProjectRoot` is a pure
|
|
1057
|
+
// session-state mutation.
|
|
881
1058
|
if (s.originalBasePath) {
|
|
882
|
-
s.basePath = s.originalBasePath;
|
|
883
1059
|
try {
|
|
884
|
-
|
|
1060
|
+
buildLifecycle().restoreToProjectRoot();
|
|
1061
|
+
} catch (err) {
|
|
1062
|
+
logWarning(
|
|
1063
|
+
"engine",
|
|
1064
|
+
`restore project root failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1065
|
+
{ file: "auto.ts" },
|
|
1066
|
+
);
|
|
1067
|
+
}
|
|
1068
|
+
try {
|
|
1069
|
+
process.chdir(s.originalBasePath);
|
|
885
1070
|
} catch (err) {
|
|
886
|
-
|
|
887
|
-
|
|
1071
|
+
logWarning("engine", `basePath restore/chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
if (s.originalBasePath && s.cmdCtx) {
|
|
1076
|
+
const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
|
|
1077
|
+
if (result.status === "cancelled") {
|
|
1078
|
+
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
|
|
1079
|
+
} else if (result.status === "failed") {
|
|
1080
|
+
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
|
|
888
1081
|
}
|
|
889
1082
|
}
|
|
890
1083
|
}
|
|
891
1084
|
|
|
1085
|
+
export function _cleanupAfterLoopExitForTest(ctx: ExtensionContext): Promise<void> {
|
|
1086
|
+
return cleanupAfterLoopExit(ctx);
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
export type AutoWorktreeExitAction = "skip" | "merge" | "preserve";
|
|
1090
|
+
|
|
1091
|
+
interface MilestoneCompletionRollup {
|
|
1092
|
+
milestoneTitle?: string;
|
|
1093
|
+
oneLiner?: string;
|
|
1094
|
+
successCriteriaResults?: string;
|
|
1095
|
+
definitionOfDoneResults?: string;
|
|
1096
|
+
requirementOutcomes?: string;
|
|
1097
|
+
deviations?: string;
|
|
1098
|
+
followUps?: string;
|
|
1099
|
+
keyDecisions?: string[];
|
|
1100
|
+
keyFiles?: string[];
|
|
1101
|
+
lessonsLearned?: string[];
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
function normalizeFrontmatterList(value: unknown): string[] {
|
|
1105
|
+
if (!Array.isArray(value)) return [];
|
|
1106
|
+
return value
|
|
1107
|
+
.map(item => typeof item === "string" ? item.trim() : "")
|
|
1108
|
+
.filter(item => item.length > 0 && item !== "(none)");
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
function firstBoldParagraph(body: string): string | undefined {
|
|
1112
|
+
const match = body.match(/\*\*([^*\n][\s\S]*?)\*\*/);
|
|
1113
|
+
return match?.[1]?.replace(/\s+/g, " ").trim() || undefined;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
function loadMilestoneCompletionRollup(basePath: string, milestoneId: string | null | undefined): MilestoneCompletionRollup {
|
|
1117
|
+
if (!milestoneId) return {};
|
|
1118
|
+
const summaryPath = resolveMilestoneFile(basePath, milestoneId, "SUMMARY");
|
|
1119
|
+
if (!summaryPath || !existsSync(summaryPath)) return {};
|
|
1120
|
+
|
|
1121
|
+
try {
|
|
1122
|
+
const raw = readFileSync(summaryPath, "utf-8");
|
|
1123
|
+
const [frontmatterLines, body] = splitFrontmatter(raw);
|
|
1124
|
+
const frontmatter = frontmatterLines ? parseFrontmatterMap(frontmatterLines) : {};
|
|
1125
|
+
return {
|
|
1126
|
+
milestoneTitle: typeof frontmatter.title === "string" ? frontmatter.title : undefined,
|
|
1127
|
+
oneLiner: firstBoldParagraph(body),
|
|
1128
|
+
successCriteriaResults: extractSection(body, "Success Criteria Results") ?? undefined,
|
|
1129
|
+
definitionOfDoneResults: extractSection(body, "Definition of Done Results") ?? undefined,
|
|
1130
|
+
requirementOutcomes: extractSection(body, "Requirement Outcomes") ?? undefined,
|
|
1131
|
+
deviations: extractSection(body, "Deviations") ?? undefined,
|
|
1132
|
+
followUps: extractSection(body, "Follow-ups") ?? undefined,
|
|
1133
|
+
keyDecisions: normalizeFrontmatterList(frontmatter.key_decisions),
|
|
1134
|
+
keyFiles: normalizeFrontmatterList(frontmatter.key_files),
|
|
1135
|
+
lessonsLearned: normalizeFrontmatterList(frontmatter.lessons_learned),
|
|
1136
|
+
};
|
|
1137
|
+
} catch (err) {
|
|
1138
|
+
logWarning("dashboard", `completion roll-up summary read failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1139
|
+
return {};
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
export function _resolveAutoWorktreeExitActionForTest(
|
|
1144
|
+
currentMilestoneId: string | null | undefined,
|
|
1145
|
+
milestoneMergedInPhases: boolean,
|
|
1146
|
+
milestoneComplete: boolean,
|
|
1147
|
+
): AutoWorktreeExitAction {
|
|
1148
|
+
const action = _selectStopAutoWorktreeExit({
|
|
1149
|
+
currentMilestoneId: currentMilestoneId ?? null,
|
|
1150
|
+
milestoneComplete,
|
|
1151
|
+
milestoneMergedInPhases,
|
|
1152
|
+
});
|
|
1153
|
+
return action === "none" ? "skip" : action;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
892
1156
|
export async function stopAuto(
|
|
893
1157
|
ctx?: ExtensionContext,
|
|
894
1158
|
pi?: ExtensionAPI,
|
|
895
1159
|
reason?: string,
|
|
1160
|
+
options: StopAutoOptions = {},
|
|
896
1161
|
): Promise<void> {
|
|
897
1162
|
if (!s.active && !s.paused) return;
|
|
898
1163
|
const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
|
|
899
1164
|
const reasonSuffix = reason ? ` — ${reason}` : "";
|
|
1165
|
+
const preserveCompletionSurface = Boolean(options.completionWidget);
|
|
1166
|
+
s.completionStopInProgress = preserveCompletionSurface;
|
|
900
1167
|
|
|
901
|
-
// #4764 — telemetry: record the exit reason
|
|
902
|
-
// was
|
|
903
|
-
//
|
|
904
|
-
// is exactly the pattern that strands work.
|
|
1168
|
+
// #4764 — telemetry: record the exit reason, isolation mode, whether an auto
|
|
1169
|
+
// worktree was active, and whether the current milestone was merged before
|
|
1170
|
+
// stopAuto. The unmerged-work warning is only meaningful for real worktrees.
|
|
905
1171
|
try {
|
|
906
1172
|
const { emitAutoExit } = await import("./worktree-telemetry.js");
|
|
907
1173
|
type AutoExitReason =
|
|
@@ -926,10 +1192,13 @@ export async function stopAuto(
|
|
|
926
1192
|
: rawReason === "stop" || rawReason === "pause"
|
|
927
1193
|
? rawReason
|
|
928
1194
|
: "other";
|
|
929
|
-
|
|
1195
|
+
const telemetryBase = s.originalBasePath || s.basePath;
|
|
1196
|
+
emitAutoExit(telemetryBase, {
|
|
930
1197
|
reason: normalizedReason,
|
|
931
1198
|
milestoneId: s.currentMilestoneId ?? undefined,
|
|
932
1199
|
milestoneMerged: s.milestoneMergedInPhases === true,
|
|
1200
|
+
isolationMode: getIsolationMode(telemetryBase),
|
|
1201
|
+
worktreeActive: isInAutoWorktree(s.basePath),
|
|
933
1202
|
});
|
|
934
1203
|
} catch (err) {
|
|
935
1204
|
logWarning("engine", `auto-exit telemetry failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -957,6 +1226,8 @@ export async function stopAuto(
|
|
|
957
1226
|
if (s.workerId) {
|
|
958
1227
|
markWorkerStopping(s.workerId);
|
|
959
1228
|
}
|
|
1229
|
+
s.workerId = null;
|
|
1230
|
+
s.milestoneLeaseToken = null;
|
|
960
1231
|
} catch (e) {
|
|
961
1232
|
debugLog("stop-cleanup-coordination", { error: e instanceof Error ? e.message : String(e) });
|
|
962
1233
|
}
|
|
@@ -1000,7 +1271,7 @@ export async function stopAuto(
|
|
|
1000
1271
|
const notifyCtx = ctx
|
|
1001
1272
|
? { notify: ctx.ui.notify.bind(ctx.ui) }
|
|
1002
1273
|
: { notify: () => {} };
|
|
1003
|
-
const
|
|
1274
|
+
const lifecycle = buildLifecycle();
|
|
1004
1275
|
|
|
1005
1276
|
// Check if the milestone is complete. DB status is the authoritative
|
|
1006
1277
|
// signal — only a successful gsd_complete_milestone call flips it to
|
|
@@ -1038,17 +1309,35 @@ export async function stopAuto(
|
|
|
1038
1309
|
logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1039
1310
|
}
|
|
1040
1311
|
|
|
1041
|
-
|
|
1312
|
+
const exitAction = _selectStopAutoWorktreeExit({
|
|
1313
|
+
currentMilestoneId: s.currentMilestoneId,
|
|
1314
|
+
milestoneComplete,
|
|
1315
|
+
milestoneMergedInPhases: s.milestoneMergedInPhases,
|
|
1316
|
+
});
|
|
1317
|
+
|
|
1318
|
+
if (exitAction === "merge") {
|
|
1042
1319
|
// Milestone is complete — merge worktree branch back to main
|
|
1043
|
-
|
|
1044
|
-
|
|
1320
|
+
const r = lifecycle.exitMilestone(
|
|
1321
|
+
s.currentMilestoneId,
|
|
1322
|
+
{ merge: true },
|
|
1323
|
+
notifyCtx,
|
|
1324
|
+
);
|
|
1325
|
+
if (!r.ok && r.cause instanceof Error) throw r.cause;
|
|
1326
|
+
} else if (exitAction === "preserve") {
|
|
1045
1327
|
// Milestone still in progress — preserve branch for later resumption
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1328
|
+
const r = lifecycle.exitMilestone(
|
|
1329
|
+
s.currentMilestoneId,
|
|
1330
|
+
{ merge: false, preserveBranch: true },
|
|
1331
|
+
notifyCtx,
|
|
1332
|
+
);
|
|
1333
|
+
if (!r.ok && r.cause instanceof Error) throw r.cause;
|
|
1049
1334
|
}
|
|
1050
1335
|
}
|
|
1051
1336
|
} catch (e) {
|
|
1337
|
+
ctx?.ui.notify(
|
|
1338
|
+
`Worktree cleanup failed for ${s.currentMilestoneId ?? "current milestone"}: ${e instanceof Error ? e.message : String(e)}. Resolve the preserved branch/worktree and run /gsd auto to resume.`,
|
|
1339
|
+
"warning",
|
|
1340
|
+
);
|
|
1052
1341
|
debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
|
|
1053
1342
|
}
|
|
1054
1343
|
|
|
@@ -1067,6 +1356,21 @@ export async function stopAuto(
|
|
|
1067
1356
|
}
|
|
1068
1357
|
}
|
|
1069
1358
|
|
|
1359
|
+
// Pre-compute completion widget slice counts while the DB is still open.
|
|
1360
|
+
// Step 8 runs after closeDatabase(), so DB-backed slice lookups must happen here.
|
|
1361
|
+
const completionMilestoneId = options.completionWidget?.milestoneId ?? s.currentMilestoneId;
|
|
1362
|
+
let completedSlices: number | null = null;
|
|
1363
|
+
let totalSlices: number | null = null;
|
|
1364
|
+
if (preserveCompletionSurface && options.completionWidget && completionMilestoneId && isDbAvailable()) {
|
|
1365
|
+
try {
|
|
1366
|
+
const slices = getMilestoneSlices(completionMilestoneId);
|
|
1367
|
+
completedSlices = slices.filter(slice => isClosedStatus(slice.status)).length;
|
|
1368
|
+
totalSlices = slices.length;
|
|
1369
|
+
} catch (err) {
|
|
1370
|
+
logWarning("dashboard", `completion slice stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1070
1374
|
// ── Step 6: DB cleanup ──
|
|
1071
1375
|
if (isDbAvailable()) {
|
|
1072
1376
|
try {
|
|
@@ -1079,37 +1383,113 @@ export async function stopAuto(
|
|
|
1079
1383
|
}
|
|
1080
1384
|
}
|
|
1081
1385
|
|
|
1082
|
-
// ── Step 7: Restore basePath and chdir ──
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1386
|
+
// ── Step 7: Restore basePath and chdir (ADR-016 phase 3, #5693) ──
|
|
1387
|
+
// `restoreToProjectRoot` assigns s.basePath before any throwable work;
|
|
1388
|
+
// no fallback assignment is needed at the call site.
|
|
1389
|
+
if (s.originalBasePath) {
|
|
1390
|
+
try {
|
|
1391
|
+
buildLifecycle().restoreToProjectRoot();
|
|
1392
|
+
} catch (e) {
|
|
1393
|
+
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1394
|
+
}
|
|
1395
|
+
try {
|
|
1396
|
+
process.chdir(s.basePath);
|
|
1397
|
+
} catch (err) {
|
|
1398
|
+
/* best-effort */
|
|
1399
|
+
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
// Re-root the active command session/tool runtime after worktree teardown.
|
|
1404
|
+
// mergeAndExit restores process.cwd(), but AgentSession has already captured
|
|
1405
|
+
// its own cwd for tools and system prompt; refresh it before returning to the
|
|
1406
|
+
// user so follow-up commands do not target a removed milestone worktree.
|
|
1407
|
+
if (s.originalBasePath && ctx && s.cmdCtx) {
|
|
1408
|
+
const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
|
|
1409
|
+
if (result.status === "cancelled") {
|
|
1410
|
+
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
|
|
1411
|
+
} else if (result.status === "failed") {
|
|
1412
|
+
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
|
|
1092
1413
|
}
|
|
1093
|
-
} catch (e) {
|
|
1094
|
-
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1095
1414
|
}
|
|
1096
1415
|
|
|
1097
1416
|
// ── Step 8: Ledger notification ──
|
|
1098
1417
|
try {
|
|
1099
1418
|
const ledger = getLedger();
|
|
1419
|
+
const isAllComplete = reason === "All milestones complete";
|
|
1420
|
+
const isMilestoneComplete = /^Milestone\s+\S+\s+complete$/i.test(reason ?? "");
|
|
1421
|
+
const notificationPrefix = isAllComplete
|
|
1422
|
+
? "All milestones complete"
|
|
1423
|
+
: isMilestoneComplete
|
|
1424
|
+
? `${reason}. Auto-mode finished this milestone`
|
|
1425
|
+
: `Auto-mode stopped${reasonSuffix}`;
|
|
1100
1426
|
if (ledger && ledger.units.length > 0) {
|
|
1101
1427
|
const totals = getProjectTotals(ledger.units);
|
|
1102
1428
|
ctx?.ui.notify(
|
|
1103
|
-
|
|
1429
|
+
`${notificationPrefix}. Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${ledger.units.length} units`,
|
|
1104
1430
|
"info",
|
|
1105
1431
|
);
|
|
1106
1432
|
} else {
|
|
1107
|
-
ctx?.ui.notify(
|
|
1433
|
+
ctx?.ui.notify(`${notificationPrefix}.`, "info");
|
|
1108
1434
|
}
|
|
1109
1435
|
} catch (e) {
|
|
1110
1436
|
debugLog("stop-cleanup-ledger", { error: e instanceof Error ? e.message : String(e) });
|
|
1111
1437
|
}
|
|
1112
1438
|
|
|
1439
|
+
if (preserveCompletionSurface && ctx && options.completionWidget) {
|
|
1440
|
+
const ledger = getLedger();
|
|
1441
|
+
const units = ledger?.units ?? [];
|
|
1442
|
+
const totals = units.length > 0 ? getProjectTotals(units) : null;
|
|
1443
|
+
let totalInput = 0;
|
|
1444
|
+
let totalCacheRead = 0;
|
|
1445
|
+
try {
|
|
1446
|
+
for (const entry of s.cmdCtx?.sessionManager?.getEntries?.() ?? []) {
|
|
1447
|
+
if (entry.type === "message") {
|
|
1448
|
+
const msgEntry = entry as SessionMessageEntry;
|
|
1449
|
+
if (msgEntry.message?.role === "assistant") {
|
|
1450
|
+
const usage = (msgEntry.message as any).usage;
|
|
1451
|
+
if (usage) {
|
|
1452
|
+
totalInput += usage.input || 0;
|
|
1453
|
+
totalCacheRead += usage.cacheRead || 0;
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
} catch (err) {
|
|
1459
|
+
logWarning("dashboard", `completion stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1460
|
+
}
|
|
1461
|
+
const contextUsage = s.cmdCtx?.getContextUsage?.();
|
|
1462
|
+
const milestoneId = completionMilestoneId;
|
|
1463
|
+
const rollup = loadMilestoneCompletionRollup(s.originalBasePath || s.basePath, milestoneId);
|
|
1464
|
+
setCompletionProgressWidget(ctx, {
|
|
1465
|
+
milestoneId,
|
|
1466
|
+
milestoneTitle: options.completionWidget.milestoneTitle ?? rollup.milestoneTitle,
|
|
1467
|
+
oneLiner: rollup.oneLiner,
|
|
1468
|
+
successCriteriaResults: rollup.successCriteriaResults,
|
|
1469
|
+
definitionOfDoneResults: rollup.definitionOfDoneResults,
|
|
1470
|
+
requirementOutcomes: rollup.requirementOutcomes,
|
|
1471
|
+
deviations: rollup.deviations,
|
|
1472
|
+
followUps: rollup.followUps,
|
|
1473
|
+
keyDecisions: rollup.keyDecisions,
|
|
1474
|
+
keyFiles: rollup.keyFiles,
|
|
1475
|
+
lessonsLearned: rollup.lessonsLearned,
|
|
1476
|
+
reason: reason ?? "Milestone complete",
|
|
1477
|
+
startedAt: s.autoStartTime,
|
|
1478
|
+
totalCost: totals?.cost ?? 0,
|
|
1479
|
+
totalTokens: totals?.tokens.total ?? 0,
|
|
1480
|
+
unitCount: units.length,
|
|
1481
|
+
cacheHitRate: totalCacheRead + totalInput > 0
|
|
1482
|
+
? (totalCacheRead / (totalCacheRead + totalInput)) * 100
|
|
1483
|
+
: null,
|
|
1484
|
+
contextPercent: contextUsage?.percent ?? null,
|
|
1485
|
+
contextWindow: contextUsage?.contextWindow ?? s.cmdCtx?.model?.contextWindow ?? null,
|
|
1486
|
+
completedSlices,
|
|
1487
|
+
totalSlices,
|
|
1488
|
+
allMilestonesComplete: options.completionWidget.allMilestonesComplete,
|
|
1489
|
+
basePath: s.originalBasePath || s.basePath || null,
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1113
1493
|
// ── Step 9: Cmux sidebar / event log ──
|
|
1114
1494
|
try {
|
|
1115
1495
|
pi?.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "clear" as const, preferences: loadedPreferences });
|
|
@@ -1200,8 +1580,20 @@ export async function stopAuto(
|
|
|
1200
1580
|
|
|
1201
1581
|
// UI cleanup
|
|
1202
1582
|
ctx?.ui.setStatus("gsd-auto", undefined);
|
|
1203
|
-
|
|
1204
|
-
|
|
1583
|
+
if (!preserveCompletionSurface) {
|
|
1584
|
+
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
1585
|
+
const status = reason?.startsWith("Blocked:") ? "blocked" : reason?.toLowerCase().includes("fail") ? "failed" : "stopped";
|
|
1586
|
+
setLifecycleOutcome(ctx, {
|
|
1587
|
+
status,
|
|
1588
|
+
title: status === "blocked" ? "Auto-mode blocked" : status === "failed" ? "Auto-mode stopped with an issue" : "Auto-mode stopped",
|
|
1589
|
+
detail: reason ?? "Auto-mode stopped.",
|
|
1590
|
+
nextAction: status === "blocked"
|
|
1591
|
+
? "Fix the blocker, then run /gsd auto to resume."
|
|
1592
|
+
: "Run /gsd status for the current project state, or /gsd auto to continue.",
|
|
1593
|
+
commands: ["/gsd status for overview", "/gsd auto to run", "/gsd visualize to inspect", "/gsd notifications for history"],
|
|
1594
|
+
});
|
|
1595
|
+
if (ctx) initHealthWidget(ctx);
|
|
1596
|
+
}
|
|
1205
1597
|
restoreProjectRootEnv();
|
|
1206
1598
|
restoreMilestoneLockEnv();
|
|
1207
1599
|
|
|
@@ -1218,10 +1610,21 @@ export async function stopAuto(
|
|
|
1218
1610
|
}
|
|
1219
1611
|
|
|
1220
1612
|
// Reset all session state in one call
|
|
1221
|
-
s.
|
|
1613
|
+
s.resetAfterStop({ preserveCompletionSurface });
|
|
1222
1614
|
}
|
|
1223
1615
|
}
|
|
1224
1616
|
|
|
1617
|
+
export type StopAutoWorktreeExitAction = "none" | "merge" | "preserve";
|
|
1618
|
+
|
|
1619
|
+
export function _selectStopAutoWorktreeExit(args: {
|
|
1620
|
+
currentMilestoneId: string | null;
|
|
1621
|
+
milestoneComplete: boolean;
|
|
1622
|
+
milestoneMergedInPhases: boolean;
|
|
1623
|
+
}): StopAutoWorktreeExitAction {
|
|
1624
|
+
if (!args.currentMilestoneId || args.milestoneMergedInPhases) return "none";
|
|
1625
|
+
return args.milestoneComplete ? "merge" : "preserve";
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1225
1628
|
/**
|
|
1226
1629
|
* Pause auto-mode without destroying state. Context is preserved.
|
|
1227
1630
|
* The user can interact with the agent, then `/gsd auto` resumes
|
|
@@ -1281,6 +1684,8 @@ export async function pauseAuto(
|
|
|
1281
1684
|
logWarning("engine", `paused-session DB write failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1282
1685
|
}
|
|
1283
1686
|
|
|
1687
|
+
const pausedUnitLabel = currentUnitLabel();
|
|
1688
|
+
|
|
1284
1689
|
// Close out the current unit so its runtime record doesn't stay at "dispatched"
|
|
1285
1690
|
if (s.currentUnit && ctx) {
|
|
1286
1691
|
try {
|
|
@@ -1331,8 +1736,16 @@ export async function pauseAuto(
|
|
|
1331
1736
|
s.verificationRetryCount.clear();
|
|
1332
1737
|
ctx?.ui.setStatus("gsd-auto", "paused");
|
|
1333
1738
|
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
1334
|
-
if (ctx) initHealthWidget(ctx);
|
|
1335
1739
|
const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
|
|
1740
|
+
setLifecycleOutcome(ctx, {
|
|
1741
|
+
status: "paused",
|
|
1742
|
+
title: `${s.stepMode ? "Step" : "Auto"}-mode paused`,
|
|
1743
|
+
detail: _errorContext?.message ?? "Paused by user request.",
|
|
1744
|
+
nextAction: `Type to steer, or run ${resumeCmd} to resume.`,
|
|
1745
|
+
commands: [resumeCmd, "/gsd status for overview", "/gsd notifications for history"],
|
|
1746
|
+
unitLabel: pausedUnitLabel,
|
|
1747
|
+
});
|
|
1748
|
+
if (ctx) initHealthWidget(ctx);
|
|
1336
1749
|
ctx?.ui.notify(
|
|
1337
1750
|
`${s.stepMode ? "Step" : "Auto"}-mode paused (Escape). Type to interact, or ${resumeCmd} to resume.`,
|
|
1338
1751
|
"info",
|
|
@@ -1340,43 +1753,43 @@ export async function pauseAuto(
|
|
|
1340
1753
|
}
|
|
1341
1754
|
|
|
1342
1755
|
/**
|
|
1343
|
-
* Build a
|
|
1344
|
-
*
|
|
1756
|
+
* Build a WorktreeLifecycle Module wrapping the current session.
|
|
1757
|
+
*
|
|
1758
|
+
* Per ADR-016, the Lifecycle Module is the typed-Interface owner of milestone
|
|
1759
|
+
* entry/exit/merge verbs and calls Projection on lifecycle transitions. The
|
|
1760
|
+
* deps bag is intentionally focused — Lifecycle does not see the wider auto-
|
|
1761
|
+
* mode dependency graph.
|
|
1762
|
+
*/
|
|
1763
|
+
/**
|
|
1764
|
+
* Construct a `WorktreeLifecycleDeps` bag without binding to any session.
|
|
1765
|
+
*
|
|
1766
|
+
* Exported so session-less callers (currently `parallel-merge.ts`) can build
|
|
1767
|
+
* the same deps and call `mergeMilestoneStandalone` through the Worktree
|
|
1768
|
+
* Lifecycle Module instead of bypassing it (ADR-016 phase 2 / A2).
|
|
1345
1769
|
*/
|
|
1346
|
-
function
|
|
1770
|
+
export function buildWorktreeLifecycleDeps(): WorktreeLifecycleDeps {
|
|
1771
|
+
// ADR-016 phase 2 / C-track close-out:
|
|
1772
|
+
// C1 (#5624) — fs + git-CLI primitives inlined
|
|
1773
|
+
// C2 (#5625) — worktree-manager helpers inlined
|
|
1774
|
+
// C3 (#5626) — cache + preferences + paths inlined
|
|
1775
|
+
// C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
|
|
1776
|
+
//
|
|
1777
|
+
// Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
|
|
1778
|
+
// worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
|
|
1779
|
+
// closure.
|
|
1347
1780
|
return {
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1781
|
+
gitServiceFactory: (basePath: string) => {
|
|
1782
|
+
const gitConfig =
|
|
1783
|
+
loadEffectiveGSDPreferences()?.preferences?.git ?? {};
|
|
1784
|
+
return new GitServiceImpl(basePath, gitConfig);
|
|
1785
|
+
},
|
|
1786
|
+
worktreeProjection: new WorktreeStateProjection(),
|
|
1351
1787
|
mergeMilestoneToMain,
|
|
1352
|
-
syncWorktreeStateBack,
|
|
1353
|
-
teardownAutoWorktree,
|
|
1354
|
-
createAutoWorktree,
|
|
1355
|
-
enterAutoWorktree,
|
|
1356
|
-
enterBranchModeForMilestone,
|
|
1357
|
-
getAutoWorktreePath,
|
|
1358
|
-
autoCommitCurrentBranch,
|
|
1359
|
-
getCurrentBranch,
|
|
1360
|
-
autoWorktreeBranch,
|
|
1361
|
-
resolveMilestoneFile,
|
|
1362
|
-
readFileSync: (path: string, encoding: string) =>
|
|
1363
|
-
readFileSync(path, encoding as BufferEncoding),
|
|
1364
|
-
GitServiceImpl:
|
|
1365
|
-
GitServiceImpl as unknown as WorktreeResolverDeps["GitServiceImpl"],
|
|
1366
|
-
loadEffectiveGSDPreferences:
|
|
1367
|
-
loadEffectiveGSDPreferences as unknown as WorktreeResolverDeps["loadEffectiveGSDPreferences"],
|
|
1368
|
-
invalidateAllCaches,
|
|
1369
|
-
captureIntegrationBranch,
|
|
1370
1788
|
};
|
|
1371
1789
|
}
|
|
1372
1790
|
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
* Cheap to construct — it's just a thin wrapper over `s` + deps.
|
|
1376
|
-
* Used by stopAuto(), resume path, and buildLoopDeps().
|
|
1377
|
-
*/
|
|
1378
|
-
function buildResolver(): WorktreeResolver {
|
|
1379
|
-
return new WorktreeResolver(s, buildResolverDeps());
|
|
1791
|
+
function buildLifecycle(): WorktreeLifecycle {
|
|
1792
|
+
return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
|
|
1380
1793
|
}
|
|
1381
1794
|
|
|
1382
1795
|
/**
|
|
@@ -1396,9 +1809,26 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1396
1809
|
let seq = 0;
|
|
1397
1810
|
|
|
1398
1811
|
const deps: AutoOrchestratorDeps = {
|
|
1812
|
+
stateReconciliation: {
|
|
1813
|
+
async reconcileBeforeDispatch() {
|
|
1814
|
+
const result = await reconcileBeforeDispatch(dispatchBasePath);
|
|
1815
|
+
if (!result.ok) {
|
|
1816
|
+
return {
|
|
1817
|
+
ok: false,
|
|
1818
|
+
reason: result.reason,
|
|
1819
|
+
stateSnapshot: result.stateSnapshot,
|
|
1820
|
+
};
|
|
1821
|
+
}
|
|
1822
|
+
return {
|
|
1823
|
+
ok: true,
|
|
1824
|
+
reason: result.repaired.join(", "),
|
|
1825
|
+
stateSnapshot: result.stateSnapshot,
|
|
1826
|
+
};
|
|
1827
|
+
},
|
|
1828
|
+
},
|
|
1399
1829
|
dispatch: {
|
|
1400
|
-
async decideNextUnit() {
|
|
1401
|
-
const state =
|
|
1830
|
+
async decideNextUnit(input) {
|
|
1831
|
+
const state = input.stateSnapshot;
|
|
1402
1832
|
const active = state.activeMilestone;
|
|
1403
1833
|
if (!active) return null;
|
|
1404
1834
|
|
|
@@ -1422,12 +1852,48 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1422
1852
|
},
|
|
1423
1853
|
recovery: {
|
|
1424
1854
|
async classifyAndRecover(input) {
|
|
1425
|
-
const
|
|
1426
|
-
return { action:
|
|
1855
|
+
const recovery = classifyFailure(input);
|
|
1856
|
+
return { action: recovery.action, reason: recovery.reason };
|
|
1857
|
+
},
|
|
1858
|
+
},
|
|
1859
|
+
toolContract: {
|
|
1860
|
+
async compileUnitToolContract(unitType) {
|
|
1861
|
+
const result = compileUnitToolContract(unitType);
|
|
1862
|
+
if (!result.ok) return { ok: false, reason: result.detail };
|
|
1863
|
+
return { ok: true, reason: result.contract.validationRules.join(", ") };
|
|
1427
1864
|
},
|
|
1428
1865
|
},
|
|
1429
1866
|
worktree: {
|
|
1430
|
-
async prepareForUnit() {
|
|
1867
|
+
async prepareForUnit(unitType, unitId) {
|
|
1868
|
+
const manifest = resolveManifest(unitType);
|
|
1869
|
+
if (!manifest) {
|
|
1870
|
+
return {
|
|
1871
|
+
ok: false,
|
|
1872
|
+
reason: `No Unit manifest is registered for ${unitType}`,
|
|
1873
|
+
};
|
|
1874
|
+
}
|
|
1875
|
+
const writeScope =
|
|
1876
|
+
manifest.tools.mode === "all" || manifest.tools.mode === "docs"
|
|
1877
|
+
? "source-writing"
|
|
1878
|
+
: "planning-only";
|
|
1879
|
+
const safety = createWorktreeSafetyModule();
|
|
1880
|
+
const snapshot = await deriveState(dispatchBasePath);
|
|
1881
|
+
const milestoneId = snapshot.activeMilestone?.id ?? null;
|
|
1882
|
+
const expectedBranch = milestoneId ? autoWorktreeBranch(milestoneId) : null;
|
|
1883
|
+
const result = safety.validateUnitRoot({
|
|
1884
|
+
unitType,
|
|
1885
|
+
unitId,
|
|
1886
|
+
writeScope,
|
|
1887
|
+
projectRoot: runtimeBasePath,
|
|
1888
|
+
unitRoot: dispatchBasePath,
|
|
1889
|
+
milestoneId,
|
|
1890
|
+
expectedBranch,
|
|
1891
|
+
});
|
|
1892
|
+
if (!result.ok) {
|
|
1893
|
+
return { ok: false, reason: `${result.kind}: ${result.reason}` };
|
|
1894
|
+
}
|
|
1895
|
+
return { ok: true, reason: result.kind };
|
|
1896
|
+
},
|
|
1431
1897
|
async syncAfterUnit() {},
|
|
1432
1898
|
async cleanupOnStop() {},
|
|
1433
1899
|
},
|
|
@@ -1525,6 +1991,7 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1525
1991
|
initRegistry(convertDispatchRules(DISPATCH_RULES));
|
|
1526
1992
|
|
|
1527
1993
|
const cmux = makeCmuxEmitters(pi);
|
|
1994
|
+
const worktreeProjection = new WorktreeStateProjection();
|
|
1528
1995
|
|
|
1529
1996
|
return {
|
|
1530
1997
|
lockBase,
|
|
@@ -1548,8 +2015,8 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1548
2015
|
// Pre-dispatch health gate
|
|
1549
2016
|
preDispatchHealthGate,
|
|
1550
2017
|
|
|
1551
|
-
// Worktree
|
|
1552
|
-
|
|
2018
|
+
// Worktree state projection (ADR-016 — single Module Interface)
|
|
2019
|
+
worktreeProjection,
|
|
1553
2020
|
|
|
1554
2021
|
// Resource version guard
|
|
1555
2022
|
checkResourcesStale,
|
|
@@ -1564,7 +2031,6 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1564
2031
|
pruneQueueOrder,
|
|
1565
2032
|
isInAutoWorktree,
|
|
1566
2033
|
shouldUseWorktreeIsolation,
|
|
1567
|
-
mergeMilestoneToMain,
|
|
1568
2034
|
teardownAutoWorktree,
|
|
1569
2035
|
createAutoWorktree,
|
|
1570
2036
|
captureIntegrationBranch,
|
|
@@ -1621,8 +2087,9 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1621
2087
|
// Git
|
|
1622
2088
|
GitServiceImpl: GitServiceImpl as unknown as LoopDeps["GitServiceImpl"],
|
|
1623
2089
|
|
|
1624
|
-
//
|
|
1625
|
-
|
|
2090
|
+
// Worktree Lifecycle Module (ADR-016 — single Module Interface for the
|
|
2091
|
+
// milestone create/enter/exit/merge verbs)
|
|
2092
|
+
lifecycle: buildLifecycle(),
|
|
1626
2093
|
|
|
1627
2094
|
// Post-unit processing
|
|
1628
2095
|
postUnitPreVerification,
|
|
@@ -1883,7 +2350,12 @@ export async function startAuto(
|
|
|
1883
2350
|
s.verbose = verboseMode;
|
|
1884
2351
|
s.stepMode = requestedStepMode;
|
|
1885
2352
|
s.cmdCtx = ctx;
|
|
1886
|
-
|
|
2353
|
+
// ADR-016 phase 2 / B2 (#5620): bootstrap basePath transition before
|
|
2354
|
+
// the resume path consults persisted worktree state. Defensive about
|
|
2355
|
+
// s.originalBasePath — the meta-restore above (line 2003 / 2055) may
|
|
2356
|
+
// have already populated it from paused metadata; the verb preserves
|
|
2357
|
+
// that value.
|
|
2358
|
+
buildLifecycle().adoptSessionRoot(base);
|
|
1887
2359
|
// ── Resume worktree: if the paused session was inside a milestone worktree,
|
|
1888
2360
|
// apply that path as the dispatch basePath immediately (#3723).
|
|
1889
2361
|
// This ensures the dispatch loop runs from the worktree directory even when
|
|
@@ -1899,9 +2371,8 @@ export async function startAuto(
|
|
|
1899
2371
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
1900
2372
|
);
|
|
1901
2373
|
}
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
}
|
|
2374
|
+
// ADR-016 phase 2 / B3 (#5621): paused-resume worktree-path adoption.
|
|
2375
|
+
buildLifecycle().resumeFromPausedSession(base, resumeWorktreePath);
|
|
1905
2376
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
1906
2377
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1907
2378
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -1929,9 +2400,17 @@ export async function startAuto(
|
|
|
1929
2400
|
!detectWorktreeName(s.basePath) &&
|
|
1930
2401
|
!detectWorktreeName(s.originalBasePath)
|
|
1931
2402
|
) {
|
|
1932
|
-
|
|
2403
|
+
const enterResult = buildLifecycle().enterMilestone(s.currentMilestoneId, {
|
|
1933
2404
|
notify: ctx.ui.notify.bind(ctx.ui),
|
|
1934
2405
|
});
|
|
2406
|
+
if (!enterResult.ok && enterResult.reason === "lease-conflict") {
|
|
2407
|
+
ctx.ui.notify(
|
|
2408
|
+
`Cannot resume milestone ${s.currentMilestoneId}: lease is held by another worker.`,
|
|
2409
|
+
"error",
|
|
2410
|
+
);
|
|
2411
|
+
await stopAuto(ctx, pi, "lease-conflict during resume");
|
|
2412
|
+
return;
|
|
2413
|
+
}
|
|
1935
2414
|
// s.basePath may have been updated to a worktree path by enterMilestone.
|
|
1936
2415
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1937
2416
|
}
|
|
@@ -1953,16 +2432,7 @@ export async function startAuto(
|
|
|
1953
2432
|
// tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
|
|
1954
2433
|
// relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
|
|
1955
2434
|
// Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
|
|
1956
|
-
|
|
1957
|
-
const pkgRoot = process.env.GSD_PKG_ROOT;
|
|
1958
|
-
const resourceLoaderPath = pkgRoot
|
|
1959
|
-
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
1960
|
-
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
1961
|
-
const { initResources } = await import(resourceLoaderPath);
|
|
1962
|
-
initResources(agentDir);
|
|
1963
|
-
// Open the project DB before rebuild/derive so resume uses DB-backed
|
|
1964
|
-
// state instead of falling back to stale markdown parsing (#2940).
|
|
1965
|
-
await openProjectDbIfPresent(s.basePath);
|
|
2435
|
+
await refreshResumeResourcesAndDb(s.basePath);
|
|
1966
2436
|
try {
|
|
1967
2437
|
await rebuildState(s.basePath);
|
|
1968
2438
|
pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync" as const, preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
|
|
@@ -2034,7 +2504,7 @@ export async function startAuto(
|
|
|
2034
2504
|
runKernelLoop: runUokKernelLoop,
|
|
2035
2505
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2036
2506
|
});
|
|
2037
|
-
cleanupAfterLoopExit(ctx);
|
|
2507
|
+
await cleanupAfterLoopExit(ctx);
|
|
2038
2508
|
return;
|
|
2039
2509
|
}
|
|
2040
2510
|
|
|
@@ -2043,9 +2513,14 @@ export async function startAuto(
|
|
|
2043
2513
|
shouldUseWorktreeIsolation,
|
|
2044
2514
|
registerSigtermHandler,
|
|
2045
2515
|
lockBase,
|
|
2046
|
-
|
|
2516
|
+
buildLifecycle,
|
|
2047
2517
|
};
|
|
2048
2518
|
|
|
2519
|
+
// Register the worker before bootstrap enters a milestone worktree.
|
|
2520
|
+
// This ensures enterMilestone can claim a lease and seed dispatch claims
|
|
2521
|
+
// for crash-recovery fidelity (#5405).
|
|
2522
|
+
registerAutoWorkerForSession(s, base);
|
|
2523
|
+
|
|
2049
2524
|
const ready = await bootstrapAutoSession(
|
|
2050
2525
|
s,
|
|
2051
2526
|
ctx,
|
|
@@ -2089,7 +2564,7 @@ export async function startAuto(
|
|
|
2089
2564
|
runKernelLoop: runUokKernelLoop,
|
|
2090
2565
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2091
2566
|
});
|
|
2092
|
-
cleanupAfterLoopExit(ctx);
|
|
2567
|
+
await cleanupAfterLoopExit(ctx);
|
|
2093
2568
|
}
|
|
2094
2569
|
|
|
2095
2570
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
@@ -2199,7 +2674,12 @@ export async function dispatchHookUnit(
|
|
|
2199
2674
|
s.pendingQuickTasks = [];
|
|
2200
2675
|
}
|
|
2201
2676
|
|
|
2202
|
-
|
|
2677
|
+
// ADR-016 phase 2 / B2 (#5620): hook-trigger basePath transition. Treats
|
|
2678
|
+
// the trigger as a bootstrap variant — if the session is fresh,
|
|
2679
|
+
// `originalBasePath` gets set to `targetBasePath`; if the session was
|
|
2680
|
+
// already active with an established `originalBasePath`, the verb
|
|
2681
|
+
// preserves it.
|
|
2682
|
+
buildLifecycle().adoptSessionRoot(targetBasePath);
|
|
2203
2683
|
if (!s.orchestration) {
|
|
2204
2684
|
ensureOrchestrationModule(ctx, pi, s.basePath);
|
|
2205
2685
|
}
|
|
@@ -2213,24 +2693,7 @@ export async function dispatchHookUnit(
|
|
|
2213
2693
|
startedAt: hookStartedAt,
|
|
2214
2694
|
};
|
|
2215
2695
|
|
|
2216
|
-
|
|
2217
|
-
// newSession() snapshots process.cwd() during construction; chdir-ing
|
|
2218
|
-
// afterward leaves the session rooted to whatever cwd was when the call
|
|
2219
|
-
// was made. Must be synchronous — no awaits between chdir and newSession.
|
|
2220
|
-
try { if (process.cwd() !== s.basePath) process.chdir(s.basePath); } catch (err) {
|
|
2221
|
-
const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
|
|
2222
|
-
logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
|
|
2223
|
-
ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
|
|
2224
|
-
if (wasActive) {
|
|
2225
|
-
s.basePath = previousBasePath;
|
|
2226
|
-
s.currentUnit = previousCurrentUnit;
|
|
2227
|
-
} else {
|
|
2228
|
-
s.reset();
|
|
2229
|
-
}
|
|
2230
|
-
return false;
|
|
2231
|
-
}
|
|
2232
|
-
|
|
2233
|
-
const result = await s.cmdCtx!.newSession();
|
|
2696
|
+
const result = await s.cmdCtx!.newSession({ workspaceRoot: s.basePath });
|
|
2234
2697
|
if (result.cancelled) {
|
|
2235
2698
|
await stopAuto(ctx, pi);
|
|
2236
2699
|
return false;
|