gsd-pi 2.82.0 → 3.0.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 +51 -32
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +10 -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/claude-code-cli/partial-builder.js +2 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +1 -1
- package/dist/resources/extensions/cmux/index.js +5 -0
- package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
- package/dist/resources/extensions/gsd/auto/loop.js +19 -6
- package/dist/resources/extensions/gsd/auto/orchestrator.js +124 -6
- package/dist/resources/extensions/gsd/auto/phases.js +90 -31
- package/dist/resources/extensions/gsd/auto/session.js +4 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +20 -19
- package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +246 -133
- package/dist/resources/extensions/gsd/auto-prompts.js +13 -5
- package/dist/resources/extensions/gsd/auto-recovery.js +71 -14
- package/dist/resources/extensions/gsd/auto-start.js +87 -14
- package/dist/resources/extensions/gsd/auto-verification.js +45 -26
- package/dist/resources/extensions/gsd/auto-worktree.js +176 -10
- package/dist/resources/extensions/gsd/auto.js +178 -63
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +31 -7
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -9
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +9 -2
- package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +17 -3
- package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +5 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +15 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +7 -2
- package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
- package/dist/resources/extensions/gsd/context-store.js +112 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +43 -5
- package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
- package/dist/resources/extensions/gsd/db-writer.js +150 -84
- package/dist/resources/extensions/gsd/dispatch-guard.js +2 -2
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +87 -7
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
- package/dist/resources/extensions/gsd/doctor.js +2 -28
- package/dist/resources/extensions/gsd/export-html.js +27 -425
- package/dist/resources/extensions/gsd/forensics.js +3 -3
- package/dist/resources/extensions/gsd/git-service.js +45 -3
- package/dist/resources/extensions/gsd/gsd-db.js +21 -6
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
- package/dist/resources/extensions/gsd/guided-flow.js +101 -116
- package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
- 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 +16 -9
- 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/parsers.js +10 -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/migration-auto-check.js +12 -17
- package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
- package/dist/resources/extensions/gsd/native-git-bridge.js +48 -12
- package/dist/resources/extensions/gsd/paths.js +4 -0
- package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
- package/dist/resources/extensions/gsd/post-execution-checks.js +73 -2
- package/dist/resources/extensions/gsd/pre-execution-checks.js +28 -1
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
- package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
- package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- 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/queue-reorder-ui.js +30 -13
- package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
- package/dist/resources/extensions/gsd/state.js +3 -3
- package/dist/resources/extensions/gsd/status-guards.js +11 -0
- package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/dist/resources/extensions/gsd/templates/plan.md +9 -5
- package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
- package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
- package/dist/resources/extensions/gsd/tools/plan-slice.js +87 -14
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +32 -10
- package/dist/resources/extensions/gsd/validation.js +23 -1
- package/dist/resources/extensions/gsd/verification-gate.js +68 -7
- package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +54 -10
- package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
- package/dist/resources/extensions/shared/html-shell.js +388 -0
- package/dist/resources/extensions/subagent/index.js +448 -78
- package/dist/resources/extensions/subagent/launch.js +77 -0
- package/dist/resources/extensions/subagent/run-store.js +148 -0
- package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
- package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
- package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/dist/resources/extensions/visual-brief/index.js +5 -0
- package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
- package/dist/resources/extensions/visual-brief/prompts.js +140 -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 +9 -9
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +5 -5
- 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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
- 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 +4 -5
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -7
- 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 +4 -7
- 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 +4 -5
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- 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/2973.33f26573894b6153.js +2 -0
- package/dist/web/standalone/.next/static/chunks/8359.65b24fac92188a6b.js +10 -0
- package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/layout-b23b3f6858dc6dc8.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-855d616060cb6e59.js} +1 -1
- package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
- package/package.json +6 -5
- 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 +23 -1
- 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/native/tsconfig.json +2 -1
- package/packages/native/tsconfig.tsbuildinfo +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/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +5 -6
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
- package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
- 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/google-gemini-cli.test.ts +49 -0
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
- package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
- package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
- package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
- package/packages/pi-ai/src/providers/simple-options.ts +5 -6
- 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/agent-session-thinking-level.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +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/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +71 -97
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- 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 +24 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.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/agent-session-thinking-level.test.ts +79 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
- package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -102
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
- 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__/terminal.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
- package/packages/pi-tui/dist/terminal.d.ts +2 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +12 -0
- package/packages/pi-tui/dist/terminal.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__/terminal.test.ts +121 -0
- package/packages/pi-tui/src/terminal.ts +11 -0
- 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/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +10 -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/claude-code-cli/partial-builder.ts +2 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +1 -1
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +9 -0
- package/src/resources/extensions/cmux/index.ts +6 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +59 -16
- package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
- package/src/resources/extensions/gsd/auto/loop.ts +22 -6
- package/src/resources/extensions/gsd/auto/orchestrator.ts +129 -6
- package/src/resources/extensions/gsd/auto/phases.ts +104 -38
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +21 -19
- package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +279 -144
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -5
- package/src/resources/extensions/gsd/auto-recovery.ts +74 -11
- package/src/resources/extensions/gsd/auto-start.ts +94 -12
- package/src/resources/extensions/gsd/auto-verification.ts +58 -36
- package/src/resources/extensions/gsd/auto-worktree.ts +193 -10
- package/src/resources/extensions/gsd/auto.ts +187 -61
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +42 -7
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -9
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +10 -2
- package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +20 -4
- package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
- package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +42 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -0
- package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +8 -3
- package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
- package/src/resources/extensions/gsd/context-store.ts +120 -1
- package/src/resources/extensions/gsd/crash-recovery.ts +44 -4
- package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
- package/src/resources/extensions/gsd/db-writer.ts +167 -84
- package/src/resources/extensions/gsd/dispatch-guard.ts +2 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +89 -7
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
- package/src/resources/extensions/gsd/doctor-types.ts +3 -0
- package/src/resources/extensions/gsd/doctor.ts +2 -27
- package/src/resources/extensions/gsd/export-html.ts +27 -427
- package/src/resources/extensions/gsd/forensics.ts +3 -3
- package/src/resources/extensions/gsd/git-service.ts +51 -4
- package/src/resources/extensions/gsd/gsd-db.ts +21 -6
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
- package/src/resources/extensions/gsd/guided-flow.ts +134 -133
- package/src/resources/extensions/gsd/guided-unit-context.ts +30 -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 +16 -9
- 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/parsers.ts +11 -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/migration-auto-check.ts +15 -23
- package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
- package/src/resources/extensions/gsd/native-git-bridge.ts +54 -12
- package/src/resources/extensions/gsd/paths.ts +5 -0
- package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
- package/src/resources/extensions/gsd/post-execution-checks.ts +87 -2
- package/src/resources/extensions/gsd/pre-execution-checks.ts +32 -1
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
- package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
- package/src/resources/extensions/gsd/prompts/queue.md +4 -4
- package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- 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/queue-reorder-ui.ts +31 -13
- package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
- package/src/resources/extensions/gsd/state.ts +3 -3
- package/src/resources/extensions/gsd/status-guards.ts +13 -0
- package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/src/resources/extensions/gsd/templates/plan.md +9 -5
- package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +131 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +487 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
- package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +91 -6
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
- package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +86 -2
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
- 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 +59 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
- package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +112 -1
- package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +46 -0
- 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/memory-consolidation-scanner.test.ts +316 -0
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +251 -2
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
- package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -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 +10 -0
- package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +53 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +103 -7
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +110 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +54 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
- package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
- package/src/resources/extensions/gsd/tools/plan-slice.ts +97 -12
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
- package/src/resources/extensions/gsd/types.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +47 -11
- package/src/resources/extensions/gsd/validation.ts +23 -1
- package/src/resources/extensions/gsd/verification-gate.ts +78 -6
- package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +61 -10
- package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
- package/src/resources/extensions/shared/html-shell.ts +412 -0
- package/src/resources/extensions/subagent/index.ts +567 -103
- package/src/resources/extensions/subagent/launch.ts +131 -0
- package/src/resources/extensions/subagent/run-store.ts +218 -0
- package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
- package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
- package/src/resources/extensions/ttsr/ttsr-manager.ts +5 -1
- package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
- package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/src/resources/extensions/visual-brief/index.ts +8 -0
- package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
- package/src/resources/extensions/visual-brief/prompts.ts +183 -0
- package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
- package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/layout-9ecfd95f343793f0.js +0 -1
- package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
- package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
- package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
- /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → qoMxZh-xuwuvpFW0x0k01}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → qoMxZh-xuwuvpFW0x0k01}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// GSD-2 + Subagent launch contract and child process safety helpers.
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { SessionManager } from "@gsd/pi-coding-agent";
|
|
5
|
+
export const SUBAGENT_CHILD_ENV_VAR = "GSD_SUBAGENT_CHILD";
|
|
6
|
+
export const SUBAGENT_CHILD_ENV_VALUE = "1";
|
|
7
|
+
export function isSubagentChildProcess(env = process.env) {
|
|
8
|
+
return env[SUBAGENT_CHILD_ENV_VAR] === SUBAGENT_CHILD_ENV_VALUE;
|
|
9
|
+
}
|
|
10
|
+
export function buildSubagentProcessEnv(env = process.env) {
|
|
11
|
+
return {
|
|
12
|
+
...env,
|
|
13
|
+
[SUBAGENT_CHILD_ENV_VAR]: SUBAGENT_CHILD_ENV_VALUE,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function buildShellEnvAssignments(env = process.env) {
|
|
17
|
+
const value = env[SUBAGENT_CHILD_ENV_VAR];
|
|
18
|
+
return value ? [`${SUBAGENT_CHILD_ENV_VAR}=${JSON.stringify(value)}`] : [];
|
|
19
|
+
}
|
|
20
|
+
export function buildSubagentProcessArgs(agent, task, tmpPromptPath, modelOverride, session = { mode: "fresh" }) {
|
|
21
|
+
const args = ["--mode", "json", "-p"];
|
|
22
|
+
if (session.mode === "fork") {
|
|
23
|
+
args.push("--session", session.sessionFile);
|
|
24
|
+
if (session.sessionDir)
|
|
25
|
+
args.push("--session-dir", session.sessionDir);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
args.push("--no-session");
|
|
29
|
+
}
|
|
30
|
+
const effectiveModel = modelOverride ?? agent.model;
|
|
31
|
+
if (effectiveModel)
|
|
32
|
+
args.push("--model", effectiveModel);
|
|
33
|
+
if (agent.tools && agent.tools.length > 0)
|
|
34
|
+
args.push("--tools", agent.tools.join(","));
|
|
35
|
+
if (tmpPromptPath)
|
|
36
|
+
args.push("--append-system-prompt", tmpPromptPath);
|
|
37
|
+
args.push(`Task: ${task}`);
|
|
38
|
+
return args;
|
|
39
|
+
}
|
|
40
|
+
export function resolveSubagentSessionArgs(contextMode = "fresh", parentSessionManager) {
|
|
41
|
+
if (contextMode === "fresh")
|
|
42
|
+
return { mode: "fresh" };
|
|
43
|
+
if (!parentSessionManager) {
|
|
44
|
+
throw new Error("Forked subagent context requires a parent session manager.");
|
|
45
|
+
}
|
|
46
|
+
const parentSessionFile = parentSessionManager.getSessionFile();
|
|
47
|
+
if (!parentSessionFile) {
|
|
48
|
+
throw new Error("Forked subagent context requires a persisted parent session file; current session is in-memory.");
|
|
49
|
+
}
|
|
50
|
+
if (!fs.existsSync(parentSessionFile)) {
|
|
51
|
+
throw new Error(`Forked subagent context could not read parent session file: ${parentSessionFile}`);
|
|
52
|
+
}
|
|
53
|
+
const leafId = parentSessionManager.getLeafId();
|
|
54
|
+
if (!leafId) {
|
|
55
|
+
throw new Error("Forked subagent context requires a parent session leaf to branch from.");
|
|
56
|
+
}
|
|
57
|
+
const sessionDir = parentSessionManager.getSessionDir?.();
|
|
58
|
+
const parentSession = SessionManager.open(parentSessionFile, sessionDir);
|
|
59
|
+
const childSessionFile = parentSession.createBranchedSession(leafId);
|
|
60
|
+
if (!childSessionFile) {
|
|
61
|
+
throw new Error("Forked subagent context could not create a branched child session.");
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
mode: "fork",
|
|
65
|
+
sessionFile: childSessionFile,
|
|
66
|
+
...(sessionDir ? { sessionDir: path.resolve(sessionDir) } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function createSubagentLaunchPlan(input) {
|
|
70
|
+
const session = input.session ?? resolveSubagentSessionArgs(input.contextMode ?? "fresh", input.parentSessionManager);
|
|
71
|
+
return {
|
|
72
|
+
args: buildSubagentProcessArgs(input.agent, input.task, input.tmpPromptPath, input.modelOverride, session),
|
|
73
|
+
env: buildSubagentProcessEnv(),
|
|
74
|
+
cwd: input.cwd ?? input.defaultCwd,
|
|
75
|
+
session,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// GSD-2 + Durable subagent run status, tracking names, and result artifact store.
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { randomInt } from "node:crypto";
|
|
5
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
6
|
+
export function defaultSubagentRunStoreDir() {
|
|
7
|
+
return path.join(getAgentDir(), "subagent-runs");
|
|
8
|
+
}
|
|
9
|
+
const TRACKING_ADJECTIVES = [
|
|
10
|
+
"amber",
|
|
11
|
+
"bright",
|
|
12
|
+
"calm",
|
|
13
|
+
"clear",
|
|
14
|
+
"crisp",
|
|
15
|
+
"daring",
|
|
16
|
+
"keen",
|
|
17
|
+
"lucky",
|
|
18
|
+
"quiet",
|
|
19
|
+
"steady",
|
|
20
|
+
"swift",
|
|
21
|
+
"vivid",
|
|
22
|
+
];
|
|
23
|
+
const TRACKING_NOUNS = [
|
|
24
|
+
"anchor",
|
|
25
|
+
"atlas",
|
|
26
|
+
"beacon",
|
|
27
|
+
"canvas",
|
|
28
|
+
"compass",
|
|
29
|
+
"forge",
|
|
30
|
+
"harbor",
|
|
31
|
+
"lantern",
|
|
32
|
+
"ledger",
|
|
33
|
+
"mesa",
|
|
34
|
+
"quartz",
|
|
35
|
+
"ridge",
|
|
36
|
+
"signal",
|
|
37
|
+
"summit",
|
|
38
|
+
"vector",
|
|
39
|
+
"vista",
|
|
40
|
+
];
|
|
41
|
+
export function createSubagentTrackingName(existingNames = new Set()) {
|
|
42
|
+
const maxCombinations = TRACKING_ADJECTIVES.length * TRACKING_NOUNS.length;
|
|
43
|
+
for (let attempt = 0; attempt < maxCombinations * 2; attempt++) {
|
|
44
|
+
const adjective = TRACKING_ADJECTIVES[randomInt(TRACKING_ADJECTIVES.length)];
|
|
45
|
+
const noun = TRACKING_NOUNS[randomInt(TRACKING_NOUNS.length)];
|
|
46
|
+
const name = `${adjective}-${noun}`;
|
|
47
|
+
if (!existingNames.has(name))
|
|
48
|
+
return name;
|
|
49
|
+
}
|
|
50
|
+
let suffix = existingNames.size + 1;
|
|
51
|
+
while (existingNames.has(`agent-${suffix}`))
|
|
52
|
+
suffix++;
|
|
53
|
+
return `agent-${suffix}`;
|
|
54
|
+
}
|
|
55
|
+
export class SubagentRunStore {
|
|
56
|
+
baseDir;
|
|
57
|
+
constructor(baseDir = defaultSubagentRunStoreDir()) {
|
|
58
|
+
this.baseDir = baseDir;
|
|
59
|
+
}
|
|
60
|
+
getBaseDir() {
|
|
61
|
+
return this.baseDir;
|
|
62
|
+
}
|
|
63
|
+
create(record) {
|
|
64
|
+
this.write(record);
|
|
65
|
+
return record;
|
|
66
|
+
}
|
|
67
|
+
get(runId) {
|
|
68
|
+
const filePath = this.pathFor(runId);
|
|
69
|
+
if (!fs.existsSync(filePath))
|
|
70
|
+
return null;
|
|
71
|
+
try {
|
|
72
|
+
const parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
73
|
+
if (!parsed ||
|
|
74
|
+
typeof parsed !== "object" ||
|
|
75
|
+
typeof parsed.runId !== "string" ||
|
|
76
|
+
typeof parsed.updatedAt !== "string" ||
|
|
77
|
+
!Array.isArray(parsed.children)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return parsed;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
update(runId, updater) {
|
|
87
|
+
const current = this.get(runId);
|
|
88
|
+
if (!current)
|
|
89
|
+
throw new Error(`Subagent run not found: ${runId}`);
|
|
90
|
+
const next = updater({
|
|
91
|
+
...current,
|
|
92
|
+
children: current.children.map((child) => ({ ...child })),
|
|
93
|
+
});
|
|
94
|
+
next.updatedAt = new Date().toISOString();
|
|
95
|
+
this.write(next);
|
|
96
|
+
return next;
|
|
97
|
+
}
|
|
98
|
+
list() {
|
|
99
|
+
if (!fs.existsSync(this.baseDir))
|
|
100
|
+
return [];
|
|
101
|
+
return fs.readdirSync(this.baseDir)
|
|
102
|
+
.filter((name) => name.endsWith(".json"))
|
|
103
|
+
.map((name) => this.get(path.basename(name, ".json")))
|
|
104
|
+
.filter((record) => record !== null)
|
|
105
|
+
.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
106
|
+
}
|
|
107
|
+
pathFor(runId) {
|
|
108
|
+
const safeRunId = runId.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
109
|
+
return path.join(this.baseDir, `${safeRunId}.json`);
|
|
110
|
+
}
|
|
111
|
+
write(record) {
|
|
112
|
+
fs.mkdirSync(this.baseDir, { recursive: true });
|
|
113
|
+
const filePath = this.pathFor(record.runId);
|
|
114
|
+
const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
|
|
115
|
+
fs.writeFileSync(tmpPath, `${JSON.stringify(record, null, 2)}\n`, "utf-8");
|
|
116
|
+
fs.renameSync(tmpPath, filePath);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function createInitialRunRecord(input) {
|
|
120
|
+
const now = input.now ?? new Date().toISOString();
|
|
121
|
+
return {
|
|
122
|
+
schemaVersion: 1,
|
|
123
|
+
runId: input.runId,
|
|
124
|
+
mode: input.mode,
|
|
125
|
+
contextMode: input.contextMode,
|
|
126
|
+
status: "running",
|
|
127
|
+
cwd: input.cwd,
|
|
128
|
+
startedAt: now,
|
|
129
|
+
updatedAt: now,
|
|
130
|
+
children: input.children.map((child, index) => ({
|
|
131
|
+
index,
|
|
132
|
+
agent: child.agent,
|
|
133
|
+
trackingName: child.trackingName,
|
|
134
|
+
task: child.task,
|
|
135
|
+
cwd: child.cwd,
|
|
136
|
+
status: "queued",
|
|
137
|
+
})),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
export function deriveRunStatus(children) {
|
|
141
|
+
if (children.some((child) => child.status === "interrupted"))
|
|
142
|
+
return "interrupted";
|
|
143
|
+
if (children.some((child) => child.status === "failed"))
|
|
144
|
+
return "failed";
|
|
145
|
+
if (children.length > 0 && children.every((child) => child.status === "succeeded"))
|
|
146
|
+
return "succeeded";
|
|
147
|
+
return "running";
|
|
148
|
+
}
|
|
@@ -43,6 +43,7 @@ const MAX_BUFFER_BYTES = 512 * 1024;
|
|
|
43
43
|
* Prevents CPU spinning when deltas arrive faster than regex evaluation (#468).
|
|
44
44
|
*/
|
|
45
45
|
const JS_FALLBACK_CHECK_INTERVAL_MS = 50;
|
|
46
|
+
const JS_FALLBACK_THROTTLE_MIN_BUFFER_BYTES = 4 * 1024;
|
|
46
47
|
const DEFAULT_SCOPE = {
|
|
47
48
|
allowText: true,
|
|
48
49
|
allowThinking: false,
|
|
@@ -308,7 +309,8 @@ export class TtsrManager {
|
|
|
308
309
|
// streams — regex on a growing buffer is O(rules × buffer_size) (#468).
|
|
309
310
|
const now = Date.now();
|
|
310
311
|
const lastCheck = this.#lastJsCheckAt.get(bufferKey) ?? 0;
|
|
311
|
-
if (
|
|
312
|
+
if (nextBuffer.length >= JS_FALLBACK_THROTTLE_MIN_BUFFER_BYTES &&
|
|
313
|
+
now - lastCheck < JS_FALLBACK_CHECK_INTERVAL_MS) {
|
|
312
314
|
stopTimer({ bufferSize: nextBuffer.length, throttled: true });
|
|
313
315
|
return [];
|
|
314
316
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief artifact policy
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getAgentDir } from "@gsd/pi-coding-agent";
|
|
4
|
+
export function getVisualBriefOutputDir(agentDir = getAgentDir()) {
|
|
5
|
+
return join(agentDir, "diagrams");
|
|
6
|
+
}
|
|
7
|
+
export function createVisualBriefArtifactPolicy(outputDir) {
|
|
8
|
+
return {
|
|
9
|
+
outputDir,
|
|
10
|
+
filenameStyle: "Use a descriptive kebab-case filename ending in .html.",
|
|
11
|
+
fileShape: "Produce one self-contained responsive HTML file with embedded CSS and minimal JavaScript.",
|
|
12
|
+
openers: [
|
|
13
|
+
"macOS: open",
|
|
14
|
+
"Linux: xdg-open",
|
|
15
|
+
"Windows: cmd /c start",
|
|
16
|
+
],
|
|
17
|
+
failureBehavior: "If opening fails, report the absolute file path.",
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function formatArtifactPolicy(policy) {
|
|
21
|
+
return [
|
|
22
|
+
`- Create the output directory if it does not exist: ${policy.outputDir}`,
|
|
23
|
+
`- ${policy.filenameStyle}`,
|
|
24
|
+
`- ${policy.fileShape}`,
|
|
25
|
+
"- Open the result in a browser when the local platform has an opener available.",
|
|
26
|
+
...policy.openers.map((opener) => ` - ${opener}`),
|
|
27
|
+
`- ${policy.failureBehavior}`,
|
|
28
|
+
].join("\n");
|
|
29
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief page contract
|
|
2
|
+
export const VISUAL_BRIEF_PAGE_RULES = [
|
|
3
|
+
"Use Mermaid for topology-heavy diagrams when it improves readability.",
|
|
4
|
+
"Use semantic HTML tables for comparisons, audits, matrices, status reports, and dense lists.",
|
|
5
|
+
"Use CSS grid/card layouts when text-heavy module details matter more than edge routing.",
|
|
6
|
+
"For 15+ entities, use a small overview diagram plus detailed cards instead of one crowded diagram.",
|
|
7
|
+
"Include accessible headings, readable contrast, responsive tables, and no horizontal body overflow.",
|
|
8
|
+
"Include source references for factual claims, file relationships, commands, and inferred behavior.",
|
|
9
|
+
"Keep the design distinctive and appropriate to the content; avoid generic purple/blue gradient styling.",
|
|
10
|
+
"CDN libraries are acceptable for Mermaid or charts, but the page must still show useful written context if a CDN fails.",
|
|
11
|
+
"Do not include provider-specific claims, branding, or assumptions.",
|
|
12
|
+
];
|
|
13
|
+
export function getVisualBriefModeProfile(mode, slides) {
|
|
14
|
+
if (slides || mode === "slides") {
|
|
15
|
+
return {
|
|
16
|
+
goal: "Turn the subject into a concise, visually paced deck that someone can present or skim quickly.",
|
|
17
|
+
evidenceSteps: [
|
|
18
|
+
"Identify the intended audience and the main decision or understanding the deck should support.",
|
|
19
|
+
"Read the relevant files, diffs, docs, or command output before making factual claims.",
|
|
20
|
+
"Extract the smallest set of concepts, risks, and examples needed for a clear narrative.",
|
|
21
|
+
],
|
|
22
|
+
sections: [
|
|
23
|
+
"Title slide with the subject and one-line takeaway",
|
|
24
|
+
"Problem or context slide",
|
|
25
|
+
"System or concept diagram slide",
|
|
26
|
+
"Key evidence slide",
|
|
27
|
+
"Risks, tradeoffs, or unknowns slide",
|
|
28
|
+
"Recommended next steps slide",
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
switch (mode) {
|
|
33
|
+
case "plan":
|
|
34
|
+
return {
|
|
35
|
+
goal: "Create a visual implementation plan that is detailed enough to guide coding without pretending uncertain facts are verified.",
|
|
36
|
+
evidenceSteps: [
|
|
37
|
+
"Read the relevant exports, immediate callers, tests, docs, and shared utilities.",
|
|
38
|
+
"Identify the likely file changes, existing conventions, edge cases, and test requirements.",
|
|
39
|
+
"Mark any assumption that cannot be verified from the repository.",
|
|
40
|
+
],
|
|
41
|
+
sections: [
|
|
42
|
+
"Feature summary and scope boundaries",
|
|
43
|
+
"Before/after workflow comparison",
|
|
44
|
+
"Architecture or state-flow diagram",
|
|
45
|
+
"Files to change with precise responsibilities",
|
|
46
|
+
"API, command, or data-shape changes",
|
|
47
|
+
"Edge cases and failure behavior",
|
|
48
|
+
"Test plan with success and failure paths",
|
|
49
|
+
"Open questions and assumptions",
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
case "diff":
|
|
53
|
+
return {
|
|
54
|
+
goal: "Review the current changes visually so risk, intent, and affected areas are easy to scan.",
|
|
55
|
+
evidenceSteps: [
|
|
56
|
+
"Inspect git status plus staged and unstaged diffs.",
|
|
57
|
+
"Read changed files where needed to understand behavior, not just line changes.",
|
|
58
|
+
"Separate confirmed findings from questions or residual risk.",
|
|
59
|
+
],
|
|
60
|
+
sections: [
|
|
61
|
+
"Change map by file and subsystem",
|
|
62
|
+
"Intent summary inferred from the diff",
|
|
63
|
+
"Risk heatmap",
|
|
64
|
+
"Behavior changes and compatibility notes",
|
|
65
|
+
"Test coverage matrix",
|
|
66
|
+
"Actionable findings and open questions",
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
case "recap":
|
|
70
|
+
return {
|
|
71
|
+
goal: "Create a context-switching snapshot that helps someone regain the project mental model quickly.",
|
|
72
|
+
evidenceSteps: [
|
|
73
|
+
"Read the current project docs, recent git status, relevant plans, and high-signal source files.",
|
|
74
|
+
"Identify active work, stable architecture, uncertain areas, and likely next actions.",
|
|
75
|
+
"Prefer concrete file references and verified facts over broad summaries.",
|
|
76
|
+
],
|
|
77
|
+
sections: [
|
|
78
|
+
"Current project state",
|
|
79
|
+
"Architecture map",
|
|
80
|
+
"Active work and changed files",
|
|
81
|
+
"Important decisions and constraints",
|
|
82
|
+
"Risks or unresolved questions",
|
|
83
|
+
"Recommended next actions",
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
case "table":
|
|
87
|
+
return {
|
|
88
|
+
goal: "Turn dense structured information into an accessible visual table that is easier to compare than terminal output.",
|
|
89
|
+
evidenceSteps: [
|
|
90
|
+
"Identify the row and column meanings before choosing table structure.",
|
|
91
|
+
"Verify each cell from source material, command output, or code when possible.",
|
|
92
|
+
"Use status labels and short notes so the table remains scannable.",
|
|
93
|
+
],
|
|
94
|
+
sections: [
|
|
95
|
+
"Short summary of what is being compared",
|
|
96
|
+
"Primary responsive table with sticky header",
|
|
97
|
+
"Legend for statuses or scoring",
|
|
98
|
+
"Notable patterns, outliers, and caveats",
|
|
99
|
+
"Source references",
|
|
100
|
+
],
|
|
101
|
+
};
|
|
102
|
+
case "diagram":
|
|
103
|
+
return {
|
|
104
|
+
goal: "Explain the subject visually with a diagram plus enough context to make the diagram trustworthy.",
|
|
105
|
+
evidenceSteps: [
|
|
106
|
+
"Read relevant files, docs, or command output before drawing relationships.",
|
|
107
|
+
"Choose the right diagram type: flowchart, sequence, state, ER/schema, C4-style, timeline, or dashboard.",
|
|
108
|
+
"Keep complex diagrams readable by splitting overview and details.",
|
|
109
|
+
],
|
|
110
|
+
sections: [
|
|
111
|
+
"One-line takeaway",
|
|
112
|
+
"Primary diagram with readable labels",
|
|
113
|
+
"Component or step details",
|
|
114
|
+
"Data/control flow notes",
|
|
115
|
+
"Assumptions, limitations, and source references",
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
default:
|
|
119
|
+
throw new Error(`Unknown visual brief mode: ${mode}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export function formatPageRules(rules = VISUAL_BRIEF_PAGE_RULES) {
|
|
123
|
+
return rules.map((rule) => ` - ${rule}`).join("\n");
|
|
124
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief prompt construction
|
|
2
|
+
import { createVisualBriefArtifactPolicy, formatArtifactPolicy, } from "./artifact-policy.js";
|
|
3
|
+
import { formatPageRules, getVisualBriefModeProfile, } from "./page-contract.js";
|
|
4
|
+
import { renderHtmlShellTemplate } from "../shared/html-shell.js";
|
|
5
|
+
export const VISUAL_BRIEF_MODES = [
|
|
6
|
+
{
|
|
7
|
+
mode: "diagram",
|
|
8
|
+
aliases: ["diagram", "flow", "architecture", "arch", "web-diagram"],
|
|
9
|
+
description: "Generate a visual system, architecture, flow, state, or data diagram",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
mode: "plan",
|
|
13
|
+
aliases: ["plan", "visual-plan", "implementation-plan"],
|
|
14
|
+
description: "Generate a visual implementation plan with risks, files, edge cases, and tests",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
mode: "diff",
|
|
18
|
+
aliases: ["diff", "review", "diff-review", "changes"],
|
|
19
|
+
description: "Generate a visual review of staged and unstaged changes",
|
|
20
|
+
defaultSubject: "the current staged and unstaged repository changes",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
mode: "recap",
|
|
24
|
+
aliases: ["recap", "project-recap", "summary"],
|
|
25
|
+
description: "Generate a visual project recap for context switching",
|
|
26
|
+
defaultSubject: "the current project",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
mode: "table",
|
|
30
|
+
aliases: ["table", "comparison", "matrix", "audit"],
|
|
31
|
+
description: "Render a dense comparison, audit, or status report as a readable HTML table",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
mode: "slides",
|
|
35
|
+
aliases: ["slides", "deck", "slide-deck"],
|
|
36
|
+
description: "Generate a visual slide deck",
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
export const VISUAL_BRIEF_USAGE = "Usage: /gsd brief <diagram|plan|diff|recap|table|slides> [topic] [--slides]";
|
|
40
|
+
const VISUAL_BRIEF_KIND = {
|
|
41
|
+
diff: "Diff Brief",
|
|
42
|
+
recap: "Project Recap",
|
|
43
|
+
plan: "Implementation Plan",
|
|
44
|
+
diagram: "Diagram",
|
|
45
|
+
table: "Comparison",
|
|
46
|
+
slides: "Slide Deck",
|
|
47
|
+
};
|
|
48
|
+
export function parseVisualBriefArgs(args) {
|
|
49
|
+
const rawArgs = args.trim();
|
|
50
|
+
if (!rawArgs)
|
|
51
|
+
return null;
|
|
52
|
+
const tokens = rawArgs.split(/\s+/).filter(Boolean);
|
|
53
|
+
const slidesFlag = tokens.includes("--slides");
|
|
54
|
+
const contentTokens = tokens.filter((token) => token !== "--slides");
|
|
55
|
+
if (contentTokens.length === 0)
|
|
56
|
+
return null;
|
|
57
|
+
const firstToken = normalizeToken(contentTokens[0] ?? "");
|
|
58
|
+
const modeInfo = findMode(firstToken);
|
|
59
|
+
const mode = modeInfo?.mode ?? "diagram";
|
|
60
|
+
const subjectTokens = modeInfo ? contentTokens.slice(1) : contentTokens;
|
|
61
|
+
const subject = subjectTokens.join(" ").trim() || modeInfo?.defaultSubject;
|
|
62
|
+
if (!subject)
|
|
63
|
+
return null;
|
|
64
|
+
return {
|
|
65
|
+
mode,
|
|
66
|
+
subject,
|
|
67
|
+
slides: slidesFlag || mode === "slides",
|
|
68
|
+
rawArgs,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function buildVisualBriefPrompt(request, options) {
|
|
72
|
+
const profile = getVisualBriefModeProfile(request.mode, request.slides);
|
|
73
|
+
const artifactPolicy = createVisualBriefArtifactPolicy(options.outputDir);
|
|
74
|
+
const outputFormat = request.slides ? "slide deck" : "scrollable explanation page";
|
|
75
|
+
const version = options.version?.trim() || undefined;
|
|
76
|
+
const shell = renderHtmlShellTemplate({
|
|
77
|
+
title: request.subject,
|
|
78
|
+
documentTitle: `GSD ${VISUAL_BRIEF_KIND[request.mode]} - ${request.subject}`,
|
|
79
|
+
subtitle: "Visual brief",
|
|
80
|
+
kind: VISUAL_BRIEF_KIND[request.mode],
|
|
81
|
+
version,
|
|
82
|
+
mainPlaceholder: "{{MAIN_HTML}}",
|
|
83
|
+
footerNote: request.subject,
|
|
84
|
+
});
|
|
85
|
+
return `Create a visual brief as a single HTML file.
|
|
86
|
+
|
|
87
|
+
## Request
|
|
88
|
+
|
|
89
|
+
- Mode: ${request.mode}
|
|
90
|
+
- Subject: ${request.subject}
|
|
91
|
+
- Output format: ${outputFormat}
|
|
92
|
+
- Output directory: ${options.outputDir}
|
|
93
|
+
|
|
94
|
+
## Goal
|
|
95
|
+
|
|
96
|
+
${profile.goal}
|
|
97
|
+
|
|
98
|
+
## Required workflow
|
|
99
|
+
|
|
100
|
+
1. Gather evidence before writing the page.
|
|
101
|
+
${profile.evidenceSteps.map((step) => ` - ${step}`).join("\n")}
|
|
102
|
+
2. Build the visual structure from the evidence.
|
|
103
|
+
${formatPageRules()}
|
|
104
|
+
3. Write the HTML file.
|
|
105
|
+
${formatArtifactPolicy(artifactPolicy).split("\n").map((line) => ` ${line}`).join("\n")}
|
|
106
|
+
|
|
107
|
+
## Required HTML shell
|
|
108
|
+
|
|
109
|
+
Use this scaffold verbatim. Replace {{MAIN_HTML}} with the authored <main> contents and {{GENERATED_AT}} with the current ISO timestamp. Do not add new <style> blocks or replace the header, footer, CSS, or script. The <h1> is the subject only; the kind chip is the only visual carrier of artifact type.
|
|
110
|
+
|
|
111
|
+
\`\`\`html
|
|
112
|
+
${shell}
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
Author only section-level content for {{MAIN_HTML}}. Use the shell utility classes where they fit: .kv-grid, .tbl, .card-row, .card, .callout-info, .callout-warn, .callout-ok, .dot-active, .dot-complete, .dot-pending.
|
|
116
|
+
|
|
117
|
+
## Page sections
|
|
118
|
+
|
|
119
|
+
${profile.sections.map((section) => `- ${section}`).join("\n")}
|
|
120
|
+
|
|
121
|
+
## Final response
|
|
122
|
+
|
|
123
|
+
Keep the chat response short: state the output file path, whether the browser opened, and any uncertainty discovered during evidence gathering.`;
|
|
124
|
+
}
|
|
125
|
+
export function getVisualBriefCompletions(prefix) {
|
|
126
|
+
const firstPart = prefix.trim().split(/\s+/)[0] ?? "";
|
|
127
|
+
return VISUAL_BRIEF_MODES
|
|
128
|
+
.filter((mode) => mode.mode.startsWith(firstPart) || mode.aliases.some((alias) => alias.startsWith(firstPart)))
|
|
129
|
+
.map((mode) => ({
|
|
130
|
+
value: mode.mode,
|
|
131
|
+
label: mode.mode,
|
|
132
|
+
description: mode.description,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
function findMode(token) {
|
|
136
|
+
return VISUAL_BRIEF_MODES.find((mode) => mode.aliases.includes(token));
|
|
137
|
+
}
|
|
138
|
+
function normalizeToken(token) {
|
|
139
|
+
return token.trim().toLowerCase();
|
|
140
|
+
}
|