gsd-pi 2.79.0 → 2.80.0-dev.b62439b9f
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 +94 -47
- package/dist/{cli-web-branch.d.ts → cli/cli-web-branch.d.ts} +1 -1
- package/dist/{cli-web-branch.js → cli/cli-web-branch.js} +3 -3
- package/dist/{cli.js → cli/cli.js} +25 -25
- package/dist/{web-mode.js → cli/web-mode.js} +3 -3
- package/dist/{extension-registry.js → extension-runtime/extension-registry.js} +1 -1
- package/dist/{headless-query.d.ts → headless/headless-query.d.ts} +1 -1
- package/dist/{headless-query.js → headless/headless-query.js} +3 -2
- package/dist/{headless-recover.js → headless/headless-recover.js} +3 -2
- package/dist/{headless.js → headless/headless.js} +3 -3
- package/dist/loader.js +10 -10
- package/dist/{onboarding.js → onboarding/onboarding.js} +8 -8
- package/dist/{welcome-screen.js → onboarding/welcome-screen.js} +1 -1
- package/dist/{models-resolver.js → providers/models-resolver.js} +1 -1
- package/dist/{remote-questions-config.js → providers/remote-questions-config.js} +1 -1
- package/dist/{resource-loader.d.ts → resource-runtime/resource-loader.d.ts} +1 -1
- package/dist/{resource-loader.js → resource-runtime/resource-loader.js} +6 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/github-sync/templates.js +55 -70
- package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
- package/dist/resources/extensions/gsd/auto/loop.js +362 -523
- package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +61 -7
- package/dist/resources/extensions/gsd/auto/session.js +8 -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 +48 -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 +15 -0
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +3 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +2 -0
- package/dist/resources/extensions/gsd/auto-prompts.js +220 -32
- package/dist/resources/extensions/gsd/auto-recovery.js +63 -55
- package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
- package/dist/resources/extensions/gsd/auto-start.js +3 -2
- package/dist/resources/extensions/gsd/auto-verification.js +2 -11
- package/dist/resources/extensions/gsd/auto-worktree.js +85 -38
- package/dist/resources/extensions/gsd/auto.js +162 -5
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +9 -1
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +52 -50
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +8 -8
- package/dist/resources/extensions/gsd/commands/context.js +1 -1
- 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/custom-workflow-engine.js +25 -1
- package/dist/resources/extensions/gsd/db-adapter.js +47 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +337 -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 +394 -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/escalation.js +2 -0
- package/dist/resources/extensions/gsd/graph.js +9 -3
- package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
- package/dist/resources/extensions/gsd/guided-flow.js +40 -0
- 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/model-router.js +9 -6
- package/dist/resources/extensions/gsd/notification-widget.js +21 -3
- package/dist/resources/extensions/gsd/paths.js +5 -1
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
- package/dist/resources/extensions/gsd/pr-evidence.js +76 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
- package/dist/resources/extensions/gsd/preferences-types.js +20 -2
- package/dist/resources/extensions/gsd/preferences-validation.js +3 -3
- package/dist/resources/extensions/gsd/process-task-path.js +61 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
- package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
- package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -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/plan-milestone.md +45 -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/refine-slice.md +23 -23
- 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/state.js +4 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
- package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +88 -3
- package/dist/resources/extensions/gsd/unit-context-composer.js +32 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +21 -0
- package/dist/resources/extensions/gsd/uok/audit.js +23 -9
- package/dist/resources/extensions/gsd/uok/contracts.js +69 -1
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +3 -0
- package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +48 -33
- package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
- package/dist/resources/extensions/gsd/uok/timeline.js +125 -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-projections.js +2 -0
- package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
- package/dist/resources/extensions/shared/gsd-phase-state.js +45 -3
- package/dist/resources/extensions/shared/interview-ui.js +15 -4
- package/dist/{security-overrides.js → security/security-overrides.js} +1 -1
- package/dist/{startup-model-validation.js → startup/startup-model-validation.js} +1 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/{update-check.js → update/update-check.js} +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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 +12 -12
- 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/7020.js +12 -0
- package/dist/web/standalone/.next/server/middleware-build-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/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-fab3ebb85b006001.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/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/{worktree-cli.js → worktrees/worktree-cli.js} +3 -2
- package/package.json +12 -5
- 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 +52 -37
- 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 +129 -2
- package/packages/mcp-server/src/workflow-tools.ts +80 -37
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +14 -0
- 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/tool-card-cleanup-and-success-runtime.test.js +20 -0
- 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.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +6 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +9 -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 +31 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-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/package.json +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +23 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +6 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +50 -9
- package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js +25 -3
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +3 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +3 -1
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/tui.test.ts +30 -3
- package/packages/pi-tui/src/tui.ts +3 -1
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/README.md +3 -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/package.json +1 -1
- package/src/resources/extensions/github-sync/templates.ts +59 -84
- package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
- package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
- package/src/resources/extensions/gsd/auto/loop.ts +414 -598
- package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
- package/src/resources/extensions/gsd/auto/phases.ts +88 -9
- package/src/resources/extensions/gsd/auto/session.ts +11 -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 +97 -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 +38 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +4 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +1 -0
- package/src/resources/extensions/gsd/auto-prompts.ts +276 -31
- package/src/resources/extensions/gsd/auto-recovery.ts +59 -53
- package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
- package/src/resources/extensions/gsd/auto-start.ts +3 -2
- package/src/resources/extensions/gsd/auto-verification.ts +5 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -36
- package/src/resources/extensions/gsd/auto.ts +170 -4
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +14 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +62 -51
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +97 -0
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +8 -4
- package/src/resources/extensions/gsd/commands/context.ts +1 -1
- 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/custom-workflow-engine.ts +29 -0
- package/src/resources/extensions/gsd/db-adapter.ts +75 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +368 -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 +434 -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/escalation.ts +3 -1
- package/src/resources/extensions/gsd/graph.ts +12 -5
- package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
- package/src/resources/extensions/gsd/guided-flow.ts +47 -0
- package/src/resources/extensions/gsd/interrupted-session.ts +1 -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/model-router.ts +10 -6
- package/src/resources/extensions/gsd/notification-widget.ts +25 -4
- package/src/resources/extensions/gsd/paths.ts +6 -1
- package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
- package/src/resources/extensions/gsd/pr-evidence.ts +124 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
- package/src/resources/extensions/gsd/preferences-types.ts +23 -4
- package/src/resources/extensions/gsd/preferences-validation.ts +3 -3
- package/src/resources/extensions/gsd/process-task-path.ts +81 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
- package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
- package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
- package/src/resources/extensions/gsd/prompts/execute-task.md +40 -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/plan-milestone.md +45 -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/refine-slice.md +23 -23
- 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/state.ts +6 -3
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +108 -1
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +203 -0
- package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
- package/src/resources/extensions/gsd/tests/current-directory-root-homedir-fallback.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
- 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/dashboard-custom-engine.test.ts +3 -3
- 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.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-planning-mode-dispatch.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +109 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -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/guided-flow-prompt-consolidation.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/headless-query.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
- 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-pressure-stuck-state.test.ts +40 -16
- package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
- 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/parallel-skill-prompt-integration.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
- 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 +27 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +42 -4
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +109 -1
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +98 -0
- 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 +158 -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.test.ts +20 -4
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -7
- 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-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 +164 -3
- 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 +123 -0
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +18 -34
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +90 -2
- package/src/resources/extensions/gsd/unit-context-composer.ts +49 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +34 -0
- package/src/resources/extensions/gsd/uok/audit.ts +25 -9
- package/src/resources/extensions/gsd/uok/contracts.ts +105 -0
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +4 -0
- package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +60 -45
- package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
- package/src/resources/extensions/gsd/uok/timeline.ts +158 -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-projections.ts +5 -1
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
- package/src/resources/extensions/shared/gsd-phase-state.ts +56 -3
- package/src/resources/extensions/shared/interview-ui.ts +18 -5
- package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +43 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
- package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
- package/dist/web/standalone/.next/server/chunks/6897.js +0 -12
- 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/dist/{app-paths.d.ts → app/app-paths.d.ts} +0 -0
- /package/dist/{app-paths.js → app/app-paths.js} +0 -0
- /package/dist/{project-sessions.d.ts → app/project-sessions.d.ts} +0 -0
- /package/dist/{project-sessions.js → app/project-sessions.js} +0 -0
- /package/dist/{tool-bootstrap.d.ts → app/tool-bootstrap.d.ts} +0 -0
- /package/dist/{tool-bootstrap.js → app/tool-bootstrap.js} +0 -0
- /package/dist/{cli-auto-routing.d.ts → cli/cli-auto-routing.d.ts} +0 -0
- /package/dist/{cli-auto-routing.js → cli/cli-auto-routing.js} +0 -0
- /package/dist/{cli-policy.d.ts → cli/cli-policy.d.ts} +0 -0
- /package/dist/{cli-policy.js → cli/cli-policy.js} +0 -0
- /package/dist/{cli.d.ts → cli/cli.d.ts} +0 -0
- /package/dist/{help-text.d.ts → cli/help-text.d.ts} +0 -0
- /package/dist/{help-text.js → cli/help-text.js} +0 -0
- /package/dist/{logo.d.ts → cli/logo.d.ts} +0 -0
- /package/dist/{logo.js → cli/logo.js} +0 -0
- /package/dist/{web-mode.d.ts → cli/web-mode.d.ts} +0 -0
- /package/dist/{bundled-extension-paths.d.ts → extension-runtime/bundled-extension-paths.d.ts} +0 -0
- /package/dist/{bundled-extension-paths.js → extension-runtime/bundled-extension-paths.js} +0 -0
- /package/dist/{bundled-resource-path.d.ts → extension-runtime/bundled-resource-path.d.ts} +0 -0
- /package/dist/{bundled-resource-path.js → extension-runtime/bundled-resource-path.js} +0 -0
- /package/dist/{extension-discovery.d.ts → extension-runtime/extension-discovery.d.ts} +0 -0
- /package/dist/{extension-discovery.js → extension-runtime/extension-discovery.js} +0 -0
- /package/dist/{extension-registry.d.ts → extension-runtime/extension-registry.d.ts} +0 -0
- /package/dist/{extension-sort.d.ts → extension-runtime/extension-sort.d.ts} +0 -0
- /package/dist/{extension-sort.js → extension-runtime/extension-sort.js} +0 -0
- /package/dist/{extension-validator.d.ts → extension-runtime/extension-validator.d.ts} +0 -0
- /package/dist/{extension-validator.js → extension-runtime/extension-validator.js} +0 -0
- /package/dist/{headless-answers.d.ts → headless/headless-answers.d.ts} +0 -0
- /package/dist/{headless-answers.js → headless/headless-answers.js} +0 -0
- /package/dist/{headless-context.d.ts → headless/headless-context.d.ts} +0 -0
- /package/dist/{headless-context.js → headless/headless-context.js} +0 -0
- /package/dist/{headless-events.d.ts → headless/headless-events.d.ts} +0 -0
- /package/dist/{headless-events.js → headless/headless-events.js} +0 -0
- /package/dist/{headless-recover.d.ts → headless/headless-recover.d.ts} +0 -0
- /package/dist/{headless-types.d.ts → headless/headless-types.d.ts} +0 -0
- /package/dist/{headless-types.js → headless/headless-types.js} +0 -0
- /package/dist/{headless-ui.d.ts → headless/headless-ui.d.ts} +0 -0
- /package/dist/{headless-ui.js → headless/headless-ui.js} +0 -0
- /package/dist/{headless.d.ts → headless/headless.d.ts} +0 -0
- /package/dist/{mcp-server.d.ts → mcp/mcp-server.d.ts} +0 -0
- /package/dist/{mcp-server.js → mcp/mcp-server.js} +0 -0
- /package/dist/{onboarding.d.ts → onboarding/onboarding.d.ts} +0 -0
- /package/dist/{welcome-screen.d.ts → onboarding/welcome-screen.d.ts} +0 -0
- /package/dist/{wizard.d.ts → onboarding/wizard.d.ts} +0 -0
- /package/dist/{wizard.js → onboarding/wizard.js} +0 -0
- /package/dist/{models-resolver.d.ts → providers/models-resolver.d.ts} +0 -0
- /package/dist/{pi-migration.d.ts → providers/pi-migration.d.ts} +0 -0
- /package/dist/{pi-migration.js → providers/pi-migration.js} +0 -0
- /package/dist/{provider-migrations.d.ts → providers/provider-migrations.d.ts} +0 -0
- /package/dist/{provider-migrations.js → providers/provider-migrations.js} +0 -0
- /package/dist/{remote-questions-config.d.ts → providers/remote-questions-config.d.ts} +0 -0
- /package/dist/{rtk-shared.d.ts → rtk/rtk-shared.d.ts} +0 -0
- /package/dist/{rtk-shared.js → rtk/rtk-shared.js} +0 -0
- /package/dist/{rtk.d.ts → rtk/rtk.d.ts} +0 -0
- /package/dist/{rtk.js → rtk/rtk.js} +0 -0
- /package/dist/{security-overrides.d.ts → security/security-overrides.d.ts} +0 -0
- /package/dist/{claude-cli-check.d.ts → startup/claude-cli-check.d.ts} +0 -0
- /package/dist/{claude-cli-check.js → startup/claude-cli-check.js} +0 -0
- /package/dist/{runtime-checks.d.ts → startup/runtime-checks.d.ts} +0 -0
- /package/dist/{runtime-checks.js → startup/runtime-checks.js} +0 -0
- /package/dist/{startup-model-validation.d.ts → startup/startup-model-validation.d.ts} +0 -0
- /package/dist/{startup-timings.d.ts → startup/startup-timings.d.ts} +0 -0
- /package/dist/{startup-timings.js → startup/startup-timings.js} +0 -0
- /package/dist/{update-check.d.ts → update/update-check.d.ts} +0 -0
- /package/dist/{update-cmd.d.ts → update/update-cmd.d.ts} +0 -0
- /package/dist/{update-cmd.js → update/update-cmd.js} +0 -0
- /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → -WDXZiiJHGZDbYH75Mu6f}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → -WDXZiiJHGZDbYH75Mu6f}/_ssgManifest.js +0 -0
- /package/dist/{worktree-cli.d.ts → worktrees/worktree-cli.d.ts} +0 -0
- /package/dist/{worktree-name-gen.d.ts → worktrees/worktree-name-gen.d.ts} +0 -0
- /package/dist/{worktree-name-gen.js → worktrees/worktree-name-gen.js} +0 -0
- /package/dist/{worktree-status-banner.d.ts → worktrees/worktree-status-banner.d.ts} +0 -0
- /package/dist/{worktree-status-banner.js → worktrees/worktree-status-banner.js} +0 -0
package/README.md
CHANGED
|
@@ -27,54 +27,95 @@ One command. Walk away. Come back to a built project with clean git history.
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## What's New in v2.
|
|
30
|
+
## What's New in v2.79
|
|
31
31
|
|
|
32
|
-
###
|
|
32
|
+
### DB-Authoritative Runtime State
|
|
33
33
|
|
|
34
|
-
- **
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
- **
|
|
34
|
+
- **Auto-mode coordination tables (#5247)** — workers, leases, dispatches, and a command queue are now first-class DB rows, replacing ad-hoc files for cross-process auto coordination.
|
|
35
|
+
- **`auto.lock` + `paused-session.json` → DB (#5250)** — phase C pt 2 of the runtime-state migration. The on-disk lockfile and paused-session JSON are gone; lock acquisition, stale-lock detection, and pause state all live in `gsd.db`.
|
|
36
|
+
- **Stuck-state migration (#5249)** — `copyPlanningArtifacts` / `reconcile` deleted; auto-mode writers canonicalize through the DB instead of mirroring artifacts to disk.
|
|
37
|
+
- **`gsd headless recover`** — non-TTY DB recovery command for unattended environments where the interactive recover flow can't run.
|
|
38
|
+
- **Doctor surfaces DB locks** — `gsd doctor` reports DB-backed stale locks and flags exhausted `run-uat` retry counters so wedged runs are visible without log archaeology.
|
|
39
39
|
|
|
40
|
-
###
|
|
40
|
+
### Workspace & Worktree Isolation
|
|
41
41
|
|
|
42
|
-
-
|
|
43
|
-
- **
|
|
44
|
-
- **
|
|
45
|
-
- **
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
48
|
-
- **Opt-in `reassess-roadmap` (#4778)** — gated behind the `skip_clean_reassess` preference per ADR-003 §4; auto no longer triggers reassessment unprompted.
|
|
42
|
+
- **`GsdWorkspace` + `MilestoneScope` handle types** — workspace identity is now an explicit handle threaded through writers, metrics, and the DB connection instead of a module singleton.
|
|
43
|
+
- **Symlink-safe canonicalization** — `deriveState` read root and cache key are canonicalized; path normalization unified on `realpathSync.native`; `gsdRootCache` keys normalized and decoupled from per-turn cache clears; `git-root` anchor guarded against `~/.gsd` resolution.
|
|
44
|
+
- **Worktree-scoped DB + metrics** — `gsd-db` connections and metrics ledgers are scoped by workspace identity, so concurrent milestones in separate worktrees can't cross-contaminate state.
|
|
45
|
+
- **Worktree cwd anchoring** — subagent dispatch anchors to the canonical worktree path, `mergeAndExit` anchors cwd at project root (closes [#5079](https://github.com/gsd-build/GSD-2/issues/5079)), MCP cwd is hardened against drift, and dispatch stops on cwd anchor failures.
|
|
46
|
+
- **Slice isolation through resolver (#5246)** — slice merge isolation routed through the worktree resolver; `originalBase` checks use `isSamePath` instead of string equality; `auto-worktree` validates `milestoneId` match in `ByScope` wrappers.
|
|
47
|
+
- **Worktree CLI commands** — `gsd worktree {list, merge, clean, remove}` exposed in the TUI dispatcher.
|
|
49
48
|
|
|
50
|
-
###
|
|
49
|
+
### Deep Planning Mode (Phase 11)
|
|
51
50
|
|
|
52
|
-
-
|
|
53
|
-
- **
|
|
54
|
-
- **
|
|
55
|
-
- **
|
|
51
|
+
- **`/gsd new-project --deep`** — opt-in deep mode for new projects, with `research-decision` and `research-project` dispatch units, deep-mode artifact validators, and gated approval flows that pause the milestone instead of aborting on grounding/discovery questions.
|
|
52
|
+
- **EVAL-REVIEW system** — `/gsd eval-review` command, frontmatter schema, pre-ship soft warning when EVAL-REVIEW status is incomplete, and registration in the catalog + ops dispatcher.
|
|
53
|
+
- **Project-shape-aware discuss depth** — discuss-phase questioning depth scales via the project-shape classifier; tiny apps cap research and auto-skip stale research blockers; deep research is opt-in and blocked while a marker is in flight.
|
|
54
|
+
- **Approval-gate hardening** — deep approval gates verified, opening interview question protected from approval abort, plain-text setup approvals gated, deep setup state guarded against phantom transitions.
|
|
56
55
|
|
|
57
|
-
###
|
|
56
|
+
### Auto Pipeline & Dispatch
|
|
58
57
|
|
|
59
|
-
- **
|
|
60
|
-
- **
|
|
61
|
-
- **
|
|
62
|
-
- **
|
|
63
|
-
-
|
|
64
|
-
- **Visual postinstall (#4641)** — install shows a spinner/banner UX so first-run state is legible.
|
|
65
|
-
- **PR-risk verification** — risk prompt emits a copy-pasteable code block to make follow-up commands one step.
|
|
58
|
+
- **Delegation-policy verdicts** — dispatch actions are annotated with a per-tool background-safety policy verdict; the policy itself is codified instead of inferred per call.
|
|
59
|
+
- **Reactive-execute default** — auto-dispatch defaults to reactive-execute when ≥3 ready tasks are queued, replacing the always-sequential fallback.
|
|
60
|
+
- **Proactive rate limiting (#2996)** — `min_request_interval_ms` preference paces auto-mode requests; the interval is stamped at dispatch.
|
|
61
|
+
- **Manifest-driven skill surfacing** — `auto-prompts` surfaces manifest skills via recommendations + auto-match; planning-dispatch mode added to the unit manifest for slice plan/complete; runtime tools-policy enforced for planning units (#4934).
|
|
62
|
+
- **Subagent telemetry** — dispatch telemetry, stronger prompt guidelines, and model-override threading (`??` consistently used for `modelOverride`).
|
|
66
63
|
|
|
67
|
-
###
|
|
64
|
+
### MCP, Models & Cross-Platform
|
|
68
65
|
|
|
69
|
-
- **
|
|
70
|
-
-
|
|
71
|
-
- **
|
|
72
|
-
- **
|
|
73
|
-
- **
|
|
74
|
-
- **
|
|
75
|
-
- **Empty-turn recovery** — Claude Code CLI tool-block shape canonicalized so empty-turn recovery matches real provider output.
|
|
66
|
+
- **Global MCP config** — `mcp-client` reads `~/.gsd/mcp.json` for user-level MCP server config.
|
|
67
|
+
- **`ask_user_questions` over MCP** — host elicitation tried before remote channel; multi-select array shape preserved; explicit cancellation handled; remote answers normalized into `structuredContent`.
|
|
68
|
+
- **Model routing overhaul** — cross-provider tier resolution, provider-agnostic profile-tier defaults, disabled-provider routing denylist, resolved tier model IDs normalized, and `findModelForTier` with behavioral tests.
|
|
69
|
+
- **Ollama** — configurable probe/request timeouts via env vars (clamped); cloud / long-variant context windows reported correctly.
|
|
70
|
+
- **Windows fixes** — home directory resolved correctly (#5015), `Path` env lookup repaired, Windows-safe env CLI shims, DEP0190 avoided in Claude CLI binary probes, tool-bootstrap skipped when tools are on PATH.
|
|
71
|
+
- **Anthropic prompt-cache preserved (#5019)** — `pi-coding-agent` and `gsd` no longer thrash the cache on dispatch.
|
|
76
72
|
|
|
77
|
-
|
|
73
|
+
### Git, GitHub Sync & Reliability
|
|
74
|
+
|
|
75
|
+
- **Integration-branch self-merge guard (#5024)** — milestone refuses to self-merge when the integration branch equals the milestone branch; self-merge ref guard normalized.
|
|
76
|
+
- **Slice-cadence safety** — integration branch used for slice cadence, dirty worktree state preserved on merge, checked-out slice worktrees advance safely, slice PRs deferred until completion, slice-PR sync stays retryable on failure.
|
|
77
|
+
- **Milestone-ID reservation** — DB rows included in reservation; ghost IDs reused in `nextMilestoneId` to close gaps; `ensurePreconditions` guarded against phantom IDs (#4996); orphan milestone-dir doctor check (#4996); milestone-dir creation deferred until first artifact write.
|
|
78
|
+
- **Auto-commit hygiene** — task commits scoped to reported files, generated commit subjects sanitized, user hooks run on automated commits, milestone-tagged commits bound when `.gsd/` is gitignored (#5033), startup blocked on `git index.lock`.
|
|
79
|
+
- **GitHub sync** — issues no longer closed before delivery, failed task closure / slice PR sync stay retryable, config cache scoped by project, safe git environment used.
|
|
80
|
+
|
|
81
|
+
### Safety, Recovery & Hardening
|
|
82
|
+
|
|
83
|
+
- **Policy-block pause through dispatch errors** — pause state is preserved when dispatch errors out mid-policy-block.
|
|
84
|
+
- **Skip-validation persistence** — skip-validation state persists and gate rows are cleared on recover.
|
|
85
|
+
- **Cancelled-gate hard block** — redirected to `ask_user_questions`; false plain-text claim dropped from the message.
|
|
86
|
+
- **Write-gate basePath required** — `process.cwd()` defaults removed; basePath threaded through pre-existing tests.
|
|
87
|
+
- **Atomic metrics writes** — parallel-mode `metrics.json` writes merge atomically; ledger cache invalidated after prune; `saveLedger` aborts when lock not acquired; stale-lock detection adds PID stamp + async yield.
|
|
88
|
+
- **Auto-worktree teardown** — `activeWorkspace` guaranteed cleared on teardown failure; teardown try/finally broadened to cover `chdir`; cleanup steps mirrored on the abort path; warning emitted on resume when persisted worktree is missing.
|
|
89
|
+
- **Empty-turn nudge** — no longer auto-replies to user questions; deferred on mid-line approval prompts.
|
|
90
|
+
- **Refuses project writes from `$HOME`** — and surfaces real SQL errors from `capture_thought` instead of swallowing them.
|
|
91
|
+
|
|
92
|
+
### VS Code & TUI
|
|
93
|
+
|
|
94
|
+
- **Checkpoint tree view** — registered in the VS Code extension; checkpoint file existence restored; RPC file-mutation events tracked; agent diff scoped to tracked files.
|
|
95
|
+
- **TUI image paste** — pasted images preserved on regular submit.
|
|
96
|
+
- **Bundled `/gsd` slash command protected** — core handler refuses to overwrite the bundled command.
|
|
97
|
+
|
|
98
|
+
See the full [Changelog](./CHANGELOG.md) for the complete v2.79 entry and prior releases.
|
|
99
|
+
|
|
100
|
+
<details>
|
|
101
|
+
<summary>v2.78 highlights</summary>
|
|
102
|
+
|
|
103
|
+
- **Slice-cadence worktree collapse (#4765)** — `git.collapse_cadence: "milestone" | "slice"` shrinks the orphan window per-slice; pair with `git.milestone_resquash: true` to collapse to one milestone commit
|
|
104
|
+
- **Worktree telemetry (#4764)** — journal events + `summarizeWorktreeTelemetry`; `/gsd forensics` worktree section with `worktree-orphan` and `worktree-unmerged-exit` anomalies
|
|
105
|
+
- **Worktree-aware canonical milestone root (#4761)** — `resolveCanonicalMilestoneRoot` routes validators through the live worktree
|
|
106
|
+
- **Bootstrap orphan audit (#4762)** — in-progress milestones with commits ahead of main are no longer skipped
|
|
107
|
+
- **Unified component system** — skills, agents, pipelines, and marketplace as one component model wired through runtime, dispatch, and telemetry
|
|
108
|
+
- **UnitContextManifest v2 (#4924, #4934)** — typed manifest with declarative tools-policy and typed computed artifacts; CI-guarded
|
|
109
|
+
- **Composer migration phase 3 (#4782)** — `complete-slice`, `research-milestone`, `run-uat`, `reassess-roadmap` build context through the manifest composer
|
|
110
|
+
- **Milestone scope classifier + pipeline variants (#4781)** — auto picks a pipeline variant from milestone shape
|
|
111
|
+
- **Per-unit-type skill manifest resolver (#4779)** — skills wire into specific unit types instead of being globally on
|
|
112
|
+
- **Single-writer-v3 control plane** — durable-state writer gaps closed
|
|
113
|
+
- **Extensions framework** — `gsd extensions install / update / uninstall / list / info / validate`; topological load order; cmux↔gsd decoupling via `cmux-events`; extracted `@gsd-extensions/google-search`
|
|
114
|
+
- **GPT-5.5 Codex support** + `xhigh` thinking level; auth mode in `/model`; permission granularity picker; headless auto default → `bypassPermissions` (#4657)
|
|
115
|
+
- **Major git-safety pass** — TOCTOU ancestry guard, atomic sync-lock with PID-verified stale override, `.git/index.lock` 5-min gate, env overlay strip, rebase/cherry-pick/revert detection, working-tree stash before `reset --hard`, unborn-branch worktree guard, user hooks + `commit.gpgsign` on auto-commits
|
|
116
|
+
- **Atomic `.gsd/` state writes**; **compaction correctness fix (#4665)**; **write-gate hardening (#4950)**; **auto state-machine** non-retriable policy errors (#4973), baseline restoration (#4961, #4966); slice + crash recovery; empty-turn recovery shape canonicalized
|
|
117
|
+
|
|
118
|
+
</details>
|
|
78
119
|
|
|
79
120
|
<details>
|
|
80
121
|
<summary>v2.77 highlights</summary>
|
|
@@ -320,25 +361,27 @@ The database is authoritative for milestones, slices, tasks, requirements, decis
|
|
|
320
361
|
|
|
321
362
|
2. **Context pre-loading** — The dispatch prompt includes inlined task plans, slice plans, prior task summaries, dependency summaries, roadmap excerpts, and decisions register. The LLM starts with everything it needs instead of spending tool calls reading files.
|
|
322
363
|
|
|
323
|
-
3. **
|
|
364
|
+
3. **Context Mode** — Context Mode is enabled by default and gives every auto-mode unit guidance for preserving context. Agents are steered toward `gsd_exec` for noisy scans, builds, tests, and diagnostics; full stdout/stderr is saved under `.gsd/exec/` while only a short digest enters the conversation. `gsd_exec_search` lets agents reuse prior runs instead of repeating expensive checks, and `gsd_resume` reads `.gsd/last-snapshot.md` after compaction or resume. Opt out with `context_mode.enabled: false`; tune sandbox timeout/output caps with `context_mode.exec_timeout_ms`, `context_mode.exec_stdout_cap_bytes`, and `context_mode.exec_digest_chars`.
|
|
365
|
+
|
|
366
|
+
4. **Git isolation** — When `git.isolation` is set to `worktree` or `branch`, each milestone runs on its own `milestone/<MID>` branch (in a worktree or in-place). All slice work commits sequentially — no branch switching, no merge conflicts. When the milestone completes, it's squash-merged to main as one clean commit. The default is `none` (work on the current branch), configurable via preferences. If `worktree` is configured in a repo with no committed `HEAD`, GSD temporarily behaves as `none` until the first commit exists because git worktrees need a committed start point.
|
|
324
367
|
|
|
325
|
-
|
|
368
|
+
5. **Crash recovery** — Auto mode persists worker state, unit-dispatch state, and paused-session metadata in the project-root SQLite database. If the session dies, the next `/gsd auto` reconstructs the interrupted unit from DB-backed runtime state, reads the surviving session file, synthesizes a recovery briefing from every tool call that made it to disk, and resumes with full context. Parallel orchestrator IPC still lives under `.gsd/parallel/`, so multi-worker sessions survive crashes too. In headless mode, crashes trigger automatic restart with exponential backoff (default 3 attempts).
|
|
326
369
|
|
|
327
|
-
|
|
370
|
+
6. **Provider error recovery** — Transient provider errors (rate limits, 500/503 server errors, overloaded) auto-resume after a delay. Permanent errors (auth, billing) pause for manual review. The model fallback chain retries transient network errors before switching models.
|
|
328
371
|
|
|
329
|
-
|
|
372
|
+
7. **Stuck and artifact detection** — A sliding-window detector identifies repeated dispatch patterns (including multi-unit cycles). Missing expected artifacts use a separate bounded path: GSD retries artifact verification up to 3 times with failure context, then pauses auto mode with the missing artifact error instead of looping indefinitely.
|
|
330
373
|
|
|
331
|
-
|
|
374
|
+
8. **Timeout supervision** — Soft timeout warns the LLM to wrap up. Idle watchdog detects stalls. Hard timeout pauses auto mode. Recovery steering nudges the LLM to finish durable output before giving up.
|
|
332
375
|
|
|
333
|
-
|
|
376
|
+
9. **Cost tracking** — Every unit's token usage and cost is captured, broken down by phase, slice, and model. The dashboard shows running totals and projections. Budget ceilings can pause auto mode before overspending.
|
|
334
377
|
|
|
335
|
-
|
|
378
|
+
10. **Adaptive replanning** — After each slice completes, the roadmap is reassessed. If the work revealed new information that changes the plan, slices are reordered, added, or removed before continuing.
|
|
336
379
|
|
|
337
|
-
|
|
380
|
+
11. **Verification enforcement** — Configure shell commands (`npm run lint`, `npm run test`, etc.) that run automatically after task execution. Failures trigger auto-fix retries before advancing. Auto-discovered checks from `package.json` run in advisory mode — they log warnings but don't block on pre-existing errors. Configurable via `verification_commands`, `verification_auto_fix`, and `verification_max_retries` preferences.
|
|
338
381
|
|
|
339
|
-
|
|
382
|
+
12. **Milestone validation** — After all slices complete, a `validate-milestone` gate compares roadmap success criteria against actual results before sealing the milestone.
|
|
340
383
|
|
|
341
|
-
|
|
384
|
+
13. **Escape hatch** — Press Escape to pause. The conversation is preserved. Interact with the agent, inspect what happened, or just `/gsd auto` to resume from disk state.
|
|
342
385
|
|
|
343
386
|
### `/gsd` and `/gsd next` — Step Mode
|
|
344
387
|
|
|
@@ -616,6 +659,10 @@ auto_report: true
|
|
|
616
659
|
| `unique_milestone_ids` | Uses unique milestone names to avoid clashes when working in teams of people |
|
|
617
660
|
| `git.isolation` | `none` (default), `worktree`, or `branch` — enable worktree or branch isolation for milestone work. `worktree` requires a committed `HEAD`; zero-commit repos temporarily run as `none` |
|
|
618
661
|
| `git.manage_gitignore` | Set `false` to prevent GSD from modifying `.gitignore` |
|
|
662
|
+
| `context_mode.enabled` | Context Mode is default-on; set `false` to disable `gsd_exec`, exec history guidance, and resume snapshots |
|
|
663
|
+
| `context_mode.exec_timeout_ms` | Timeout for sandboxed `gsd_exec` runs (default: 30000) |
|
|
664
|
+
| `context_mode.exec_stdout_cap_bytes` | Persisted stdout cap for `gsd_exec` output (default: 1048576) |
|
|
665
|
+
| `context_mode.exec_digest_chars` | Trailing stdout characters returned to the agent context (default: 300) |
|
|
619
666
|
| `verification_commands` | Array of shell commands to run after task execution (e.g., `["npm run lint", "npm run test"]`) |
|
|
620
667
|
| `verification_auto_fix` | Auto-retry on verification failures (default: true) |
|
|
621
668
|
| `verification_max_retries` | Max retries for verification failures (default: 2) |
|
|
@@ -35,7 +35,7 @@ export interface RunWebCliBranchDeps {
|
|
|
35
35
|
}
|
|
36
36
|
export declare function parseCliArgs(argv: string[]): CliFlags;
|
|
37
37
|
export declare function buildHeadlessAutoArgs(flags: Pick<CliFlags, 'messages' | 'model'>): string[];
|
|
38
|
-
export { getProjectSessionsDir } from '
|
|
38
|
+
export { getProjectSessionsDir } from '../app/project-sessions.js';
|
|
39
39
|
export declare function migrateLegacyFlatSessions(baseSessionsDir: string, projectSessionsDir: string): void;
|
|
40
40
|
/**
|
|
41
41
|
* Resolve the working directory for context-aware launch detection.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync } from 'node:fs';
|
|
2
2
|
import { join, resolve, sep } from 'node:path';
|
|
3
|
-
import { agentDir as defaultAgentDir, sessionsDir as defaultSessionsDir, webPreferencesPath as defaultWebPreferencesPath } from '
|
|
4
|
-
import { getProjectSessionsDir } from '
|
|
3
|
+
import { agentDir as defaultAgentDir, sessionsDir as defaultSessionsDir, webPreferencesPath as defaultWebPreferencesPath } from '../app/app-paths.js';
|
|
4
|
+
import { getProjectSessionsDir } from '../app/project-sessions.js';
|
|
5
5
|
import { launchWebMode, stopWebMode } from './web-mode.js';
|
|
6
6
|
export function parseCliArgs(argv) {
|
|
7
7
|
const flags = { extensions: [], messages: [] };
|
|
@@ -76,7 +76,7 @@ export function parseCliArgs(argv) {
|
|
|
76
76
|
export function buildHeadlessAutoArgs(flags) {
|
|
77
77
|
return flags.model ? ['--model', flags.model, ...flags.messages] : [...flags.messages];
|
|
78
78
|
}
|
|
79
|
-
export { getProjectSessionsDir } from '
|
|
79
|
+
export { getProjectSessionsDir } from '../app/project-sessions.js';
|
|
80
80
|
export function migrateLegacyFlatSessions(baseSessionsDir, projectSessionsDir) {
|
|
81
81
|
if (!existsSync(baseSessionsDir))
|
|
82
82
|
return;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { agentDir, sessionsDir, authFilePath } from '
|
|
4
|
-
import { initResources, buildResourceLoader, getNewerManagedResourceVersion } from '
|
|
5
|
-
import { ensureManagedTools } from '
|
|
6
|
-
import { loadStoredEnvKeys } from '
|
|
7
|
-
import { migratePiCredentials } from '
|
|
8
|
-
import { shouldRunOnboarding, runOnboarding } from '
|
|
3
|
+
import { agentDir, sessionsDir, authFilePath } from '../app/app-paths.js';
|
|
4
|
+
import { initResources, buildResourceLoader, getNewerManagedResourceVersion } from '../resource-runtime/resource-loader.js';
|
|
5
|
+
import { ensureManagedTools } from '../app/tool-bootstrap.js';
|
|
6
|
+
import { loadStoredEnvKeys } from '../onboarding/wizard.js';
|
|
7
|
+
import { migratePiCredentials } from '../providers/pi-migration.js';
|
|
8
|
+
import { shouldRunOnboarding, runOnboarding } from '../onboarding/onboarding.js';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
|
-
import { checkForUpdates } from '
|
|
10
|
+
import { checkForUpdates } from '../update/update-check.js';
|
|
11
11
|
import { shouldBypassManagedResourceMismatchGate } from './cli-policy.js';
|
|
12
12
|
import { shouldRedirectAutoToHeadless } from './cli-auto-routing.js';
|
|
13
13
|
import { printHelp, printSubcommandHelp } from './help-text.js';
|
|
14
|
-
import { applySecurityOverrides } from '
|
|
15
|
-
import { validateConfiguredModel } from '
|
|
16
|
-
import { migrateAnthropicDefaultToClaudeCode } from '
|
|
14
|
+
import { applySecurityOverrides } from '../security/security-overrides.js';
|
|
15
|
+
import { validateConfiguredModel } from '../startup/startup-model-validation.js';
|
|
16
|
+
import { migrateAnthropicDefaultToClaudeCode } from '../providers/provider-migrations.js';
|
|
17
17
|
import { buildHeadlessAutoArgs, parseCliArgs, runWebCliBranch, migrateLegacyFlatSessions, } from './cli-web-branch.js';
|
|
18
18
|
import { stopWebMode } from './web-mode.js';
|
|
19
|
-
import { getProjectSessionsDir } from '
|
|
20
|
-
import { markStartup, printStartupTimings } from '
|
|
21
|
-
import { applyRtkProcessEnv, GSD_RTK_DISABLED_ENV, isTruthy } from '
|
|
19
|
+
import { getProjectSessionsDir } from '../app/project-sessions.js';
|
|
20
|
+
import { markStartup, printStartupTimings } from '../startup/startup-timings.js';
|
|
21
|
+
import { applyRtkProcessEnv, GSD_RTK_DISABLED_ENV, isTruthy } from '../rtk/rtk-shared.js';
|
|
22
22
|
let piCodingAgentModulePromise;
|
|
23
23
|
function loadPiCodingAgentModule() {
|
|
24
24
|
return (piCodingAgentModulePromise ??= import('@gsd/pi-coding-agent'));
|
|
@@ -139,7 +139,7 @@ async function doRtkBootstrap() {
|
|
|
139
139
|
// Honor GSD_RTK_DISABLED if already explicitly set in the environment
|
|
140
140
|
// (env var takes precedence over preferences for manual override).
|
|
141
141
|
if (!rtkDisabled) {
|
|
142
|
-
const { loadEffectiveGSDPreferences } = await import('
|
|
142
|
+
const { loadEffectiveGSDPreferences } = await import('../resources/extensions/gsd/preferences.js');
|
|
143
143
|
const prefs = loadEffectiveGSDPreferences();
|
|
144
144
|
const rtkEnabled = prefs?.preferences.experimental?.rtk === true;
|
|
145
145
|
if (!rtkEnabled) {
|
|
@@ -159,7 +159,7 @@ async function doRtkBootstrap() {
|
|
|
159
159
|
};
|
|
160
160
|
}
|
|
161
161
|
else {
|
|
162
|
-
const { bootstrapRtk } = await import('
|
|
162
|
+
const { bootstrapRtk } = await import('../rtk/rtk.js');
|
|
163
163
|
rtkStatus = await bootstrapRtk();
|
|
164
164
|
}
|
|
165
165
|
markStartup('bootstrapRtk');
|
|
@@ -180,7 +180,7 @@ function ensureRtkBootstrap() {
|
|
|
180
180
|
// command is blocked — only `update` should bypass the gate so the user can
|
|
181
181
|
// actually upgrade out of the broken state. See shouldBypassManagedResourceMismatchGate.
|
|
182
182
|
if (shouldBypassManagedResourceMismatchGate(cliFlags.messages[0])) {
|
|
183
|
-
const { runUpdate } = await import('
|
|
183
|
+
const { runUpdate } = await import('../update/update-cmd.js');
|
|
184
184
|
await runUpdate();
|
|
185
185
|
process.exit(0);
|
|
186
186
|
}
|
|
@@ -387,7 +387,7 @@ if (cliFlags.messages[0] === 'headless') {
|
|
|
387
387
|
// headless-query loads from src/resources/ while auto/interactive load
|
|
388
388
|
// from ~/.gsd/agent/extensions/ — different extension copies diverge.
|
|
389
389
|
initResources(agentDir);
|
|
390
|
-
const { runHeadless, parseHeadlessArgs } = await import('
|
|
390
|
+
const { runHeadless, parseHeadlessArgs } = await import('../headless/headless.js');
|
|
391
391
|
await runHeadless(parseHeadlessArgs(process.argv));
|
|
392
392
|
process.exit(0);
|
|
393
393
|
}
|
|
@@ -398,7 +398,7 @@ if (cliFlags.messages[0] === 'headless') {
|
|
|
398
398
|
*/
|
|
399
399
|
async function runHeadlessFromAuto(headlessArgs) {
|
|
400
400
|
await ensureRtkBootstrap();
|
|
401
|
-
const { runHeadless, parseHeadlessArgs } = await import('
|
|
401
|
+
const { runHeadless, parseHeadlessArgs } = await import('../headless/headless.js');
|
|
402
402
|
const argv = [process.argv[0], process.argv[1], 'headless', ...headlessArgs];
|
|
403
403
|
await runHeadless(parseHeadlessArgs(argv));
|
|
404
404
|
process.exit(0);
|
|
@@ -422,7 +422,7 @@ if (shouldRedirectAutoToHeadless(cliFlags.messages[0], process.stdin.isTTY, proc
|
|
|
422
422
|
if (!isPrintMode &&
|
|
423
423
|
cliFlags.listModels === undefined &&
|
|
424
424
|
(cliFlags.messages[0] === 'worktree' || cliFlags.messages[0] === 'wt')) {
|
|
425
|
-
const { handleList, handleMerge, handleClean, handleRemove } = await import('
|
|
425
|
+
const { handleList, handleMerge, handleClean, handleRemove } = await import('../worktrees/worktree-cli.js');
|
|
426
426
|
const sub = cliFlags.messages[1];
|
|
427
427
|
const subArgs = cliFlags.messages.slice(2);
|
|
428
428
|
if (!sub || sub === 'list') {
|
|
@@ -455,7 +455,7 @@ markStartup('AuthStorage.create');
|
|
|
455
455
|
loadStoredEnvKeys(authStorage);
|
|
456
456
|
migratePiCredentials(authStorage);
|
|
457
457
|
// Resolve models.json path with fallback to ~/.pi/agent/models.json
|
|
458
|
-
const { resolveModelsJsonPath } = await import('
|
|
458
|
+
const { resolveModelsJsonPath } = await import('../providers/models-resolver.js');
|
|
459
459
|
const modelsJsonPath = resolveModelsJsonPath();
|
|
460
460
|
const modelRegistry = new ModelRegistry(authStorage, modelsJsonPath);
|
|
461
461
|
markStartup('ModelRegistry');
|
|
@@ -614,7 +614,7 @@ if (isPrintMode) {
|
|
|
614
614
|
}
|
|
615
615
|
if (mode === 'mcp') {
|
|
616
616
|
printStartupTimings();
|
|
617
|
-
const { startMcpServer } = await import('
|
|
617
|
+
const { startMcpServer } = await import('../mcp/mcp-server.js');
|
|
618
618
|
// Activate every registered tool before starting the MCP transport.
|
|
619
619
|
// `session.agent.state.tools` is the *active* subset, not the full
|
|
620
620
|
// registry — if we expose only the active set, extension-registered
|
|
@@ -642,7 +642,7 @@ if (isPrintMode) {
|
|
|
642
642
|
// Worktree flag (-w) — create/resume a worktree for the interactive session
|
|
643
643
|
// ---------------------------------------------------------------------------
|
|
644
644
|
if (cliFlags.worktree) {
|
|
645
|
-
const { handleWorktreeFlag } = await import('
|
|
645
|
+
const { handleWorktreeFlag } = await import('../worktrees/worktree-cli.js');
|
|
646
646
|
await handleWorktreeFlag(cliFlags.worktree);
|
|
647
647
|
}
|
|
648
648
|
// ---------------------------------------------------------------------------
|
|
@@ -650,7 +650,7 @@ if (cliFlags.worktree) {
|
|
|
650
650
|
// ---------------------------------------------------------------------------
|
|
651
651
|
if (!cliFlags.worktree && !isPrintMode) {
|
|
652
652
|
try {
|
|
653
|
-
const { showWorktreeStatusBanner } = await import('
|
|
653
|
+
const { showWorktreeStatusBanner } = await import('../worktrees/worktree-status-banner.js');
|
|
654
654
|
showWorktreeStatusBanner(process.cwd());
|
|
655
655
|
}
|
|
656
656
|
catch { /* non-fatal */ }
|
|
@@ -763,10 +763,10 @@ if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
|
763
763
|
// Welcome screen — shown on every fresh interactive session before TUI takes over.
|
|
764
764
|
// Skip when the first-run banner was already printed in loader.ts (prevents double banner).
|
|
765
765
|
if (!process.env.GSD_FIRST_RUN_BANNER) {
|
|
766
|
-
const { printWelcomeScreen } = await import('
|
|
766
|
+
const { printWelcomeScreen } = await import('../onboarding/welcome-screen.js');
|
|
767
767
|
let remoteChannel;
|
|
768
768
|
try {
|
|
769
|
-
const { resolveRemoteConfig } = await import('
|
|
769
|
+
const { resolveRemoteConfig } = await import('../resources/extensions/remote-questions/config.js');
|
|
770
770
|
const rc = resolveRemoteConfig();
|
|
771
771
|
if (rc)
|
|
772
772
|
remoteChannel = rc.channel;
|
|
@@ -5,9 +5,9 @@ import { request as httpRequest } from 'node:http';
|
|
|
5
5
|
import { createServer } from 'node:net';
|
|
6
6
|
import { dirname, join, resolve } from 'node:path';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
|
-
import { appRoot, webPidFilePath as defaultWebPidFilePath } from '
|
|
8
|
+
import { appRoot, webPidFilePath as defaultWebPidFilePath } from '../app/app-paths.js';
|
|
9
9
|
const DEFAULT_HOST = '127.0.0.1';
|
|
10
|
-
const DEFAULT_PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
10
|
+
const DEFAULT_PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
11
11
|
/** Open a URL in the user's default browser. */
|
|
12
12
|
function openBrowser(url) {
|
|
13
13
|
if (process.platform === 'win32') {
|
|
@@ -165,7 +165,7 @@ function stopLegacyPidFile(deps) {
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
async function loadResourceBootstrap() {
|
|
168
|
-
const mod = await import('
|
|
168
|
+
const mod = await import('../resource-runtime/resource-loader.js');
|
|
169
169
|
return {
|
|
170
170
|
initResources: mod.initResources,
|
|
171
171
|
};
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* The only way an extension stops loading is an explicit `gsd extensions disable <id>`.
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, writeFileSync } from "node:fs";
|
|
9
|
-
import { appRoot } from "
|
|
9
|
+
import { appRoot } from "../app/app-paths.js";
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
// ─── Validation ─────────────────────────────────────────────────────────────
|
|
12
12
|
function isRegistry(data) {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* We use createJiti() here because this module is imported directly from cli.ts,
|
|
14
14
|
* bypassing the extension loader's jiti setup (#1137).
|
|
15
15
|
*/
|
|
16
|
-
import type { GSDState } from '
|
|
16
|
+
import type { GSDState } from '../resources/extensions/gsd/types.js';
|
|
17
17
|
/**
|
|
18
18
|
* Resolve the GSD extensions root for headless-query. Prefers the synced
|
|
19
19
|
* agent directory (so headless-query loads the same extension copy as
|
|
@@ -17,7 +17,7 @@ import { createJiti } from '@mariozechner/jiti';
|
|
|
17
17
|
import { fileURLToPath } from 'node:url';
|
|
18
18
|
import { join } from 'node:path';
|
|
19
19
|
import { homedir } from 'node:os';
|
|
20
|
-
import { resolveBundledGsdExtensionModule } from '
|
|
20
|
+
import { resolveBundledGsdExtensionModule } from '../extension-runtime/bundled-resource-path.js';
|
|
21
21
|
const jiti = createJiti(fileURLToPath(import.meta.url), { interopDefault: true, debug: false });
|
|
22
22
|
const { existsSync } = await import('node:fs');
|
|
23
23
|
/**
|
|
@@ -49,9 +49,10 @@ export function shouldUseAgentExtensionsDir(opts) {
|
|
|
49
49
|
}
|
|
50
50
|
const agentExtensionsDir = resolveGsdAgentExtensionsDir();
|
|
51
51
|
const { useAgentDir } = shouldUseAgentExtensionsDir({ env: process.env });
|
|
52
|
+
const bundledResourceImportUrl = new URL('../loader.js', import.meta.url).href;
|
|
52
53
|
const gsdExtensionPath = (...segments) => useAgentDir
|
|
53
54
|
? resolveAgentExtensionModule(agentExtensionsDir, segments)
|
|
54
|
-
: resolveBundledGsdExtensionModule(
|
|
55
|
+
: resolveBundledGsdExtensionModule(bundledResourceImportUrl, segments.join('/'));
|
|
55
56
|
function resolveAgentExtensionModule(agentDir, segments) {
|
|
56
57
|
const requested = join(agentDir, ...segments);
|
|
57
58
|
if (existsSync(requested))
|
|
@@ -21,15 +21,16 @@
|
|
|
21
21
|
import { createJiti } from '@mariozechner/jiti';
|
|
22
22
|
import { fileURLToPath } from 'node:url';
|
|
23
23
|
import { resolveGsdAgentExtensionsDir, shouldUseAgentExtensionsDir } from './headless-query.js';
|
|
24
|
-
import { resolveBundledGsdExtensionModule } from '
|
|
24
|
+
import { resolveBundledGsdExtensionModule } from '../extension-runtime/bundled-resource-path.js';
|
|
25
25
|
import { join } from 'node:path';
|
|
26
26
|
import { existsSync } from 'node:fs';
|
|
27
27
|
const jiti = createJiti(fileURLToPath(import.meta.url), { interopDefault: true, debug: false });
|
|
28
28
|
const agentExtensionsDir = resolveGsdAgentExtensionsDir();
|
|
29
29
|
const { useAgentDir } = shouldUseAgentExtensionsDir({ env: process.env });
|
|
30
|
+
const bundledResourceImportUrl = new URL('../loader.js', import.meta.url).href;
|
|
30
31
|
const gsdExtensionPath = (...segments) => useAgentDir
|
|
31
32
|
? resolveAgentExtensionModule(agentExtensionsDir, segments)
|
|
32
|
-
: resolveBundledGsdExtensionModule(
|
|
33
|
+
: resolveBundledGsdExtensionModule(bundledResourceImportUrl, segments.join('/'));
|
|
33
34
|
function resolveAgentExtensionModule(agentDir, segments) {
|
|
34
35
|
const requested = join(agentDir, ...segments);
|
|
35
36
|
if (existsSync(requested))
|
|
@@ -15,7 +15,7 @@ import { existsSync, mkdirSync, writeFileSync, writeSync } from 'node:fs';
|
|
|
15
15
|
import { join } from 'node:path';
|
|
16
16
|
import { resolve } from 'node:path';
|
|
17
17
|
import { RpcClient, SessionManager } from '@gsd/pi-coding-agent';
|
|
18
|
-
import { getProjectSessionsDir } from '
|
|
18
|
+
import { getProjectSessionsDir } from '../app/project-sessions.js';
|
|
19
19
|
import { loadAndValidateAnswerFile, AnswerInjector } from './headless-answers.js';
|
|
20
20
|
import { isTerminalNotification, isBlockedNotification, isMilestoneReadyNotification, isQuickCommand, FIRE_AND_FORGET_METHODS, IDLE_TIMEOUT_MS, NEW_MILESTONE_IDLE_TIMEOUT_MS, isInteractiveHeadlessTool, shouldArmHeadlessIdleTimeout, EXIT_SUCCESS, EXIT_ERROR, EXIT_BLOCKED, EXIT_CANCELLED, mapStatusToExitCode, } from './headless-events.js';
|
|
21
21
|
import { VALID_OUTPUT_FORMATS } from './headless-types.js';
|
|
@@ -280,8 +280,8 @@ async function runHeadlessOnce(options, restartCount) {
|
|
|
280
280
|
// suite) get the same diagnostic without a TTY.
|
|
281
281
|
if (options.command === 'doctor') {
|
|
282
282
|
const wantsJson = options.json || options.commandArgs.includes('--json');
|
|
283
|
-
const { runGSDDoctor } = await import('
|
|
284
|
-
const { formatDoctorReport, formatDoctorReportJson } = await import('
|
|
283
|
+
const { runGSDDoctor } = await import('../resources/extensions/gsd/doctor.js');
|
|
284
|
+
const { formatDoctorReport, formatDoctorReportJson } = await import('../resources/extensions/gsd/doctor-format.js');
|
|
285
285
|
let exitCode = 1;
|
|
286
286
|
try {
|
|
287
287
|
const report = await runGSDDoctor(process.cwd());
|
package/dist/loader.js
CHANGED
|
@@ -21,7 +21,7 @@ if (firstArg === '--version' || firstArg === '-v') {
|
|
|
21
21
|
process.exit(0);
|
|
22
22
|
}
|
|
23
23
|
if (firstArg === '--help' || firstArg === '-h') {
|
|
24
|
-
const { printHelp } = await import('./help-text.js');
|
|
24
|
+
const { printHelp } = await import('./cli/help-text.js');
|
|
25
25
|
printHelp(gsdVersion);
|
|
26
26
|
process.exit(0);
|
|
27
27
|
}
|
|
@@ -31,7 +31,7 @@ if (firstArg === '--help' || firstArg === '-h') {
|
|
|
31
31
|
// package.json (already parsed above) and verifies git is available.
|
|
32
32
|
// ---------------------------------------------------------------------------
|
|
33
33
|
{
|
|
34
|
-
const { MIN_NODE_MAJOR, checkNodeVersion, requireGit } = await import('./runtime-checks.js');
|
|
34
|
+
const { MIN_NODE_MAJOR, checkNodeVersion, requireGit } = await import('./startup/runtime-checks.js');
|
|
35
35
|
const red = '\x1b[31m';
|
|
36
36
|
const bold = '\x1b[1m';
|
|
37
37
|
const dim = '\x1b[2m';
|
|
@@ -57,13 +57,13 @@ if (firstArg === '--help' || firstArg === '-h') {
|
|
|
57
57
|
process.exit(1);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
import { agentDir, appRoot } from './app-paths.js';
|
|
61
|
-
import { applyRtkProcessEnv } from './rtk-shared.js';
|
|
62
|
-
import { serializeBundledExtensionPaths } from './bundled-extension-paths.js';
|
|
63
|
-
import { resolveBundledResourcesDirFromPackageRoot } from './bundled-resource-path.js';
|
|
64
|
-
import { discoverExtensionEntryPaths } from './extension-discovery.js';
|
|
65
|
-
import { loadRegistry, readManifestFromEntryPath, isExtensionEnabled } from './extension-registry.js';
|
|
66
|
-
import { renderLogo } from './logo.js';
|
|
60
|
+
import { agentDir, appRoot } from './app/app-paths.js';
|
|
61
|
+
import { applyRtkProcessEnv } from './rtk/rtk-shared.js';
|
|
62
|
+
import { serializeBundledExtensionPaths } from './extension-runtime/bundled-extension-paths.js';
|
|
63
|
+
import { resolveBundledResourcesDirFromPackageRoot } from './extension-runtime/bundled-resource-path.js';
|
|
64
|
+
import { discoverExtensionEntryPaths } from './extension-runtime/extension-discovery.js';
|
|
65
|
+
import { loadRegistry, readManifestFromEntryPath, isExtensionEnabled } from './extension-runtime/extension-registry.js';
|
|
66
|
+
import { renderLogo } from './cli/logo.js';
|
|
67
67
|
// pkg/ is a shim directory: contains gsd's piConfig (package.json) and pi's
|
|
68
68
|
// theme assets (dist/modes/interactive/theme/) without a src/ directory.
|
|
69
69
|
// This allows config.js to:
|
|
@@ -235,4 +235,4 @@ if (missingPackages.length > 0) {
|
|
|
235
235
|
process.exit(1);
|
|
236
236
|
}
|
|
237
237
|
// Dynamic import defers ESM evaluation — config.js will see PI_PACKAGE_DIR above
|
|
238
|
-
await import('./cli.js');
|
|
238
|
+
await import('./cli/cli.js');
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
import { execFile } from 'node:child_process';
|
|
13
13
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
14
14
|
import { dirname, join } from 'node:path';
|
|
15
|
-
import { renderLogo } from '
|
|
16
|
-
import { agentDir } from '
|
|
17
|
-
import { isClaudeCliReady } from '
|
|
18
|
-
import { markOnboardingComplete, markStepCompleted, markStepSkipped, isOnboardingComplete, } from '
|
|
19
|
-
import { getLlmProviderIds } from '
|
|
15
|
+
import { renderLogo } from '../cli/logo.js';
|
|
16
|
+
import { agentDir } from '../app/app-paths.js';
|
|
17
|
+
import { isClaudeCliReady } from '../startup/claude-cli-check.js';
|
|
18
|
+
import { markOnboardingComplete, markStepCompleted, markStepSkipped, isOnboardingComplete, } from '../resources/extensions/gsd/onboarding-state.js';
|
|
19
|
+
import { getLlmProviderIds } from '../resources/extensions/gsd/setup-catalog.js';
|
|
20
20
|
// ─── Constants ────────────────────────────────────────────────────────────────
|
|
21
21
|
const TOOL_KEYS = [
|
|
22
22
|
{
|
|
@@ -825,7 +825,7 @@ export async function runRemoteQuestionsStep(p, pc, authStorage) {
|
|
|
825
825
|
});
|
|
826
826
|
if (p.isCancel(channelId) || !channelId)
|
|
827
827
|
return null;
|
|
828
|
-
const { saveRemoteQuestionsConfig } = await import('
|
|
828
|
+
const { saveRemoteQuestionsConfig } = await import('../providers/remote-questions-config.js');
|
|
829
829
|
saveRemoteQuestionsConfig('slack', channelId.trim());
|
|
830
830
|
p.log.success(`Slack channel: ${pc.green(channelId.trim())}`);
|
|
831
831
|
return 'Slack';
|
|
@@ -893,7 +893,7 @@ export async function runRemoteQuestionsStep(p, pc, authStorage) {
|
|
|
893
893
|
ts.stop('Could not reach Telegram API');
|
|
894
894
|
return null;
|
|
895
895
|
}
|
|
896
|
-
const { saveRemoteQuestionsConfig } = await import('
|
|
896
|
+
const { saveRemoteQuestionsConfig } = await import('../providers/remote-questions-config.js');
|
|
897
897
|
saveRemoteQuestionsConfig('telegram', trimmedChatId);
|
|
898
898
|
p.log.success(`Telegram chat: ${pc.green(trimmedChatId)}`);
|
|
899
899
|
return 'Telegram';
|
|
@@ -1002,7 +1002,7 @@ async function runDiscordChannelStep(p, pc, token) {
|
|
|
1002
1002
|
channelId = channelChoice;
|
|
1003
1003
|
}
|
|
1004
1004
|
// Save remote questions config
|
|
1005
|
-
const { saveRemoteQuestionsConfig } = await import('
|
|
1005
|
+
const { saveRemoteQuestionsConfig } = await import('../providers/remote-questions-config.js');
|
|
1006
1006
|
saveRemoteQuestionsConfig('discord', channelId);
|
|
1007
1007
|
const channelName = channels.find(ch => ch.id === channelId)?.name;
|
|
1008
1008
|
p.log.success(`Discord channel: ${pc.green(channelName ? `#${channelName}` : channelId)}`);
|
|
@@ -10,7 +10,7 @@ import { join } from 'node:path';
|
|
|
10
10
|
import os from 'node:os';
|
|
11
11
|
import chalk from 'chalk';
|
|
12
12
|
import stripAnsi from 'strip-ansi';
|
|
13
|
-
import { GSD_LOGO } from '
|
|
13
|
+
import { GSD_LOGO } from '../cli/logo.js';
|
|
14
14
|
function readGsdState() {
|
|
15
15
|
try {
|
|
16
16
|
const raw = readFileSync(join(process.cwd(), '.gsd', 'STATE.md'), 'utf-8');
|