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
|
@@ -296,6 +296,12 @@ export const WORKFLOW_TOOL_NAMES = [
|
|
|
296
296
|
"gsd_complete_task",
|
|
297
297
|
"gsd_milestone_status",
|
|
298
298
|
"gsd_journal_query",
|
|
299
|
+
// ADR-013 step 3: memory-store tools exposed to external MCP clients.
|
|
300
|
+
// gsd_memory_graph is namespaced to avoid collision with the existing
|
|
301
|
+
// gsd_graph tool (project knowledge graph from .gsd/ artifacts).
|
|
302
|
+
"gsd_capture_thought",
|
|
303
|
+
"gsd_memory_query",
|
|
304
|
+
"gsd_memory_graph",
|
|
299
305
|
];
|
|
300
306
|
const DEFAULT_WORKFLOW_OP_TIMEOUT_MS = 5 * 60 * 1000;
|
|
301
307
|
function getWorkflowOpTimeoutMs(env = process.env) {
|
|
@@ -307,6 +313,53 @@ function getWorkflowOpTimeoutMs(env = process.env) {
|
|
|
307
313
|
return DEFAULT_WORKFLOW_OP_TIMEOUT_MS;
|
|
308
314
|
return parsed; // 0 disables the timeout
|
|
309
315
|
}
|
|
316
|
+
/**
|
|
317
|
+
* Adapt an executor `ToolExecutionResult` ({ content, details?, isError? }) to
|
|
318
|
+
* the MCP `CallToolResult` shape ({ content, structuredContent?, isError? }).
|
|
319
|
+
*
|
|
320
|
+
* MCP transports (including stdio) only serialize fields declared in the
|
|
321
|
+
* protocol, so a non-standard `details` field is silently dropped over the
|
|
322
|
+
* wire. Mirroring it into `structuredContent` — the protocol's supported
|
|
323
|
+
* channel for structured tool payloads — preserves the data for clients that
|
|
324
|
+
* render from it (e.g. the save_gate_result renderer that reads gateId /
|
|
325
|
+
* verdict). See #4472.
|
|
326
|
+
*
|
|
327
|
+
* Discard policy for non-plain-object `details`: the `isPlainObject` guard
|
|
328
|
+
* accepts the canonical case (a record literal) and intentionally drops bare
|
|
329
|
+
* primitives (string, number, boolean), bare arrays, and class instances /
|
|
330
|
+
* Date objects. This is deliberate — MCP `structuredContent` is specified as
|
|
331
|
+
* a JSON object; non-object payloads can't round-trip cleanly. No current
|
|
332
|
+
* executor returns a non-object `details`, so this never fires in practice.
|
|
333
|
+
* Future executors needing to return a primitive should wrap it
|
|
334
|
+
* (`details: { value: 42 }`) rather than relying on the discard.
|
|
335
|
+
*/
|
|
336
|
+
function adaptExecutorResult(result) {
|
|
337
|
+
if (!result || typeof result !== "object")
|
|
338
|
+
return result;
|
|
339
|
+
const r = result;
|
|
340
|
+
if (!("details" in r))
|
|
341
|
+
return result;
|
|
342
|
+
const { details, ...rest } = r;
|
|
343
|
+
return isPlainObject(details) ? { ...rest, structuredContent: details } : rest;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Strict plain-object guard. True only for object literals and
|
|
347
|
+
* `Object.create(null)` — not for `Date`, `URL`, `Map`, `Set`, class instances,
|
|
348
|
+
* or arrays. Used to gate `structuredContent` forwarding so the MCP transport
|
|
349
|
+
* receives only true JSON objects (the protocol contract).
|
|
350
|
+
*
|
|
351
|
+
* Mirrored in `src/mcp-server.ts` for the agent-tool registry path's
|
|
352
|
+
* structured-content gate. Keep both copies in sync if the contract definition
|
|
353
|
+
* needs to evolve. See #4477 review.
|
|
354
|
+
*/
|
|
355
|
+
function isPlainObject(value) {
|
|
356
|
+
if (value === null || typeof value !== "object")
|
|
357
|
+
return false;
|
|
358
|
+
if (Array.isArray(value))
|
|
359
|
+
return false;
|
|
360
|
+
const proto = Object.getPrototypeOf(value);
|
|
361
|
+
return proto === null || proto === Object.prototype;
|
|
362
|
+
}
|
|
310
363
|
async function runSerializedWorkflowOperation(fn) {
|
|
311
364
|
// The shared DB adapter and workflow log base path are process-global, so
|
|
312
365
|
// workflow MCP mutations must not overlap within a single server process.
|
|
@@ -375,58 +428,50 @@ async function enforceWorkflowWriteGate(toolName, projectDir, milestoneId = null
|
|
|
375
428
|
}
|
|
376
429
|
async function handleTaskComplete(projectDir, args) {
|
|
377
430
|
await enforceWorkflowWriteGate("gsd_task_complete", projectDir, args.milestoneId);
|
|
378
|
-
const { taskId, sliceId, milestoneId, oneLiner, narrative, verification, deviations, knownIssues, keyFiles, keyDecisions, blockerDiscovered, verificationEvidence, } = args;
|
|
379
431
|
const { executeTaskComplete } = await getWorkflowToolExecutors();
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
deviations,
|
|
388
|
-
knownIssues,
|
|
389
|
-
keyFiles,
|
|
390
|
-
keyDecisions,
|
|
391
|
-
blockerDiscovered,
|
|
392
|
-
verificationEvidence,
|
|
393
|
-
}, projectDir));
|
|
432
|
+
// Pass `args` through directly rather than destructure-then-rebuild. The
|
|
433
|
+
// previous implementation re-listed each field, which silently dropped
|
|
434
|
+
// schema fields that weren't in the rebuild list (e.g., ADR-011's
|
|
435
|
+
// `escalation` payload). The destructure-then-rebuild pattern is the bug
|
|
436
|
+
// class; matching the spread shape used by sibling handlers (handleSliceComplete,
|
|
437
|
+
// handleReplanSlice) eliminates the recurrence risk by construction.
|
|
438
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)));
|
|
394
439
|
}
|
|
395
440
|
async function handleSliceComplete(projectDir, args) {
|
|
396
441
|
await enforceWorkflowWriteGate("gsd_slice_complete", projectDir, args.milestoneId);
|
|
397
442
|
const { executeSliceComplete } = await getWorkflowToolExecutors();
|
|
398
443
|
const { projectDir: _projectDir, ...params } = args;
|
|
399
|
-
return runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir));
|
|
444
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir)));
|
|
400
445
|
}
|
|
401
446
|
async function handleReplanSlice(projectDir, args) {
|
|
402
447
|
await enforceWorkflowWriteGate("gsd_replan_slice", projectDir, args.milestoneId);
|
|
403
448
|
const { executeReplanSlice } = await getWorkflowToolExecutors();
|
|
404
449
|
const { projectDir: _projectDir, ...params } = args;
|
|
405
|
-
return runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir));
|
|
450
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir)));
|
|
406
451
|
}
|
|
407
452
|
async function handleCompleteMilestone(projectDir, args) {
|
|
408
453
|
await enforceWorkflowWriteGate("gsd_complete_milestone", projectDir, args.milestoneId);
|
|
409
454
|
const { executeCompleteMilestone } = await getWorkflowToolExecutors();
|
|
410
455
|
const { projectDir: _projectDir, ...params } = args;
|
|
411
|
-
return runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir));
|
|
456
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir)));
|
|
412
457
|
}
|
|
413
458
|
async function handleValidateMilestone(projectDir, args) {
|
|
414
459
|
await enforceWorkflowWriteGate("gsd_validate_milestone", projectDir, args.milestoneId);
|
|
415
460
|
const { executeValidateMilestone } = await getWorkflowToolExecutors();
|
|
416
461
|
const { projectDir: _projectDir, ...params } = args;
|
|
417
|
-
return runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir));
|
|
462
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir)));
|
|
418
463
|
}
|
|
419
464
|
async function handleReassessRoadmap(projectDir, args) {
|
|
420
465
|
await enforceWorkflowWriteGate("gsd_reassess_roadmap", projectDir, args.milestoneId);
|
|
421
466
|
const { executeReassessRoadmap } = await getWorkflowToolExecutors();
|
|
422
467
|
const { projectDir: _projectDir, ...params } = args;
|
|
423
|
-
return runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir));
|
|
468
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir)));
|
|
424
469
|
}
|
|
425
470
|
async function handleSaveGateResult(projectDir, args) {
|
|
426
471
|
await enforceWorkflowWriteGate("gsd_save_gate_result", projectDir, args.milestoneId);
|
|
427
472
|
const { executeSaveGateResult } = await getWorkflowToolExecutors();
|
|
428
473
|
const { projectDir: _projectDir, ...params } = args;
|
|
429
|
-
return runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir));
|
|
474
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir)));
|
|
430
475
|
}
|
|
431
476
|
async function ensureMilestoneDbRow(milestoneId) {
|
|
432
477
|
try {
|
|
@@ -915,14 +960,14 @@ export function registerWorkflowTools(server) {
|
|
|
915
960
|
const { projectDir, ...params } = parsed;
|
|
916
961
|
await enforceWorkflowWriteGate("gsd_plan_milestone", projectDir, params.milestoneId);
|
|
917
962
|
const { executePlanMilestone } = await getWorkflowToolExecutors();
|
|
918
|
-
return runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir));
|
|
963
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir)));
|
|
919
964
|
});
|
|
920
965
|
server.tool("gsd_plan_slice", "Write slice/task planning state to the GSD database and render plan artifacts from DB.", planSliceParams, async (args) => {
|
|
921
966
|
const parsed = parseWorkflowArgs(planSliceSchema, args);
|
|
922
967
|
const { projectDir, ...params } = parsed;
|
|
923
968
|
await enforceWorkflowWriteGate("gsd_plan_slice", projectDir, params.milestoneId);
|
|
924
969
|
const { executePlanSlice } = await getWorkflowToolExecutors();
|
|
925
|
-
return runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir));
|
|
970
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir)));
|
|
926
971
|
});
|
|
927
972
|
server.tool("gsd_plan_task", "Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.", planTaskParams, async (args) => {
|
|
928
973
|
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
@@ -1031,7 +1076,7 @@ export function registerWorkflowTools(server) {
|
|
|
1031
1076
|
if (!supportedArtifactTypes.includes(artifact_type)) {
|
|
1032
1077
|
throw new Error(`artifact_type must be one of: ${supportedArtifactTypes.join(", ")}`);
|
|
1033
1078
|
}
|
|
1034
|
-
return runSerializedWorkflowOperation(() => executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir));
|
|
1079
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir)));
|
|
1035
1080
|
});
|
|
1036
1081
|
server.tool("gsd_task_complete", "Record a completed task to the GSD database and render its SUMMARY.md.", taskCompleteParams, async (args) => {
|
|
1037
1082
|
const parsed = parseWorkflowArgs(taskCompleteSchema, args);
|
|
@@ -1049,7 +1094,7 @@ export function registerWorkflowTools(server) {
|
|
|
1049
1094
|
// during pending-gate or queue-mode states.
|
|
1050
1095
|
const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);
|
|
1051
1096
|
const { executeMilestoneStatus } = await getWorkflowToolExecutors();
|
|
1052
|
-
return runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir));
|
|
1097
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir)));
|
|
1053
1098
|
});
|
|
1054
1099
|
server.tool("gsd_journal_query", "Query the structured event journal for auto-mode iterations.", journalQueryParams, async (args) => {
|
|
1055
1100
|
const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);
|
|
@@ -1060,5 +1105,98 @@ export function registerWorkflowTools(server) {
|
|
|
1060
1105
|
}
|
|
1061
1106
|
return { content: [{ type: "text", text: JSON.stringify(entries, null, 2) }] };
|
|
1062
1107
|
});
|
|
1108
|
+
// ─── ADR-013 step 3 — memory-store tools for external MCP clients ────────
|
|
1109
|
+
//
|
|
1110
|
+
// The same three tools the LLM sees in-process as `capture_thought`,
|
|
1111
|
+
// `memory_query`, and `gsd_graph` (the memory variant). MCP exposes them
|
|
1112
|
+
// under the gsd_* prefix and renames the memory graph to gsd_memory_graph
|
|
1113
|
+
// to avoid collision with the project knowledge graph tool registered as
|
|
1114
|
+
// `gsd_graph` in server.ts.
|
|
1115
|
+
const MEMORY_CATEGORY = z.enum([
|
|
1116
|
+
"architecture",
|
|
1117
|
+
"convention",
|
|
1118
|
+
"gotcha",
|
|
1119
|
+
"preference",
|
|
1120
|
+
"environment",
|
|
1121
|
+
"pattern",
|
|
1122
|
+
]);
|
|
1123
|
+
const captureThoughtSchema = z.object({
|
|
1124
|
+
projectDir: z.string().optional(),
|
|
1125
|
+
category: MEMORY_CATEGORY,
|
|
1126
|
+
// Reject empty / whitespace-only content at the schema layer so the LLM
|
|
1127
|
+
// never produces a memory row with no searchable text.
|
|
1128
|
+
content: z.string().trim().min(1, "content must be a non-empty trimmed string"),
|
|
1129
|
+
confidence: z.number().min(0.1).max(0.99).optional(),
|
|
1130
|
+
tags: z.array(z.string()).optional(),
|
|
1131
|
+
scope: z.string().optional(),
|
|
1132
|
+
structuredFields: z.record(z.string(), z.unknown()).optional(),
|
|
1133
|
+
});
|
|
1134
|
+
const captureThoughtParams = {
|
|
1135
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1136
|
+
category: MEMORY_CATEGORY.describe("Memory category"),
|
|
1137
|
+
content: z.string().describe("Memory text (1-3 sentences, no secrets)"),
|
|
1138
|
+
confidence: z.number().min(0.1).max(0.99).optional().describe("0.1-0.99, default 0.8"),
|
|
1139
|
+
tags: z.array(z.string()).optional().describe("Free-form tags"),
|
|
1140
|
+
scope: z.string().optional().describe("Scope name; defaults to 'project'"),
|
|
1141
|
+
structuredFields: z.record(z.string(), z.unknown()).optional().describe("ADR-013 structured payload (e.g. decision fields)"),
|
|
1142
|
+
};
|
|
1143
|
+
server.tool("gsd_capture_thought", "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.", captureThoughtParams, async (args) => {
|
|
1144
|
+
const { projectDir, ...params } = parseWorkflowArgs(captureThoughtSchema, args);
|
|
1145
|
+
await enforceWorkflowWriteGate("gsd_capture_thought", projectDir);
|
|
1146
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1147
|
+
const { executeMemoryCapture } = await importLocalModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1148
|
+
return executeMemoryCapture(params);
|
|
1149
|
+
});
|
|
1150
|
+
});
|
|
1151
|
+
const memoryQuerySchema = z.object({
|
|
1152
|
+
projectDir: z.string().optional(),
|
|
1153
|
+
// Match the documented "2+ char terms" contract in the in-process
|
|
1154
|
+
// memory_query tool — reject sub-2-char queries at the schema layer.
|
|
1155
|
+
query: z.string().trim().min(2, "query must be at least 2 characters"),
|
|
1156
|
+
k: z.number().int().min(1).max(50).optional(),
|
|
1157
|
+
category: MEMORY_CATEGORY.optional(),
|
|
1158
|
+
scope: z.string().optional(),
|
|
1159
|
+
tag: z.string().optional(),
|
|
1160
|
+
include_superseded: z.boolean().optional(),
|
|
1161
|
+
reinforce_hits: z.boolean().optional(),
|
|
1162
|
+
});
|
|
1163
|
+
const memoryQueryParams = {
|
|
1164
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1165
|
+
query: z.string().describe("Keyword query (2+ char terms)"),
|
|
1166
|
+
k: z.number().int().min(1).max(50).optional().describe("Max results (default 10, max 50)"),
|
|
1167
|
+
category: MEMORY_CATEGORY.optional().describe("Restrict to a single category"),
|
|
1168
|
+
scope: z.string().optional().describe("Only include memories with this scope"),
|
|
1169
|
+
tag: z.string().optional().describe("Only include memories tagged with this value"),
|
|
1170
|
+
include_superseded: z.boolean().optional().describe("Include superseded memories (default false)"),
|
|
1171
|
+
reinforce_hits: z.boolean().optional().describe("Increment hit_count on returned memories (default false)"),
|
|
1172
|
+
};
|
|
1173
|
+
server.tool("gsd_memory_query", "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.", memoryQueryParams, async (args) => {
|
|
1174
|
+
const { projectDir, ...params } = parseWorkflowArgs(memoryQuerySchema, args);
|
|
1175
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1176
|
+
const { executeMemoryQuery } = await importLocalModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1177
|
+
return executeMemoryQuery(params);
|
|
1178
|
+
});
|
|
1179
|
+
});
|
|
1180
|
+
const memoryGraphSchema = z.object({
|
|
1181
|
+
projectDir: z.string().optional(),
|
|
1182
|
+
mode: z.enum(["build", "query"]),
|
|
1183
|
+
memoryId: z.string().optional(),
|
|
1184
|
+
depth: z.number().int().min(0).max(5).optional(),
|
|
1185
|
+
rel: z.enum(["related_to", "depends_on", "contradicts", "elaborates", "supersedes"]).optional(),
|
|
1186
|
+
}).refine((val) => val.mode !== "query" || (typeof val.memoryId === "string" && val.memoryId.trim().length > 0), { message: "memoryId is required and must be non-empty when mode=query", path: ["memoryId"] });
|
|
1187
|
+
const memoryGraphParams = {
|
|
1188
|
+
projectDir: z.string().optional().describe("Absolute path to the project directory (defaults to MCP server cwd)"),
|
|
1189
|
+
mode: z.enum(["build", "query"]).describe("build = recompute graph (placeholder), query = inspect edges"),
|
|
1190
|
+
memoryId: z.string().optional().describe("Memory ID (required when mode=query)"),
|
|
1191
|
+
depth: z.number().int().min(0).max(5).optional().describe("Hops to traverse (0-5, default 1)"),
|
|
1192
|
+
rel: z.enum(["related_to", "depends_on", "contradicts", "elaborates", "supersedes"]).optional().describe("Only include edges with this relation type"),
|
|
1193
|
+
};
|
|
1194
|
+
server.tool("gsd_memory_graph", "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.", memoryGraphParams, async (args) => {
|
|
1195
|
+
const { projectDir, ...params } = parseWorkflowArgs(memoryGraphSchema, args);
|
|
1196
|
+
return runSerializedWorkflowDbOperation(projectDir, async () => {
|
|
1197
|
+
const { executeGsdGraph } = await importLocalModule("../../../src/resources/extensions/gsd/tools/memory-tools.js");
|
|
1198
|
+
return executeGsdGraph(params);
|
|
1199
|
+
});
|
|
1200
|
+
});
|
|
1063
1201
|
}
|
|
1064
1202
|
//# sourceMappingURL=workflow-tools.js.map
|