gsd-pi 2.44.0-dev.62b5d6c → 2.44.0-dev.73f2fd5
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 +30 -12
- package/dist/resources/extensions/gsd/auto/infra-errors.js +3 -0
- package/dist/resources/extensions/gsd/auto/phases.js +36 -36
- package/dist/resources/extensions/gsd/auto-prompts.js +24 -1
- package/dist/resources/extensions/gsd/auto-start.js +10 -0
- package/dist/resources/extensions/gsd/auto-timers.js +57 -3
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +4 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +9 -6
- package/dist/resources/extensions/gsd/auto.js +30 -3
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +156 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +46 -12
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +5 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +5 -0
- package/dist/resources/extensions/gsd/commands-mcp-status.js +187 -0
- package/dist/resources/extensions/gsd/db-writer.js +34 -16
- package/dist/resources/extensions/gsd/doctor.js +8 -0
- package/dist/resources/extensions/gsd/git-service.js +8 -3
- package/dist/resources/extensions/gsd/gsd-db.js +12 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +1 -1
- package/dist/resources/extensions/gsd/preferences.js +9 -1
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +2 -4
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -6
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +3 -14
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +7 -37
- package/dist/resources/extensions/gsd/provider-error-pause.js +7 -0
- package/dist/resources/extensions/gsd/state.js +19 -2
- package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +1 -0
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -0
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +88 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +6 -0
- package/dist/resources/extensions/mcp-client/index.js +14 -0
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +3 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +15 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +6 -8
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +24 -26
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js +29 -48
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/local-model-check.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/local-model-check.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/local-model-check.js +41 -0
- package/packages/pi-coding-agent/dist/core/local-model-check.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +11 -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 +20 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +34 -44
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.test.js +30 -34
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +6 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +10 -12
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +17 -0
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js +32 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +8 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +12 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.d.ts +15 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +4 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +5 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +13 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +17 -8
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +7 -3
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +43 -47
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
- package/packages/pi-coding-agent/src/core/auth-storage.ts +15 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
- package/packages/pi-coding-agent/src/core/fs-utils.test.ts +31 -43
- package/packages/pi-coding-agent/src/core/local-model-check.ts +45 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +21 -1
- package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +40 -45
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
- package/packages/pi-coding-agent/src/core/settings-manager.ts +9 -0
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
- package/packages/pi-coding-agent/src/main.ts +19 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/timestamp.test.ts +38 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +10 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/timestamp.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +3 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +18 -3
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +16 -7
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +8 -1
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
- package/src/resources/extensions/gsd/auto/infra-errors.ts +3 -0
- package/src/resources/extensions/gsd/auto/phases.ts +45 -48
- package/src/resources/extensions/gsd/auto-prompts.ts +24 -1
- package/src/resources/extensions/gsd/auto-start.ts +14 -0
- package/src/resources/extensions/gsd/auto-timers.ts +64 -3
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +5 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +9 -6
- package/src/resources/extensions/gsd/auto.ts +37 -3
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +148 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +48 -11
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +8 -0
- package/src/resources/extensions/gsd/commands-mcp-status.ts +247 -0
- package/src/resources/extensions/gsd/db-writer.ts +39 -17
- package/src/resources/extensions/gsd/doctor.ts +7 -1
- package/src/resources/extensions/gsd/git-service.ts +6 -2
- package/src/resources/extensions/gsd/gsd-db.ts +16 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +1 -1
- package/src/resources/extensions/gsd/preferences.ts +11 -1
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +2 -4
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -6
- package/src/resources/extensions/gsd/prompts/replan-slice.md +3 -14
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +7 -37
- package/src/resources/extensions/gsd/provider-error-pause.ts +9 -0
- package/src/resources/extensions/gsd/state.ts +19 -1
- package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
- package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +14 -16
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +43 -57
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +88 -0
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +11 -13
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +465 -523
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +73 -75
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +34 -56
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +533 -656
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +165 -143
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +29 -52
- package/src/resources/extensions/gsd/tests/captures.test.ts +148 -176
- package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +32 -33
- package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +141 -143
- package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
- package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +38 -59
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +228 -263
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +250 -302
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/context-store.test.ts +354 -367
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +68 -72
- package/src/resources/extensions/gsd/tests/cost-projection.test.ts +92 -106
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +27 -35
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +220 -237
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +465 -416
- package/src/resources/extensions/gsd/tests/definition-loader.test.ts +76 -92
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +68 -83
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +210 -181
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +78 -101
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +192 -227
- package/src/resources/extensions/gsd/tests/detection.test.ts +232 -278
- package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +30 -34
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +164 -180
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +43 -49
- package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +28 -32
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +27 -29
- package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +34 -38
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +54 -75
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +21 -32
- package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +72 -97
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +38 -44
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +104 -145
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +84 -106
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +54 -60
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +72 -93
- package/src/resources/extensions/gsd/tests/doctor.test.ts +104 -134
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +123 -131
- package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/exit-command.test.ts +20 -24
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +48 -57
- package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +30 -42
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +198 -206
- package/src/resources/extensions/gsd/tests/git-locale.test.ts +13 -27
- package/src/resources/extensions/gsd/tests/git-service.test.ts +285 -388
- package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +31 -39
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +63 -69
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +255 -264
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +108 -119
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +81 -103
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +229 -262
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +29 -37
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +81 -102
- package/src/resources/extensions/gsd/tests/infra-error.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +16 -18
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +41 -46
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +42 -53
- package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +75 -91
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +18 -18
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +150 -194
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +101 -125
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +45 -54
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +80 -93
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +57 -66
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +83 -93
- package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +161 -170
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +125 -141
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +107 -131
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +87 -96
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +125 -164
- package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +81 -94
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +35 -36
- package/src/resources/extensions/gsd/tests/overrides.test.ts +99 -106
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +40 -47
- package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +25 -28
- package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +66 -83
- package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +54 -77
- package/src/resources/extensions/gsd/tests/park-milestone.test.ts +68 -115
- package/src/resources/extensions/gsd/tests/parsers.test.ts +546 -611
- package/src/resources/extensions/gsd/tests/paths.test.ts +72 -87
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +77 -117
- package/src/resources/extensions/gsd/tests/preferences.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +93 -119
- package/src/resources/extensions/gsd/tests/queue-order.test.ts +70 -82
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +42 -55
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +45 -73
- package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +28 -38
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +73 -80
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -74
- package/src/resources/extensions/gsd/tests/requirements.test.ts +70 -75
- package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +44 -66
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +114 -181
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +63 -65
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +66 -128
- package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +18 -25
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +37 -44
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +19 -26
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +6 -8
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +22 -28
- package/src/resources/extensions/gsd/tests/terminated-transient.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +54 -56
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +23 -25
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +10 -11
- package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +66 -82
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +46 -47
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -22
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -86
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +41 -43
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +94 -96
- package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +11 -13
- package/src/resources/extensions/gsd/tests/worker-registry.test.ts +27 -29
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +50 -52
- package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +10 -13
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +14 -18
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +38 -39
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +17 -21
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +25 -30
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +30 -37
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +15 -22
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +59 -66
- package/src/resources/extensions/gsd/tests/worktree.test.ts +44 -50
- package/src/resources/extensions/gsd/tools/plan-slice.ts +2 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -0
- package/src/resources/extensions/gsd/tools/replan-slice.ts +3 -0
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +127 -0
- package/src/resources/extensions/gsd/worktree-resolver.ts +7 -0
- package/src/resources/extensions/mcp-client/index.ts +20 -0
- /package/dist/web/standalone/.next/static/{fOnWQBjWXMKUs4bqTg530 → kxxAA66bah_yhPYqLBHE2}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{fOnWQBjWXMKUs4bqTg530 → kxxAA66bah_yhPYqLBHE2}/_ssgManifest.js +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { parseTaskPlanMustHaves } from '../files.ts';
|
|
2
|
-
import {
|
|
2
|
+
import { describe, test, beforeEach, afterEach } from 'node:test';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
3
4
|
|
|
4
|
-
const { assertEq, assertTrue, report } = createTestContext();
|
|
5
5
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
6
6
|
// (a) Standard unchecked format: - [ ] text
|
|
7
7
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
{
|
|
9
|
+
test('parseTaskPlanMustHaves: standard unchecked', () => {
|
|
11
10
|
const content = `# T01: Test Task
|
|
12
11
|
|
|
13
12
|
## Must-Haves
|
|
@@ -16,56 +15,53 @@ console.log('\n=== parseTaskPlanMustHaves: standard unchecked ===');
|
|
|
16
15
|
- [ ] Second must-have item
|
|
17
16
|
`;
|
|
18
17
|
const result = parseTaskPlanMustHaves(content);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
18
|
+
assert.deepStrictEqual(result.length, 2, 'should return 2 items');
|
|
19
|
+
assert.deepStrictEqual(result[0].text, 'First must-have item', 'first item text');
|
|
20
|
+
assert.deepStrictEqual(result[0].checked, false, 'first item unchecked');
|
|
21
|
+
assert.deepStrictEqual(result[1].text, 'Second must-have item', 'second item text');
|
|
22
|
+
assert.deepStrictEqual(result[1].checked, false, 'second item unchecked');
|
|
23
|
+
});
|
|
25
24
|
|
|
26
25
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
27
26
|
// (b) Checked variants: - [x] and - [X]
|
|
28
27
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
{
|
|
29
|
+
test('parseTaskPlanMustHaves: checked [x] and [X]', () => {
|
|
32
30
|
const content = `## Must-Haves
|
|
33
31
|
|
|
34
32
|
- [x] Lowercase checked item
|
|
35
33
|
- [X] Uppercase checked item
|
|
36
34
|
`;
|
|
37
35
|
const result = parseTaskPlanMustHaves(content);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
36
|
+
assert.deepStrictEqual(result.length, 2, 'should return 2 items');
|
|
37
|
+
assert.deepStrictEqual(result[0].checked, true, 'lowercase x is checked');
|
|
38
|
+
assert.deepStrictEqual(result[0].text, 'Lowercase checked item', 'lowercase x text');
|
|
39
|
+
assert.deepStrictEqual(result[1].checked, true, 'uppercase X is checked');
|
|
40
|
+
assert.deepStrictEqual(result[1].text, 'Uppercase checked item', 'uppercase X text');
|
|
41
|
+
});
|
|
44
42
|
|
|
45
43
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
46
44
|
// (c) No-checkbox bullets: - text
|
|
47
45
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
48
46
|
|
|
49
|
-
|
|
50
|
-
{
|
|
47
|
+
test('parseTaskPlanMustHaves: no-checkbox bullets', () => {
|
|
51
48
|
const content = `## Must-Haves
|
|
52
49
|
|
|
53
50
|
- Plain bullet item
|
|
54
51
|
- Another plain item
|
|
55
52
|
`;
|
|
56
53
|
const result = parseTaskPlanMustHaves(content);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
54
|
+
assert.deepStrictEqual(result.length, 2, 'should return 2 items');
|
|
55
|
+
assert.deepStrictEqual(result[0].text, 'Plain bullet item', 'plain bullet text');
|
|
56
|
+
assert.deepStrictEqual(result[0].checked, false, 'plain bullet defaults to unchecked');
|
|
57
|
+
assert.deepStrictEqual(result[1].text, 'Another plain item', 'second plain bullet text');
|
|
58
|
+
});
|
|
62
59
|
|
|
63
60
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
64
61
|
// (d) Indented variants
|
|
65
62
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
66
63
|
|
|
67
|
-
|
|
68
|
-
{
|
|
64
|
+
test('parseTaskPlanMustHaves: indented variants', () => {
|
|
69
65
|
const content = `## Must-Haves
|
|
70
66
|
|
|
71
67
|
- [ ] Indented unchecked item
|
|
@@ -73,21 +69,20 @@ console.log('\n=== parseTaskPlanMustHaves: indented variants ===');
|
|
|
73
69
|
- Plain indented item
|
|
74
70
|
`;
|
|
75
71
|
const result = parseTaskPlanMustHaves(content);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
72
|
+
assert.deepStrictEqual(result.length, 3, 'should return 3 items');
|
|
73
|
+
assert.deepStrictEqual(result[0].text, 'Indented unchecked item', 'indented unchecked text');
|
|
74
|
+
assert.deepStrictEqual(result[0].checked, false, 'indented unchecked state');
|
|
75
|
+
assert.deepStrictEqual(result[1].text, 'Indented checked item', 'indented checked text');
|
|
76
|
+
assert.deepStrictEqual(result[1].checked, true, 'indented checked state');
|
|
77
|
+
assert.deepStrictEqual(result[2].text, 'Plain indented item', 'indented plain text');
|
|
78
|
+
assert.deepStrictEqual(result[2].checked, false, 'indented plain state');
|
|
79
|
+
});
|
|
84
80
|
|
|
85
81
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
86
82
|
// (e) Mixed checkbox states in one section
|
|
87
83
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
88
84
|
|
|
89
|
-
|
|
90
|
-
{
|
|
85
|
+
test('parseTaskPlanMustHaves: mixed states', () => {
|
|
91
86
|
const content = `## Must-Haves
|
|
92
87
|
|
|
93
88
|
- [ ] Unchecked one
|
|
@@ -97,20 +92,19 @@ console.log('\n=== parseTaskPlanMustHaves: mixed states ===');
|
|
|
97
92
|
- [ ] Another unchecked
|
|
98
93
|
`;
|
|
99
94
|
const result = parseTaskPlanMustHaves(content);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
95
|
+
assert.deepStrictEqual(result.length, 5, 'should return 5 items');
|
|
96
|
+
assert.deepStrictEqual(result[0].checked, false, 'first is unchecked');
|
|
97
|
+
assert.deepStrictEqual(result[1].checked, true, 'second is checked');
|
|
98
|
+
assert.deepStrictEqual(result[2].checked, true, 'third is checked (uppercase)');
|
|
99
|
+
assert.deepStrictEqual(result[3].checked, false, 'fourth (plain) is unchecked');
|
|
100
|
+
assert.deepStrictEqual(result[4].checked, false, 'fifth is unchecked');
|
|
101
|
+
});
|
|
107
102
|
|
|
108
103
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
109
104
|
// (f) Missing Must-Haves section → empty array
|
|
110
105
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
111
106
|
|
|
112
|
-
|
|
113
|
-
{
|
|
107
|
+
test('parseTaskPlanMustHaves: missing section', () => {
|
|
114
108
|
const content = `# T01: Some Task
|
|
115
109
|
|
|
116
110
|
## Description
|
|
@@ -122,16 +116,15 @@ Some description here.
|
|
|
122
116
|
- Run tests
|
|
123
117
|
`;
|
|
124
118
|
const result = parseTaskPlanMustHaves(content);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
119
|
+
assert.deepStrictEqual(result.length, 0, 'returns empty array when section missing');
|
|
120
|
+
assert.ok(Array.isArray(result), 'result is an array');
|
|
121
|
+
});
|
|
128
122
|
|
|
129
123
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
130
124
|
// (g) Empty Must-Haves section → empty array
|
|
131
125
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
132
126
|
|
|
133
|
-
|
|
134
|
-
{
|
|
127
|
+
test('parseTaskPlanMustHaves: empty section', () => {
|
|
135
128
|
const content = `## Must-Haves
|
|
136
129
|
|
|
137
130
|
## Verification
|
|
@@ -139,15 +132,14 @@ console.log('\n=== parseTaskPlanMustHaves: empty section ===');
|
|
|
139
132
|
- Run tests
|
|
140
133
|
`;
|
|
141
134
|
const result = parseTaskPlanMustHaves(content);
|
|
142
|
-
|
|
143
|
-
}
|
|
135
|
+
assert.deepStrictEqual(result.length, 0, 'returns empty array when section is empty');
|
|
136
|
+
});
|
|
144
137
|
|
|
145
138
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
146
139
|
// (h) Content with YAML frontmatter
|
|
147
140
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
148
141
|
|
|
149
|
-
|
|
150
|
-
{
|
|
142
|
+
test('parseTaskPlanMustHaves: YAML frontmatter', () => {
|
|
151
143
|
const content = `---
|
|
152
144
|
estimated_steps: 5
|
|
153
145
|
estimated_files: 3
|
|
@@ -161,16 +153,16 @@ estimated_files: 3
|
|
|
161
153
|
- [x] Checked must-have after frontmatter
|
|
162
154
|
`;
|
|
163
155
|
const result = parseTaskPlanMustHaves(content);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
156
|
+
assert.deepStrictEqual(result.length, 2, 'frontmatter does not pollute results');
|
|
157
|
+
assert.deepStrictEqual(result[0].text, 'Real must-have after frontmatter', 'first item text correct');
|
|
158
|
+
assert.deepStrictEqual(result[0].checked, false, 'first item unchecked');
|
|
159
|
+
assert.deepStrictEqual(result[1].text, 'Checked must-have after frontmatter', 'second item text correct');
|
|
160
|
+
assert.deepStrictEqual(result[1].checked, true, 'second item checked');
|
|
161
|
+
});
|
|
170
162
|
|
|
171
163
|
// Verify frontmatter content is not misinterpreted as must-haves
|
|
172
|
-
|
|
173
|
-
{
|
|
164
|
+
|
|
165
|
+
test('parseTaskPlanMustHaves: frontmatter-only content', () => {
|
|
174
166
|
const content = `---
|
|
175
167
|
estimated_steps: 5
|
|
176
168
|
estimated_files: 3
|
|
@@ -183,15 +175,14 @@ estimated_files: 3
|
|
|
183
175
|
No must-haves section here.
|
|
184
176
|
`;
|
|
185
177
|
const result = parseTaskPlanMustHaves(content);
|
|
186
|
-
|
|
187
|
-
}
|
|
178
|
+
assert.deepStrictEqual(result.length, 0, 'frontmatter-only content returns empty array');
|
|
179
|
+
});
|
|
188
180
|
|
|
189
181
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
190
182
|
// (i) Real task plan format (based on S01/T01-PLAN.md structure)
|
|
191
183
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
192
184
|
|
|
193
|
-
|
|
194
|
-
{
|
|
185
|
+
test('parseTaskPlanMustHaves: real task plan format', () => {
|
|
195
186
|
const content = `---
|
|
196
187
|
estimated_steps: 5
|
|
197
188
|
estimated_files: 3
|
|
@@ -239,40 +230,37 @@ Add the \`completing-milestone\` phase to the GSD state machine.
|
|
|
239
230
|
- \`agent/extensions/gsd/types.ts\` — Phase union includes \`'completing-milestone'\`
|
|
240
231
|
`;
|
|
241
232
|
const result = parseTaskPlanMustHaves(content);
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
233
|
+
assert.deepStrictEqual(result.length, 5, 'real plan has 5 must-haves');
|
|
234
|
+
assert.ok(result[0].text.includes('`Phase` type includes'), 'first must-have text matches');
|
|
235
|
+
assert.ok(result[1].text.includes('`deriveState` returns'), 'second must-have text matches');
|
|
236
|
+
assert.deepStrictEqual(result[0].checked, false, 'all real must-haves are unchecked');
|
|
237
|
+
assert.deepStrictEqual(result[4].checked, false, 'last real must-have is unchecked');
|
|
238
|
+
assert.ok(result[4].text.includes('multi-milestone'), 'last must-have references multi-milestone');
|
|
239
|
+
});
|
|
249
240
|
|
|
250
241
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
251
242
|
// Edge cases
|
|
252
243
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
253
244
|
|
|
254
|
-
|
|
255
|
-
{
|
|
245
|
+
test('parseTaskPlanMustHaves: empty string', () => {
|
|
256
246
|
const result = parseTaskPlanMustHaves('');
|
|
257
|
-
|
|
258
|
-
}
|
|
247
|
+
assert.deepStrictEqual(result.length, 0, 'empty string returns empty array');
|
|
248
|
+
});
|
|
259
249
|
|
|
260
|
-
|
|
261
|
-
{
|
|
250
|
+
test('parseTaskPlanMustHaves: must-haves with inline code and backticks', () => {
|
|
262
251
|
const content = `## Must-Haves
|
|
263
252
|
|
|
264
253
|
- [ ] \`functionName\` is exported from \`module.ts\`
|
|
265
254
|
- [x] Returns \`Array<{ text: string }>\` with correct extraction
|
|
266
255
|
`;
|
|
267
256
|
const result = parseTaskPlanMustHaves(content);
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
{
|
|
257
|
+
assert.deepStrictEqual(result.length, 2, 'handles backtick content');
|
|
258
|
+
assert.ok(result[0].text.includes('`functionName`'), 'preserves backticks in text');
|
|
259
|
+
assert.deepStrictEqual(result[0].checked, false, 'backtick item unchecked');
|
|
260
|
+
assert.deepStrictEqual(result[1].checked, true, 'backtick item checked');
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test('parseTaskPlanMustHaves: asterisk bullets', () => {
|
|
276
264
|
const content = `## Must-Haves
|
|
277
265
|
|
|
278
266
|
* [ ] Asterisk unchecked
|
|
@@ -280,12 +268,11 @@ console.log('\n=== parseTaskPlanMustHaves: asterisk bullets ===');
|
|
|
280
268
|
* Plain asterisk
|
|
281
269
|
`;
|
|
282
270
|
const result = parseTaskPlanMustHaves(content);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
271
|
+
assert.deepStrictEqual(result.length, 3, 'handles asterisk bullets');
|
|
272
|
+
assert.deepStrictEqual(result[0].checked, false, 'asterisk unchecked');
|
|
273
|
+
assert.deepStrictEqual(result[1].checked, true, 'asterisk checked');
|
|
274
|
+
assert.deepStrictEqual(result[2].checked, false, 'plain asterisk unchecked');
|
|
275
|
+
});
|
|
288
276
|
|
|
289
277
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
290
278
|
|
|
291
|
-
report();
|
|
@@ -19,9 +19,8 @@ import { shouldUseWorktreeIsolation } from "../auto.ts";
|
|
|
19
19
|
import { getIsolationMode } from "../preferences.ts";
|
|
20
20
|
import { getActiveAutoWorktreeContext } from "../auto-worktree.ts";
|
|
21
21
|
import { invalidateAllCaches } from "../cache.ts";
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
const { assertEq, assertTrue, report } = createTestContext();
|
|
22
|
+
import { describe, test, beforeEach, afterEach } from 'node:test';
|
|
23
|
+
import assert from 'node:assert/strict';
|
|
25
24
|
|
|
26
25
|
// --- Preferences helpers (same pattern as doctor-git.test.ts K001) ---
|
|
27
26
|
|
|
@@ -38,77 +37,77 @@ function removeRunnerPreferences(): void {
|
|
|
38
37
|
|
|
39
38
|
// --- Tests ---
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
console.log("Test 1: shouldUseWorktreeIsolation returns false for none");
|
|
40
|
+
test('shouldUseWorktreeIsolation returns false for none', () => {
|
|
43
41
|
try {
|
|
44
42
|
writeRunnerPreferences("none");
|
|
45
43
|
invalidateAllCaches();
|
|
46
|
-
|
|
44
|
+
assert.deepStrictEqual(shouldUseWorktreeIsolation(), false, "shouldUseWorktreeIsolation() with none prefs");
|
|
47
45
|
} finally {
|
|
48
46
|
removeRunnerPreferences();
|
|
49
47
|
invalidateAllCaches();
|
|
50
48
|
}
|
|
49
|
+
});
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
console.log("Test 2: shouldUseWorktreeIsolation returns false for branch");
|
|
51
|
+
test('shouldUseWorktreeIsolation returns false for branch', () => {
|
|
54
52
|
try {
|
|
55
53
|
writeRunnerPreferences("branch");
|
|
56
54
|
invalidateAllCaches();
|
|
57
|
-
|
|
55
|
+
assert.deepStrictEqual(shouldUseWorktreeIsolation(), false, "shouldUseWorktreeIsolation() with branch prefs");
|
|
58
56
|
} finally {
|
|
59
57
|
removeRunnerPreferences();
|
|
60
58
|
invalidateAllCaches();
|
|
61
59
|
}
|
|
60
|
+
});
|
|
62
61
|
|
|
63
|
-
|
|
64
|
-
console.log("Test 3: shouldUseWorktreeIsolation returns true for worktree");
|
|
62
|
+
test('shouldUseWorktreeIsolation returns true for worktree', () => {
|
|
65
63
|
try {
|
|
66
64
|
writeRunnerPreferences("worktree");
|
|
67
65
|
invalidateAllCaches();
|
|
68
|
-
|
|
66
|
+
assert.deepStrictEqual(shouldUseWorktreeIsolation(), true, "shouldUseWorktreeIsolation() with worktree prefs");
|
|
69
67
|
} finally {
|
|
70
68
|
removeRunnerPreferences();
|
|
71
69
|
invalidateAllCaches();
|
|
72
70
|
}
|
|
71
|
+
});
|
|
73
72
|
|
|
74
73
|
// Test 4: shouldUseWorktreeIsolation returns true for no prefs (default)
|
|
75
74
|
// Skip if global prefs exist — they override the default and this test
|
|
76
75
|
// cannot control ~/.gsd/preferences.md.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
76
|
+
|
|
77
|
+
test('shouldUseWorktreeIsolation returns true for no prefs (default)', () => {
|
|
78
|
+
const globalPrefsExist = existsSync(join(homedir(), ".gsd", "preferences.md"))
|
|
79
|
+
|| existsSync(join(homedir(), ".gsd", "PREFERENCES.md"));
|
|
80
|
+
if (!globalPrefsExist) {
|
|
81
|
+
try {
|
|
82
|
+
removeRunnerPreferences(); // ensure no prefs file
|
|
83
|
+
invalidateAllCaches();
|
|
84
|
+
assert.deepStrictEqual(shouldUseWorktreeIsolation(), true, "shouldUseWorktreeIsolation() with no prefs (default worktree)");
|
|
85
|
+
} finally {
|
|
86
|
+
invalidateAllCaches();
|
|
87
|
+
}
|
|
88
|
+
} else {
|
|
87
89
|
}
|
|
88
|
-
}
|
|
89
|
-
console.log("Test 4: SKIPPED — global prefs file exists, cannot test bare default");
|
|
90
|
-
}
|
|
90
|
+
});
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
console.log("Test 5: getIsolationMode returns 'none' with none prefs");
|
|
92
|
+
test('getIsolationMode returns "none" with none prefs', () => {
|
|
94
93
|
try {
|
|
95
94
|
writeRunnerPreferences("none");
|
|
96
95
|
invalidateAllCaches();
|
|
97
|
-
|
|
96
|
+
assert.deepStrictEqual(getIsolationMode(), "none", "getIsolationMode() with none prefs");
|
|
98
97
|
} finally {
|
|
99
98
|
removeRunnerPreferences();
|
|
100
99
|
invalidateAllCaches();
|
|
101
100
|
}
|
|
101
|
+
});
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
test('getActiveAutoWorktreeContext returns null at baseline', () => {
|
|
104
|
+
assert.deepStrictEqual(getActiveAutoWorktreeContext(), null, "getActiveAutoWorktreeContext() returns null without enterAutoWorktree()");
|
|
105
|
+
});
|
|
106
106
|
|
|
107
107
|
// Test 7: System prompt worktree block absent without active worktree
|
|
108
|
-
|
|
109
|
-
{
|
|
108
|
+
|
|
109
|
+
test('Test 7: System prompt worktree block absent without active worktree', () => {
|
|
110
110
|
const ctx = getActiveAutoWorktreeContext();
|
|
111
|
-
|
|
112
|
-
}
|
|
111
|
+
assert.ok(ctx === null, "getActiveAutoWorktreeContext() null confirms system prompt worktree block will not be injected");
|
|
112
|
+
});
|
|
113
113
|
|
|
114
|
-
report();
|