gsd-pi 2.44.0-dev.848dd4c → 2.44.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 +12 -30
- package/dist/resources/extensions/gsd/auto-start.js +0 -10
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +0 -5
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- 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 +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/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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- 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 +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- 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 +14 -14
- package/dist/web/standalone/.next/server/chunks/229.js +1 -1
- package/dist/web/standalone/.next/server/chunks/471.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- 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/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-7e9530a7122506c5.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.test.js +8 -6
- 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 +26 -24
- 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 +48 -29
- package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +44 -34
- 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 +34 -30
- package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +12 -10
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +47 -43
- 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/extensions/runner.test.ts +26 -26
- package/packages/pi-coding-agent/src/core/fs-utils.test.ts +43 -31
- package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +45 -40
- package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
- package/src/resources/extensions/gsd/auto-start.ts +0 -14
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +0 -8
- 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 +16 -14
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +57 -43
- package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +523 -465
- package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +75 -73
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +56 -34
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +656 -533
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +143 -165
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +52 -29
- package/src/resources/extensions/gsd/tests/captures.test.ts +176 -148
- package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +33 -32
- package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +143 -141
- 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 +59 -38
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +263 -228
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +302 -250
- package/src/resources/extensions/gsd/tests/context-store.test.ts +367 -354
- package/src/resources/extensions/gsd/tests/continue-here.test.ts +72 -68
- package/src/resources/extensions/gsd/tests/cost-projection.test.ts +106 -92
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +35 -27
- package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +237 -220
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +420 -390
- package/src/resources/extensions/gsd/tests/definition-loader.test.ts +92 -76
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +83 -68
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +183 -152
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +101 -78
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +227 -192
- package/src/resources/extensions/gsd/tests/detection.test.ts +278 -232
- package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +34 -30
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +180 -164
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +49 -43
- package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +38 -34
- package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +75 -54
- package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +32 -21
- package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +97 -72
- package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +44 -38
- package/src/resources/extensions/gsd/tests/doctor-git.test.ts +145 -104
- package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +106 -84
- package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +60 -54
- package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +93 -72
- package/src/resources/extensions/gsd/tests/doctor.test.ts +134 -104
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +131 -123
- package/src/resources/extensions/gsd/tests/exit-command.test.ts +24 -20
- package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +57 -48
- package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +42 -30
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +206 -198
- package/src/resources/extensions/gsd/tests/git-locale.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/git-service.test.ts +388 -285
- package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +39 -31
- package/src/resources/extensions/gsd/tests/graph-operations.test.ts +69 -63
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +264 -255
- package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +119 -108
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +103 -81
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +262 -229
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +37 -29
- package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +102 -81
- package/src/resources/extensions/gsd/tests/init-wizard.test.ts +18 -16
- package/src/resources/extensions/gsd/tests/integration-edge.test.ts +46 -41
- package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +53 -42
- package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +91 -75
- package/src/resources/extensions/gsd/tests/integration-proof.test.ts +18 -18
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +194 -150
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +125 -101
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +54 -45
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +93 -80
- package/src/resources/extensions/gsd/tests/migrate-command.test.ts +66 -57
- package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +93 -83
- package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +170 -161
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +141 -125
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +131 -107
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +96 -87
- package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +164 -125
- package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +94 -81
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +36 -35
- package/src/resources/extensions/gsd/tests/overrides.test.ts +106 -99
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +47 -40
- package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +28 -25
- package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +83 -66
- package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +77 -54
- package/src/resources/extensions/gsd/tests/park-milestone.test.ts +115 -68
- package/src/resources/extensions/gsd/tests/parsers.test.ts +611 -546
- package/src/resources/extensions/gsd/tests/paths.test.ts +87 -72
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +117 -77
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +119 -93
- package/src/resources/extensions/gsd/tests/queue-order.test.ts +82 -70
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +55 -42
- package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +73 -45
- package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +38 -28
- package/src/resources/extensions/gsd/tests/replan-slice.test.ts +80 -73
- package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +74 -71
- package/src/resources/extensions/gsd/tests/requirements.test.ts +75 -70
- package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +66 -44
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +181 -114
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +65 -63
- package/src/resources/extensions/gsd/tests/run-uat.test.ts +128 -66
- package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +25 -18
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/shared-wal.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +8 -6
- package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/token-savings.test.ts +56 -54
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +25 -23
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +11 -9
- package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +82 -66
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +47 -46
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +22 -20
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +86 -84
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +43 -41
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +96 -94
- package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +13 -11
- package/src/resources/extensions/gsd/tests/worker-registry.test.ts +29 -27
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +52 -50
- package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +13 -10
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +18 -14
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +39 -38
- package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +21 -17
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +30 -25
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +22 -15
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +66 -59
- package/src/resources/extensions/gsd/tests/worktree.test.ts +50 -44
- package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +0 -100
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +0 -63
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{-zps1Q9mQmioAKLcQiCr8 → mgkxN0mGP6gSUmGPEzbk_}/_ssgManifest.js +0 -0
|
@@ -18,8 +18,9 @@ import {
|
|
|
18
18
|
getActiveTaskFromDb,
|
|
19
19
|
} from '../gsd-db.ts';
|
|
20
20
|
import { migrateHierarchyToDb } from '../md-importer.ts';
|
|
21
|
-
import {
|
|
22
|
-
|
|
21
|
+
import { createTestContext } from './test-helpers.ts';
|
|
22
|
+
|
|
23
|
+
const { assertEq, assertTrue, report } = createTestContext();
|
|
23
24
|
|
|
24
25
|
// ─── Fixture Helpers ───────────────────────────────────────────────────────
|
|
25
26
|
|
|
@@ -97,9 +98,11 @@ const PLAN_S02_1_TASK = `# S02: Second Slice
|
|
|
97
98
|
// Test Cases
|
|
98
99
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
99
100
|
|
|
100
|
-
|
|
101
|
+
async function main(): Promise<void> {
|
|
101
102
|
|
|
102
|
-
|
|
103
|
+
// ─── Test (a): Single milestone with 2 slices, 3 tasks ────────────────
|
|
104
|
+
console.log('\n=== migrate-hier: single milestone with 2 slices, 3 tasks ===');
|
|
105
|
+
{
|
|
103
106
|
const base = createFixtureBase();
|
|
104
107
|
try {
|
|
105
108
|
writeFile(base, 'milestones/M001/M001-ROADMAP.md', ROADMAP_2_SLICES);
|
|
@@ -109,48 +112,48 @@ test('migrate-hier: single milestone with 2 slices, 3 tasks', () => {
|
|
|
109
112
|
openDatabase(':memory:');
|
|
110
113
|
const counts = migrateHierarchyToDb(base);
|
|
111
114
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
assertEq(counts.milestones, 1, 'single-ms: 1 milestone inserted');
|
|
116
|
+
assertEq(counts.slices, 2, 'single-ms: 2 slices inserted');
|
|
117
|
+
assertEq(counts.tasks, 4, 'single-ms: 4 tasks inserted (3 + 1)');
|
|
115
118
|
|
|
116
119
|
const milestones = getAllMilestones();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
assertEq(milestones.length, 1, 'single-ms: 1 milestone in DB');
|
|
121
|
+
assertEq(milestones[0]!.id, 'M001', 'single-ms: milestone ID is M001');
|
|
122
|
+
assertEq(milestones[0]!.title, 'M001: Test Milestone', 'single-ms: milestone title correct');
|
|
123
|
+
assertEq(milestones[0]!.status, 'active', 'single-ms: milestone status is active');
|
|
121
124
|
|
|
122
125
|
const slices = getMilestoneSlices('M001');
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
assertEq(slices.length, 2, 'single-ms: 2 slices in DB');
|
|
127
|
+
assertEq(slices[0]!.id, 'S01', 'single-ms: first slice is S01');
|
|
128
|
+
assertEq(slices[0]!.title, 'First Slice', 'single-ms: S01 title correct');
|
|
129
|
+
assertEq(slices[0]!.risk, 'low', 'single-ms: S01 risk is low');
|
|
130
|
+
assertEq(slices[0]!.status, 'pending', 'single-ms: S01 status is pending');
|
|
131
|
+
assertEq(slices[1]!.id, 'S02', 'single-ms: second slice is S02');
|
|
132
|
+
assertEq(slices[1]!.risk, 'high', 'single-ms: S02 risk is high');
|
|
130
133
|
|
|
131
134
|
const s01Tasks = getSliceTasks('M001', 'S01');
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
assertEq(s01Tasks.length, 3, 'single-ms: 3 tasks for S01');
|
|
136
|
+
assertEq(s01Tasks[0]!.id, 'T01', 'single-ms: first task is T01');
|
|
137
|
+
assertEq(s01Tasks[0]!.title, 'First Task', 'single-ms: T01 title correct');
|
|
138
|
+
assertEq(s01Tasks[0]!.status, 'pending', 'single-ms: T01 status is pending');
|
|
139
|
+
assertEq(s01Tasks[1]!.id, 'T02', 'single-ms: second task is T02');
|
|
140
|
+
assertEq(s01Tasks[1]!.status, 'complete', 'single-ms: T02 status is complete (was [x])');
|
|
141
|
+
assertEq(s01Tasks[2]!.id, 'T03', 'single-ms: third task is T03');
|
|
139
142
|
|
|
140
143
|
const s02Tasks = getSliceTasks('M001', 'S02');
|
|
141
|
-
|
|
142
|
-
|
|
144
|
+
assertEq(s02Tasks.length, 1, 'single-ms: 1 task for S02');
|
|
145
|
+
assertEq(s02Tasks[0]!.id, 'T01', 'single-ms: S02 T01 correct');
|
|
143
146
|
|
|
144
147
|
closeDatabase();
|
|
145
148
|
} finally {
|
|
146
149
|
closeDatabase();
|
|
147
150
|
cleanup(base);
|
|
148
151
|
}
|
|
149
|
-
}
|
|
152
|
+
}
|
|
150
153
|
|
|
151
154
|
// ─── Test (b): Multi-milestone — M001 complete, M002 active with deps ─
|
|
152
|
-
|
|
153
|
-
|
|
155
|
+
console.log('\n=== migrate-hier: multi-milestone with deps ===');
|
|
156
|
+
{
|
|
154
157
|
const base = createFixtureBase();
|
|
155
158
|
try {
|
|
156
159
|
// M001: complete (has SUMMARY)
|
|
@@ -194,35 +197,35 @@ Depends on M001 completion.
|
|
|
194
197
|
openDatabase(':memory:');
|
|
195
198
|
const counts = migrateHierarchyToDb(base);
|
|
196
199
|
|
|
197
|
-
|
|
200
|
+
assertEq(counts.milestones, 2, 'multi-ms: 2 milestones inserted');
|
|
198
201
|
|
|
199
202
|
const m001 = getMilestone('M001');
|
|
200
|
-
|
|
201
|
-
|
|
203
|
+
assertTrue(m001 !== null, 'multi-ms: M001 exists');
|
|
204
|
+
assertEq(m001!.status, 'complete', 'multi-ms: M001 is complete');
|
|
202
205
|
|
|
203
206
|
const m002 = getMilestone('M002');
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
+
assertTrue(m002 !== null, 'multi-ms: M002 exists');
|
|
208
|
+
assertEq(m002!.status, 'active', 'multi-ms: M002 is active');
|
|
209
|
+
assertEq(m002!.depends_on, ['M001'], 'multi-ms: M002 depends on M001');
|
|
207
210
|
|
|
208
211
|
// Active milestone should be M002
|
|
209
212
|
const active = getActiveMilestoneFromDb();
|
|
210
|
-
|
|
213
|
+
assertEq(active?.id, 'M002', 'multi-ms: active milestone is M002');
|
|
211
214
|
|
|
212
215
|
// Active slice in M002 should be S01 (S02 depends on S01)
|
|
213
216
|
const activeSlice = getActiveSliceFromDb('M002');
|
|
214
|
-
|
|
217
|
+
assertEq(activeSlice?.id, 'S01', 'multi-ms: active slice is S01');
|
|
215
218
|
|
|
216
219
|
closeDatabase();
|
|
217
220
|
} finally {
|
|
218
221
|
closeDatabase();
|
|
219
222
|
cleanup(base);
|
|
220
223
|
}
|
|
221
|
-
}
|
|
224
|
+
}
|
|
222
225
|
|
|
223
226
|
// ─── Test (c): Partially-completed slice — some tasks [x], some [ ] ───
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
console.log('\n=== migrate-hier: partially-completed slice ===');
|
|
228
|
+
{
|
|
226
229
|
const base = createFixtureBase();
|
|
227
230
|
try {
|
|
228
231
|
const roadmap = `# M001: Partial
|
|
@@ -257,25 +260,25 @@ test('migrate-hier: partially-completed slice', () => {
|
|
|
257
260
|
migrateHierarchyToDb(base);
|
|
258
261
|
|
|
259
262
|
const tasks = getSliceTasks('M001', 'S01');
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
assertEq(tasks.length, 3, 'partial: 3 tasks');
|
|
264
|
+
assertEq(tasks[0]!.status, 'complete', 'partial: T01 is complete');
|
|
265
|
+
assertEq(tasks[1]!.status, 'complete', 'partial: T02 is complete');
|
|
266
|
+
assertEq(tasks[2]!.status, 'pending', 'partial: T03 is pending');
|
|
264
267
|
|
|
265
268
|
// Active task should be T03
|
|
266
269
|
const activeTask = getActiveTaskFromDb('M001', 'S01');
|
|
267
|
-
|
|
270
|
+
assertEq(activeTask?.id, 'T03', 'partial: active task is T03');
|
|
268
271
|
|
|
269
272
|
closeDatabase();
|
|
270
273
|
} finally {
|
|
271
274
|
closeDatabase();
|
|
272
275
|
cleanup(base);
|
|
273
276
|
}
|
|
274
|
-
}
|
|
277
|
+
}
|
|
275
278
|
|
|
276
279
|
// ─── Test (d): Ghost milestone skipped ────────────────────────────────
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
console.log('\n=== migrate-hier: ghost milestone skipped ===');
|
|
281
|
+
{
|
|
279
282
|
const base = createFixtureBase();
|
|
280
283
|
try {
|
|
281
284
|
// M001: real milestone
|
|
@@ -286,21 +289,21 @@ test('migrate-hier: ghost milestone skipped', () => {
|
|
|
286
289
|
openDatabase(':memory:');
|
|
287
290
|
const counts = migrateHierarchyToDb(base);
|
|
288
291
|
|
|
289
|
-
|
|
292
|
+
assertEq(counts.milestones, 1, 'ghost: only 1 milestone inserted');
|
|
290
293
|
const milestones = getAllMilestones();
|
|
291
|
-
|
|
292
|
-
|
|
294
|
+
assertEq(milestones.length, 1, 'ghost: 1 milestone in DB');
|
|
295
|
+
assertEq(milestones[0]!.id, 'M001', 'ghost: only M001 in DB');
|
|
293
296
|
|
|
294
297
|
closeDatabase();
|
|
295
298
|
} finally {
|
|
296
299
|
closeDatabase();
|
|
297
300
|
cleanup(base);
|
|
298
301
|
}
|
|
299
|
-
}
|
|
302
|
+
}
|
|
300
303
|
|
|
301
304
|
// ─── Test (e): Idempotent re-run — calling twice doesn't duplicate ────
|
|
302
|
-
|
|
303
|
-
|
|
305
|
+
console.log('\n=== migrate-hier: idempotent re-run ===');
|
|
306
|
+
{
|
|
304
307
|
const base = createFixtureBase();
|
|
305
308
|
try {
|
|
306
309
|
writeFile(base, 'milestones/M001/M001-ROADMAP.md', ROADMAP_2_SLICES);
|
|
@@ -310,31 +313,31 @@ test('migrate-hier: idempotent re-run', () => {
|
|
|
310
313
|
|
|
311
314
|
// First run
|
|
312
315
|
const counts1 = migrateHierarchyToDb(base);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
+
assertEq(counts1.milestones, 1, 'idempotent-1: 1 milestone first run');
|
|
317
|
+
assertEq(counts1.slices, 2, 'idempotent-1: 2 slices first run');
|
|
318
|
+
assertEq(counts1.tasks, 3, 'idempotent-1: 3 tasks first run');
|
|
316
319
|
|
|
317
320
|
// Second run — INSERT OR IGNORE means no duplicates
|
|
318
321
|
const counts2 = migrateHierarchyToDb(base);
|
|
319
322
|
// Counts reflect attempts, not actual inserts (INSERT OR IGNORE silently skips)
|
|
320
323
|
// The important thing: DB doesn't have duplicates
|
|
321
324
|
const milestones = getAllMilestones();
|
|
322
|
-
|
|
325
|
+
assertEq(milestones.length, 1, 'idempotent-2: still 1 milestone after second run');
|
|
323
326
|
const slices = getMilestoneSlices('M001');
|
|
324
|
-
|
|
327
|
+
assertEq(slices.length, 2, 'idempotent-2: still 2 slices after second run');
|
|
325
328
|
const tasks = getSliceTasks('M001', 'S01');
|
|
326
|
-
|
|
329
|
+
assertEq(tasks.length, 3, 'idempotent-2: still 3 tasks for S01 after second run');
|
|
327
330
|
|
|
328
331
|
closeDatabase();
|
|
329
332
|
} finally {
|
|
330
333
|
closeDatabase();
|
|
331
334
|
cleanup(base);
|
|
332
335
|
}
|
|
333
|
-
}
|
|
336
|
+
}
|
|
334
337
|
|
|
335
338
|
// ─── Test (f): Empty roadmap — milestone inserted but no slices ───────
|
|
336
|
-
|
|
337
|
-
|
|
339
|
+
console.log('\n=== migrate-hier: empty roadmap, no slices ===');
|
|
340
|
+
{
|
|
338
341
|
const base = createFixtureBase();
|
|
339
342
|
try {
|
|
340
343
|
const emptyRoadmap = `# M001: Empty Milestone
|
|
@@ -350,27 +353,27 @@ test('migrate-hier: empty roadmap, no slices', () => {
|
|
|
350
353
|
openDatabase(':memory:');
|
|
351
354
|
const counts = migrateHierarchyToDb(base);
|
|
352
355
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
+
assertEq(counts.milestones, 1, 'empty-roadmap: 1 milestone inserted');
|
|
357
|
+
assertEq(counts.slices, 0, 'empty-roadmap: 0 slices inserted');
|
|
358
|
+
assertEq(counts.tasks, 0, 'empty-roadmap: 0 tasks inserted');
|
|
356
359
|
|
|
357
360
|
const milestones = getAllMilestones();
|
|
358
|
-
|
|
359
|
-
|
|
361
|
+
assertEq(milestones.length, 1, 'empty-roadmap: 1 milestone in DB');
|
|
362
|
+
assertEq(milestones[0]!.title, 'M001: Empty Milestone', 'empty-roadmap: title correct');
|
|
360
363
|
|
|
361
364
|
const slices = getMilestoneSlices('M001');
|
|
362
|
-
|
|
365
|
+
assertEq(slices.length, 0, 'empty-roadmap: no slices in DB');
|
|
363
366
|
|
|
364
367
|
closeDatabase();
|
|
365
368
|
} finally {
|
|
366
369
|
closeDatabase();
|
|
367
370
|
cleanup(base);
|
|
368
371
|
}
|
|
369
|
-
}
|
|
372
|
+
}
|
|
370
373
|
|
|
371
374
|
// ─── Test (g): Slice depends parsed correctly ─────────────────────────
|
|
372
|
-
|
|
373
|
-
|
|
375
|
+
console.log('\n=== migrate-hier: slice depends parsed ===');
|
|
376
|
+
{
|
|
374
377
|
const base = createFixtureBase();
|
|
375
378
|
try {
|
|
376
379
|
const roadmap = `# M001: Deps Test
|
|
@@ -394,21 +397,21 @@ test('migrate-hier: slice depends parsed', () => {
|
|
|
394
397
|
migrateHierarchyToDb(base);
|
|
395
398
|
|
|
396
399
|
const slices = getMilestoneSlices('M001');
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
400
|
+
assertEq(slices.length, 3, 'depends: 3 slices');
|
|
401
|
+
assertEq(slices[0]!.depends, [], 'depends: S01 has no deps');
|
|
402
|
+
assertEq(slices[1]!.depends, ['S01'], 'depends: S02 depends on S01');
|
|
403
|
+
assertEq(slices[2]!.depends, ['S01', 'S02'], 'depends: S03 depends on S01,S02');
|
|
401
404
|
|
|
402
405
|
closeDatabase();
|
|
403
406
|
} finally {
|
|
404
407
|
closeDatabase();
|
|
405
408
|
cleanup(base);
|
|
406
409
|
}
|
|
407
|
-
}
|
|
410
|
+
}
|
|
408
411
|
|
|
409
412
|
// ─── Test (h): Demo text extracted from roadmap ───────────────────────
|
|
410
|
-
|
|
411
|
-
|
|
413
|
+
console.log('\n=== migrate-hier: demo text extracted ===');
|
|
414
|
+
{
|
|
412
415
|
const base = createFixtureBase();
|
|
413
416
|
try {
|
|
414
417
|
writeFile(base, 'milestones/M001/M001-ROADMAP.md', ROADMAP_2_SLICES);
|
|
@@ -417,13 +420,20 @@ test('migrate-hier: demo text extracted', () => {
|
|
|
417
420
|
migrateHierarchyToDb(base);
|
|
418
421
|
|
|
419
422
|
const slices = getMilestoneSlices('M001');
|
|
420
|
-
|
|
421
|
-
|
|
423
|
+
assertEq(slices[0]!.demo, 'First slice done.', 'demo: S01 demo text correct');
|
|
424
|
+
assertEq(slices[1]!.demo, 'All slices done.', 'demo: S02 demo text correct');
|
|
422
425
|
|
|
423
426
|
closeDatabase();
|
|
424
427
|
} finally {
|
|
425
428
|
closeDatabase();
|
|
426
429
|
cleanup(base);
|
|
427
430
|
}
|
|
428
|
-
}
|
|
431
|
+
}
|
|
429
432
|
|
|
433
|
+
report();
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
main().catch((error) => {
|
|
437
|
+
console.error(error);
|
|
438
|
+
process.exit(1);
|
|
439
|
+
});
|