gsd-pi 2.64.0 → 2.65.0-dev.16e10d7
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/headless.js +3 -1
- package/dist/mcp-server.js +6 -2
- package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +22 -7
- package/dist/resources/extensions/bg-shell/process-manager.js +6 -1
- package/dist/resources/extensions/browser-tools/capture.js +20 -1
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +13 -2
- package/dist/resources/extensions/gsd/auto-dashboard.js +5 -5
- package/dist/resources/extensions/gsd/auto-dispatch.js +94 -8
- package/dist/resources/extensions/gsd/auto-model-selection.js +7 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +115 -7
- package/dist/resources/extensions/gsd/auto-prompts.js +24 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +12 -8
- package/dist/resources/extensions/gsd/auto-start.js +35 -1
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +10 -0
- package/dist/resources/extensions/gsd/auto-verification.js +138 -1
- package/dist/resources/extensions/gsd/auto-worktree.js +29 -7
- package/dist/resources/extensions/gsd/auto.js +7 -2
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +17 -4
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +34 -13
- package/dist/resources/extensions/gsd/bootstrap/notify-interceptor.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +12 -1
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +16 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +20 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +7 -1
- package/dist/resources/extensions/gsd/commands/context.js +8 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +21 -0
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +104 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +5 -0
- package/dist/resources/extensions/gsd/commands-extensions.js +1 -1
- package/dist/resources/extensions/gsd/config-overlay.js +312 -0
- package/dist/resources/extensions/gsd/detection.js +1 -1
- package/dist/resources/extensions/gsd/dispatch-guard.js +2 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/dist/resources/extensions/gsd/doctor.js +2 -1
- package/dist/resources/extensions/gsd/gitignore.js +1 -0
- package/dist/resources/extensions/gsd/gsd-db.js +11 -2
- package/dist/resources/extensions/gsd/guided-flow.js +220 -29
- package/dist/resources/extensions/gsd/md-importer.js +14 -7
- package/dist/resources/extensions/gsd/notification-overlay.js +256 -0
- package/dist/resources/extensions/gsd/notification-store.js +273 -0
- package/dist/resources/extensions/gsd/notification-widget.js +56 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +17 -11
- package/dist/resources/extensions/gsd/post-execution-checks.js +407 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +471 -0
- package/dist/resources/extensions/gsd/preferences-types.js +7 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +78 -1
- package/dist/resources/extensions/gsd/preferences.js +13 -2
- package/dist/resources/extensions/gsd/preparation.js +1092 -0
- package/dist/resources/extensions/gsd/prompt-validation.js +67 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +4 -1
- package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/dist/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/dist/resources/extensions/gsd/quick.js +19 -15
- package/dist/resources/extensions/gsd/reactive-graph.js +12 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +24 -5
- package/dist/resources/extensions/gsd/safety/content-validator.js +3 -3
- package/dist/resources/extensions/gsd/session-lock.js +23 -1
- package/dist/resources/extensions/gsd/state.js +100 -12
- package/dist/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +12 -3
- package/dist/resources/extensions/gsd/tools/complete-task.js +16 -4
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -5
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +5 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +119 -0
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +30 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +18 -0
- package/dist/resources/extensions/gsd/triage-resolution.js +25 -9
- package/dist/resources/extensions/gsd/verification-evidence.js +18 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +8 -0
- package/dist/resources/extensions/gsd/workflow-projections.js +4 -7
- package/dist/resources/extensions/gsd/workflow-reconcile.js +2 -4
- package/dist/resources/extensions/gsd/workflow-templates.js +11 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +5 -2
- package/dist/resources/extensions/gsd/worktree.js +9 -0
- package/dist/resources/extensions/shared/interview-ui.js +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -14
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- package/dist/web/standalone/.next/routes-manifest.json +6 -0
- 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/notifications/route.js +3 -0
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -0
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -0
- 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 +15 -14
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/chunks/7471.js +3 -3
- package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-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/Z3TgDP0c7kG9j8CVQVGcl/_buildManifest.js +1 -0
- package/dist/web/standalone/.next/static/chunks/6502.8874bcae249c02e1.js +9 -0
- package/dist/web/standalone/.next/static/chunks/app/_global-error/page-8805a20e15762c3c.js +1 -0
- 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/api/boot/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/notifications/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-8805a20e15762c3c.js +1 -0
- 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/app-error-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-8805a20e15762c3c.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/.next/static/chunks/next/dist/client/components/builtin/not-found-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-8805a20e15762c3c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-9fed74684e1c5bb1.js} +1 -1
- 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-agent-core/dist/agent-loop.js +26 -9
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +100 -4
- package/packages/pi-agent-core/src/agent-loop.ts +43 -12
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +38 -0
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +11 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +4 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +30 -19
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +51 -0
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +9 -9
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +10 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +2 -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 +28 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +15 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +18 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +6 -0
- 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 +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +64 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +10 -0
- package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +42 -0
- package/packages/pi-coding-agent/src/core/resource-loader.ts +5 -1
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +80 -0
- package/packages/pi-coding-agent/src/core/retry-handler.ts +37 -25
- package/packages/pi-coding-agent/src/core/sdk.ts +9 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +10 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +29 -4
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +27 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +16 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +38 -0
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +66 -0
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -0
- package/packages/pi-tui/dist/components/image.d.ts +2 -0
- package/packages/pi-tui/dist/components/image.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/image.js +4 -0
- package/packages/pi-tui/dist/components/image.js.map +1 -1
- package/packages/pi-tui/dist/components/image.test.d.ts +6 -0
- package/packages/pi-tui/dist/components/image.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/components/image.test.js +32 -0
- package/packages/pi-tui/dist/components/image.test.js.map +1 -0
- package/packages/pi-tui/dist/components/loader.d.ts +4 -2
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +27 -9
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/text.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/text.js +2 -0
- package/packages/pi-tui/dist/components/text.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +12 -1
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +4 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +35 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +82 -0
- package/packages/pi-tui/src/components/image.test.ts +36 -0
- package/packages/pi-tui/src/components/image.ts +5 -0
- package/packages/pi-tui/src/components/loader.ts +27 -10
- package/packages/pi-tui/src/components/text.ts +1 -0
- package/packages/pi-tui/src/overlay-layout.ts +13 -1
- package/packages/pi-tui/src/tui.ts +34 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +19 -7
- package/src/resources/extensions/bg-shell/process-manager.ts +8 -2
- package/src/resources/extensions/browser-tools/capture.ts +19 -1
- package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +93 -0
- package/src/resources/extensions/gsd/auto/run-unit.ts +12 -2
- package/src/resources/extensions/gsd/auto-dashboard.ts +5 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +105 -8
- package/src/resources/extensions/gsd/auto-model-selection.ts +7 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +138 -6
- package/src/resources/extensions/gsd/auto-prompts.ts +31 -0
- package/src/resources/extensions/gsd/auto-recovery.ts +10 -8
- package/src/resources/extensions/gsd/auto-start.ts +38 -0
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +10 -0
- package/src/resources/extensions/gsd/auto-verification.ts +190 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +28 -7
- package/src/resources/extensions/gsd/auto.ts +6 -1
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +16 -4
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +35 -13
- package/src/resources/extensions/gsd/bootstrap/notify-interceptor.ts +34 -0
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +5 -4
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +4 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +12 -1
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +20 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +28 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +7 -1
- package/src/resources/extensions/gsd/commands/context.ts +7 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +24 -0
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +140 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -0
- package/src/resources/extensions/gsd/commands-extensions.ts +1 -1
- package/src/resources/extensions/gsd/config-overlay.ts +331 -0
- package/src/resources/extensions/gsd/detection.ts +1 -1
- package/src/resources/extensions/gsd/dispatch-guard.ts +2 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -0
- package/src/resources/extensions/gsd/doctor.ts +2 -1
- package/src/resources/extensions/gsd/gitignore.ts +1 -0
- package/src/resources/extensions/gsd/gsd-db.ts +13 -2
- package/src/resources/extensions/gsd/guided-flow.ts +254 -30
- package/src/resources/extensions/gsd/md-importer.ts +13 -6
- package/src/resources/extensions/gsd/notification-overlay.ts +295 -0
- package/src/resources/extensions/gsd/notification-store.ts +293 -0
- package/src/resources/extensions/gsd/notification-widget.ts +68 -0
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +19 -11
- package/src/resources/extensions/gsd/post-execution-checks.ts +539 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +581 -0
- package/src/resources/extensions/gsd/preferences-types.ts +53 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +78 -1
- package/src/resources/extensions/gsd/preferences.ts +13 -2
- package/src/resources/extensions/gsd/preparation.ts +1419 -0
- package/src/resources/extensions/gsd/prompt-validation.ts +88 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +3 -3
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-prepared.md +424 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +4 -1
- package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -4
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +23 -0
- package/src/resources/extensions/gsd/prompts/rethink.md +2 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +56 -23
- package/src/resources/extensions/gsd/quick.ts +20 -15
- package/src/resources/extensions/gsd/reactive-graph.ts +18 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +21 -5
- package/src/resources/extensions/gsd/safety/content-validator.ts +3 -3
- package/src/resources/extensions/gsd/session-lock.ts +17 -1
- package/src/resources/extensions/gsd/state.ts +101 -11
- package/src/resources/extensions/gsd/templates/context-enhanced.md +138 -0
- package/src/resources/extensions/gsd/tests/adversarial-review-fixes.test.ts +223 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +33 -2
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/complete-slice-string-coercion.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/defer-milestone-stamp.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/discuss-incremental-persistence.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +526 -0
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/guided-flow-state-rebuild.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +28 -30
- package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
- package/src/resources/extensions/gsd/tests/integration-prepared-discussion.test.ts +525 -0
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +282 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +813 -0
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +1197 -0
- package/src/resources/extensions/gsd/tests/pre-execution-fail-closed.test.ts +266 -0
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +457 -0
- package/src/resources/extensions/gsd/tests/preparation.test.ts +1211 -0
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/prompt-builder.test.ts +669 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +7 -4
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/reactive-graph.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/skipped-validation-completion.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +147 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +13 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +6 -7
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/symlink-extension-discovery.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +16 -17
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +13 -9
- package/src/resources/extensions/gsd/tests/worktree.test.ts +26 -9
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +13 -3
- package/src/resources/extensions/gsd/tools/complete-task.ts +16 -4
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +11 -9
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +5 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +152 -0
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +27 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +17 -0
- package/src/resources/extensions/gsd/triage-resolution.ts +29 -10
- package/src/resources/extensions/gsd/types.ts +4 -0
- package/src/resources/extensions/gsd/verification-evidence.ts +68 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +13 -0
- package/src/resources/extensions/gsd/workflow-projections.ts +4 -6
- package/src/resources/extensions/gsd/workflow-reconcile.ts +2 -3
- package/src/resources/extensions/gsd/workflow-templates.ts +11 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +4 -2
- package/src/resources/extensions/gsd/worktree.ts +10 -0
- package/src/resources/extensions/shared/interview-ui.ts +1 -1
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +8 -10
- package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
- package/dist/web/standalone/.next/static/chunks/app/_global-error/page-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/boot/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/captures/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/experimental/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/files/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/git/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/history/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/projects/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/steer/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/undo/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/update/route-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-c4cc189e7b117ea2.js +0 -1
- 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/app-error-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c4cc189e7b117ea2.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/chunks/next/dist/client/components/builtin/not-found-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c4cc189e7b117ea2.js +0 -1
- package/dist/web/standalone/.next/static/eebXKteM9EaWyseHKTjqp/_buildManifest.js +0 -1
- /package/dist/web/standalone/.next/static/{eebXKteM9EaWyseHKTjqp → Z3TgDP0c7kG9j8CVQVGcl}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* enhanced-verification-integration.test.ts — Integration tests for enhanced verification.
|
|
3
|
+
*
|
|
4
|
+
* Exercises all 7 enhanced verification checks against GSD-2's actual source files.
|
|
5
|
+
* This proves:
|
|
6
|
+
* - R012: No false positives on production code
|
|
7
|
+
* - R013: Speed targets met (<2000ms pre-execution, <1000ms post-execution per task)
|
|
8
|
+
*
|
|
9
|
+
* The test constructs realistic TaskRow fixtures that reference real GSD source files,
|
|
10
|
+
* then runs both pre-execution and post-execution checks against them.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { describe, test } from "node:test";
|
|
14
|
+
import assert from "node:assert/strict";
|
|
15
|
+
import { existsSync } from "node:fs";
|
|
16
|
+
import { join, dirname } from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
runPreExecutionChecks,
|
|
21
|
+
type PreExecutionResult,
|
|
22
|
+
} from "../pre-execution-checks.ts";
|
|
23
|
+
import {
|
|
24
|
+
runPostExecutionChecks,
|
|
25
|
+
type PostExecutionResult,
|
|
26
|
+
} from "../post-execution-checks.ts";
|
|
27
|
+
import type { TaskRow } from "../gsd-db.ts";
|
|
28
|
+
|
|
29
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
32
|
+
const __dirname = dirname(__filename);
|
|
33
|
+
|
|
34
|
+
// Path to the GSD extension source directory (relative to test file)
|
|
35
|
+
const GSD_SRC_DIR = join(__dirname, "..");
|
|
36
|
+
|
|
37
|
+
// Speed targets from R013
|
|
38
|
+
const PRE_EXECUTION_TIMEOUT_MS = 2000;
|
|
39
|
+
const POST_EXECUTION_TIMEOUT_MS = 1000;
|
|
40
|
+
|
|
41
|
+
// ─── Test Fixtures ───────────────────────────────────────────────────────────
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Create a minimal TaskRow for testing.
|
|
45
|
+
*/
|
|
46
|
+
function createTask(overrides: Partial<TaskRow> = {}): TaskRow {
|
|
47
|
+
return {
|
|
48
|
+
milestone_id: "M001",
|
|
49
|
+
slice_id: "S01",
|
|
50
|
+
id: overrides.id ?? "T01",
|
|
51
|
+
title: overrides.title ?? "Test Task",
|
|
52
|
+
status: overrides.status ?? "pending",
|
|
53
|
+
one_liner: "",
|
|
54
|
+
narrative: "",
|
|
55
|
+
verification_result: "",
|
|
56
|
+
duration: "",
|
|
57
|
+
completed_at: overrides.status === "complete" ? new Date().toISOString() : null,
|
|
58
|
+
blocker_discovered: false,
|
|
59
|
+
deviations: "",
|
|
60
|
+
known_issues: "",
|
|
61
|
+
key_files: overrides.key_files ?? [],
|
|
62
|
+
key_decisions: [],
|
|
63
|
+
full_summary_md: "",
|
|
64
|
+
description: overrides.description ?? "",
|
|
65
|
+
estimate: "",
|
|
66
|
+
files: overrides.files ?? [],
|
|
67
|
+
verify: "",
|
|
68
|
+
inputs: overrides.inputs ?? [],
|
|
69
|
+
expected_output: overrides.expected_output ?? [],
|
|
70
|
+
observability_impact: "",
|
|
71
|
+
full_plan_md: "",
|
|
72
|
+
sequence: overrides.sequence ?? 0,
|
|
73
|
+
...overrides,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ─── Real GSD Source Files for Testing ───────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
// These are actual GSD extension source files that exist in the codebase
|
|
80
|
+
const REAL_GSD_FILES = [
|
|
81
|
+
"gsd-db.ts",
|
|
82
|
+
"auto-verification.ts",
|
|
83
|
+
"pre-execution-checks.ts",
|
|
84
|
+
"post-execution-checks.ts",
|
|
85
|
+
"state.ts",
|
|
86
|
+
"errors.ts",
|
|
87
|
+
"types.ts",
|
|
88
|
+
"cache.ts",
|
|
89
|
+
"atomic-write.ts",
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
// Verify the test fixture files actually exist
|
|
93
|
+
function verifyTestFixturesExist(): void {
|
|
94
|
+
for (const file of REAL_GSD_FILES) {
|
|
95
|
+
const fullPath = join(GSD_SRC_DIR, file);
|
|
96
|
+
if (!existsSync(fullPath)) {
|
|
97
|
+
throw new Error(`Test fixture file does not exist: ${fullPath}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ─── Integration Tests ───────────────────────────────────────────────────────
|
|
103
|
+
|
|
104
|
+
describe("Enhanced Verification Integration Tests", () => {
|
|
105
|
+
// Verify fixtures before running tests
|
|
106
|
+
test("test fixture files exist", () => {
|
|
107
|
+
verifyTestFixturesExist();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe("Pre-Execution Checks on Real GSD Code", () => {
|
|
111
|
+
test("runs pre-execution checks on realistic tasks referencing real files", async () => {
|
|
112
|
+
// Simulate tasks that reference real GSD source files
|
|
113
|
+
const tasks: TaskRow[] = [
|
|
114
|
+
createTask({
|
|
115
|
+
id: "T01",
|
|
116
|
+
sequence: 0,
|
|
117
|
+
title: "Add validation to gsd-db",
|
|
118
|
+
description: `
|
|
119
|
+
## Steps
|
|
120
|
+
1. Update src/resources/extensions/gsd/gsd-db.ts to add validation
|
|
121
|
+
2. Read from src/resources/extensions/gsd/types.ts for type definitions
|
|
122
|
+
3. Update src/resources/extensions/gsd/errors.ts with new error types
|
|
123
|
+
4. Run tests to verify changes
|
|
124
|
+
`.trim(),
|
|
125
|
+
files: REAL_GSD_FILES.slice(0, 4).map((f) => join(GSD_SRC_DIR, f)),
|
|
126
|
+
inputs: [
|
|
127
|
+
join(GSD_SRC_DIR, "types.ts"),
|
|
128
|
+
join(GSD_SRC_DIR, "errors.ts"),
|
|
129
|
+
],
|
|
130
|
+
expected_output: [
|
|
131
|
+
join(GSD_SRC_DIR, "gsd-db.ts"),
|
|
132
|
+
],
|
|
133
|
+
}),
|
|
134
|
+
];
|
|
135
|
+
|
|
136
|
+
const start = performance.now();
|
|
137
|
+
const result = await runPreExecutionChecks(tasks, GSD_SRC_DIR);
|
|
138
|
+
const duration = performance.now() - start;
|
|
139
|
+
|
|
140
|
+
// R012: No blocking failures (false positives) on production code
|
|
141
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
142
|
+
assert.equal(
|
|
143
|
+
blockingFailures.length,
|
|
144
|
+
0,
|
|
145
|
+
`Expected zero blocking failures, got: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
// Overall status should not be fail
|
|
149
|
+
assert.notEqual(result.status, "fail", "Pre-execution checks should not fail on real GSD code");
|
|
150
|
+
|
|
151
|
+
// R013: Speed target met
|
|
152
|
+
assert.ok(
|
|
153
|
+
duration < PRE_EXECUTION_TIMEOUT_MS,
|
|
154
|
+
`Pre-execution checks took ${duration.toFixed(0)}ms, expected <${PRE_EXECUTION_TIMEOUT_MS}ms`
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test("handles task with code block references to real packages", async () => {
|
|
159
|
+
// Task description with realistic code blocks using actual Node.js built-ins
|
|
160
|
+
const tasks: TaskRow[] = [
|
|
161
|
+
createTask({
|
|
162
|
+
id: "T01",
|
|
163
|
+
sequence: 0,
|
|
164
|
+
title: "Implement file watcher",
|
|
165
|
+
description: `
|
|
166
|
+
## Implementation
|
|
167
|
+
|
|
168
|
+
\`\`\`typescript
|
|
169
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
170
|
+
import { join, dirname } from "node:path";
|
|
171
|
+
import { existsSync } from "node:fs";
|
|
172
|
+
|
|
173
|
+
// Use existing GSD types
|
|
174
|
+
import type { TaskRow } from "./gsd-db.ts";
|
|
175
|
+
\`\`\`
|
|
176
|
+
|
|
177
|
+
Update the file watcher to use these imports.
|
|
178
|
+
`.trim(),
|
|
179
|
+
files: [join(GSD_SRC_DIR, "auto-verification.ts")],
|
|
180
|
+
}),
|
|
181
|
+
];
|
|
182
|
+
|
|
183
|
+
const start = performance.now();
|
|
184
|
+
const result = await runPreExecutionChecks(tasks, GSD_SRC_DIR);
|
|
185
|
+
const duration = performance.now() - start;
|
|
186
|
+
|
|
187
|
+
// No blocking failures
|
|
188
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
189
|
+
assert.equal(
|
|
190
|
+
blockingFailures.length,
|
|
191
|
+
0,
|
|
192
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
// Speed target met
|
|
196
|
+
assert.ok(
|
|
197
|
+
duration < PRE_EXECUTION_TIMEOUT_MS,
|
|
198
|
+
`Pre-execution checks took ${duration.toFixed(0)}ms, expected <${PRE_EXECUTION_TIMEOUT_MS}ms`
|
|
199
|
+
);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
test("handles multi-task sequence with file dependencies", async () => {
|
|
203
|
+
// Simulate a realistic task sequence where T02 depends on T01's output
|
|
204
|
+
const tasks: TaskRow[] = [
|
|
205
|
+
createTask({
|
|
206
|
+
id: "T01",
|
|
207
|
+
sequence: 0,
|
|
208
|
+
title: "Create types file",
|
|
209
|
+
status: "complete",
|
|
210
|
+
expected_output: [join(GSD_SRC_DIR, "types.ts")],
|
|
211
|
+
}),
|
|
212
|
+
createTask({
|
|
213
|
+
id: "T02",
|
|
214
|
+
sequence: 1,
|
|
215
|
+
title: "Use types in implementation",
|
|
216
|
+
description: `
|
|
217
|
+
Read the types from src/resources/extensions/gsd/types.ts and use them.
|
|
218
|
+
`.trim(),
|
|
219
|
+
inputs: [join(GSD_SRC_DIR, "types.ts")],
|
|
220
|
+
files: [join(GSD_SRC_DIR, "gsd-db.ts")],
|
|
221
|
+
}),
|
|
222
|
+
];
|
|
223
|
+
|
|
224
|
+
const start = performance.now();
|
|
225
|
+
const result = await runPreExecutionChecks(tasks, GSD_SRC_DIR);
|
|
226
|
+
const duration = performance.now() - start;
|
|
227
|
+
|
|
228
|
+
// No blocking failures
|
|
229
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
230
|
+
assert.equal(
|
|
231
|
+
blockingFailures.length,
|
|
232
|
+
0,
|
|
233
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
// Speed target met
|
|
237
|
+
assert.ok(
|
|
238
|
+
duration < PRE_EXECUTION_TIMEOUT_MS,
|
|
239
|
+
`Pre-execution checks took ${duration.toFixed(0)}ms, expected <${PRE_EXECUTION_TIMEOUT_MS}ms`
|
|
240
|
+
);
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
describe("Post-Execution Checks on Real GSD Code", () => {
|
|
245
|
+
test("runs post-execution checks on real GSD source files", () => {
|
|
246
|
+
// Simulate a completed task that modified real files
|
|
247
|
+
const completedTask = createTask({
|
|
248
|
+
id: "T01",
|
|
249
|
+
title: "Update gsd-db validation",
|
|
250
|
+
status: "complete",
|
|
251
|
+
key_files: [
|
|
252
|
+
join(GSD_SRC_DIR, "gsd-db.ts"),
|
|
253
|
+
join(GSD_SRC_DIR, "types.ts"),
|
|
254
|
+
],
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const start = performance.now();
|
|
258
|
+
const result = runPostExecutionChecks(completedTask, [], GSD_SRC_DIR);
|
|
259
|
+
const duration = performance.now() - start;
|
|
260
|
+
|
|
261
|
+
// R012: No blocking failures (false positives) on production code
|
|
262
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
263
|
+
assert.equal(
|
|
264
|
+
blockingFailures.length,
|
|
265
|
+
0,
|
|
266
|
+
`Expected zero blocking failures, got: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
// Overall status should not be fail
|
|
270
|
+
assert.notEqual(result.status, "fail", "Post-execution checks should not fail on real GSD code");
|
|
271
|
+
|
|
272
|
+
// R013: Speed target met
|
|
273
|
+
assert.ok(
|
|
274
|
+
duration < POST_EXECUTION_TIMEOUT_MS,
|
|
275
|
+
`Post-execution checks took ${duration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS}ms`
|
|
276
|
+
);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
test("analyzes imports in real TypeScript files", () => {
|
|
280
|
+
// Use auto-verification.ts which imports from multiple other GSD files
|
|
281
|
+
const completedTask = createTask({
|
|
282
|
+
id: "T02",
|
|
283
|
+
title: "Verify auto-verification imports",
|
|
284
|
+
status: "complete",
|
|
285
|
+
key_files: [join(GSD_SRC_DIR, "auto-verification.ts")],
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
const start = performance.now();
|
|
289
|
+
const result = runPostExecutionChecks(completedTask, [], GSD_SRC_DIR);
|
|
290
|
+
const duration = performance.now() - start;
|
|
291
|
+
|
|
292
|
+
// No blocking failures
|
|
293
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
294
|
+
assert.equal(
|
|
295
|
+
blockingFailures.length,
|
|
296
|
+
0,
|
|
297
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
// Speed target met
|
|
301
|
+
assert.ok(
|
|
302
|
+
duration < POST_EXECUTION_TIMEOUT_MS,
|
|
303
|
+
`Post-execution checks took ${duration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS}ms`
|
|
304
|
+
);
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
test("handles multi-file task with cross-file dependencies", () => {
|
|
308
|
+
// Task that touched multiple related files
|
|
309
|
+
const completedTask = createTask({
|
|
310
|
+
id: "T03",
|
|
311
|
+
title: "Refactor state management",
|
|
312
|
+
status: "complete",
|
|
313
|
+
key_files: [
|
|
314
|
+
join(GSD_SRC_DIR, "state.ts"),
|
|
315
|
+
join(GSD_SRC_DIR, "gsd-db.ts"),
|
|
316
|
+
join(GSD_SRC_DIR, "cache.ts"),
|
|
317
|
+
],
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
const start = performance.now();
|
|
321
|
+
const result = runPostExecutionChecks(completedTask, [], GSD_SRC_DIR);
|
|
322
|
+
const duration = performance.now() - start;
|
|
323
|
+
|
|
324
|
+
// No blocking failures
|
|
325
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
326
|
+
assert.equal(
|
|
327
|
+
blockingFailures.length,
|
|
328
|
+
0,
|
|
329
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
// Speed target met
|
|
333
|
+
assert.ok(
|
|
334
|
+
duration < POST_EXECUTION_TIMEOUT_MS,
|
|
335
|
+
`Post-execution checks took ${duration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS}ms`
|
|
336
|
+
);
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
test("handles task sequence with signature analysis", () => {
|
|
340
|
+
// Simulate checking for signature consistency across tasks
|
|
341
|
+
const priorTasks: TaskRow[] = [
|
|
342
|
+
createTask({
|
|
343
|
+
id: "T01",
|
|
344
|
+
sequence: 0,
|
|
345
|
+
title: "Define TaskRow interface",
|
|
346
|
+
status: "complete",
|
|
347
|
+
key_files: [join(GSD_SRC_DIR, "gsd-db.ts")],
|
|
348
|
+
}),
|
|
349
|
+
];
|
|
350
|
+
|
|
351
|
+
const completedTask = createTask({
|
|
352
|
+
id: "T02",
|
|
353
|
+
sequence: 1,
|
|
354
|
+
title: "Use TaskRow in state module",
|
|
355
|
+
status: "complete",
|
|
356
|
+
key_files: [join(GSD_SRC_DIR, "state.ts")],
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
const start = performance.now();
|
|
360
|
+
const result = runPostExecutionChecks(completedTask, priorTasks, GSD_SRC_DIR);
|
|
361
|
+
const duration = performance.now() - start;
|
|
362
|
+
|
|
363
|
+
// No blocking failures
|
|
364
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
365
|
+
assert.equal(
|
|
366
|
+
blockingFailures.length,
|
|
367
|
+
0,
|
|
368
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
// Speed target met
|
|
372
|
+
assert.ok(
|
|
373
|
+
duration < POST_EXECUTION_TIMEOUT_MS,
|
|
374
|
+
`Post-execution checks took ${duration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS}ms`
|
|
375
|
+
);
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
describe("Combined Pre and Post Execution Flow", () => {
|
|
380
|
+
test("full verification flow on realistic task lifecycle", async () => {
|
|
381
|
+
// Simulate a complete task lifecycle
|
|
382
|
+
const tasks: TaskRow[] = [
|
|
383
|
+
createTask({
|
|
384
|
+
id: "T01",
|
|
385
|
+
sequence: 0,
|
|
386
|
+
title: "Implement enhanced verification",
|
|
387
|
+
status: "pending",
|
|
388
|
+
description: `
|
|
389
|
+
## Steps
|
|
390
|
+
1. Update pre-execution-checks.ts with new validation
|
|
391
|
+
2. Update post-execution-checks.ts with signature analysis
|
|
392
|
+
3. Add integration tests
|
|
393
|
+
|
|
394
|
+
\`\`\`typescript
|
|
395
|
+
import { runPreExecutionChecks } from "./pre-execution-checks.ts";
|
|
396
|
+
import { runPostExecutionChecks } from "./post-execution-checks.ts";
|
|
397
|
+
\`\`\`
|
|
398
|
+
`.trim(),
|
|
399
|
+
files: [
|
|
400
|
+
join(GSD_SRC_DIR, "pre-execution-checks.ts"),
|
|
401
|
+
join(GSD_SRC_DIR, "post-execution-checks.ts"),
|
|
402
|
+
],
|
|
403
|
+
inputs: [
|
|
404
|
+
join(GSD_SRC_DIR, "types.ts"),
|
|
405
|
+
join(GSD_SRC_DIR, "gsd-db.ts"),
|
|
406
|
+
],
|
|
407
|
+
expected_output: [
|
|
408
|
+
join(GSD_SRC_DIR, "tests/enhanced-verification-integration.test.ts"),
|
|
409
|
+
],
|
|
410
|
+
}),
|
|
411
|
+
];
|
|
412
|
+
|
|
413
|
+
// Run pre-execution checks
|
|
414
|
+
const preStart = performance.now();
|
|
415
|
+
const preResult = await runPreExecutionChecks(tasks, GSD_SRC_DIR);
|
|
416
|
+
const preDuration = performance.now() - preStart;
|
|
417
|
+
|
|
418
|
+
// Verify pre-execution results
|
|
419
|
+
const preBlockingFailures = preResult.checks.filter((c) => !c.passed && c.blocking);
|
|
420
|
+
assert.equal(
|
|
421
|
+
preBlockingFailures.length,
|
|
422
|
+
0,
|
|
423
|
+
`Pre-execution had blocking failures: ${JSON.stringify(preBlockingFailures, null, 2)}`
|
|
424
|
+
);
|
|
425
|
+
assert.ok(
|
|
426
|
+
preDuration < PRE_EXECUTION_TIMEOUT_MS,
|
|
427
|
+
`Pre-execution took ${preDuration.toFixed(0)}ms, expected <${PRE_EXECUTION_TIMEOUT_MS}ms`
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
// Task after execution (simulated completion)
|
|
431
|
+
const completedTask = createTask({
|
|
432
|
+
...tasks[0],
|
|
433
|
+
status: "complete",
|
|
434
|
+
key_files: tasks[0].files,
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
// Run post-execution checks
|
|
438
|
+
const postStart = performance.now();
|
|
439
|
+
const postResult = runPostExecutionChecks(completedTask, [], GSD_SRC_DIR);
|
|
440
|
+
const postDuration = performance.now() - postStart;
|
|
441
|
+
|
|
442
|
+
// Verify post-execution results
|
|
443
|
+
const postBlockingFailures = postResult.checks.filter((c) => !c.passed && c.blocking);
|
|
444
|
+
assert.equal(
|
|
445
|
+
postBlockingFailures.length,
|
|
446
|
+
0,
|
|
447
|
+
`Post-execution had blocking failures: ${JSON.stringify(postBlockingFailures, null, 2)}`
|
|
448
|
+
);
|
|
449
|
+
assert.ok(
|
|
450
|
+
postDuration < POST_EXECUTION_TIMEOUT_MS,
|
|
451
|
+
`Post-execution took ${postDuration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS}ms`
|
|
452
|
+
);
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
test("handles large number of files without timeout", () => {
|
|
456
|
+
// Use all available GSD source files to stress test
|
|
457
|
+
const allGsdFiles = REAL_GSD_FILES.map((f) => join(GSD_SRC_DIR, f));
|
|
458
|
+
|
|
459
|
+
const task = createTask({
|
|
460
|
+
id: "T01",
|
|
461
|
+
title: "Large refactor touching many files",
|
|
462
|
+
status: "complete",
|
|
463
|
+
key_files: allGsdFiles,
|
|
464
|
+
files: allGsdFiles,
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
const start = performance.now();
|
|
468
|
+
const result = runPostExecutionChecks(task, [], GSD_SRC_DIR);
|
|
469
|
+
const duration = performance.now() - start;
|
|
470
|
+
|
|
471
|
+
// No blocking failures
|
|
472
|
+
const blockingFailures = result.checks.filter((c) => !c.passed && c.blocking);
|
|
473
|
+
assert.equal(
|
|
474
|
+
blockingFailures.length,
|
|
475
|
+
0,
|
|
476
|
+
`Unexpected blocking failures: ${JSON.stringify(blockingFailures, null, 2)}`
|
|
477
|
+
);
|
|
478
|
+
|
|
479
|
+
// Should still be fast even with many files
|
|
480
|
+
// Allow slightly more time for multi-file analysis but still within target
|
|
481
|
+
assert.ok(
|
|
482
|
+
duration < POST_EXECUTION_TIMEOUT_MS * 2, // Allow 2x for stress test
|
|
483
|
+
`Multi-file post-execution took ${duration.toFixed(0)}ms, expected <${POST_EXECUTION_TIMEOUT_MS * 2}ms`
|
|
484
|
+
);
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
describe("Warning Quality", () => {
|
|
489
|
+
test("warnings on real code are actionable, not spurious", () => {
|
|
490
|
+
// Run checks on well-formed production code
|
|
491
|
+
const task = createTask({
|
|
492
|
+
id: "T01",
|
|
493
|
+
title: "Review code quality",
|
|
494
|
+
status: "complete",
|
|
495
|
+
key_files: [
|
|
496
|
+
join(GSD_SRC_DIR, "pre-execution-checks.ts"),
|
|
497
|
+
join(GSD_SRC_DIR, "post-execution-checks.ts"),
|
|
498
|
+
],
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
const result = runPostExecutionChecks(task, [], GSD_SRC_DIR);
|
|
502
|
+
|
|
503
|
+
// Extract warnings (either non-passed non-blocking, or passed with warning messages)
|
|
504
|
+
const warnings = result.checks.filter(
|
|
505
|
+
(c) => (!c.passed && !c.blocking) || (c.passed && c.message?.startsWith("Warning:"))
|
|
506
|
+
);
|
|
507
|
+
|
|
508
|
+
// Warnings are acceptable but should be few on well-maintained code
|
|
509
|
+
// If we get many warnings, it suggests the checks are too aggressive
|
|
510
|
+
assert.ok(
|
|
511
|
+
warnings.length <= 10,
|
|
512
|
+
`Too many warnings (${warnings.length}) suggests overly aggressive checks: ${JSON.stringify(warnings, null, 2)}`
|
|
513
|
+
);
|
|
514
|
+
|
|
515
|
+
// Each warning should have a clear message
|
|
516
|
+
for (const warning of warnings) {
|
|
517
|
+
assert.ok(warning.category, "Warning missing category");
|
|
518
|
+
assert.ok(warning.message, "Warning missing message");
|
|
519
|
+
assert.ok(
|
|
520
|
+
warning.message.length > 10,
|
|
521
|
+
`Warning message too short to be actionable: "${warning.message}"`
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
});
|
|
526
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* error-success-mask.test.ts — #3664
|
|
3
|
+
*
|
|
4
|
+
* Verify that the agent-end-recovery error handler detects when errorMessage
|
|
5
|
+
* is uninformative (e.g. "success", "ok", "unknown") and falls back to
|
|
6
|
+
* extracting the real error from the assistant message text content.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { describe, test } from "node:test";
|
|
10
|
+
import assert from "node:assert/strict";
|
|
11
|
+
import { readFileSync } from "node:fs";
|
|
12
|
+
import { join, dirname } from "node:path";
|
|
13
|
+
import { fileURLToPath } from "node:url";
|
|
14
|
+
|
|
15
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const sourceFile = join(__dirname, "..", "bootstrap", "agent-end-recovery.ts");
|
|
17
|
+
|
|
18
|
+
describe("error-success mask detection (#3664)", () => {
|
|
19
|
+
const source = readFileSync(sourceFile, "utf-8");
|
|
20
|
+
|
|
21
|
+
test("detects useless errorMessage values with regex", () => {
|
|
22
|
+
assert.match(source, /success\|ok\|true\|error\|unknown/i);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
test("extracts display message from content text block", () => {
|
|
26
|
+
assert.match(source, /textBlock/);
|
|
27
|
+
assert.match(source, /\.text\.slice\(0,\s*300\)/);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("classifies using rawErrorMsg, not displayMsg", () => {
|
|
31
|
+
assert.match(source, /classifyError\(rawErrorMsg/);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("references issue #3588 in comments", () => {
|
|
35
|
+
assert.match(source, /#3588/);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression test for #3669 — findMissingSummaries skips closed slices
|
|
3
|
+
*
|
|
4
|
+
* When a slice has status "skipped", "complete", or "done", it should be
|
|
5
|
+
* excluded from the missing-summary check because closed slices intentionally
|
|
6
|
+
* lack SUMMARY files (or their DB status is authoritative).
|
|
7
|
+
*
|
|
8
|
+
* This is a structural verification test — it reads the source to confirm the
|
|
9
|
+
* CLOSED_STATUSES guard exists at the filter site.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { describe, test } from 'node:test';
|
|
13
|
+
import assert from 'node:assert/strict';
|
|
14
|
+
import { readFileSync } from 'node:fs';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
|
|
18
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
19
|
+
const __dirname = dirname(__filename);
|
|
20
|
+
|
|
21
|
+
const source = readFileSync(join(__dirname, '..', 'auto-dispatch.ts'), 'utf-8');
|
|
22
|
+
|
|
23
|
+
describe('findMissingSummaries closed-status exclusion (#3669)', () => {
|
|
24
|
+
test('CLOSED_STATUSES set includes skipped, complete, and done', () => {
|
|
25
|
+
// The source must define a CLOSED_STATUSES set with all three statuses
|
|
26
|
+
assert.match(source, /CLOSED_STATUSES.*=.*new Set\(/,
|
|
27
|
+
'CLOSED_STATUSES set should be defined');
|
|
28
|
+
assert.match(source, /"skipped"/, 'CLOSED_STATUSES should include "skipped"');
|
|
29
|
+
assert.match(source, /"complete"/, 'CLOSED_STATUSES should include "complete"');
|
|
30
|
+
assert.match(source, /"done"/, 'CLOSED_STATUSES should include "done"');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('filter uses CLOSED_STATUSES.has() to exclude closed slices', () => {
|
|
34
|
+
assert.match(source, /CLOSED_STATUSES\.has\(s\.status\)/,
|
|
35
|
+
'filter should call CLOSED_STATUSES.has(s.status)');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('findMissingSummaries function exists', () => {
|
|
39
|
+
assert.match(source, /function findMissingSummaries\(/,
|
|
40
|
+
'findMissingSummaries function should be defined');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('filter is negated (excludes closed, keeps open)', () => {
|
|
44
|
+
// The filter should use !CLOSED_STATUSES.has() to exclude closed slices
|
|
45
|
+
assert.match(source, /!CLOSED_STATUSES\.has\(s\.status\)/,
|
|
46
|
+
'filter should negate CLOSED_STATUSES.has() to exclude closed slices');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression test for #3693 — suppress repeated frontmatter parse warnings
|
|
3
|
+
*
|
|
4
|
+
* parseFrontmatterBlock was logging a YAML parse warning on every call.
|
|
5
|
+
* The fix adds a _warnedFrontmatterParse flag so the warning only fires once.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { describe, test } from 'node:test';
|
|
9
|
+
import assert from 'node:assert/strict';
|
|
10
|
+
import { readFileSync } from 'node:fs';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
12
|
+
import { dirname, join } from 'node:path';
|
|
13
|
+
|
|
14
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
+
const __dirname = dirname(__filename);
|
|
16
|
+
|
|
17
|
+
const prefsSrc = readFileSync(
|
|
18
|
+
join(__dirname, '..', 'preferences.ts'),
|
|
19
|
+
'utf-8',
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
describe('frontmatter parse noise suppression (#3693)', () => {
|
|
23
|
+
test('_warnedFrontmatterParse flag is defined', () => {
|
|
24
|
+
assert.match(prefsSrc, /_warnedFrontmatterParse/,
|
|
25
|
+
'_warnedFrontmatterParse flag should exist in preferences.ts');
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('parseFrontmatterBlock function exists', () => {
|
|
29
|
+
assert.match(prefsSrc, /function parseFrontmatterBlock\(/,
|
|
30
|
+
'parseFrontmatterBlock function should be defined');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('flag is checked before warning', () => {
|
|
34
|
+
assert.match(prefsSrc, /if\s*\(\s*!_warnedFrontmatterParse\s*\)/,
|
|
35
|
+
'should check !_warnedFrontmatterParse before logging');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('flag is set to true after first warning', () => {
|
|
39
|
+
assert.match(prefsSrc, /_warnedFrontmatterParse\s*=\s*true/,
|
|
40
|
+
'should set _warnedFrontmatterParse = true after warning');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression test — .bg-shell/ added to BASELINE_PATTERNS in gitignore.ts
|
|
3
|
+
*
|
|
4
|
+
* The bg-shell background process directory was not included in the
|
|
5
|
+
* baseline gitignore patterns, causing it to appear as untracked in
|
|
6
|
+
* git status and potentially be committed.
|
|
7
|
+
*
|
|
8
|
+
* Structural verification test — reads source to confirm .bg-shell/
|
|
9
|
+
* is in BASELINE_PATTERNS.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { describe, test } from 'node:test';
|
|
13
|
+
import assert from 'node:assert/strict';
|
|
14
|
+
import { readFileSync } from 'node:fs';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
|
|
18
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
19
|
+
const __dirname = dirname(__filename);
|
|
20
|
+
|
|
21
|
+
const source = readFileSync(join(__dirname, '..', 'gitignore.ts'), 'utf-8');
|
|
22
|
+
|
|
23
|
+
describe('.bg-shell/ in BASELINE_PATTERNS', () => {
|
|
24
|
+
test('BASELINE_PATTERNS array is defined', () => {
|
|
25
|
+
assert.match(source, /const BASELINE_PATTERNS\s*=/,
|
|
26
|
+
'BASELINE_PATTERNS should be defined');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test('.bg-shell/ is included in BASELINE_PATTERNS', () => {
|
|
30
|
+
// Extract the BASELINE_PATTERNS array content
|
|
31
|
+
const patternsStart = source.indexOf('BASELINE_PATTERNS');
|
|
32
|
+
const arrayStart = source.indexOf('[', patternsStart);
|
|
33
|
+
const arrayEnd = source.indexOf('] as const', arrayStart);
|
|
34
|
+
const patternsContent = source.slice(arrayStart, arrayEnd);
|
|
35
|
+
assert.match(patternsContent, /\.bg-shell\//,
|
|
36
|
+
'.bg-shell/ should be in BASELINE_PATTERNS');
|
|
37
|
+
});
|
|
38
|
+
});
|