gsd-pi 2.60.0 → 2.61.0-dev.7aed0bf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/resources/extensions/ask-user-questions.js +7 -4
- package/dist/resources/extensions/gsd/auto/phases.js +15 -7
- package/dist/resources/extensions/gsd/auto-dashboard.js +21 -8
- package/dist/resources/extensions/gsd/auto-dispatch.js +6 -3
- package/dist/resources/extensions/gsd/auto-model-selection.js +58 -9
- package/dist/resources/extensions/gsd/auto-post-unit.js +3 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +36 -20
- package/dist/resources/extensions/gsd/auto-recovery.js +37 -18
- package/dist/resources/extensions/gsd/auto-start.js +9 -5
- package/dist/resources/extensions/gsd/auto-timers.js +11 -5
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +5 -3
- package/dist/resources/extensions/gsd/auto-verification.js +3 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +120 -55
- package/dist/resources/extensions/gsd/auto.js +39 -17
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +6 -3
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +4 -10
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +2 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -10
- package/dist/resources/extensions/gsd/commands/catalog.js +2 -0
- package/dist/resources/extensions/gsd/commands-codebase.js +48 -21
- package/dist/resources/extensions/gsd/commands-inspect.js +2 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +32 -19
- package/dist/resources/extensions/gsd/complexity-classifier.js +8 -4
- package/dist/resources/extensions/gsd/custom-verification.js +3 -2
- package/dist/resources/extensions/gsd/gsd-db.js +33 -13
- package/dist/resources/extensions/gsd/guided-flow.js +19 -9
- package/dist/resources/extensions/gsd/init-wizard.js +12 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +11 -9
- package/dist/resources/extensions/gsd/md-importer.js +5 -4
- package/dist/resources/extensions/gsd/milestone-actions.js +3 -2
- package/dist/resources/extensions/gsd/milestone-ids.js +2 -1
- package/dist/resources/extensions/gsd/model-router.js +156 -121
- package/dist/resources/extensions/gsd/parallel-merge.js +5 -3
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +26 -14
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +45 -0
- package/dist/resources/extensions/gsd/preferences.js +15 -3
- package/dist/resources/extensions/gsd/prompt-loader.js +3 -2
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/rule-registry.js +7 -6
- package/dist/resources/extensions/gsd/safe-fs.js +6 -8
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-task.js +3 -2
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/plan-slice.js +3 -2
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -1
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +4 -4
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +2 -1
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -1
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -1
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +2 -1
- package/dist/resources/extensions/gsd/triage-resolution.js +11 -4
- package/dist/resources/extensions/gsd/workflow-events.js +2 -1
- package/dist/resources/extensions/gsd/workflow-logger.js +37 -4
- package/dist/resources/extensions/gsd/workflow-migration.js +14 -12
- package/dist/resources/extensions/gsd/workflow-projections.js +2 -2
- package/dist/resources/extensions/gsd/workflow-reconcile.js +2 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +26 -14
- package/dist/resources/extensions/shared/interview-ui.js +3 -1
- 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 +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/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/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 +2 -2
- 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 +17 -17
- package/dist/web/standalone/.next/server/chunks/2229.js +1 -1
- package/dist/web/standalone/.next/server/chunks/7471.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-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-0c485498795110d6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.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/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +16 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +26 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js +6 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/defaults.json +2 -2
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js +47 -0
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +6 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +19 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +26 -0
- package/packages/pi-coding-agent/src/core/lsp/config.ts +7 -1
- package/packages/pi-coding-agent/src/core/lsp/defaults.json +2 -2
- package/packages/pi-coding-agent/src/core/lsp/lsp-legacy-alias.test.ts +70 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +7 -3
- package/src/resources/extensions/gsd/auto/phases.ts +17 -7
- package/src/resources/extensions/gsd/auto-dashboard.ts +22 -8
- package/src/resources/extensions/gsd/auto-dispatch.ts +7 -3
- package/src/resources/extensions/gsd/auto-model-selection.ts +77 -15
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -4
- package/src/resources/extensions/gsd/auto-prompts.ts +37 -20
- package/src/resources/extensions/gsd/auto-recovery.ts +38 -18
- package/src/resources/extensions/gsd/auto-start.ts +10 -9
- package/src/resources/extensions/gsd/auto-timers.ts +12 -5
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +6 -2
- package/src/resources/extensions/gsd/auto-verification.ts +3 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +121 -55
- package/src/resources/extensions/gsd/auto.ts +40 -17
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +4 -3
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +4 -16
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +2 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +8 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -10
- package/src/resources/extensions/gsd/commands/catalog.ts +2 -0
- package/src/resources/extensions/gsd/commands-codebase.ts +52 -20
- package/src/resources/extensions/gsd/commands-inspect.ts +2 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +28 -19
- package/src/resources/extensions/gsd/complexity-classifier.ts +9 -4
- package/src/resources/extensions/gsd/custom-verification.ts +3 -2
- package/src/resources/extensions/gsd/gsd-db.ts +12 -14
- package/src/resources/extensions/gsd/guided-flow.ts +9 -8
- package/src/resources/extensions/gsd/init-wizard.ts +12 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +11 -17
- package/src/resources/extensions/gsd/md-importer.ts +5 -4
- package/src/resources/extensions/gsd/milestone-actions.ts +3 -2
- package/src/resources/extensions/gsd/milestone-ids.ts +2 -1
- package/src/resources/extensions/gsd/model-router.ts +199 -173
- package/src/resources/extensions/gsd/parallel-merge.ts +5 -3
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +18 -14
- package/src/resources/extensions/gsd/preferences-types.ts +13 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +45 -0
- package/src/resources/extensions/gsd/preferences.ts +16 -3
- package/src/resources/extensions/gsd/prompt-loader.ts +3 -2
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/rule-registry.ts +7 -6
- package/src/resources/extensions/gsd/safe-fs.ts +6 -5
- package/src/resources/extensions/gsd/tests/capability-router.test.ts +347 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +27 -2
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +1188 -0
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +841 -0
- package/src/resources/extensions/gsd/tests/model-router.test.ts +403 -3
- package/src/resources/extensions/gsd/tests/preferences.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +284 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-audit.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +6 -6
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -6
- package/src/resources/extensions/gsd/tools/complete-slice.ts +3 -6
- package/src/resources/extensions/gsd/tools/complete-task.ts +3 -6
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +3 -6
- package/src/resources/extensions/gsd/tools/plan-slice.ts +3 -6
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -3
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +4 -6
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +2 -3
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -3
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -3
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -3
- package/src/resources/extensions/gsd/triage-resolution.ts +11 -4
- package/src/resources/extensions/gsd/types.ts +1 -0
- package/src/resources/extensions/gsd/workflow-events.ts +2 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +52 -5
- package/src/resources/extensions/gsd/workflow-migration.ts +14 -12
- package/src/resources/extensions/gsd/workflow-projections.ts +2 -2
- package/src/resources/extensions/gsd/workflow-reconcile.ts +2 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +16 -14
- package/src/resources/extensions/shared/interview-ui.ts +3 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +144 -0
- package/dist/web/standalone/.next/static/chunks/app/page-62be3b5fa91e4c8f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- /package/dist/web/standalone/.next/static/{qdTGLxuqgx_Md-LpUsbMx → b7FOoMHaUb3FPoLNbxar4}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{qdTGLxuqgx_Md-LpUsbMx → b7FOoMHaUb3FPoLNbxar4}/_ssgManifest.js +0 -0
|
@@ -16,6 +16,7 @@ export interface ClassificationResult {
|
|
|
16
16
|
tier: ComplexityTier;
|
|
17
17
|
reason: string;
|
|
18
18
|
downgraded: boolean; // true if budget pressure lowered the tier
|
|
19
|
+
taskMetadata?: TaskMetadata;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export interface TaskMetadata {
|
|
@@ -71,17 +72,20 @@ export function classifyUnitComplexity(
|
|
|
71
72
|
): ClassificationResult {
|
|
72
73
|
// Hook units default to light
|
|
73
74
|
if (unitType.startsWith("hook/")) {
|
|
74
|
-
const result: ClassificationResult = { tier: "light", reason: "hook unit", downgraded: false };
|
|
75
|
+
const result: ClassificationResult = { tier: "light", reason: "hook unit", downgraded: false, taskMetadata: undefined };
|
|
75
76
|
return applyBudgetPressure(result, budgetPct);
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
// Start with the default tier for this unit type
|
|
79
80
|
let tier = UNIT_TYPE_TIERS[unitType] ?? "standard";
|
|
80
81
|
let reason = `unit type: ${unitType}`;
|
|
82
|
+
let taskMeta: TaskMetadata | undefined;
|
|
81
83
|
|
|
82
84
|
// For execute-task, analyze task metadata for complexity signals
|
|
83
85
|
if (unitType === "execute-task") {
|
|
84
|
-
|
|
86
|
+
// Extract metadata once and reuse throughout to avoid double-extraction
|
|
87
|
+
taskMeta = metadata ?? extractTaskMetadata(unitId, basePath);
|
|
88
|
+
const taskAnalysis = analyzeTaskComplexity(unitId, basePath, taskMeta);
|
|
85
89
|
tier = taskAnalysis.tier;
|
|
86
90
|
reason = taskAnalysis.reason;
|
|
87
91
|
}
|
|
@@ -96,14 +100,15 @@ export function classifyUnitComplexity(
|
|
|
96
100
|
}
|
|
97
101
|
|
|
98
102
|
// Adaptive learning: check if history suggests bumping the tier
|
|
99
|
-
|
|
103
|
+
// Use already-extracted taskMeta.tags if available to avoid double-extraction
|
|
104
|
+
const tags = taskMeta?.tags ?? metadata?.tags;
|
|
100
105
|
const adaptiveAdjustment = getAdaptiveTierAdjustment(unitType, tier, tags);
|
|
101
106
|
if (adaptiveAdjustment && tierOrdinal(adaptiveAdjustment) > tierOrdinal(tier)) {
|
|
102
107
|
reason = `${reason} (adaptive: high failure rate at ${tier})`;
|
|
103
108
|
tier = adaptiveAdjustment;
|
|
104
109
|
}
|
|
105
110
|
|
|
106
|
-
const result: ClassificationResult = { tier, reason, downgraded: false };
|
|
111
|
+
const result: ClassificationResult = { tier, reason, downgraded: false, taskMetadata: taskMeta };
|
|
107
112
|
return applyBudgetPressure(result, budgetPct);
|
|
108
113
|
}
|
|
109
114
|
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* - The frozen DEFINITION.yaml on disk is the single source of truth for step policies.
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
+
import { logWarning } from "./workflow-logger.js";
|
|
20
21
|
import { readFileSync, existsSync, statSync } from "node:fs";
|
|
21
22
|
import { join, resolve, sep } from "node:path";
|
|
22
23
|
import { spawnSync } from "node:child_process";
|
|
@@ -130,8 +131,8 @@ function handleContentHeuristic(
|
|
|
130
131
|
if (!new RegExp(verify.pattern).test(content)) {
|
|
131
132
|
return "pause";
|
|
132
133
|
}
|
|
133
|
-
} catch {
|
|
134
|
-
|
|
134
|
+
} catch (e) {
|
|
135
|
+
logWarning("engine", `content-heuristic regex failed: ${(e as Error).message}`);
|
|
135
136
|
return "pause";
|
|
136
137
|
}
|
|
137
138
|
}
|
|
@@ -10,7 +10,7 @@ import { existsSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
|
|
|
10
10
|
import { dirname } from "node:path";
|
|
11
11
|
import type { Decision, Requirement, GateRow, GateId, GateScope, GateStatus, GateVerdict } from "./types.js";
|
|
12
12
|
import { GSDError, GSD_STALE_STATE } from "./errors.js";
|
|
13
|
-
import { logError } from "./workflow-logger.js";
|
|
13
|
+
import { logError, logWarning } from "./workflow-logger.js";
|
|
14
14
|
|
|
15
15
|
const _require = createRequire(import.meta.url);
|
|
16
16
|
|
|
@@ -787,11 +787,11 @@ export function openDatabase(path: string): boolean {
|
|
|
787
787
|
initSchema(adapter, fileBacked);
|
|
788
788
|
process.stderr.write("gsd-db: recovered corrupt database via VACUUM\n");
|
|
789
789
|
} catch (retryErr) {
|
|
790
|
-
try { adapter.close(); } catch {
|
|
790
|
+
try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
|
|
791
791
|
throw retryErr;
|
|
792
792
|
}
|
|
793
793
|
} else {
|
|
794
|
-
try { adapter.close(); } catch {
|
|
794
|
+
try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
|
|
795
795
|
throw err;
|
|
796
796
|
}
|
|
797
797
|
}
|
|
@@ -802,7 +802,7 @@ export function openDatabase(path: string): boolean {
|
|
|
802
802
|
|
|
803
803
|
if (!_exitHandlerRegistered) {
|
|
804
804
|
_exitHandlerRegistered = true;
|
|
805
|
-
process.on("exit", () => { try { closeDatabase(); } catch {} });
|
|
805
|
+
process.on("exit", () => { try { closeDatabase(); } catch (e) { logWarning("db", `exit handler close failed: ${(e as Error).message}`); } });
|
|
806
806
|
}
|
|
807
807
|
|
|
808
808
|
return true;
|
|
@@ -812,16 +812,14 @@ export function closeDatabase(): void {
|
|
|
812
812
|
if (currentDb) {
|
|
813
813
|
try {
|
|
814
814
|
currentDb.exec('PRAGMA wal_checkpoint(TRUNCATE)');
|
|
815
|
-
} catch {
|
|
815
|
+
} catch (e) { logWarning("db", `WAL checkpoint failed: ${(e as Error).message}`); }
|
|
816
816
|
try {
|
|
817
817
|
// Incremental vacuum to reclaim space without blocking
|
|
818
818
|
currentDb.exec('PRAGMA incremental_vacuum(64)');
|
|
819
|
-
} catch {
|
|
819
|
+
} catch (e) { logWarning("db", `incremental vacuum failed: ${(e as Error).message}`); }
|
|
820
820
|
try {
|
|
821
821
|
currentDb.close();
|
|
822
|
-
} catch {
|
|
823
|
-
// swallow close errors
|
|
824
|
-
}
|
|
822
|
+
} catch (e) { logWarning("db", `database close failed: ${(e as Error).message}`); }
|
|
825
823
|
currentDb = null;
|
|
826
824
|
currentPath = null;
|
|
827
825
|
currentPid = 0;
|
|
@@ -833,7 +831,7 @@ export function vacuumDatabase(): void {
|
|
|
833
831
|
if (!currentDb) return;
|
|
834
832
|
try {
|
|
835
833
|
currentDb.exec('VACUUM');
|
|
836
|
-
} catch {
|
|
834
|
+
} catch (e) { logWarning("db", `VACUUM failed: ${(e as Error).message}`); }
|
|
837
835
|
}
|
|
838
836
|
|
|
839
837
|
let _txDepth = 0;
|
|
@@ -1038,7 +1036,7 @@ export function upsertRequirement(r: Requirement): void {
|
|
|
1038
1036
|
|
|
1039
1037
|
export function clearArtifacts(): void {
|
|
1040
1038
|
if (!currentDb) return;
|
|
1041
|
-
try { currentDb.exec("DELETE FROM artifacts"); } catch {
|
|
1039
|
+
try { currentDb.exec("DELETE FROM artifacts"); } catch (e) { logWarning("db", `clearArtifacts failed: ${(e as Error).message}`); }
|
|
1042
1040
|
}
|
|
1043
1041
|
|
|
1044
1042
|
export function insertArtifact(a: {
|
|
@@ -1801,7 +1799,7 @@ export function reconcileWorktreeDb(
|
|
|
1801
1799
|
// ATTACHing a WAL-mode DB to itself corrupts the WAL (#2823).
|
|
1802
1800
|
try {
|
|
1803
1801
|
if (realpathSync(mainDbPath) === realpathSync(worktreeDbPath)) return zero;
|
|
1804
|
-
} catch {
|
|
1802
|
+
} catch (e) { logWarning("db", `realpathSync failed: ${(e as Error).message}`); }
|
|
1805
1803
|
// Sanitize path: reject any characters that could break ATTACH syntax.
|
|
1806
1804
|
// ATTACH DATABASE doesn't support parameterized paths in all providers,
|
|
1807
1805
|
// so we use strict allowlist validation instead.
|
|
@@ -1938,12 +1936,12 @@ export function reconcileWorktreeDb(
|
|
|
1938
1936
|
|
|
1939
1937
|
adapter.exec("COMMIT");
|
|
1940
1938
|
} catch (txErr) {
|
|
1941
|
-
try { adapter.exec("ROLLBACK"); } catch {
|
|
1939
|
+
try { adapter.exec("ROLLBACK"); } catch (e) { logWarning("db", `rollback failed: ${(e as Error).message}`); }
|
|
1942
1940
|
throw txErr;
|
|
1943
1941
|
}
|
|
1944
1942
|
return { ...merged, conflicts };
|
|
1945
1943
|
} finally {
|
|
1946
|
-
try { adapter.exec("DETACH DATABASE wt"); } catch {
|
|
1944
|
+
try { adapter.exec("DETACH DATABASE wt"); } catch (e) { logWarning("db", `detach worktree DB failed: ${(e as Error).message}`); }
|
|
1947
1945
|
}
|
|
1948
1946
|
} catch (err) {
|
|
1949
1947
|
logError("db", "worktree DB reconciliation failed", { error: (err as Error).message });
|
|
@@ -52,6 +52,7 @@ export {
|
|
|
52
52
|
buildExistingMilestonesContext,
|
|
53
53
|
} from "./guided-flow-queue.js";
|
|
54
54
|
import { getErrorMessage } from "./error-utils.js";
|
|
55
|
+
import { logWarning } from "./workflow-logger.js";
|
|
55
56
|
|
|
56
57
|
// ─── ID Generation with Reservation ─────────────────────────────────────────
|
|
57
58
|
|
|
@@ -180,7 +181,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
|
|
|
180
181
|
);
|
|
181
182
|
}
|
|
182
183
|
}
|
|
183
|
-
} catch {
|
|
184
|
+
} catch (e) { logWarning("guided", `PROJECT.md parsing failed: ${(e as Error).message}`); }
|
|
184
185
|
}
|
|
185
186
|
|
|
186
187
|
// Gate 4: Discussion manifest process verification (multi-milestone only)
|
|
@@ -212,7 +213,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
|
|
|
212
213
|
);
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
|
-
} catch {
|
|
216
|
+
} catch (e) { logWarning("guided", `discussion manifest verification failed: ${(e as Error).message}`); }
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
// Draft promotion cleanup: if a CONTEXT-DRAFT.md exists alongside the new
|
|
@@ -220,16 +221,16 @@ export function checkAutoStartAfterDiscuss(): boolean {
|
|
|
220
221
|
try {
|
|
221
222
|
const draftFile = resolveMilestoneFile(basePath, milestoneId, "CONTEXT-DRAFT");
|
|
222
223
|
if (draftFile) unlinkSync(draftFile);
|
|
223
|
-
} catch {
|
|
224
|
+
} catch (e) { logWarning("guided", `CONTEXT-DRAFT.md unlink failed: ${(e as Error).message}`); }
|
|
224
225
|
|
|
225
226
|
// Cleanup: remove discussion manifest after auto-start (only needed during discussion)
|
|
226
|
-
try { unlinkSync(manifestPath); } catch {
|
|
227
|
+
try { unlinkSync(manifestPath); } catch (e) { logWarning("guided", `manifest unlink failed: ${(e as Error).message}`); }
|
|
227
228
|
|
|
228
229
|
pendingAutoStartMap.delete(basePath);
|
|
229
230
|
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "info");
|
|
230
231
|
startAuto(ctx, pi, basePath, false, { step }).catch((err) => {
|
|
231
232
|
ctx.ui.notify(`Auto-start failed: ${getErrorMessage(err)}`, "error");
|
|
232
|
-
|
|
233
|
+
logWarning("guided", `auto start error: ${getErrorMessage(err)}`);
|
|
233
234
|
debugLog("auto-start-failed", { error: getErrorMessage(err) });
|
|
234
235
|
});
|
|
235
236
|
return true;
|
|
@@ -895,8 +896,8 @@ function selfHealRuntimeRecords(basePath: string, ctx: ExtensionContext): { clea
|
|
|
895
896
|
ctx.ui.notify(`Self-heal: cleared ${cleared} stale runtime record(s) from a previous session.`, "info");
|
|
896
897
|
}
|
|
897
898
|
return { cleared };
|
|
898
|
-
} catch {
|
|
899
|
-
|
|
899
|
+
} catch (e) {
|
|
900
|
+
logWarning("guided", `self-heal stale runtime records failed: ${(e as Error).message}`);
|
|
900
901
|
return { cleared: 0 };
|
|
901
902
|
}
|
|
902
903
|
}
|
|
@@ -1142,7 +1143,7 @@ export async function showSmartEntry(
|
|
|
1142
1143
|
);
|
|
1143
1144
|
return;
|
|
1144
1145
|
}
|
|
1145
|
-
} catch {
|
|
1146
|
+
} catch (e) { logWarning("guided", `directory read failed: ${(e as Error).message}`); }
|
|
1146
1147
|
}
|
|
1147
1148
|
}
|
|
1148
1149
|
|
|
@@ -16,6 +16,7 @@ import { gsdRoot } from "./paths.js";
|
|
|
16
16
|
import { assertSafeDirectory } from "./validate-directory.js";
|
|
17
17
|
import type { ProjectDetection, ProjectSignals } from "./detection.js";
|
|
18
18
|
import { runSkillInstallStep } from "./skill-catalog.js";
|
|
19
|
+
import { generateCodebaseMap, writeCodebaseMap } from "./codebase-generator.js";
|
|
19
20
|
|
|
20
21
|
// ─── Types ──────────────────────────────────────────────────────────────────────
|
|
21
22
|
|
|
@@ -238,6 +239,17 @@ export async function showProjectInit(
|
|
|
238
239
|
ensureGitignore(basePath);
|
|
239
240
|
untrackRuntimeFiles(basePath);
|
|
240
241
|
|
|
242
|
+
// Auto-generate codebase map for instant agent orientation
|
|
243
|
+
try {
|
|
244
|
+
const result = generateCodebaseMap(basePath);
|
|
245
|
+
if (result.fileCount > 0) {
|
|
246
|
+
writeCodebaseMap(basePath, result.content);
|
|
247
|
+
ctx.ui.notify(`Codebase map generated: ${result.fileCount} files`, "info");
|
|
248
|
+
}
|
|
249
|
+
} catch {
|
|
250
|
+
// Non-fatal — codebase map generation failure should never block project init
|
|
251
|
+
}
|
|
252
|
+
|
|
241
253
|
ctx.ui.notify("GSD initialized. Starting your first milestone...", "info");
|
|
242
254
|
|
|
243
255
|
return { completed: true, bootstrapped: true };
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// parseRoadmap(), parsePlan(), parseSummary() in files.ts.
|
|
10
10
|
|
|
11
11
|
import { readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
12
|
+
import { logWarning } from "./workflow-logger.js";
|
|
12
13
|
import { isClosedStatus } from "./status-guards.js";
|
|
13
14
|
import { join, relative } from "node:path";
|
|
14
15
|
import { createRequire } from "node:module";
|
|
@@ -93,9 +94,7 @@ function loadArtifactContent(
|
|
|
93
94
|
try {
|
|
94
95
|
content = readFileSync(absPath, "utf-8");
|
|
95
96
|
} catch {
|
|
96
|
-
|
|
97
|
-
`markdown-renderer: cannot read file from disk: ${absPath}\n`,
|
|
98
|
-
);
|
|
97
|
+
logWarning("renderer", `cannot read file from disk: ${absPath}`);
|
|
99
98
|
return null;
|
|
100
99
|
}
|
|
101
100
|
|
|
@@ -111,9 +110,7 @@ function loadArtifactContent(
|
|
|
111
110
|
});
|
|
112
111
|
} catch {
|
|
113
112
|
// Non-fatal: we have the content, DB storage is best-effort
|
|
114
|
-
|
|
115
|
-
`markdown-renderer: warning — failed to store disk fallback in DB: ${artifactPath}\n`,
|
|
116
|
-
);
|
|
113
|
+
logWarning("renderer", `failed to store disk fallback in DB: ${artifactPath}`);
|
|
117
114
|
}
|
|
118
115
|
|
|
119
116
|
return content;
|
|
@@ -146,9 +143,7 @@ async function writeAndStore(
|
|
|
146
143
|
});
|
|
147
144
|
} catch {
|
|
148
145
|
// Non-fatal: file is on disk, DB is best-effort
|
|
149
|
-
|
|
150
|
-
`markdown-renderer: warning — failed to update artifact in DB: ${artifactPath}\n`,
|
|
151
|
-
);
|
|
146
|
+
logWarning("renderer", `failed to update artifact in DB: ${artifactPath}`);
|
|
152
147
|
}
|
|
153
148
|
|
|
154
149
|
invalidateCaches();
|
|
@@ -806,7 +801,8 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
|
|
|
806
801
|
try {
|
|
807
802
|
const m = _require("./parsers-legacy.ts");
|
|
808
803
|
parseRoadmap = m.parseRoadmap; parsePlan = m.parsePlan;
|
|
809
|
-
} catch {
|
|
804
|
+
} catch (e) {
|
|
805
|
+
logWarning("renderer", `parsers-legacy.ts require failed, falling back to .js: ${(e as Error).message}`);
|
|
810
806
|
const m = _require("./parsers-legacy.js");
|
|
811
807
|
parseRoadmap = m.parseRoadmap; parsePlan = m.parsePlan;
|
|
812
808
|
}
|
|
@@ -841,8 +837,8 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
|
|
|
841
837
|
});
|
|
842
838
|
}
|
|
843
839
|
}
|
|
844
|
-
} catch {
|
|
845
|
-
|
|
840
|
+
} catch (e) {
|
|
841
|
+
logWarning("renderer", `roadmap parse failed: ${(e as Error).message}`);
|
|
846
842
|
}
|
|
847
843
|
}
|
|
848
844
|
|
|
@@ -874,8 +870,8 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
|
|
|
874
870
|
});
|
|
875
871
|
}
|
|
876
872
|
}
|
|
877
|
-
} catch {
|
|
878
|
-
|
|
873
|
+
} catch (e) {
|
|
874
|
+
logWarning("renderer", `plan parse failed: ${(e as Error).message}`);
|
|
879
875
|
}
|
|
880
876
|
}
|
|
881
877
|
|
|
@@ -1025,9 +1021,7 @@ export async function repairStaleRenders(basePath: string): Promise<number> {
|
|
|
1025
1021
|
}
|
|
1026
1022
|
}
|
|
1027
1023
|
} catch (err) {
|
|
1028
|
-
|
|
1029
|
-
`markdown-renderer: repair failed for ${entry.path}: ${(err as Error).message}\n`,
|
|
1030
|
-
);
|
|
1024
|
+
logWarning("renderer", `repair failed for ${entry.path}: ${(err as Error).message}`);
|
|
1031
1025
|
}
|
|
1032
1026
|
}
|
|
1033
1027
|
|
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
import { findMilestoneIds } from './guided-flow.js';
|
|
32
32
|
import { parseRoadmap, parsePlan } from './parsers-legacy.js';
|
|
33
33
|
import { parseContextDependsOn } from './files.js';
|
|
34
|
+
import { logWarning } from './workflow-logger.js';
|
|
34
35
|
|
|
35
36
|
// ─── DECISIONS.md Parser ───────────────────────────────────────────────────
|
|
36
37
|
|
|
@@ -712,25 +713,25 @@ export function migrateFromMarkdown(gsdDir: string): {
|
|
|
712
713
|
try {
|
|
713
714
|
decisions = importDecisions(gsdDir);
|
|
714
715
|
} catch (err) {
|
|
715
|
-
|
|
716
|
+
logWarning("migration", `skipping decisions import: ${(err as Error).message}`);
|
|
716
717
|
}
|
|
717
718
|
|
|
718
719
|
try {
|
|
719
720
|
requirements = importRequirements(gsdDir);
|
|
720
721
|
} catch (err) {
|
|
721
|
-
|
|
722
|
+
logWarning("migration", `skipping requirements import: ${(err as Error).message}`);
|
|
722
723
|
}
|
|
723
724
|
|
|
724
725
|
try {
|
|
725
726
|
artifacts = importHierarchyArtifacts(gsdDir);
|
|
726
727
|
} catch (err) {
|
|
727
|
-
|
|
728
|
+
logWarning("migration", `skipping artifacts import: ${(err as Error).message}`);
|
|
728
729
|
}
|
|
729
730
|
|
|
730
731
|
try {
|
|
731
732
|
hierarchy = migrateHierarchyToDb(gsdDir);
|
|
732
733
|
} catch (err) {
|
|
733
|
-
|
|
734
|
+
logWarning("migration", `skipping hierarchy migration: ${(err as Error).message}`);
|
|
734
735
|
}
|
|
735
736
|
});
|
|
736
737
|
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
import { invalidateAllCaches } from "./cache.js";
|
|
22
22
|
import { loadQueueOrder, saveQueueOrder } from "./queue-order.js";
|
|
23
23
|
import { isDbAvailable, updateMilestoneStatus } from "./gsd-db.js";
|
|
24
|
+
import { logWarning } from "./workflow-logger.js";
|
|
24
25
|
|
|
25
26
|
// ─── Park ──────────────────────────────────────────────────────────────────
|
|
26
27
|
|
|
@@ -58,7 +59,7 @@ export function parkMilestone(basePath: string, milestoneId: string, reason: str
|
|
|
58
59
|
try {
|
|
59
60
|
updateMilestoneStatus(milestoneId, "parked");
|
|
60
61
|
} catch (err) {
|
|
61
|
-
|
|
62
|
+
logWarning("engine", `parkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}`);
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
invalidateAllCaches();
|
|
@@ -84,7 +85,7 @@ export function unparkMilestone(basePath: string, milestoneId: string): boolean
|
|
|
84
85
|
try {
|
|
85
86
|
updateMilestoneStatus(milestoneId, "active");
|
|
86
87
|
} catch (err) {
|
|
87
|
-
|
|
88
|
+
logWarning("engine", `unparkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}`);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
invalidateAllCaches();
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { randomInt } from "node:crypto";
|
|
9
|
+
import { logWarning } from "./workflow-logger.js";
|
|
9
10
|
import { readdirSync, existsSync } from "node:fs";
|
|
10
11
|
import { milestonesDir } from "./paths.js";
|
|
11
12
|
import { loadQueueOrder, sortByQueueOrder } from "./queue-order.js";
|
|
@@ -128,7 +129,7 @@ export function findMilestoneIds(basePath: string): string[] {
|
|
|
128
129
|
} catch (err) {
|
|
129
130
|
// Log why milestone scanning failed — silent [] here causes infinite loops (#456)
|
|
130
131
|
if (existsSync(dir)) {
|
|
131
|
-
|
|
132
|
+
logWarning("engine", `findMilestoneIds: .gsd/milestones/ exists but readdirSync failed — ${getErrorMessage(err)}`);
|
|
132
133
|
}
|
|
133
134
|
return [];
|
|
134
135
|
}
|