@opengsd/gsd-pi 1.2.0-dev.4c756166 → 1.2.0-dev.5457a158
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 +7 -29
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/resource-loader.js +2 -14
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/bg-shell/utilities.js +5 -2
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +35 -4
- package/dist/resources/extensions/gsd/auto/orchestrator.js +33 -4
- package/dist/resources/extensions/gsd/auto/phases.js +6 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +19 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +3 -0
- package/dist/resources/extensions/gsd/auto-start.js +12 -14
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +7 -16
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +35 -352
- package/dist/resources/extensions/gsd/auto.js +8 -20
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +9 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +86 -6
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +30 -4
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/captures.js +5 -15
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- package/dist/resources/extensions/gsd/crash-recovery.js +4 -12
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +372 -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/doctor-environment.js +5 -11
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -3
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
- package/dist/resources/extensions/gsd/error-classifier.js +9 -0
- 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-db.js +171 -2048
- package/dist/resources/extensions/gsd/guidance.js +98 -0
- package/dist/resources/extensions/gsd/guided-flow.js +51 -5
- 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/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/paths.js +37 -24
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-models.js +12 -46
- package/dist/resources/extensions/gsd/preferences.js +14 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/replan-slice.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/recovery-classification.js +41 -87
- 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/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +1 -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-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +24 -43
- package/dist/resources/extensions/gsd/tools/exec-tool.js +5 -8
- package/dist/resources/extensions/gsd/tools/plan-slice.js +12 -6
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +11 -29
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +14 -33
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- 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 +9 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +350 -0
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -182
- 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 +9 -1
- package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
- 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/skills/gsd-browser/SKILL.md +1 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/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/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 +9 -9
- 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 +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/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/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/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +6 -3
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +8 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +46 -21
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +294 -239
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +260 -256
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +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/package.json +7 -7
- 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/extensions/bg-shell/utilities.ts +5 -2
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +37 -2
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +28 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
- package/src/resources/extensions/gsd/auto/orchestrator.ts +39 -5
- package/src/resources/extensions/gsd/auto/phases.ts +10 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +25 -7
- package/src/resources/extensions/gsd/auto-prompts.ts +3 -0
- package/src/resources/extensions/gsd/auto-start.ts +12 -15
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +10 -17
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +41 -364
- package/src/resources/extensions/gsd/auto.ts +20 -24
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -5
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +10 -6
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +87 -6
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +29 -3
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/captures.ts +5 -16
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- package/src/resources/extensions/gsd/crash-recovery.ts +3 -9
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +453 -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/doctor-environment.ts +5 -13
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +3 -3
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
- package/src/resources/extensions/gsd/error-classifier.ts +11 -0
- 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-db.ts +173 -2373
- package/src/resources/extensions/gsd/guidance.ts +139 -0
- package/src/resources/extensions/gsd/guided-flow.ts +50 -5
- 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/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/paths.ts +42 -22
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-models.ts +10 -46
- package/src/resources/extensions/gsd/preferences.ts +18 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/replan-slice.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/recovery-classification.ts +47 -88
- 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/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +4 -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-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-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/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/evidence-xref-gsd-exec.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/guidance.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +51 -4
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +54 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +85 -1
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- 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/runtime-invariant-modules.test.ts +1 -0
- 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/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/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +23 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +2 -2
- 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 +2 -2
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +23 -58
- package/src/resources/extensions/gsd/tools/exec-tool.ts +5 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +12 -6
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +11 -38
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +14 -42
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- 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 +12 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +425 -0
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -192
- 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 +10 -1
- package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
- 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/skills/gsd-browser/SKILL.md +1 -1
- /package/dist/web/standalone/.next/static/{DUFWcMFRH3iXh7d2fbrOF → 2p9Rv9pQflAxCBbGVI2vb}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{DUFWcMFRH3iXh7d2fbrOF → 2p9Rv9pQflAxCBbGVI2vb}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/2p9Rv9pQflAxCBbGVI2vb/_buildManifest.js","static/2p9Rv9pQflAxCBbGVI2vb/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-fbea77b5f9953368.js","static/chunks/51aff721-df603e9695992f6b.js","static/chunks/686-9424f271d9ce5d07.js","static/chunks/main-app-90d1d8d5e5d2dc6b.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/css/18c2fdf261bfc1b7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-fbea77b5f9953368.js"/><script src="/_next/static/chunks/51aff721-df603e9695992f6b.js" async=""></script><script src="/_next/static/chunks/686-9424f271d9ce5d07.js" async=""></script><script src="/_next/static/chunks/main-app-90d1d8d5e5d2dc6b.js" async=""></script><script src="/_next/static/chunks/5395-712c8b12d97fd36f.js" async=""></script><script src="/_next/static/chunks/app/layout-4ae2d68984392bbf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Git Ship Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-fbea77b5f9953368.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[68382,[\"5395\",\"static/chunks/5395-712c8b12d97fd36f.js\",\"7177\",\"static/chunks/app/layout-4ae2d68984392bbf.js\"],\"ThemeProvider\"]\n3:I[25020,[],\"\"]\n4:I[81130,[],\"\"]\n5:I[88325,[\"5395\",\"static/chunks/5395-712c8b12d97fd36f.js\",\"7177\",\"static/chunks/app/layout-4ae2d68984392bbf.js\"],\"Toaster\"]\n6:I[84649,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[84649,[],\"ViewportBoundary\"]\nc:I[84649,[],\"MetadataBoundary\"]\ne:I[45336,[],\"default\",1]\n:HL[\"/_next/static/css/18c2fdf261bfc1b7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/18c2fdf261bfc1b7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/_next/static/css/18c2fdf261bfc1b7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-fbea77b5f9953368.js"/><script src="/_next/static/chunks/51aff721-df603e9695992f6b.js" async=""></script><script src="/_next/static/chunks/686-9424f271d9ce5d07.js" async=""></script><script src="/_next/static/chunks/main-app-90d1d8d5e5d2dc6b.js" async=""></script><script src="/_next/static/chunks/5395-712c8b12d97fd36f.js" async=""></script><script src="/_next/static/chunks/app/layout-4ae2d68984392bbf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>GSD</title><meta name="description" content="The evolution of Git Ship Done — now a real coding agent. One command. Walk away. Come back to a built project."/><meta name="application-name" content="GSD"/><link rel="icon" href="/icon-light-32x32.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/icon-dark-32x32.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/icon.svg" type="image/svg+xml"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><script src="/_next/static/chunks/webpack-fbea77b5f9953368.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[68382,[\"5395\",\"static/chunks/5395-712c8b12d97fd36f.js\",\"7177\",\"static/chunks/app/layout-4ae2d68984392bbf.js\"],\"ThemeProvider\"]\n3:I[25020,[],\"\"]\n4:I[81130,[],\"\"]\n5:I[88325,[\"5395\",\"static/chunks/5395-712c8b12d97fd36f.js\",\"7177\",\"static/chunks/app/layout-4ae2d68984392bbf.js\"],\"Toaster\"]\n6:I[84649,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[84649,[],\"ViewportBoundary\"]\nc:I[84649,[],\"MetadataBoundary\"]\ne:I[45336,[],\"default\",1]\n:HL[\"/_next/static/css/18c2fdf261bfc1b7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/18c2fdf261bfc1b7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{\"position\":\"bottom-right\"}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"2p9Rv9pQflAxCBbGVI2vb\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[78812,[],\"IconMark\"]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"GSD\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"The evolution of Git Ship Done — now a real coding agent. One command. Walk away. Come back to a built project.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"GSD\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon-light-32x32.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon-dark-32x32.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/icon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L10\",\"6\",{}]]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-fbea77b5f9953368.js"/><script src="/_next/static/chunks/51aff721-df603e9695992f6b.js" async=""></script><script src="/_next/static/chunks/686-9424f271d9ce5d07.js" async=""></script><script src="/_next/static/chunks/main-app-90d1d8d5e5d2dc6b.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-fbea77b5f9953368.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[25020,[],\"\"]\n3:I[81130,[],\"\"]\n4:I[84649,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[84649,[],\"ViewportBoundary\"]\na:I[84649,[],\"MetadataBoundary\"]\nc:I[45336,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-fbea77b5f9953368.js"/><script src="/_next/static/chunks/51aff721-df603e9695992f6b.js" async=""></script><script src="/_next/static/chunks/686-9424f271d9ce5d07.js" async=""></script><script src="/_next/static/chunks/main-app-90d1d8d5e5d2dc6b.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-fbea77b5f9953368.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[25020,[],\"\"]\n3:I[81130,[],\"\"]\n4:I[84649,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[84649,[],\"ViewportBoundary\"]\na:I[84649,[],\"MetadataBoundary\"]\nc:I[45336,[],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"2p9Rv9pQflAxCBbGVI2vb\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"8HdpubB5fxc6q9mmGtG6o3KtN0TGlYGBgUS6kshd7RY="}
|
package/dist/worktree-cli.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* from resources/extensions/gsd/ which are shipped as raw .ts (#1283).
|
|
19
19
|
*/
|
|
20
20
|
import chalk from 'chalk';
|
|
21
|
+
import { bannerLines, name as styledName, warn } from './cli-style.js';
|
|
21
22
|
import { createJiti } from '@mariozechner/jiti';
|
|
22
23
|
import { fileURLToPath } from 'node:url';
|
|
23
24
|
import { generateWorktreeName } from './worktree-name-gen.js';
|
|
@@ -283,12 +284,8 @@ async function handleStatusBanner(basePath) {
|
|
|
283
284
|
});
|
|
284
285
|
if (withChanges.length === 0)
|
|
285
286
|
return;
|
|
286
|
-
const names = withChanges.map(w =>
|
|
287
|
-
process.stderr.write(
|
|
288
|
-
chalk.yellow(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) +
|
|
289
|
-
names + '\n' +
|
|
290
|
-
chalk.dim('[gsd] ') +
|
|
291
|
-
chalk.dim('Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list\n\n'));
|
|
287
|
+
const names = withChanges.map(w => styledName(w.name)).join(', ');
|
|
288
|
+
process.stderr.write(bannerLines(warn(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) + names, 'Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list'));
|
|
292
289
|
}
|
|
293
290
|
// ─── -w flag: create/resume worktree for interactive session ────────────────
|
|
294
291
|
async function handleWorktreeFlag(worktreeFlag) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// GSD worktree startup banner
|
|
2
2
|
import { execFileSync } from 'node:child_process';
|
|
3
3
|
import { existsSync, realpathSync } from 'node:fs';
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
4
|
+
import { resolve, sep } from 'node:path';
|
|
5
|
+
import { bannerLines, name, warn } from './cli-style.js';
|
|
6
|
+
import { worktreesDirs } from './resources/extensions/gsd/worktree-placement.js';
|
|
6
7
|
function normalizePath(path) {
|
|
7
8
|
const normalized = path
|
|
8
9
|
.replaceAll('\\', '/')
|
|
@@ -55,7 +56,7 @@ function existingPathVariants(path) {
|
|
|
55
56
|
return [...new Set(variants.map(normalizePath))];
|
|
56
57
|
}
|
|
57
58
|
function findGsdWorktrees(basePath, entries) {
|
|
58
|
-
const roots =
|
|
59
|
+
const roots = worktreesDirs(basePath).flatMap((dir) => existingPathVariants(dir));
|
|
59
60
|
const worktrees = [];
|
|
60
61
|
for (const entry of entries) {
|
|
61
62
|
if (entry.isBare || !entry.branch)
|
|
@@ -110,8 +111,7 @@ function branchHasChanges(basePath, mainBranch, branch) {
|
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
export function showWorktreeStatusBanner(basePath) {
|
|
113
|
-
|
|
114
|
-
if (!existsSync(worktreesDir))
|
|
114
|
+
if (!worktreesDirs(basePath).some((dir) => existsSync(dir)))
|
|
115
115
|
return;
|
|
116
116
|
const entries = parseWorktreeList(gitExec(basePath, ['worktree', 'list', '--porcelain']));
|
|
117
117
|
const worktrees = findGsdWorktrees(basePath, entries);
|
|
@@ -123,10 +123,6 @@ export function showWorktreeStatusBanner(basePath) {
|
|
|
123
123
|
const withChanges = worktrees.filter((worktree) => branchHasChanges(basePath, mainBranch, worktree.branch));
|
|
124
124
|
if (withChanges.length === 0)
|
|
125
125
|
return;
|
|
126
|
-
const names = withChanges.map((worktree) =>
|
|
127
|
-
process.stderr.write(
|
|
128
|
-
chalk.yellow(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) +
|
|
129
|
-
names + '\n' +
|
|
130
|
-
chalk.dim('[gsd] ') +
|
|
131
|
-
chalk.dim('Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list\n\n'));
|
|
126
|
+
const names = withChanges.map((worktree) => name(worktree.name)).join(', ');
|
|
127
|
+
process.stderr.write(bannerLines(warn(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) + names, 'Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list'));
|
|
132
128
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengsd/cloud-mcp-gateway",
|
|
3
|
-
"version": "1.2.0-dev.
|
|
3
|
+
"version": "1.2.0-dev.5457a158",
|
|
4
4
|
"description": "Cloud MCP gateway for brokering remote MCP clients to local GSD runtimes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
32
|
-
"@opengsd/mcp-server": "^1.2.0-dev.
|
|
32
|
+
"@opengsd/mcp-server": "^1.2.0-dev.5457a158",
|
|
33
33
|
"ws": "^8.20.0",
|
|
34
34
|
"zod": "^4.0.0"
|
|
35
35
|
},
|
|
@@ -218,6 +218,10 @@ export declare const WORKFLOW_TOOL_CONTRACTS: readonly [{
|
|
|
218
218
|
readonly writePolicy: "read";
|
|
219
219
|
readonly auditEvent: "workflow.memory.graph";
|
|
220
220
|
}];
|
|
221
|
+
/** Literal union of canonical workflow tool names. Typing a name list with this union makes drift from WORKFLOW_TOOL_CONTRACTS a compile error. */
|
|
222
|
+
export type CanonicalWorkflowToolName = (typeof WORKFLOW_TOOL_CONTRACTS)[number]["canonicalName"];
|
|
223
|
+
/** Literal union of backwards-compatibility alias names. */
|
|
224
|
+
export type WorkflowToolAliasName = (typeof WORKFLOW_TOOL_CONTRACTS)[number]["aliases"][number];
|
|
221
225
|
export declare const WORKFLOW_TOOL_NAMES: readonly string[];
|
|
222
226
|
/** Canonical tool names only (excludes backwards-compatibility aliases). */
|
|
223
227
|
export declare const CANONICAL_WORKFLOW_TOOL_NAMES: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiPwB,CAAC;AAE7D,eAAO,MAAM,mBAAmB,EAG1B,SAAS,MAAM,EAAE,CAAC;AAExB,4EAA4E;AAC5E,eAAO,MAAM,6BAA6B,EAErC,SAAS,MAAM,EAAE,CAAC;AAEvB;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAEjC,SAAS,MAAM,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,4BAA4B;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,uBAAuB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiPwB,CAAC;AAE7D,mJAAmJ;AACnJ,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;AAElG,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhG,eAAO,MAAM,mBAAmB,EAG1B,SAAS,MAAM,EAAE,CAAC;AAExB,4EAA4E;AAC5E,eAAO,MAAM,6BAA6B,EAErC,SAAS,MAAM,EAAE,CAAC;AAEvB;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAEjC,SAAS,MAAM,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Canonical workflow MCP tool metadata shared across package boundaries.\n\nexport type WorkflowToolWritePolicy = \"read\" | \"write\";\n\nexport interface WorkflowToolContractMetadata {\n\tcanonicalName: string;\n\taliases: readonly string[];\n\tschemaId: string;\n\texecutorId: string;\n\twritePolicy: WorkflowToolWritePolicy;\n\tauditEvent: string;\n}\n\nexport const WORKFLOW_TOOL_CONTRACTS = [\n\t{\n\t\tcanonicalName: \"gsd_decision_save\",\n\t\taliases: [\"gsd_save_decision\"],\n\t\tschemaId: \"workflow.decision.save\",\n\t\texecutorId: \"executeDecisionSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.decision.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_update\",\n\t\taliases: [\"gsd_update_requirement\"],\n\t\tschemaId: \"workflow.requirement.update\",\n\t\texecutorId: \"executeRequirementUpdate\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.update\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_save\",\n\t\taliases: [\"gsd_save_requirement\"],\n\t\tschemaId: \"workflow.requirement.save\",\n\t\texecutorId: \"executeRequirementSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_generate_id\",\n\t\taliases: [\"gsd_generate_milestone_id\"],\n\t\tschemaId: \"workflow.milestone.generate_id\",\n\t\texecutorId: \"executeMilestoneGenerateId\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.generate_id\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_milestone\",\n\t\taliases: [\"gsd_milestone_plan\"],\n\t\tschemaId: \"workflow.milestone.plan\",\n\t\texecutorId: \"executePlanMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_slice\",\n\t\taliases: [\"gsd_slice_plan\"],\n\t\tschemaId: \"workflow.slice.plan\",\n\t\texecutorId: \"executePlanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_task\",\n\t\taliases: [\"gsd_task_plan\"],\n\t\tschemaId: \"workflow.task.plan\",\n\t\texecutorId: \"executePlanTask\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_replan_slice\",\n\t\taliases: [\"gsd_slice_replan\"],\n\t\tschemaId: \"workflow.slice.replan\",\n\t\texecutorId: \"executeReplanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.replan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_complete\",\n\t\taliases: [\"gsd_complete_slice\"],\n\t\tschemaId: \"workflow.slice.complete\",\n\t\texecutorId: \"executeSliceComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_skip_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.skip\",\n\t\texecutorId: \"executeSkipSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.skip\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_complete_milestone\",\n\t\taliases: [\"gsd_milestone_complete\"],\n\t\tschemaId: \"workflow.milestone.complete\",\n\t\texecutorId: \"executeCompleteMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_validate_milestone\",\n\t\taliases: [\"gsd_milestone_validate\"],\n\t\tschemaId: \"workflow.milestone.validate\",\n\t\texecutorId: \"executeValidateMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.validate\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_reassess_roadmap\",\n\t\taliases: [\"gsd_roadmap_reassess\"],\n\t\tschemaId: \"workflow.roadmap.reassess\",\n\t\texecutorId: \"executeReassessRoadmap\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.roadmap.reassess\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_save_gate_result\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.gate.save_result\",\n\t\texecutorId: \"executeSaveGateResult\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.gate.save_result\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_uat_result_save\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.uat.result.save\",\n\t\texecutorId: \"executeUatResultSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.uat.result.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_summary_save\",\n\t\taliases: [\"gsd_save_summary\"],\n\t\tschemaId: \"workflow.summary.save\",\n\t\texecutorId: \"executeSummarySave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.summary.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_complete\",\n\t\taliases: [\"gsd_complete_task\"],\n\t\tschemaId: \"workflow.task.complete\",\n\t\texecutorId: \"executeTaskComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_reopen\",\n\t\taliases: [\"gsd_reopen_task\"],\n\t\tschemaId: \"workflow.task.reopen\",\n\t\texecutorId: \"executeTaskReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_reopen\",\n\t\taliases: [\"gsd_reopen_slice\"],\n\t\tschemaId: \"workflow.slice.reopen\",\n\t\texecutorId: \"executeSliceReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_reopen\",\n\t\taliases: [\"gsd_reopen_milestone\"],\n\t\tschemaId: \"workflow.milestone.reopen\",\n\t\texecutorId: \"executeMilestoneReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_status\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.status\",\n\t\texecutorId: \"executeMilestoneStatus\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.status\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_checkpoint_db\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.database.checkpoint\",\n\t\texecutorId: \"executeCheckpointDb\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.database.checkpoint\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_journal_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.journal.query\",\n\t\texecutorId: \"executeJournalQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.journal.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_uat_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.uat.exec\",\n\t\texecutorId: \"executeUatExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.uat.exec\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.run\",\n\t\texecutorId: \"executeGsdExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.exec.run\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec_search\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.search\",\n\t\texecutorId: \"executeGsdExecSearch\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.exec.search\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_resume\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.resume\",\n\t\texecutorId: \"executeGsdResume\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.resume\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_capture_thought\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.capture_thought\",\n\t\texecutorId: \"executeCaptureThought\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.memory.capture_thought\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.query\",\n\t\texecutorId: \"executeMemoryQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_graph\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.graph\",\n\t\texecutorId: \"executeMemoryGraph\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.graph\",\n\t},\n] as const satisfies readonly WorkflowToolContractMetadata[];\n\nexport const WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap((tool) => [\n\ttool.canonicalName,\n\t...tool.aliases,\n]) as readonly string[];\n\n/** Canonical tool names only (excludes backwards-compatibility aliases). */\nexport const CANONICAL_WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.map(\n\t(tool) => tool.canonicalName,\n) as readonly string[];\n\n/**\n * Backwards-compatibility alias names (each forwards to a canonical twin).\n * Callers may exclude these from an advertised tool surface to save tokens —\n * see registerWorkflowTools({ advertiseAliases }).\n */\nexport const WORKFLOW_TOOL_ALIAS_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap(\n\t(tool) => tool.aliases,\n) as readonly string[];\n"]}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Canonical workflow MCP tool metadata shared across package boundaries.\n\nexport type WorkflowToolWritePolicy = \"read\" | \"write\";\n\nexport interface WorkflowToolContractMetadata {\n\tcanonicalName: string;\n\taliases: readonly string[];\n\tschemaId: string;\n\texecutorId: string;\n\twritePolicy: WorkflowToolWritePolicy;\n\tauditEvent: string;\n}\n\nexport const WORKFLOW_TOOL_CONTRACTS = [\n\t{\n\t\tcanonicalName: \"gsd_decision_save\",\n\t\taliases: [\"gsd_save_decision\"],\n\t\tschemaId: \"workflow.decision.save\",\n\t\texecutorId: \"executeDecisionSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.decision.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_update\",\n\t\taliases: [\"gsd_update_requirement\"],\n\t\tschemaId: \"workflow.requirement.update\",\n\t\texecutorId: \"executeRequirementUpdate\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.update\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_requirement_save\",\n\t\taliases: [\"gsd_save_requirement\"],\n\t\tschemaId: \"workflow.requirement.save\",\n\t\texecutorId: \"executeRequirementSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.requirement.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_generate_id\",\n\t\taliases: [\"gsd_generate_milestone_id\"],\n\t\tschemaId: \"workflow.milestone.generate_id\",\n\t\texecutorId: \"executeMilestoneGenerateId\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.generate_id\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_milestone\",\n\t\taliases: [\"gsd_milestone_plan\"],\n\t\tschemaId: \"workflow.milestone.plan\",\n\t\texecutorId: \"executePlanMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_slice\",\n\t\taliases: [\"gsd_slice_plan\"],\n\t\tschemaId: \"workflow.slice.plan\",\n\t\texecutorId: \"executePlanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_plan_task\",\n\t\taliases: [\"gsd_task_plan\"],\n\t\tschemaId: \"workflow.task.plan\",\n\t\texecutorId: \"executePlanTask\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.plan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_replan_slice\",\n\t\taliases: [\"gsd_slice_replan\"],\n\t\tschemaId: \"workflow.slice.replan\",\n\t\texecutorId: \"executeReplanSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.replan\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_complete\",\n\t\taliases: [\"gsd_complete_slice\"],\n\t\tschemaId: \"workflow.slice.complete\",\n\t\texecutorId: \"executeSliceComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_skip_slice\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.slice.skip\",\n\t\texecutorId: \"executeSkipSlice\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.skip\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_complete_milestone\",\n\t\taliases: [\"gsd_milestone_complete\"],\n\t\tschemaId: \"workflow.milestone.complete\",\n\t\texecutorId: \"executeCompleteMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_validate_milestone\",\n\t\taliases: [\"gsd_milestone_validate\"],\n\t\tschemaId: \"workflow.milestone.validate\",\n\t\texecutorId: \"executeValidateMilestone\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.validate\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_reassess_roadmap\",\n\t\taliases: [\"gsd_roadmap_reassess\"],\n\t\tschemaId: \"workflow.roadmap.reassess\",\n\t\texecutorId: \"executeReassessRoadmap\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.roadmap.reassess\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_save_gate_result\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.gate.save_result\",\n\t\texecutorId: \"executeSaveGateResult\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.gate.save_result\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_uat_result_save\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.uat.result.save\",\n\t\texecutorId: \"executeUatResultSave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.uat.result.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_summary_save\",\n\t\taliases: [\"gsd_save_summary\"],\n\t\tschemaId: \"workflow.summary.save\",\n\t\texecutorId: \"executeSummarySave\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.summary.save\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_complete\",\n\t\taliases: [\"gsd_complete_task\"],\n\t\tschemaId: \"workflow.task.complete\",\n\t\texecutorId: \"executeTaskComplete\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.complete\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_task_reopen\",\n\t\taliases: [\"gsd_reopen_task\"],\n\t\tschemaId: \"workflow.task.reopen\",\n\t\texecutorId: \"executeTaskReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.task.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_slice_reopen\",\n\t\taliases: [\"gsd_reopen_slice\"],\n\t\tschemaId: \"workflow.slice.reopen\",\n\t\texecutorId: \"executeSliceReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.slice.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_reopen\",\n\t\taliases: [\"gsd_reopen_milestone\"],\n\t\tschemaId: \"workflow.milestone.reopen\",\n\t\texecutorId: \"executeMilestoneReopen\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.milestone.reopen\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_milestone_status\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.milestone.status\",\n\t\texecutorId: \"executeMilestoneStatus\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.milestone.status\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_checkpoint_db\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.database.checkpoint\",\n\t\texecutorId: \"executeCheckpointDb\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.database.checkpoint\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_journal_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.journal.query\",\n\t\texecutorId: \"executeJournalQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.journal.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_uat_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.uat.exec\",\n\t\texecutorId: \"executeUatExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.uat.exec\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.run\",\n\t\texecutorId: \"executeGsdExec\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.exec.run\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_exec_search\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.exec.search\",\n\t\texecutorId: \"executeGsdExecSearch\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.exec.search\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_resume\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.resume\",\n\t\texecutorId: \"executeGsdResume\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.resume\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_capture_thought\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.capture_thought\",\n\t\texecutorId: \"executeCaptureThought\",\n\t\twritePolicy: \"write\",\n\t\tauditEvent: \"workflow.memory.capture_thought\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_query\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.query\",\n\t\texecutorId: \"executeMemoryQuery\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.query\",\n\t},\n\t{\n\t\tcanonicalName: \"gsd_memory_graph\",\n\t\taliases: [],\n\t\tschemaId: \"workflow.memory.graph\",\n\t\texecutorId: \"executeMemoryGraph\",\n\t\twritePolicy: \"read\",\n\t\tauditEvent: \"workflow.memory.graph\",\n\t},\n] as const satisfies readonly WorkflowToolContractMetadata[];\n\n/** Literal union of canonical workflow tool names. Typing a name list with this union makes drift from WORKFLOW_TOOL_CONTRACTS a compile error. */\nexport type CanonicalWorkflowToolName = (typeof WORKFLOW_TOOL_CONTRACTS)[number][\"canonicalName\"];\n\n/** Literal union of backwards-compatibility alias names. */\nexport type WorkflowToolAliasName = (typeof WORKFLOW_TOOL_CONTRACTS)[number][\"aliases\"][number];\n\nexport const WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap((tool) => [\n\ttool.canonicalName,\n\t...tool.aliases,\n]) as readonly string[];\n\n/** Canonical tool names only (excludes backwards-compatibility aliases). */\nexport const CANONICAL_WORKFLOW_TOOL_NAMES = WORKFLOW_TOOL_CONTRACTS.map(\n\t(tool) => tool.canonicalName,\n) as readonly string[];\n\n/**\n * Backwards-compatibility alias names (each forwards to a canonical twin).\n * Callers may exclude these from an advertised tool surface to save tokens —\n * see registerWorkflowTools({ advertiseAliases }).\n */\nexport const WORKFLOW_TOOL_ALIAS_NAMES = WORKFLOW_TOOL_CONTRACTS.flatMap(\n\t(tool) => tool.aliases,\n) as readonly string[];\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengsd/daemon",
|
|
3
|
-
"version": "1.2.0-dev.
|
|
3
|
+
"version": "1.2.0-dev.5457a158",
|
|
4
4
|
"description": "GSD daemon — background process for project monitoring and Discord integration",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@anthropic-ai/sdk": "^0.52.0",
|
|
34
|
-
"@opengsd/contracts": "^1.2.0-dev.
|
|
35
|
-
"@opengsd/mcp-server": "^1.2.0-dev.
|
|
36
|
-
"@opengsd/rpc-client": "^1.2.0-dev.
|
|
34
|
+
"@opengsd/contracts": "^1.2.0-dev.5457a158",
|
|
35
|
+
"@opengsd/mcp-server": "^1.2.0-dev.5457a158",
|
|
36
|
+
"@opengsd/rpc-client": "^1.2.0-dev.5457a158",
|
|
37
37
|
"discord.js": "^14.25.1",
|
|
38
38
|
"ws": "^8.20.0",
|
|
39
39
|
"yaml": "^2.8.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd/agent-core",
|
|
3
|
-
"version": "1.2.0-dev.
|
|
3
|
+
"version": "1.2.0-dev.5457a158",
|
|
4
4
|
"description": "GSD session orchestration layer on top of @gsd/pi-coding-agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"gsd": {
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"test": "node --import ../../src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/*.test.ts src/**/*.test.ts"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@gsd/native": "^1.2.0-dev.
|
|
29
|
-
"@gsd/pi-agent-core": "^1.2.0-dev.
|
|
30
|
-
"@gsd/pi-ai": "^1.2.0-dev.
|
|
31
|
-
"@gsd/pi-coding-agent": "^1.2.0-dev.
|
|
28
|
+
"@gsd/native": "^1.2.0-dev.5457a158",
|
|
29
|
+
"@gsd/pi-agent-core": "^1.2.0-dev.5457a158",
|
|
30
|
+
"@gsd/pi-ai": "^1.2.0-dev.5457a158",
|
|
31
|
+
"@gsd/pi-coding-agent": "^1.2.0-dev.5457a158"
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd/agent-modes",
|
|
3
|
-
"version": "1.2.0-dev.
|
|
3
|
+
"version": "1.2.0-dev.5457a158",
|
|
4
4
|
"description": "GSD run modes and CLI layer",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"gsd": {
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"test": "node --import ../../src/resources/extensions/gsd/tests/resolve-ts.mjs --experimental-strip-types --test src/**/*.test.ts"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@gsd/agent-core": "^1.2.0-dev.
|
|
29
|
-
"@gsd/pi-agent-core": "^1.2.0-dev.
|
|
30
|
-
"@gsd/pi-ai": "^1.2.0-dev.
|
|
31
|
-
"@gsd/pi-coding-agent": "^1.2.0-dev.
|
|
32
|
-
"@gsd/pi-tui": "^1.2.0-dev.
|
|
33
|
-
"@opengsd/contracts": "^1.2.0-dev.
|
|
28
|
+
"@gsd/agent-core": "^1.2.0-dev.5457a158",
|
|
29
|
+
"@gsd/pi-agent-core": "^1.2.0-dev.5457a158",
|
|
30
|
+
"@gsd/pi-ai": "^1.2.0-dev.5457a158",
|
|
31
|
+
"@gsd/pi-coding-agent": "^1.2.0-dev.5457a158",
|
|
32
|
+
"@gsd/pi-tui": "^1.2.0-dev.5457a158",
|
|
33
|
+
"@opengsd/contracts": "^1.2.0-dev.5457a158",
|
|
34
34
|
"chalk": "^5.5.0"
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -8,6 +8,7 @@ import { SessionManager } from './session-manager.js';
|
|
|
8
8
|
import { createMcpServer } from './server.js';
|
|
9
9
|
import { installGlobalErrorHandlers } from './cli-errors.js';
|
|
10
10
|
import { loadStoredCredentialEnvKeys } from './tool-credentials.js';
|
|
11
|
+
import { warmWorkflowToolBridges } from './workflow-tools.js';
|
|
11
12
|
const MCP_PKG = '@modelcontextprotocol/sdk';
|
|
12
13
|
installGlobalErrorHandlers();
|
|
13
14
|
async function main() {
|
|
@@ -44,10 +45,12 @@ async function main() {
|
|
|
44
45
|
process.on('SIGINT', () => void cleanup());
|
|
45
46
|
// Handle stdin end — MCP client disconnected
|
|
46
47
|
process.stdin.on('end', () => void cleanup());
|
|
47
|
-
// Connect and start serving
|
|
48
|
+
// Connect and start serving. The workflow bridges are warmed eagerly so a
|
|
49
|
+
// broken executor/write-gate module fails the spawn with an actionable
|
|
50
|
+
// error instead of advertising tools that error on their first call.
|
|
48
51
|
try {
|
|
49
|
-
await server.connect(transport);
|
|
50
|
-
process.stderr.write('[gsd-mcp-server] MCP server started on stdio\n');
|
|
52
|
+
await Promise.all([server.connect(transport), warmWorkflowToolBridges()]);
|
|
53
|
+
process.stderr.write('[gsd-mcp-server] MCP server started on stdio; workflow bridges ready\n');
|
|
51
54
|
}
|
|
52
55
|
catch (err) {
|
|
53
56
|
process.stderr.write(`[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAE5C,0BAA0B,EAAE,CAAC;AAE7B,KAAK,UAAU,IAAI;IACjB,2BAA2B,EAAE,CAAC;IAE9B,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,yEAAyE;IACzE,sBAAsB;IACtB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;IAEzD,uEAAuE;IACvE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,qDAAqD;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,UAAU,OAAO;QACpB,IAAI,UAAU;YAAE,OAAO;QACvB,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAE3C,6CAA6C;IAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAE9C,0EAA0E;IAC1E,uEAAuE;IACvE,qEAAqE;IACrE,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6CAA6C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAClG,CAAC;QACF,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAChF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["/**\n * @opengsd/mcp-server CLI — stdio transport entry point.\n *\n * Connects the MCP server to stdin/stdout for use by Claude Code,\n * Cursor, and other MCP-compatible clients.\n */\n\nimport { SessionManager } from './session-manager.js';\nimport { createMcpServer } from './server.js';\nimport { installGlobalErrorHandlers } from './cli-errors.js';\nimport { loadStoredCredentialEnvKeys } from './tool-credentials.js';\nimport { warmWorkflowToolBridges } from './workflow-tools.js';\n\nconst MCP_PKG = '@modelcontextprotocol/sdk';\n\ninstallGlobalErrorHandlers();\n\nasync function main(): Promise<void> {\n loadStoredCredentialEnvKeys();\n\n const sessionManager = new SessionManager();\n\n // Create the configured MCP server with session, interactive, read-only,\n // and workflow tools.\n const { server } = await createMcpServer(sessionManager);\n\n // Dynamic import for StdioServerTransport (same TS subpath workaround)\n const { StdioServerTransport } = await import(`${MCP_PKG}/server/stdio.js`);\n const transport = new StdioServerTransport();\n\n // Cleanup handler — stop all sessions before exiting\n let cleaningUp = false;\n async function cleanup(): Promise<void> {\n if (cleaningUp) return;\n cleaningUp = true;\n process.stderr.write('[gsd-mcp-server] Shutting down...\\n');\n try {\n await sessionManager.cleanup();\n } catch {\n // swallow cleanup errors\n }\n try {\n await server.close();\n } catch {\n // swallow close errors\n }\n process.exit(0);\n }\n\n process.on('SIGTERM', () => void cleanup());\n process.on('SIGINT', () => void cleanup());\n\n // Handle stdin end — MCP client disconnected\n process.stdin.on('end', () => void cleanup());\n\n // Connect and start serving. The workflow bridges are warmed eagerly so a\n // broken executor/write-gate module fails the spawn with an actionable\n // error instead of advertising tools that error on their first call.\n try {\n await Promise.all([server.connect(transport), warmWorkflowToolBridges()]);\n process.stderr.write('[gsd-mcp-server] MCP server started on stdio; workflow bridges ready\\n');\n } catch (err) {\n process.stderr.write(\n `[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\\n`\n );\n await sessionManager.cleanup();\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n process.stderr.write(\n `[gsd-mcp-server] Fatal: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n});\n"]}
|
|
@@ -9,6 +9,14 @@ export declare function _parseWorkflowArgsForTest<T extends {
|
|
|
9
9
|
export declare function _buildImportCandidates(relativePath: string): string[];
|
|
10
10
|
/** @internal — exported for testing only */
|
|
11
11
|
export declare function _buildBridgeImportCandidates(relativePath: string): string[];
|
|
12
|
+
/**
|
|
13
|
+
* Eagerly load and shape-check the workflow executor and write-gate bridges.
|
|
14
|
+
* The stdio CLI awaits this at startup so a broken bridge fails the spawn
|
|
15
|
+
* with an actionable error instead of presenting an available-looking tool
|
|
16
|
+
* surface that errors on the first call. Shares the cached promises the tool
|
|
17
|
+
* handlers use, so a successful warm-up also removes first-call import latency.
|
|
18
|
+
*/
|
|
19
|
+
export declare function warmWorkflowToolBridges(): Promise<void>;
|
|
12
20
|
interface McpToolServer {
|
|
13
21
|
tool(name: string, description: string, params: Record<string, unknown>, handler: (args: Record<string, unknown>) => Promise<unknown>): unknown;
|
|
14
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8UxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;
|
|
1
|
+
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8UxB,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AA+GD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAE5B;AA6JD,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAKrE;AAED,4CAA4C;AAC5C,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AA6ED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D;AAgCD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,mBAA+B,CAAC;AAChE,eAAO,MAAM,6BAA6B,mBAAyC,CAAC;AACpF,eAAO,MAAM,yBAAyB,mBAAqC,CAAC;AAwuB5E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAsB,CAAC;AAyT/D,MAAM,WAAW,4BAA4B;IAC3C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE,4BAAiC,GACzC,IAAI,CAwyBN"}
|
|
@@ -106,37 +106,51 @@ function extractMilestoneId(parsed) {
|
|
|
106
106
|
* the shared project `.gsd/` and auto-mode's verifyExpectedArtifact (which
|
|
107
107
|
* uses the worktree `.gsd/`) fails, triggering a guaranteed retry per unit.
|
|
108
108
|
*/
|
|
109
|
+
/**
|
|
110
|
+
* Containers a GSD worktree may live in: canonical .gsd-worktrees/ first,
|
|
111
|
+
* legacy .gsd/worktrees/ second. Boundary copy of `worktreesDirs` in
|
|
112
|
+
* src/resources/extensions/gsd/worktree-placement.ts — the MCP server cannot
|
|
113
|
+
* statically import the extension tree. Keep the two lists synchronized.
|
|
114
|
+
*/
|
|
115
|
+
function worktreeContainers(projectRoot) {
|
|
116
|
+
return [join(projectRoot, ".gsd-worktrees"), join(projectRoot, ".gsd", "worktrees")];
|
|
117
|
+
}
|
|
109
118
|
function resolveActiveWorktreeBasePath(projectRoot, milestoneId) {
|
|
110
119
|
if (!milestoneId)
|
|
111
120
|
return null;
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
121
|
+
for (const container of worktreeContainers(projectRoot)) {
|
|
122
|
+
const wtPath = join(container, milestoneId);
|
|
123
|
+
if (!existsSync(wtPath))
|
|
124
|
+
continue;
|
|
125
|
+
// Sanity check: a real git worktree has a `.git` file with a gitdir pointer.
|
|
126
|
+
// Bare directories without it shouldn't hijack the write path.
|
|
127
|
+
if (!existsSync(join(wtPath, ".git")))
|
|
128
|
+
continue;
|
|
129
|
+
return wtPath;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
120
132
|
}
|
|
121
133
|
/**
|
|
122
134
|
* Fallback when the tool call has no milestoneId: if exactly one auto-worktree
|
|
123
|
-
* exists
|
|
135
|
+
* exists across the project's worktree containers, treat it as the active one.
|
|
124
136
|
* Multiple worktrees → ambiguous, return null and let writes go to project root.
|
|
125
137
|
*/
|
|
126
138
|
function resolveSoleActiveWorktree(projectRoot) {
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
const live = [];
|
|
140
|
+
for (const worktreesDir of worktreeContainers(projectRoot)) {
|
|
141
|
+
if (!existsSync(worktreesDir))
|
|
142
|
+
continue;
|
|
143
|
+
let entries;
|
|
144
|
+
try {
|
|
145
|
+
entries = readdirSync(worktreesDir);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
live.push(...entries
|
|
151
|
+
.map((name) => join(worktreesDir, name))
|
|
152
|
+
.filter((p) => existsSync(join(p, ".git"))));
|
|
136
153
|
}
|
|
137
|
-
const live = entries
|
|
138
|
-
.map((name) => join(worktreesDir, name))
|
|
139
|
-
.filter((p) => existsSync(join(p, ".git")));
|
|
140
154
|
if (live.length !== 1)
|
|
141
155
|
return null;
|
|
142
156
|
return live[0];
|
|
@@ -366,6 +380,17 @@ async function getWorkflowToolExecutors() {
|
|
|
366
380
|
}
|
|
367
381
|
return workflowToolExecutorsPromise;
|
|
368
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Eagerly load and shape-check the workflow executor and write-gate bridges.
|
|
385
|
+
* The stdio CLI awaits this at startup so a broken bridge fails the spawn
|
|
386
|
+
* with an actionable error instead of presenting an available-looking tool
|
|
387
|
+
* surface that errors on the first call. Shares the cached promises the tool
|
|
388
|
+
* handlers use, so a successful warm-up also removes first-call import latency.
|
|
389
|
+
*/
|
|
390
|
+
export async function warmWorkflowToolBridges() {
|
|
391
|
+
await getWorkflowToolExecutors();
|
|
392
|
+
await getWorkflowWriteGateModule();
|
|
393
|
+
}
|
|
369
394
|
async function getWorkflowWriteGateModule() {
|
|
370
395
|
if (!workflowWriteGatePromise) {
|
|
371
396
|
workflowWriteGatePromise = (async () => {
|