@opengsd/gsd-pi 1.1.1-dev.a5a2de8 → 1.1.1-dev.b2556262
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/dist/headless-recover.js +56 -1
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +18 -2
- package/dist/resources/extensions/browser-tools/engine/selection.js +1 -1
- package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/dist/resources/extensions/browser-tools/index.js +68 -24
- package/dist/resources/extensions/browser-tools/state.js +12 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +3 -2
- package/dist/resources/extensions/browser-tools/utils.js +3 -3
- package/dist/resources/extensions/browser-tools/web-app-detect.js +52 -0
- package/dist/resources/extensions/gsd/auto/loop.js +4 -2
- package/dist/resources/extensions/gsd/auto/phases.js +87 -12
- package/dist/resources/extensions/gsd/auto/session.js +22 -1
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +1 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +81 -13
- package/dist/resources/extensions/gsd/auto-model-selection.js +154 -9
- package/dist/resources/extensions/gsd/auto-post-unit.js +19 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +26 -21
- package/dist/resources/extensions/gsd/auto-recovery.js +4 -2
- package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
- package/dist/resources/extensions/gsd/auto-start.js +1 -1
- package/dist/resources/extensions/gsd/auto-timers.js +24 -10
- package/dist/resources/extensions/gsd/auto.js +40 -15
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +3 -3
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +192 -77
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +1 -1
- package/dist/resources/extensions/gsd/closeout-wizard.js +32 -9
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +10 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -9
- package/dist/resources/extensions/gsd/commands-maintenance.js +93 -15
- package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +2 -2
- package/dist/resources/extensions/gsd/config-overlay.js +1 -0
- package/dist/resources/extensions/gsd/context-masker.js +129 -5
- package/dist/resources/extensions/gsd/db-writer.js +35 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +50 -1
- package/dist/resources/extensions/gsd/gsd-db.js +480 -172
- package/dist/resources/extensions/gsd/guided-flow.js +4 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +37 -53
- package/dist/resources/extensions/gsd/md-importer.js +38 -3
- package/dist/resources/extensions/gsd/migration-auto-check.js +126 -31
- package/dist/resources/extensions/gsd/parsers-legacy.js +23 -0
- package/dist/resources/extensions/gsd/planner-handoff.js +98 -0
- package/dist/resources/extensions/gsd/planning-path-scope.js +22 -4
- package/dist/resources/extensions/gsd/pre-execution-checks.js +10 -2
- package/dist/resources/extensions/gsd/preferences-models.js +111 -43
- package/dist/resources/extensions/gsd/preferences-types.js +13 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +68 -3
- package/dist/resources/extensions/gsd/preferences.js +4 -1
- package/dist/resources/extensions/gsd/prompts/gate-evaluate.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +2 -2
- package/dist/resources/extensions/gsd/prompts/system.md +1 -1
- package/dist/resources/extensions/gsd/roadmap-slices.js +5 -1
- package/dist/resources/extensions/gsd/safety/content-validator.js +6 -4
- package/dist/resources/extensions/gsd/skill-manifest.js +12 -0
- package/dist/resources/extensions/gsd/source-observations.js +306 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +15 -8
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +33 -5
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +34 -13
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +39 -14
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +4 -4
- package/dist/resources/extensions/gsd/state.js +7 -3
- package/dist/resources/extensions/gsd/tool-contract.js +15 -1
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +24 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +28 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +42 -11
- package/dist/resources/extensions/gsd/tools/plan-task.js +7 -1
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +62 -406
- package/dist/resources/extensions/gsd/uat-policy.js +130 -0
- package/dist/resources/extensions/gsd/uat-run.js +414 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +3 -4
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +38 -14
- package/dist/resources/extensions/gsd/verdict-parser.js +3 -8
- package/dist/resources/extensions/gsd/workflow-manifest.js +132 -5
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -3
- package/dist/resources/extensions/gsd/workflow-projections.js +8 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +26 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +96 -0
- package/dist/resources/extensions/gsd/worktree-state-projection.js +18 -17
- package/dist/resources/extensions/shared/gsd-browser-cli.js +6 -0
- package/dist/resources/extensions/subagent/agents.js +1 -0
- package/dist/resources/extensions/subagent/index.js +27 -12
- package/dist/resources/extensions/subagent/launch.js +7 -2
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/node_modules/@gsd/native/dist/native.js +22 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/package.json +4 -4
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +21 -23
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +66 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +18 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +16 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/workflow-tools.js +1 -1
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/dist/native.js +22 -0
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/image-models.generated.d.ts +30 -0
- package/packages/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/image-models.generated.js +30 -0
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +174 -29
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +178 -54
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +8 -1
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/themes.js +1 -1
- package/packages/pi-coding-agent/dist/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/utils.d.ts +11 -0
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +119 -6
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +2 -1
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/themes.js +1 -1
- package/pkg/dist/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/scripts/install/handoff.js +16 -3
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +21 -2
- package/src/resources/extensions/browser-tools/engine/selection.ts +1 -1
- package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
- package/src/resources/extensions/browser-tools/index.ts +75 -27
- package/src/resources/extensions/browser-tools/state.ts +13 -0
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +2 -2
- package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +57 -0
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +37 -0
- package/src/resources/extensions/browser-tools/tests/web-app-detect.test.mjs +68 -0
- package/src/resources/extensions/browser-tools/tools/session.ts +4 -2
- package/src/resources/extensions/browser-tools/utils.ts +3 -3
- package/src/resources/extensions/browser-tools/web-app-detect.ts +63 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/loop.ts +4 -2
- package/src/resources/extensions/gsd/auto/phases.ts +89 -15
- package/src/resources/extensions/gsd/auto/session.ts +24 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +1 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +117 -12
- package/src/resources/extensions/gsd/auto-model-selection.ts +190 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +20 -2
- package/src/resources/extensions/gsd/auto-prompts.ts +25 -22
- package/src/resources/extensions/gsd/auto-recovery.ts +22 -3
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +1 -1
- package/src/resources/extensions/gsd/auto-timers.ts +25 -9
- package/src/resources/extensions/gsd/auto.ts +41 -14
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +3 -3
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +250 -78
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +1 -1
- package/src/resources/extensions/gsd/closeout-wizard.ts +47 -13
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +9 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +2 -17
- package/src/resources/extensions/gsd/commands-maintenance.ts +124 -13
- package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +2 -2
- package/src/resources/extensions/gsd/config-overlay.ts +1 -0
- package/src/resources/extensions/gsd/context-masker.ts +152 -5
- package/src/resources/extensions/gsd/db-writer.ts +38 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +50 -1
- package/src/resources/extensions/gsd/gsd-db.ts +564 -186
- package/src/resources/extensions/gsd/guided-flow.ts +4 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +44 -66
- package/src/resources/extensions/gsd/md-importer.ts +49 -2
- package/src/resources/extensions/gsd/migration-auto-check.ts +154 -34
- package/src/resources/extensions/gsd/parsers-legacy.ts +20 -0
- package/src/resources/extensions/gsd/planner-handoff.ts +149 -0
- package/src/resources/extensions/gsd/planning-path-scope.ts +22 -4
- package/src/resources/extensions/gsd/pre-execution-checks.ts +9 -2
- package/src/resources/extensions/gsd/preferences-models.ts +113 -43
- package/src/resources/extensions/gsd/preferences-types.ts +47 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +76 -2
- package/src/resources/extensions/gsd/preferences.ts +5 -0
- package/src/resources/extensions/gsd/prompts/gate-evaluate.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +2 -2
- package/src/resources/extensions/gsd/prompts/system.md +1 -1
- package/src/resources/extensions/gsd/roadmap-slices.ts +6 -1
- package/src/resources/extensions/gsd/safety/content-validator.ts +8 -5
- package/src/resources/extensions/gsd/skill-manifest.ts +12 -0
- package/src/resources/extensions/gsd/source-observations.ts +402 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +20 -8
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +44 -5
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +39 -11
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +45 -15
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +4 -4
- package/src/resources/extensions/gsd/state.ts +7 -4
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +66 -4
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +299 -1
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +22 -1
- package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -0
- package/src/resources/extensions/gsd/tests/before-provider-context-management.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/closeout-wizard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/content-validator.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/context-masker.test.ts +56 -1
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +17 -2
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +1 -11
- package/src/resources/extensions/gsd/tests/gate-dispatch.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/gate-storage.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +62 -1
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +99 -2
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/planner-handoff.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +101 -1
- package/src/resources/extensions/gsd/tests/repository-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +162 -18
- package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/source-observations.test.ts +275 -0
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +76 -21
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +203 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +306 -1
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +77 -10
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +260 -5
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +511 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +44 -0
- package/src/resources/extensions/gsd/tool-contract.ts +29 -1
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +41 -6
- package/src/resources/extensions/gsd/tools/complete-slice.ts +29 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +54 -12
- package/src/resources/extensions/gsd/tools/plan-task.ts +8 -1
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +71 -489
- package/src/resources/extensions/gsd/types.ts +1 -0
- package/src/resources/extensions/gsd/uat-policy.ts +191 -0
- package/src/resources/extensions/gsd/uat-run.ts +550 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +3 -4
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +38 -14
- package/src/resources/extensions/gsd/verdict-parser.ts +3 -10
- package/src/resources/extensions/gsd/workflow-manifest.ts +193 -7
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -3
- package/src/resources/extensions/gsd/workflow-projections.ts +9 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +32 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +103 -0
- package/src/resources/extensions/gsd/worktree-state-projection.ts +22 -22
- package/src/resources/extensions/shared/gsd-browser-cli.ts +6 -0
- package/src/resources/extensions/shared/tests/format-utils.test.ts +8 -3
- package/src/resources/extensions/subagent/agents.ts +4 -0
- package/src/resources/extensions/subagent/index.ts +28 -3
- package/src/resources/extensions/subagent/launch.ts +8 -0
- package/src/resources/extensions/subagent/tests/model-override.test.ts +31 -0
- /package/dist/web/standalone/.next/static/{9y3LeeR2uGr2yRj9RjY3D → tJOKQbQRO-9MiFDO8DIDS}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{9y3LeeR2uGr2yRj9RjY3D → tJOKQbQRO-9MiFDO8DIDS}/_ssgManifest.js +0 -0
|
@@ -9,7 +9,8 @@ import {
|
|
|
9
9
|
openDatabase,
|
|
10
10
|
closeDatabase,
|
|
11
11
|
_getAdapter,
|
|
12
|
-
|
|
12
|
+
getArtifact,
|
|
13
|
+
getAssessment,
|
|
13
14
|
insertAssessment,
|
|
14
15
|
upsertRequirement,
|
|
15
16
|
getAllMilestones,
|
|
@@ -632,16 +633,40 @@ test("executeUatResultSave accepts gsd_uat_exec evidence written in a milestone
|
|
|
632
633
|
assert.equal(result.isError, undefined);
|
|
633
634
|
assert.equal(result.details.operation, "save_uat_result");
|
|
634
635
|
assert.equal(result.details.verdict, "PASS");
|
|
636
|
+
assert.equal(result.details.runId, "uat:M001:S02:attempt-1");
|
|
637
|
+
assert.equal(result.details.worktreeRoot, worktree);
|
|
638
|
+
assert.equal(result.details.browserToolsPresented, false);
|
|
635
639
|
assert.ok(
|
|
636
640
|
existsSync(join(base, ".gsd", "uat", "M001", "S02", "attempt-1.json")),
|
|
637
641
|
"attempt JSON should be persisted under the authoritative project .gsd",
|
|
638
642
|
);
|
|
643
|
+
const attempt = JSON.parse(readFileSync(
|
|
644
|
+
join(base, ".gsd", "uat", "M001", "S02", "attempt-1.json"),
|
|
645
|
+
"utf-8",
|
|
646
|
+
)) as {
|
|
647
|
+
runId?: string;
|
|
648
|
+
worktreeRoot?: string;
|
|
649
|
+
browserToolsPresented?: boolean;
|
|
650
|
+
modePolicy?: { requiredAnyModes?: string[] };
|
|
651
|
+
};
|
|
652
|
+
assert.equal(attempt.runId, "uat:M001:S02:attempt-1");
|
|
653
|
+
assert.equal(attempt.worktreeRoot, worktree);
|
|
654
|
+
assert.equal(attempt.browserToolsPresented, false);
|
|
655
|
+
assert.deepEqual(attempt.modePolicy?.requiredAnyModes, ["runtime"]);
|
|
639
656
|
const assessment = readFileSync(
|
|
640
657
|
join(base, ".gsd", "milestones", "M001", "slices", "S02", "S02-ASSESSMENT.md"),
|
|
641
658
|
"utf-8",
|
|
642
659
|
);
|
|
660
|
+
assert.match(assessment, /runId: uat:M001:S02:attempt-1/);
|
|
661
|
+
assert.ok(assessment.includes(`worktreeRoot: ${worktree}`));
|
|
643
662
|
assert.match(assessment, /Runtime path C:\\\\tmp\\\|uat evidence/);
|
|
644
663
|
assert.match(assessment, /backslash \\\\ and pipe \\\|/);
|
|
664
|
+
|
|
665
|
+
const artifactPath = "milestones/M001/slices/S02/S02-ASSESSMENT.md";
|
|
666
|
+
const assessmentPath = `.gsd/${artifactPath}`;
|
|
667
|
+
assert.equal(getArtifact(artifactPath)?.artifact_type, "ASSESSMENT");
|
|
668
|
+
assert.equal(getAssessment(assessmentPath)?.scope, "run-uat");
|
|
669
|
+
assert.equal(getAssessment(assessmentPath)?.status, "pass");
|
|
645
670
|
} finally {
|
|
646
671
|
closeDatabase();
|
|
647
672
|
cleanup(base);
|
|
@@ -705,6 +730,67 @@ test("executeUatResultSave supplies canonical presentation and normalizes verdic
|
|
|
705
730
|
}
|
|
706
731
|
});
|
|
707
732
|
|
|
733
|
+
test("executeUatResultSave supplies direct browser tools for browser-executable UAT", async () => {
|
|
734
|
+
const base = makeTmpBase();
|
|
735
|
+
const worktree = join(base, ".gsd", "worktrees", "M001");
|
|
736
|
+
const worktreeExecDir = join(worktree, ".gsd", "exec");
|
|
737
|
+
const evidenceId = "uat-direct-browser-evidence";
|
|
738
|
+
try {
|
|
739
|
+
openTestDb(base);
|
|
740
|
+
seedMilestone("M001", "Milestone One");
|
|
741
|
+
seedSlice("M001", "S06", "complete");
|
|
742
|
+
mkdirSync(worktreeExecDir, { recursive: true });
|
|
743
|
+
writeFileSync(
|
|
744
|
+
join(worktreeExecDir, `${evidenceId}.meta.json`),
|
|
745
|
+
JSON.stringify({
|
|
746
|
+
id: evidenceId,
|
|
747
|
+
metadata: {
|
|
748
|
+
kind: "uat_exec",
|
|
749
|
+
milestoneId: "M001",
|
|
750
|
+
sliceId: "S06",
|
|
751
|
+
checkId: "UAT-01",
|
|
752
|
+
intent: "uat-browser-check",
|
|
753
|
+
},
|
|
754
|
+
}),
|
|
755
|
+
"utf-8",
|
|
756
|
+
);
|
|
757
|
+
|
|
758
|
+
const result = await inProjectDir(worktree, () => executeUatResultSave({
|
|
759
|
+
milestoneId: "M001",
|
|
760
|
+
sliceId: "S06",
|
|
761
|
+
uatType: "browser-executable",
|
|
762
|
+
verdict: "PASS",
|
|
763
|
+
checks: [{
|
|
764
|
+
id: "UAT-01",
|
|
765
|
+
description: "Browser flow used browser tools",
|
|
766
|
+
mode: "browser",
|
|
767
|
+
result: "PASS",
|
|
768
|
+
evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
|
|
769
|
+
notes: "Browser check passed.",
|
|
770
|
+
}],
|
|
771
|
+
notes: "UAT passed with browser evidence.",
|
|
772
|
+
} as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
|
|
773
|
+
|
|
774
|
+
assert.equal(result.isError, undefined);
|
|
775
|
+
const attempt = JSON.parse(readFileSync(
|
|
776
|
+
join(base, ".gsd", "uat", "M001", "S06", "attempt-1.json"),
|
|
777
|
+
"utf-8",
|
|
778
|
+
)) as { browserToolsPresented?: boolean; presentation?: { presentedTools?: string[] } };
|
|
779
|
+
|
|
780
|
+
assert.equal(result.details.browserToolsPresented, true);
|
|
781
|
+
assert.equal(attempt.browserToolsPresented, true);
|
|
782
|
+
assert.ok(attempt.presentation?.presentedTools?.includes("browser_navigate"));
|
|
783
|
+
assert.ok(attempt.presentation?.presentedTools?.includes("browser_assert"));
|
|
784
|
+
assert.equal(
|
|
785
|
+
attempt.presentation?.presentedTools?.some((toolName) => toolName.startsWith("mcp__gsd-browser__")),
|
|
786
|
+
false,
|
|
787
|
+
);
|
|
788
|
+
} finally {
|
|
789
|
+
closeDatabase();
|
|
790
|
+
cleanup(base);
|
|
791
|
+
}
|
|
792
|
+
});
|
|
793
|
+
|
|
708
794
|
test("executeUatResultSave merges canonical plan ID and read-only tools when presentation lacks plan ID", async () => {
|
|
709
795
|
const base = makeTmpBase();
|
|
710
796
|
const worktree = join(base, ".gsd", "worktrees", "M001");
|
|
@@ -777,6 +863,135 @@ test("executeUatResultSave merges canonical plan ID and read-only tools when pre
|
|
|
777
863
|
}
|
|
778
864
|
});
|
|
779
865
|
|
|
866
|
+
test("executeUatResultSave surfaces the worktree validation path for NEEDS-HUMAN checks", async () => {
|
|
867
|
+
const base = makeTmpBase();
|
|
868
|
+
const worktree = join(base, ".gsd", "worktrees", "M001");
|
|
869
|
+
const worktreeExecDir = join(worktree, ".gsd", "exec");
|
|
870
|
+
const evidenceId = "uat-human-validation-evidence";
|
|
871
|
+
try {
|
|
872
|
+
openTestDb(base);
|
|
873
|
+
seedMilestone("M001", "Milestone One");
|
|
874
|
+
seedSlice("M001", "S07", "complete");
|
|
875
|
+
mkdirSync(worktreeExecDir, { recursive: true });
|
|
876
|
+
writeFileSync(
|
|
877
|
+
join(worktreeExecDir, `${evidenceId}.meta.json`),
|
|
878
|
+
JSON.stringify({
|
|
879
|
+
id: evidenceId,
|
|
880
|
+
metadata: {
|
|
881
|
+
kind: "uat_exec",
|
|
882
|
+
milestoneId: "M001",
|
|
883
|
+
sliceId: "S07",
|
|
884
|
+
checkId: "UAT-01",
|
|
885
|
+
intent: "uat-runtime-check",
|
|
886
|
+
},
|
|
887
|
+
}),
|
|
888
|
+
"utf-8",
|
|
889
|
+
);
|
|
890
|
+
|
|
891
|
+
const result = await inProjectDir(worktree, () => executeUatResultSave({
|
|
892
|
+
milestoneId: "M001",
|
|
893
|
+
sliceId: "S07",
|
|
894
|
+
uatType: "human-experience",
|
|
895
|
+
verdict: "PASS",
|
|
896
|
+
checks: [
|
|
897
|
+
{
|
|
898
|
+
id: "UAT-01",
|
|
899
|
+
description: "Service boots and renders the dashboard",
|
|
900
|
+
mode: "runtime",
|
|
901
|
+
result: "PASS",
|
|
902
|
+
evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
|
|
903
|
+
notes: "Boot check passed.",
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
id: "UAT-02",
|
|
907
|
+
description: "Dashboard layout feels balanced",
|
|
908
|
+
mode: "human-follow-up",
|
|
909
|
+
result: "NEEDS-HUMAN",
|
|
910
|
+
nonAutomatable: true,
|
|
911
|
+
notes: "Open the app and eyeball the spacing.",
|
|
912
|
+
},
|
|
913
|
+
],
|
|
914
|
+
notes: "Automatable checks passed; layout taste needs a human.",
|
|
915
|
+
} as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
|
|
916
|
+
|
|
917
|
+
assert.equal(result.isError, undefined);
|
|
918
|
+
assert.equal(result.details.verdict, "PASS");
|
|
919
|
+
// The reviewer needs the buried worktree checkout path, not just the file.
|
|
920
|
+
assert.equal(result.details.manualValidationPath, worktree);
|
|
921
|
+
const returnedText = (result.content[0] as { text: string }).text;
|
|
922
|
+
assert.match(returnedText, /Manual validation needed/);
|
|
923
|
+
assert.ok(returnedText.includes(worktree), "tool return should include the worktree path");
|
|
924
|
+
|
|
925
|
+
const assessment = readFileSync(
|
|
926
|
+
join(base, ".gsd", "milestones", "M001", "slices", "S07", "S07-ASSESSMENT.md"),
|
|
927
|
+
"utf-8",
|
|
928
|
+
);
|
|
929
|
+
assert.match(assessment, /## Manual Validation/);
|
|
930
|
+
assert.ok(assessment.includes(worktree), "assessment should include the worktree checkout path");
|
|
931
|
+
assert.match(assessment, /git worktree/);
|
|
932
|
+
} finally {
|
|
933
|
+
closeDatabase();
|
|
934
|
+
cleanup(base);
|
|
935
|
+
}
|
|
936
|
+
});
|
|
937
|
+
|
|
938
|
+
test("executeUatResultSave omits manual-validation guidance when no human checks remain", async () => {
|
|
939
|
+
const base = makeTmpBase();
|
|
940
|
+
const worktree = join(base, ".gsd", "worktrees", "M001");
|
|
941
|
+
const worktreeExecDir = join(worktree, ".gsd", "exec");
|
|
942
|
+
const evidenceId = "uat-no-human-evidence";
|
|
943
|
+
try {
|
|
944
|
+
openTestDb(base);
|
|
945
|
+
seedMilestone("M001", "Milestone One");
|
|
946
|
+
seedSlice("M001", "S08", "complete");
|
|
947
|
+
mkdirSync(worktreeExecDir, { recursive: true });
|
|
948
|
+
writeFileSync(
|
|
949
|
+
join(worktreeExecDir, `${evidenceId}.meta.json`),
|
|
950
|
+
JSON.stringify({
|
|
951
|
+
id: evidenceId,
|
|
952
|
+
metadata: {
|
|
953
|
+
kind: "uat_exec",
|
|
954
|
+
milestoneId: "M001",
|
|
955
|
+
sliceId: "S08",
|
|
956
|
+
checkId: "UAT-01",
|
|
957
|
+
intent: "uat-artifact-check",
|
|
958
|
+
},
|
|
959
|
+
}),
|
|
960
|
+
"utf-8",
|
|
961
|
+
);
|
|
962
|
+
|
|
963
|
+
const result = await inProjectDir(worktree, () => executeUatResultSave({
|
|
964
|
+
milestoneId: "M001",
|
|
965
|
+
sliceId: "S08",
|
|
966
|
+
uatType: "artifact-driven",
|
|
967
|
+
verdict: "PASS",
|
|
968
|
+
checks: [{
|
|
969
|
+
id: "UAT-01",
|
|
970
|
+
description: "Config file exists",
|
|
971
|
+
mode: "artifact",
|
|
972
|
+
result: "PASS",
|
|
973
|
+
evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
|
|
974
|
+
notes: "Artifact present.",
|
|
975
|
+
}],
|
|
976
|
+
notes: "Fully automated pass.",
|
|
977
|
+
} as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
|
|
978
|
+
|
|
979
|
+
assert.equal(result.isError, undefined);
|
|
980
|
+
assert.equal(result.details.manualValidationPath, undefined);
|
|
981
|
+
const returnedText = (result.content[0] as { text: string }).text;
|
|
982
|
+
assert.equal(returnedText.includes("Manual validation needed"), false);
|
|
983
|
+
|
|
984
|
+
const assessment = readFileSync(
|
|
985
|
+
join(base, ".gsd", "milestones", "M001", "slices", "S08", "S08-ASSESSMENT.md"),
|
|
986
|
+
"utf-8",
|
|
987
|
+
);
|
|
988
|
+
assert.equal(assessment.includes("## Manual Validation"), false);
|
|
989
|
+
} finally {
|
|
990
|
+
closeDatabase();
|
|
991
|
+
cleanup(base);
|
|
992
|
+
}
|
|
993
|
+
});
|
|
994
|
+
|
|
780
995
|
test("executeUatResultSave rejects saved UAT without fresh UAT-owned evidence", async () => {
|
|
781
996
|
const base = makeTmpBase();
|
|
782
997
|
const worktree = join(base, ".gsd", "worktrees", "M001");
|
|
@@ -1259,12 +1474,25 @@ test("executeSaveGateResult validates inputs and persists verdicts", async () =>
|
|
|
1259
1474
|
openTestDb(base);
|
|
1260
1475
|
seedMilestone("M005", "Milestone Five");
|
|
1261
1476
|
seedSlice("M005", "S05", "pending");
|
|
1262
|
-
|
|
1477
|
+
mkdirSync(join(base, "src"), { recursive: true });
|
|
1478
|
+
writeFileSync(join(base, "src", "gate.ts"), "export const gate = true;\n", "utf-8");
|
|
1479
|
+
await inProjectDir(base, () => executePlanSlice({
|
|
1263
1480
|
milestoneId: "M005",
|
|
1264
1481
|
sliceId: "S05",
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1482
|
+
goal: "Plan gate save projection.",
|
|
1483
|
+
tasks: [
|
|
1484
|
+
{
|
|
1485
|
+
taskId: "T01",
|
|
1486
|
+
title: "Add gate fixture",
|
|
1487
|
+
description: "Create a fixture touched by gate evaluation.",
|
|
1488
|
+
estimate: "10m",
|
|
1489
|
+
files: ["src/gate.ts"],
|
|
1490
|
+
verify: "node --test",
|
|
1491
|
+
inputs: [],
|
|
1492
|
+
expectedOutput: ["src/gate.ts"],
|
|
1493
|
+
},
|
|
1494
|
+
],
|
|
1495
|
+
}, base));
|
|
1268
1496
|
|
|
1269
1497
|
const result = await inProjectDir(base, () => executeSaveGateResult({
|
|
1270
1498
|
milestoneId: "M005",
|
|
@@ -1283,6 +1511,33 @@ test("executeSaveGateResult validates inputs and persists verdicts", async () =>
|
|
|
1283
1511
|
assert.equal(row?.status, "complete");
|
|
1284
1512
|
assert.equal(row?.verdict, "pass");
|
|
1285
1513
|
assert.equal(row?.rationale, "Looks good.");
|
|
1514
|
+
const planPath = join(base, ".gsd", "milestones", "M005", "slices", "S05", "S05-PLAN.md");
|
|
1515
|
+
assert.match(readFileSync(planPath, "utf-8"), /No issues found\./);
|
|
1516
|
+
} finally {
|
|
1517
|
+
closeDatabase();
|
|
1518
|
+
cleanup(base);
|
|
1519
|
+
}
|
|
1520
|
+
});
|
|
1521
|
+
|
|
1522
|
+
test("executeSaveGateResult fails when no canonical gate row is updated", async () => {
|
|
1523
|
+
const base = makeTmpBase();
|
|
1524
|
+
try {
|
|
1525
|
+
openTestDb(base);
|
|
1526
|
+
seedMilestone("M005", "Milestone Five");
|
|
1527
|
+
seedSlice("M005", "S05", "pending");
|
|
1528
|
+
|
|
1529
|
+
const result = await inProjectDir(base, () => executeSaveGateResult({
|
|
1530
|
+
milestoneId: "M005",
|
|
1531
|
+
sliceId: "S05",
|
|
1532
|
+
gateId: "Q3",
|
|
1533
|
+
verdict: "pass",
|
|
1534
|
+
rationale: "Looks good.",
|
|
1535
|
+
findings: "No issues found.",
|
|
1536
|
+
}, base));
|
|
1537
|
+
|
|
1538
|
+
assert.equal(result.isError, true);
|
|
1539
|
+
assert.equal(result.details.operation, "save_gate_result");
|
|
1540
|
+
assert.match(String(result.details.error), /quality gate row not found/);
|
|
1286
1541
|
} finally {
|
|
1287
1542
|
closeDatabase();
|
|
1288
1543
|
cleanup(base);
|