gsd-pi 2.75.0-next.9c0ec0ba1 → 2.76.0-dev.b072ebb73
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 +145 -125
- package/dist/claude-cli-check.d.ts +10 -0
- package/dist/claude-cli-check.js +13 -3
- package/dist/onboarding.d.ts +20 -1
- package/dist/onboarding.js +60 -25
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/ask-user-questions.js +6 -3
- package/dist/resources/extensions/claude-code-cli/readiness.js +34 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -2
- package/dist/resources/extensions/gsd/auto/phases.js +48 -6
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
- package/dist/resources/extensions/gsd/auto-dispatch.js +87 -9
- package/dist/resources/extensions/gsd/auto-model-selection.js +27 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -5
- package/dist/resources/extensions/gsd/auto-prompts.js +188 -44
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -0
- package/dist/resources/extensions/gsd/auto-start.js +5 -3
- package/dist/resources/extensions/gsd/auto-verification.js +33 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +71 -2
- package/dist/resources/extensions/gsd/auto.js +25 -3
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +8 -21
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +131 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +12 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +84 -10
- package/dist/resources/extensions/gsd/commands/catalog.js +15 -7
- package/dist/resources/extensions/gsd/commands/handlers/core.js +58 -24
- package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
- package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +10 -0
- package/dist/resources/extensions/gsd/commands-config.js +5 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +200 -77
- package/dist/resources/extensions/gsd/commands-memory.js +462 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +39 -11
- package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
- package/dist/resources/extensions/gsd/db-writer.js +89 -16
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +50 -32
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +51 -5
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -1
- package/dist/resources/extensions/gsd/doctor.js +7 -1
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
- package/dist/resources/extensions/gsd/error-classifier.js +5 -2
- package/dist/resources/extensions/gsd/escalation.js +321 -0
- package/dist/resources/extensions/gsd/graph.js +26 -0
- package/dist/resources/extensions/gsd/gsd-db.js +517 -32
- package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
- package/dist/resources/extensions/gsd/health-widget.js +7 -4
- package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
- package/dist/resources/extensions/gsd/init-wizard.js +86 -45
- package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
- package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
- package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
- package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
- package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
- package/dist/resources/extensions/gsd/memory-relations.js +189 -0
- package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
- package/dist/resources/extensions/gsd/memory-store.js +318 -6
- package/dist/resources/extensions/gsd/metrics.js +1 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +12 -5
- package/dist/resources/extensions/gsd/native-git-bridge.js +121 -5
- package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
- package/dist/resources/extensions/gsd/notification-widget.js +24 -39
- package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
- package/dist/resources/extensions/gsd/pre-execution-checks.js +98 -8
- package/dist/resources/extensions/gsd/preferences-models.js +1 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
- package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +16 -3
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
- package/dist/resources/extensions/gsd/python-resolver.js +70 -0
- package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
- package/dist/resources/extensions/gsd/state.js +90 -7
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
- package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +331 -0
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
- package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
- package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
- package/dist/resources/extensions/gsd/uok/flags.js +1 -1
- package/dist/resources/extensions/gsd/verification-gate.js +2 -1
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +1 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
- package/dist/resources/extensions/gsd/workflow-templates/spike.md +6 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
- package/dist/resources/extensions/remote-questions/manager.js +11 -1
- package/dist/resources/extensions/search-the-web/command-search-provider.js +4 -1
- package/dist/resources/extensions/search-the-web/native-search.js +13 -2
- package/dist/resources/skills/api-design/SKILL.md +190 -0
- package/dist/resources/skills/create-mcp-server/SKILL.md +121 -0
- package/dist/resources/skills/decompose-into-slices/SKILL.md +139 -0
- package/dist/resources/skills/dependency-upgrade/SKILL.md +158 -0
- package/dist/resources/skills/design-an-interface/SKILL.md +102 -0
- package/dist/resources/skills/forensics/SKILL.md +153 -0
- package/dist/resources/skills/grill-me/SKILL.md +93 -0
- package/dist/resources/skills/handoff/SKILL.md +121 -0
- package/dist/resources/skills/observability/SKILL.md +174 -0
- package/dist/resources/skills/security-review/SKILL.md +181 -0
- package/dist/resources/skills/spike-wrap-up/SKILL.md +138 -0
- package/dist/resources/skills/tdd/SKILL.md +112 -0
- package/dist/resources/skills/verify-before-complete/SKILL.md +97 -0
- package/dist/resources/skills/write-docs/SKILL.md +81 -0
- package/dist/resources/skills/write-milestone-brief/SKILL.md +135 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
- 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/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- 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_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 +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- 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 +2 -2
- 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/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/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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +3 -3
- 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 +3 -3
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +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 +11 -11
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +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/{2826.02df9631042cc18e.js → 2826.e59e8578e2e28639.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/app/{page-f1e30ab6bb269149.js → page-5b113fd32bc2a1c3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-6c7cda3e318eedb6.js → webpack-5fc74f13a25fa1bb.js} +1 -1
- package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +48 -24
- package/package.json +1 -1
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +12 -10
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +8 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +2 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +306 -71
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/mcp-server.test.ts +40 -4
- package/packages/mcp-server/src/server.ts +12 -10
- package/packages/mcp-server/src/session-manager.ts +10 -3
- package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
- package/packages/mcp-server/src/workflow-tools.ts +359 -75
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +12 -0
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +30 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/src/agent-loop.ts +14 -0
- package/packages/pi-agent-core/src/types.ts +34 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +1 -0
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -7
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
- package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +13 -0
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +19 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +25 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +23 -2
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
- package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.js +47 -0
- package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
- package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +12 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +164 -14
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +15 -3
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts +2 -0
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +67 -0
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +16 -3
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts +2 -0
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +67 -0
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +2 -0
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +289 -0
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
- package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +12 -0
- package/packages/pi-ai/src/index.ts +1 -0
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +1 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -8
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
- package/packages/pi-ai/src/providers/anthropic-shared.ts +30 -1
- package/packages/pi-ai/src/providers/anthropic.ts +25 -2
- package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
- package/packages/pi-ai/src/providers/api-family.ts +57 -0
- package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +200 -23
- package/packages/pi-ai/src/utils/oauth/github-copilot.ts +12 -2
- package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +84 -0
- package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +15 -5
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +84 -0
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +16 -5
- package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +363 -0
- package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
- package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.js +14 -4
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
- package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +25 -2
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +7 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +25 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +4 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +34 -2
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +233 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +200 -3
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts +53 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.js +337 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +234 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js +40 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +33 -5
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +55 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +3 -0
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +17 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +13 -9
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
- package/packages/pi-coding-agent/src/cli/args.ts +21 -6
- package/packages/pi-coding-agent/src/core/agent-session.ts +27 -2
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +42 -0
- package/packages/pi-coding-agent/src/core/auth-storage.ts +25 -0
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
- package/packages/pi-coding-agent/src/core/extensions/index.ts +16 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +5 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +353 -1
- package/packages/pi-coding-agent/src/core/extensions/types.ts +253 -2
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +269 -0
- package/packages/pi-coding-agent/src/core/hooks-runner.ts +460 -0
- package/packages/pi-coding-agent/src/core/index.ts +10 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
- package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
- package/packages/pi-coding-agent/src/core/sdk.ts +48 -5
- package/packages/pi-coding-agent/src/core/settings-manager.ts +57 -0
- package/packages/pi-coding-agent/src/index.ts +16 -0
- package/packages/pi-coding-agent/src/main.ts +4 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +19 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +13 -9
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme-schema.js +1 -0
- package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +13 -9
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/ask-user-questions.ts +7 -4
- package/src/resources/extensions/claude-code-cli/readiness.ts +36 -2
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +59 -1
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +66 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -10
- package/src/resources/extensions/gsd/auto/phases.ts +52 -6
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +96 -4
- package/src/resources/extensions/gsd/auto-model-selection.ts +37 -6
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -5
- package/src/resources/extensions/gsd/auto-prompts.ts +225 -45
- package/src/resources/extensions/gsd/auto-recovery.ts +47 -0
- package/src/resources/extensions/gsd/auto-start.ts +8 -6
- package/src/resources/extensions/gsd/auto-verification.ts +33 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
- package/src/resources/extensions/gsd/auto.ts +27 -2
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +8 -21
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +163 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +15 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +89 -10
- package/src/resources/extensions/gsd/commands/catalog.ts +15 -7
- package/src/resources/extensions/gsd/commands/handlers/core.ts +63 -27
- package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
- package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
- package/src/resources/extensions/gsd/commands-config.ts +10 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +262 -78
- package/src/resources/extensions/gsd/commands-memory.ts +551 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +48 -11
- package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
- package/src/resources/extensions/gsd/db-writer.ts +91 -17
- package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +51 -30
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +59 -6
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -1
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
- package/src/resources/extensions/gsd/error-classifier.ts +5 -2
- package/src/resources/extensions/gsd/escalation.ts +367 -0
- package/src/resources/extensions/gsd/graph.ts +33 -0
- package/src/resources/extensions/gsd/gsd-db.ts +617 -32
- package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
- package/src/resources/extensions/gsd/health-widget.ts +7 -3
- package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
- package/src/resources/extensions/gsd/init-wizard.ts +87 -54
- package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
- package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
- package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
- package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
- package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
- package/src/resources/extensions/gsd/memory-relations.ts +240 -0
- package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
- package/src/resources/extensions/gsd/memory-store.ts +377 -7
- package/src/resources/extensions/gsd/metrics.ts +1 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +21 -5
- package/src/resources/extensions/gsd/native-git-bridge.ts +118 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
- package/src/resources/extensions/gsd/notification-widget.ts +25 -43
- package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
- package/src/resources/extensions/gsd/pre-execution-checks.ts +100 -12
- package/src/resources/extensions/gsd/preferences-models.ts +1 -0
- package/src/resources/extensions/gsd/preferences-types.ts +9 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
- package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +16 -3
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
- package/src/resources/extensions/gsd/python-resolver.ts +76 -0
- package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
- package/src/resources/extensions/gsd/state.ts +95 -6
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -1
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +95 -1
- package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +335 -21
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +117 -3
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +145 -8
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +72 -5
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
- package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
- package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +317 -1
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
- package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/memory-tools.ts +410 -0
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
- package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
- package/src/resources/extensions/gsd/types.ts +62 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
- package/src/resources/extensions/gsd/uok/flags.ts +1 -1
- package/src/resources/extensions/gsd/verification-gate.ts +2 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +1 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
- package/src/resources/extensions/gsd/workflow-templates/spike.md +6 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
- package/src/resources/extensions/remote-questions/manager.ts +13 -1
- package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
- package/src/resources/extensions/search-the-web/command-search-provider.ts +4 -1
- package/src/resources/extensions/search-the-web/native-search.ts +13 -3
- package/src/resources/skills/api-design/SKILL.md +190 -0
- package/src/resources/skills/create-mcp-server/SKILL.md +121 -0
- package/src/resources/skills/decompose-into-slices/SKILL.md +139 -0
- package/src/resources/skills/dependency-upgrade/SKILL.md +158 -0
- package/src/resources/skills/design-an-interface/SKILL.md +102 -0
- package/src/resources/skills/forensics/SKILL.md +153 -0
- package/src/resources/skills/grill-me/SKILL.md +93 -0
- package/src/resources/skills/handoff/SKILL.md +121 -0
- package/src/resources/skills/observability/SKILL.md +174 -0
- package/src/resources/skills/security-review/SKILL.md +181 -0
- package/src/resources/skills/spike-wrap-up/SKILL.md +138 -0
- package/src/resources/skills/tdd/SKILL.md +112 -0
- package/src/resources/skills/verify-before-complete/SKILL.md +97 -0
- package/src/resources/skills/write-docs/SKILL.md +81 -0
- package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
- package/dist/web/standalone/.next/static/css/3e9cdadb4d23b8a4.css +0 -1
- /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → pBwmOoye64ZrRp-_rf0v1}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{JncJywFxCugMuXGs56m-b → pBwmOoye64ZrRp-_rf0v1}/_ssgManifest.js +0 -0
|
@@ -146,6 +146,7 @@ import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
|
146
146
|
import {
|
|
147
147
|
createAutoWorktree,
|
|
148
148
|
enterAutoWorktree,
|
|
149
|
+
enterBranchModeForMilestone,
|
|
149
150
|
teardownAutoWorktree,
|
|
150
151
|
isInAutoWorktree,
|
|
151
152
|
getAutoWorktreePath,
|
|
@@ -169,6 +170,7 @@ import {
|
|
|
169
170
|
} from "./auto-recovery.js";
|
|
170
171
|
import { resolveDispatch, DISPATCH_RULES } from "./auto-dispatch.js";
|
|
171
172
|
import { getErrorMessage } from "./error-utils.js";
|
|
173
|
+
import { recoverFailedMigration } from "./migrate-external.js";
|
|
172
174
|
import { initRegistry, convertDispatchRules } from "./rule-registry.js";
|
|
173
175
|
import { emitJournalEvent as _emitJournalEvent, type JournalEntry } from "./journal.js";
|
|
174
176
|
import {
|
|
@@ -327,6 +329,7 @@ export function startAutoDetached(
|
|
|
327
329
|
});
|
|
328
330
|
}
|
|
329
331
|
|
|
332
|
+
/** Returns true if the project is configured for `isolation:worktree` mode. */
|
|
330
333
|
export function shouldUseWorktreeIsolation(): boolean {
|
|
331
334
|
const prefs = loadEffectiveGSDPreferences()?.preferences?.git;
|
|
332
335
|
if (prefs?.isolation === "worktree") return true;
|
|
@@ -488,6 +491,15 @@ export function getAutoModeStartModel(): {
|
|
|
488
491
|
return s.autoModeStartModel;
|
|
489
492
|
}
|
|
490
493
|
|
|
494
|
+
/**
|
|
495
|
+
* Update the dashboard-facing dispatched model label.
|
|
496
|
+
* Used when runtime recovery switches models mid-unit (e.g. provider fallback)
|
|
497
|
+
* so the AUTO box reflects the active model immediately.
|
|
498
|
+
*/
|
|
499
|
+
export function setCurrentDispatchedModelId(model: { provider: string; id: string } | null): void {
|
|
500
|
+
s.currentDispatchedModelId = model ? `${model.provider}/${model.id}` : null;
|
|
501
|
+
}
|
|
502
|
+
|
|
491
503
|
// Tool tracking — delegates to auto-tool-tracking.ts
|
|
492
504
|
export function markToolStart(toolCallId: string, toolName?: string): void {
|
|
493
505
|
_markToolStart(toolCallId, s.active, toolName);
|
|
@@ -1129,6 +1141,7 @@ function buildResolverDeps(): WorktreeResolverDeps {
|
|
|
1129
1141
|
teardownAutoWorktree,
|
|
1130
1142
|
createAutoWorktree,
|
|
1131
1143
|
enterAutoWorktree,
|
|
1144
|
+
enterBranchModeForMilestone,
|
|
1132
1145
|
getAutoWorktreePath,
|
|
1133
1146
|
autoCommitCurrentBranch,
|
|
1134
1147
|
getCurrentBranch,
|
|
@@ -1279,6 +1292,11 @@ function buildLoopDeps(): LoopDeps {
|
|
|
1279
1292
|
} as unknown as LoopDeps;
|
|
1280
1293
|
}
|
|
1281
1294
|
|
|
1295
|
+
/**
|
|
1296
|
+
* Start auto-mode. Handles both fresh-start and resume paths, sets up session
|
|
1297
|
+
* state, enters the milestone worktree or branch, and dispatches the first unit.
|
|
1298
|
+
* No-ops if auto-mode is already active.
|
|
1299
|
+
*/
|
|
1282
1300
|
export async function startAuto(
|
|
1283
1301
|
ctx: ExtensionCommandContext,
|
|
1284
1302
|
pi: ExtensionAPI,
|
|
@@ -1307,6 +1325,13 @@ export async function startAuto(
|
|
|
1307
1325
|
// Escape stale worktree cwd from a previous milestone (#608).
|
|
1308
1326
|
base = escapeStaleWorktree(base);
|
|
1309
1327
|
|
|
1328
|
+
// Heal .gsd.migrating before any branching — covers both fresh-start and
|
|
1329
|
+
// resume paths (#4416). The matching call in auto-start.ts covers the
|
|
1330
|
+
// bootstrap-only path; this call ensures the resume path is also protected.
|
|
1331
|
+
if (recoverFailedMigration(base)) {
|
|
1332
|
+
ctx.ui.notify("Recovered unfinished migration (.gsd.migrating → .gsd).", "info");
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1310
1335
|
const freshStartAssessment = interruptedAssessment
|
|
1311
1336
|
?? await assessInterruptedSession(base);
|
|
1312
1337
|
|
|
@@ -1464,10 +1489,10 @@ export async function startAuto(
|
|
|
1464
1489
|
ctx.ui.notify(summary, level as "info" | "warning" | "error");
|
|
1465
1490
|
});
|
|
1466
1491
|
|
|
1467
|
-
// ── Auto-worktree: re-enter
|
|
1492
|
+
// ── Auto-worktree / branch-mode: re-enter on resume ──
|
|
1468
1493
|
if (
|
|
1469
1494
|
s.currentMilestoneId &&
|
|
1470
|
-
|
|
1495
|
+
getIsolationMode() !== "none" &&
|
|
1471
1496
|
s.originalBasePath &&
|
|
1472
1497
|
!isInAutoWorktree(s.basePath) &&
|
|
1473
1498
|
!detectWorktreeName(s.basePath) &&
|
|
@@ -2,7 +2,7 @@ import type { ExtensionAPI, ExtensionContext } from "@gsd/pi-coding-agent";
|
|
|
2
2
|
|
|
3
3
|
import { logWarning } from "../workflow-logger.js";
|
|
4
4
|
import { checkAutoStartAfterDiscuss } from "../guided-flow.js";
|
|
5
|
-
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto } from "../auto.js";
|
|
5
|
+
import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
|
|
6
6
|
import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
|
|
7
7
|
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
8
8
|
import { isSessionSwitchInFlight, resolveAgentEnd } from "../auto-loop.js";
|
|
@@ -124,26 +124,11 @@ export async function handleAgentEnd(
|
|
|
124
124
|
// ── 1. Classify using rawErrorMsg to avoid prose false-positives ────
|
|
125
125
|
const cls = classifyError(rawErrorMsg, explicitRetryAfterMs);
|
|
126
126
|
|
|
127
|
-
// ── 1b. Defer to Core RetryHandler for transient errors
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
// better than our Layer 2 pause+resume (which creates a new session).
|
|
133
|
-
//
|
|
134
|
-
// If we react here AND the Core also retries, we race: pauseAuto tears
|
|
135
|
-
// down the session while agent.continue() starts a new turn.
|
|
136
|
-
//
|
|
137
|
-
// Solution: Do nothing for transient errors. The Core RetryHandler
|
|
138
|
-
// runs next in _processAgentEvent and will either:
|
|
139
|
-
// a) Retry successfully → new agent_end (success) → we see it next time
|
|
140
|
-
// b) Exhaust retries → the agent stays idle, autoLoop's unit timeout
|
|
141
|
-
// or stuck detection handles it
|
|
142
|
-
//
|
|
143
|
-
// We do NOT call resolveAgentEnd here — that would unblock autoLoop
|
|
144
|
-
// prematurely while the Core is still retrying in the same session.
|
|
145
|
-
// We do NOT call pauseAuto — that would tear down the session.
|
|
146
|
-
if (isTransient(cls)) {
|
|
127
|
+
// ── 1b. Defer to Core RetryHandler for most transient errors ────────
|
|
128
|
+
// Core retries transient failures in-session after this handler.
|
|
129
|
+
// Keep that behavior for non-rate-limit classes to avoid pause/retry races,
|
|
130
|
+
// but let rate-limit continue into model fallback logic below (#4373).
|
|
131
|
+
if (isTransient(cls) && cls.kind !== "rate-limit") {
|
|
147
132
|
return;
|
|
148
133
|
}
|
|
149
134
|
|
|
@@ -202,6 +187,7 @@ export async function handleAgentEnd(
|
|
|
202
187
|
if (modelToSet) {
|
|
203
188
|
const ok = await pi.setModel(modelToSet, { persist: false });
|
|
204
189
|
if (ok) {
|
|
190
|
+
setCurrentDispatchedModelId({ provider: modelToSet.provider, id: modelToSet.id });
|
|
205
191
|
ctx.ui.notify(`Model error${errorDetail}. Switched to fallback: ${nextModelId} and resuming.`, "warning");
|
|
206
192
|
pi.sendMessage({ customType: "gsd-auto-timeout-recovery", content: "Continue execution.", display: false }, { triggerTurn: true });
|
|
207
193
|
return;
|
|
@@ -219,6 +205,7 @@ export async function handleAgentEnd(
|
|
|
219
205
|
if (startModel) {
|
|
220
206
|
const ok = await pi.setModel(startModel, { persist: false });
|
|
221
207
|
if (ok) {
|
|
208
|
+
setCurrentDispatchedModelId({ provider: startModel.provider, id: startModel.id });
|
|
222
209
|
retryState.networkRetryCount = 0;
|
|
223
210
|
retryState.currentRetryModelId = undefined;
|
|
224
211
|
ctx.ui.notify(`Model error${errorDetail}. Restored session model: ${sessionModel.provider}/${sessionModel.id} and resuming.`, "warning");
|
|
@@ -449,10 +449,14 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
449
449
|
depends: Type.Array(Type.String(), { description: "Slice dependency IDs" }),
|
|
450
450
|
demo: Type.String({ description: "Roadmap demo text / After this" }),
|
|
451
451
|
goal: Type.String({ description: "Slice goal" }),
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
452
|
+
// ADR-011: heavy planning fields are optional for sketch slices; required for full slices.
|
|
453
|
+
successCriteria: Type.Optional(Type.String({ description: "Slice success criteria block (required for full slices; omit for sketches)" })),
|
|
454
|
+
proofLevel: Type.Optional(Type.String({ description: "Slice proof level (required for full slices; omit for sketches)" })),
|
|
455
|
+
integrationClosure: Type.Optional(Type.String({ description: "Slice integration closure (required for full slices; omit for sketches)" })),
|
|
456
|
+
observabilityImpact: Type.Optional(Type.String({ description: "Slice observability impact (required for full slices; omit for sketches)" })),
|
|
457
|
+
// ADR-011 sketch-then-refine fields.
|
|
458
|
+
isSketch: Type.Optional(Type.Boolean({ description: "ADR-011: true marks this slice as a sketch awaiting refine-slice expansion" })),
|
|
459
|
+
sketchScope: Type.Optional(Type.String({ description: "ADR-011: 2–3 sentence scope boundary, required when isSketch=true" })),
|
|
456
460
|
}), { description: "Planned slices for the milestone" }),
|
|
457
461
|
// ── Enrichment metadata (optional — defaults to empty) ────────────
|
|
458
462
|
status: Type.Optional(Type.String({ description: "Milestone status (defaults to active)" })),
|
|
@@ -631,6 +635,20 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
631
635
|
keyFiles: Type.Optional(Type.Array(Type.String(), { description: "List of key files created or modified" })),
|
|
632
636
|
keyDecisions: Type.Optional(Type.Array(Type.String(), { description: "List of key decisions made during this task" })),
|
|
633
637
|
blockerDiscovered: Type.Optional(Type.Boolean({ description: "Whether a plan-invalidating blocker was discovered" })),
|
|
638
|
+
// ADR-011 Phase 2: mid-execution escalation — agent asks the user to resolve an ambiguity.
|
|
639
|
+
escalation: Type.Optional(Type.Object({
|
|
640
|
+
question: Type.String({ description: "The question the user needs to answer — one clear sentence." }),
|
|
641
|
+
options: Type.Array(Type.Object({
|
|
642
|
+
id: Type.String({ description: "Short id (e.g. 'A', 'B') used by /gsd escalate resolve." }),
|
|
643
|
+
label: Type.String({ description: "One-line label." }),
|
|
644
|
+
tradeoffs: Type.String({ description: "1-2 sentences on the tradeoffs of this option." }),
|
|
645
|
+
}), { minItems: 2, maxItems: 4, description: "2–4 options the user can choose between." }),
|
|
646
|
+
recommendation: Type.String({ description: "Option id the executor recommends." }),
|
|
647
|
+
recommendationRationale: Type.String({ description: "Why the recommendation — 1–2 sentences." }),
|
|
648
|
+
continueWithDefault: Type.Boolean({
|
|
649
|
+
description: "When true, loop continues (artifact logged for later review). When false, auto-mode pauses until the user resolves via /gsd escalate resolve.",
|
|
650
|
+
}),
|
|
651
|
+
}, { description: "ADR-011 Phase 2: optional escalation payload. Only honored when phases.mid_execution_escalation is true." })),
|
|
634
652
|
verificationEvidence: Type.Optional(Type.Array(
|
|
635
653
|
Type.Union([
|
|
636
654
|
Type.Object({
|
|
@@ -758,32 +776,26 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
758
776
|
};
|
|
759
777
|
}
|
|
760
778
|
try {
|
|
761
|
-
const {
|
|
779
|
+
const { handleSkipSlice } = await import("../tools/skip-slice.js");
|
|
762
780
|
const { invalidateStateCache } = await import("../state.js");
|
|
763
781
|
|
|
764
|
-
const
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
};
|
|
770
|
-
}
|
|
782
|
+
const result = handleSkipSlice({
|
|
783
|
+
milestoneId: params.milestoneId,
|
|
784
|
+
sliceId: params.sliceId,
|
|
785
|
+
reason: params.reason,
|
|
786
|
+
});
|
|
771
787
|
|
|
772
|
-
if (
|
|
788
|
+
if (result.error) {
|
|
773
789
|
return {
|
|
774
|
-
content: [{ type: "text" as const, text: `Error:
|
|
775
|
-
details: {
|
|
790
|
+
content: [{ type: "text" as const, text: `Error: ${result.error}` }],
|
|
791
|
+
details: {
|
|
792
|
+
operation: "skip_slice",
|
|
793
|
+
error: result.error,
|
|
794
|
+
errorCode: result.errorCode ?? "skip_failed",
|
|
795
|
+
} as any,
|
|
776
796
|
};
|
|
777
797
|
}
|
|
778
798
|
|
|
779
|
-
if (slice.status === "skipped") {
|
|
780
|
-
return {
|
|
781
|
-
content: [{ type: "text" as const, text: `Slice ${params.sliceId} is already skipped.` }],
|
|
782
|
-
details: { operation: "skip_slice", sliceId: params.sliceId, milestoneId: params.milestoneId } as any,
|
|
783
|
-
};
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
updateSliceStatus(params.milestoneId, params.sliceId, "skipped");
|
|
787
799
|
invalidateStateCache();
|
|
788
800
|
|
|
789
801
|
// Rebuild STATE.md so it reflects the skip immediately (#3477).
|
|
@@ -796,13 +808,21 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
796
808
|
logError("tool", `skip_slice rebuildState failed: ${(err as Error).message}`, { tool: "gsd_skip_slice" });
|
|
797
809
|
}
|
|
798
810
|
|
|
811
|
+
const suffix = result.wasAlreadySkipped
|
|
812
|
+
? result.tasksSkipped > 0
|
|
813
|
+
? ` (already skipped; cascaded ${result.tasksSkipped} leftover task(s) to skipped).`
|
|
814
|
+
: " (already skipped; no pending tasks to cascade)."
|
|
815
|
+
: ` Cascaded ${result.tasksSkipped} task(s) to skipped. Auto-mode will advance past this slice.`;
|
|
816
|
+
|
|
799
817
|
return {
|
|
800
|
-
content: [{ type: "text" as const, text: `Skipped slice ${params.sliceId} (${params.milestoneId}). Reason: ${params.reason ?? "User-directed skip"}
|
|
818
|
+
content: [{ type: "text" as const, text: `Skipped slice ${params.sliceId} (${params.milestoneId}). Reason: ${params.reason ?? "User-directed skip"}.${suffix}` }],
|
|
801
819
|
details: {
|
|
802
820
|
operation: "skip_slice",
|
|
803
821
|
sliceId: params.sliceId,
|
|
804
822
|
milestoneId: params.milestoneId,
|
|
805
823
|
reason: params.reason,
|
|
824
|
+
tasksSkipped: result.tasksSkipped,
|
|
825
|
+
wasAlreadySkipped: result.wasAlreadySkipped,
|
|
806
826
|
} as any,
|
|
807
827
|
};
|
|
808
828
|
} catch (err) {
|
|
@@ -820,12 +840,14 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
820
840
|
label: "Skip Slice",
|
|
821
841
|
description:
|
|
822
842
|
"Mark a slice as skipped so auto-mode advances past it without executing. " +
|
|
843
|
+
"Non-closed tasks within the slice are cascaded to skipped so milestone completion is not blocked by leftover pending tasks (#4375). " +
|
|
823
844
|
"The slice data is preserved for reference. The state machine treats skipped slices like completed ones for dependency satisfaction.",
|
|
824
845
|
promptSnippet: "Skip a GSD slice (mark as skipped, auto-mode will advance past it)",
|
|
825
846
|
promptGuidelines: [
|
|
826
847
|
"Use gsd_skip_slice when a slice should be bypassed — descoped, superseded, or no longer relevant.",
|
|
827
848
|
"Cannot skip a slice that is already complete.",
|
|
828
849
|
"Skipped slices satisfy downstream dependencies just like completed slices.",
|
|
850
|
+
"All pending/active tasks in the slice are cascaded to skipped; completed tasks are never downgraded.",
|
|
829
851
|
],
|
|
830
852
|
parameters: Type.Object({
|
|
831
853
|
sliceId: Type.String({ description: "Slice ID (e.g. S02)" }),
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// GSD2 — Memory tool registration
|
|
2
|
+
//
|
|
3
|
+
// Exposes the memory-layer tools (capture_thought, memory_query, gsd_graph)
|
|
4
|
+
// to the LLM over MCP. All three degrade gracefully when the GSD database
|
|
5
|
+
// is unavailable.
|
|
6
|
+
|
|
7
|
+
import { Type } from "@sinclair/typebox";
|
|
8
|
+
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
9
|
+
|
|
10
|
+
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
11
|
+
import {
|
|
12
|
+
executeGsdGraph,
|
|
13
|
+
executeMemoryCapture,
|
|
14
|
+
executeMemoryQuery,
|
|
15
|
+
} from "../tools/memory-tools.js";
|
|
16
|
+
|
|
17
|
+
export function registerMemoryTools(pi: ExtensionAPI): void {
|
|
18
|
+
// ─── capture_thought ────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
pi.registerTool({
|
|
21
|
+
name: "capture_thought",
|
|
22
|
+
label: "Capture Thought",
|
|
23
|
+
description:
|
|
24
|
+
"Record a durable piece of project knowledge (decision, convention, gotcha, pattern, " +
|
|
25
|
+
"preference, or environment detail) into the GSD memory store. Use sparingly — one memory " +
|
|
26
|
+
"per genuinely reusable insight, not per task.",
|
|
27
|
+
promptSnippet:
|
|
28
|
+
"Capture a durable project insight into the GSD memory store (categories: architecture, convention, gotcha, pattern, preference, environment)",
|
|
29
|
+
promptGuidelines: [
|
|
30
|
+
"Use capture_thought for insights that will remain useful across future sessions.",
|
|
31
|
+
"Do NOT capture one-off bug fixes, temporary state, secrets, or task-specific details.",
|
|
32
|
+
"Keep content to 1–3 sentences.",
|
|
33
|
+
"Set confidence: 0.6 tentative, 0.8 solid, 0.95 well-confirmed (default 0.8).",
|
|
34
|
+
],
|
|
35
|
+
parameters: Type.Object({
|
|
36
|
+
category: Type.Union(
|
|
37
|
+
[
|
|
38
|
+
Type.Literal("architecture"),
|
|
39
|
+
Type.Literal("convention"),
|
|
40
|
+
Type.Literal("gotcha"),
|
|
41
|
+
Type.Literal("preference"),
|
|
42
|
+
Type.Literal("environment"),
|
|
43
|
+
Type.Literal("pattern"),
|
|
44
|
+
],
|
|
45
|
+
{ description: "Memory category" },
|
|
46
|
+
),
|
|
47
|
+
content: Type.String({ description: "The memory text (1–3 sentences, no secrets)" }),
|
|
48
|
+
confidence: Type.Optional(
|
|
49
|
+
Type.Number({ description: "0.1–0.99, default 0.8", minimum: 0.1, maximum: 0.99 }),
|
|
50
|
+
),
|
|
51
|
+
tags: Type.Optional(Type.Array(Type.String(), { description: "Free-form tags (reserved for future use)" })),
|
|
52
|
+
scope: Type.Optional(Type.String({ description: "Scope name (reserved for future use; defaults to project)" })),
|
|
53
|
+
structuredFields: Type.Optional(
|
|
54
|
+
Type.Record(Type.String(), Type.Unknown(), {
|
|
55
|
+
description: "Optional structured payload preserved alongside content (ADR-013). Use for decisions to retain scope/decision/choice/rationale/made_by/revisable. Omit for plain captures.",
|
|
56
|
+
}),
|
|
57
|
+
),
|
|
58
|
+
}),
|
|
59
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
60
|
+
const ok = await ensureDbOpen();
|
|
61
|
+
if (!ok) {
|
|
62
|
+
return {
|
|
63
|
+
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot capture memory." }],
|
|
64
|
+
details: { operation: "memory_capture", error: "db_unavailable" },
|
|
65
|
+
isError: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return executeMemoryCapture(params as Parameters<typeof executeMemoryCapture>[0]);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// ─── memory_query ───────────────────────────────────────────────────────
|
|
73
|
+
|
|
74
|
+
pi.registerTool({
|
|
75
|
+
name: "memory_query",
|
|
76
|
+
label: "Query Memory",
|
|
77
|
+
description:
|
|
78
|
+
"Search the GSD memory store for relevant memories. Phase 1 uses keyword matching ranked " +
|
|
79
|
+
"by confidence and reinforcement; future phases add semantic (embedding) retrieval.",
|
|
80
|
+
promptSnippet:
|
|
81
|
+
"Search the GSD memory store by keyword; returns ranked memories with id, category, and content",
|
|
82
|
+
promptGuidelines: [
|
|
83
|
+
"Use memory_query when you need durable project context that may not be in the current prompt.",
|
|
84
|
+
"Provide a short keyword-style query — not a full question.",
|
|
85
|
+
"Use category to narrow results to gotchas, conventions, architecture notes, etc.",
|
|
86
|
+
],
|
|
87
|
+
parameters: Type.Object({
|
|
88
|
+
query: Type.String({ description: "Keyword query (2+ char terms)" }),
|
|
89
|
+
k: Type.Optional(Type.Number({ description: "Max results (default 10, max 50)", minimum: 1, maximum: 50 })),
|
|
90
|
+
category: Type.Optional(
|
|
91
|
+
Type.Union(
|
|
92
|
+
[
|
|
93
|
+
Type.Literal("architecture"),
|
|
94
|
+
Type.Literal("convention"),
|
|
95
|
+
Type.Literal("gotcha"),
|
|
96
|
+
Type.Literal("preference"),
|
|
97
|
+
Type.Literal("environment"),
|
|
98
|
+
Type.Literal("pattern"),
|
|
99
|
+
],
|
|
100
|
+
{ description: "Restrict results to a single category" },
|
|
101
|
+
),
|
|
102
|
+
),
|
|
103
|
+
scope: Type.Optional(Type.String({ description: "Only include memories with this scope (e.g. 'project', 'global')" })),
|
|
104
|
+
tag: Type.Optional(Type.String({ description: "Only include memories tagged with this value" })),
|
|
105
|
+
include_superseded: Type.Optional(Type.Boolean({ description: "Include superseded memories (default false)" })),
|
|
106
|
+
reinforce_hits: Type.Optional(
|
|
107
|
+
Type.Boolean({ description: "Increment hit_count on returned memories (default false)" }),
|
|
108
|
+
),
|
|
109
|
+
}),
|
|
110
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
111
|
+
const ok = await ensureDbOpen();
|
|
112
|
+
if (!ok) {
|
|
113
|
+
return {
|
|
114
|
+
content: [{ type: "text" as const, text: "Error: GSD database is not available. Cannot query memory." }],
|
|
115
|
+
details: { operation: "memory_query", error: "db_unavailable" },
|
|
116
|
+
isError: true,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return executeMemoryQuery(params as Parameters<typeof executeMemoryQuery>[0]);
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// ─── gsd_graph ──────────────────────────────────────────────────────────
|
|
124
|
+
|
|
125
|
+
pi.registerTool({
|
|
126
|
+
name: "gsd_graph",
|
|
127
|
+
label: "GSD Knowledge Graph",
|
|
128
|
+
description:
|
|
129
|
+
"Inspect the relationship graph between memories. mode=query walks supersedes edges from a " +
|
|
130
|
+
"given memoryId; mode=build is a placeholder that future phases will use to rebuild graph " +
|
|
131
|
+
"edges from milestone LEARNINGS artifacts.",
|
|
132
|
+
promptSnippet: "Query the memory relationship graph or trigger a rebuild",
|
|
133
|
+
promptGuidelines: [
|
|
134
|
+
"Use mode=query with a memoryId when you want to see how a memory relates to others.",
|
|
135
|
+
"Phase 1 only exposes supersedes edges; additional relation types arrive in later phases.",
|
|
136
|
+
],
|
|
137
|
+
parameters: Type.Object({
|
|
138
|
+
mode: Type.Union([Type.Literal("build"), Type.Literal("query")], {
|
|
139
|
+
description: "build = recompute graph (placeholder), query = inspect edges",
|
|
140
|
+
}),
|
|
141
|
+
memoryId: Type.Optional(Type.String({ description: "Memory ID (required when mode=query)" })),
|
|
142
|
+
depth: Type.Optional(Type.Number({ description: "Hops to traverse (0–5, default 1)", minimum: 0, maximum: 5 })),
|
|
143
|
+
rel: Type.Optional(Type.Union([
|
|
144
|
+
Type.Literal("related_to"),
|
|
145
|
+
Type.Literal("depends_on"),
|
|
146
|
+
Type.Literal("contradicts"),
|
|
147
|
+
Type.Literal("elaborates"),
|
|
148
|
+
Type.Literal("supersedes"),
|
|
149
|
+
], { description: "Only include edges with this relation type" })),
|
|
150
|
+
}),
|
|
151
|
+
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
152
|
+
const ok = await ensureDbOpen();
|
|
153
|
+
if (!ok) {
|
|
154
|
+
return {
|
|
155
|
+
content: [{ type: "text" as const, text: "Error: GSD database is not available." }],
|
|
156
|
+
details: { operation: "gsd_graph", error: "db_unavailable" },
|
|
157
|
+
isError: true,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return executeGsdGraph(params as Parameters<typeof executeGsdGraph>[0]);
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
}
|
|
@@ -4,6 +4,7 @@ import { Type } from "@sinclair/typebox";
|
|
|
4
4
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
5
5
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
6
6
|
import { executeMilestoneStatus } from "../tools/workflow-tool-executors.js";
|
|
7
|
+
import { checkpointDatabase } from "../gsd-db.js";
|
|
7
8
|
|
|
8
9
|
export function registerQueryTools(pi: ExtensionAPI): void {
|
|
9
10
|
pi.registerTool({
|
|
@@ -31,4 +32,34 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
31
32
|
return executeMilestoneStatus(params);
|
|
32
33
|
},
|
|
33
34
|
});
|
|
35
|
+
|
|
36
|
+
pi.registerTool({
|
|
37
|
+
name: "gsd_checkpoint_db",
|
|
38
|
+
label: "Checkpoint GSD Database",
|
|
39
|
+
description:
|
|
40
|
+
"Flush the SQLite WAL (Write-Ahead Log) into the base gsd.db file. " +
|
|
41
|
+
"Call this before `git add .gsd/gsd.db` to ensure the committed database " +
|
|
42
|
+
"contains current milestone/slice/task state rather than stale pre-session content. " +
|
|
43
|
+
"Safe to call at any time while GSD is running.",
|
|
44
|
+
promptSnippet: "Flush WAL into gsd.db so git add stages current state",
|
|
45
|
+
promptGuidelines: [
|
|
46
|
+
"Call gsd_checkpoint_db immediately before staging .gsd/gsd.db with git add.",
|
|
47
|
+
"Do not use sqlite3 or shell commands to checkpoint — they are blocked. Use this tool instead.",
|
|
48
|
+
],
|
|
49
|
+
parameters: Type.Object({}),
|
|
50
|
+
async execute(_toolCallId, _params, _signal, _onUpdate, _ctx) {
|
|
51
|
+
const dbAvailable = await ensureDbOpen();
|
|
52
|
+
if (!dbAvailable) {
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: "text", text: "Error: GSD database is not available. Cannot checkpoint." }],
|
|
55
|
+
details: { operation: "checkpoint_db", error: "db_unavailable" },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
checkpointDatabase();
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
|
|
61
|
+
details: { operation: "checkpoint_db", status: "ok" },
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
34
65
|
}
|
|
@@ -9,6 +9,7 @@ import { loadEcosystemExtensions } from "../ecosystem/loader.js";
|
|
|
9
9
|
import { registerDbTools } from "./db-tools.js";
|
|
10
10
|
import { registerDynamicTools } from "./dynamic-tools.js";
|
|
11
11
|
import { registerJournalTools } from "./journal-tools.js";
|
|
12
|
+
import { registerMemoryTools } from "./memory-tools.js";
|
|
12
13
|
import { registerQueryTools } from "./query-tools.js";
|
|
13
14
|
import { registerHooks } from "./register-hooks.js";
|
|
14
15
|
import { registerShortcuts } from "./register-shortcuts.js";
|
|
@@ -65,6 +66,19 @@ export function registerGsdExtension(pi: ExtensionAPI): void {
|
|
|
65
66
|
registerWorktreeCommand(pi);
|
|
66
67
|
registerExitCommand(pi);
|
|
67
68
|
|
|
69
|
+
// Wire the Layer 2 event emitter bridge so deeply-nested GSD code can emit
|
|
70
|
+
// extension events (git lifecycle, verify, budget, milestone, unit) without
|
|
71
|
+
// threading `pi` through every call site.
|
|
72
|
+
import("../hook-emitter.js")
|
|
73
|
+
.then(({ setHookEmitter }) => setHookEmitter(pi))
|
|
74
|
+
.catch((err) => {
|
|
75
|
+
// Non-fatal — emitters simply become no-ops if this import fails, but
|
|
76
|
+
// surface the failure so silent bootstrap breakage is debuggable.
|
|
77
|
+
process.stderr.write(
|
|
78
|
+
`[gsd] Failed to bootstrap hook-emitter bridge: ${err instanceof Error ? err.stack ?? err.message : String(err)}\n`,
|
|
79
|
+
);
|
|
80
|
+
});
|
|
81
|
+
|
|
68
82
|
installEpipeGuard();
|
|
69
83
|
|
|
70
84
|
// Ecosystem handlers captured by the GSDExtensionAPI wrapper for the
|
|
@@ -85,6 +99,7 @@ export function registerGsdExtension(pi: ExtensionAPI): void {
|
|
|
85
99
|
["db-tools", () => registerDbTools(pi)],
|
|
86
100
|
["journal-tools", () => registerJournalTools(pi)],
|
|
87
101
|
["query-tools", () => registerQueryTools(pi)],
|
|
102
|
+
["memory-tools", () => registerMemoryTools(pi)],
|
|
88
103
|
["shortcuts", () => registerShortcuts(pi)],
|
|
89
104
|
["hooks", () => registerHooks(pi, ecosystemHandlers)],
|
|
90
105
|
["ecosystem", () => {
|
|
@@ -18,6 +18,7 @@ import { loadToolApiKeys } from "../commands-config.js";
|
|
|
18
18
|
import { loadFile, saveFile, formatContinue } from "../files.js";
|
|
19
19
|
import { deriveState } from "../state.js";
|
|
20
20
|
import { getAutoDashboardData, isAutoActive, isAutoPaused, markToolEnd, markToolStart, recordToolInvocationError } from "../auto.js";
|
|
21
|
+
import { hideFooter } from "../auto-dashboard.js";
|
|
21
22
|
import { isParallelActive, shutdownParallel } from "../parallel-orchestrator.js";
|
|
22
23
|
import { checkToolCallLoop, resetToolCallLoopGuard } from "./tool-call-loop-guard.js";
|
|
23
24
|
import { saveActivityLog } from "../activity-log.js";
|
|
@@ -88,6 +89,9 @@ export function registerHooks(
|
|
|
88
89
|
} catch { /* non-fatal */ }
|
|
89
90
|
}
|
|
90
91
|
loadToolApiKeys();
|
|
92
|
+
if (isAutoActive()) {
|
|
93
|
+
ctx.ui.setFooter(hideFooter);
|
|
94
|
+
}
|
|
91
95
|
});
|
|
92
96
|
|
|
93
97
|
pi.on("session_switch", async (_event, ctx) => {
|
|
@@ -108,6 +112,9 @@ export function registerHooks(
|
|
|
108
112
|
prepareWorkflowMcpForProject(ctx, process.cwd());
|
|
109
113
|
}
|
|
110
114
|
loadToolApiKeys();
|
|
115
|
+
if (isAutoActive()) {
|
|
116
|
+
ctx.ui.setFooter(hideFooter);
|
|
117
|
+
}
|
|
111
118
|
});
|
|
112
119
|
|
|
113
120
|
pi.on("before_agent_start", async (event, ctx: ExtensionContext) => {
|
|
@@ -325,6 +332,7 @@ export function registerHooks(
|
|
|
325
332
|
// ── Safety harness: evidence collection + destructive command warnings ──
|
|
326
333
|
pi.on("tool_call", async (event, ctx) => {
|
|
327
334
|
if (!isAutoActive()) return;
|
|
335
|
+
markToolStart(event.toolCallId, event.toolName);
|
|
328
336
|
safetyRecordToolCall(event.toolCallId, event.toolName, event.input as Record<string, unknown>);
|
|
329
337
|
|
|
330
338
|
// Destructive command classification (warn only, never block)
|
|
@@ -343,6 +351,20 @@ export function registerHooks(
|
|
|
343
351
|
});
|
|
344
352
|
|
|
345
353
|
pi.on("tool_result", async (event) => {
|
|
354
|
+
if (isAutoActive() && typeof event.toolCallId === "string") {
|
|
355
|
+
markToolEnd(event.toolCallId);
|
|
356
|
+
}
|
|
357
|
+
if (isAutoActive() && event.isError && event.toolName.startsWith("gsd_")) {
|
|
358
|
+
const resultPayload = ("result" in event ? event.result : undefined) as any;
|
|
359
|
+
const errorText = typeof resultPayload === "string"
|
|
360
|
+
? resultPayload
|
|
361
|
+
: (typeof resultPayload?.content?.[0]?.text === "string"
|
|
362
|
+
? resultPayload.content[0].text
|
|
363
|
+
: (typeof (event as any).content === "string"
|
|
364
|
+
? (event as any).content
|
|
365
|
+
: String(resultPayload ?? "")));
|
|
366
|
+
recordToolInvocationError(event.toolName, errorText);
|
|
367
|
+
}
|
|
346
368
|
if (event.toolName !== "ask_user_questions") return;
|
|
347
369
|
const milestoneId = getDiscussionMilestoneId(process.cwd());
|
|
348
370
|
const queueActive = isQueuePhaseActive();
|