@opengsd/gsd-pi 1.2.0-dev.4c756166 → 1.2.0-dev.822c9439
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 +9 -5
- package/dist/resource-loader.js +116 -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 +5 -2
- 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/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +38 -6
- 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 +122 -58
- package/dist/resources/extensions/gsd/auto/phases.js +54 -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 +43 -14
- package/dist/resources/extensions/gsd/auto-prompts.js +81 -19
- package/dist/resources/extensions/gsd/auto-start.js +24 -26
- 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-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +49 -353
- package/dist/resources/extensions/gsd/auto.js +45 -21
- 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 +32 -12
- 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 +229 -36
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +319 -71
- 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 +5 -15
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- 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/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +398 -0
- package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
- package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
- package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
- package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
- package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
- 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 +5 -11
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +6 -21
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
- 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/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +3 -0
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +172 -2048
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +57 -8
- 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 +20 -9
- package/dist/resources/extensions/gsd/migration-auto-check.js +24 -3
- 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/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +3 -0
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/paths.js +37 -24
- 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/preferences.js +14 -0
- 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 +41 -87
- 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/safety/evidence-collector.js +37 -4
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +6 -20
- package/dist/resources/extensions/gsd/status-guards.js +56 -8
- 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 +46 -55
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +10 -8
- 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 +13 -31
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +16 -35
- 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/skip-slice.js +18 -36
- 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/undo.js +8 -7
- 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 +293 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +52 -29
- package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
- package/dist/resources/extensions/gsd/worktree-root.js +28 -6
- package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
- package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
- 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 +11 -11
- 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/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +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/api/visualizer/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 +11 -11
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
- 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 -11
- package/package.json +1 -1
- 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 +145 -59
- 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 +158 -17
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +132 -17
- 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/capability-patches.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.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 +5 -2
- 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/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +40 -4
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +28 -0
- 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-deps.ts +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +4 -1
- package/src/resources/extensions/gsd/auto/orchestrator.ts +137 -61
- package/src/resources/extensions/gsd/auto/phases.ts +74 -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 +52 -13
- package/src/resources/extensions/gsd/auto-prompts.ts +118 -35
- package/src/resources/extensions/gsd/auto-start.ts +24 -29
- 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-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +55 -365
- package/src/resources/extensions/gsd/auto.ts +64 -25
- 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 +33 -12
- 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 +270 -37
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +368 -78
- 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 +5 -16
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- 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/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +490 -0
- package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
- package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
- package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
- package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
- package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
- 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 +5 -13
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -22
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
- 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/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +3 -0
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +176 -2375
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +71 -31
- 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 +18 -7
- package/src/resources/extensions/gsd/migration-auto-check.ts +28 -3
- 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/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +3 -0
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/paths.ts +42 -22
- 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/preferences.ts +18 -0
- 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 +47 -88
- 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/safety/evidence-collector.ts +36 -4
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +9 -21
- package/src/resources/extensions/gsd/status-guards.ts +59 -8
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +123 -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-paused-ui-cleanup.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
- 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 +44 -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/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/evidence-xref-gsd-exec.test.ts +157 -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/file-change-validator.test.ts +33 -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 +58 -15
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +74 -59
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- 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/migration-auto-check.test.ts +85 -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/recovery-classification-illegal-transition.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +248 -1
- 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/safety-harness-false-positives.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +43 -6
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
- 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-lifecycle.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +22 -1
- package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +24 -2
- 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 +109 -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 +45 -70
- package/src/resources/extensions/gsd/tools/complete-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +9 -8
- 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 +13 -40
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +16 -44
- 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/skip-slice.ts +18 -44
- 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/undo.ts +9 -8
- 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 +314 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +13 -9
- package/src/resources/extensions/gsd/worktree-manager.ts +53 -29
- package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
- package/src/resources/extensions/gsd/worktree-root.ts +29 -6
- package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
- package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
- 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/{DUFWcMFRH3iXh7d2fbrOF → yWwBo-w09Y_W-nmeeWFRp}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{DUFWcMFRH3iXh7d2fbrOF → yWwBo-w09Y_W-nmeeWFRp}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal presentation helpers for CLI-side notices on stderr — warnings,
|
|
3
|
+
* hints, and names. Pairs with the extension-side glyph set in
|
|
4
|
+
* resources/extensions/shared/ui.ts. Adopt incrementally: banner-shaped CLI
|
|
5
|
+
* surfaces (worktree banners today; update checks et al. as they're touched)
|
|
6
|
+
* should render through these instead of ad-hoc chalk.
|
|
7
|
+
*/
|
|
8
|
+
/** Dim "[gsd] " line tag that prefixes CLI banner lines. */
|
|
9
|
+
export declare function gsdTag(): string;
|
|
10
|
+
/** A yellow warning fragment. */
|
|
11
|
+
export declare function warn(text: string): string;
|
|
12
|
+
/** A dim "what to do next" hint fragment. */
|
|
13
|
+
export declare function hint(text: string): string;
|
|
14
|
+
/** A cyan user-supplied name (worktree, branch, file). */
|
|
15
|
+
export declare function name(text: string): string;
|
|
16
|
+
/** One banner line: tagged warning followed by a tagged hint line. */
|
|
17
|
+
export declare function bannerLines(warning: string, hintText: string): string;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal presentation helpers for CLI-side notices on stderr — warnings,
|
|
3
|
+
* hints, and names. Pairs with the extension-side glyph set in
|
|
4
|
+
* resources/extensions/shared/ui.ts. Adopt incrementally: banner-shaped CLI
|
|
5
|
+
* surfaces (worktree banners today; update checks et al. as they're touched)
|
|
6
|
+
* should render through these instead of ad-hoc chalk.
|
|
7
|
+
*/
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
/** Dim "[gsd] " line tag that prefixes CLI banner lines. */
|
|
10
|
+
export function gsdTag() {
|
|
11
|
+
return chalk.dim('[gsd] ');
|
|
12
|
+
}
|
|
13
|
+
/** A yellow warning fragment. */
|
|
14
|
+
export function warn(text) {
|
|
15
|
+
return chalk.yellow(text);
|
|
16
|
+
}
|
|
17
|
+
/** A dim "what to do next" hint fragment. */
|
|
18
|
+
export function hint(text) {
|
|
19
|
+
return chalk.dim(text);
|
|
20
|
+
}
|
|
21
|
+
/** A cyan user-supplied name (worktree, branch, file). */
|
|
22
|
+
export function name(text) {
|
|
23
|
+
return chalk.cyan(text);
|
|
24
|
+
}
|
|
25
|
+
/** One banner line: tagged warning followed by a tagged hint line. */
|
|
26
|
+
export function bannerLines(warning, hintText) {
|
|
27
|
+
return gsdTag() + warning + '\n' + gsdTag() + hint(hintText) + '\n\n';
|
|
28
|
+
}
|
package/dist/cli.js
CHANGED
|
@@ -524,7 +524,7 @@ const authStorage = AuthStorage.create(authFilePath);
|
|
|
524
524
|
markStartup('AuthStorage.create');
|
|
525
525
|
loadStoredEnvKeys(authStorage);
|
|
526
526
|
migratePiCredentials(authStorage);
|
|
527
|
-
// Resolve models.json path
|
|
527
|
+
// Resolve models.json path
|
|
528
528
|
const { resolveModelsJsonPath } = await import('./models-resolver.js');
|
|
529
529
|
const modelsJsonPath = resolveModelsJsonPath();
|
|
530
530
|
const modelRegistry = ModelRegistry.create(authStorage, modelsJsonPath);
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* and classifies commands as quick (single-turn) vs long-running.
|
|
6
6
|
*
|
|
7
7
|
* Also defines exit code constants and the status→exit-code mapping function.
|
|
8
|
+
*
|
|
9
|
+
* The stop/pause notice vocabulary itself (prefixes + message classifiers)
|
|
10
|
+
* lives in the Stop Notice module — the same module the emitters format with,
|
|
11
|
+
* so wording stays in lockstep with detection.
|
|
8
12
|
*/
|
|
9
13
|
export declare const EXIT_SUCCESS = 0;
|
|
10
14
|
export declare const EXIT_ERROR = 1;
|
|
@@ -42,8 +46,6 @@ export declare function mapStatusToExitCode(status: string): number;
|
|
|
42
46
|
*
|
|
43
47
|
* Blocked detection is separate — checked via isBlockedNotification.
|
|
44
48
|
*/
|
|
45
|
-
export declare const PAUSED_PREFIXES: string[];
|
|
46
|
-
export declare const TERMINAL_PREFIXES: string[];
|
|
47
49
|
export declare const IDLE_TIMEOUT_MS = 15000;
|
|
48
50
|
export declare const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120000;
|
|
49
51
|
export declare function canonicalHeadlessToolName(toolName: string | undefined): string;
|
package/dist/headless-events.js
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
* and classifies commands as quick (single-turn) vs long-running.
|
|
6
6
|
*
|
|
7
7
|
* Also defines exit code constants and the status→exit-code mapping function.
|
|
8
|
+
*
|
|
9
|
+
* The stop/pause notice vocabulary itself (prefixes + message classifiers)
|
|
10
|
+
* lives in the Stop Notice module — the same module the emitters format with,
|
|
11
|
+
* so wording stays in lockstep with detection.
|
|
8
12
|
*/
|
|
13
|
+
import { isBlockedNoticeMessage, isManualResolutionNotice, isPauseNotice, isTerminalNotice, } from './resources/extensions/gsd/stop-notice.js';
|
|
14
|
+
import { canonicalToolName } from './resources/extensions/gsd/engine-hook-contract.js';
|
|
9
15
|
// ---------------------------------------------------------------------------
|
|
10
16
|
// Exit Code Constants
|
|
11
17
|
// ---------------------------------------------------------------------------
|
|
@@ -65,40 +71,19 @@ export function mapStatusToExitCode(status) {
|
|
|
65
71
|
*
|
|
66
72
|
* Blocked detection is separate — checked via isBlockedNotification.
|
|
67
73
|
*/
|
|
68
|
-
export const PAUSED_PREFIXES = ['auto-mode paused', 'step-mode paused'];
|
|
69
|
-
export const TERMINAL_PREFIXES = [
|
|
70
|
-
'auto-mode stopped',
|
|
71
|
-
'step-mode stopped',
|
|
72
|
-
'auto-mode complete',
|
|
73
|
-
'no active milestone',
|
|
74
|
-
'auto-mode idle',
|
|
75
|
-
];
|
|
76
74
|
export const IDLE_TIMEOUT_MS = 15_000;
|
|
77
75
|
// new-milestone is a long-running creative task where the LLM may pause
|
|
78
76
|
// between tool calls (e.g. after mkdir, before writing files). Use a
|
|
79
77
|
// longer idle timeout to avoid killing the session prematurely (#808).
|
|
80
78
|
export const NEW_MILESTONE_IDLE_TIMEOUT_MS = 120_000;
|
|
81
79
|
const INTERACTIVE_HEADLESS_TOOLS = new Set(['ask_user_questions', 'secure_env_collect']);
|
|
80
|
+
// Delegates to the shared normalizer seam (engine-hook-contract.ts) instead of
|
|
81
|
+
// a hand-rolled parser. Behavior differs from the old parser only on malformed
|
|
82
|
+
// MCP names: `mcp____tool` (empty server) and `mcp__server__` (empty tool) are
|
|
83
|
+
// now returned unchanged rather than partially stripped — neither can match a
|
|
84
|
+
// real tool name, so detection behavior is unaffected.
|
|
82
85
|
export function canonicalHeadlessToolName(toolName) {
|
|
83
|
-
|
|
84
|
-
if (!name.startsWith('mcp__'))
|
|
85
|
-
return name;
|
|
86
|
-
const toolSeparator = name.indexOf('__', 'mcp__'.length);
|
|
87
|
-
return toolSeparator >= 0 ? name.slice(toolSeparator + 2) : name;
|
|
88
|
-
}
|
|
89
|
-
function isManualResolutionNotification(message) {
|
|
90
|
-
return (message.includes('resolve manually and re-run /gsd auto') ||
|
|
91
|
-
message.includes('resolve conflicts manually and run /gsd auto to resume') ||
|
|
92
|
-
message.includes('resolve and run /gsd auto to resume'));
|
|
93
|
-
}
|
|
94
|
-
function isNonBlockingPauseNotification(message) {
|
|
95
|
-
return message.includes('idempotent advance: unit already active');
|
|
96
|
-
}
|
|
97
|
-
function isPauseNotification(message) {
|
|
98
|
-
return PAUSED_PREFIXES.some((prefix) => message.startsWith(prefix));
|
|
99
|
-
}
|
|
100
|
-
function isPauseNotificationRequiringIntervention(message) {
|
|
101
|
-
return isPauseNotification(message) && !isNonBlockingPauseNotification(message);
|
|
86
|
+
return canonicalToolName(String(toolName ?? ''));
|
|
102
87
|
}
|
|
103
88
|
function getCommandBlockContent(event) {
|
|
104
89
|
if (event.type !== 'message_start' && event.type !== 'message_end')
|
|
@@ -122,20 +107,15 @@ export function isTerminalNotification(event) {
|
|
|
122
107
|
if (event.type !== 'extension_ui_request' || event.method !== 'notify')
|
|
123
108
|
return false;
|
|
124
109
|
const message = String(event.message ?? '').toLowerCase();
|
|
125
|
-
return (
|
|
126
|
-
isPauseNotification(message) ||
|
|
127
|
-
isManualResolutionNotification(message));
|
|
110
|
+
return isTerminalNotice(message) || isPauseNotice(message) || isManualResolutionNotice(message);
|
|
128
111
|
}
|
|
129
112
|
export function isBlockedNotification(event) {
|
|
130
113
|
if (isBlockingCommandBlock(event))
|
|
131
114
|
return true;
|
|
132
115
|
if (event.type !== 'extension_ui_request' || event.method !== 'notify')
|
|
133
116
|
return false;
|
|
134
|
-
const message = String(event.message ?? '').toLowerCase();
|
|
135
117
|
// Recoverable pauses need operator intervention in headless mode.
|
|
136
|
-
return (message
|
|
137
|
-
isPauseNotificationRequiringIntervention(message) ||
|
|
138
|
-
isManualResolutionNotification(message));
|
|
118
|
+
return isBlockedNoticeMessage(String(event.message ?? '').toLowerCase());
|
|
139
119
|
}
|
|
140
120
|
export function isMilestoneReadyNotification(event) {
|
|
141
121
|
if (event.type !== 'extension_ui_request' || event.method !== 'notify')
|
package/dist/mcp-server.js
CHANGED
|
@@ -29,6 +29,7 @@ function isPlainObject(value) {
|
|
|
29
29
|
// built via a template string so TypeScript's NodeNext resolver treats them as
|
|
30
30
|
// `any` and skips static checking.
|
|
31
31
|
const MCP_PKG = '@modelcontextprotocol/sdk';
|
|
32
|
+
import { sanitizeSchemaForMoonshot } from '@gsd/pi-ai';
|
|
32
33
|
export function mcpSdkSpecifier(subpath) {
|
|
33
34
|
return `${MCP_PKG}/${subpath}.js`;
|
|
34
35
|
}
|
|
@@ -65,7 +66,7 @@ export async function startMcpServer(options) {
|
|
|
65
66
|
tools: tools.map((t) => ({
|
|
66
67
|
name: t.name,
|
|
67
68
|
description: t.description,
|
|
68
|
-
inputSchema: t.parameters,
|
|
69
|
+
inputSchema: sanitizeSchemaForMoonshot(t.parameters),
|
|
69
70
|
})),
|
|
70
71
|
}));
|
|
71
72
|
// tools/call — execute the requested tool and return content blocks.
|
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Models.json resolution
|
|
2
|
+
* Models.json resolution for GSD.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* experience, this module provides resolution logic that:
|
|
6
|
-
*
|
|
7
|
-
* 1. Reads ~/.gsd/agent/models.json if it exists
|
|
8
|
-
* 2. Falls back to ~/.pi/agent/models.json if GSD file doesn't exist
|
|
9
|
-
* 3. Merges both files if both exist (GSD takes precedence)
|
|
4
|
+
* Uses ~/.gsd/agent/models.json exclusively.
|
|
10
5
|
*/
|
|
11
6
|
/**
|
|
12
|
-
* Resolve the path to models.json
|
|
13
|
-
*
|
|
14
|
-
* Priority:
|
|
15
|
-
* 1. ~/.gsd/agent/models.json (exists) → return this path
|
|
16
|
-
* 2. ~/.pi/agent/models.json (exists) → return this path (fallback)
|
|
17
|
-
* 3. Neither exists → return GSD path (will be created)
|
|
7
|
+
* Resolve the path to models.json.
|
|
18
8
|
*
|
|
19
9
|
* @returns The path to use for models.json
|
|
20
10
|
*/
|
package/dist/models-resolver.js
CHANGED
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Models.json resolution
|
|
2
|
+
* Models.json resolution for GSD.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* experience, this module provides resolution logic that:
|
|
6
|
-
*
|
|
7
|
-
* 1. Reads ~/.gsd/agent/models.json if it exists
|
|
8
|
-
* 2. Falls back to ~/.pi/agent/models.json if GSD file doesn't exist
|
|
9
|
-
* 3. Merges both files if both exist (GSD takes precedence)
|
|
4
|
+
* Uses ~/.gsd/agent/models.json exclusively.
|
|
10
5
|
*/
|
|
11
|
-
import { existsSync } from 'node:fs';
|
|
12
|
-
import { homedir } from 'node:os';
|
|
13
6
|
import { join } from 'node:path';
|
|
14
7
|
import { agentDir } from './app-paths.js';
|
|
15
8
|
const GSD_MODELS_PATH = join(agentDir, 'models.json');
|
|
16
|
-
const PI_MODELS_PATH = join(homedir(), '.pi', 'agent', 'models.json');
|
|
17
9
|
/**
|
|
18
|
-
* Resolve the path to models.json
|
|
19
|
-
*
|
|
20
|
-
* Priority:
|
|
21
|
-
* 1. ~/.gsd/agent/models.json (exists) → return this path
|
|
22
|
-
* 2. ~/.pi/agent/models.json (exists) → return this path (fallback)
|
|
23
|
-
* 3. Neither exists → return GSD path (will be created)
|
|
10
|
+
* Resolve the path to models.json.
|
|
24
11
|
*
|
|
25
12
|
* @returns The path to use for models.json
|
|
26
13
|
*/
|
|
27
14
|
export function resolveModelsJsonPath() {
|
|
28
|
-
if (existsSync(GSD_MODELS_PATH)) {
|
|
29
|
-
return GSD_MODELS_PATH;
|
|
30
|
-
}
|
|
31
|
-
if (existsSync(PI_MODELS_PATH)) {
|
|
32
|
-
return PI_MODELS_PATH;
|
|
33
|
-
}
|
|
34
15
|
return GSD_MODELS_PATH;
|
|
35
16
|
}
|
|
@@ -22,6 +22,8 @@ export declare function readManagedResourceVersion(agentDir: string): string | n
|
|
|
22
22
|
* directory (e.g. pre-install verification).
|
|
23
23
|
*/
|
|
24
24
|
export declare function computeResourceFingerprint(rootDir?: string): string;
|
|
25
|
+
export declare function collectGsdBrowserPackageSkillReferences(content: string): string[];
|
|
26
|
+
export declare function hasStaleGsdBrowserPackageSkill(skillsDir: string): boolean;
|
|
25
27
|
export declare function getNewerManagedResourceVersion(agentDir: string, currentVersion: string): string | null;
|
|
26
28
|
/**
|
|
27
29
|
* Syncs a single bundled resource directory into the agent directory.
|
|
@@ -49,18 +51,20 @@ export declare function reconcileMergedNodeModules(agentNodeModules: string, hoi
|
|
|
49
51
|
/** Build a cache fingerprint from packageRoot + sorted entry names of both directories */
|
|
50
52
|
export declare function mergedFingerprint(hoisted: string, internal: string): string;
|
|
51
53
|
/**
|
|
52
|
-
*
|
|
54
|
+
* Initializes managed resources under agentDir (~/.gsd/agent/).
|
|
53
55
|
*
|
|
54
56
|
* - extensions/ → ~/.gsd/agent/extensions/ (overwrite when version changes)
|
|
55
57
|
* - shared/ → ~/.gsd/agent/shared/ (overwrite when version changes)
|
|
56
58
|
* - agents/ → ~/.gsd/agent/agents/ (overwrite when version changes)
|
|
57
59
|
* - skills/ → ~/.gsd/agent/skills/ (overwrite when version changes)
|
|
60
|
+
* - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
|
|
58
61
|
* - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
|
|
59
62
|
*
|
|
60
|
-
* Skips the copy when the managed-resources.json version
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
63
|
+
* Skips the full copy only when the managed-resources.json version, content
|
|
64
|
+
* fingerprint, and package-owned gsd-browser skill all match the current
|
|
65
|
+
* install, avoiding ~128ms of synchronous cpSync on steady-state startup.
|
|
66
|
+
* After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
|
|
67
|
+
* runs once to land the new resources.
|
|
64
68
|
*
|
|
65
69
|
* Inspectable: `ls ~/.gsd/agent/extensions/`
|
|
66
70
|
*/
|
package/dist/resource-loader.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { chmodSync, copyFileSync, cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readlinkSync, readdirSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { createRequire } from 'node:module';
|
|
4
5
|
import { basename, dirname, join, relative, resolve } from 'node:path';
|
|
5
6
|
import { fileURLToPath } from 'node:url';
|
|
6
7
|
import { compareSemver } from './update-check.js';
|
|
@@ -24,6 +25,9 @@ const resourcesDir = resolveBundledResourcesDirFromPackageRoot(packageRoot);
|
|
|
24
25
|
const bundledExtensionsDir = join(resourcesDir, 'extensions');
|
|
25
26
|
const resourceVersionManifestName = 'managed-resources.json';
|
|
26
27
|
const resourceFingerprintFileName = '.managed-resources-content-hash';
|
|
28
|
+
const gsdBrowserSkillName = 'gsd-browser';
|
|
29
|
+
const requireFromResourceLoader = createRequire(import.meta.url);
|
|
30
|
+
const gsdBrowserSkillReferenceDirs = ['docs', 'scripts', 'gsd-browser-skill'];
|
|
27
31
|
export { discoverExtensionEntryPaths } from './extension-discovery.js';
|
|
28
32
|
export function getExtensionKey(entryPath, extensionsDir) {
|
|
29
33
|
const relPath = relative(extensionsDir, entryPath);
|
|
@@ -153,6 +157,105 @@ function getCurrentResourceFingerprint() {
|
|
|
153
157
|
}
|
|
154
158
|
return computeResourceFingerprint();
|
|
155
159
|
}
|
|
160
|
+
function resolveGsdBrowserPackageSkillPath() {
|
|
161
|
+
try {
|
|
162
|
+
return requireFromResourceLoader.resolve('@opengsd/gsd-browser/SKILL.md');
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export function collectGsdBrowserPackageSkillReferences(content) {
|
|
169
|
+
const refs = new Set();
|
|
170
|
+
const referencePattern = /`((?:\.\/)?(?:docs|scripts|gsd-browser-skill)\/[^`\s]+)`/g;
|
|
171
|
+
for (const match of content.matchAll(referencePattern)) {
|
|
172
|
+
const ref = normalizeGsdBrowserPackageSkillReference(match[1]);
|
|
173
|
+
if (ref)
|
|
174
|
+
refs.add(ref);
|
|
175
|
+
}
|
|
176
|
+
return [...refs].sort();
|
|
177
|
+
}
|
|
178
|
+
function normalizeGsdBrowserPackageSkillReference(ref) {
|
|
179
|
+
if (!ref)
|
|
180
|
+
return null;
|
|
181
|
+
const normalized = ref
|
|
182
|
+
.replace(/^\.\//, '')
|
|
183
|
+
.replace(/[),.;:]+$/, '');
|
|
184
|
+
if (normalized.includes('..') || normalized.startsWith('/'))
|
|
185
|
+
return null;
|
|
186
|
+
if (!gsdBrowserSkillReferenceDirs.some(dir => normalized === dir || normalized.startsWith(`${dir}/`))) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
return normalized;
|
|
190
|
+
}
|
|
191
|
+
function readGsdBrowserPackageSkillBundle(sourceSkillPath) {
|
|
192
|
+
const skillContent = readFileSync(sourceSkillPath);
|
|
193
|
+
const files = new Map([['SKILL.md', skillContent]]);
|
|
194
|
+
const supportRefs = collectGsdBrowserPackageSkillReferences(skillContent.toString('utf-8'));
|
|
195
|
+
const sourceDir = dirname(sourceSkillPath);
|
|
196
|
+
for (const relPath of supportRefs) {
|
|
197
|
+
const sourcePath = join(sourceDir, relPath);
|
|
198
|
+
if (existsSync(sourcePath)) {
|
|
199
|
+
files.set(relPath, readFileSync(sourcePath));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return files;
|
|
203
|
+
}
|
|
204
|
+
export function hasStaleGsdBrowserPackageSkill(skillsDir) {
|
|
205
|
+
const targetDir = join(skillsDir, gsdBrowserSkillName);
|
|
206
|
+
const sourceSkillPath = resolveGsdBrowserPackageSkillPath();
|
|
207
|
+
// Package unresolvable. syncGsdBrowserPackageSkill is a no-op in this case
|
|
208
|
+
// (it preserves any existing managed skill), so reporting "stale" here
|
|
209
|
+
// would drive a full resource resync on every launch that the sync cannot
|
|
210
|
+
// actually satisfy. Keep the existing managed skill in place until the
|
|
211
|
+
// package becomes resolvable again or the manifest fingerprint changes.
|
|
212
|
+
if (!sourceSkillPath)
|
|
213
|
+
return false;
|
|
214
|
+
try {
|
|
215
|
+
const sourceDir = dirname(sourceSkillPath);
|
|
216
|
+
const skillContent = readFileSync(sourceSkillPath, 'utf-8');
|
|
217
|
+
for (const [relPath, content] of readGsdBrowserPackageSkillBundle(sourceSkillPath)) {
|
|
218
|
+
const targetPath = join(targetDir, relPath);
|
|
219
|
+
if (!existsSync(targetPath) || !readFileSync(targetPath).equals(content)) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Only flag SKILL.md references when sync can actually correct them.
|
|
224
|
+
// The bundle loop above already covers "source has it, target missing".
|
|
225
|
+
// A reference the package itself does not ship (source missing) is only
|
|
226
|
+
// worth a resync if the target still has a stale copy that sync should
|
|
227
|
+
// clean up; missing on both sides is the steady state when upstream
|
|
228
|
+
// omits files referenced from SKILL.md and is not actionable here.
|
|
229
|
+
for (const relPath of collectGsdBrowserPackageSkillReferences(skillContent)) {
|
|
230
|
+
const sourcePath = join(sourceDir, relPath);
|
|
231
|
+
const targetPath = join(targetDir, relPath);
|
|
232
|
+
if (!existsSync(sourcePath) && existsSync(targetPath)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function syncGsdBrowserPackageSkill(skillsDir) {
|
|
243
|
+
const targetDir = join(skillsDir, gsdBrowserSkillName);
|
|
244
|
+
const sourceSkillPath = resolveGsdBrowserPackageSkillPath();
|
|
245
|
+
if (!sourceSkillPath)
|
|
246
|
+
return;
|
|
247
|
+
makeTreeWritable(targetDir);
|
|
248
|
+
rmSync(targetDir, { recursive: true, force: true });
|
|
249
|
+
for (const [relPath, content] of readGsdBrowserPackageSkillBundle(sourceSkillPath)) {
|
|
250
|
+
const targetPath = join(targetDir, relPath);
|
|
251
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
252
|
+
writeFileSync(targetPath, content);
|
|
253
|
+
if (relPath.startsWith('scripts/') && relPath.endsWith('.sh')) {
|
|
254
|
+
chmodSync(targetPath, 0o755);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
makeTreeWritable(targetDir);
|
|
258
|
+
}
|
|
156
259
|
function collectFileEntries(dir, root, out) {
|
|
157
260
|
if (!existsSync(dir))
|
|
158
261
|
return;
|
|
@@ -557,18 +660,20 @@ function pruneRemovedBundledExtensions(manifest, agentDir) {
|
|
|
557
660
|
removeFileIfStale('env-utils.js');
|
|
558
661
|
}
|
|
559
662
|
/**
|
|
560
|
-
*
|
|
663
|
+
* Initializes managed resources under agentDir (~/.gsd/agent/).
|
|
561
664
|
*
|
|
562
665
|
* - extensions/ → ~/.gsd/agent/extensions/ (overwrite when version changes)
|
|
563
666
|
* - shared/ → ~/.gsd/agent/shared/ (overwrite when version changes)
|
|
564
667
|
* - agents/ → ~/.gsd/agent/agents/ (overwrite when version changes)
|
|
565
668
|
* - skills/ → ~/.gsd/agent/skills/ (overwrite when version changes)
|
|
669
|
+
* - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
|
|
566
670
|
* - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
|
|
567
671
|
*
|
|
568
|
-
* Skips the copy when the managed-resources.json version
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
672
|
+
* Skips the full copy only when the managed-resources.json version, content
|
|
673
|
+
* fingerprint, and package-owned gsd-browser skill all match the current
|
|
674
|
+
* install, avoiding ~128ms of synchronous cpSync on steady-state startup.
|
|
675
|
+
* After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
|
|
676
|
+
* runs once to land the new resources.
|
|
572
677
|
*
|
|
573
678
|
* Inspectable: `ls ~/.gsd/agent/extensions/`
|
|
574
679
|
*/
|
|
@@ -603,11 +708,13 @@ export function initResources(agentDir, skillsDir = join(agentDir, 'skills')) {
|
|
|
603
708
|
const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(extensionsDir, bundledExtensionsDir);
|
|
604
709
|
const hasMissingSharedFiles = hasMissingBundledResourceFiles(join(agentDir, 'shared'), join(resourcesDir, 'shared'));
|
|
605
710
|
const hasMissingSkillFiles = hasMissingBundledResourceFiles(skillsDir, join(resourcesDir, 'skills'));
|
|
711
|
+
const hasStaleGsdBrowserSkill = hasStaleGsdBrowserPackageSkill(skillsDir);
|
|
606
712
|
if (manifest.contentHash &&
|
|
607
713
|
manifest.contentHash === currentHash &&
|
|
608
714
|
!hasStaleExtensionFiles &&
|
|
609
715
|
!hasMissingSharedFiles &&
|
|
610
|
-
!hasMissingSkillFiles
|
|
716
|
+
!hasMissingSkillFiles &&
|
|
717
|
+
!hasStaleGsdBrowserSkill) {
|
|
611
718
|
return;
|
|
612
719
|
}
|
|
613
720
|
}
|
|
@@ -616,6 +723,7 @@ export function initResources(agentDir, skillsDir = join(agentDir, 'skills')) {
|
|
|
616
723
|
syncResourceDir(join(resourcesDir, 'shared'), join(agentDir, 'shared'));
|
|
617
724
|
syncResourceDir(join(resourcesDir, 'agents'), join(agentDir, 'agents'));
|
|
618
725
|
syncResourceDir(join(resourcesDir, 'skills'), skillsDir);
|
|
726
|
+
syncGsdBrowserPackageSkill(skillsDir);
|
|
619
727
|
// Sync GSD-WORKFLOW.md to agentDir as a fallback for when GSD_WORKFLOW_PATH
|
|
620
728
|
// env var is not set (e.g. fork/dev builds, alternative entry points).
|
|
621
729
|
const workflowSrc = join(resourcesDir, 'GSD-WORKFLOW.md');
|
|
@@ -701,9 +809,8 @@ function collectRelativeFiles(rootDir) {
|
|
|
701
809
|
return files;
|
|
702
810
|
}
|
|
703
811
|
/**
|
|
704
|
-
* Constructs a DefaultResourceLoader that loads extensions from
|
|
705
|
-
* ~/.gsd/agent/extensions/ (GSD's default)
|
|
706
|
-
* This allows users to use extensions from either location.
|
|
812
|
+
* Constructs a DefaultResourceLoader that loads extensions from
|
|
813
|
+
* ~/.gsd/agent/extensions/ (GSD's default) only.
|
|
707
814
|
*/
|
|
708
815
|
// Cache bundled extension keys at module load — avoids re-scanning the extensions
|
|
709
816
|
// directory in buildResourceLoader() (already scanned by loader.ts for env var).
|
|
@@ -718,19 +825,8 @@ export async function buildResourceLoader(agentDir, options = {}) {
|
|
|
718
825
|
const { DefaultResourceLoader } = await loadPiCodingAgentModule();
|
|
719
826
|
const { sortExtensionPaths } = await import('./extension-sort.js');
|
|
720
827
|
const registry = loadRegistry();
|
|
721
|
-
const piAgentDir = join(homedir(), '.pi', 'agent');
|
|
722
|
-
const piExtensionsDir = join(piAgentDir, 'extensions');
|
|
723
828
|
const bundledKeys = getBundledExtensionKeys();
|
|
724
|
-
const piExtensionPaths = discoverExtensionEntryPaths(piExtensionsDir)
|
|
725
|
-
.filter((entryPath) => !bundledKeys.has(getExtensionKey(entryPath, piExtensionsDir)))
|
|
726
|
-
.filter((entryPath) => {
|
|
727
|
-
const manifest = readManifestFromEntryPath(entryPath);
|
|
728
|
-
if (!manifest)
|
|
729
|
-
return true;
|
|
730
|
-
return isExtensionEnabled(registry, manifest.id);
|
|
731
|
-
});
|
|
732
829
|
const additionalExtensionPaths = [
|
|
733
|
-
...piExtensionPaths,
|
|
734
830
|
...(options.additionalExtensionPaths ?? []),
|
|
735
831
|
];
|
|
736
832
|
return new DefaultResourceLoader({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
dab8e4d2f1341f51
|
|
@@ -470,13 +470,13 @@ key_decisions: []
|
|
|
470
470
|
|
|
471
471
|
**After a slice completes:**
|
|
472
472
|
1. Write slice `S##-SUMMARY.md` (compresses all task summaries).
|
|
473
|
-
2. Write slice `S##-UAT.md` — a
|
|
473
|
+
2. Write slice `S##-UAT.md` — a human test script derived from the slice's must-haves and demo sentence.
|
|
474
474
|
3. Mark the slice checkbox in `M###-ROADMAP.md` as `[x]`.
|
|
475
475
|
4. Update `STATE.md` with new position.
|
|
476
476
|
5. Update milestone `M###-SUMMARY.md` with the completed slice's contributions.
|
|
477
|
-
6. Continue to next slice immediately.
|
|
478
|
-
7. If
|
|
479
|
-
8. If all slices done → milestone complete.
|
|
477
|
+
6. Continue to next slice immediately. UAT can run after slice completion; automatic milestone closure requires each slice assessment to record `PASS`.
|
|
478
|
+
7. If UAT is missing or non-PASS at milestone closeout, run `/gsd dispatch uat`, request a slice-specific UAT rerun when needed, or create remediation work with `/gsd dispatch reassess`.
|
|
479
|
+
8. If all slices are done and UAT plus milestone validation pass → milestone complete.
|
|
480
480
|
|
|
481
481
|
---
|
|
482
482
|
|
|
@@ -605,6 +605,7 @@ Commit types: `feat`, `fix`, `test`, `refactor`, `docs`, `perf`, `chore`
|
|
|
605
605
|
|---------|-----|
|
|
606
606
|
| Bad task | Revert the task commit on the active branch |
|
|
607
607
|
| Bad milestone squash | Revert the squash commit on the integration branch |
|
|
608
|
+
| UAT missing or non-PASS at closeout | Run `/gsd dispatch uat`, request a slice-specific UAT rerun when needed, or create remediation work with `/gsd dispatch reassess` |
|
|
608
609
|
| UAT failure after merge | Create follow-up fix tasks in the current or next milestone |
|
|
609
610
|
|
|
610
611
|
---
|