gsd-pi 2.78.1 → 2.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -21
- package/dist/bundled-resource-path.d.ts +7 -0
- package/dist/bundled-resource-path.js +34 -2
- package/dist/claude-cli-check.js +18 -6
- package/dist/cli-auto-routing.d.ts +1 -0
- package/dist/cli-auto-routing.js +5 -0
- package/dist/cli-policy.d.ts +13 -0
- package/dist/cli-policy.js +17 -0
- package/dist/cli.js +100 -69
- package/dist/headless-query.d.ts +22 -0
- package/dist/headless-query.js +43 -8
- package/dist/headless-recover.d.ts +23 -0
- package/dist/headless-recover.js +93 -0
- package/dist/headless.d.ts +10 -0
- package/dist/headless.js +25 -1
- package/dist/help-text.js +1 -0
- package/dist/loader.js +24 -16
- package/dist/onboarding.d.ts +10 -0
- package/dist/onboarding.js +2 -2
- package/dist/provider-migrations.d.ts +2 -2
- package/dist/provider-migrations.js +5 -2
- package/dist/resource-loader.d.ts +5 -2
- package/dist/resource-loader.js +62 -31
- package/dist/resources/.managed-resources-content-hash +1 -0
- package/dist/resources/GSD-WORKFLOW.md +29 -42
- package/dist/resources/extensions/async-jobs/job-manager.js +4 -0
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +3 -2
- package/dist/resources/extensions/bg-shell/utilities.js +2 -1
- package/dist/resources/extensions/browser-tools/tools/intent.js +8 -1
- package/dist/resources/extensions/claude-code-cli/readiness.js +19 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +22 -8
- package/dist/resources/extensions/github-sync/cli.js +3 -0
- package/dist/resources/extensions/github-sync/sync.js +86 -58
- package/dist/resources/extensions/google-search/index.js +2 -6
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +41 -5
- package/dist/resources/extensions/gsd/auto/loop.js +258 -36
- package/dist/resources/extensions/gsd/auto/phases.js +96 -38
- package/dist/resources/extensions/gsd/auto/run-unit.js +26 -12
- package/dist/resources/extensions/gsd/auto/session.js +44 -6
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +49 -31
- package/dist/resources/extensions/gsd/auto-dashboard.js +14 -2
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +57 -21
- package/dist/resources/extensions/gsd/auto-dispatch.js +301 -97
- package/dist/resources/extensions/gsd/auto-post-unit.js +127 -57
- package/dist/resources/extensions/gsd/auto-prompts.js +145 -8
- package/dist/resources/extensions/gsd/auto-recovery.js +112 -19
- package/dist/resources/extensions/gsd/auto-runtime-state.js +31 -0
- package/dist/resources/extensions/gsd/auto-start.js +55 -65
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +18 -0
- package/dist/resources/extensions/gsd/auto-timers.js +24 -4
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +368 -376
- package/dist/resources/extensions/gsd/auto.js +226 -78
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +21 -3
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +54 -9
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +9 -77
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +7 -5
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -4
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +204 -46
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +11 -6
- package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +48 -12
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +263 -66
- package/dist/resources/extensions/gsd/branch-patterns.js +3 -3
- package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
- package/dist/resources/extensions/gsd/commands/context.js +41 -5
- package/dist/resources/extensions/gsd/commands/dispatcher.js +11 -5
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +2 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +25 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +13 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +24 -2
- package/dist/resources/extensions/gsd/commands-bootstrap.js +6 -0
- package/dist/resources/extensions/gsd/commands-codebase.js +2 -1
- package/dist/resources/extensions/gsd/commands-config.js +3 -2
- package/dist/resources/extensions/gsd/commands-debug.js +22 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +534 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +50 -7
- package/dist/resources/extensions/gsd/commands-handlers.js +8 -7
- package/dist/resources/extensions/gsd/commands-logs.js +2 -1
- package/dist/resources/extensions/gsd/commands-mcp-status.js +3 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -1
- package/dist/resources/extensions/gsd/commands-scan.js +2 -1
- package/dist/resources/extensions/gsd/commands-ship.js +67 -1
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +5 -4
- package/dist/resources/extensions/gsd/commands-worktree.js +309 -0
- package/dist/resources/extensions/gsd/context-budget.js +11 -3
- package/dist/resources/extensions/gsd/crash-recovery.js +160 -47
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/auto-workers.js +227 -0
- package/dist/resources/extensions/gsd/db/command-queue.js +105 -0
- package/dist/resources/extensions/gsd/db/milestone-leases.js +210 -0
- package/dist/resources/extensions/gsd/db/runtime-kv.js +91 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +322 -0
- package/dist/resources/extensions/gsd/db-writer.js +150 -92
- package/dist/resources/extensions/gsd/deep-project-setup-policy.js +212 -0
- package/dist/resources/extensions/gsd/delegation-policy.js +155 -0
- package/dist/resources/extensions/gsd/detection.js +7 -7
- package/dist/resources/extensions/gsd/dispatch-guard.js +6 -10
- package/dist/resources/extensions/gsd/docs/COORDINATION.md +42 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +16 -4
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +2 -2
- package/dist/resources/extensions/gsd/doctor-proactive.js +4 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +2 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +115 -7
- package/dist/resources/extensions/gsd/doctor.js +12 -2
- package/dist/resources/extensions/gsd/error-classifier.js +1 -1
- package/dist/resources/extensions/gsd/eval-review-schema.js +208 -0
- package/dist/resources/extensions/gsd/forensics.js +17 -9
- package/dist/resources/extensions/gsd/git-service.js +86 -9
- package/dist/resources/extensions/gsd/gsd-db.js +442 -14
- package/dist/resources/extensions/gsd/gsd-home.js +29 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +1 -1
- package/dist/resources/extensions/gsd/guided-flow.js +416 -142
- package/dist/resources/extensions/gsd/init-wizard.js +16 -23
- package/dist/resources/extensions/gsd/interrupted-session.js +45 -7
- package/dist/resources/extensions/gsd/key-manager.js +2 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +59 -66
- package/dist/resources/extensions/gsd/memory-store.js +66 -31
- package/dist/resources/extensions/gsd/metrics.js +287 -1
- package/dist/resources/extensions/gsd/migrate/command.js +3 -2
- package/dist/resources/extensions/gsd/milestone-id-reservation.js +36 -0
- package/dist/resources/extensions/gsd/milestone-scope-classifier.js +10 -8
- package/dist/resources/extensions/gsd/model-router.js +114 -9
- package/dist/resources/extensions/gsd/native-git-bridge.js +26 -43
- package/dist/resources/extensions/gsd/onboarding-state.js +2 -2
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -13
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +5 -2
- package/dist/resources/extensions/gsd/paths.js +151 -9
- package/dist/resources/extensions/gsd/planning-depth.js +114 -0
- package/dist/resources/extensions/gsd/preferences-models.js +109 -16
- package/dist/resources/extensions/gsd/preferences-skills.js +2 -1
- package/dist/resources/extensions/gsd/preferences-types.js +6 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +41 -0
- package/dist/resources/extensions/gsd/preferences.js +25 -7
- package/dist/resources/extensions/gsd/project-research-policy.js +182 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +25 -15
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -4
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +10 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +148 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +126 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -1
- package/dist/resources/extensions/gsd/prompts/guided-research-decision.md +70 -0
- package/dist/resources/extensions/gsd/prompts/guided-research-project.md +120 -0
- package/dist/resources/extensions/gsd/prompts/guided-workflow-preferences.md +68 -0
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +2 -0
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +18 -6
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +10 -0
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +2 -0
- package/dist/resources/extensions/gsd/prompts/system.md +4 -4
- package/dist/resources/extensions/gsd/queue-order.js +6 -1
- package/dist/resources/extensions/gsd/repo-identity.js +20 -9
- package/dist/resources/extensions/gsd/rethink.js +2 -1
- package/dist/resources/extensions/gsd/safety/git-checkpoint.js +8 -1
- package/dist/resources/extensions/gsd/schemas/__fixtures__/valid-project.md +26 -0
- package/dist/resources/extensions/gsd/schemas/__fixtures__/valid-requirements.md +57 -0
- package/dist/resources/extensions/gsd/schemas/__fixtures__/valid-roadmap.md +19 -0
- package/dist/resources/extensions/gsd/schemas/parsers.js +276 -0
- package/dist/resources/extensions/gsd/schemas/validate.js +364 -0
- package/dist/resources/extensions/gsd/skill-telemetry.js +3 -2
- package/dist/resources/extensions/gsd/slice-cadence.js +56 -7
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +9 -3
- package/dist/resources/extensions/gsd/state.js +153 -377
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
- package/dist/resources/extensions/gsd/templates/project.md +10 -0
- package/dist/resources/extensions/gsd/token-counter.js +1 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -5
- package/dist/resources/extensions/gsd/tools/complete-slice.js +7 -12
- package/dist/resources/extensions/gsd/tools/complete-task.js +19 -31
- package/dist/resources/extensions/gsd/tools/memory-tools.js +18 -1
- package/dist/resources/extensions/gsd/tools/plan-slice.js +6 -5
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -5
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +74 -11
- package/dist/resources/extensions/gsd/unit-context-manifest.js +125 -5
- package/dist/resources/extensions/gsd/unit-runtime.js +88 -24
- package/dist/resources/extensions/gsd/uok/plan-v2.js +14 -1
- package/dist/resources/extensions/gsd/user-input-boundary.js +157 -0
- package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
- package/dist/resources/extensions/gsd/watch/header-renderer.js +4 -1
- package/dist/resources/extensions/gsd/workflow-install.js +2 -3
- package/dist/resources/extensions/gsd/workflow-manifest.js +2 -1
- package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +3 -21
- package/dist/resources/extensions/gsd/workflow-mcp.js +41 -5
- package/dist/resources/extensions/gsd/workflow-migration.js +4 -3
- package/dist/resources/extensions/gsd/workflow-plugins.js +3 -5
- package/dist/resources/extensions/gsd/workflow-reconcile.js +3 -3
- package/dist/resources/extensions/gsd/workflow-templates.js +2 -3
- package/dist/resources/extensions/gsd/workspace.js +59 -0
- package/dist/resources/extensions/gsd/worktree-command.js +30 -49
- package/dist/resources/extensions/gsd/worktree-manager.js +26 -7
- package/dist/resources/extensions/gsd/worktree-resolver.js +111 -19
- package/dist/resources/extensions/gsd/worktree-root.js +163 -0
- package/dist/resources/extensions/gsd/worktree-session-state.js +33 -0
- package/dist/resources/extensions/gsd/worktree.js +4 -115
- package/dist/resources/extensions/gsd/write-intercept.js +3 -3
- package/dist/resources/extensions/mcp-client/index.js +6 -9
- package/dist/resources/extensions/ollama/index.js +15 -2
- package/dist/resources/extensions/ollama/model-capabilities.js +31 -0
- package/dist/resources/extensions/ollama/ollama-client.js +40 -4
- package/dist/resources/extensions/remote-questions/remote-command.js +2 -1
- package/dist/resources/extensions/remote-questions/status.js +2 -5
- package/dist/resources/extensions/remote-questions/store.js +2 -5
- package/dist/resources/extensions/search-the-web/provider.js +9 -8
- package/dist/resources/extensions/shared/next-action-ui.js +7 -0
- package/dist/resources/extensions/slash-commands/create-extension.js +36 -22
- package/dist/resources/extensions/subagent/index.js +341 -190
- package/dist/resources/extensions/subagent/isolation.js +2 -2
- package/dist/resources/extensions/ttsr/rule-loader.js +2 -3
- package/dist/resources/extensions/voice/index.js +3 -2
- package/dist/resources/extensions/voice/linux-ready.js +2 -2
- package/dist/resources/skills/create-gsd-extension/SKILL.md +9 -5
- package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
- package/dist/resources/skills/lint/SKILL.md +4 -0
- package/dist/resources/skills/review/SKILL.md +4 -0
- package/dist/resources/skills/test/SKILL.md +3 -0
- package/dist/resources/skills/verify-before-complete/SKILL.md +1 -1
- package/dist/rtk-shared.d.ts +3 -0
- package/dist/rtk-shared.js +17 -0
- package/dist/rtk.d.ts +2 -5
- package/dist/rtk.js +3 -20
- package/dist/runtime-checks.d.ts +27 -0
- package/dist/runtime-checks.js +38 -0
- package/dist/tool-bootstrap.js +7 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +16 -16
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +47 -7
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/api/boot/route.js +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 +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 +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 +2 -2
- 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/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +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 +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/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +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/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +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 +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 +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 +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 +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 +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 +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 +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 +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/notifications/route.js +2 -2
- 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 +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/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +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 +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/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +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 +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 +4 -2
- 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 +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 +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 +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +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 +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 +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/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
- package/dist/web/standalone/.next/server/chunks/2331.js +16 -16
- package/dist/web/standalone/.next/server/chunks/4741.js +12 -12
- package/dist/web/standalone/.next/server/chunks/5822.js +2 -2
- package/dist/web/standalone/.next/server/chunks/63.js +8 -8
- package/dist/web/standalone/.next/server/chunks/6336.js +1 -0
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/functions-config-manifest.json +9 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +2 -29
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +12 -4
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
- package/dist/web/standalone/.next/static/chunks/2059.d6f49d697b624f2b.js +20 -0
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +1 -0
- package/dist/web/standalone/.next/static/chunks/2824.461404167557f2cd.js +1 -0
- package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +1 -0
- package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +1 -0
- package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +1 -0
- package/dist/web/standalone/.next/static/chunks/363642f4.c6481b47ee815ba0.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3794-42fdce068d44fa4f.js → 3794-3fb4e6ee851037bb.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{4447.5bad7871be61ca73.js → 4447.fe6f304888d5ac71.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/5326.def6842b53fecd26.js +1 -0
- package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +1 -0
- package/dist/web/standalone/.next/static/chunks/8336.6f6f30e410419aff.js +10 -0
- package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +2 -0
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-151349214571e2b6.js → page-ff639266d978f2a0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{framework-711ef29bc66f648c.js → framework-34a8c4228d7fd161.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{main-6919d9dd919bd15f.js → main-2b7d1294417bb6bc.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/webpack-d82dbee6356c1733.js +1 -0
- package/dist/web/standalone/.next/static/css/{632cd626b1731d88.css → 54ec2745c1da488b.css} +1 -1
- package/dist/web/standalone/node_modules/@next/env/package.json +1 -1
- package/dist/web/standalone/node_modules/baseline-browser-mapping/dist/index.cjs +1 -1
- package/dist/web/standalone/node_modules/baseline-browser-mapping/package.json +3 -3
- package/dist/web/standalone/node_modules/caniuse-lite/data/agents.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/browserVersions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/aac.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/abortcontroller.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ac3-ec3.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/accelerometer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/addeventlistener.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/alternate-stylesheet.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ambient-light.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/apng.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/array-find-index.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/array-find.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/array-flat.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/array-includes.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/arrow-functions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/asmjs.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/async-clipboard.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/async-functions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/atob-btoa.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/audio-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/audio.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/audiotracks.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/autofocus.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/auxclick.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/av1.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/avif.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-attachment.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-clip-text.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-img-opts.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-position-x-y.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-repeat-round-space.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/background-sync.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/battery-status.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/beacon.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/beforeafterprint.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/bigint.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/blobbuilder.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/bloburls.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/border-image.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/border-radius.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/broadcastchannel.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/brotli.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/calc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/canvas-blending.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/canvas-text.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/canvas.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ch-unit.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/chacha20-poly1305.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/channel-messaging.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/childnode-remove.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/classlist.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/clipboard.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/colr-v1.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/colr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/comparedocumentposition.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/console-basic.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/console-time.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/const.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/constraint-validation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/contenteditable.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/cookie-store-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/cors.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/createimagebitmap.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/credential-management.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/cross-document-view-transitions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/cryptography.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-all.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-anchor-positioning.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-animation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-any-link.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-appearance.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-at-counter-style.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-autofill.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-backdrop-filter.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-background-offsets.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-boxshadow.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-canvas.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-caret-color.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-cascade-layers.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-cascade-scope.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-case-insensitive.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-clip-path.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-color-adjust.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-color-function.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-conic-gradients.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-container-queries-style.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-container-queries.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-container-query-units.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-containment.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-content-visibility.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-counters.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-crisp-edges.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-cross-fade.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-default-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-deviceadaptation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-dir-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-display-contents.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-element-function.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-env-function.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-exclusions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-featurequeries.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-file-selector-button.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-filter-function.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-filters.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-first-letter.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-first-line.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-fixed.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-focus-visible.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-focus-within.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-font-palette.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-font-stretch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-gencontent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-gradients.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-grid-animation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-grid-lanes.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-grid.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-has.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-hyphens.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-if.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-image-orientation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-image-set.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-in-out-of-range.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-initial-letter.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-initial-value.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-lch-lab.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-letter-spacing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-line-clamp.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-logical-props.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-marker-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-masks.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-matches-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-math-functions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-media-interaction.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-media-range-syntax.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-media-resolution.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-media-scripting.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-mediaqueries.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-mixblendmode.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-module-scripts.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-motion-paths.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-namespaces.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-nesting.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-not-sel-list.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-nth-child-of.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-opacity.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-optional-pseudo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-overflow-anchor.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-overflow-overlay.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-overflow.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-page-break.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-paged-media.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-paint-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-placeholder-shown.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-placeholder.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-print-color-adjust.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-read-only-write.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-rebeccapurple.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-reflections.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-regions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-relative-colors.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-repeating-gradients.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-resize.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-revert-value.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-rrggbbaa.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-scroll-behavior.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-scrollbar.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-sel2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-sel3.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-selection.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-shapes.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-snappoints.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-sticky.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-subgrid.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-supports-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-table.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-align-last.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-box-trim.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-indent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-justify.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-orientation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-spacing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-text-wrap-balance.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-textshadow.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-touch-action.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-transitions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-unicode-bidi.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-unset-value.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-variables.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-when-else.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-widows-orphans.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-width-stretch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-writing-mode.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css-zoom.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-attr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-boxsizing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-colors.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-cursors-grab.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-cursors-newer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-cursors.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/css3-tabsize.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/currentcolor.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/custom-elements.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/custom-elementsv1.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/customevent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/customizable-select.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/datalist.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dataset.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/datauri.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/decorators.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/details.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/deviceorientation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/devicepixelratio.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dialog.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dispatchevent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dnssec.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/do-not-track.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/document-currentscript.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/document-execcommand.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/document-policy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/document-scrollingelement.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/documenthead.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dom-manip-convenience.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dom-range.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/domcontentloaded.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dommatrix.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/download.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/dragndrop.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/element-closest.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/element-from-point.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/element-scroll-methods.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/eme.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/eot.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es5.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-class.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-generators.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-module.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-number.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6-string-includes.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/es6.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/eventsource.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/extended-system-fonts.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/feature-policy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/fetch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/fieldset-disabled.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/fileapi.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/filereader.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/filereadersync.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/filesystem.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/flac.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/flexbox-gap.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/flexbox.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/flow-root.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/focusin-focusout-events.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-family-system-ui.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-feature.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-kerning.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-loading.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-size-adjust.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-smooth.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-unicode-range.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-variant-alternates.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/font-variant-numeric.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/fontface.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/form-attribute.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/form-submit-attributes.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/form-validation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/forms.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/fullscreen.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/gamepad.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/geolocation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/getboundingclientrect.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/getcomputedstyle.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/getelementsbyclassname.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/getrandomvalues.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/gyroscope.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/hardwareconcurrency.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/hashchange.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/heif.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/hevc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/hidden.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/high-resolution-time.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/history.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/html-media-capture.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/html5semantic.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/http-live-streaming.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/http2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/http3.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/iframe-sandbox.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/iframe-seamless.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/iframe-srcdoc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/imagecapture.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ime.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/import-maps.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/imports.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/indexeddb.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/indexeddb2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/inline-block.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/innertext.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-color.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-datetime.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-email-tel-url.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-event.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-file-accept.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-file-directory.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-file-multiple.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-inputmode.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-minlength.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-number.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-pattern.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-placeholder.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-range.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-search.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/input-selection.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/insert-adjacent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/insertadjacenthtml.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/internationalization.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/intersectionobserver.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/intl-pluralrules.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/intrinsic-width.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/jpeg2000.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/jpegxl.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/jpegxr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/json.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-code.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-key.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-location.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/keyboardevent-which.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/lazyload.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/let.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-icon-png.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-icon-svg.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-preconnect.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-prefetch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-preload.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/link-rel-prerender.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/loading-lazy-attr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/loading-lazy-media.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/localecompare.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/magnetometer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/matchesselector.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/matchmedia.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mathml.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/maxlength.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/media-fragments.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mediarecorder.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mediasource.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/menu.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/meta-theme-color.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/meter.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/midi.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/minmaxwh.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mp3.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mpeg-dash.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mpeg4.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/multibackgrounds.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/multicolumn.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mutation-events.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/mutationobserver.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/namevalue-storage.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/native-filesystem-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/nav-timing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/netinfo.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/notifications.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/object-entries.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/object-fit.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/object-observe.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/object-values.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/objectrtc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/offline-apps.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/offscreencanvas.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ogg-vorbis.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ogv.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ol-reversed.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/once-event-listener.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/online-status.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/opus.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/orientation-sensor.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/outline.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pad-start-end.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/page-transition-events.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pagevisibility.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/passive-event-listener.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/passkeys.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/passwordrules.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/path2d.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/payment-request.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pdf-viewer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/permissions-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/permissions-policy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/picture-in-picture.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/picture.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ping.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/png-alpha.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pointer-events.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pointer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/pointerlock.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/portals.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/prefers-color-scheme.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/progress.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/promise-finally.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/promises.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/proximity.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/proxy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/publickeypinning.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/push-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/queryselector.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/readonly-attr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/referrer-policy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/registerprotocolhandler.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rel-noopener.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rel-noreferrer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rellist.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rem.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/requestanimationframe.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/requestidlecallback.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/resizeobserver.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/resource-timing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rest-parameters.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/rtcpeerconnection.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ruby.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/run-in.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/screen-orientation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/script-async.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/script-defer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/scrollintoview.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sdch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/selection-api.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/server-timing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/serviceworkers.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/setimmediate.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/shadowdom.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/shadowdomv1.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sharedarraybuffer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sharedworkers.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sni.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/spdy.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/speech-recognition.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/speech-synthesis.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/spellcheck-attribute.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sql-storage.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/srcset.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/stream.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/streams.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/stricttransportsecurity.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/style-scoped.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/subresource-bundling.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/subresource-integrity.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-css.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-filters.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-fonts.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-fragment.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-html.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-html5.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-img.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg-smil.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/svg.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/sxg.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/tabindex-attr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/template-literals.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/template.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/temporal.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/testfeat.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/text-decoration.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/text-emphasis.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/text-overflow.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/text-size-adjust.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/text-stroke.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/textcontent.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/textencoder.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/tls1-1.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/tls1-2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/tls1-3.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/touch.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/transforms2d.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/transforms3d.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/trusted-types.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/ttf.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/typedarrays.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/u2f.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/unhandledrejection.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/url.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/urlsearchparams.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/use-strict.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/user-select-none.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/user-timing.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/variable-fonts.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/vector-effect.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/vibration.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/video.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/videotracks.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/view-transitions.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/viewport-unit-variants.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/viewport-units.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wai-aria.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wake-lock.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-bigint.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-bulk-memory.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-extended-const.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-gc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-multi-memory.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-multi-value.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-mutable-globals.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-reference-types.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-signext.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-simd.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-tail-calls.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm-threads.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wasm.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wav.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wbr-element.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/web-animation.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/web-app-manifest.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/web-bluetooth.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/web-serial.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/web-share.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webauthn.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webcodecs.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webgl.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webgl2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webgpu.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webhid.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webkit-user-drag.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webm.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webnfc.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webp.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/websockets.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webtransport.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webusb.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webvr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webvtt.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webworkers.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/webxr.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/will-change.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/woff.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/woff2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/word-break.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/wordwrap.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/x-doc-messaging.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/x-frame-options.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/xhr2.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/xhtml.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/xhtmlsmil.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/xml-serializer.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/data/features/zstd.js +1 -1
- package/dist/web/standalone/node_modules/caniuse-lite/package.json +7 -7
- package/dist/web/standalone/node_modules/next/dist/build/swc/index.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/build/webpack-config.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
- package/dist/web/standalone/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +6 -6
- package/dist/web/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/dist/web/standalone/node_modules/next/dist/server/config-schema.js +10 -2
- package/dist/web/standalone/node_modules/next/dist/server/config.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
- package/dist/web/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/app-info-log.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/lib/start-server.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/server/render.js +27 -20
- package/dist/web/standalone/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
- package/dist/web/standalone/node_modules/next/dist/telemetry/events/version.js +2 -2
- package/dist/web/standalone/node_modules/next/package.json +15 -15
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/container.js +26 -18
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/css-syntax-error.js +47 -14
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/input.js +54 -29
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/lazy-result.js +47 -37
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/map-generator.js +26 -9
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/no-work-result.js +57 -55
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/node.js +99 -31
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/parser.js +10 -9
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/previous-map.js +30 -11
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/processor.js +7 -7
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/result.js +5 -5
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/stringifier.js +69 -28
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/tokenize.js +6 -2
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/package.json +48 -48
- package/dist/web/standalone/node_modules/react/cjs/react.development.js +1 -1
- package/dist/web/standalone/node_modules/react/cjs/react.production.js +1 -1
- package/dist/web/standalone/node_modules/react/package.json +1 -1
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
- package/dist/web/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
- package/dist/web/standalone/node_modules/react-dom/package.json +2 -2
- package/dist/web/standalone/package.json +14 -8
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +27 -1
- package/dist/worktree-cli.d.ts +6 -4
- package/dist/worktree-cli.js +26 -20
- package/dist/worktree-status-banner.d.ts +1 -0
- package/dist/worktree-status-banner.js +132 -0
- package/package.json +2 -4
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +13 -11
- package/packages/mcp-server/dist/alias-telemetry.d.ts +8 -0
- package/packages/mcp-server/dist/alias-telemetry.d.ts.map +1 -0
- package/packages/mcp-server/dist/alias-telemetry.js +30 -0
- package/packages/mcp-server/dist/alias-telemetry.js.map +1 -0
- package/packages/mcp-server/dist/env-writer.d.ts +5 -1
- package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
- package/packages/mcp-server/dist/env-writer.js +41 -8
- package/packages/mcp-server/dist/env-writer.js.map +1 -1
- package/packages/mcp-server/dist/readers/graph.d.ts.map +1 -1
- package/packages/mcp-server/dist/readers/graph.js +7 -6
- package/packages/mcp-server/dist/readers/graph.js.map +1 -1
- package/packages/mcp-server/dist/readers/paths.d.ts +2 -0
- package/packages/mcp-server/dist/readers/paths.d.ts.map +1 -1
- package/packages/mcp-server/dist/readers/paths.js +163 -59
- package/packages/mcp-server/dist/readers/paths.js.map +1 -1
- package/packages/mcp-server/dist/remote-questions.d.ts +27 -0
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -1
- package/packages/mcp-server/dist/remote-questions.js +47 -2
- package/packages/mcp-server/dist/remote-questions.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +39 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +228 -52
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.d.ts +6 -1
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +35 -13
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +7 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +234 -76
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/alias-telemetry.test.ts +78 -0
- package/packages/mcp-server/src/alias-telemetry.ts +30 -0
- package/packages/mcp-server/src/env-writer.test.ts +76 -1
- package/packages/mcp-server/src/env-writer.ts +48 -9
- package/packages/mcp-server/src/import-candidates.test.ts +9 -4
- package/packages/mcp-server/src/mcp-server.test.ts +422 -2
- package/packages/mcp-server/src/parse-workflow-args.test.ts +80 -0
- package/packages/mcp-server/src/readers/graph.test.ts +5 -2
- package/packages/mcp-server/src/readers/graph.ts +14 -6
- package/packages/mcp-server/src/readers/paths.test.ts +67 -0
- package/packages/mcp-server/src/readers/paths.ts +173 -56
- package/packages/mcp-server/src/remote-questions.test.ts +103 -0
- package/packages/mcp-server/src/remote-questions.ts +53 -2
- package/packages/mcp-server/src/server.ts +284 -59
- package/packages/mcp-server/src/session-manager.ts +33 -12
- package/packages/mcp-server/src/workflow-tools.test.ts +308 -136
- package/packages/mcp-server/src/workflow-tools.ts +265 -92
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/dist/stream-process/index.js +207 -6
- package/packages/native/package.json +1 -1
- package/packages/native/src/__tests__/stream-process.test.mjs +51 -18
- package/packages/native/src/stream-process/index.ts +249 -11
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +8 -2
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +231 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +48 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +8 -2
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +13 -0
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +24 -3
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +26 -0
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +8 -2
- package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +289 -0
- package/packages/pi-ai/src/providers/anthropic-shared.ts +52 -20
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +9 -2
- package/packages/pi-ai/src/types.ts +13 -0
- package/packages/pi-ai/src/utils/repair-tool-json.ts +24 -3
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +32 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +278 -0
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +7 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +131 -55
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +43 -2
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +79 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +4 -0
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +10 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +18 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +13 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +20 -16
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +37 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.js +49 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +24 -6
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +133 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +78 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +181 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +319 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +135 -59
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +89 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +46 -2
- package/packages/pi-coding-agent/src/core/messages.ts +4 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +32 -2
- package/packages/pi-coding-agent/src/core/model-registry.ts +21 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +33 -15
- package/packages/pi-coding-agent/src/core/token-telemetry.ts +77 -0
- package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +26 -6
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +212 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +17 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
- package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +102 -0
- package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +200 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +17 -3
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +2 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +161 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +1 -0
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -3
- package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +219 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +29 -42
- package/src/resources/extensions/async-jobs/job-manager.ts +3 -0
- package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +3 -2
- package/src/resources/extensions/bg-shell/utilities.ts +2 -1
- package/src/resources/extensions/browser-tools/tools/intent.ts +13 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +20 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +21 -8
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +34 -13
- package/src/resources/extensions/github-sync/cli.ts +3 -0
- package/src/resources/extensions/github-sync/sync.ts +88 -58
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +26 -0
- package/src/resources/extensions/google-search/index.ts +2 -9
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +37 -5
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +287 -43
- package/src/resources/extensions/gsd/auto/phases.ts +110 -44
- package/src/resources/extensions/gsd/auto/run-unit.ts +26 -12
- package/src/resources/extensions/gsd/auto/session.ts +48 -6
- package/src/resources/extensions/gsd/auto/types.ts +1 -0
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +60 -30
- package/src/resources/extensions/gsd/auto-dashboard.ts +13 -2
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +62 -24
- package/src/resources/extensions/gsd/auto-dispatch.ts +327 -100
- package/src/resources/extensions/gsd/auto-post-unit.ts +150 -56
- package/src/resources/extensions/gsd/auto-prompts.ts +170 -9
- package/src/resources/extensions/gsd/auto-recovery.ts +121 -21
- package/src/resources/extensions/gsd/auto-runtime-state.ts +51 -0
- package/src/resources/extensions/gsd/auto-start.ts +73 -73
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +22 -0
- package/src/resources/extensions/gsd/auto-timers.ts +37 -5
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +2 -4
- package/src/resources/extensions/gsd/auto-worktree.ts +430 -419
- package/src/resources/extensions/gsd/auto.ts +252 -66
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -2
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +53 -20
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +9 -84
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +8 -7
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +10 -9
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +217 -47
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +12 -6
- package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +20 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +53 -12
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +103 -0
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +306 -74
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -3
- package/src/resources/extensions/gsd/commands/catalog.ts +87 -9
- package/src/resources/extensions/gsd/commands/context.ts +40 -6
- package/src/resources/extensions/gsd/commands/dispatcher.ts +11 -5
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +2 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +25 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +15 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +23 -2
- package/src/resources/extensions/gsd/commands-bootstrap.ts +7 -0
- package/src/resources/extensions/gsd/commands-codebase.ts +2 -1
- package/src/resources/extensions/gsd/commands-config.ts +3 -2
- package/src/resources/extensions/gsd/commands-debug.ts +27 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +716 -0
- package/src/resources/extensions/gsd/commands-extensions.ts +47 -7
- package/src/resources/extensions/gsd/commands-handlers.ts +8 -7
- package/src/resources/extensions/gsd/commands-logs.ts +2 -1
- package/src/resources/extensions/gsd/commands-mcp-status.ts +3 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +15 -1
- package/src/resources/extensions/gsd/commands-scan.ts +2 -1
- package/src/resources/extensions/gsd/commands-ship.ts +101 -1
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +5 -4
- package/src/resources/extensions/gsd/commands-worktree.ts +383 -0
- package/src/resources/extensions/gsd/context-budget.ts +13 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +177 -43
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/auto-workers.ts +273 -0
- package/src/resources/extensions/gsd/db/command-queue.ts +149 -0
- package/src/resources/extensions/gsd/db/milestone-leases.ts +274 -0
- package/src/resources/extensions/gsd/db/runtime-kv.ts +127 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +446 -0
- package/src/resources/extensions/gsd/db-writer.ts +169 -89
- package/src/resources/extensions/gsd/deep-project-setup-policy.ts +257 -0
- package/src/resources/extensions/gsd/delegation-policy.ts +197 -0
- package/src/resources/extensions/gsd/detection.ts +7 -7
- package/src/resources/extensions/gsd/dispatch-guard.ts +6 -11
- package/src/resources/extensions/gsd/docs/COORDINATION.md +42 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +16 -4
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +2 -2
- package/src/resources/extensions/gsd/doctor-proactive.ts +4 -0
- package/src/resources/extensions/gsd/doctor-providers.ts +2 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +116 -7
- package/src/resources/extensions/gsd/doctor-types.ts +4 -1
- package/src/resources/extensions/gsd/doctor.ts +10 -2
- package/src/resources/extensions/gsd/error-classifier.ts +1 -1
- package/src/resources/extensions/gsd/eval-review-schema.ts +243 -0
- package/src/resources/extensions/gsd/forensics.ts +19 -8
- package/src/resources/extensions/gsd/git-service.ts +94 -8
- package/src/resources/extensions/gsd/gsd-db.ts +453 -14
- package/src/resources/extensions/gsd/gsd-home.ts +30 -0
- package/src/resources/extensions/gsd/guided-flow-queue.ts +1 -1
- package/src/resources/extensions/gsd/guided-flow.ts +525 -143
- package/src/resources/extensions/gsd/init-wizard.ts +17 -20
- package/src/resources/extensions/gsd/interrupted-session.ts +50 -6
- package/src/resources/extensions/gsd/journal.ts +4 -1
- package/src/resources/extensions/gsd/key-manager.ts +2 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +58 -79
- package/src/resources/extensions/gsd/memory-store.ts +81 -28
- package/src/resources/extensions/gsd/metrics.ts +321 -1
- package/src/resources/extensions/gsd/migrate/command.ts +3 -2
- package/src/resources/extensions/gsd/milestone-id-reservation.ts +47 -0
- package/src/resources/extensions/gsd/milestone-scope-classifier.ts +15 -8
- package/src/resources/extensions/gsd/model-router.ts +172 -9
- package/src/resources/extensions/gsd/native-git-bridge.ts +26 -42
- package/src/resources/extensions/gsd/onboarding-state.ts +2 -2
- package/src/resources/extensions/gsd/parallel-merge.ts +14 -13
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +5 -2
- package/src/resources/extensions/gsd/paths.ts +158 -9
- package/src/resources/extensions/gsd/planning-depth.ts +137 -0
- package/src/resources/extensions/gsd/preferences-models.ts +119 -16
- package/src/resources/extensions/gsd/preferences-skills.ts +2 -1
- package/src/resources/extensions/gsd/preferences-types.ts +17 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +44 -0
- package/src/resources/extensions/gsd/preferences.ts +42 -7
- package/src/resources/extensions/gsd/project-research-policy.ts +259 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +28 -15
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -4
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -3
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +10 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +148 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +126 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +8 -1
- package/src/resources/extensions/gsd/prompts/guided-research-decision.md +70 -0
- package/src/resources/extensions/gsd/prompts/guided-research-project.md +120 -0
- package/src/resources/extensions/gsd/prompts/guided-workflow-preferences.md +68 -0
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +2 -0
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/plan-slice.md +18 -6
- package/src/resources/extensions/gsd/prompts/refine-slice.md +10 -0
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +2 -0
- package/src/resources/extensions/gsd/prompts/system.md +4 -4
- package/src/resources/extensions/gsd/queue-order.ts +6 -1
- package/src/resources/extensions/gsd/repo-identity.ts +15 -9
- package/src/resources/extensions/gsd/rethink.ts +2 -1
- package/src/resources/extensions/gsd/safety/git-checkpoint.ts +10 -1
- package/src/resources/extensions/gsd/schemas/__fixtures__/valid-project.md +26 -0
- package/src/resources/extensions/gsd/schemas/__fixtures__/valid-requirements.md +57 -0
- package/src/resources/extensions/gsd/schemas/__fixtures__/valid-roadmap.md +19 -0
- package/src/resources/extensions/gsd/schemas/parsers.ts +346 -0
- package/src/resources/extensions/gsd/schemas/validate.ts +452 -0
- package/src/resources/extensions/gsd/skill-telemetry.ts +3 -2
- package/src/resources/extensions/gsd/slice-cadence.ts +71 -6
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +9 -3
- package/src/resources/extensions/gsd/state.ts +176 -394
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
- package/src/resources/extensions/gsd/templates/project.md +10 -0
- package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/artifact-validators.test.ts +524 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +42 -17
- package/src/resources/extensions/gsd/tests/auto-loop-no-copy-artifacts.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/auto-loop-symlink-worktree.test.ts +190 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +274 -30
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +21 -34
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +24 -5
- package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +331 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +21 -4
- package/src/resources/extensions/gsd/tests/auto-workers.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +176 -0
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +138 -211
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +50 -27
- package/src/resources/extensions/gsd/tests/command-queue.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +612 -0
- package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +142 -59
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -4
- package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +6 -7
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +76 -34
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +18 -5
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +203 -0
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +191 -31
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +42 -23
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +7 -47
- package/src/resources/extensions/gsd/tests/db-writer-path-containment.test.ts +152 -0
- package/src/resources/extensions/gsd/tests/db-writer-root-artifact.test.ts +221 -0
- package/src/resources/extensions/gsd/tests/db-writer-scope.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +165 -21
- package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/deep-mode-integration.test.ts +406 -0
- package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +881 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +1562 -0
- package/src/resources/extensions/gsd/tests/deep-project-setup-policy.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/delegation-policy.test.ts +151 -0
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +6 -5
- package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +10 -38
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +136 -56
- package/src/resources/extensions/gsd/tests/derive-state-draft.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +119 -61
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/detect-stuck-respects-retry.test.ts +173 -0
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +22 -87
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +7 -118
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +18 -60
- package/src/resources/extensions/gsd/tests/dispatch-backgroundable-annotation.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +6 -20
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +14 -15
- package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +14 -76
- package/src/resources/extensions/gsd/tests/draft-promotion.test.ts +3 -23
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +11 -16
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/eval-review-schema.test.ts +282 -0
- package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +22 -83
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +1 -63
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound-corrections.test.ts +246 -0
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/git-checkpoint.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +25 -65
- package/src/resources/extensions/gsd/tests/gsd-db-failed-open-restore.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/gsd-db-workspace-scope.test.ts +226 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/gsd-home.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/gsd-root-canonical.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/gsd-root-home-guard.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +15 -36
- package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/handler-worktree-write-isolation.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +22 -12
- package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +93 -11
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +254 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +24 -10
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +75 -23
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +15 -15
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +15 -5
- package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +0 -23
- package/src/resources/extensions/gsd/tests/integration/workspace-collapse-integration.test.ts +369 -0
- package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +72 -25
- package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +72 -25
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +124 -7
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +84 -9
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +9 -6
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +131 -2
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +124 -0
- package/src/resources/extensions/gsd/tests/metrics-atomic-merge.test.ts +222 -0
- package/src/resources/extensions/gsd/tests/metrics-lock-hardening.test.ts +400 -0
- package/src/resources/extensions/gsd/tests/metrics-lock-not-acquired.test.ts +141 -0
- package/src/resources/extensions/gsd/tests/metrics-lock-retry-sleep.test.ts +287 -0
- package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/metrics-scope.test.ts +378 -0
- package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +152 -0
- package/src/resources/extensions/gsd/tests/milestone-leases.test.ts +152 -0
- package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +18 -1
- package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/model-router.test.ts +169 -8
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +22 -2
- package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +51 -3
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +329 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +32 -43
- package/src/resources/extensions/gsd/tests/parallel-milestone-isolation.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/park-milestone.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/path-cache-decoupled.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/path-normalization-unified.test.ts +175 -0
- package/src/resources/extensions/gsd/tests/paths-cache.test.ts +170 -0
- package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +4 -10
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-artifact-verification.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -43
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/planning-depth-setter.test.ts +172 -0
- package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +3 -17
- package/src/resources/extensions/gsd/tests/preferences.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +25 -16
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/projection-regression.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +232 -28
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/quality-gates.test.ts +7 -16
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +267 -0
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +286 -8
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/resolve-ts.mjs +4 -0
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/runtime-kv.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +168 -19
- package/src/resources/extensions/gsd/tests/skipped-validation-completion.test.ts +133 -28
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +10 -56
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +23 -1
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +15 -16
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +23 -27
- package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +30 -15
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +134 -0
- package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +434 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +10 -33
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +101 -0
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +162 -0
- package/src/resources/extensions/gsd/tests/teardown-cleanup-parity.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/teardown-failure-clears-registry.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/token-counter.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +51 -4
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +7 -16
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +247 -0
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +15 -1
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +50 -16
- package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +239 -0
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +12 -7
- package/src/resources/extensions/gsd/tests/workflow-mcp-auto-prep.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +83 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +241 -4
- package/src/resources/extensions/gsd/tests/workspace.test.ts +196 -0
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +13 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +236 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/worktree-root-resolution.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/worktree-root.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +34 -33
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +65 -71
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +26 -151
- package/src/resources/extensions/gsd/tests/worktree.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +131 -1
- package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +43 -41
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +188 -57
- package/src/resources/extensions/gsd/tests/write-intercept.test.ts +1 -1
- package/src/resources/extensions/gsd/token-counter.ts +2 -1
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -5
- package/src/resources/extensions/gsd/tools/complete-slice.ts +7 -14
- package/src/resources/extensions/gsd/tools/complete-task.ts +19 -34
- package/src/resources/extensions/gsd/tools/memory-tools.ts +17 -1
- package/src/resources/extensions/gsd/tools/plan-slice.ts +10 -9
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +7 -5
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -14
- package/src/resources/extensions/gsd/unit-context-manifest.ts +141 -13
- package/src/resources/extensions/gsd/unit-runtime.ts +76 -24
- package/src/resources/extensions/gsd/uok/plan-v2.ts +19 -1
- package/src/resources/extensions/gsd/user-input-boundary.ts +166 -0
- package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +4 -1
- package/src/resources/extensions/gsd/workflow-install.ts +2 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +4 -1
- package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -18
- package/src/resources/extensions/gsd/workflow-mcp.ts +43 -6
- package/src/resources/extensions/gsd/workflow-migration.ts +4 -3
- package/src/resources/extensions/gsd/workflow-plugins.ts +4 -5
- package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
- package/src/resources/extensions/gsd/workflow-templates.ts +2 -3
- package/src/resources/extensions/gsd/workspace.ts +95 -0
- package/src/resources/extensions/gsd/worktree-command.ts +35 -47
- package/src/resources/extensions/gsd/worktree-manager.ts +46 -7
- package/src/resources/extensions/gsd/worktree-resolver.ts +112 -22
- package/src/resources/extensions/gsd/worktree-root.ts +182 -0
- package/src/resources/extensions/gsd/worktree-session-state.ts +35 -0
- package/src/resources/extensions/gsd/worktree.ts +8 -119
- package/src/resources/extensions/gsd/write-intercept.ts +3 -3
- package/src/resources/extensions/mcp-client/index.ts +6 -10
- package/src/resources/extensions/mcp-client/tests/global-config.test.ts +91 -0
- package/src/resources/extensions/ollama/index.ts +16 -2
- package/src/resources/extensions/ollama/model-capabilities.ts +34 -0
- package/src/resources/extensions/ollama/ollama-client.ts +41 -4
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +96 -0
- package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +147 -0
- package/src/resources/extensions/remote-questions/remote-command.ts +2 -1
- package/src/resources/extensions/remote-questions/status.ts +2 -6
- package/src/resources/extensions/remote-questions/store.ts +2 -6
- package/src/resources/extensions/search-the-web/provider.ts +9 -8
- package/src/resources/extensions/shared/next-action-ui.ts +8 -0
- package/src/resources/extensions/shared/tests/next-action-ui-hasui.test.ts +112 -0
- package/src/resources/extensions/slash-commands/create-extension.ts +38 -24
- package/src/resources/extensions/subagent/index.ts +187 -16
- package/src/resources/extensions/subagent/isolation.ts +2 -2
- package/src/resources/extensions/subagent/tests/model-override.test.ts +55 -0
- package/src/resources/extensions/ttsr/rule-loader.ts +2 -3
- package/src/resources/extensions/voice/index.ts +3 -2
- package/src/resources/extensions/voice/linux-ready.ts +2 -3
- package/src/resources/skills/create-gsd-extension/SKILL.md +9 -5
- package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
- package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +58 -0
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
- package/src/resources/skills/lint/SKILL.md +4 -0
- package/src/resources/skills/review/SKILL.md +4 -0
- package/src/resources/skills/test/SKILL.md +3 -0
- package/src/resources/skills/verify-before-complete/SKILL.md +1 -1
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +0 -601
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +0 -651
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +0 -91
- package/dist/resources/extensions/gsd/auto-loop.js +0 -13
- package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +0 -3
- package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +0 -3
- package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -30
- package/dist/resources/extensions/gsd/prompts/guided-plan-slice.md +0 -3
- package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +0 -53
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +0 -112
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +0 -23
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +0 -5
- package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
- package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +0 -608
- package/dist/web/standalone/.next/server/chunks/1926.js +0 -1
- package/dist/web/standalone/.next/server/edge-runtime-webpack.js +0 -2
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +0 -11
- package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +0 -20
- package/dist/web/standalone/.next/static/chunks/363642f4.cf8b455e0d94b478.js +0 -1
- package/dist/web/standalone/.next/static/chunks/5326.adc4bf49a22f4e67.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +0 -1
- package/src/resources/extensions/gsd/auto-loop.ts +0 -16
- package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +0 -3
- package/src/resources/extensions/gsd/prompts/guided-execute-task.md +0 -3
- package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +0 -30
- package/src/resources/extensions/gsd/prompts/guided-plan-slice.md +0 -3
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -213
- package/src/resources/extensions/gsd/tests/auto-stale-lock-self-kill.test.ts +0 -87
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +0 -22
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -75
- package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -158
- package/dist/web/standalone/.next/static/{7afp7gq8-DVbxum83zRQ- → J-CU-p_sp45CJHT3R9TJS}/_buildManifest.js +0 -0
- package/dist/web/standalone/.next/static/{7afp7gq8-DVbxum83zRQ- → J-CU-p_sp45CJHT3R9TJS}/_ssgManifest.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/at-rule.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/comment.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/declaration.js +4 -4
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/document.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/fromJSON.js +3 -3
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/list.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/root.js +0 -0
- package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/rule.js +6 -6
- /package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/stringify.js +0 -0
- /package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/symbols.js +0 -0
- /package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/terminal-highlight.js +0 -0
- /package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/warn-once.js +0 -0
- /package/dist/web/standalone/node_modules/{next/node_modules/postcss → postcss}/lib/warning.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/classes/comparator.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/classes/range.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/classes/semver.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/cmp.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/coerce.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/compare.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/eq.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/gt.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/gte.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/lt.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/lte.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/neq.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/parse.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/functions/satisfies.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/constants.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/debug.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/identifiers.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/lrucache.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/parse-options.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/internal/re.js +0 -0
- /package/dist/web/standalone/node_modules/{semver → sharp/node_modules/semver}/package.json +0 -0
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
lstatSync as lstatSyncFn,
|
|
20
20
|
} from "node:fs";
|
|
21
21
|
import { isAbsolute, join, sep as pathSep } from "node:path";
|
|
22
|
-
import { homedir } from "node:os";
|
|
23
22
|
import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
|
|
24
23
|
import {
|
|
25
24
|
reconcileWorktreeDb,
|
|
@@ -33,7 +32,7 @@ import {
|
|
|
33
32
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
34
33
|
import { execFileSync } from "node:child_process";
|
|
35
34
|
import { safeCopy, safeCopyRecursive } from "./safe-fs.js";
|
|
36
|
-
import { gsdRoot } from "./paths.js";
|
|
35
|
+
import { gsdRoot, resolveGsdPathContract } from "./paths.js";
|
|
37
36
|
import {
|
|
38
37
|
createWorktree,
|
|
39
38
|
removeWorktree,
|
|
@@ -46,10 +45,16 @@ import {
|
|
|
46
45
|
resolveGitHeadPath,
|
|
47
46
|
nudgeGitBranchCache,
|
|
48
47
|
} from "./worktree.js";
|
|
48
|
+
import {
|
|
49
|
+
isGsdWorktreePath,
|
|
50
|
+
normalizeWorktreePathForCompare,
|
|
51
|
+
resolveWorktreeProjectRoot,
|
|
52
|
+
} from "./worktree-root.js";
|
|
49
53
|
import { MergeConflictError, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
|
|
50
54
|
import { debugLog } from "./debug-logger.js";
|
|
51
55
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
52
56
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
57
|
+
import { MILESTONE_ID_RE } from "./milestone-ids.js";
|
|
53
58
|
import {
|
|
54
59
|
nativeGetCurrentBranch,
|
|
55
60
|
nativeDetectMainBranch,
|
|
@@ -70,17 +75,24 @@ import {
|
|
|
70
75
|
nativeIsAncestor,
|
|
71
76
|
nativeMergeAbort,
|
|
72
77
|
} from "./native-git-bridge.js";
|
|
78
|
+
import { gsdHome } from "./gsd-home.js";
|
|
79
|
+
import { type MilestoneScope, type GsdWorkspace, createWorkspace } from "./workspace.js";
|
|
73
80
|
|
|
74
|
-
const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
|
|
75
81
|
const PROJECT_PREFERENCES_FILE = "PREFERENCES.md";
|
|
76
82
|
const LEGACY_PROJECT_PREFERENCES_FILE = "preferences.md";
|
|
83
|
+
const LEGACY_DEEP_SETUP_RUNTIME_UNIT_FILES = new Set([
|
|
84
|
+
"workflow-preferences-WORKFLOW-PREFS.json",
|
|
85
|
+
"discuss-project-PROJECT.json",
|
|
86
|
+
"discuss-requirements-REQUIREMENTS.json",
|
|
87
|
+
"research-decision-RESEARCH-DECISION.json",
|
|
88
|
+
"research-project-RESEARCH-PROJECT.json",
|
|
89
|
+
]);
|
|
77
90
|
|
|
78
91
|
// ─── Shared Constants & Helpers ─────────────────────────────────────────────
|
|
79
92
|
|
|
80
93
|
/**
|
|
81
|
-
* Root-level .gsd/
|
|
82
|
-
*
|
|
83
|
-
* and the dispatch-level sync functions.
|
|
94
|
+
* Root-level .gsd/ projections copied from project root into worktrees for
|
|
95
|
+
* compatibility. Project root remains the canonical state/projection root.
|
|
84
96
|
*/
|
|
85
97
|
const ROOT_STATE_FILES = [
|
|
86
98
|
"DECISIONS.md",
|
|
@@ -98,6 +110,11 @@ const ROOT_STATE_FILES = [
|
|
|
98
110
|
// because the project root is authoritative for preferences (#2684).
|
|
99
111
|
] as const;
|
|
100
112
|
|
|
113
|
+
const ROOT_DIAGNOSTIC_FILES = [
|
|
114
|
+
"completed-units.json",
|
|
115
|
+
"metrics.json",
|
|
116
|
+
] as const;
|
|
117
|
+
|
|
101
118
|
/**
|
|
102
119
|
* Pop a stash entry by tracking the unique marker embedded in its message so
|
|
103
120
|
* concurrent stash operations against the same project root cannot cause us to
|
|
@@ -182,7 +199,7 @@ const VERDICT_RE = /verdict:\s*[\w-]+/i;
|
|
|
182
199
|
* destination when the source copy contains a `verdict:` field.
|
|
183
200
|
*
|
|
184
201
|
* This is the targeted fix for the UAT stuck-loop (#2821): the main
|
|
185
|
-
* safeCopyRecursive uses force:false to protect worktree-
|
|
202
|
+
* safeCopyRecursive uses force:false to protect worktree-local projection
|
|
186
203
|
* files (#1886), but ASSESSMENT files written by run-uat must be
|
|
187
204
|
* forward-synced when the project root has a verdict. Without this,
|
|
188
205
|
* the worktree retains a stale FAIL or missing ASSESSMENT and
|
|
@@ -238,14 +255,25 @@ function forceOverwriteAssessmentsWithVerdict(
|
|
|
238
255
|
|
|
239
256
|
// ─── Module State ──────────────────────────────────────────────────────────
|
|
240
257
|
|
|
241
|
-
/**
|
|
242
|
-
let
|
|
258
|
+
/** Active workspace registry — replaces the legacy `originalBase` singleton. */
|
|
259
|
+
let activeWorkspace: GsdWorkspace | null = null;
|
|
260
|
+
|
|
261
|
+
function setActiveWorkspace(ws: GsdWorkspace | null): void {
|
|
262
|
+
activeWorkspace = ws;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function getActiveWorkspace(): GsdWorkspace | null {
|
|
266
|
+
return activeWorkspace;
|
|
267
|
+
}
|
|
243
268
|
|
|
244
269
|
function clearProjectRootStateFiles(basePath: string, milestoneId: string): void {
|
|
245
270
|
const gsdDir = gsdRoot(basePath);
|
|
271
|
+
// Phase C pt 2: auto.lock removed from this list — the file is gone
|
|
272
|
+
// (migrated to the workers + unit_dispatches + runtime_kv tables). The
|
|
273
|
+
// remaining transient files (STATE.md, {MID}-META.json) are still
|
|
274
|
+
// worth removing on teardown.
|
|
246
275
|
const transientFiles = [
|
|
247
276
|
join(gsdDir, "STATE.md"),
|
|
248
|
-
join(gsdDir, "auto.lock"),
|
|
249
277
|
join(gsdDir, "milestones", milestoneId, `${milestoneId}-META.json`),
|
|
250
278
|
];
|
|
251
279
|
|
|
@@ -260,9 +288,9 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
|
|
|
260
288
|
}
|
|
261
289
|
}
|
|
262
290
|
|
|
263
|
-
// Clean up
|
|
264
|
-
//
|
|
265
|
-
//
|
|
291
|
+
// Clean up legacy synced milestone directories and runtime/units.
|
|
292
|
+
// Older versions copied these into the project root during execution.
|
|
293
|
+
// If they remain as untracked files when we attempt
|
|
266
294
|
// `git merge --squash`, git rejects the merge with "local changes would
|
|
267
295
|
// be overwritten", causing silent data loss (#1738).
|
|
268
296
|
const syncedDirs = [
|
|
@@ -329,6 +357,41 @@ export const isSafeToAutoResolve = (filePath: string): boolean =>
|
|
|
329
357
|
* gsd.db in the worktree so it rebuilds from fresh disk state (#853).
|
|
330
358
|
* Non-fatal — sync failure should never block dispatch.
|
|
331
359
|
*/
|
|
360
|
+
/**
|
|
361
|
+
* Scope-typed variant of syncProjectRootToWorktree.
|
|
362
|
+
*
|
|
363
|
+
* Takes an explicit (rootScope, worktreeScope) pair where rootScope is the
|
|
364
|
+
* project root and worktreeScope is the auto-worktree. Direction is encoded
|
|
365
|
+
* in argument order. Asserts both scopes belong to the same workspace identity
|
|
366
|
+
* to prevent silent mismatch bugs.
|
|
367
|
+
*/
|
|
368
|
+
export function syncProjectRootToWorktreeByScope(
|
|
369
|
+
rootScope: MilestoneScope,
|
|
370
|
+
worktreeScope: MilestoneScope,
|
|
371
|
+
): void {
|
|
372
|
+
if (rootScope.workspace.identityKey !== worktreeScope.workspace.identityKey) {
|
|
373
|
+
throw new Error(
|
|
374
|
+
`syncProjectRootToWorktreeByScope: scope identity mismatch — ` +
|
|
375
|
+
`rootScope.identityKey="${rootScope.workspace.identityKey}" ` +
|
|
376
|
+
`worktreeScope.identityKey="${worktreeScope.workspace.identityKey}"`,
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
if (rootScope.milestoneId !== worktreeScope.milestoneId) {
|
|
380
|
+
throw new Error(
|
|
381
|
+
`syncProjectRootToWorktreeByScope: milestoneId mismatch — ` +
|
|
382
|
+
`rootScope.milestoneId="${rootScope.milestoneId}" worktreeScope.milestoneId="${worktreeScope.milestoneId}"`,
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
const projectRoot = rootScope.workspace.projectRoot;
|
|
386
|
+
const worktreePath_ = worktreeScope.workspace.worktreeRoot ?? worktreeScope.workspace.projectRoot;
|
|
387
|
+
const milestoneId = rootScope.milestoneId;
|
|
388
|
+
syncProjectRootToWorktree(projectRoot, worktreePath_, milestoneId);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* @deprecated Use syncProjectRootToWorktreeByScope instead.
|
|
393
|
+
* TODO(C-future): remove once all callers migrated.
|
|
394
|
+
*/
|
|
332
395
|
export function syncProjectRootToWorktree(
|
|
333
396
|
projectRoot: string,
|
|
334
397
|
worktreePath_: string,
|
|
@@ -337,8 +400,9 @@ export function syncProjectRootToWorktree(
|
|
|
337
400
|
if (!worktreePath_ || !projectRoot || worktreePath_ === projectRoot) return;
|
|
338
401
|
if (!milestoneId) return;
|
|
339
402
|
|
|
340
|
-
const
|
|
341
|
-
const
|
|
403
|
+
const contract = resolveGsdPathContract(worktreePath_, projectRoot);
|
|
404
|
+
const prGsd = contract.projectGsd;
|
|
405
|
+
const wtGsd = contract.worktreeGsd ?? join(worktreePath_, ".gsd");
|
|
342
406
|
|
|
343
407
|
// When .gsd is a symlink to the same external directory in both locations,
|
|
344
408
|
// cpSync rejects the copy because source === destination (ERR_FS_CP_EINVAL).
|
|
@@ -347,7 +411,7 @@ export function syncProjectRootToWorktree(
|
|
|
347
411
|
|
|
348
412
|
// Copy milestone directory from project root to worktree — additive only.
|
|
349
413
|
// force:false prevents cpSync from overwriting existing worktree files.
|
|
350
|
-
// Without this, worktree-
|
|
414
|
+
// Without this, worktree-local files (e.g. VALIDATION.md written
|
|
351
415
|
// by validate-milestone) get clobbered by stale project root copies,
|
|
352
416
|
// causing an infinite re-validation loop (#1886).
|
|
353
417
|
safeCopyRecursive(
|
|
@@ -357,7 +421,7 @@ export function syncProjectRootToWorktree(
|
|
|
357
421
|
);
|
|
358
422
|
|
|
359
423
|
// Force-sync ASSESSMENT files that have a verdict from project root (#2821).
|
|
360
|
-
// The additive-only copy above preserves worktree-
|
|
424
|
+
// The additive-only copy above preserves worktree-local files, but
|
|
361
425
|
// ASSESSMENT files are special: after run-uat writes a verdict and post-unit
|
|
362
426
|
// syncs it to the project root, the worktree may retain a stale copy (e.g.
|
|
363
427
|
// verdict:fail while the project root has verdict:pass from a retry). On
|
|
@@ -378,11 +442,9 @@ export function syncProjectRootToWorktree(
|
|
|
378
442
|
{ force: true },
|
|
379
443
|
);
|
|
380
444
|
|
|
381
|
-
// Delete worktree gsd.db ONLY if it is empty (0 bytes).
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
// preserved — deleting it truncates the file to 0 bytes when
|
|
385
|
-
// openDatabase re-creates it, causing "no such table" failures (#2815).
|
|
445
|
+
// Delete a legacy worktree-local gsd.db ONLY if it is empty (0 bytes).
|
|
446
|
+
// Runtime opens contract.projectDb; this cleanup only removes corrupt
|
|
447
|
+
// pre-upgrade local DB projections.
|
|
386
448
|
try {
|
|
387
449
|
const wtDb = join(wtGsd, "gsd.db");
|
|
388
450
|
let deleteSidecars = false;
|
|
@@ -416,10 +478,43 @@ export function syncProjectRootToWorktree(
|
|
|
416
478
|
}
|
|
417
479
|
|
|
418
480
|
/**
|
|
419
|
-
*
|
|
481
|
+
* Scope-typed variant of syncStateToProjectRoot.
|
|
482
|
+
*
|
|
483
|
+
* Takes an explicit (worktreeScope, rootScope) pair. Direction is encoded in
|
|
484
|
+
* argument order (worktree → root). Asserts both scopes belong to the same
|
|
485
|
+
* workspace identity to prevent silent mismatch bugs.
|
|
486
|
+
*/
|
|
487
|
+
export function syncStateToProjectRootByScope(
|
|
488
|
+
worktreeScope: MilestoneScope,
|
|
489
|
+
rootScope: MilestoneScope,
|
|
490
|
+
): void {
|
|
491
|
+
if (worktreeScope.workspace.identityKey !== rootScope.workspace.identityKey) {
|
|
492
|
+
throw new Error(
|
|
493
|
+
`syncStateToProjectRootByScope: scope identity mismatch — ` +
|
|
494
|
+
`worktreeScope.identityKey="${worktreeScope.workspace.identityKey}" ` +
|
|
495
|
+
`rootScope.identityKey="${rootScope.workspace.identityKey}"`,
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
if (worktreeScope.milestoneId !== rootScope.milestoneId) {
|
|
499
|
+
throw new Error(
|
|
500
|
+
`syncStateToProjectRootByScope: milestoneId mismatch — ` +
|
|
501
|
+
`worktreeScope.milestoneId="${worktreeScope.milestoneId}" rootScope.milestoneId="${rootScope.milestoneId}"`,
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
const worktreePath_ = worktreeScope.workspace.worktreeRoot ?? worktreeScope.workspace.projectRoot;
|
|
505
|
+
const projectRoot = rootScope.workspace.projectRoot;
|
|
506
|
+
const milestoneId = worktreeScope.milestoneId;
|
|
507
|
+
syncStateToProjectRoot(worktreePath_, projectRoot, milestoneId);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Sync worktree diagnostics from worktree to project root.
|
|
420
512
|
* Only runs when inside an auto-worktree (worktreePath differs from projectRoot).
|
|
421
|
-
*
|
|
513
|
+
* DB/project-root state remains authoritative; markdown projections are not
|
|
514
|
+
* copied from the worktree back to the project root.
|
|
422
515
|
* Non-fatal — sync failure should never block dispatch.
|
|
516
|
+
* @deprecated Use syncStateToProjectRootByScope instead.
|
|
517
|
+
* TODO(C-future): remove once all callers migrated.
|
|
423
518
|
*/
|
|
424
519
|
export function syncStateToProjectRoot(
|
|
425
520
|
worktreePath_: string,
|
|
@@ -429,31 +524,25 @@ export function syncStateToProjectRoot(
|
|
|
429
524
|
if (!worktreePath_ || !projectRoot || worktreePath_ === projectRoot) return;
|
|
430
525
|
if (!milestoneId) return;
|
|
431
526
|
|
|
432
|
-
const
|
|
433
|
-
const
|
|
527
|
+
const contract = resolveGsdPathContract(worktreePath_, projectRoot);
|
|
528
|
+
const wtGsd = contract.worktreeGsd ?? join(worktreePath_, ".gsd");
|
|
529
|
+
const prGsd = contract.projectGsd;
|
|
434
530
|
|
|
435
531
|
// When .gsd is a symlink to the same external directory in both locations,
|
|
436
532
|
// cpSync rejects the copy because source === destination (ERR_FS_CP_EINVAL).
|
|
437
533
|
// Compare realpaths and skip when they resolve to the same physical path (#2184).
|
|
438
534
|
if (isSamePath(wtGsd, prGsd)) return;
|
|
439
535
|
|
|
440
|
-
//
|
|
441
|
-
safeCopy(join(wtGsd, "STATE.md"), join(prGsd, "STATE.md"), { force: true });
|
|
442
|
-
|
|
443
|
-
// 2. Milestone directory — ROADMAP, slice PLANs, task summaries
|
|
444
|
-
// Copy the entire milestone .gsd subtree so deriveState reads current checkboxes
|
|
445
|
-
safeCopyRecursive(
|
|
446
|
-
join(wtGsd, "milestones", milestoneId),
|
|
447
|
-
join(prGsd, "milestones", milestoneId),
|
|
448
|
-
{ force: true },
|
|
449
|
-
);
|
|
450
|
-
|
|
451
|
-
// 3. metrics.json — session cost/token tracking (#2313).
|
|
536
|
+
// metrics.json — session cost/token tracking (#2313).
|
|
452
537
|
// Without this, metrics accumulated in the worktree are invisible from the
|
|
453
538
|
// project root and never appear in the dashboard or skill-health reports.
|
|
454
539
|
safeCopy(join(wtGsd, "metrics.json"), join(prGsd, "metrics.json"), { force: true });
|
|
455
540
|
|
|
456
|
-
//
|
|
541
|
+
// completed-units.json — runtime completion diagnostics used to avoid
|
|
542
|
+
// re-dispatching work already completed in an isolated worktree.
|
|
543
|
+
safeCopy(join(wtGsd, "completed-units.json"), join(prGsd, "completed-units.json"), { force: true });
|
|
544
|
+
|
|
545
|
+
// Runtime records — unit dispatch diagnostics used by selfHealRuntimeRecords().
|
|
457
546
|
// Without this, a crash during a unit leaves the runtime record only in the
|
|
458
547
|
// worktree. If the next session resolves basePath before worktree re-entry,
|
|
459
548
|
// selfHeal can't find or clear the stale record (#769).
|
|
@@ -473,7 +562,7 @@ export function syncStateToProjectRoot(
|
|
|
473
562
|
*/
|
|
474
563
|
export function readResourceVersion(): string | null {
|
|
475
564
|
const agentDir =
|
|
476
|
-
process.env.GSD_CODING_AGENT_DIR || join(gsdHome, "agent");
|
|
565
|
+
process.env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
|
|
477
566
|
const manifestPath = join(agentDir, "managed-resources.json");
|
|
478
567
|
try {
|
|
479
568
|
const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
@@ -536,9 +625,9 @@ export function escapeStaleWorktree(base: string): string {
|
|
|
536
625
|
// the string-slice heuristic matched the wrong /.gsd/ boundary. This happens
|
|
537
626
|
// when .gsd is a symlink into ~/.gsd/projects/<hash> and process.cwd()
|
|
538
627
|
// resolved through the symlink. Returning ~ would be catastrophic (#1676).
|
|
539
|
-
const candidateGsd = join(projectRoot, ".gsd")
|
|
540
|
-
const
|
|
541
|
-
if (candidateGsd ===
|
|
628
|
+
const candidateGsd = normalizeWorktreePathForCompare(join(projectRoot, ".gsd"));
|
|
629
|
+
const gsdHomeNorm = normalizeWorktreePathForCompare(gsdHome());
|
|
630
|
+
if (candidateGsd === gsdHomeNorm || candidateGsd.startsWith(gsdHomeNorm + "/")) {
|
|
542
631
|
// Don't chdir to home — return base unchanged.
|
|
543
632
|
// resolveProjectRoot() in worktree.ts has the full git-file-based recovery
|
|
544
633
|
// and will be called by the caller (startAuto → projectRoot()).
|
|
@@ -573,6 +662,27 @@ export function cleanStaleRuntimeUnits(
|
|
|
573
662
|
try {
|
|
574
663
|
for (const file of readdirSync(runtimeUnitsDir)) {
|
|
575
664
|
if (!file.endsWith(".json")) continue;
|
|
665
|
+
if (LEGACY_DEEP_SETUP_RUNTIME_UNIT_FILES.has(file)) {
|
|
666
|
+
try {
|
|
667
|
+
unlinkSync(join(runtimeUnitsDir, file));
|
|
668
|
+
cleaned++;
|
|
669
|
+
} catch (err) {
|
|
670
|
+
/* non-fatal */
|
|
671
|
+
logWarning("worktree", `stale runtime unit unlink failed (${file}): ${err instanceof Error ? err.message : String(err)}`);
|
|
672
|
+
}
|
|
673
|
+
continue;
|
|
674
|
+
}
|
|
675
|
+
const staleDiscussMatch = file.match(/^discuss-milestone-(.+)\.json$/);
|
|
676
|
+
if (staleDiscussMatch && !MILESTONE_ID_RE.test(staleDiscussMatch[1])) {
|
|
677
|
+
try {
|
|
678
|
+
unlinkSync(join(runtimeUnitsDir, file));
|
|
679
|
+
cleaned++;
|
|
680
|
+
} catch (err) {
|
|
681
|
+
/* non-fatal */
|
|
682
|
+
logWarning("worktree", `stale runtime unit unlink failed (${file}): ${err instanceof Error ? err.message : String(err)}`);
|
|
683
|
+
}
|
|
684
|
+
continue;
|
|
685
|
+
}
|
|
576
686
|
const midMatch = file.match(/(M\d+(?:-[a-z0-9]{6})?)/);
|
|
577
687
|
if (!midMatch) continue;
|
|
578
688
|
if (hasMilestoneSummary(midMatch[1])) {
|
|
@@ -594,6 +704,30 @@ export function cleanStaleRuntimeUnits(
|
|
|
594
704
|
|
|
595
705
|
// ─── Worktree ↔ Main Repo Sync (#1311) ──────────────────────────────────────
|
|
596
706
|
|
|
707
|
+
/**
|
|
708
|
+
* Scope-typed variant of syncGsdStateToWorktree.
|
|
709
|
+
*
|
|
710
|
+
* Takes an explicit (rootScope, worktreeScope) pair. Note: milestoneId is not
|
|
711
|
+
* used by syncGsdStateToWorktree — this variant only requires workspace
|
|
712
|
+
* identity. Asserts both scopes belong to the same workspace identity to
|
|
713
|
+
* prevent silent mismatch bugs.
|
|
714
|
+
*/
|
|
715
|
+
export function syncGsdStateToWorktreeByScope(
|
|
716
|
+
rootScope: MilestoneScope,
|
|
717
|
+
worktreeScope: MilestoneScope,
|
|
718
|
+
): { synced: string[] } {
|
|
719
|
+
if (rootScope.workspace.identityKey !== worktreeScope.workspace.identityKey) {
|
|
720
|
+
throw new Error(
|
|
721
|
+
`syncGsdStateToWorktreeByScope: scope identity mismatch — ` +
|
|
722
|
+
`rootScope.identityKey="${rootScope.workspace.identityKey}" ` +
|
|
723
|
+
`worktreeScope.identityKey="${worktreeScope.workspace.identityKey}"`,
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
const mainBasePath = rootScope.workspace.projectRoot;
|
|
727
|
+
const worktreePath_ = worktreeScope.workspace.worktreeRoot ?? worktreeScope.workspace.projectRoot;
|
|
728
|
+
return syncGsdStateToWorktree(mainBasePath, worktreePath_);
|
|
729
|
+
}
|
|
730
|
+
|
|
597
731
|
/**
|
|
598
732
|
* Sync .gsd/ state from the main repo into the worktree.
|
|
599
733
|
*
|
|
@@ -605,15 +739,19 @@ export function cleanStaleRuntimeUnits(
|
|
|
605
739
|
* missing milestones, CONTEXT, ROADMAP, DECISIONS, REQUIREMENTS, and
|
|
606
740
|
* PROJECT files from the main repo's .gsd/ into the worktree's .gsd/.
|
|
607
741
|
*
|
|
608
|
-
* Only adds missing content — never overwrites existing files in the worktree
|
|
609
|
-
*
|
|
742
|
+
* Only adds missing content — never overwrites existing files in the worktree.
|
|
743
|
+
* Worktree files are compatibility projections; DB/project root remains
|
|
744
|
+
* authoritative for runtime state.
|
|
745
|
+
* @deprecated Use syncGsdStateToWorktreeByScope instead.
|
|
746
|
+
* TODO(C-future): remove once all callers migrated.
|
|
610
747
|
*/
|
|
611
748
|
export function syncGsdStateToWorktree(
|
|
612
749
|
mainBasePath: string,
|
|
613
750
|
worktreePath_: string,
|
|
614
751
|
): { synced: string[] } {
|
|
615
|
-
const
|
|
616
|
-
const
|
|
752
|
+
const contract = resolveGsdPathContract(worktreePath_, mainBasePath);
|
|
753
|
+
const mainGsd = contract.projectGsd;
|
|
754
|
+
const wtGsd = contract.worktreeGsd ?? join(worktreePath_, ".gsd");
|
|
617
755
|
const synced: string[] = [];
|
|
618
756
|
|
|
619
757
|
// If both resolve to the same directory (symlink), no sync needed
|
|
@@ -757,32 +895,26 @@ export function syncGsdStateToWorktree(
|
|
|
757
895
|
}
|
|
758
896
|
|
|
759
897
|
/**
|
|
760
|
-
* Sync
|
|
761
|
-
*
|
|
762
|
-
*
|
|
898
|
+
* Sync compatibility artifacts from worktree back to the main external state
|
|
899
|
+
* directory. Canonical workflow state lives in the project DB; worktree .gsd
|
|
900
|
+
* content is legacy projection/diagnostic data only.
|
|
763
901
|
*
|
|
764
902
|
* Syncs:
|
|
765
|
-
* 1.
|
|
766
|
-
*
|
|
767
|
-
* worktree is the authoritative execution context.
|
|
768
|
-
* 2. ALL milestone directories found in the worktree — not just the
|
|
769
|
-
* current milestoneId. The complete-milestone unit may create artifacts
|
|
770
|
-
* for the *next* milestone (CONTEXT, ROADMAP, new requirements) which
|
|
771
|
-
* must survive worktree teardown.
|
|
903
|
+
* 1. Legacy worktree DBs are reconciled into the canonical project DB.
|
|
904
|
+
* 2. Runtime diagnostic files may be copied for operator visibility.
|
|
772
905
|
*
|
|
773
|
-
*
|
|
774
|
-
*
|
|
775
|
-
*
|
|
776
|
-
* squash merge carries nothing. This caused next-milestone artifacts and
|
|
777
|
-
* updated REQUIREMENTS/PROJECT to be silently lost on teardown.
|
|
906
|
+
* Markdown milestone directories are projections and are not copied from
|
|
907
|
+
* worktrees into the project root. Current workflow state must arrive through
|
|
908
|
+
* the shared project DB or the pre-upgrade DB reconciliation path above.
|
|
778
909
|
*/
|
|
779
910
|
export function syncWorktreeStateBack(
|
|
780
911
|
mainBasePath: string,
|
|
781
912
|
worktreePath: string,
|
|
782
913
|
milestoneId: string,
|
|
783
914
|
): { synced: string[] } {
|
|
784
|
-
const
|
|
785
|
-
const
|
|
915
|
+
const contract = resolveGsdPathContract(worktreePath, mainBasePath);
|
|
916
|
+
const mainGsd = contract.projectGsd;
|
|
917
|
+
const wtGsd = contract.worktreeGsd ?? join(worktreePath, ".gsd");
|
|
786
918
|
const synced: string[] = [];
|
|
787
919
|
|
|
788
920
|
// If both resolve to the same directory (symlink), no sync needed
|
|
@@ -796,7 +928,7 @@ export function syncWorktreeStateBack(
|
|
|
796
928
|
// files. This handles in-flight worktrees that were created before the
|
|
797
929
|
// upgrade to shared WAL mode.
|
|
798
930
|
const wtLocalDb = join(wtGsd, "gsd.db");
|
|
799
|
-
const mainDb =
|
|
931
|
+
const mainDb = contract.projectDb;
|
|
800
932
|
if (existsSync(wtLocalDb) && existsSync(mainDb)) {
|
|
801
933
|
try {
|
|
802
934
|
reconcileWorktreeDb(mainDb, wtLocalDb);
|
|
@@ -807,13 +939,10 @@ export function syncWorktreeStateBack(
|
|
|
807
939
|
}
|
|
808
940
|
}
|
|
809
941
|
|
|
810
|
-
// ── 1. Sync root-level
|
|
811
|
-
//
|
|
812
|
-
//
|
|
813
|
-
|
|
814
|
-
// written during milestone closeout and lost on teardown without explicit sync
|
|
815
|
-
// (#1787, #2313).
|
|
816
|
-
for (const f of ROOT_STATE_FILES) {
|
|
942
|
+
// ── 1. Sync root-level diagnostic files back ─────────────────────────
|
|
943
|
+
// Markdown/JSON state projections remain project-root/DB authoritative.
|
|
944
|
+
// These diagnostic files are copied for observability only.
|
|
945
|
+
for (const f of ROOT_DIAGNOSTIC_FILES) {
|
|
817
946
|
const src = join(wtGsd, f);
|
|
818
947
|
const dst = join(mainGsd, f);
|
|
819
948
|
if (existsSync(src)) {
|
|
@@ -827,105 +956,8 @@ export function syncWorktreeStateBack(
|
|
|
827
956
|
}
|
|
828
957
|
}
|
|
829
958
|
|
|
830
|
-
// ── 2. Sync ALL milestone directories ────────────────────────────────
|
|
831
|
-
// The complete-milestone unit may create next-milestone artifacts (e.g.
|
|
832
|
-
// M007 setup while closing M006). We must sync every milestone directory
|
|
833
|
-
// in the worktree, not just the current one.
|
|
834
|
-
const wtMilestonesDir = join(wtGsd, "milestones");
|
|
835
|
-
if (!existsSync(wtMilestonesDir)) return { synced };
|
|
836
|
-
|
|
837
|
-
try {
|
|
838
|
-
const wtMilestones = readdirSync(wtMilestonesDir, { withFileTypes: true })
|
|
839
|
-
.filter((d) => d.isDirectory())
|
|
840
|
-
.map((d) => d.name);
|
|
841
|
-
|
|
842
|
-
for (const mid of wtMilestones) {
|
|
843
|
-
// Skip the current milestone being merged — its files are already in the
|
|
844
|
-
// milestone branch and would conflict with the squash merge (#3641).
|
|
845
|
-
if (mid === milestoneId) continue;
|
|
846
|
-
syncMilestoneDir(wtGsd, mainGsd, mid, synced);
|
|
847
|
-
}
|
|
848
|
-
} catch (err) {
|
|
849
|
-
/* non-fatal */
|
|
850
|
-
logWarning("worktree", `milestone sync-back failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
851
|
-
}
|
|
852
|
-
|
|
853
959
|
return { synced };
|
|
854
960
|
}
|
|
855
|
-
|
|
856
|
-
/**
|
|
857
|
-
* Sync a single milestone directory from worktree to main.
|
|
858
|
-
* Copies milestone-level .md files, slice-level files, and task summaries.
|
|
859
|
-
*/
|
|
860
|
-
/** Copy matching files from srcDir to dstDir (non-fatal per file). */
|
|
861
|
-
function syncDirFiles(
|
|
862
|
-
srcDir: string,
|
|
863
|
-
dstDir: string,
|
|
864
|
-
filter: (name: string) => boolean,
|
|
865
|
-
synced: string[],
|
|
866
|
-
prefix: string,
|
|
867
|
-
): void {
|
|
868
|
-
try {
|
|
869
|
-
for (const entry of readdirSync(srcDir, { withFileTypes: true })) {
|
|
870
|
-
if (!entry.isFile() || !filter(entry.name)) continue;
|
|
871
|
-
try {
|
|
872
|
-
cpSync(join(srcDir, entry.name), join(dstDir, entry.name), { force: true });
|
|
873
|
-
synced.push(`${prefix}${entry.name}`);
|
|
874
|
-
} catch (err) {
|
|
875
|
-
/* non-fatal */
|
|
876
|
-
logWarning("worktree", `file copy failed (${prefix}${entry.name}): ${err instanceof Error ? err.message : String(err)}`);
|
|
877
|
-
}
|
|
878
|
-
}
|
|
879
|
-
} catch (err) {
|
|
880
|
-
/* non-fatal — srcDir may not be readable */
|
|
881
|
-
logWarning("worktree", `directory read failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
|
|
885
|
-
function syncMilestoneDir(
|
|
886
|
-
wtGsd: string,
|
|
887
|
-
mainGsd: string,
|
|
888
|
-
mid: string,
|
|
889
|
-
synced: string[],
|
|
890
|
-
): void {
|
|
891
|
-
const wtMilestoneDir = join(wtGsd, "milestones", mid);
|
|
892
|
-
const mainMilestoneDir = join(mainGsd, "milestones", mid);
|
|
893
|
-
|
|
894
|
-
if (!existsSync(wtMilestoneDir)) return;
|
|
895
|
-
mkdirSync(mainMilestoneDir, { recursive: true });
|
|
896
|
-
|
|
897
|
-
const isMd = (name: string): boolean => name.endsWith(".md");
|
|
898
|
-
|
|
899
|
-
// Sync milestone-level files (SUMMARY, VALIDATION, ROADMAP, CONTEXT)
|
|
900
|
-
syncDirFiles(wtMilestoneDir, mainMilestoneDir, isMd, synced, `milestones/${mid}/`);
|
|
901
|
-
|
|
902
|
-
// Sync slice-level files (summaries, UATs) and task summaries (#1678)
|
|
903
|
-
const wtSlicesDir = join(wtMilestoneDir, "slices");
|
|
904
|
-
const mainSlicesDir = join(mainMilestoneDir, "slices");
|
|
905
|
-
if (!existsSync(wtSlicesDir)) return;
|
|
906
|
-
|
|
907
|
-
try {
|
|
908
|
-
for (const sliceEntry of readdirSync(wtSlicesDir, { withFileTypes: true })) {
|
|
909
|
-
if (!sliceEntry.isDirectory()) continue;
|
|
910
|
-
const sid = sliceEntry.name;
|
|
911
|
-
const wtSliceDir = join(wtSlicesDir, sid);
|
|
912
|
-
const mainSliceDir = join(mainSlicesDir, sid);
|
|
913
|
-
mkdirSync(mainSliceDir, { recursive: true });
|
|
914
|
-
|
|
915
|
-
syncDirFiles(wtSliceDir, mainSliceDir, isMd, synced, `milestones/${mid}/slices/${sid}/`);
|
|
916
|
-
|
|
917
|
-
const wtTasksDir = join(wtSliceDir, "tasks");
|
|
918
|
-
const mainTasksDir = join(mainSliceDir, "tasks");
|
|
919
|
-
if (existsSync(wtTasksDir)) {
|
|
920
|
-
mkdirSync(mainTasksDir, { recursive: true });
|
|
921
|
-
syncDirFiles(wtTasksDir, mainTasksDir, isMd, synced, `milestones/${mid}/slices/${sid}/tasks/`);
|
|
922
|
-
}
|
|
923
|
-
}
|
|
924
|
-
} catch (err) {
|
|
925
|
-
/* non-fatal */
|
|
926
|
-
logWarning("worktree", `milestone slice sync failed (${mid}): ${err instanceof Error ? err.message : String(err)}`);
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
961
|
// ─── Worktree Post-Create Hook (#597) ────────────────────────────────────────
|
|
930
962
|
|
|
931
963
|
/**
|
|
@@ -990,6 +1022,12 @@ export function autoWorktreeBranch(milestoneId: string): string {
|
|
|
990
1022
|
return `milestone/${milestoneId}`;
|
|
991
1023
|
}
|
|
992
1024
|
|
|
1025
|
+
function normalizeLocalBranchRef(branch: string): string {
|
|
1026
|
+
return branch.startsWith("refs/heads/")
|
|
1027
|
+
? branch.slice("refs/heads/".length)
|
|
1028
|
+
: branch;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
993
1031
|
// ─── Branch-mode Entry ─────────────────────────────────────────────────────
|
|
994
1032
|
|
|
995
1033
|
/**
|
|
@@ -1093,109 +1131,30 @@ export function enterBranchModeForMilestone(
|
|
|
1093
1131
|
* Forward-merge plan checkbox state from the project root into a freshly
|
|
1094
1132
|
* re-attached worktree (#778).
|
|
1095
1133
|
*
|
|
1096
|
-
*
|
|
1097
|
-
*
|
|
1098
|
-
*
|
|
1099
|
-
*
|
|
1100
|
-
*
|
|
1101
|
-
*
|
|
1102
|
-
* dispatch/skip loop.
|
|
1103
|
-
*
|
|
1104
|
-
* Fix: after re-attaching, read every *.md plan file in the milestone
|
|
1105
|
-
* directory at the project root and apply any [x] checkbox states that are
|
|
1106
|
-
* ahead of the worktree version (forward-only: never downgrade [x] → [ ]).
|
|
1107
|
-
*
|
|
1108
|
-
* This is safe because syncStateToProjectRoot() is the authoritative source
|
|
1109
|
-
* of post-task state at the project root — it writes the same [x] the LLM
|
|
1110
|
-
* produced, then the auto-commit follows. If the commit never happened, the
|
|
1111
|
-
* filesystem copy is still valid and correct.
|
|
1134
|
+
* Phase C: deleted. Writers in workflow-projections.ts, triage-resolution.ts,
|
|
1135
|
+
* rule-registry.ts, and auto-post-unit.ts now route through
|
|
1136
|
+
* s.canonicalProjectRoot, so non-symlinked worktrees no longer need a local
|
|
1137
|
+
* .gsd/ projection — the project-root .gsd/ is the only authoritative source
|
|
1138
|
+
* for both reads and writes. copyPlanningArtifacts and reconcilePlanCheckboxes
|
|
1139
|
+
* (both formerly here) became dead.
|
|
1112
1140
|
*/
|
|
1113
|
-
function reconcilePlanCheckboxes(
|
|
1114
|
-
projectRoot: string,
|
|
1115
|
-
wtPath: string,
|
|
1116
|
-
milestoneId: string,
|
|
1117
|
-
): void {
|
|
1118
|
-
const srcMilestone = join(projectRoot, ".gsd", "milestones", milestoneId);
|
|
1119
|
-
const dstMilestone = join(wtPath, ".gsd", "milestones", milestoneId);
|
|
1120
|
-
if (!existsSync(srcMilestone) || !existsSync(dstMilestone)) return;
|
|
1121
|
-
|
|
1122
|
-
// Walk all markdown files in the milestone directory (plans, summaries, etc.)
|
|
1123
|
-
function walkMd(dir: string): string[] {
|
|
1124
|
-
const results: string[] = [];
|
|
1125
|
-
try {
|
|
1126
|
-
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
1127
|
-
const full = join(dir, entry.name);
|
|
1128
|
-
if (entry.isDirectory()) {
|
|
1129
|
-
results.push(...walkMd(full));
|
|
1130
|
-
} else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
1131
|
-
results.push(full);
|
|
1132
|
-
}
|
|
1133
|
-
}
|
|
1134
|
-
} catch (err) {
|
|
1135
|
-
/* non-fatal */
|
|
1136
|
-
logWarning("worktree", `walkMd directory read failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1137
|
-
}
|
|
1138
|
-
return results;
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
for (const srcFile of walkMd(srcMilestone)) {
|
|
1142
|
-
const rel = srcFile.slice(srcMilestone.length);
|
|
1143
|
-
const dstFile = dstMilestone + rel;
|
|
1144
|
-
if (!existsSync(dstFile)) continue; // only reconcile existing files
|
|
1145
|
-
|
|
1146
|
-
let srcContent: string;
|
|
1147
|
-
let dstContent: string;
|
|
1148
|
-
try {
|
|
1149
|
-
srcContent = readFileSync(srcFile, "utf-8");
|
|
1150
|
-
dstContent = readFileSync(dstFile, "utf-8");
|
|
1151
|
-
} catch (e) {
|
|
1152
|
-
logWarning("worktree", `reconcilePlanCheckboxes read failed: ${(e as Error).message}`);
|
|
1153
|
-
continue;
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
if (srcContent === dstContent) continue;
|
|
1157
|
-
|
|
1158
|
-
// Extract all checked task IDs from the source (project root)
|
|
1159
|
-
// Pattern: - [x] **T<id>: or - [x] **S<id>: (case-insensitive x)
|
|
1160
|
-
const checkedRe = /^- \[[xX]\] \*\*([TS]\d+):/gm;
|
|
1161
|
-
const srcChecked = new Set<string>();
|
|
1162
|
-
for (const m of srcContent.matchAll(checkedRe)) srcChecked.add(m[1]);
|
|
1163
|
-
|
|
1164
|
-
if (srcChecked.size === 0) continue;
|
|
1165
|
-
|
|
1166
|
-
// Forward-apply: replace [ ] → [x] for any IDs that are checked in src
|
|
1167
|
-
let updated = dstContent;
|
|
1168
|
-
let changed = false;
|
|
1169
|
-
for (const id of srcChecked) {
|
|
1170
|
-
const escapedId = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1171
|
-
const uncheckedRe = new RegExp(
|
|
1172
|
-
`^(- )\\[ \\]( \\*\\*${escapedId}:)`,
|
|
1173
|
-
"gm",
|
|
1174
|
-
);
|
|
1175
|
-
if (uncheckedRe.test(updated)) {
|
|
1176
|
-
updated = updated.replace(
|
|
1177
|
-
new RegExp(`^(- )\\[ \\]( \\*\\*${escapedId}:)`, "gm"),
|
|
1178
|
-
"$1[x]$2",
|
|
1179
|
-
);
|
|
1180
|
-
changed = true;
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
|
|
1184
|
-
if (changed) {
|
|
1185
|
-
try {
|
|
1186
|
-
atomicWriteSync(dstFile, updated, "utf-8");
|
|
1187
|
-
} catch (err) {
|
|
1188
|
-
/* non-fatal */
|
|
1189
|
-
logWarning("worktree", `plan checkbox reconcile write failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1190
|
-
}
|
|
1191
|
-
}
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
1141
|
|
|
1195
1142
|
export function createAutoWorktree(
|
|
1196
1143
|
basePath: string,
|
|
1197
1144
|
milestoneId: string,
|
|
1198
1145
|
): string {
|
|
1146
|
+
basePath = resolveWorktreeProjectRoot(basePath);
|
|
1147
|
+
|
|
1148
|
+
// Check if repo has commits — git worktree requires a valid HEAD
|
|
1149
|
+
try {
|
|
1150
|
+
execFileSync("git", ["rev-parse", "--verify", "HEAD"], { cwd: basePath, stdio: "pipe" });
|
|
1151
|
+
} catch {
|
|
1152
|
+
throw new GSDError(
|
|
1153
|
+
GSD_GIT_ERROR,
|
|
1154
|
+
`Cannot create worktree: repository has no commits yet. Worktree isolation requires at least one commit.`,
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1199
1158
|
const branch = autoWorktreeBranch(milestoneId);
|
|
1200
1159
|
|
|
1201
1160
|
// Check if the milestone branch already exists — it survives auto-mode
|
|
@@ -1222,39 +1181,29 @@ export function createAutoWorktree(
|
|
|
1222
1181
|
const integrationBranch =
|
|
1223
1182
|
readIntegrationBranch(basePath, milestoneId) ?? undefined;
|
|
1224
1183
|
const gitPrefs = loadEffectiveGSDPreferences()?.preferences?.git;
|
|
1225
|
-
const
|
|
1184
|
+
const validatedPrefBranch =
|
|
1185
|
+
gitPrefs?.main_branch &&
|
|
1186
|
+
typeof gitPrefs.main_branch === "string" &&
|
|
1187
|
+
gitPrefs.main_branch.length > 0 &&
|
|
1188
|
+
nativeBranchExists(basePath, gitPrefs.main_branch)
|
|
1189
|
+
? gitPrefs.main_branch
|
|
1190
|
+
: undefined;
|
|
1191
|
+
const startPoint = integrationBranch ?? validatedPrefBranch ?? undefined;
|
|
1226
1192
|
info = createWorktree(basePath, milestoneId, {
|
|
1227
1193
|
branch,
|
|
1228
1194
|
startPoint,
|
|
1229
1195
|
});
|
|
1230
1196
|
}
|
|
1231
1197
|
|
|
1232
|
-
//
|
|
1233
|
-
//
|
|
1234
|
-
//
|
|
1235
|
-
//
|
|
1236
|
-
//
|
|
1237
|
-
//
|
|
1238
|
-
//
|
|
1239
|
-
// The
|
|
1240
|
-
//
|
|
1241
|
-
// overwrite them with stale data ([ ] checkboxes) because the root is
|
|
1242
|
-
// not always fully synced.
|
|
1243
|
-
if (!branchExists) {
|
|
1244
|
-
copyPlanningArtifacts(basePath, info.path);
|
|
1245
|
-
} else {
|
|
1246
|
-
// Re-attaching to an existing branch: forward-merge any plan checkpoint
|
|
1247
|
-
// state from the project root into the worktree (#778).
|
|
1248
|
-
//
|
|
1249
|
-
// If auto-mode stopped via crash, the milestone branch HEAD may lag behind
|
|
1250
|
-
// the project root filesystem because syncStateToProjectRoot() ran after
|
|
1251
|
-
// task completion but the auto-commit never fired. On restart the worktree
|
|
1252
|
-
// is re-created from the branch HEAD (which has [ ] for the crashed task),
|
|
1253
|
-
// causing verifyExpectedArtifact() to return false → stale-key eviction →
|
|
1254
|
-
// infinite dispatch/skip loop. Reconciling here ensures the worktree sees
|
|
1255
|
-
// the same [x] state that syncStateToProjectRoot() wrote to the root.
|
|
1256
|
-
reconcilePlanCheckboxes(basePath, info.path, milestoneId);
|
|
1257
|
-
}
|
|
1198
|
+
// Phase C: copyPlanningArtifacts and reconcilePlanCheckboxes were
|
|
1199
|
+
// deleted. Both addressed the same problem (worktree-local .gsd/
|
|
1200
|
+
// projection lagging behind project-root state) by maintaining a stale
|
|
1201
|
+
// copy. Now that auto-mode writers in workflow-projections.ts,
|
|
1202
|
+
// triage-resolution.ts, rule-registry.ts, and auto-post-unit.ts route
|
|
1203
|
+
// through s.canonicalProjectRoot, the worktree never needs a local
|
|
1204
|
+
// .gsd/ — both reads and writes converge on the project-root .gsd/.
|
|
1205
|
+
// The original concerns (#759, #778) no longer apply because there is
|
|
1206
|
+
// no second copy to drift.
|
|
1258
1207
|
|
|
1259
1208
|
// Run user-configured post-create hook (#597) — e.g. copy .env, symlink assets
|
|
1260
1209
|
const hookError = runWorktreePostCreateHook(basePath, info.path);
|
|
@@ -1267,10 +1216,10 @@ export function createAutoWorktree(
|
|
|
1267
1216
|
|
|
1268
1217
|
try {
|
|
1269
1218
|
process.chdir(info.path);
|
|
1270
|
-
|
|
1219
|
+
setActiveWorkspace(createWorkspace(basePath));
|
|
1271
1220
|
} catch (err) {
|
|
1272
1221
|
// If chdir fails, the worktree was created but we couldn't enter it.
|
|
1273
|
-
// Don't
|
|
1222
|
+
// Don't set activeWorkspace -- caller can retry or clean up.
|
|
1274
1223
|
throw new GSDError(
|
|
1275
1224
|
GSD_IO_ERROR,
|
|
1276
1225
|
`Auto-worktree created at ${info.path} but chdir failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
@@ -1281,60 +1230,13 @@ export function createAutoWorktree(
|
|
|
1281
1230
|
return info.path;
|
|
1282
1231
|
}
|
|
1283
1232
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
function copyPlanningArtifacts(srcBase: string, wtPath: string): void {
|
|
1292
|
-
const srcGsd = join(srcBase, ".gsd");
|
|
1293
|
-
const dstGsd = join(wtPath, ".gsd");
|
|
1294
|
-
if (!existsSync(srcGsd)) return;
|
|
1295
|
-
if (isSamePath(srcGsd, dstGsd)) return;
|
|
1296
|
-
|
|
1297
|
-
// Copy milestones/ directory (planning files, roadmaps, plans, research)
|
|
1298
|
-
safeCopyRecursive(join(srcGsd, "milestones"), join(dstGsd, "milestones"), {
|
|
1299
|
-
force: true,
|
|
1300
|
-
filter: (src) => !src.endsWith("-META.json"),
|
|
1301
|
-
});
|
|
1302
|
-
|
|
1303
|
-
// Copy top-level planning files
|
|
1304
|
-
for (const file of [
|
|
1305
|
-
"DECISIONS.md",
|
|
1306
|
-
"REQUIREMENTS.md",
|
|
1307
|
-
"PROJECT.md",
|
|
1308
|
-
"QUEUE.md",
|
|
1309
|
-
"STATE.md",
|
|
1310
|
-
"KNOWLEDGE.md",
|
|
1311
|
-
"OVERRIDES.md",
|
|
1312
|
-
"mcp.json",
|
|
1313
|
-
]) {
|
|
1314
|
-
safeCopy(join(srcGsd, file), join(dstGsd, file), { force: true });
|
|
1315
|
-
}
|
|
1316
|
-
|
|
1317
|
-
// Seed canonical PREFERENCES.md when available; fall back to legacy lowercase.
|
|
1318
|
-
if (existsSync(join(srcGsd, PROJECT_PREFERENCES_FILE))) {
|
|
1319
|
-
safeCopy(
|
|
1320
|
-
join(srcGsd, PROJECT_PREFERENCES_FILE),
|
|
1321
|
-
join(dstGsd, PROJECT_PREFERENCES_FILE),
|
|
1322
|
-
{ force: true },
|
|
1323
|
-
);
|
|
1324
|
-
} else if (existsSync(join(srcGsd, LEGACY_PROJECT_PREFERENCES_FILE))) {
|
|
1325
|
-
safeCopy(
|
|
1326
|
-
join(srcGsd, LEGACY_PROJECT_PREFERENCES_FILE),
|
|
1327
|
-
join(dstGsd, LEGACY_PROJECT_PREFERENCES_FILE),
|
|
1328
|
-
{ force: true },
|
|
1329
|
-
);
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
// Shared WAL (R012): worktrees use the project root's DB directly.
|
|
1333
|
-
// No longer copy gsd.db into the worktree — the DB path resolver in
|
|
1334
|
-
// ensureDbOpen() detects the worktree location and opens the root DB.
|
|
1335
|
-
// Compat note: reconcileWorktreeDb() in mergeMilestoneToMain handles
|
|
1336
|
-
// worktrees that already have a local gsd.db from before this change.
|
|
1337
|
-
}
|
|
1233
|
+
// Phase C: copyPlanningArtifacts removed. Planning artifacts now live
|
|
1234
|
+
// only at the project root .gsd/; auto-mode writers (workflow-projections,
|
|
1235
|
+
// triage-resolution, rule-registry, regenerateIfMissing,
|
|
1236
|
+
// resolveHookArtifactPath) all route through s.canonicalProjectRoot.
|
|
1237
|
+
// Worktrees are pure git checkouts — they no longer maintain a parallel
|
|
1238
|
+
// .gsd/ projection. The gsd.db has always lived at the project root via
|
|
1239
|
+
// the shared-WAL R012 contract; that is unchanged.
|
|
1338
1240
|
|
|
1339
1241
|
/**
|
|
1340
1242
|
* Teardown an auto-worktree: chdir back to original base, then remove
|
|
@@ -1345,67 +1247,121 @@ export function teardownAutoWorktree(
|
|
|
1345
1247
|
milestoneId: string,
|
|
1346
1248
|
opts: { preserveBranch?: boolean } = {},
|
|
1347
1249
|
): void {
|
|
1250
|
+
originalBasePath = resolveWorktreeProjectRoot(originalBasePath);
|
|
1251
|
+
|
|
1348
1252
|
const branch = autoWorktreeBranch(milestoneId);
|
|
1349
1253
|
const { preserveBranch = false } = opts;
|
|
1350
1254
|
const previousCwd = process.cwd();
|
|
1351
1255
|
|
|
1256
|
+
// Wrap the entire teardown body in a single try/finally so activeWorkspace
|
|
1257
|
+
// is ALWAYS cleared — even if process.chdir throws (e.g. originalBasePath
|
|
1258
|
+
// was deleted before teardown ran). Previously the finally only covered
|
|
1259
|
+
// removeWorktree, leaving the registry stale on a chdir failure (H3 fix).
|
|
1352
1260
|
try {
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1261
|
+
try {
|
|
1262
|
+
process.chdir(originalBasePath);
|
|
1263
|
+
} catch (err) {
|
|
1264
|
+
throw new GSDError(
|
|
1265
|
+
GSD_IO_ERROR,
|
|
1266
|
+
`Failed to chdir back to ${originalBasePath} during teardown: ${err instanceof Error ? err.message : String(err)}`,
|
|
1267
|
+
);
|
|
1268
|
+
}
|
|
1361
1269
|
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
`Worktree directory still exists after teardown: ${wtDir}. ` +
|
|
1376
|
-
`This is likely an orphaned directory consuming disk space. ` +
|
|
1377
|
-
`Remove it manually with: rm -rf "${wtDir.replaceAll("\\", "/")}"`,
|
|
1378
|
-
{ worktree: milestoneId },
|
|
1379
|
-
);
|
|
1380
|
-
// Attempt a direct filesystem removal as a fallback — but ONLY if the
|
|
1381
|
-
// path is safely inside .gsd/worktrees/ to prevent #2365 data loss.
|
|
1382
|
-
if (isInsideWorktreesDir(originalBasePath, wtDir)) {
|
|
1270
|
+
// Mirror cleanup steps from mergeMilestoneToMain abort path:
|
|
1271
|
+
|
|
1272
|
+
// 1. Remove transient state files (STATE.md, auto.lock, {MID}-META.json).
|
|
1273
|
+
// Non-fatal — must not block teardown.
|
|
1274
|
+
try {
|
|
1275
|
+
clearProjectRootStateFiles(originalBasePath, milestoneId);
|
|
1276
|
+
} catch (err) {
|
|
1277
|
+
logWarning("worktree", `clearProjectRootStateFiles failed during teardown: ${err instanceof Error ? err.message : String(err)}`);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
// 2. Reconcile worktree-local gsd.db into project root DB if both exist.
|
|
1281
|
+
// Non-fatal — handles legacy worktrees that have a local copy.
|
|
1282
|
+
if (isDbAvailable()) {
|
|
1383
1283
|
try {
|
|
1384
|
-
|
|
1284
|
+
const contract = resolveGsdPathContract(previousCwd, originalBasePath);
|
|
1285
|
+
const worktreeDbPath = join(contract.worktreeGsd ?? join(previousCwd, ".gsd"), "gsd.db");
|
|
1286
|
+
const mainDbPath = contract.projectDb;
|
|
1287
|
+
if (existsSync(worktreeDbPath) && !isSamePath(worktreeDbPath, mainDbPath)) {
|
|
1288
|
+
reconcileWorktreeDb(mainDbPath, worktreeDbPath);
|
|
1289
|
+
}
|
|
1385
1290
|
} catch (err) {
|
|
1386
|
-
|
|
1387
|
-
|
|
1291
|
+
/* non-fatal */
|
|
1292
|
+
logError("worktree", `DB reconciliation failed during teardown: ${err instanceof Error ? err.message : String(err)}`);
|
|
1388
1293
|
}
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1391
|
-
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
nudgeGitBranchCache(previousCwd);
|
|
1297
|
+
|
|
1298
|
+
// 3. Remove the worktree. Errors propagate naturally — the outer finally
|
|
1299
|
+
// ensures activeWorkspace is cleared regardless.
|
|
1300
|
+
removeWorktree(originalBasePath, milestoneId, {
|
|
1301
|
+
branch,
|
|
1302
|
+
deleteBranch: !preserveBranch,
|
|
1303
|
+
});
|
|
1304
|
+
|
|
1305
|
+
// Verify cleanup succeeded — warn if the worktree directory is still on disk.
|
|
1306
|
+
// On Windows, bash-based cleanup can silently fail when paths contain
|
|
1307
|
+
// backslashes (#1436), leaving ~1 GB+ orphaned directories.
|
|
1308
|
+
const wtDir = worktreePath(originalBasePath, milestoneId);
|
|
1309
|
+
if (existsSync(wtDir)) {
|
|
1310
|
+
logWarning(
|
|
1311
|
+
"reconcile",
|
|
1312
|
+
`Worktree directory still exists after teardown: ${wtDir}. ` +
|
|
1313
|
+
`This is likely an orphaned directory consuming disk space. ` +
|
|
1314
|
+
`Remove it manually with: rm -rf "${wtDir.replaceAll("\\", "/")}"`,
|
|
1315
|
+
{ worktree: milestoneId },
|
|
1392
1316
|
);
|
|
1317
|
+
// Attempt a direct filesystem removal as a fallback — but ONLY if the
|
|
1318
|
+
// path is safely inside .gsd/worktrees/ to prevent #2365 data loss.
|
|
1319
|
+
if (isInsideWorktreesDir(originalBasePath, wtDir)) {
|
|
1320
|
+
try {
|
|
1321
|
+
rmSync(wtDir, { recursive: true, force: true });
|
|
1322
|
+
} catch (err) {
|
|
1323
|
+
// Non-fatal — the warning above tells the user how to clean up
|
|
1324
|
+
logWarning("worktree", `worktree directory removal failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1325
|
+
}
|
|
1326
|
+
} else {
|
|
1327
|
+
console.error(
|
|
1328
|
+
`[GSD] REFUSING fallback rmSync — path is outside .gsd/worktrees/: ${wtDir}`,
|
|
1329
|
+
);
|
|
1330
|
+
}
|
|
1393
1331
|
}
|
|
1332
|
+
} finally {
|
|
1333
|
+
// Clear module state unconditionally — regardless of which step above
|
|
1334
|
+
// failed. A stale activeWorkspace causes getActiveAutoWorktreeContext()
|
|
1335
|
+
// to return wrong data for subsequent operations.
|
|
1336
|
+
setActiveWorkspace(null);
|
|
1394
1337
|
}
|
|
1395
1338
|
}
|
|
1396
1339
|
|
|
1397
1340
|
/**
|
|
1398
1341
|
* Detect if the process is currently inside an auto-worktree.
|
|
1399
|
-
*
|
|
1342
|
+
* Uses the current directory structure plus git branch prefix so detection
|
|
1343
|
+
* still works after process restart when module state has been reset.
|
|
1400
1344
|
*/
|
|
1401
1345
|
export function isInAutoWorktree(basePath: string): boolean {
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
const
|
|
1406
|
-
|
|
1407
|
-
const
|
|
1408
|
-
|
|
1346
|
+
const targetPath = isGsdWorktreePath(basePath) ? basePath : process.cwd();
|
|
1347
|
+
if (!isGsdWorktreePath(targetPath)) return false;
|
|
1348
|
+
|
|
1349
|
+
const storedBase = getAutoWorktreeOriginalBase();
|
|
1350
|
+
const projectRoot = resolveWorktreeProjectRoot(basePath, storedBase);
|
|
1351
|
+
const targetProjectRoot = resolveWorktreeProjectRoot(targetPath, storedBase);
|
|
1352
|
+
if (
|
|
1353
|
+
normalizeWorktreePathForCompare(projectRoot) !==
|
|
1354
|
+
normalizeWorktreePathForCompare(targetProjectRoot)
|
|
1355
|
+
) {
|
|
1356
|
+
return false;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
try {
|
|
1360
|
+
const branch = nativeGetCurrentBranch(targetPath);
|
|
1361
|
+
return branch.startsWith("milestone/");
|
|
1362
|
+
} catch {
|
|
1363
|
+
return false;
|
|
1364
|
+
}
|
|
1409
1365
|
}
|
|
1410
1366
|
|
|
1411
1367
|
/**
|
|
@@ -1420,6 +1376,8 @@ export function getAutoWorktreePath(
|
|
|
1420
1376
|
basePath: string,
|
|
1421
1377
|
milestoneId: string,
|
|
1422
1378
|
): string | null {
|
|
1379
|
+
basePath = resolveWorktreeProjectRoot(basePath);
|
|
1380
|
+
|
|
1423
1381
|
const p = worktreePath(basePath, milestoneId);
|
|
1424
1382
|
if (!existsSync(p)) return null;
|
|
1425
1383
|
|
|
@@ -1448,6 +1406,8 @@ export function enterAutoWorktree(
|
|
|
1448
1406
|
basePath: string,
|
|
1449
1407
|
milestoneId: string,
|
|
1450
1408
|
): string {
|
|
1409
|
+
basePath = resolveWorktreeProjectRoot(basePath);
|
|
1410
|
+
|
|
1451
1411
|
const p = worktreePath(basePath, milestoneId);
|
|
1452
1412
|
if (!existsSync(p)) {
|
|
1453
1413
|
throw new GSDError(
|
|
@@ -1484,7 +1444,7 @@ export function enterAutoWorktree(
|
|
|
1484
1444
|
|
|
1485
1445
|
try {
|
|
1486
1446
|
process.chdir(p);
|
|
1487
|
-
|
|
1447
|
+
setActiveWorkspace(createWorkspace(basePath));
|
|
1488
1448
|
} catch (err) {
|
|
1489
1449
|
throw new GSDError(
|
|
1490
1450
|
GSD_IO_ERROR,
|
|
@@ -1501,7 +1461,11 @@ export function enterAutoWorktree(
|
|
|
1501
1461
|
* Returns null if not currently in an auto-worktree.
|
|
1502
1462
|
*/
|
|
1503
1463
|
export function getAutoWorktreeOriginalBase(): string | null {
|
|
1504
|
-
return
|
|
1464
|
+
return getActiveWorkspace()?.projectRoot ?? null;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
export function _resetAutoWorktreeOriginalBaseForTests(): void {
|
|
1468
|
+
setActiveWorkspace(null);
|
|
1505
1469
|
}
|
|
1506
1470
|
|
|
1507
1471
|
export function getActiveAutoWorktreeContext(): {
|
|
@@ -1509,13 +1473,18 @@ export function getActiveAutoWorktreeContext(): {
|
|
|
1509
1473
|
worktreeName: string;
|
|
1510
1474
|
branch: string;
|
|
1511
1475
|
} | null {
|
|
1512
|
-
|
|
1476
|
+
const ws = getActiveWorkspace();
|
|
1477
|
+
if (!ws) return null;
|
|
1478
|
+
const originalBase = ws.projectRoot;
|
|
1513
1479
|
const cwd = process.cwd();
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1480
|
+
if (!isGsdWorktreePath(cwd)) return null;
|
|
1481
|
+
const cwdProjectRoot = resolveWorktreeProjectRoot(cwd, originalBase);
|
|
1482
|
+
if (
|
|
1483
|
+
normalizeWorktreePathForCompare(cwdProjectRoot) !==
|
|
1484
|
+
normalizeWorktreePathForCompare(originalBase)
|
|
1485
|
+
) {
|
|
1486
|
+
return null;
|
|
1487
|
+
}
|
|
1519
1488
|
const worktreeName = detectWorktreeName(cwd);
|
|
1520
1489
|
if (!worktreeName) return null;
|
|
1521
1490
|
const branch = nativeGetCurrentBranch(cwd);
|
|
@@ -1545,7 +1514,10 @@ function autoCommitDirtyState(cwd: string): boolean {
|
|
|
1545
1514
|
return result !== null;
|
|
1546
1515
|
} catch (e) {
|
|
1547
1516
|
debugLog("autoCommitDirtyState", { error: String(e) });
|
|
1548
|
-
|
|
1517
|
+
throw new GSDError(
|
|
1518
|
+
GSD_GIT_ERROR,
|
|
1519
|
+
`Failed to auto-commit dirty worktree state before milestone merge: ${e instanceof Error ? e.message : String(e)}`,
|
|
1520
|
+
);
|
|
1549
1521
|
}
|
|
1550
1522
|
}
|
|
1551
1523
|
|
|
@@ -1584,11 +1556,11 @@ export function mergeMilestoneToMain(
|
|
|
1584
1556
|
// integration branch captures dirty files from OTHER milestones under a
|
|
1585
1557
|
// misleading commit message, contaminating the main branch (#2929).
|
|
1586
1558
|
//
|
|
1587
|
-
// When
|
|
1559
|
+
// When activeWorkspace is null (branch mode, no worktree), autoCommitDirtyState
|
|
1588
1560
|
// runs unconditionally — the caller is responsible for cwd placement.
|
|
1589
1561
|
{
|
|
1590
1562
|
let shouldAutoCommit = true;
|
|
1591
|
-
if (
|
|
1563
|
+
if (getActiveWorkspace() !== null) {
|
|
1592
1564
|
try {
|
|
1593
1565
|
const currentBranch = nativeGetCurrentBranch(worktreeCwd);
|
|
1594
1566
|
shouldAutoCommit = currentBranch === milestoneBranch;
|
|
@@ -1608,9 +1580,10 @@ export function mergeMilestoneToMain(
|
|
|
1608
1580
|
// database (#2823).
|
|
1609
1581
|
if (isDbAvailable()) {
|
|
1610
1582
|
try {
|
|
1611
|
-
const
|
|
1612
|
-
const
|
|
1613
|
-
|
|
1583
|
+
const contract = resolveGsdPathContract(worktreeCwd, originalBasePath_);
|
|
1584
|
+
const worktreeDbPath = join(contract.worktreeGsd ?? join(worktreeCwd, ".gsd"), "gsd.db");
|
|
1585
|
+
const mainDbPath = contract.projectDb;
|
|
1586
|
+
if (existsSync(worktreeDbPath) && !isSamePath(worktreeDbPath, mainDbPath)) {
|
|
1614
1587
|
reconcileWorktreeDb(mainDbPath, worktreeDbPath);
|
|
1615
1588
|
}
|
|
1616
1589
|
} catch (err) {
|
|
@@ -1636,6 +1609,10 @@ export function mergeMilestoneToMain(
|
|
|
1636
1609
|
}
|
|
1637
1610
|
|
|
1638
1611
|
// 3. chdir to original base
|
|
1612
|
+
// Note: previousCwd captures the cwd at this point — i.e. the worktree cwd
|
|
1613
|
+
// entering the function. Subsequent throws restore to previousCwd, leaving
|
|
1614
|
+
// the caller in worktree-cwd; callers (worktree-resolver) are responsible
|
|
1615
|
+
// for any further cwd movement on the error path.
|
|
1639
1616
|
const previousCwd = process.cwd();
|
|
1640
1617
|
process.chdir(originalBasePath_);
|
|
1641
1618
|
|
|
@@ -1656,6 +1633,24 @@ export function mergeMilestoneToMain(
|
|
|
1656
1633
|
const mainBranch =
|
|
1657
1634
|
integrationBranch ?? validatedPrefBranch ?? nativeDetectMainBranch(originalBasePath_);
|
|
1658
1635
|
|
|
1636
|
+
// Fail closed when the resolved integration branch is the milestone branch
|
|
1637
|
+
// itself (#5024). Stale or corrupt metadata (e.g. integrationBranch recorded
|
|
1638
|
+
// as "milestone/<MID>") would otherwise let the squash merge resolve to a
|
|
1639
|
+
// self-merge: nothing-to-commit + empty self-diff in the post-merge safety
|
|
1640
|
+
// check (#1792) collapse to a false success, and the worktree-resolver
|
|
1641
|
+
// emits worktree-merged for work that never landed on a distinct
|
|
1642
|
+
// integration branch.
|
|
1643
|
+
if (normalizeLocalBranchRef(mainBranch) === milestoneBranch) {
|
|
1644
|
+
process.chdir(previousCwd);
|
|
1645
|
+
throw new GSDError(
|
|
1646
|
+
GSD_GIT_ERROR,
|
|
1647
|
+
`Resolved integration branch "${mainBranch}" is the same ref as milestone branch ` +
|
|
1648
|
+
`"${milestoneBranch}" — refusing to self-merge. Integration branch metadata is invalid; ` +
|
|
1649
|
+
`set a distinct main_branch in GSD preferences or repair the milestone integration record ` +
|
|
1650
|
+
`before retrying milestone completion.`,
|
|
1651
|
+
);
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1659
1654
|
// Remove transient project-root state files before any branch or merge
|
|
1660
1655
|
// operation. Untracked milestone metadata can otherwise block squash merges.
|
|
1661
1656
|
clearProjectRootStateFiles(originalBasePath_, milestoneId);
|
|
@@ -2190,7 +2185,7 @@ export function mergeMilestoneToMain(
|
|
|
2190
2185
|
|
|
2191
2186
|
// 10. Auto-push if enabled
|
|
2192
2187
|
let pushed = false;
|
|
2193
|
-
if (prefs.auto_push === true && !nothingToCommit) {
|
|
2188
|
+
if (prefs.auto_push === true && prefs.auto_pr !== true && !nothingToCommit) {
|
|
2194
2189
|
const remote = prefs.remote ?? "origin";
|
|
2195
2190
|
try {
|
|
2196
2191
|
execFileSync("git", ["push", remote, mainBranch], {
|
|
@@ -2241,9 +2236,10 @@ export function mergeMilestoneToMain(
|
|
|
2241
2236
|
// through when the code is genuinely already on the integration branch.
|
|
2242
2237
|
|
|
2243
2238
|
// 11a. Pre-teardown safety net (#1853): if the worktree still has uncommitted
|
|
2244
|
-
// changes (e.g. nativeHasChanges cache returned stale false,
|
|
2245
|
-
//
|
|
2246
|
-
//
|
|
2239
|
+
// changes (e.g. nativeHasChanges cache returned stale false), abort teardown.
|
|
2240
|
+
// Committing here would be too late: the squash merge to the integration
|
|
2241
|
+
// branch already happened, so a new milestone-branch commit would not be
|
|
2242
|
+
// included and branch deletion could drop the only ref to that work.
|
|
2247
2243
|
//
|
|
2248
2244
|
// Guard: only run when worktreeCwd is on the milestone branch (#2929).
|
|
2249
2245
|
// In parallel mode or branch-mode merges, worktreeCwd may be the project
|
|
@@ -2262,17 +2258,17 @@ export function mergeMilestoneToMain(
|
|
|
2262
2258
|
try {
|
|
2263
2259
|
const dirtyCheck = nativeWorkingTreeStatus(worktreeCwd);
|
|
2264
2260
|
if (dirtyCheck) {
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
nativeCommit(worktreeCwd, "chore: pre-teardown auto-commit of uncommitted worktree changes");
|
|
2261
|
+
process.chdir(previousCwd);
|
|
2262
|
+
throw new GSDError(
|
|
2263
|
+
GSD_GIT_ERROR,
|
|
2264
|
+
`Milestone worktree still has uncommitted changes after squash merge. ` +
|
|
2265
|
+
`Aborting teardown to preserve ${milestoneBranch}. Status:\n${dirtyCheck}`,
|
|
2266
|
+
);
|
|
2272
2267
|
}
|
|
2273
2268
|
} catch (e) {
|
|
2269
|
+
if (e instanceof GSDError) throw e;
|
|
2274
2270
|
debugLog("mergeMilestoneToMain", {
|
|
2275
|
-
phase: "pre-teardown-
|
|
2271
|
+
phase: "pre-teardown-dirty-check-error",
|
|
2276
2272
|
error: String(e),
|
|
2277
2273
|
});
|
|
2278
2274
|
}
|
|
@@ -2299,8 +2295,23 @@ export function mergeMilestoneToMain(
|
|
|
2299
2295
|
}
|
|
2300
2296
|
|
|
2301
2297
|
// 14. Clear module state
|
|
2302
|
-
|
|
2298
|
+
setActiveWorkspace(null);
|
|
2303
2299
|
nudgeGitBranchCache(previousCwd);
|
|
2304
2300
|
|
|
2301
|
+
// 15. Anchor cwd at the project root on success-return. Step 12 removed
|
|
2302
|
+
// the worktree dir; if cwd was inside it, every subsequent process.cwd()
|
|
2303
|
+
// would throw ENOENT and trip auto/run-unit.ts:50's session-failed cancel
|
|
2304
|
+
// path (the de73fb43d regression that closes headless gsd auto). Step 3
|
|
2305
|
+
// already chdir'd here, but defending the success-return contract makes
|
|
2306
|
+
// future maintainers safe against intervening chdir's between step 3 and
|
|
2307
|
+
// here.
|
|
2308
|
+
try {
|
|
2309
|
+
// process.cwd() can throw ENOENT when cwd was removed, so attempt
|
|
2310
|
+
// recovery directly.
|
|
2311
|
+
process.chdir(originalBasePath_);
|
|
2312
|
+
} catch (err) {
|
|
2313
|
+
logWarning("worktree", `chdir to project root after merge failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2314
|
+
}
|
|
2315
|
+
|
|
2305
2316
|
return { commitMessage, pushed, prCreated, codeFilesChanged };
|
|
2306
2317
|
}
|