@opengsd/gsd-pi 1.2.0-dev.955e4da0 → 1.2.0-dev.9ad8ae33
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/cli-style.d.ts +17 -0
- package/dist/cli-style.js +28 -0
- package/dist/cli.js +1 -1
- package/dist/headless-events.d.ts +4 -2
- package/dist/headless-events.js +14 -34
- package/dist/mcp-server.js +2 -1
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/resource-loader.d.ts +10 -5
- package/dist/resource-loader.js +123 -20
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +5 -4
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
- package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
- package/dist/resources/extensions/async-jobs/index.js +65 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
- package/dist/resources/extensions/bg-shell/overlay.js +9 -6
- package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
- package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
- package/dist/resources/extensions/bg-shell/utilities.js +3 -0
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
- package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
- package/dist/resources/extensions/browser-tools/index.js +69 -12
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +30 -4
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +105 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- package/dist/resources/extensions/gsd/auto/loop.js +4 -1
- package/dist/resources/extensions/gsd/auto/orchestrator.js +89 -54
- package/dist/resources/extensions/gsd/auto/phases.js +49 -6
- package/dist/resources/extensions/gsd/auto/session.js +3 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
- package/dist/resources/extensions/gsd/auto-dispatch.js +50 -58
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +35 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +81 -19
- package/dist/resources/extensions/gsd/auto-start.js +41 -18
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +12 -20
- package/dist/resources/extensions/gsd/auto-verification.js +23 -30
- package/dist/resources/extensions/gsd/auto-worktree.js +44 -91
- package/dist/resources/extensions/gsd/auto.js +41 -14
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +23 -6
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +212 -48
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +303 -77
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +4 -6
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/commands/context.js +16 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +46 -3
- package/dist/resources/extensions/gsd/consent-question.js +353 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +12 -15
- package/dist/resources/extensions/gsd/db/queries.js +26 -0
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -6
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +2 -18
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -15
- package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
- package/dist/resources/extensions/gsd/error-classifier.js +9 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/files.js +33 -19
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +2 -1
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +23 -5
- package/dist/resources/extensions/gsd/markdown-renderer.js +10 -0
- package/dist/resources/extensions/gsd/mcp-filter.js +2 -19
- package/dist/resources/extensions/gsd/mcp-tool-name.js +5 -13
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/migrate/safety.js +4 -1
- package/dist/resources/extensions/gsd/milestone-closeout.js +85 -24
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +2 -2
- package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +6 -4
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/paths.js +27 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-models.js +14 -48
- package/dist/resources/extensions/gsd/projection-flush.js +7 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/research-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/dist/resources/extensions/gsd/prompts/system.md +5 -2
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
- package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
- package/dist/resources/extensions/gsd/publication.js +87 -0
- package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +37 -94
- package/dist/resources/extensions/gsd/roadmap-slices.js +25 -3
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/state.js +6 -20
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/tool-contract.js +14 -3
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +4 -4
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +22 -12
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +9 -7
- package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -8
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
- package/dist/resources/extensions/gsd/uat-policy.js +42 -16
- package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +74 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +337 -0
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -182
- package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
- package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
- package/dist/resources/extensions/gsd/web-app-uat.js +45 -8
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
- package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
- package/dist/resources/extensions/gsd/workflow-events.js +6 -18
- package/dist/resources/extensions/gsd/workflow-reconcile.js +21 -56
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +1 -1
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +15 -9
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +3 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +7 -1
- package/dist/resources/extensions/gsd/worktree-root.js +11 -0
- package/dist/resources/extensions/gsd/worktree-session-state.js +4 -5
- package/dist/resources/extensions/gsd/worktree.js +8 -1
- package/dist/resources/extensions/search-the-web/native-search.js +5 -3
- package/dist/resources/extensions/shared/browser-contract.js +59 -0
- package/dist/resources/extensions/shared/gsd-browser-cli.js +116 -6
- package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
- package/dist/resources/shared/package-manager-detection.js +1 -1
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
- package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +24 -1
- package/dist/update-cmd.js +20 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js.nft.json +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 +13 -13
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
- 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/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/{796.cf859a427a2cb2ac.js → 796.e0bdc932325d7e03.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-fbea77b5f9953368.js → webpack-f0285ce91d4ec9ef.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/package.json +1 -1
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -15
- package/package.json +2 -2
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/rpc.d.ts +1 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +4 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js.map +1 -1
- 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/tool-execution.d.ts +5 -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 +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.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 +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +8 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-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 +11 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +9 -1
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +4 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +26 -18
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +116 -39
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
- package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +3 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/README.md +1 -0
- package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
- package/packages/pi-ai/dist/image-models.generated.js +6 -6
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +35 -125
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +46 -120
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +12 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +12 -3
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/package.json +3 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
- package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
- package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
- package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +5 -4
- package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
- package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
- package/src/resources/extensions/async-jobs/index.ts +79 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
- package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
- package/src/resources/extensions/bg-shell/overlay.ts +9 -5
- package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
- package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
- package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
- package/src/resources/extensions/bg-shell/utilities.ts +3 -0
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
- package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
- package/src/resources/extensions/browser-tools/index.ts +71 -13
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +34 -4
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +152 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- package/src/resources/extensions/gsd/auto/loop.ts +4 -1
- package/src/resources/extensions/gsd/auto/orchestrator.ts +98 -56
- package/src/resources/extensions/gsd/auto/phases.ts +65 -26
- package/src/resources/extensions/gsd/auto/session.ts +3 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
- package/src/resources/extensions/gsd/auto-dispatch.ts +48 -61
- package/src/resources/extensions/gsd/auto-model-selection.ts +41 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +40 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +118 -35
- package/src/resources/extensions/gsd/auto-start.ts +42 -21
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +14 -21
- package/src/resources/extensions/gsd/auto-verification.ts +26 -28
- package/src/resources/extensions/gsd/auto-worktree.ts +44 -94
- package/src/resources/extensions/gsd/auto.ts +52 -16
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +23 -6
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +251 -47
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +352 -84
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +4 -6
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/commands/context.ts +16 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +46 -3
- package/src/resources/extensions/gsd/consent-question.ts +431 -0
- package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +13 -11
- package/src/resources/extensions/gsd/db/queries.ts +37 -0
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -7
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +2 -19
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +13 -15
- package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
- package/src/resources/extensions/gsd/error-classifier.ts +11 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/files.ts +33 -12
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +4 -3
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +37 -28
- package/src/resources/extensions/gsd/markdown-renderer.ts +11 -0
- package/src/resources/extensions/gsd/mcp-filter.ts +2 -23
- package/src/resources/extensions/gsd/mcp-tool-name.ts +6 -11
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +4 -1
- package/src/resources/extensions/gsd/milestone-closeout.ts +109 -24
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +2 -2
- package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +6 -4
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/paths.ts +33 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-models.ts +12 -47
- package/src/resources/extensions/gsd/projection-flush.ts +20 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +3 -3
- package/src/resources/extensions/gsd/prompts/execute-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/research-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +7 -5
- package/src/resources/extensions/gsd/prompts/system.md +5 -2
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
- package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
- package/src/resources/extensions/gsd/publication.ts +122 -0
- package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +42 -96
- package/src/resources/extensions/gsd/roadmap-slices.ts +28 -3
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/state.ts +9 -21
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +97 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +198 -26
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
- package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
- package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +8 -7
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +273 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +2 -6
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +53 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +73 -58
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +95 -4
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +112 -29
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +67 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +275 -40
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +67 -1
- package/src/resources/extensions/gsd/tool-contract.ts +38 -3
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +4 -4
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +22 -12
- package/src/resources/extensions/gsd/tools/complete-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +8 -7
- package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -8
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
- package/src/resources/extensions/gsd/uat-policy.ts +62 -16
- package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +111 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +412 -0
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -192
- package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
- package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
- package/src/resources/extensions/gsd/web-app-uat.ts +51 -8
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
- package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
- package/src/resources/extensions/gsd/workflow-events.ts +12 -20
- package/src/resources/extensions/gsd/workflow-reconcile.ts +29 -62
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +4 -1
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +15 -9
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +3 -8
- package/src/resources/extensions/gsd/worktree-manager.ts +6 -1
- package/src/resources/extensions/gsd/worktree-root.ts +12 -0
- package/src/resources/extensions/gsd/worktree-session-state.ts +3 -5
- package/src/resources/extensions/gsd/worktree.ts +7 -1
- package/src/resources/extensions/search-the-web/native-search.ts +5 -3
- package/src/resources/extensions/shared/browser-contract.ts +66 -0
- package/src/resources/extensions/shared/gsd-browser-cli.ts +141 -6
- package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
- package/src/resources/shared/package-manager-detection.ts +1 -1
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/executable-code.md +1 -1
- package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/resources/extensions/gsd/user-input-boundary.js +0 -218
- package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -173
- package/src/resources/extensions/gsd/user-input-boundary.ts +0 -216
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → FBNo5cT_chy7YNoAQsU3o}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → FBNo5cT_chy7YNoAQsU3o}/_ssgManifest.js +0 -0
|
@@ -1,187 +1,14 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose:
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export const RUN_UAT_READ_ONLY_TOOL_NAMES = [
|
|
11
|
-
"find",
|
|
12
|
-
"glob",
|
|
13
|
-
"grep",
|
|
14
|
-
"ls",
|
|
15
|
-
"read",
|
|
16
|
-
];
|
|
17
|
-
export const RUN_UAT_BROWSER_TOOL_NAMES = [
|
|
18
|
-
"browser_navigate",
|
|
19
|
-
"browser_click",
|
|
20
|
-
"browser_type",
|
|
21
|
-
"browser_fill_form",
|
|
22
|
-
"browser_click_ref",
|
|
23
|
-
"browser_fill_ref",
|
|
24
|
-
"browser_wait_for",
|
|
25
|
-
"browser_assert",
|
|
26
|
-
"browser_verify",
|
|
27
|
-
"browser_screenshot",
|
|
28
|
-
"browser_snapshot_refs",
|
|
29
|
-
"browser_find",
|
|
30
|
-
"browser_get_console_logs",
|
|
31
|
-
"browser_get_network_logs",
|
|
32
|
-
"browser_evaluate",
|
|
33
|
-
"browser_reload",
|
|
34
|
-
"browser_batch",
|
|
35
|
-
"browser_act",
|
|
36
|
-
];
|
|
2
|
+
// File Purpose: Unit-to-tool contract views derived from the Unit Registry (ADR-033).
|
|
3
|
+
//
|
|
4
|
+
// The contract data lives in unit-registry.ts (one Unit Descriptor per unit
|
|
5
|
+
// type). This file keeps the established import surface: the derived
|
|
6
|
+
// `UNIT_TOOL_CONTRACTS` table and its accessor functions are unchanged for
|
|
7
|
+
// consumers.
|
|
8
|
+
import { UNIT_REGISTRY, } from "./unit-registry.js";
|
|
9
|
+
export { RUN_UAT_WORKFLOW_TOOL_NAMES, RUN_UAT_READ_ONLY_TOOL_NAMES, RUN_UAT_BROWSER_TOOL_NAMES, } from "./unit-registry.js";
|
|
37
10
|
export const RUN_UAT_TOOL_PRESENTATION_PLAN_ID = "run-uat/default-v1";
|
|
38
|
-
export const UNIT_TOOL_CONTRACTS =
|
|
39
|
-
"research-milestone": {
|
|
40
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
41
|
-
requiredWorkflowTools: ["gsd_summary_save"],
|
|
42
|
-
},
|
|
43
|
-
"plan-milestone": {
|
|
44
|
-
allowedGsdTools: [
|
|
45
|
-
"gsd_milestone_status",
|
|
46
|
-
"gsd_plan_milestone",
|
|
47
|
-
"gsd_plan_slice",
|
|
48
|
-
"gsd_decision_save",
|
|
49
|
-
"gsd_requirement_update",
|
|
50
|
-
],
|
|
51
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice"],
|
|
52
|
-
},
|
|
53
|
-
"discuss-milestone": {
|
|
54
|
-
allowedGsdTools: [
|
|
55
|
-
"gsd_summary_save",
|
|
56
|
-
"gsd_decision_save",
|
|
57
|
-
"gsd_requirement_save",
|
|
58
|
-
"gsd_requirement_update",
|
|
59
|
-
"gsd_plan_milestone",
|
|
60
|
-
"gsd_milestone_generate_id",
|
|
61
|
-
],
|
|
62
|
-
requiredWorkflowTools: [
|
|
63
|
-
"ask_user_questions",
|
|
64
|
-
"gsd_summary_save",
|
|
65
|
-
"gsd_requirement_save",
|
|
66
|
-
"gsd_requirement_update",
|
|
67
|
-
"gsd_plan_milestone",
|
|
68
|
-
"gsd_milestone_generate_id",
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
"discuss-slice": {
|
|
72
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
73
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
74
|
-
},
|
|
75
|
-
"validate-milestone": {
|
|
76
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
77
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"],
|
|
78
|
-
},
|
|
79
|
-
"complete-milestone": {
|
|
80
|
-
allowedGsdTools: [
|
|
81
|
-
"gsd_milestone_status",
|
|
82
|
-
"gsd_requirement_update",
|
|
83
|
-
"gsd_summary_save",
|
|
84
|
-
"gsd_complete_milestone",
|
|
85
|
-
"subagent",
|
|
86
|
-
],
|
|
87
|
-
requiredWorkflowTools: [
|
|
88
|
-
"gsd_milestone_status",
|
|
89
|
-
"gsd_requirement_update",
|
|
90
|
-
"gsd_summary_save",
|
|
91
|
-
"gsd_complete_milestone",
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
"research-slice": {
|
|
95
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
96
|
-
requiredWorkflowTools: ["gsd_summary_save"],
|
|
97
|
-
},
|
|
98
|
-
"plan-slice": {
|
|
99
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_reassess_roadmap", "gsd_decision_save"],
|
|
100
|
-
requiredWorkflowTools: ["gsd_plan_slice", "gsd_reassess_roadmap"],
|
|
101
|
-
},
|
|
102
|
-
"refine-slice": {
|
|
103
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_decision_save"],
|
|
104
|
-
requiredWorkflowTools: ["gsd_plan_slice"],
|
|
105
|
-
},
|
|
106
|
-
"replan-slice": {
|
|
107
|
-
allowedGsdTools: ["gsd_replan_slice", "gsd_decision_save"],
|
|
108
|
-
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
109
|
-
},
|
|
110
|
-
"complete-slice": {
|
|
111
|
-
allowedGsdTools: [
|
|
112
|
-
"gsd_slice_complete",
|
|
113
|
-
"gsd_task_reopen",
|
|
114
|
-
"gsd_replan_slice",
|
|
115
|
-
"gsd_decision_save",
|
|
116
|
-
"gsd_requirement_update",
|
|
117
|
-
"gsd_summary_save",
|
|
118
|
-
"subagent",
|
|
119
|
-
],
|
|
120
|
-
requiredWorkflowTools: [
|
|
121
|
-
"gsd_slice_complete",
|
|
122
|
-
"gsd_task_reopen",
|
|
123
|
-
"gsd_replan_slice",
|
|
124
|
-
"gsd_requirement_update",
|
|
125
|
-
"gsd_summary_save",
|
|
126
|
-
],
|
|
127
|
-
forbiddenGsdTools: {
|
|
128
|
-
gsd_uat_result_save: "Run UAT owns persisted UAT Assessment.",
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
"reassess-roadmap": {
|
|
132
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
133
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
134
|
-
},
|
|
135
|
-
"execute-task": {
|
|
136
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
137
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
138
|
-
},
|
|
139
|
-
"execute-task-simple": {
|
|
140
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
141
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
142
|
-
},
|
|
143
|
-
"reactive-execute": {
|
|
144
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_summary_save", "gsd_decision_save"],
|
|
145
|
-
requiredWorkflowTools: ["gsd_task_complete", "gsd_summary_save"],
|
|
146
|
-
},
|
|
147
|
-
"run-uat": {
|
|
148
|
-
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
149
|
-
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
150
|
-
forbiddenGsdTools: {
|
|
151
|
-
gsd_exec: "Use gsd_uat_exec so acceptance evidence is typed as UAT-owned.",
|
|
152
|
-
gsd_save_gate_result: "gsd_uat_result_save owns the aggregate UAT gate.",
|
|
153
|
-
gsd_summary_save: "gsd_uat_result_save owns persisted UAT Assessment writes.",
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
"gate-evaluate": {
|
|
157
|
-
allowedGsdTools: ["gsd_save_gate_result"],
|
|
158
|
-
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
159
|
-
},
|
|
160
|
-
"rewrite-docs": {
|
|
161
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
162
|
-
requiredWorkflowTools: [],
|
|
163
|
-
},
|
|
164
|
-
"workflow-preferences": {
|
|
165
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
166
|
-
requiredWorkflowTools: [],
|
|
167
|
-
},
|
|
168
|
-
"discuss-project": {
|
|
169
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
170
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
171
|
-
},
|
|
172
|
-
"discuss-requirements": {
|
|
173
|
-
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
174
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
175
|
-
},
|
|
176
|
-
"research-decision": {
|
|
177
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
178
|
-
requiredWorkflowTools: ["ask_user_questions"],
|
|
179
|
-
},
|
|
180
|
-
"research-project": {
|
|
181
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
182
|
-
requiredWorkflowTools: [],
|
|
183
|
-
},
|
|
184
|
-
};
|
|
11
|
+
export const UNIT_TOOL_CONTRACTS = Object.fromEntries(Object.entries(UNIT_REGISTRY).flatMap(([unitType, descriptor]) => descriptor.toolContract ? [[unitType, descriptor.toolContract]] : []));
|
|
185
12
|
export const AUTO_UNIT_SCOPED_TOOLS = Object.fromEntries(Object.entries(UNIT_TOOL_CONTRACTS).map(([unitType, contract]) => [unitType, contract.allowedGsdTools]));
|
|
186
13
|
export function getUnitToolSurfaceContract(unitType) {
|
|
187
14
|
return UNIT_TOOL_CONTRACTS[unitType];
|
|
@@ -128,7 +128,7 @@ export function isValidMilestoneVerdict(verdict) {
|
|
|
128
128
|
* Extract the UAT type from content, defaulting to `"artifact-driven"`.
|
|
129
129
|
*
|
|
130
130
|
* The `"artifact-driven"` fallback is the original default used throughout
|
|
131
|
-
* the codebase when a UAT file
|
|
131
|
+
* the codebase when a UAT file has no parseable UAT mode declaration.
|
|
132
132
|
*/
|
|
133
133
|
export function getUatType(content) {
|
|
134
134
|
return getDeclaredUatType(content);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
2
|
// File Purpose: Host-owned verification verdict policy for auto-mode units.
|
|
3
|
+
export const NO_HOST_CHECKS_FAILURE_CONTEXT = "No runnable host-owned verification command was discovered. Add project verification_commands in .gsd/PREFERENCES.md or a runnable task-plan Verify command, then resume with /gsd next.";
|
|
3
4
|
export function decideVerificationVerdict(unitType, result) {
|
|
4
5
|
if (unitType === "execute-task" && result.discoverySource === "task-plan-prose" && result.checks.length === 0) {
|
|
5
6
|
return {
|
|
@@ -14,7 +15,7 @@ export function decideVerificationVerdict(unitType, result) {
|
|
|
14
15
|
passed: false,
|
|
15
16
|
reason: "no-host-checks",
|
|
16
17
|
retryable: false,
|
|
17
|
-
failureContext:
|
|
18
|
+
failureContext: NO_HOST_CHECKS_FAILURE_CONTEXT,
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
if (!result.passed) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose: Web-app detection and
|
|
2
|
+
// File Purpose: Web-app detection and browser-UAT guidance for planning and slice closeout.
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
|
+
import { resolveAmbientBrowserEngineResolution } from "../browser-tools/engine/selection.js";
|
|
5
6
|
import { detectWebApp } from "../browser-tools/web-app-detect.js";
|
|
7
|
+
import { UAT_MODE_POLICIES } from "./uat-policy.js";
|
|
6
8
|
export { detectWebApp };
|
|
7
9
|
function readPackageJson(projectRoot) {
|
|
8
10
|
const packageJsonPath = resolve(projectRoot, "package.json");
|
|
@@ -39,24 +41,56 @@ export function findPlaywrightTestScript(projectRoot) {
|
|
|
39
41
|
}
|
|
40
42
|
return null;
|
|
41
43
|
}
|
|
44
|
+
function describeBrowserToolBacking(engineResolution) {
|
|
45
|
+
switch (engineResolution.engine) {
|
|
46
|
+
case "gsd-browser":
|
|
47
|
+
return "This project looks browser-facing. GSD exposes `browser_*` tools backed by the managed gsd-browser engine for run-uat.";
|
|
48
|
+
case "legacy":
|
|
49
|
+
return "This project looks browser-facing. GSD exposes Playwright-backed `browser_*` tools for run-uat.";
|
|
50
|
+
case "off":
|
|
51
|
+
return "This project looks browser-facing, but Pi browser tools are disabled (GSD_BROWSER_ENGINE=off) — prefer `runtime-executable` UAT with automated browser test commands.";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// One bullet per recommended UAT mode; `mode` keys into UAT_MODE_POLICIES so
|
|
55
|
+
// modes that require browser tools drop out of the guidance when the resolved
|
|
56
|
+
// engine provides none (mixed/live-runtime share one bullet and one policy bit).
|
|
57
|
+
const UAT_MODE_GUIDANCE = [
|
|
58
|
+
{
|
|
59
|
+
mode: "browser-executable",
|
|
60
|
+
bullet: "- `browser-executable` — navigate to `http://localhost:…`, click, screenshot, assert via `browser_*` tools during run-uat",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
mode: "runtime-executable",
|
|
64
|
+
bullet: "- `runtime-executable` — run an automated browser test command via `gsd_uat_exec` (for example `npx playwright test`)",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
mode: "mixed",
|
|
68
|
+
bullet: "- `mixed` / `live-runtime` — combine runtime startup checks with interactive browser verification",
|
|
69
|
+
},
|
|
70
|
+
];
|
|
42
71
|
/**
|
|
43
72
|
* Markdown block injected into plan/complete-slice prompts when the project
|
|
44
|
-
* looks browser-facing. Returns null for CLI/library-only repos.
|
|
73
|
+
* looks browser-facing. Returns null for CLI/library-only repos. Guidance is
|
|
74
|
+
* composed from the resolved Browser Automation Engine so prompts never claim
|
|
75
|
+
* an engine the runtime is not using; `engineResolution` is injectable for
|
|
76
|
+
* tests and defaults to the ambient resolution.
|
|
45
77
|
*/
|
|
46
|
-
export function buildWebAppUatGuidanceBlock(projectRoot) {
|
|
78
|
+
export function buildWebAppUatGuidanceBlock(projectRoot, engineResolution) {
|
|
47
79
|
if (!detectWebApp(projectRoot))
|
|
48
80
|
return null;
|
|
81
|
+
const resolvedEngine = engineResolution ?? resolveAmbientBrowserEngineResolution(projectRoot);
|
|
82
|
+
const browserToolsAvailable = resolvedEngine.engine !== "off";
|
|
49
83
|
const playwrightScript = findPlaywrightTestScript(projectRoot);
|
|
50
84
|
const hasPlaywright = hasPlaywrightTestDependency(projectRoot) || playwrightScript !== null;
|
|
51
85
|
const lines = [
|
|
52
86
|
"### Web App UAT (detected)",
|
|
53
87
|
"",
|
|
54
|
-
|
|
88
|
+
describeBrowserToolBacking(resolvedEngine),
|
|
55
89
|
"",
|
|
56
90
|
"**UAT modes (pick one per slice — do not use `artifact-driven` for browser steps):**",
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
91
|
+
...UAT_MODE_GUIDANCE
|
|
92
|
+
.filter(({ mode }) => browserToolsAvailable || !UAT_MODE_POLICIES[mode].browserTools)
|
|
93
|
+
.map(({ bullet }) => bullet),
|
|
60
94
|
"",
|
|
61
95
|
"**Planning / closeout rules:**",
|
|
62
96
|
"- Preconditions must name the dev-server command and URL (for example `npm run dev` → `http://localhost:3000`)",
|
|
@@ -74,7 +108,10 @@ export function buildWebAppUatGuidanceBlock(projectRoot) {
|
|
|
74
108
|
lines.push("- Name concrete spec paths in slice Verification (for example `e2e/smoke.spec.ts`)");
|
|
75
109
|
}
|
|
76
110
|
else {
|
|
77
|
-
lines.push("", "**Playwright scaffolding (first UI slice):** no `playwright` / `@playwright/test` dependency yet.", "- Add a planning task that installs Playwright, adds `playwright.config.ts`, and creates a minimal smoke spec (for example `e2e/smoke.spec.ts`)", "- Task `verify` should run `npx playwright test` (or the focused spec) with a safe, simple command"
|
|
111
|
+
lines.push("", "**Playwright scaffolding (first UI slice):** no `playwright` / `@playwright/test` dependency yet.", "- Add a planning task that installs Playwright, adds `playwright.config.ts`, and creates a minimal smoke spec (for example `e2e/smoke.spec.ts`)", "- Task `verify` should run `npx playwright test` (or the focused spec) with a safe, simple command");
|
|
112
|
+
if (browserToolsAvailable) {
|
|
113
|
+
lines.push("- Until specs exist, use `browser-executable` UAT with localhost preconditions and interactive `browser_*` checks at slice closeout");
|
|
114
|
+
}
|
|
78
115
|
}
|
|
79
116
|
return lines.join("\n");
|
|
80
117
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { appendFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { atomicWriteSync } from "./atomic-write.js";
|
|
5
|
+
import { resolveGsdPathContract } from "./paths.js";
|
|
6
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
7
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
8
|
+
import { normalizeWorkflowEventCommand } from "./workflow-event-vocabulary.js";
|
|
9
|
+
export const WORKFLOW_EVENT_LOG_FILENAME = "event-log.jsonl";
|
|
10
|
+
export function resolveWorkflowEventLedgerLocation(basePath, originalProjectRoot) {
|
|
11
|
+
const contract = resolveGsdPathContract(basePath, originalProjectRoot);
|
|
12
|
+
return {
|
|
13
|
+
projectRoot: contract.projectRoot,
|
|
14
|
+
workRoot: contract.workRoot,
|
|
15
|
+
projectGsd: contract.projectGsd,
|
|
16
|
+
worktreeGsd: contract.worktreeGsd,
|
|
17
|
+
projectLogPath: join(contract.projectGsd, WORKFLOW_EVENT_LOG_FILENAME),
|
|
18
|
+
worktreeLogPath: contract.worktreeGsd
|
|
19
|
+
? join(contract.worktreeGsd, WORKFLOW_EVENT_LOG_FILENAME)
|
|
20
|
+
: null,
|
|
21
|
+
isWorktree: contract.isWorktree,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function workflowEventLogPath(basePath) {
|
|
25
|
+
return resolveWorkflowEventLedgerLocation(basePath).projectLogPath;
|
|
26
|
+
}
|
|
27
|
+
export function workflowEventArchivePath(basePath, milestoneId) {
|
|
28
|
+
const location = resolveWorkflowEventLedgerLocation(basePath);
|
|
29
|
+
return join(location.projectGsd, `event-log-${milestoneId}.jsonl.archived`);
|
|
30
|
+
}
|
|
31
|
+
export function readWorktreeEventLogPath(worktreeBasePath) {
|
|
32
|
+
const location = resolveWorkflowEventLedgerLocation(worktreeBasePath);
|
|
33
|
+
return location.worktreeLogPath ?? location.projectLogPath;
|
|
34
|
+
}
|
|
35
|
+
export function buildWorkflowEvent(event, sessionId) {
|
|
36
|
+
const hash = createHash("sha256")
|
|
37
|
+
.update(JSON.stringify({ cmd: event.cmd, params: event.params }))
|
|
38
|
+
.digest("hex")
|
|
39
|
+
.slice(0, 16);
|
|
40
|
+
return {
|
|
41
|
+
v: 2,
|
|
42
|
+
...event,
|
|
43
|
+
hash,
|
|
44
|
+
session_id: sessionId,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function appendWorkflowEvent(basePath, event, sessionId) {
|
|
48
|
+
const fullEvent = buildWorkflowEvent(event, sessionId);
|
|
49
|
+
const location = resolveWorkflowEventLedgerLocation(basePath);
|
|
50
|
+
mkdirSync(location.projectGsd, { recursive: true });
|
|
51
|
+
appendFileSync(location.projectLogPath, `${JSON.stringify(fullEvent)}\n`, "utf-8");
|
|
52
|
+
emitWorkflowEventAudit(location.projectRoot, fullEvent);
|
|
53
|
+
return fullEvent;
|
|
54
|
+
}
|
|
55
|
+
export function writeWorkflowEventLog(basePath, events) {
|
|
56
|
+
const location = resolveWorkflowEventLedgerLocation(basePath);
|
|
57
|
+
mkdirSync(location.projectGsd, { recursive: true });
|
|
58
|
+
const content = events.map((event) => JSON.stringify(event)).join("\n") + (events.length > 0 ? "\n" : "");
|
|
59
|
+
atomicWriteSync(location.projectLogPath, content);
|
|
60
|
+
}
|
|
61
|
+
export function writeWorktreeEventLog(worktreeBasePath, events) {
|
|
62
|
+
const location = resolveWorkflowEventLedgerLocation(worktreeBasePath);
|
|
63
|
+
const logPath = location.worktreeLogPath ?? location.projectLogPath;
|
|
64
|
+
mkdirSync(dirname(logPath), { recursive: true });
|
|
65
|
+
const content = events.map((event) => JSON.stringify(event)).join("\n") + (events.length > 0 ? "\n" : "");
|
|
66
|
+
atomicWriteSync(logPath, content);
|
|
67
|
+
}
|
|
68
|
+
function emitWorkflowEventAudit(basePath, event) {
|
|
69
|
+
if (!isUnifiedAuditEnabled())
|
|
70
|
+
return;
|
|
71
|
+
try {
|
|
72
|
+
const normalized = normalizeWorkflowEventCommand(event.cmd) ?? "unknown";
|
|
73
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
74
|
+
traceId: event.session_id,
|
|
75
|
+
category: "orchestration",
|
|
76
|
+
type: `workflow-event-${normalized}`,
|
|
77
|
+
payload: {
|
|
78
|
+
cmd: event.cmd,
|
|
79
|
+
params: event.params,
|
|
80
|
+
actor: event.actor,
|
|
81
|
+
actorName: event.actor_name,
|
|
82
|
+
triggerReason: event.trigger_reason,
|
|
83
|
+
eventTs: event.ts,
|
|
84
|
+
hash: event.hash,
|
|
85
|
+
},
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Best-effort: audit projection must never block the workflow event ledger.
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function normalizeWorkflowEventCommand(cmd) {
|
|
2
|
+
return typeof cmd === "string" ? cmd.replace(/-/g, "_") : null;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Workflow progress events are keyed by the domain entity they mutate.
|
|
6
|
+
* Keep command aliases and conflict identity in this module so replay,
|
|
7
|
+
* conflict detection, and tests do not each grow their own vocabulary.
|
|
8
|
+
*/
|
|
9
|
+
export function workflowEventEntityKey(event) {
|
|
10
|
+
const p = event.params;
|
|
11
|
+
const cmd = normalizeWorkflowEventCommand(event.cmd);
|
|
12
|
+
if (!cmd)
|
|
13
|
+
return null;
|
|
14
|
+
switch (cmd) {
|
|
15
|
+
case "complete_task":
|
|
16
|
+
case "start_task":
|
|
17
|
+
case "skip_task":
|
|
18
|
+
case "report_blocker":
|
|
19
|
+
case "record_verification":
|
|
20
|
+
case "plan_task":
|
|
21
|
+
return typeof p["taskId"] === "string"
|
|
22
|
+
? { type: "task", id: p["taskId"] }
|
|
23
|
+
: null;
|
|
24
|
+
case "complete_slice":
|
|
25
|
+
case "replan_slice":
|
|
26
|
+
return typeof p["sliceId"] === "string"
|
|
27
|
+
? { type: "slice", id: p["sliceId"] }
|
|
28
|
+
: null;
|
|
29
|
+
case "plan_slice":
|
|
30
|
+
return typeof p["sliceId"] === "string"
|
|
31
|
+
? { type: "slice_plan", id: p["sliceId"] }
|
|
32
|
+
: null;
|
|
33
|
+
case "complete_milestone":
|
|
34
|
+
case "plan_milestone":
|
|
35
|
+
return typeof p["milestoneId"] === "string"
|
|
36
|
+
? { type: "milestone", id: p["milestoneId"] }
|
|
37
|
+
: null;
|
|
38
|
+
case "save_decision":
|
|
39
|
+
if (typeof p["scope"] === "string" && typeof p["decision"] === "string") {
|
|
40
|
+
return { type: "decision", id: `${p["scope"]}:${p["decision"]}` };
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
default:
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { join } from "node:path";
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
4
3
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
5
4
|
import { withFileLockSync } from "./file-lock.js";
|
|
5
|
+
import { appendWorkflowEvent, workflowEventArchivePath, workflowEventLogPath, } from "./workflow-event-ledger.js";
|
|
6
6
|
import { logWarning } from "./workflow-logger.js";
|
|
7
7
|
// ─── Session ID ───────────────────────────────────────────────────────────
|
|
8
8
|
/**
|
|
@@ -20,19 +20,7 @@ export function getSessionId() {
|
|
|
20
20
|
* Creates .gsd directory if needed.
|
|
21
21
|
*/
|
|
22
22
|
export function appendEvent(basePath, event) {
|
|
23
|
-
|
|
24
|
-
.update(JSON.stringify({ cmd: event.cmd, params: event.params }))
|
|
25
|
-
.digest("hex")
|
|
26
|
-
.slice(0, 16);
|
|
27
|
-
const fullEvent = {
|
|
28
|
-
v: 2,
|
|
29
|
-
...event,
|
|
30
|
-
hash,
|
|
31
|
-
session_id: ENGINE_SESSION_ID,
|
|
32
|
-
};
|
|
33
|
-
const dir = join(basePath, ".gsd");
|
|
34
|
-
mkdirSync(dir, { recursive: true });
|
|
35
|
-
appendFileSync(join(dir, "event-log.jsonl"), JSON.stringify(fullEvent) + "\n", "utf-8");
|
|
23
|
+
appendWorkflowEvent(basePath, event, ENGINE_SESSION_ID);
|
|
36
24
|
}
|
|
37
25
|
// ─── readEvents ──────────────────────────────────────────────────────────
|
|
38
26
|
/**
|
|
@@ -87,8 +75,8 @@ export function findForkPoint(logA, logB) {
|
|
|
87
75
|
* @returns { archived: number } — count of events moved to archive
|
|
88
76
|
*/
|
|
89
77
|
export function compactMilestoneEvents(basePath, milestoneId) {
|
|
90
|
-
const logPath =
|
|
91
|
-
const archivePath =
|
|
78
|
+
const logPath = workflowEventLogPath(basePath);
|
|
79
|
+
const archivePath = workflowEventArchivePath(basePath, milestoneId);
|
|
92
80
|
return withFileLockSync(logPath, () => {
|
|
93
81
|
const allEvents = readEvents(logPath);
|
|
94
82
|
// Single-pass partition to halve the work (per reviewer agent)
|
|
@@ -2,6 +2,8 @@ import { join } from "node:path";
|
|
|
2
2
|
import { mkdirSync, existsSync, readFileSync, unlinkSync } from "node:fs";
|
|
3
3
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
4
4
|
import { readEvents, findForkPoint, getSessionId } from "./workflow-events.js";
|
|
5
|
+
import { normalizeWorkflowEventCommand, workflowEventEntityKey, } from "./workflow-event-vocabulary.js";
|
|
6
|
+
import { readWorktreeEventLogPath, workflowEventLogPath, writeWorkflowEventLog, writeWorktreeEventLog, } from "./workflow-event-ledger.js";
|
|
5
7
|
import { transaction, updateTaskStatus, updateSliceStatus, updateMilestoneStatus, getSliceTasks, insertMilestone, getMilestoneSlices, insertVerificationEvidence, upsertDecision, setTaskBlockerDiscovered, insertOrIgnoreSlice, insertOrIgnoreTask, } from "./gsd-db.js";
|
|
6
8
|
import { openWorkflowDatabasePath } from "./db-workspace.js";
|
|
7
9
|
import { isClosedStatus } from "./status-guards.js";
|
|
@@ -48,14 +50,11 @@ function replayEvents(events) {
|
|
|
48
50
|
transaction(() => {
|
|
49
51
|
for (const event of events) {
|
|
50
52
|
const p = event.params;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Type guard: malformed event lines with non-string cmd are skipped.
|
|
54
|
-
if (typeof event.cmd !== "string") {
|
|
53
|
+
const cmd = normalizeWorkflowEventCommand(event.cmd);
|
|
54
|
+
if (!cmd) {
|
|
55
55
|
logWarning("reconcile", `Event with non-string cmd skipped: ${JSON.stringify(event.cmd)}`);
|
|
56
56
|
continue;
|
|
57
57
|
}
|
|
58
|
-
const cmd = event.cmd.replace(/-/g, "_");
|
|
59
58
|
switch (cmd) {
|
|
60
59
|
case "complete_task": {
|
|
61
60
|
const milestoneId = p["milestoneId"];
|
|
@@ -199,43 +198,7 @@ function replayEvents(events) {
|
|
|
199
198
|
* (e.g. unknown or future cmds).
|
|
200
199
|
*/
|
|
201
200
|
export function extractEntityKey(event) {
|
|
202
|
-
|
|
203
|
-
// Normalize cmd format: accept both hyphens and underscores
|
|
204
|
-
if (typeof event.cmd !== "string")
|
|
205
|
-
return null;
|
|
206
|
-
const cmd = event.cmd.replace(/-/g, "_");
|
|
207
|
-
switch (cmd) {
|
|
208
|
-
case "complete_task":
|
|
209
|
-
case "start_task":
|
|
210
|
-
case "skip_task":
|
|
211
|
-
case "report_blocker":
|
|
212
|
-
case "record_verification":
|
|
213
|
-
case "plan_task":
|
|
214
|
-
return typeof p["taskId"] === "string"
|
|
215
|
-
? { type: "task", id: p["taskId"] }
|
|
216
|
-
: null;
|
|
217
|
-
case "complete_slice":
|
|
218
|
-
case "replan_slice":
|
|
219
|
-
return typeof p["sliceId"] === "string"
|
|
220
|
-
? { type: "slice", id: p["sliceId"] }
|
|
221
|
-
: null;
|
|
222
|
-
case "plan_slice":
|
|
223
|
-
return typeof p["sliceId"] === "string"
|
|
224
|
-
? { type: "slice_plan", id: p["sliceId"] }
|
|
225
|
-
: null;
|
|
226
|
-
case "complete_milestone":
|
|
227
|
-
case "plan_milestone":
|
|
228
|
-
return typeof p["milestoneId"] === "string"
|
|
229
|
-
? { type: "milestone", id: p["milestoneId"] }
|
|
230
|
-
: null;
|
|
231
|
-
case "save_decision":
|
|
232
|
-
if (typeof p["scope"] === "string" && typeof p["decision"] === "string") {
|
|
233
|
-
return { type: "decision", id: `${p["scope"]}:${p["decision"]}` };
|
|
234
|
-
}
|
|
235
|
-
return null;
|
|
236
|
-
default:
|
|
237
|
-
return null;
|
|
238
|
-
}
|
|
201
|
+
return workflowEventEntityKey(event);
|
|
239
202
|
}
|
|
240
203
|
// ─── detectConflicts ──────────────────────────────────────────────────────────
|
|
241
204
|
/**
|
|
@@ -302,12 +265,6 @@ function rewriteDivergedEventsForEntity(divergedEvents, entityType, entityId, re
|
|
|
302
265
|
}
|
|
303
266
|
return rewritten;
|
|
304
267
|
}
|
|
305
|
-
function writeEventLog(basePath, events) {
|
|
306
|
-
const dir = join(basePath, ".gsd");
|
|
307
|
-
mkdirSync(dir, { recursive: true });
|
|
308
|
-
const content = events.map((e) => JSON.stringify(e)).join("\n") + (events.length > 0 ? "\n" : "");
|
|
309
|
-
atomicWriteSync(join(dir, "event-log.jsonl"), content);
|
|
310
|
-
}
|
|
311
268
|
// ─── writeConflictsFile ───────────────────────────────────────────────────────
|
|
312
269
|
/**
|
|
313
270
|
* Write a human-readable CONFLICTS.md to basePath/.gsd/CONFLICTS.md.
|
|
@@ -375,10 +332,15 @@ export function reconcileWorktreeLogs(mainBasePath, worktreeBasePath) {
|
|
|
375
332
|
}
|
|
376
333
|
function _reconcileWorktreeLogsInner(mainBasePath, worktreeBasePath) {
|
|
377
334
|
// Step 1: Read both logs
|
|
378
|
-
const mainLogPath =
|
|
379
|
-
const wtLogPath =
|
|
335
|
+
const mainLogPath = workflowEventLogPath(mainBasePath);
|
|
336
|
+
const wtLogPath = readWorktreeEventLogPath(worktreeBasePath);
|
|
380
337
|
const mainEvents = readEvents(mainLogPath);
|
|
381
338
|
const wtEvents = readEvents(wtLogPath);
|
|
339
|
+
// Canonical worktree appends are already durable in the project ledger.
|
|
340
|
+
// Empty/missing worktree shards are legacy-only absence, not divergence.
|
|
341
|
+
if (wtEvents.length === 0) {
|
|
342
|
+
return { autoMerged: 0, conflicts: [] };
|
|
343
|
+
}
|
|
382
344
|
// Step 2: Find fork point
|
|
383
345
|
const forkPoint = findForkPoint(mainEvents, wtEvents);
|
|
384
346
|
// Step 3: Slice diverged sets
|
|
@@ -412,9 +374,7 @@ function _reconcileWorktreeLogsInner(mainBasePath, worktreeBasePath) {
|
|
|
412
374
|
}
|
|
413
375
|
const baseEvents = mainEvents.slice(0, forkPoint + 1);
|
|
414
376
|
const mergedLog = baseEvents.concat(merged);
|
|
415
|
-
|
|
416
|
-
mkdirSync(join(mainBasePath, ".gsd"), { recursive: true });
|
|
417
|
-
atomicWriteSync(join(mainBasePath, ".gsd", "event-log.jsonl"), logContent);
|
|
377
|
+
writeWorkflowEventLog(mainBasePath, mergedLog);
|
|
418
378
|
// Step 8: Replay into DB (wrapped in a transaction by replayEvents)
|
|
419
379
|
openWorkflowDatabasePath(resolveGsdPathContract(mainBasePath).projectDb);
|
|
420
380
|
replayEvents(merged);
|
|
@@ -533,8 +493,8 @@ pick) {
|
|
|
533
493
|
throw new Error(`No conflict found for entity ${entityKey}`);
|
|
534
494
|
const conflict = conflicts[idx];
|
|
535
495
|
const eventsToReplay = pick === "main" ? conflict.mainSideEvents : conflict.worktreeSideEvents;
|
|
536
|
-
const mainLogPath =
|
|
537
|
-
const wtLogPath =
|
|
496
|
+
const mainLogPath = workflowEventLogPath(basePath);
|
|
497
|
+
const wtLogPath = readWorktreeEventLogPath(worktreeBasePath);
|
|
538
498
|
const mainEvents = readEvents(mainLogPath);
|
|
539
499
|
const wtEvents = readEvents(wtLogPath);
|
|
540
500
|
const forkPoint = findForkPoint(mainEvents, wtEvents);
|
|
@@ -547,7 +507,12 @@ pick) {
|
|
|
547
507
|
: rewriteDivergedEventsForEntity(mainDiverged, entityType, entityId, eventsToReplay);
|
|
548
508
|
const targetBasePath = pick === "main" ? worktreeBasePath : basePath;
|
|
549
509
|
const targetBaseEvents = pick === "main" ? wtBaseEvents : mainBaseEvents;
|
|
550
|
-
|
|
510
|
+
if (pick === "main") {
|
|
511
|
+
writeWorktreeEventLog(targetBasePath, targetBaseEvents.concat(rewrittenTargetEvents));
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
writeWorkflowEventLog(targetBasePath, targetBaseEvents.concat(rewrittenTargetEvents));
|
|
515
|
+
}
|
|
551
516
|
// Replay resolved events through the DB (updates DB state)
|
|
552
517
|
openWorkflowDatabasePath(resolveGsdPathContract(basePath).projectDb);
|
|
553
518
|
replayEvents(eventsToReplay);
|
|
@@ -8,7 +8,7 @@ export const WORKFLOW_TOOL_ALIAS_NAMES = CONTRACT_WORKFLOW_TOOL_ALIAS_NAMES;
|
|
|
8
8
|
export const DB_WORKFLOW_TOOL_NAMES = CONTRACT_WORKFLOW_TOOL_NAMES;
|
|
9
9
|
export const WORKFLOW_TOOL_ALIAS_PAIRS = WORKFLOW_TOOL_CONTRACTS.flatMap((tool) => tool.aliases.map((alias) => ({ canonical: tool.canonicalName, alias })));
|
|
10
10
|
export const WORKFLOW_TOOL_ALIAS_TO_CANONICAL = Object.fromEntries(WORKFLOW_TOOL_ALIAS_PAIRS.map(({ alias, canonical }) => [alias, canonical]));
|
|
11
|
-
const WORKFLOW_MCP_ADAPTER_TOOL_NAMES = [
|
|
11
|
+
export const WORKFLOW_MCP_ADAPTER_TOOL_NAMES = [
|
|
12
12
|
"gsd_cancel",
|
|
13
13
|
"gsd_captures",
|
|
14
14
|
"ask_user_questions",
|