gsd-pi 2.81.0 → 2.82.0-dev.c22380fc3
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 +60 -30
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +1 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +1 -0
- package/dist/resources/extensions/gsd/auto/loop.js +111 -8
- package/dist/resources/extensions/gsd/auto/orchestrator.js +113 -6
- package/dist/resources/extensions/gsd/auto/phases.js +199 -97
- package/dist/resources/extensions/gsd/auto/run-unit.js +66 -3
- package/dist/resources/extensions/gsd/auto/session.js +9 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +182 -178
- package/dist/resources/extensions/gsd/auto-dispatch.js +14 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +11 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +6 -181
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +20 -23
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +12 -6
- package/dist/resources/extensions/gsd/auto-worktree.js +8 -0
- package/dist/resources/extensions/gsd/auto.js +371 -106
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +13 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +13 -2
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/parallel.js +9 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +15 -2
- package/dist/resources/extensions/gsd/context-store.js +112 -0
- package/dist/resources/extensions/gsd/db-writer.js +150 -84
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +41 -6
- package/dist/resources/extensions/gsd/git-service.js +2 -1
- package/dist/resources/extensions/gsd/gsd-db.js +7 -23
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +4 -10
- package/dist/resources/extensions/gsd/knowledge-backfill.js +144 -0
- package/dist/resources/extensions/gsd/knowledge-capture.js +136 -0
- package/dist/resources/extensions/gsd/knowledge-parser.js +154 -0
- package/dist/resources/extensions/gsd/knowledge-projection.js +210 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +6 -96
- package/dist/resources/extensions/gsd/md-importer.js +1 -1
- package/dist/resources/extensions/gsd/memory-backfill.js +73 -17
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +222 -0
- package/dist/resources/extensions/gsd/migrate/command.js +5 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
- package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +14 -14
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/dist/resources/extensions/gsd/prompts/system.md +2 -2
- package/dist/resources/extensions/gsd/provider-switch-observer.js +146 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +15 -1
- package/dist/resources/extensions/gsd/session-lock.js +40 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +131 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +247 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +87 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +124 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +32 -0
- package/dist/resources/extensions/gsd/state-reconciliation/errors.js +41 -0
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +99 -0
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +24 -0
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +43 -0
- package/dist/resources/extensions/gsd/state-reconciliation/types.js +3 -0
- package/dist/resources/extensions/gsd/state-reconciliation.js +5 -26
- package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +743 -318
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- 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 +12 -12
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.d.ts +0 -7
- package/dist/welcome-screen.js +60 -69
- package/package.json +3 -2
- package/packages/contracts/dist/rpc.test.js +7 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +21 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js +24 -0
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/src/rpc.test.ts +8 -0
- package/packages/contracts/src/workflow.ts +24 -0
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +14 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +80 -0
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/workflow-tools-parity.test.ts +244 -0
- package/packages/mcp-server/src/workflow-tools.test.ts +22 -0
- package/packages/mcp-server/src/workflow-tools.ts +168 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -2
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts +11 -0
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +20 -0
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/index.ts +7 -2
- package/packages/pi-ai/src/providers/transform-messages.ts +24 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +4 -4
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +76 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +86 -82
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +105 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +27 -26
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +9 -6
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +17 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +113 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +84 -104
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
- package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +22 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +5 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
- package/packages/pi-tui/src/overlay-layout.ts +10 -7
- package/packages/pi-tui/src/tui.ts +6 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +105 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +27 -26
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/tools/screenshot.ts +1 -0
- package/src/resources/extensions/browser-tools/tools/zoom.ts +1 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +46 -11
- package/src/resources/extensions/gsd/auto/loop-deps.ts +9 -5
- package/src/resources/extensions/gsd/auto/loop.ts +113 -9
- package/src/resources/extensions/gsd/auto/orchestrator.ts +118 -6
- package/src/resources/extensions/gsd/auto/phases.ts +158 -19
- package/src/resources/extensions/gsd/auto/run-unit.ts +69 -4
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +230 -183
- package/src/resources/extensions/gsd/auto-dispatch.ts +15 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +11 -3
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -209
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +22 -22
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +12 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +8 -0
- package/src/resources/extensions/gsd/auto.ts +411 -106
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -6
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +12 -2
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/parallel.ts +12 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/context-store.ts +120 -1
- package/src/resources/extensions/gsd/db-writer.ts +167 -84
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +44 -6
- package/src/resources/extensions/gsd/doctor-types.ts +2 -0
- package/src/resources/extensions/gsd/git-service.ts +2 -0
- package/src/resources/extensions/gsd/gsd-db.ts +7 -23
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +6 -10
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +164 -0
- package/src/resources/extensions/gsd/knowledge-capture.ts +160 -0
- package/src/resources/extensions/gsd/knowledge-parser.ts +174 -0
- package/src/resources/extensions/gsd/knowledge-projection.ts +241 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +10 -96
- package/src/resources/extensions/gsd/md-importer.ts +1 -1
- package/src/resources/extensions/gsd/memory-backfill.ts +89 -17
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +277 -0
- package/src/resources/extensions/gsd/migrate/command.ts +5 -0
- package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
- package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
- package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +14 -13
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/src/resources/extensions/gsd/prompts/system.md +2 -2
- package/src/resources/extensions/gsd/provider-switch-observer.ts +185 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +18 -1
- package/src/resources/extensions/gsd/session-lock.ts +41 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +172 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +337 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +69 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +109 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +68 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +185 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +46 -0
- package/src/resources/extensions/gsd/state-reconciliation/errors.ts +67 -0
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +142 -0
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +27 -0
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +60 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +83 -0
- package/src/resources/extensions/gsd/state-reconciliation.ts +21 -53
- package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +729 -176
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +408 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +292 -4
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +20 -5
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +28 -1
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +13 -8
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +453 -0
- package/src/resources/extensions/gsd/tests/decisions-stop-table-writes.test.ts +348 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +323 -0
- package/src/resources/extensions/gsd/tests/knowledge-capture.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -2
- package/src/resources/extensions/gsd/tests/load-knowledge-block-rules-only.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +46 -11
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -217
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +71 -58
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +952 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +158 -58
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +597 -118
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1171 -526
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_ssgManifest.js +0 -0
package/dist/welcome-screen.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Startup welcome screen rendering for the GSD terminal experience.
|
|
1
3
|
/**
|
|
2
4
|
* GSD Welcome Screen
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Command-center layout: rounded terminal card with compact logo, project
|
|
7
|
+
* state, primary action, branch/workspace, and secondary hints.
|
|
6
8
|
* Falls back to simple text on narrow terminals (<70 cols) or non-TTY.
|
|
7
9
|
*/
|
|
8
10
|
import { readFileSync } from 'node:fs';
|
|
@@ -70,7 +72,27 @@ function visLen(s) {
|
|
|
70
72
|
}
|
|
71
73
|
/** Right-pad a string to the given visible width. */
|
|
72
74
|
function rpad(s, w) {
|
|
73
|
-
|
|
75
|
+
const clamped = clampVisible(s, w);
|
|
76
|
+
return clamped + ' '.repeat(Math.max(0, w - visLen(clamped)));
|
|
77
|
+
}
|
|
78
|
+
function rightAlign(left, right, width) {
|
|
79
|
+
if (!right)
|
|
80
|
+
return clampVisible(left, width);
|
|
81
|
+
const gap = Math.max(1, width - visLen(left) - visLen(right));
|
|
82
|
+
return clampVisible(left + ' '.repeat(gap) + right, width);
|
|
83
|
+
}
|
|
84
|
+
function frameLine(content, width) {
|
|
85
|
+
const inner = Math.max(1, width - 2);
|
|
86
|
+
return chalk.hex('#a7ba78')('│') + rpad(content, inner) + chalk.hex('#a7ba78')('│');
|
|
87
|
+
}
|
|
88
|
+
/** Clamp rendered terminal output by visible columns. Falls back to plain text only when truncating. */
|
|
89
|
+
function clampVisible(s, w) {
|
|
90
|
+
if (w <= 0)
|
|
91
|
+
return '';
|
|
92
|
+
if (visLen(s) <= w)
|
|
93
|
+
return s;
|
|
94
|
+
const plain = stripAnsi(s);
|
|
95
|
+
return plain.slice(0, Math.max(0, w - 1)) + '…';
|
|
74
96
|
}
|
|
75
97
|
export function buildWelcomeScreenLines(opts) {
|
|
76
98
|
const { version, remoteChannel } = opts;
|
|
@@ -80,20 +102,6 @@ export function buildWelcomeScreenLines(opts) {
|
|
|
80
102
|
if (termWidth < 70) {
|
|
81
103
|
return ['', ` Get Shit Done v${version}`, ` ${shortCwd}`, ''];
|
|
82
104
|
}
|
|
83
|
-
// ── Panel widths ────────────────────────────────────────────────────────────
|
|
84
|
-
// Layout: 1 leading space + LEFT_INNER logo content + 1 inner divider + RIGHT_INNER info
|
|
85
|
-
// Total: 1 + LEFT_INNER + 1 + RIGHT_INNER = termWidth
|
|
86
|
-
const LEFT_INNER = 34;
|
|
87
|
-
const RIGHT_INNER = termWidth - LEFT_INNER - 2; // 2 = leading space + inner divider
|
|
88
|
-
// ── Bar/divider chars (matching GLYPH.separator + widget ui.bar() style) ────
|
|
89
|
-
const H = '─', DV = '│', DS = '├';
|
|
90
|
-
// ── Left rows: blank + 6 logo lines + blank (8 total) ───────────────────────
|
|
91
|
-
const leftRows = ['', ...GSD_LOGO, ''];
|
|
92
|
-
// ── Right rows (8 total, null = divider) ────────────────────────────────────
|
|
93
|
-
const titleLeft = ` ${chalk.bold('Get Shit Done')}`;
|
|
94
|
-
const titleRight = chalk.dim(`v${version}`);
|
|
95
|
-
const titleFill = RIGHT_INNER - visLen(titleLeft) - visLen(titleRight);
|
|
96
|
-
const titleRow = titleLeft + ' '.repeat(Math.max(1, titleFill)) + titleRight;
|
|
97
105
|
const toolParts = [];
|
|
98
106
|
if (process.env.BRAVE_API_KEY)
|
|
99
107
|
toolParts.push('Brave ✓');
|
|
@@ -107,71 +115,54 @@ export function buildWelcomeScreenLines(opts) {
|
|
|
107
115
|
toolParts.push('Context7 ✓');
|
|
108
116
|
if (remoteChannel)
|
|
109
117
|
toolParts.push(`${remoteChannel.charAt(0).toUpperCase() + remoteChannel.slice(1)} ✓`);
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
|
|
118
|
+
const innerWidth = Math.max(1, termWidth - 2);
|
|
119
|
+
const logoWidth = Math.max(...GSD_LOGO.map((line) => visLen(line)));
|
|
120
|
+
const divider = ` ${chalk.dim('│')} `;
|
|
121
|
+
const panelWidth = innerWidth - logoWidth - visLen(divider);
|
|
122
|
+
if (panelWidth < 44) {
|
|
123
|
+
return ['', ` Get Shit Done v${version}`, ` ${shortCwd}`, ''];
|
|
124
|
+
}
|
|
115
125
|
// "Welcome back" context lines — GSD state if available, else hint.
|
|
116
126
|
// Intentionally avoids data already shown in the footer (model, provider,
|
|
117
127
|
// pwd, branch).
|
|
118
128
|
const state = readGsdState();
|
|
119
|
-
let
|
|
120
|
-
let
|
|
129
|
+
let projectText = 'No active GSD project';
|
|
130
|
+
let commandText = '/gsd start';
|
|
131
|
+
let modeText = 'manual';
|
|
121
132
|
if (state?.milestone) {
|
|
122
133
|
const statusParts = [state.milestone, state.phase, state.slice].filter(Boolean);
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
activeText = activeText.slice(0, maxActiveLen - 1) + '…';
|
|
128
|
-
line1 = `${activePrefix}${chalk.dim(activeText)}`;
|
|
129
|
-
line2 = state.nextAction
|
|
130
|
-
? ` Next ${chalk.dim(state.nextAction)}`
|
|
131
|
-
: '';
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
line1 = ` Status ${chalk.dim('No active GSD project')}`;
|
|
135
|
-
line2 = ` ${chalk.dim('/gsd to begin')}`;
|
|
134
|
+
projectText = statusParts.join(' · ');
|
|
135
|
+
const maxActionWidth = Math.max(10, panelWidth - 30);
|
|
136
|
+
commandText = state.nextAction ? clampVisible(state.nextAction, maxActionWidth) : '/gsd next';
|
|
137
|
+
modeText = state.phase ?? 'active';
|
|
136
138
|
}
|
|
137
|
-
const sessionLine = line1;
|
|
138
|
-
const projectLine = line2;
|
|
139
139
|
const mcpCount = countMcpServers();
|
|
140
|
-
const
|
|
141
|
-
?
|
|
142
|
-
:
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
'',
|
|
151
|
-
|
|
152
|
-
|
|
140
|
+
const mcpText = toolParts.length > 0
|
|
141
|
+
? toolParts.join(' · ')
|
|
142
|
+
: mcpCount > 0
|
|
143
|
+
? `${mcpCount} server${mcpCount === 1 ? '' : 's'} configured`
|
|
144
|
+
: 'none configured';
|
|
145
|
+
const label = (s) => chalk.dim(s);
|
|
146
|
+
const value = (s) => chalk.hex('#dce4f2')(s);
|
|
147
|
+
const accent = (s) => chalk.hex('#8db7ff')(s);
|
|
148
|
+
const panelRows = [
|
|
149
|
+
rightAlign(`${accent('GSD')} ${chalk.bold(value('Project Console'))}`, chalk.dim(`v${version}`), panelWidth),
|
|
150
|
+
rightAlign(`${label('Project')} ${value(projectText)}`, `${label('Command')} ${accent(commandText)}`, panelWidth),
|
|
151
|
+
rightAlign(`${label('Workspace')} ${value(shortCwd)}`, `${label('Mode')} ${value(modeText)}`, panelWidth),
|
|
152
|
+
rightAlign(`${label('MCP')} ${chalk.dim(mcpText)}`, `${label('Status')} ${value(state?.milestone ? 'active' : 'idle')}`, panelWidth),
|
|
153
|
+
rightAlign(`${label('Next')} ${accent('/gsd to begin')}`, `${label('Setup')} ${accent('/gsd start')}`, panelWidth),
|
|
154
|
+
rightAlign(chalk.dim('/gsd templates'), chalk.dim('/gsd help'), panelWidth),
|
|
153
155
|
];
|
|
154
156
|
// ── Render ──────────────────────────────────────────────────────────────────
|
|
155
157
|
const out = [''];
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
const lContent = rpad(row ? chalk.cyan(row) : '', LEFT_INNER);
|
|
161
|
-
const rRow = rightRows[i];
|
|
162
|
-
if (rRow === null) {
|
|
163
|
-
// Section divider: left logo area + dim ├────... extending right
|
|
164
|
-
out.push(' ' + lContent + chalk.dim(DS + H.repeat(RIGHT_INNER)));
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
// Content row: 1 space + logo │ info (no outer vertical borders)
|
|
168
|
-
out.push(' ' + lContent + chalk.dim(DV) + rpad(rRow, RIGHT_INNER));
|
|
169
|
-
}
|
|
158
|
+
out.push(chalk.hex('#a7ba78')('╭' + '─'.repeat(termWidth - 2) + '╮'));
|
|
159
|
+
for (let i = 0; i < GSD_LOGO.length; i++) {
|
|
160
|
+
const logo = rpad(chalk.hex('#a7ba78')(GSD_LOGO[i]), logoWidth);
|
|
161
|
+
out.push(frameLine(`${logo}${divider}${panelRows[i] ?? ''}`, termWidth));
|
|
170
162
|
}
|
|
171
|
-
|
|
172
|
-
out.push(chalk.cyan(H.repeat(termWidth)));
|
|
163
|
+
out.push(chalk.hex('#a7ba78')('╰' + '─'.repeat(termWidth - 2) + '╯'));
|
|
173
164
|
out.push('');
|
|
174
|
-
return out;
|
|
165
|
+
return out.map((line) => clampVisible(line, termWidth));
|
|
175
166
|
}
|
|
176
167
|
export function printWelcomeScreen(opts) {
|
|
177
168
|
if (!process.stderr.isTTY)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-pi",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.82.0-dev.c22380fc3",
|
|
4
4
|
"description": "GSD — Get Shit Done coding agent",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"test:packages:compiled": "node scripts/run-package-tests.cjs",
|
|
74
74
|
"verify:workspace-coverage": "node scripts/verify-workspace-coverage.cjs",
|
|
75
75
|
"test:marketplace": "node scripts/with-env.mjs GSD_TEST_CLONE_MARKETPLACES=1 -- node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/resources/extensions/gsd/tests/claude-import-tui.test.ts src/resources/extensions/gsd/tests/plugin-importer-live.test.ts src/tests/marketplace-discovery.test.ts",
|
|
76
|
-
"test:coverage": "c8 --reporter=text --reporter=lcov --exclude=\"src/resources/extensions/gsd/tests/**\" --exclude=\"src/tests/**\" --exclude=\"scripts/**\" --exclude=\"native/**\" --exclude=\"node_modules/**\" --check-coverage --statements=40 --lines=40 --branches=20 --functions=20 node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --experimental-test-isolation=process --test src/resources/extensions/gsd/tests/*.test.ts src/resources/extensions/gsd/tests/*.test.mjs src/tests/*.test.ts src/resources/extensions/shared/tests/*.test.ts",
|
|
76
|
+
"test:coverage": "cross-env NODE_OPTIONS=--max-old-space-size=8192 c8 --reporter=text --reporter=lcov --exclude=\"src/resources/extensions/gsd/tests/**\" --exclude=\"src/tests/**\" --exclude=\"scripts/**\" --exclude=\"native/**\" --exclude=\"node_modules/**\" --check-coverage --statements=40 --lines=40 --branches=20 --functions=20 node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --experimental-test-isolation=process --test src/resources/extensions/gsd/tests/*.test.ts src/resources/extensions/gsd/tests/*.test.mjs src/tests/*.test.ts src/resources/extensions/shared/tests/*.test.ts",
|
|
77
77
|
"test:integration": "node --import ./src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test \"src/tests/integration/*.test.ts\" \"src/resources/extensions/gsd/tests/integration/*.test.ts\" \"src/resources/extensions/async-jobs/*.test.ts\" \"src/resources/extensions/browser-tools/tests/*.test.mjs\"",
|
|
78
78
|
"pretest": "npm run typecheck:extensions",
|
|
79
79
|
"test": "npm run test:unit && npm run test:integration && npm run test:packages",
|
|
@@ -149,6 +149,7 @@
|
|
|
149
149
|
"@types/node": "^24.12.0",
|
|
150
150
|
"@types/picomatch": "^4.0.2",
|
|
151
151
|
"c8": "^11.0.0",
|
|
152
|
+
"cross-env": "^7.0.3",
|
|
152
153
|
"esbuild": "^0.25.12",
|
|
153
154
|
"jiti": "^2.6.1",
|
|
154
155
|
"typescript": "^5.4.0"
|
|
@@ -37,11 +37,18 @@ test("mcp pending blocker preserves secure input payloads", () => {
|
|
|
37
37
|
test("workflow tool contracts expose canonical names and aliases", () => {
|
|
38
38
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_task_complete"));
|
|
39
39
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_complete_task"));
|
|
40
|
+
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_task_reopen"));
|
|
41
|
+
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_reopen_task"));
|
|
40
42
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_plan_milestone"));
|
|
41
43
|
const taskComplete = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === "gsd_task_complete");
|
|
42
44
|
assert.ok(taskComplete);
|
|
43
45
|
assert.deepEqual([...taskComplete.aliases], ["gsd_complete_task"]);
|
|
44
46
|
assert.equal(taskComplete.writePolicy, "write");
|
|
45
47
|
assert.equal(taskComplete.schemaId, "workflow.task.complete");
|
|
48
|
+
const taskReopen = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === "gsd_task_reopen");
|
|
49
|
+
assert.ok(taskReopen);
|
|
50
|
+
assert.deepEqual([...taskReopen.aliases], ["gsd_reopen_task"]);
|
|
51
|
+
assert.equal(taskReopen.writePolicy, "write");
|
|
52
|
+
assert.equal(taskReopen.schemaId, "workflow.task.reopen");
|
|
46
53
|
});
|
|
47
54
|
//# sourceMappingURL=rpc.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.test.js","sourceRoot":"","sources":["../src/rpc.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rpc.test.js","sourceRoot":"","sources":["../src/rpc.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Tests for canonical RPC contract constants exported by the contracts package.\n\nimport assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport {\n\tRPC_COMMAND_TYPES,\n\tRPC_CONTRACT_VERSION,\n\tRPC_EXTENSION_UI_METHODS,\n\tRPC_THINKING_LEVELS,\n\tRPC_V2_EVENT_TYPES,\n\ttype McpPendingBlocker,\n} from \"./rpc.js\";\nimport { WORKFLOW_TOOL_CONTRACTS, WORKFLOW_TOOL_NAMES } from \"./workflow.js\";\n\ntest(\"rpc contract version is stable and public\", () => {\n\tassert.equal(RPC_CONTRACT_VERSION, 1);\n});\n\ntest(\"rpc command constants cover the public v2 handshake and core commands\", () => {\n\tassert.deepEqual(\n\t\t[\"init\", \"prompt\", \"get_state\", \"bash\", \"get_session_stats\", \"shutdown\"].filter(\n\t\t\t(command) => !RPC_COMMAND_TYPES.includes(command as (typeof RPC_COMMAND_TYPES)[number])\n\t\t),\n\t\t[]\n\t);\n});\n\ntest(\"rpc constants include provider-agnostic thinking and event values\", () => {\n\tassert.deepEqual([...RPC_THINKING_LEVELS], [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"]);\n\tassert.deepEqual([...RPC_V2_EVENT_TYPES], [\"execution_complete\", \"cost_update\"]);\n});\n\ntest(\"extension UI methods include interactive and display update requests\", () => {\n\tassert.deepEqual(\n\t\t[\"select\", \"confirm\", \"input\", \"editor\", \"notify\", \"setStatus\", \"setWidget\", \"setTitle\", \"set_editor_text\"].filter(\n\t\t\t(method) => !RPC_EXTENSION_UI_METHODS.includes(method as (typeof RPC_EXTENSION_UI_METHODS)[number])\n\t\t),\n\t\t[]\n\t);\n});\n\ntest(\"mcp pending blocker preserves secure input payloads\", () => {\n\tconst blocker: McpPendingBlocker = {\n\t\tid: \"blocker-1\",\n\t\tmethod: \"input\",\n\t\tmessage: \"API key\",\n\t\tevent: {\n\t\t\ttype: \"extension_ui_request\",\n\t\t\tid: \"blocker-1\",\n\t\t\tmethod: \"input\",\n\t\t\ttitle: \"API key\",\n\t\t\tsecure: true,\n\t\t},\n\t};\n\n\tassert.equal(blocker.method, \"input\");\n\tassert.equal(blocker.event.method, \"input\");\n\tassert.equal(blocker.event.secure, true);\n});\n\ntest(\"workflow tool contracts expose canonical names and aliases\", () => {\n\tassert.ok(WORKFLOW_TOOL_NAMES.includes(\"gsd_task_complete\"));\n\tassert.ok(WORKFLOW_TOOL_NAMES.includes(\"gsd_complete_task\"));\n\tassert.ok(WORKFLOW_TOOL_NAMES.includes(\"gsd_task_reopen\"));\n\tassert.ok(WORKFLOW_TOOL_NAMES.includes(\"gsd_reopen_task\"));\n\tassert.ok(WORKFLOW_TOOL_NAMES.includes(\"gsd_plan_milestone\"));\n\n\tconst taskComplete = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === \"gsd_task_complete\");\n\tassert.ok(taskComplete);\n\tassert.deepEqual([...taskComplete.aliases], [\"gsd_complete_task\"]);\n\tassert.equal(taskComplete.writePolicy, \"write\");\n\tassert.equal(taskComplete.schemaId, \"workflow.task.complete\");\n\n\tconst taskReopen = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === \"gsd_task_reopen\");\n\tassert.ok(taskReopen);\n\tassert.deepEqual([...taskReopen.aliases], [\"gsd_reopen_task\"]);\n\tassert.equal(taskReopen.writePolicy, \"write\");\n\tassert.equal(taskReopen.schemaId, \"workflow.task.reopen\");\n});\n"]}
|
|
@@ -119,6 +119,27 @@ export declare const WORKFLOW_TOOL_CONTRACTS: readonly [{
|
|
|
119
119
|
readonly executorId: "executeTaskComplete";
|
|
120
120
|
readonly writePolicy: "write";
|
|
121
121
|
readonly auditEvent: "workflow.task.complete";
|
|
122
|
+
}, {
|
|
123
|
+
readonly canonicalName: "gsd_task_reopen";
|
|
124
|
+
readonly aliases: readonly ["gsd_reopen_task"];
|
|
125
|
+
readonly schemaId: "workflow.task.reopen";
|
|
126
|
+
readonly executorId: "executeTaskReopen";
|
|
127
|
+
readonly writePolicy: "write";
|
|
128
|
+
readonly auditEvent: "workflow.task.reopen";
|
|
129
|
+
}, {
|
|
130
|
+
readonly canonicalName: "gsd_slice_reopen";
|
|
131
|
+
readonly aliases: readonly ["gsd_reopen_slice"];
|
|
132
|
+
readonly schemaId: "workflow.slice.reopen";
|
|
133
|
+
readonly executorId: "executeSliceReopen";
|
|
134
|
+
readonly writePolicy: "write";
|
|
135
|
+
readonly auditEvent: "workflow.slice.reopen";
|
|
136
|
+
}, {
|
|
137
|
+
readonly canonicalName: "gsd_milestone_reopen";
|
|
138
|
+
readonly aliases: readonly ["gsd_reopen_milestone"];
|
|
139
|
+
readonly schemaId: "workflow.milestone.reopen";
|
|
140
|
+
readonly executorId: "executeMilestoneReopen";
|
|
141
|
+
readonly writePolicy: "write";
|
|
142
|
+
readonly auditEvent: "workflow.milestone.reopen";
|
|
122
143
|
}, {
|
|
123
144
|
readonly canonicalName: "gsd_milestone_status";
|
|
124
145
|
readonly aliases: readonly [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyNwB,CAAC;AAE7D,eAAO,MAAM,mBAAmB,EAG1B,SAAS,MAAM,EAAE,CAAC"}
|
|
@@ -129,6 +129,30 @@ export const WORKFLOW_TOOL_CONTRACTS = [
|
|
|
129
129
|
writePolicy: "write",
|
|
130
130
|
auditEvent: "workflow.task.complete",
|
|
131
131
|
},
|
|
132
|
+
{
|
|
133
|
+
canonicalName: "gsd_task_reopen",
|
|
134
|
+
aliases: ["gsd_reopen_task"],
|
|
135
|
+
schemaId: "workflow.task.reopen",
|
|
136
|
+
executorId: "executeTaskReopen",
|
|
137
|
+
writePolicy: "write",
|
|
138
|
+
auditEvent: "workflow.task.reopen",
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
canonicalName: "gsd_slice_reopen",
|
|
142
|
+
aliases: ["gsd_reopen_slice"],
|
|
143
|
+
schemaId: "workflow.slice.reopen",
|
|
144
|
+
executorId: "executeSliceReopen",
|
|
145
|
+
writePolicy: "write",
|
|
146
|
+
auditEvent: "workflow.slice.reopen",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
canonicalName: "gsd_milestone_reopen",
|
|
150
|
+
aliases: ["gsd_reopen_milestone"],
|
|
151
|
+
schemaId: "workflow.milestone.reopen",
|
|
152
|
+
executorId: "executeMilestoneReopen",
|
|
153
|
+
writePolicy: "write",
|
|
154
|
+
auditEvent: "workflow.milestone.reopen",
|
|
155
|
+
},
|
|
132
156
|
{
|
|
133
157
|
canonicalName: "gsd_milestone_status",
|
|
134
158
|
aliases: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Canonical workflow MCP tool metadata shared across package boundaries.\n\nexport type WorkflowToolWritePolicy = \"read\" | \"write\";\n\nexport interface WorkflowToolContractMetadata {\n\tcanonicalName: string;\n\taliases: readonly string[];\n\tschemaId: string;\n\texecutorId: string;\n\twritePolicy: WorkflowToolWritePolicy;\n\tauditEvent: string;\n}\n\nexport const WORKFLOW_TOOL_CONTRACTS = [\n\t{\n\t\tcanonicalName: \"gsd_decision_save\",\n\t\taliases: [\"gsd_save_decision\"],\n\t\tschemaId: \"workflow.decision.save\",\n\t\texecutorId: \"executeDecisionSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.decision.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_update\",\n\t\taliases: [\"gsd_update_requirement\"],\n\t\tschemaId: \"workflow.requirement.update\",\n\t\texecutorId: \"executeRequirementUpdate\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.update\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_save\",\n\t\taliases: [\"gsd_save_requirement\"],\n\t\tschemaId: \"workflow.requirement.save\",\n\t\texecutorId: \"executeRequirementSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_generate_id\",\n\t\taliases: [\"gsd_generate_milestone_id\"],\n\t\tschemaId: \"workflow.milestone.generate_id\",\n\t\texecutorId: \"executeMilestoneGenerateId\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.generate_id\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_milestone\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.plan\",\n\t\texecutorId: \"executePlanMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.plan\",\n\t\texecutorId: \"executePlanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_task\",\n\t\taliases: [\"gsd_task_plan\"],\n\t\tschemaId: \"workflow.task.plan\",\n\t\texecutorId: \"executePlanTask\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_replan_slice\",\n\t\taliases: [\"gsd_slice_replan\"],\n\t\tschemaId: \"workflow.slice.replan\",\n\t\texecutorId: \"executeReplanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.replan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_complete\",\n\t\taliases: [\"gsd_complete_slice\"],\n\t\tschemaId: \"workflow.slice.complete\",\n\t\texecutorId: \"executeSliceComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_skip_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.skip\",\n\t\texecutorId: \"executeSkipSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.skip\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_complete_milestone\",\n\t\taliases: [\"gsd_milestone_complete\"],\n\t\tschemaId: \"workflow.milestone.complete\",\n\t\texecutorId: \"executeCompleteMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_validate_milestone\",\n\t\taliases: [\"gsd_milestone_validate\"],\n\t\tschemaId: \"workflow.milestone.validate\",\n\t\texecutorId: \"executeValidateMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.validate\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_reassess_roadmap\",\n\t\taliases: [\"gsd_roadmap_reassess\"],\n\t\tschemaId: \"workflow.roadmap.reassess\",\n\t\texecutorId: \"executeReassessRoadmap\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.roadmap.reassess\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_save_gate_result\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.gate.save_result\",\n\t\texecutorId: \"executeSaveGateResult\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.gate.save_result\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_summary_save\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.summary.save\",\n\t\texecutorId: \"executeSummarySave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.summary.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_complete\",\n\t\taliases: [\"gsd_complete_task\"],\n\t\tschemaId: \"workflow.task.complete\",\n\t\texecutorId: \"executeTaskComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_status\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.status\",\n\t\texecutorId: \"executeMilestoneStatus\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.status\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_journal_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.journal.query\",\n\t\texecutorId: \"executeJournalQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.journal.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.run\",\n\t\texecutorId: \"executeGsdExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.exec.run\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec_search\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.search\",\n\t\texecutorId: \"executeGsdExecSearch\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.exec.search\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_resume\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.resume\",\n\t\texecutorId: \"executeGsdResume\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.resume\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_capture_thought\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.capture_thought\",\n\t\texecutorId: \"executeCaptureThought\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.memory.capture_thought\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.query\",\n\t\texecutorId: \"executeMemoryQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_graph\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.graph\",\n\t\texecutorId: \"executeMemoryGraph\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.graph\",\n\t},\n] as const satisfies readonly WorkflowToolContractMetadata[];\n\nexport const WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap((tool) => [\n\ttool.canonicalName,\n\t...tool.aliases,\n]) as readonly string[];\n"]}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Canonical workflow MCP tool metadata shared across package boundaries.\n\nexport type WorkflowToolWritePolicy = \"read\" | \"write\";\n\nexport interface WorkflowToolContractMetadata {\n\tcanonicalName: string;\n\taliases: readonly string[];\n\tschemaId: string;\n\texecutorId: string;\n\twritePolicy: WorkflowToolWritePolicy;\n\tauditEvent: string;\n}\n\nexport const WORKFLOW_TOOL_CONTRACTS = [\n\t{\n\t\tcanonicalName: \"gsd_decision_save\",\n\t\taliases: [\"gsd_save_decision\"],\n\t\tschemaId: \"workflow.decision.save\",\n\t\texecutorId: \"executeDecisionSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.decision.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_update\",\n\t\taliases: [\"gsd_update_requirement\"],\n\t\tschemaId: \"workflow.requirement.update\",\n\t\texecutorId: \"executeRequirementUpdate\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.update\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_save\",\n\t\taliases: [\"gsd_save_requirement\"],\n\t\tschemaId: \"workflow.requirement.save\",\n\t\texecutorId: \"executeRequirementSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_generate_id\",\n\t\taliases: [\"gsd_generate_milestone_id\"],\n\t\tschemaId: \"workflow.milestone.generate_id\",\n\t\texecutorId: \"executeMilestoneGenerateId\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.generate_id\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_milestone\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.plan\",\n\t\texecutorId: \"executePlanMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.plan\",\n\t\texecutorId: \"executePlanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_task\",\n\t\taliases: [\"gsd_task_plan\"],\n\t\tschemaId: \"workflow.task.plan\",\n\t\texecutorId: \"executePlanTask\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_replan_slice\",\n\t\taliases: [\"gsd_slice_replan\"],\n\t\tschemaId: \"workflow.slice.replan\",\n\t\texecutorId: \"executeReplanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.replan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_complete\",\n\t\taliases: [\"gsd_complete_slice\"],\n\t\tschemaId: \"workflow.slice.complete\",\n\t\texecutorId: \"executeSliceComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_skip_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.skip\",\n\t\texecutorId: \"executeSkipSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.skip\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_complete_milestone\",\n\t\taliases: [\"gsd_milestone_complete\"],\n\t\tschemaId: \"workflow.milestone.complete\",\n\t\texecutorId: \"executeCompleteMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_validate_milestone\",\n\t\taliases: [\"gsd_milestone_validate\"],\n\t\tschemaId: \"workflow.milestone.validate\",\n\t\texecutorId: \"executeValidateMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.validate\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_reassess_roadmap\",\n\t\taliases: [\"gsd_roadmap_reassess\"],\n\t\tschemaId: \"workflow.roadmap.reassess\",\n\t\texecutorId: \"executeReassessRoadmap\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.roadmap.reassess\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_save_gate_result\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.gate.save_result\",\n\t\texecutorId: \"executeSaveGateResult\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.gate.save_result\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_summary_save\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.summary.save\",\n\t\texecutorId: \"executeSummarySave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.summary.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_complete\",\n\t\taliases: [\"gsd_complete_task\"],\n\t\tschemaId: \"workflow.task.complete\",\n\t\texecutorId: \"executeTaskComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_reopen\",\n\t\taliases: [\"gsd_reopen_task\"],\n\t\tschemaId: \"workflow.task.reopen\",\n\t\texecutorId: \"executeTaskReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_reopen\",\n\t\taliases: [\"gsd_reopen_slice\"],\n\t\tschemaId: \"workflow.slice.reopen\",\n\t\texecutorId: \"executeSliceReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_reopen\",\n\t\taliases: [\"gsd_reopen_milestone\"],\n\t\tschemaId: \"workflow.milestone.reopen\",\n\t\texecutorId: \"executeMilestoneReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_status\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.status\",\n\t\texecutorId: \"executeMilestoneStatus\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.status\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_journal_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.journal.query\",\n\t\texecutorId: \"executeJournalQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.journal.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.run\",\n\t\texecutorId: \"executeGsdExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.exec.run\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec_search\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.search\",\n\t\texecutorId: \"executeGsdExecSearch\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.exec.search\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_resume\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.resume\",\n\t\texecutorId: \"executeGsdResume\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.resume\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_capture_thought\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.capture_thought\",\n\t\texecutorId: \"executeCaptureThought\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.memory.capture_thought\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.query\",\n\t\texecutorId: \"executeMemoryQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_graph\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.graph\",\n\t\texecutorId: \"executeMemoryGraph\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.graph\",\n\t},\n] as const satisfies readonly WorkflowToolContractMetadata[];\n\nexport const WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap((tool) => [\n\ttool.canonicalName,\n\t...tool.aliases,\n]) as readonly string[];\n"]}
|
|
@@ -62,6 +62,8 @@ test("mcp pending blocker preserves secure input payloads", () => {
|
|
|
62
62
|
test("workflow tool contracts expose canonical names and aliases", () => {
|
|
63
63
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_task_complete"));
|
|
64
64
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_complete_task"));
|
|
65
|
+
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_task_reopen"));
|
|
66
|
+
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_reopen_task"));
|
|
65
67
|
assert.ok(WORKFLOW_TOOL_NAMES.includes("gsd_plan_milestone"));
|
|
66
68
|
|
|
67
69
|
const taskComplete = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === "gsd_task_complete");
|
|
@@ -69,4 +71,10 @@ test("workflow tool contracts expose canonical names and aliases", () => {
|
|
|
69
71
|
assert.deepEqual([...taskComplete.aliases], ["gsd_complete_task"]);
|
|
70
72
|
assert.equal(taskComplete.writePolicy, "write");
|
|
71
73
|
assert.equal(taskComplete.schemaId, "workflow.task.complete");
|
|
74
|
+
|
|
75
|
+
const taskReopen = WORKFLOW_TOOL_CONTRACTS.find((tool) => tool.canonicalName === "gsd_task_reopen");
|
|
76
|
+
assert.ok(taskReopen);
|
|
77
|
+
assert.deepEqual([...taskReopen.aliases], ["gsd_reopen_task"]);
|
|
78
|
+
assert.equal(taskReopen.writePolicy, "write");
|
|
79
|
+
assert.equal(taskReopen.schemaId, "workflow.task.reopen");
|
|
72
80
|
});
|
|
@@ -141,6 +141,30 @@ export const WORKFLOW_TOOL_CONTRACTS = [
|
|
|
141
141
|
writePolicy: "write",
|
|
142
142
|
auditEvent: "workflow.task.complete",
|
|
143
143
|
},
|
|
144
|
+
{
|
|
145
|
+
canonicalName: "gsd_task_reopen",
|
|
146
|
+
aliases: ["gsd_reopen_task"],
|
|
147
|
+
schemaId: "workflow.task.reopen",
|
|
148
|
+
executorId: "executeTaskReopen",
|
|
149
|
+
writePolicy: "write",
|
|
150
|
+
auditEvent: "workflow.task.reopen",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
canonicalName: "gsd_slice_reopen",
|
|
154
|
+
aliases: ["gsd_reopen_slice"],
|
|
155
|
+
schemaId: "workflow.slice.reopen",
|
|
156
|
+
executorId: "executeSliceReopen",
|
|
157
|
+
writePolicy: "write",
|
|
158
|
+
auditEvent: "workflow.slice.reopen",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
canonicalName: "gsd_milestone_reopen",
|
|
162
|
+
aliases: ["gsd_reopen_milestone"],
|
|
163
|
+
schemaId: "workflow.milestone.reopen",
|
|
164
|
+
executorId: "executeMilestoneReopen",
|
|
165
|
+
writePolicy: "write",
|
|
166
|
+
auditEvent: "workflow.milestone.reopen",
|
|
167
|
+
},
|
|
144
168
|
{
|
|
145
169
|
canonicalName: "gsd_milestone_status",
|
|
146
170
|
aliases: [],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd-build/daemon",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.82.0",
|
|
4
4
|
"description": "GSD daemon — background process for project monitoring and Discord integration",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@anthropic-ai/sdk": "^0.52.0",
|
|
32
32
|
"@gsd-build/contracts": "^2.80.0",
|
|
33
|
-
"@gsd-build/rpc-client": "^2.
|
|
33
|
+
"@gsd-build/rpc-client": "^2.82.0",
|
|
34
34
|
"discord.js": "^14.25.1",
|
|
35
35
|
"yaml": "^2.8.0",
|
|
36
36
|
"zod": "^3.24.0"
|
|
@@ -87,21 +87,32 @@ The workflow MCP surface includes:
|
|
|
87
87
|
- `gsd_plan_slice`
|
|
88
88
|
- `gsd_plan_task`
|
|
89
89
|
- `gsd_replan_slice`
|
|
90
|
-
- `gsd_task_complete`
|
|
91
90
|
- `gsd_slice_complete`
|
|
92
91
|
- `gsd_skip_slice`
|
|
93
|
-
- `gsd_validate_milestone`
|
|
94
92
|
- `gsd_complete_milestone`
|
|
93
|
+
- `gsd_validate_milestone`
|
|
95
94
|
- `gsd_reassess_roadmap`
|
|
96
95
|
- `gsd_save_gate_result`
|
|
97
96
|
- `gsd_summary_save`
|
|
97
|
+
- `gsd_task_complete`
|
|
98
|
+
- `gsd_task_reopen`
|
|
99
|
+
- `gsd_slice_reopen`
|
|
100
|
+
- `gsd_milestone_reopen`
|
|
98
101
|
- `gsd_milestone_status`
|
|
99
102
|
- `gsd_journal_query`
|
|
103
|
+
- `gsd_exec`
|
|
104
|
+
- `gsd_exec_search`
|
|
105
|
+
- `gsd_resume`
|
|
106
|
+
- `gsd_capture_thought`
|
|
107
|
+
- `gsd_memory_query`
|
|
108
|
+
- `gsd_memory_graph`
|
|
100
109
|
|
|
101
|
-
**Aliases (kept for backwards compatibility — prefer the canonical name above):** `gsd_save_decision`, `gsd_update_requirement`, `gsd_save_requirement`, `gsd_generate_milestone_id`, `gsd_task_plan`, `gsd_slice_replan`, `gsd_complete_task`, `gsd_complete_slice`, `gsd_milestone_validate`, `gsd_milestone_complete`, `gsd_roadmap_reassess`.
|
|
110
|
+
**Aliases (kept for backwards compatibility — prefer the canonical name above):** `gsd_save_decision`, `gsd_update_requirement`, `gsd_save_requirement`, `gsd_generate_milestone_id`, `gsd_task_plan`, `gsd_slice_replan`, `gsd_complete_task`, `gsd_complete_slice`, `gsd_milestone_validate`, `gsd_milestone_complete`, `gsd_roadmap_reassess`, `gsd_reopen_task`, `gsd_reopen_slice`, `gsd_reopen_milestone`.
|
|
102
111
|
|
|
103
112
|
These tools use the same GSD workflow handlers as the native in-process tool path wherever a shared handler exists.
|
|
104
113
|
|
|
114
|
+
`gsd_decision_save` and its `gsd_save_decision` alias persist new decisions to the ADR-013 memory store, not to the legacy `decisions` table. The assigned `D###` ID is recorded in `memories.structured_fields.sourceDecisionId`, and `.gsd/DECISIONS.md` is refreshed as a projection from memory-backed decisions. The legacy table may still be read by compatibility and inspection paths during the cutover window, but it is no longer a write target.
|
|
115
|
+
|
|
105
116
|
`gsd_summary_save` computes artifact paths from the supplied IDs. `milestone_id` is required for milestone-, slice-, and task-scoped artifact types (`SUMMARY`, `RESEARCH`, `CONTEXT`, `ASSESSMENT`, `CONTEXT-DRAFT`) and should be omitted only for root-level `PROJECT`, `PROJECT-DRAFT`, `REQUIREMENTS`, and `REQUIREMENTS-DRAFT` artifacts. For final `REQUIREMENTS` saves, the tool renders content from active database requirement rows; callers must create those rows with `gsd_requirement_save` first.
|
|
106
117
|
|
|
107
118
|
### Interactive tools
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.
|
|
3
|
-
*/
|
|
4
1
|
import { z } from "zod";
|
|
5
2
|
export declare function validateProjectDir(projectDir: string, env?: NodeJS.ProcessEnv): string;
|
|
6
3
|
export declare function _parseWorkflowArgsForTest<T extends {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4TxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AA8FD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAE5B;AAqID,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE;AA2GD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,mBAA+B,CAAC;AA80BhE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAmqBrE"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Registers packaged workflow tools exposed by the GSD MCP server.
|
|
1
3
|
/**
|
|
2
4
|
* Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.
|
|
3
5
|
*/
|
|
@@ -204,6 +206,9 @@ function isWorkflowToolExecutors(value) {
|
|
|
204
206
|
"executeSaveGateResult",
|
|
205
207
|
"executeSummarySave",
|
|
206
208
|
"executeTaskComplete",
|
|
209
|
+
"executeTaskReopen",
|
|
210
|
+
"executeSliceReopen",
|
|
211
|
+
"executeMilestoneReopen",
|
|
207
212
|
];
|
|
208
213
|
return Array.isArray(record.SUPPORTED_SUMMARY_ARTIFACT_TYPES) &&
|
|
209
214
|
functionExports.every((key) => typeof record[key] === "function");
|
|
@@ -495,6 +500,21 @@ async function handleTaskComplete(projectDir, args) {
|
|
|
495
500
|
// handleReplanSlice) eliminates the recurrence risk by construction.
|
|
496
501
|
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeTaskComplete(args, projectDir)));
|
|
497
502
|
}
|
|
503
|
+
async function handleTaskReopen(projectDir, args) {
|
|
504
|
+
await enforceWorkflowWriteGate("gsd_task_reopen", projectDir, args.milestoneId);
|
|
505
|
+
const { executeTaskReopen } = await getWorkflowToolExecutors();
|
|
506
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeTaskReopen(args, projectDir)));
|
|
507
|
+
}
|
|
508
|
+
async function handleSliceReopen(projectDir, args) {
|
|
509
|
+
await enforceWorkflowWriteGate("gsd_slice_reopen", projectDir, args.milestoneId);
|
|
510
|
+
const { executeSliceReopen } = await getWorkflowToolExecutors();
|
|
511
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeSliceReopen(args, projectDir)));
|
|
512
|
+
}
|
|
513
|
+
async function handleMilestoneReopen(projectDir, args) {
|
|
514
|
+
await enforceWorkflowWriteGate("gsd_milestone_reopen", projectDir, args.milestoneId);
|
|
515
|
+
const { executeMilestoneReopen } = await getWorkflowToolExecutors();
|
|
516
|
+
return adaptExecutorResult(await runSerializedWorkflowOperation(() => executeMilestoneReopen(args, projectDir)));
|
|
517
|
+
}
|
|
498
518
|
async function handleSliceComplete(projectDir, args) {
|
|
499
519
|
await enforceWorkflowWriteGate("gsd_slice_complete", projectDir, args.milestoneId);
|
|
500
520
|
const { executeSliceComplete } = await getWorkflowToolExecutors();
|
|
@@ -964,6 +984,33 @@ const taskCompleteParams = {
|
|
|
964
984
|
])).optional().describe("Verification evidence entries"),
|
|
965
985
|
};
|
|
966
986
|
const taskCompleteSchema = z.object(taskCompleteParams);
|
|
987
|
+
const taskReopenParams = {
|
|
988
|
+
projectDir: projectDirParam,
|
|
989
|
+
taskId: nonEmptyString("taskId").describe("Task ID (e.g. T01)"),
|
|
990
|
+
sliceId: nonEmptyString("sliceId").describe("Slice ID (e.g. S01)"),
|
|
991
|
+
milestoneId: nonEmptyString("milestoneId").describe("Milestone ID (e.g. M001)"),
|
|
992
|
+
reason: z.string().optional().describe("Why the task is being reopened"),
|
|
993
|
+
actorName: z.string().optional().describe("Caller-provided actor identity for audit trail"),
|
|
994
|
+
triggerReason: z.string().optional().describe("Caller-provided reason this action was triggered"),
|
|
995
|
+
};
|
|
996
|
+
const taskReopenSchema = z.object(taskReopenParams);
|
|
997
|
+
const sliceReopenParams = {
|
|
998
|
+
projectDir: projectDirParam,
|
|
999
|
+
sliceId: nonEmptyString("sliceId").describe("Slice ID (e.g. S01)"),
|
|
1000
|
+
milestoneId: nonEmptyString("milestoneId").describe("Milestone ID (e.g. M001)"),
|
|
1001
|
+
reason: z.string().optional().describe("Why the slice is being reopened"),
|
|
1002
|
+
actorName: z.string().optional().describe("Caller-provided actor identity for audit trail"),
|
|
1003
|
+
triggerReason: z.string().optional().describe("Caller-provided reason this action was triggered"),
|
|
1004
|
+
};
|
|
1005
|
+
const sliceReopenSchema = z.object(sliceReopenParams);
|
|
1006
|
+
const milestoneReopenParams = {
|
|
1007
|
+
projectDir: projectDirParam,
|
|
1008
|
+
milestoneId: nonEmptyString("milestoneId").describe("Milestone ID (e.g. M001)"),
|
|
1009
|
+
reason: z.string().optional().describe("Why the milestone is being reopened"),
|
|
1010
|
+
actorName: z.string().optional().describe("Caller-provided actor identity for audit trail"),
|
|
1011
|
+
triggerReason: z.string().optional().describe("Caller-provided reason this action was triggered"),
|
|
1012
|
+
};
|
|
1013
|
+
const milestoneReopenSchema = z.object(milestoneReopenParams);
|
|
967
1014
|
const milestoneStatusParams = {
|
|
968
1015
|
projectDir: projectDirParam,
|
|
969
1016
|
milestoneId: z.string().describe("Milestone ID to query (e.g. M001)"),
|
|
@@ -1250,6 +1297,39 @@ export function registerWorkflowTools(realServer) {
|
|
|
1250
1297
|
const { projectDir, ...taskArgs } = parsed;
|
|
1251
1298
|
return handleTaskComplete(projectDir, taskArgs);
|
|
1252
1299
|
});
|
|
1300
|
+
server.tool("gsd_task_reopen", "Reset a completed task back to pending so it can be re-done.", taskReopenParams, async (args) => {
|
|
1301
|
+
const parsed = parseWorkflowArgs(taskReopenSchema, args);
|
|
1302
|
+
const { projectDir, ...taskArgs } = parsed;
|
|
1303
|
+
return handleTaskReopen(projectDir, taskArgs);
|
|
1304
|
+
});
|
|
1305
|
+
server.tool("gsd_reopen_task", "Alias for gsd_task_reopen. Reset a completed task back to pending so it can be re-done.", taskReopenParams, async (args) => {
|
|
1306
|
+
logAliasUsage("gsd_reopen_task", "gsd_task_reopen");
|
|
1307
|
+
const parsed = parseWorkflowArgs(taskReopenSchema, args);
|
|
1308
|
+
const { projectDir, ...taskArgs } = parsed;
|
|
1309
|
+
return handleTaskReopen(projectDir, taskArgs);
|
|
1310
|
+
});
|
|
1311
|
+
server.tool("gsd_slice_reopen", "Reset a completed slice back to in_progress and reset its tasks to pending.", sliceReopenParams, async (args) => {
|
|
1312
|
+
const parsed = parseWorkflowArgs(sliceReopenSchema, args);
|
|
1313
|
+
const { projectDir, ...sliceArgs } = parsed;
|
|
1314
|
+
return handleSliceReopen(projectDir, sliceArgs);
|
|
1315
|
+
});
|
|
1316
|
+
server.tool("gsd_reopen_slice", "Alias for gsd_slice_reopen. Reset a completed slice back to in_progress and reset its tasks to pending.", sliceReopenParams, async (args) => {
|
|
1317
|
+
logAliasUsage("gsd_reopen_slice", "gsd_slice_reopen");
|
|
1318
|
+
const parsed = parseWorkflowArgs(sliceReopenSchema, args);
|
|
1319
|
+
const { projectDir, ...sliceArgs } = parsed;
|
|
1320
|
+
return handleSliceReopen(projectDir, sliceArgs);
|
|
1321
|
+
});
|
|
1322
|
+
server.tool("gsd_milestone_reopen", "Reset a closed milestone back to active and reset its slices/tasks for rework.", milestoneReopenParams, async (args) => {
|
|
1323
|
+
const parsed = parseWorkflowArgs(milestoneReopenSchema, args);
|
|
1324
|
+
const { projectDir, ...milestoneArgs } = parsed;
|
|
1325
|
+
return handleMilestoneReopen(projectDir, milestoneArgs);
|
|
1326
|
+
});
|
|
1327
|
+
server.tool("gsd_reopen_milestone", "Alias for gsd_milestone_reopen. Reset a closed milestone back to active and reset its slices/tasks for rework.", milestoneReopenParams, async (args) => {
|
|
1328
|
+
logAliasUsage("gsd_reopen_milestone", "gsd_milestone_reopen");
|
|
1329
|
+
const parsed = parseWorkflowArgs(milestoneReopenSchema, args);
|
|
1330
|
+
const { projectDir, ...milestoneArgs } = parsed;
|
|
1331
|
+
return handleMilestoneReopen(projectDir, milestoneArgs);
|
|
1332
|
+
});
|
|
1253
1333
|
server.tool("gsd_milestone_status", "Read the current status of a milestone and all its slices from the GSD database.", milestoneStatusParams, async (args) => {
|
|
1254
1334
|
// gsd_milestone_status is a read-only query. In-process (query-tools.ts)
|
|
1255
1335
|
// does not apply the write-gate; MCP must match to avoid blocking reads
|