gsd-pi 2.76.0 → 2.77.0
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 +45 -25
- package/dist/claude-cli-check.js +32 -3
- package/dist/mcp-server.d.ts +7 -0
- package/dist/mcp-server.js +35 -1
- package/dist/onboarding.js +45 -0
- package/dist/resource-loader.d.ts +1 -1
- package/dist/resource-loader.js +2 -8
- package/dist/resources/agents/researcher.md +1 -1
- package/dist/resources/extensions/claude-code-cli/readiness.js +31 -8
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +77 -17
- package/dist/resources/extensions/gsd/auto/loop.js +9 -0
- package/dist/resources/extensions/gsd/auto/phases.js +104 -11
- package/dist/resources/extensions/gsd/auto/run-unit.js +38 -2
- package/dist/resources/extensions/gsd/auto/session.js +22 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +16 -3
- package/dist/resources/extensions/gsd/auto-model-selection.js +53 -16
- package/dist/resources/extensions/gsd/auto-post-unit.js +25 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +32 -1
- package/dist/resources/extensions/gsd/auto-start.js +58 -57
- package/dist/resources/extensions/gsd/auto-verification.js +33 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +51 -53
- package/dist/resources/extensions/gsd/auto.js +70 -28
- package/dist/resources/extensions/gsd/blocked-models.js +68 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +93 -1
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +39 -9
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +93 -0
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +3 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +12 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +52 -6
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +84 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +34 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +54 -89
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
- package/dist/resources/extensions/gsd/compaction-snapshot.js +121 -0
- package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
- package/dist/resources/extensions/gsd/db-writer.js +88 -16
- package/dist/resources/extensions/gsd/doctor-git-checks.js +23 -29
- package/dist/resources/extensions/gsd/doctor-providers.js +51 -5
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
- package/dist/resources/extensions/gsd/error-classifier.js +31 -3
- package/dist/resources/extensions/gsd/exec-history.js +120 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +258 -0
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/gsd-db.js +168 -23
- package/dist/resources/extensions/gsd/guided-flow.js +190 -1
- package/dist/resources/extensions/gsd/health-widget.js +4 -1
- package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
- package/dist/resources/extensions/gsd/init-wizard.js +15 -1
- package/dist/resources/extensions/gsd/key-manager.js +28 -0
- package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
- package/dist/resources/extensions/gsd/memory-store.js +19 -0
- package/dist/resources/extensions/gsd/model-router.js +36 -3
- package/dist/resources/extensions/gsd/pre-execution-checks.js +44 -9
- package/dist/resources/extensions/gsd/preferences-types.js +9 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +83 -0
- package/dist/resources/extensions/gsd/preferences.js +17 -17
- package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -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/discuss-headless.md +8 -0
- package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +13 -5
- package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
- package/dist/resources/extensions/gsd/state.js +43 -4
- package/dist/resources/extensions/gsd/token-counter.js +22 -5
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +59 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +126 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +26 -1
- package/dist/resources/extensions/gsd/tools/resume-tool.js +23 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +20 -3
- package/dist/resources/extensions/gsd/workflow-mcp.js +3 -0
- package/dist/resources/extensions/gsd/workflow-templates/spike.md +6 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +50 -10
- package/dist/resources/extensions/search-the-web/command-search-provider.js +5 -4
- package/dist/resources/extensions/search-the-web/native-search.js +45 -13
- 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 +98 -0
- package/dist/resources/skills/write-docs/SKILL.md +82 -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 +10 -10
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +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.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-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/server.js +1 -1
- package/dist/welcome-screen.js +6 -1
- package/dist/wizard.js +2 -0
- package/package.json +1 -1
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
- package/packages/mcp-server/dist/remote-questions.js +732 -0
- package/packages/mcp-server/dist/remote-questions.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +7 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +70 -8
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +14 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +49 -1
- package/packages/mcp-server/dist/session-manager.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 +163 -25
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +4 -3
- package/packages/mcp-server/src/mcp-server.test.ts +67 -0
- package/packages/mcp-server/src/remote-questions.test.ts +294 -0
- package/packages/mcp-server/src/remote-questions.ts +916 -0
- package/packages/mcp-server/src/server.ts +89 -14
- package/packages/mcp-server/src/session-manager.ts +43 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +146 -1
- package/packages/mcp-server/src/workflow-tools.ts +215 -43
- package/packages/mcp-server/tsconfig.test.json +19 -0
- 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/models/custom.d.ts +38 -0
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/custom.js +41 -0
- package/packages/pi-ai/dist/models/custom.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -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.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +13 -4
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +16 -1
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
- package/packages/pi-ai/dist/providers/think-tag-parser.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/package.json +1 -1
- package/packages/pi-ai/src/models/custom.ts +42 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
- package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
- package/packages/pi-ai/src/providers/anthropic.ts +15 -4
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
- package/packages/pi-ai/src/providers/simple-options.ts +17 -1
- package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
- package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -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/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +3 -2
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -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 +32 -2
- package/packages/pi-coding-agent/dist/core/agent-session.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 +35 -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 +205 -2
- 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-discovery.d.ts +3 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
- package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
- package/packages/pi-coding-agent/dist/core/model-discovery.test.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-custom-caps.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
- package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +90 -10
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.js +49 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.js +67 -0
- package/packages/pi-coding-agent/dist/core/redact-secrets.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +10 -6
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +45 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.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/modes/interactive/components/chat-frame.d.ts +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 +5 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
- package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -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 +13 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +3 -2
- package/packages/pi-coding-agent/src/core/agent-session.ts +38 -2
- 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 +351 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +258 -0
- 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-discovery.test.ts +19 -0
- package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
- package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
- package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
- package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +102 -10
- package/packages/pi-coding-agent/src/core/redact-secrets.test.ts +86 -0
- package/packages/pi-coding-agent/src/core/redact-secrets.ts +58 -0
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +65 -1
- package/packages/pi-coding-agent/src/core/session-manager.ts +10 -6
- 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/modes/interactive/components/chat-frame.ts +6 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
- 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/package.json +1 -1
- package/scripts/link-workspace-packages.cjs +1 -0
- package/src/resources/agents/researcher.md +1 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +32 -8
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +78 -17
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +149 -5
- package/src/resources/extensions/gsd/auto/loop-deps.ts +14 -0
- package/src/resources/extensions/gsd/auto/loop.ts +9 -0
- package/src/resources/extensions/gsd/auto/phases.ts +131 -10
- package/src/resources/extensions/gsd/auto/run-unit.ts +40 -2
- package/src/resources/extensions/gsd/auto/session.ts +35 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +16 -3
- package/src/resources/extensions/gsd/auto-model-selection.ts +71 -15
- package/src/resources/extensions/gsd/auto-post-unit.ts +29 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +26 -1
- package/src/resources/extensions/gsd/auto-start.ts +60 -68
- package/src/resources/extensions/gsd/auto-verification.ts +33 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +62 -63
- package/src/resources/extensions/gsd/auto.ts +73 -28
- package/src/resources/extensions/gsd/blocked-models.ts +98 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +120 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +40 -9
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +109 -0
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +5 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +15 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +54 -6
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +89 -26
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +35 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +55 -90
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
- package/src/resources/extensions/gsd/compaction-snapshot.ts +165 -0
- package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
- package/src/resources/extensions/gsd/db-writer.ts +88 -17
- package/src/resources/extensions/gsd/doctor-git-checks.ts +23 -27
- package/src/resources/extensions/gsd/doctor-providers.ts +59 -6
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
- package/src/resources/extensions/gsd/error-classifier.ts +36 -3
- package/src/resources/extensions/gsd/exec-history.ts +153 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +326 -0
- package/src/resources/extensions/gsd/gitignore.ts +1 -1
- package/src/resources/extensions/gsd/gsd-db.ts +186 -23
- package/src/resources/extensions/gsd/guided-flow.ts +222 -1
- package/src/resources/extensions/gsd/health-widget.ts +3 -1
- package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
- package/src/resources/extensions/gsd/init-wizard.ts +15 -1
- package/src/resources/extensions/gsd/journal.ts +2 -1
- package/src/resources/extensions/gsd/key-manager.ts +28 -0
- package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
- package/src/resources/extensions/gsd/memory-store.ts +26 -0
- package/src/resources/extensions/gsd/model-router.ts +42 -1
- package/src/resources/extensions/gsd/pre-execution-checks.ts +46 -10
- package/src/resources/extensions/gsd/preferences-types.ts +46 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +79 -0
- package/src/resources/extensions/gsd/preferences.ts +17 -17
- package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -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/discuss-headless.md +8 -0
- package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +17 -4
- package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
- package/src/resources/extensions/gsd/state.ts +45 -4
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +188 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +95 -1
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +33 -3
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/blocked-models.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +68 -66
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -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 +148 -3
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
- package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +237 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +210 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +40 -9
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +447 -1
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/key-manager.test.ts +9 -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-pressure-stuck-state.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +356 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +110 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +103 -4
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/save-gate-result-render.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +3 -1
- package/src/resources/extensions/gsd/token-counter.ts +22 -5
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +81 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +183 -0
- package/src/resources/extensions/gsd/tools/memory-tools.ts +31 -1
- package/src/resources/extensions/gsd/tools/resume-tool.ts +40 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +26 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -1
- package/src/resources/extensions/gsd/workflow-mcp.ts +3 -0
- package/src/resources/extensions/gsd/workflow-templates/spike.md +6 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +54 -9
- package/src/resources/extensions/search-the-web/command-search-provider.ts +5 -4
- package/src/resources/extensions/search-the-web/native-search.ts +48 -12
- 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 +98 -0
- package/src/resources/skills/write-docs/SKILL.md +82 -0
- package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
- /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → pV-mPo7rYGb5JBC09C8GG}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → pV-mPo7rYGb5JBC09C8GG}/_ssgManifest.js +0 -0
|
@@ -599,6 +599,12 @@ export const WORKFLOW_TOOL_NAMES = [
|
|
|
599
599
|
"gsd_complete_task",
|
|
600
600
|
"gsd_milestone_status",
|
|
601
601
|
"gsd_journal_query",
|
|
602
|
+
// ADR-013 step 3: memory-store tools exposed to external MCP clients.
|
|
603
|
+
// gsd_memory_graph is namespaced to avoid collision with the existing
|
|
604
|
+
// gsd_graph tool (project knowledge graph from .gsd/ artifacts).
|
|
605
|
+
"gsd_capture_thought",
|
|
606
|
+
"gsd_memory_query",
|
|
607
|
+
"gsd_memory_graph",
|
|
602
608
|
] as const;
|
|
603
609
|
|
|
604
610
|
const DEFAULT_WORKFLOW_OP_TIMEOUT_MS = 5 * 60 * 1000;
|
|
@@ -611,6 +617,51 @@ function getWorkflowOpTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {
|
|
|
611
617
|
return parsed; // 0 disables the timeout
|
|
612
618
|
}
|
|
613
619
|
|
|
620
|
+
/**
|
|
621
|
+
* Adapt an executor `ToolExecutionResult` ({ content, details?, isError? }) to
|
|
622
|
+
* the MCP `CallToolResult` shape ({ content, structuredContent?, isError? }).
|
|
623
|
+
*
|
|
624
|
+
* MCP transports (including stdio) only serialize fields declared in the
|
|
625
|
+
* protocol, so a non-standard `details` field is silently dropped over the
|
|
626
|
+
* wire. Mirroring it into `structuredContent` — the protocol's supported
|
|
627
|
+
* channel for structured tool payloads — preserves the data for clients that
|
|
628
|
+
* render from it (e.g. the save_gate_result renderer that reads gateId /
|
|
629
|
+
* verdict). See #4472.
|
|
630
|
+
*
|
|
631
|
+
* Discard policy for non-plain-object `details`: the `isPlainObject` guard
|
|
632
|
+
* accepts the canonical case (a record literal) and intentionally drops bare
|
|
633
|
+
* primitives (string, number, boolean), bare arrays, and class instances /
|
|
634
|
+
* Date objects. This is deliberate — MCP `structuredContent` is specified as
|
|
635
|
+
* a JSON object; non-object payloads can't round-trip cleanly. No current
|
|
636
|
+
* executor returns a non-object `details`, so this never fires in practice.
|
|
637
|
+
* Future executors needing to return a primitive should wrap it
|
|
638
|
+
* (`details: { value: 42 }`) rather than relying on the discard.
|
|
639
|
+
*/
|
|
640
|
+
function adaptExecutorResult(result: unknown): unknown {
|
|
641
|
+
if (!result || typeof result !== "object") return result;
|
|
642
|
+
const r = result as Record<string, unknown>;
|
|
643
|
+
if (!("details" in r)) return result;
|
|
644
|
+
const { details, ...rest } = r;
|
|
645
|
+
return isPlainObject(details) ? { ...rest, structuredContent: details } : rest;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Strict plain-object guard. True only for object literals and
|
|
650
|
+
* `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,
|
|
651
|
+
* or arrays. Used to gate `structuredContent` forwarding so the MCP transport
|
|
652
|
+
* receives only true JSON objects (the protocol contract).
|
|
653
|
+
*
|
|
654
|
+
* Mirrored in `src/mcp-server.ts` for the agent-tool registry path's
|
|
655
|
+
* structured-content gate. Keep both copies in sync if the contract definition
|
|
656
|
+
* needs to evolve. See #4477 review.
|
|
657
|
+
*/
|
|
658
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
659
|
+
if (value === null || typeof value !== "object") return false;
|
|
660
|
+
if (Array.isArray(value)) return false;
|
|
661
|
+
const proto = Object.getPrototypeOf(value);
|
|
662
|
+
return proto === null || proto === Object.prototype;
|
|
663
|
+
}
|
|
664
|
+
|
|
614
665
|
async function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {
|
|
615
666
|
// The shared DB adapter and workflow log base path are process-global, so
|
|
616
667
|
// workflow MCP mutations must not overlap within a single server process.
|
|
@@ -703,39 +754,15 @@ async function handleTaskComplete(
|
|
|
703
754
|
args: Omit<z.infer<typeof taskCompleteSchema>, "projectDir">,
|
|
704
755
|
): Promise<unknown> {
|
|
705
756
|
await enforceWorkflowWriteGate("gsd_task_complete", projectDir, args.milestoneId);
|
|
706
|
-
const {
|
|
707
|
-
taskId,
|
|
708
|
-
sliceId,
|
|
709
|
-
milestoneId,
|
|
710
|
-
oneLiner,
|
|
711
|
-
narrative,
|
|
712
|
-
verification,
|
|
713
|
-
deviations,
|
|
714
|
-
knownIssues,
|
|
715
|
-
keyFiles,
|
|
716
|
-
keyDecisions,
|
|
717
|
-
blockerDiscovered,
|
|
718
|
-
verificationEvidence,
|
|
719
|
-
} = args;
|
|
720
757
|
const { executeTaskComplete } = await getWorkflowToolExecutors();
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
verification,
|
|
730
|
-
deviations,
|
|
731
|
-
knownIssues,
|
|
732
|
-
keyFiles,
|
|
733
|
-
keyDecisions,
|
|
734
|
-
blockerDiscovered,
|
|
735
|
-
verificationEvidence,
|
|
736
|
-
},
|
|
737
|
-
projectDir,
|
|
738
|
-
),
|
|
758
|
+
// Pass `args` through directly rather than destructure-then-rebuild. The
|
|
759
|
+
// previous implementation re-listed each field, which silently dropped
|
|
760
|
+
// schema fields that weren't in the rebuild list (e.g., ADR-011's
|
|
761
|
+
// `escalation` payload). The destructure-then-rebuild pattern is the bug
|
|
762
|
+
// class; matching the spread shape used by sibling handlers (handleSliceComplete,
|
|
763
|
+
// handleReplanSlice) eliminates the recurrence risk by construction.
|
|
764
|
+
return adaptExecutorResult(
|
|
765
|
+
await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)),
|
|
739
766
|
);
|
|
740
767
|
}
|
|
741
768
|
|
|
@@ -746,7 +773,9 @@ async function handleSliceComplete(
|
|
|
746
773
|
await enforceWorkflowWriteGate("gsd_slice_complete", projectDir, args.milestoneId);
|
|
747
774
|
const { executeSliceComplete } = await getWorkflowToolExecutors();
|
|
748
775
|
const { projectDir: _projectDir, ...params } = args;
|
|
749
|
-
return
|
|
776
|
+
return adaptExecutorResult(
|
|
777
|
+
await runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir)),
|
|
778
|
+
);
|
|
750
779
|
}
|
|
751
780
|
|
|
752
781
|
async function handleReplanSlice(
|
|
@@ -756,7 +785,9 @@ async function handleReplanSlice(
|
|
|
756
785
|
await enforceWorkflowWriteGate("gsd_replan_slice", projectDir, args.milestoneId);
|
|
757
786
|
const { executeReplanSlice } = await getWorkflowToolExecutors();
|
|
758
787
|
const { projectDir: _projectDir, ...params } = args;
|
|
759
|
-
return
|
|
788
|
+
return adaptExecutorResult(
|
|
789
|
+
await runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir)),
|
|
790
|
+
);
|
|
760
791
|
}
|
|
761
792
|
|
|
762
793
|
async function handleCompleteMilestone(
|
|
@@ -766,7 +797,9 @@ async function handleCompleteMilestone(
|
|
|
766
797
|
await enforceWorkflowWriteGate("gsd_complete_milestone", projectDir, args.milestoneId);
|
|
767
798
|
const { executeCompleteMilestone } = await getWorkflowToolExecutors();
|
|
768
799
|
const { projectDir: _projectDir, ...params } = args;
|
|
769
|
-
return
|
|
800
|
+
return adaptExecutorResult(
|
|
801
|
+
await runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir)),
|
|
802
|
+
);
|
|
770
803
|
}
|
|
771
804
|
|
|
772
805
|
async function handleValidateMilestone(
|
|
@@ -776,7 +809,9 @@ async function handleValidateMilestone(
|
|
|
776
809
|
await enforceWorkflowWriteGate("gsd_validate_milestone", projectDir, args.milestoneId);
|
|
777
810
|
const { executeValidateMilestone } = await getWorkflowToolExecutors();
|
|
778
811
|
const { projectDir: _projectDir, ...params } = args;
|
|
779
|
-
return
|
|
812
|
+
return adaptExecutorResult(
|
|
813
|
+
await runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir)),
|
|
814
|
+
);
|
|
780
815
|
}
|
|
781
816
|
|
|
782
817
|
async function handleReassessRoadmap(
|
|
@@ -786,7 +821,9 @@ async function handleReassessRoadmap(
|
|
|
786
821
|
await enforceWorkflowWriteGate("gsd_reassess_roadmap", projectDir, args.milestoneId);
|
|
787
822
|
const { executeReassessRoadmap } = await getWorkflowToolExecutors();
|
|
788
823
|
const { projectDir: _projectDir, ...params } = args;
|
|
789
|
-
return
|
|
824
|
+
return adaptExecutorResult(
|
|
825
|
+
await runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir)),
|
|
826
|
+
);
|
|
790
827
|
}
|
|
791
828
|
|
|
792
829
|
async function handleSaveGateResult(
|
|
@@ -796,7 +833,9 @@ async function handleSaveGateResult(
|
|
|
796
833
|
await enforceWorkflowWriteGate("gsd_save_gate_result", projectDir, args.milestoneId);
|
|
797
834
|
const { executeSaveGateResult } = await getWorkflowToolExecutors();
|
|
798
835
|
const { projectDir: _projectDir, ...params } = args;
|
|
799
|
-
return
|
|
836
|
+
return adaptExecutorResult(
|
|
837
|
+
await runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir)),
|
|
838
|
+
);
|
|
800
839
|
}
|
|
801
840
|
|
|
802
841
|
async function ensureMilestoneDbRow(milestoneId: string): Promise<void> {
|
|
@@ -1378,7 +1417,9 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1378
1417
|
const { projectDir, ...params } = parsed;
|
|
1379
1418
|
await enforceWorkflowWriteGate("gsd_plan_milestone", projectDir, params.milestoneId);
|
|
1380
1419
|
const { executePlanMilestone } = await getWorkflowToolExecutors();
|
|
1381
|
-
return
|
|
1420
|
+
return adaptExecutorResult(
|
|
1421
|
+
await runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir)),
|
|
1422
|
+
);
|
|
1382
1423
|
},
|
|
1383
1424
|
);
|
|
1384
1425
|
|
|
@@ -1391,7 +1432,9 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1391
1432
|
const { projectDir, ...params } = parsed;
|
|
1392
1433
|
await enforceWorkflowWriteGate("gsd_plan_slice", projectDir, params.milestoneId);
|
|
1393
1434
|
const { executePlanSlice } = await getWorkflowToolExecutors();
|
|
1394
|
-
return
|
|
1435
|
+
return adaptExecutorResult(
|
|
1436
|
+
await runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir)),
|
|
1437
|
+
);
|
|
1395
1438
|
},
|
|
1396
1439
|
);
|
|
1397
1440
|
|
|
@@ -1592,8 +1635,10 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1592
1635
|
`artifact_type must be one of: ${supportedArtifactTypes.join(", ")}`,
|
|
1593
1636
|
);
|
|
1594
1637
|
}
|
|
1595
|
-
return
|
|
1596
|
-
|
|
1638
|
+
return adaptExecutorResult(
|
|
1639
|
+
await runSerializedWorkflowOperation(() =>
|
|
1640
|
+
executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir),
|
|
1641
|
+
),
|
|
1597
1642
|
);
|
|
1598
1643
|
},
|
|
1599
1644
|
);
|
|
@@ -1630,7 +1675,9 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1630
1675
|
// during pending-gate or queue-mode states.
|
|
1631
1676
|
const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);
|
|
1632
1677
|
const { executeMilestoneStatus } = await getWorkflowToolExecutors();
|
|
1633
|
-
return
|
|
1678
|
+
return adaptExecutorResult(
|
|
1679
|
+
await runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir)),
|
|
1680
|
+
);
|
|
1634
1681
|
},
|
|
1635
1682
|
);
|
|
1636
1683
|
|
|
@@ -1648,4 +1695,129 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1648
1695
|
return { content: [{ type: "text" as const, text: JSON.stringify(entries, null, 2) }] };
|
|
1649
1696
|
},
|
|
1650
1697
|
);
|
|
1698
|
+
|
|
1699
|
+
// ─── ADR-013 step 3 — memory-store tools for external MCP clients ────────
|
|
1700
|
+
//
|
|
1701
|
+
// The same three tools the LLM sees in-process as `capture_thought`,
|
|
1702
|
+
// `memory_query`, and `gsd_graph` (the memory variant). MCP exposes them
|
|
1703
|
+
// under the gsd_* prefix and renames the memory graph to gsd_memory_graph
|
|
1704
|
+
// to avoid collision with the project knowledge graph tool registered as
|
|
1705
|
+
// `gsd_graph` in server.ts.
|
|
1706
|
+
|
|
1707
|
+
const MEMORY_CATEGORY = z.enum([
|
|
1708
|
+
"architecture",
|
|
1709
|
+
"convention",
|
|
1710
|
+
"gotcha",
|
|
1711
|
+
"preference",
|
|
1712
|
+
"environment",
|
|
1713
|
+
"pattern",
|
|
1714
|
+
]);
|
|
1715
|
+
|
|
1716
|
+
const captureThoughtSchema = z.object({
|
|
1717
|
+
projectDir: z.string().optional(),
|
|
1718
|
+
category: MEMORY_CATEGORY,
|
|
1719
|
+
// Reject empty / whitespace-only content at the schema layer so the LLM
|
|
1720
|
+
// never produces a memory row with no searchable text.
|
|
1721
|
+
content: z.string().trim().min(1, "content must be a non-empty trimmed string"),
|
|
1722
|
+
confidence: z.number().min(0.1).max(0.99).optional(),
|
|
1723
|
+
tags: z.array(z.string()).optional(),
|
|
1724
|
+
scope: z.string().optional(),
|
|
1725
|
+
structuredFields: z.record(z.string(), z.unknown()).optional(),
|
|
1726
|
+
});
|
|
1727
|
+
const captureThoughtParams = {
|
|
1728
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1729
|
+
category: MEMORY_CATEGORY.describe("Memory category"),
|
|
1730
|
+
content: z.string().describe("Memory text (1-3 sentences, no secrets)"),
|
|
1731
|
+
confidence: z.number().min(0.1).max(0.99).optional().describe("0.1-0.99, default 0.8"),
|
|
1732
|
+
tags: z.array(z.string()).optional().describe("Free-form tags"),
|
|
1733
|
+
scope: z.string().optional().describe("Scope name; defaults to 'project'"),
|
|
1734
|
+
structuredFields: z.record(z.string(), z.unknown()).optional().describe("ADR-013 structured payload (e.g. decision fields)"),
|
|
1735
|
+
};
|
|
1736
|
+
|
|
1737
|
+
server.tool(
|
|
1738
|
+
"gsd_capture_thought",
|
|
1739
|
+
"Record a durable project insight into the GSD memory store. Categories: architecture, convention, gotcha, preference, environment, pattern. Mirrors the in-process capture_thought tool for external MCP clients.",
|
|
1740
|
+
captureThoughtParams,
|
|
1741
|
+
async (args: Record<string, unknown>) => {
|
|
1742
|
+
const { projectDir, ...params } = parseWorkflowArgs(captureThoughtSchema, args);
|
|
1743
|
+
await enforceWorkflowWriteGate("gsd_capture_thought", projectDir);
|
|
1744
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1745
|
+
const { executeMemoryCapture } = await importLocalModule<any>(
|
|
1746
|
+
"../../../src/resources/extensions/gsd/tools/memory-tools.js",
|
|
1747
|
+
);
|
|
1748
|
+
return executeMemoryCapture(params);
|
|
1749
|
+
});
|
|
1750
|
+
},
|
|
1751
|
+
);
|
|
1752
|
+
|
|
1753
|
+
const memoryQuerySchema = z.object({
|
|
1754
|
+
projectDir: z.string().optional(),
|
|
1755
|
+
// Match the documented "2+ char terms" contract in the in-process
|
|
1756
|
+
// memory_query tool — reject sub-2-char queries at the schema layer.
|
|
1757
|
+
query: z.string().trim().min(2, "query must be at least 2 characters"),
|
|
1758
|
+
k: z.number().int().min(1).max(50).optional(),
|
|
1759
|
+
category: MEMORY_CATEGORY.optional(),
|
|
1760
|
+
scope: z.string().optional(),
|
|
1761
|
+
tag: z.string().optional(),
|
|
1762
|
+
include_superseded: z.boolean().optional(),
|
|
1763
|
+
reinforce_hits: z.boolean().optional(),
|
|
1764
|
+
});
|
|
1765
|
+
const memoryQueryParams = {
|
|
1766
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1767
|
+
query: z.string().describe("Keyword query (2+ char terms)"),
|
|
1768
|
+
k: z.number().int().min(1).max(50).optional().describe("Max results (default 10, max 50)"),
|
|
1769
|
+
category: MEMORY_CATEGORY.optional().describe("Restrict to a single category"),
|
|
1770
|
+
scope: z.string().optional().describe("Only include memories with this scope"),
|
|
1771
|
+
tag: z.string().optional().describe("Only include memories tagged with this value"),
|
|
1772
|
+
include_superseded: z.boolean().optional().describe("Include superseded memories (default false)"),
|
|
1773
|
+
reinforce_hits: z.boolean().optional().describe("Increment hit_count on returned memories (default false)"),
|
|
1774
|
+
};
|
|
1775
|
+
|
|
1776
|
+
server.tool(
|
|
1777
|
+
"gsd_memory_query",
|
|
1778
|
+
"Search the GSD memory store by keyword. Returns ranked memories with id, category, content, confidence, scope, and tags. Mirrors the in-process memory_query tool for external MCP clients.",
|
|
1779
|
+
memoryQueryParams,
|
|
1780
|
+
async (args: Record<string, unknown>) => {
|
|
1781
|
+
const { projectDir, ...params } = parseWorkflowArgs(memoryQuerySchema, args);
|
|
1782
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1783
|
+
const { executeMemoryQuery } = await importLocalModule<any>(
|
|
1784
|
+
"../../../src/resources/extensions/gsd/tools/memory-tools.js",
|
|
1785
|
+
);
|
|
1786
|
+
return executeMemoryQuery(params);
|
|
1787
|
+
});
|
|
1788
|
+
},
|
|
1789
|
+
);
|
|
1790
|
+
|
|
1791
|
+
const memoryGraphSchema = z.object({
|
|
1792
|
+
projectDir: z.string().optional(),
|
|
1793
|
+
mode: z.enum(["build", "query"]),
|
|
1794
|
+
memoryId: z.string().optional(),
|
|
1795
|
+
depth: z.number().int().min(0).max(5).optional(),
|
|
1796
|
+
rel: z.enum(["related_to", "depends_on", "contradicts", "elaborates", "supersedes"]).optional(),
|
|
1797
|
+
}).refine(
|
|
1798
|
+
(val) => val.mode !== "query" || (typeof val.memoryId === "string" && val.memoryId.trim().length > 0),
|
|
1799
|
+
{ message: "memoryId is required and must be non-empty when mode=query", path: ["memoryId"] },
|
|
1800
|
+
);
|
|
1801
|
+
const memoryGraphParams = {
|
|
1802
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1803
|
+
mode: z.enum(["build", "query"]).describe("build = recompute graph (placeholder), query = inspect edges"),
|
|
1804
|
+
memoryId: z.string().optional().describe("Memory ID (required when mode=query)"),
|
|
1805
|
+
depth: z.number().int().min(0).max(5).optional().describe("Hops to traverse (0-5, default 1)"),
|
|
1806
|
+
rel: z.enum(["related_to", "depends_on", "contradicts", "elaborates", "supersedes"]).optional().describe("Only include edges with this relation type"),
|
|
1807
|
+
};
|
|
1808
|
+
|
|
1809
|
+
server.tool(
|
|
1810
|
+
"gsd_memory_graph",
|
|
1811
|
+
"Inspect the relationship graph between memories. mode=query walks edges from a given memoryId. mode=build is a placeholder reserved for future graph rebuilds. Distinct from gsd_graph (project knowledge graph) — see ADR-013.",
|
|
1812
|
+
memoryGraphParams,
|
|
1813
|
+
async (args: Record<string, unknown>) => {
|
|
1814
|
+
const { projectDir, ...params } = parseWorkflowArgs(memoryGraphSchema, args);
|
|
1815
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1816
|
+
const { executeGsdGraph } = await importLocalModule<any>(
|
|
1817
|
+
"../../../src/resources/extensions/gsd/tools/memory-tools.js",
|
|
1818
|
+
);
|
|
1819
|
+
return executeGsdGraph(params);
|
|
1820
|
+
});
|
|
1821
|
+
},
|
|
1822
|
+
);
|
|
1651
1823
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"declaration": false,
|
|
5
|
+
"declarationMap": false,
|
|
6
|
+
"incremental": false,
|
|
7
|
+
"outDir": "./dist"
|
|
8
|
+
},
|
|
9
|
+
"include": [
|
|
10
|
+
"src/**/*.ts"
|
|
11
|
+
],
|
|
12
|
+
"exclude": [
|
|
13
|
+
"node_modules",
|
|
14
|
+
"dist",
|
|
15
|
+
"**/*.d.ts",
|
|
16
|
+
"src/**/*.d.ts",
|
|
17
|
+
"src/workflow-tools.test.ts"
|
|
18
|
+
]
|
|
19
|
+
}
|