gsd-pi 2.81.0 → 2.82.0-dev.c22380fc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -30
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +1 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +1 -0
- package/dist/resources/extensions/gsd/auto/loop.js +111 -8
- package/dist/resources/extensions/gsd/auto/orchestrator.js +113 -6
- package/dist/resources/extensions/gsd/auto/phases.js +199 -97
- package/dist/resources/extensions/gsd/auto/run-unit.js +66 -3
- package/dist/resources/extensions/gsd/auto/session.js +9 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +182 -178
- package/dist/resources/extensions/gsd/auto-dispatch.js +14 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +11 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +6 -181
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +20 -23
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +12 -6
- package/dist/resources/extensions/gsd/auto-worktree.js +8 -0
- package/dist/resources/extensions/gsd/auto.js +371 -106
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +13 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +13 -2
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/parallel.js +9 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +15 -2
- package/dist/resources/extensions/gsd/context-store.js +112 -0
- package/dist/resources/extensions/gsd/db-writer.js +150 -84
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +41 -6
- package/dist/resources/extensions/gsd/git-service.js +2 -1
- package/dist/resources/extensions/gsd/gsd-db.js +7 -23
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +4 -10
- package/dist/resources/extensions/gsd/knowledge-backfill.js +144 -0
- package/dist/resources/extensions/gsd/knowledge-capture.js +136 -0
- package/dist/resources/extensions/gsd/knowledge-parser.js +154 -0
- package/dist/resources/extensions/gsd/knowledge-projection.js +210 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +6 -96
- package/dist/resources/extensions/gsd/md-importer.js +1 -1
- package/dist/resources/extensions/gsd/memory-backfill.js +73 -17
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +222 -0
- package/dist/resources/extensions/gsd/migrate/command.js +5 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
- package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +14 -14
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/dist/resources/extensions/gsd/prompts/system.md +2 -2
- package/dist/resources/extensions/gsd/provider-switch-observer.js +146 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +15 -1
- package/dist/resources/extensions/gsd/session-lock.js +40 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +131 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +247 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +87 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +124 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +32 -0
- package/dist/resources/extensions/gsd/state-reconciliation/errors.js +41 -0
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +99 -0
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +24 -0
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +43 -0
- package/dist/resources/extensions/gsd/state-reconciliation/types.js +3 -0
- package/dist/resources/extensions/gsd/state-reconciliation.js +5 -26
- package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +743 -318
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +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 +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/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 +1 -1
- 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 +1 -1
- 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 +2 -2
- 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 +12 -12
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- 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 +1 -1
- 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-752f1e2ebdaa3e45.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/dist/welcome-screen.d.ts +0 -7
- package/dist/welcome-screen.js +60 -69
- package/package.json +3 -2
- package/packages/contracts/dist/rpc.test.js +7 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +21 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js +24 -0
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/src/rpc.test.ts +8 -0
- package/packages/contracts/src/workflow.ts +24 -0
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +14 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +80 -0
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/workflow-tools-parity.test.ts +244 -0
- package/packages/mcp-server/src/workflow-tools.test.ts +22 -0
- package/packages/mcp-server/src/workflow-tools.ts +168 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -2
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts +11 -0
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +20 -0
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/index.ts +7 -2
- package/packages/pi-ai/src/providers/transform-messages.ts +24 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +4 -4
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +76 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- 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 +86 -82
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +105 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +27 -26
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +9 -6
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +17 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +113 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +84 -104
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
- package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +22 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +5 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
- package/packages/pi-tui/src/overlay-layout.ts +10 -7
- package/packages/pi-tui/src/tui.ts +6 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +105 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +27 -26
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/tools/screenshot.ts +1 -0
- package/src/resources/extensions/browser-tools/tools/zoom.ts +1 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +46 -11
- package/src/resources/extensions/gsd/auto/loop-deps.ts +9 -5
- package/src/resources/extensions/gsd/auto/loop.ts +113 -9
- package/src/resources/extensions/gsd/auto/orchestrator.ts +118 -6
- package/src/resources/extensions/gsd/auto/phases.ts +158 -19
- package/src/resources/extensions/gsd/auto/run-unit.ts +69 -4
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +230 -183
- package/src/resources/extensions/gsd/auto-dispatch.ts +15 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +11 -3
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -209
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +22 -22
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +12 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +8 -0
- package/src/resources/extensions/gsd/auto.ts +411 -106
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -6
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +12 -2
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/parallel.ts +12 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/context-store.ts +120 -1
- package/src/resources/extensions/gsd/db-writer.ts +167 -84
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +44 -6
- package/src/resources/extensions/gsd/doctor-types.ts +2 -0
- package/src/resources/extensions/gsd/git-service.ts +2 -0
- package/src/resources/extensions/gsd/gsd-db.ts +7 -23
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +6 -10
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +164 -0
- package/src/resources/extensions/gsd/knowledge-capture.ts +160 -0
- package/src/resources/extensions/gsd/knowledge-parser.ts +174 -0
- package/src/resources/extensions/gsd/knowledge-projection.ts +241 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +10 -96
- package/src/resources/extensions/gsd/md-importer.ts +1 -1
- package/src/resources/extensions/gsd/memory-backfill.ts +89 -17
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +277 -0
- package/src/resources/extensions/gsd/migrate/command.ts +5 -0
- package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
- package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
- package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +14 -13
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/src/resources/extensions/gsd/prompts/system.md +2 -2
- package/src/resources/extensions/gsd/provider-switch-observer.ts +185 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +18 -1
- package/src/resources/extensions/gsd/session-lock.ts +41 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +172 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +337 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +69 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +109 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +68 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +185 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +46 -0
- package/src/resources/extensions/gsd/state-reconciliation/errors.ts +67 -0
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +142 -0
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +27 -0
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +60 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +83 -0
- package/src/resources/extensions/gsd/state-reconciliation.ts +21 -53
- package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +729 -176
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +408 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +292 -4
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +20 -5
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +28 -1
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +13 -8
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +453 -0
- package/src/resources/extensions/gsd/tests/decisions-stop-table-writes.test.ts +348 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +323 -0
- package/src/resources/extensions/gsd/tests/knowledge-capture.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -2
- package/src/resources/extensions/gsd/tests/load-knowledge-block-rules-only.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +46 -11
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -217
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +71 -58
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +952 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +158 -58
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +597 -118
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1171 -526
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.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/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_ssgManifest.js +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
// GSD
|
|
2
|
-
//
|
|
3
|
-
// Toggled with Ctrl+Alt+N (⌃⌥N on macOS), Ctrl+Shift+N fallback, or /gsd notifications.
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Notification history overlay with severity filtering and width-safe TUI rendering.
|
|
4
3
|
|
|
5
4
|
import type { Theme } from "@gsd/pi-coding-agent";
|
|
6
|
-
import { truncateToWidth, visibleWidth,
|
|
5
|
+
import { truncateToWidth, visibleWidth, matchesKey, Key } from "@gsd/pi-tui";
|
|
7
6
|
|
|
8
7
|
import {
|
|
9
8
|
readNotifications,
|
|
@@ -14,10 +13,32 @@ import {
|
|
|
14
13
|
type NotifySeverity,
|
|
15
14
|
} from "./notification-store.js";
|
|
16
15
|
import { formattedShortcutPair } from "./shortcut-defs.js";
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
import {
|
|
17
|
+
padRightVisible,
|
|
18
|
+
renderFrame,
|
|
19
|
+
renderKeyHints,
|
|
20
|
+
rightAlign,
|
|
21
|
+
wrapVisibleText,
|
|
22
|
+
} from "./tui/render-kit.js";
|
|
23
|
+
|
|
24
|
+
type FilterMode = "all" | "error" | "warning" | "success" | "info";
|
|
25
|
+
const FILTER_CYCLE: FilterMode[] = ["all", "error", "warning", "success", "info"];
|
|
26
|
+
const OVERLAY_WIDTH = "58%";
|
|
27
|
+
const OVERLAY_MIN_WIDTH = 68;
|
|
28
|
+
const OVERLAY_MAX_HEIGHT_PERCENT = 52;
|
|
29
|
+
const OVERLAY_MARGIN = { top: 2, right: 2, bottom: 6, left: 2 } as const;
|
|
30
|
+
|
|
31
|
+
export function notificationOverlayOptions() {
|
|
32
|
+
return {
|
|
33
|
+
width: OVERLAY_WIDTH,
|
|
34
|
+
minWidth: OVERLAY_MIN_WIDTH,
|
|
35
|
+
maxHeight: `${OVERLAY_MAX_HEIGHT_PERCENT}%`,
|
|
36
|
+
anchor: "top-center",
|
|
37
|
+
row: "24%",
|
|
38
|
+
margin: OVERLAY_MARGIN,
|
|
39
|
+
backdrop: true,
|
|
40
|
+
} as const;
|
|
41
|
+
}
|
|
21
42
|
|
|
22
43
|
function severityIcon(severity: NotifySeverity): string {
|
|
23
44
|
switch (severity) {
|
|
@@ -29,17 +50,6 @@ function severityIcon(severity: NotifySeverity): string {
|
|
|
29
50
|
}
|
|
30
51
|
}
|
|
31
52
|
|
|
32
|
-
/** Column-aware word wrap using pi-tui's native wrapper (handles unicode/ANSI). */
|
|
33
|
-
function wrapText(text: string, maxWidth: number): string[] {
|
|
34
|
-
if (maxWidth <= 0) return [text];
|
|
35
|
-
const lines = wrapTextWithAnsi(text, maxWidth);
|
|
36
|
-
// Safety clamp: if any line still exceeds maxWidth (e.g. unbreakable long token),
|
|
37
|
-
// truncate it with an ellipsis so it cannot bleed past the box border.
|
|
38
|
-
return lines.map((l) =>
|
|
39
|
-
visibleWidth(l) > maxWidth ? truncateToWidth(l, maxWidth, "…") : l,
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
53
|
function formatTimestamp(ts: string): string {
|
|
44
54
|
try {
|
|
45
55
|
const d = new Date(ts);
|
|
@@ -184,13 +194,19 @@ export class GSDNotificationOverlay {
|
|
|
184
194
|
}
|
|
185
195
|
|
|
186
196
|
const content = this.buildContentLines(width);
|
|
187
|
-
const
|
|
197
|
+
const terminalRows = process.stdout.rows || 32;
|
|
198
|
+
const availableRows = Math.max(1, terminalRows - OVERLAY_MARGIN.top - OVERLAY_MARGIN.bottom);
|
|
199
|
+
const overlayRows = Math.min(
|
|
200
|
+
availableRows,
|
|
201
|
+
Math.max(1, Math.floor((terminalRows * OVERLAY_MAX_HEIGHT_PERCENT) / 100)),
|
|
202
|
+
);
|
|
203
|
+
const maxVisibleRows = Math.max(5, overlayRows - 2);
|
|
188
204
|
const visibleContentRows = Math.min(content.length, maxVisibleRows);
|
|
189
205
|
const maxScroll = Math.max(0, content.length - visibleContentRows);
|
|
190
206
|
this.scrollOffset = Math.min(this.scrollOffset, maxScroll);
|
|
191
207
|
const visibleContent = content.slice(this.scrollOffset, this.scrollOffset + visibleContentRows);
|
|
192
208
|
|
|
193
|
-
const lines = this.
|
|
209
|
+
const lines = renderFrame(this.theme, visibleContent, width);
|
|
194
210
|
|
|
195
211
|
this.cachedWidth = width;
|
|
196
212
|
this.cachedLines = lines;
|
|
@@ -227,33 +243,15 @@ export class GSDNotificationOverlay {
|
|
|
227
243
|
}
|
|
228
244
|
}
|
|
229
245
|
|
|
230
|
-
private wrapInBox(inner: string[], width: number): string[] {
|
|
231
|
-
const th = this.theme;
|
|
232
|
-
const border = (s: string) => th.fg("borderAccent", s);
|
|
233
|
-
const innerWidth = width - 4;
|
|
234
|
-
const lines: string[] = [];
|
|
235
|
-
|
|
236
|
-
lines.push(border("╭" + "─".repeat(width - 2) + "╮"));
|
|
237
|
-
for (const line of inner) {
|
|
238
|
-
const truncated = truncateToWidth(line, innerWidth);
|
|
239
|
-
const padWidth = Math.max(0, innerWidth - visibleWidth(truncated));
|
|
240
|
-
lines.push(border("│") + " " + truncated + " ".repeat(padWidth) + " " + border("│"));
|
|
241
|
-
}
|
|
242
|
-
lines.push(border("╰" + "─".repeat(width - 2) + "╯"));
|
|
243
|
-
return lines;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
246
|
private buildContentLines(width: number): string[] {
|
|
247
247
|
const th = this.theme;
|
|
248
|
-
const shellWidth = width - 4;
|
|
249
|
-
const contentWidth =
|
|
250
|
-
const sidePad = Math.max(0, Math.floor((shellWidth - contentWidth) / 2));
|
|
251
|
-
const leftMargin = " ".repeat(sidePad);
|
|
248
|
+
const shellWidth = Math.max(1, width - 4);
|
|
249
|
+
const contentWidth = shellWidth;
|
|
252
250
|
const lines: string[] = [];
|
|
253
251
|
|
|
254
252
|
const row = (content = ""): string => {
|
|
255
253
|
const truncated = truncateToWidth(content, contentWidth);
|
|
256
|
-
return
|
|
254
|
+
return padRightVisible(truncated, contentWidth);
|
|
257
255
|
};
|
|
258
256
|
const blank = () => row("");
|
|
259
257
|
const hr = () => row(th.fg("dim", "─".repeat(contentWidth)));
|
|
@@ -262,9 +260,15 @@ export class GSDNotificationOverlay {
|
|
|
262
260
|
const title = th.fg("accent", th.bold("Notifications"));
|
|
263
261
|
const filterLabel = this.filter === "all"
|
|
264
262
|
? th.fg("dim", "all")
|
|
265
|
-
: th.fg(
|
|
263
|
+
: th.fg(
|
|
264
|
+
this.filter === "error" ? "error"
|
|
265
|
+
: this.filter === "warning" ? "warning"
|
|
266
|
+
: this.filter === "success" ? "success"
|
|
267
|
+
: "dim",
|
|
268
|
+
this.filter,
|
|
269
|
+
);
|
|
266
270
|
const count = `${this.filteredEntries.length} entries`;
|
|
267
|
-
lines.push(row(
|
|
271
|
+
lines.push(row(rightAlign(
|
|
268
272
|
`${title} ${th.fg("dim", "filter:")} ${filterLabel}`,
|
|
269
273
|
th.fg("dim", count),
|
|
270
274
|
contentWidth,
|
|
@@ -273,7 +277,7 @@ export class GSDNotificationOverlay {
|
|
|
273
277
|
|
|
274
278
|
// Controls
|
|
275
279
|
const closeShortcut = formattedShortcutPair("notifications");
|
|
276
|
-
lines.push(row(th
|
|
280
|
+
lines.push(row(renderKeyHints(th, ["↑/↓ scroll", "f filter", "c clear", `Esc/${closeShortcut} close`], contentWidth)));
|
|
277
281
|
lines.push(blank());
|
|
278
282
|
|
|
279
283
|
// Entries
|
|
@@ -302,7 +306,7 @@ export class GSDNotificationOverlay {
|
|
|
302
306
|
const msgMaxWidth = Math.max(10, contentWidth - prefixWidth);
|
|
303
307
|
|
|
304
308
|
// Wrap long messages onto continuation lines indented to align with message start
|
|
305
|
-
const msgLines =
|
|
309
|
+
const msgLines = wrapVisibleText(entry.message, msgMaxWidth);
|
|
306
310
|
const indent = " ".repeat(prefixWidth);
|
|
307
311
|
for (let i = 0; i < msgLines.length; i++) {
|
|
308
312
|
if (i === 0) {
|
|
@@ -8,9 +8,13 @@
|
|
|
8
8
|
import { existsSync, readdirSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { spawnSync } from "node:child_process";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
11
|
+
import { resolveGsdPathContract } from "./paths.js";
|
|
12
|
+
import { getAutoWorktreePath } from "./auto-worktree.js";
|
|
13
|
+
import { buildWorktreeLifecycleDeps } from "./auto.js";
|
|
14
|
+
import {
|
|
15
|
+
mergeMilestoneStandalone,
|
|
16
|
+
type MergeStandaloneResult,
|
|
17
|
+
} from "./worktree-lifecycle.js";
|
|
14
18
|
import { MergeConflictError } from "./git-service.js";
|
|
15
19
|
import { removeSessionStatus } from "./session-status-io.js";
|
|
16
20
|
import type { WorkerInfo } from "./parallel-orchestrator.js";
|
|
@@ -136,44 +140,46 @@ export function determineMergeOrder(
|
|
|
136
140
|
|
|
137
141
|
/**
|
|
138
142
|
* Attempt to merge a single milestone's worktree back to main.
|
|
139
|
-
*
|
|
143
|
+
*
|
|
144
|
+
* Routes through `WorktreeLifecycle.mergeMilestoneStandalone` so parallel
|
|
145
|
+
* callers get the same projection-finalize / roadmap-fallback / secondary-
|
|
146
|
+
* teardown invariants as the single-loop path. Closes the parallel-merge
|
|
147
|
+
* bypass that ADR-016 names (issue #5618).
|
|
140
148
|
*/
|
|
141
149
|
export async function mergeCompletedMilestone(
|
|
142
150
|
basePath: string,
|
|
143
151
|
milestoneId: string,
|
|
144
152
|
): Promise<MergeResult> {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const roadmapContent = await loadFile(roadmapPath);
|
|
157
|
-
if (!roadmapContent) {
|
|
158
|
-
return {
|
|
159
|
-
milestoneId,
|
|
160
|
-
success: false,
|
|
161
|
-
error: `Could not read roadmap for ${milestoneId}`,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
153
|
+
// Resolve the worktree path explicitly; parallel-merge has no AutoSession
|
|
154
|
+
// to read it from. Only use the worktree path when git actually knows
|
|
155
|
+
// about it (`getAutoWorktreePath` returns non-null). When the directory
|
|
156
|
+
// exists on disk but isn't a registered git worktree (e.g. a stale
|
|
157
|
+
// session-status marker dir), fall back to the project root and let the
|
|
158
|
+
// standalone's mode detection pick branch-mode or skipped — using the
|
|
159
|
+
// un-registered dir as `worktreeBasePath` would cause `getCurrentBranch`
|
|
160
|
+
// to fail with a "Worktree HEAD diverged" error.
|
|
161
|
+
const registeredWtPath = getAutoWorktreePath(basePath, milestoneId);
|
|
162
|
+
const worktreeBasePath = registeredWtPath ?? basePath;
|
|
164
163
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return {
|
|
164
|
+
let result: MergeStandaloneResult;
|
|
165
|
+
try {
|
|
166
|
+
result = mergeMilestoneStandalone(buildWorktreeLifecycleDeps(), {
|
|
167
|
+
originalBasePath: basePath,
|
|
168
|
+
worktreeBasePath,
|
|
172
169
|
milestoneId,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
// Parallel context never runs with degraded isolation — workers only
|
|
171
|
+
// exist when isolation succeeded. Pass `false` explicitly so the
|
|
172
|
+
// standalone's degraded-skip branch is not reached.
|
|
173
|
+
isolationDegraded: false,
|
|
174
|
+
notify: (msg, level) => {
|
|
175
|
+
// Surface user-visible messages from the standalone through the
|
|
176
|
+
// workflow logger so the parallel merge's progress is visible in
|
|
177
|
+
// the same channel as the rest of the parallel orchestration.
|
|
178
|
+
if (level === "error" || level === "warning") {
|
|
179
|
+
logWarning("parallel", `${milestoneId}: ${msg}`);
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
});
|
|
177
183
|
} catch (err) {
|
|
178
184
|
if (err instanceof MergeConflictError) {
|
|
179
185
|
return {
|
|
@@ -189,6 +195,27 @@ export async function mergeCompletedMilestone(
|
|
|
189
195
|
error: getErrorMessage(err),
|
|
190
196
|
};
|
|
191
197
|
}
|
|
198
|
+
|
|
199
|
+
if (!result.merged) {
|
|
200
|
+
return {
|
|
201
|
+
milestoneId,
|
|
202
|
+
success: false,
|
|
203
|
+
error:
|
|
204
|
+
result.mode === "skipped"
|
|
205
|
+
? `Merge skipped for ${milestoneId} (mode=none or isolation degraded).`
|
|
206
|
+
: `No roadmap for ${milestoneId} — milestone branch preserved for manual merge.`,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Clean up parallel session status — only on a real merge.
|
|
211
|
+
removeSessionStatus(basePath, milestoneId);
|
|
212
|
+
|
|
213
|
+
return {
|
|
214
|
+
milestoneId,
|
|
215
|
+
success: true,
|
|
216
|
+
commitMessage: result.commitMessage,
|
|
217
|
+
pushed: result.pushed,
|
|
218
|
+
};
|
|
192
219
|
}
|
|
193
220
|
|
|
194
221
|
/**
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Full-screen TUI overlay showing real-time parallel worker progress.
|
|
5
|
-
* Opened via `/gsd parallel watch`, Ctrl+Alt+P (⌃⌥P on macOS),
|
|
6
|
-
* or Ctrl+Shift+P fallback.
|
|
7
|
-
* Reads the same data sources as `scripts/parallel-monitor.mjs` but
|
|
8
|
-
* renders as a native pi-tui overlay with theme integration.
|
|
9
|
-
*/
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Parallel worker monitor overlay with width-safe operations-console rendering.
|
|
10
3
|
|
|
11
4
|
import { existsSync, statSync, readFileSync, openSync, readSync, closeSync, readdirSync } from "node:fs";
|
|
12
5
|
import { join } from "node:path";
|
|
13
6
|
import { spawnSync } from "node:child_process";
|
|
14
7
|
|
|
15
8
|
import type { Theme } from "@gsd/pi-coding-agent";
|
|
16
|
-
import {
|
|
9
|
+
import { matchesKey, Key } from "@gsd/pi-tui";
|
|
17
10
|
|
|
18
|
-
import { formatDuration
|
|
11
|
+
import { formatDuration } from "../shared/mod.js";
|
|
19
12
|
import { formattedShortcutPair } from "./shortcut-defs.js";
|
|
20
13
|
import { resolveGsdPathContract } from "./paths.js";
|
|
14
|
+
import {
|
|
15
|
+
renderBar,
|
|
16
|
+
renderKeyHints,
|
|
17
|
+
renderProgressBar,
|
|
18
|
+
safeLine,
|
|
19
|
+
statusGlyph,
|
|
20
|
+
} from "./tui/render-kit.js";
|
|
21
21
|
|
|
22
22
|
// ─── Types ────────────────────────────────────────────────────────────────
|
|
23
23
|
|
|
@@ -277,17 +277,6 @@ function unitTypeLabel(unitType: string | null): string {
|
|
|
277
277
|
return labels[unitType || ""] || (unitType || "---").toUpperCase().slice(0, 5);
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
function progressBar(done: number, total: number, width: number): string {
|
|
281
|
-
if (total === 0) return "░".repeat(width);
|
|
282
|
-
const filled = Math.round((done / total) * width);
|
|
283
|
-
return "█".repeat(filled) + "░".repeat(width - filled);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
function healthGlyph(alive: boolean, heartbeatAge: number): string {
|
|
287
|
-
if (!alive) return "○";
|
|
288
|
-
return "●";
|
|
289
|
-
}
|
|
290
|
-
|
|
291
280
|
// ─── Overlay Class ────────────────────────────────────────────────────────
|
|
292
281
|
|
|
293
282
|
export class ParallelMonitorOverlay {
|
|
@@ -299,6 +288,7 @@ export class ParallelMonitorOverlay {
|
|
|
299
288
|
private workers: WorkerView[] = [];
|
|
300
289
|
private events: string[] = [];
|
|
301
290
|
private cachedLines?: string[];
|
|
291
|
+
private cachedWidth?: number;
|
|
302
292
|
private scrollOffset = 0;
|
|
303
293
|
private disposed = false;
|
|
304
294
|
private resizeHandler: (() => void) | null = null;
|
|
@@ -339,6 +329,7 @@ export class ParallelMonitorOverlay {
|
|
|
339
329
|
this.events = this.events.slice(-10);
|
|
340
330
|
|
|
341
331
|
this.cachedLines = undefined;
|
|
332
|
+
this.cachedWidth = undefined;
|
|
342
333
|
this.tui.requestRender();
|
|
343
334
|
}
|
|
344
335
|
|
|
@@ -378,14 +369,15 @@ export class ParallelMonitorOverlay {
|
|
|
378
369
|
|
|
379
370
|
invalidate(): void {
|
|
380
371
|
this.cachedLines = undefined;
|
|
372
|
+
this.cachedWidth = undefined;
|
|
381
373
|
}
|
|
382
374
|
|
|
383
375
|
render(width: number): string[] {
|
|
384
|
-
if (this.cachedLines) return this.cachedLines;
|
|
376
|
+
if (this.cachedLines && this.cachedWidth === width) return this.cachedLines;
|
|
385
377
|
|
|
386
378
|
const t = this.theme;
|
|
387
379
|
const lines: string[] = [];
|
|
388
|
-
const w = Math.max(
|
|
380
|
+
const w = Math.max(1, width);
|
|
389
381
|
|
|
390
382
|
// Header
|
|
391
383
|
const totalCost = this.workers.reduce((s, wk) => s + wk.cost, 0);
|
|
@@ -398,7 +390,7 @@ export class ParallelMonitorOverlay {
|
|
|
398
390
|
t.bold(`$${totalCost.toFixed(2)}`) +
|
|
399
391
|
t.fg("muted", " │ 5s refresh"),
|
|
400
392
|
);
|
|
401
|
-
lines.push(t
|
|
393
|
+
lines.push(renderBar(t, w));
|
|
402
394
|
|
|
403
395
|
if (this.workers.length === 0) {
|
|
404
396
|
lines.push("");
|
|
@@ -410,7 +402,7 @@ export class ParallelMonitorOverlay {
|
|
|
410
402
|
|
|
411
403
|
// Health + ID + state
|
|
412
404
|
const healthColor = wk.alive ? "success" : "error";
|
|
413
|
-
const glyph =
|
|
405
|
+
const glyph = statusGlyph(t, wk.alive ? "active" : "idle");
|
|
414
406
|
const stateText = wk.alive
|
|
415
407
|
? t.fg("success", "RUNNING")
|
|
416
408
|
: t.fg("error", t.bold("DEAD"));
|
|
@@ -452,25 +444,29 @@ export class ParallelMonitorOverlay {
|
|
|
452
444
|
lines.push(` ${t.fg("muted", "slices")} ${chips.join(" ")}`);
|
|
453
445
|
|
|
454
446
|
// Task progress bar
|
|
455
|
-
const
|
|
447
|
+
const barWidth = Math.max(6, Math.min(25, w - 32));
|
|
448
|
+
const bar = renderProgressBar(t, wk.doneTasks, wk.totalTasks, barWidth, {
|
|
449
|
+
filledChar: "█",
|
|
450
|
+
emptyChar: "░",
|
|
451
|
+
emptyColor: "dim",
|
|
452
|
+
});
|
|
456
453
|
const pct = wk.totalTasks > 0 ? Math.round((wk.doneTasks / wk.totalTasks) * 100) : 0;
|
|
457
454
|
lines.push(
|
|
458
|
-
` ${t.fg("muted", "tasks")} ${
|
|
455
|
+
` ${t.fg("muted", "tasks")} ${bar} ${wk.doneTasks}/${wk.totalTasks} ` +
|
|
459
456
|
t.fg("muted", `(${pct}%) │ slices done ${wk.doneSlices}/${wk.totalSlices}`),
|
|
460
457
|
);
|
|
461
458
|
}
|
|
462
459
|
|
|
463
460
|
// Errors
|
|
464
461
|
for (const err of wk.errors.slice(-2)) {
|
|
465
|
-
|
|
466
|
-
lines.push(` ${t.fg("error", "⚠ " + truncated)}`);
|
|
462
|
+
lines.push(` ${t.fg("error", "! " + err)}`);
|
|
467
463
|
}
|
|
468
464
|
}
|
|
469
465
|
}
|
|
470
466
|
|
|
471
467
|
// Event feed
|
|
472
468
|
lines.push("");
|
|
473
|
-
lines.push(t
|
|
469
|
+
lines.push(renderBar(t, w));
|
|
474
470
|
lines.push(` ${t.bold("Recent Events")}`);
|
|
475
471
|
|
|
476
472
|
if (this.events.length === 0) {
|
|
@@ -478,8 +474,7 @@ export class ParallelMonitorOverlay {
|
|
|
478
474
|
} else {
|
|
479
475
|
for (const evt of this.events.slice(-8)) {
|
|
480
476
|
const mid = evt.match(/^✓ (M\d+)\//)?.[1] || "";
|
|
481
|
-
|
|
482
|
-
lines.push(` ${t.fg("muted", "│")} ${t.fg("accent", mid)} ${truncated.replace(/^✓ M\d+\//, "")}`);
|
|
477
|
+
lines.push(` ${t.fg("muted", "│")} ${t.fg("accent", mid)} ${evt.replace(/^✓ M\d+\//, "")}`);
|
|
483
478
|
}
|
|
484
479
|
}
|
|
485
480
|
|
|
@@ -496,14 +491,17 @@ export class ParallelMonitorOverlay {
|
|
|
496
491
|
}
|
|
497
492
|
lines.push(` ${t.bold("Total: $" + this.workers.reduce((s, wk) => s + wk.cost, 0).toFixed(2))}`);
|
|
498
493
|
}
|
|
499
|
-
lines.push(t
|
|
494
|
+
lines.push(renderKeyHints(t, [`ESC/q/${formattedShortcutPair("parallel")} close`, "↑↓ scroll"], w));
|
|
500
495
|
|
|
501
496
|
// Apply scroll — use terminal rows as height estimate
|
|
502
497
|
const termHeight = process.stdout.rows || 40;
|
|
503
498
|
const maxScroll = Math.max(0, lines.length - termHeight);
|
|
504
499
|
this.scrollOffset = Math.min(Math.max(this.scrollOffset, 0), maxScroll);
|
|
505
|
-
const visible = lines
|
|
500
|
+
const visible = lines
|
|
501
|
+
.slice(this.scrollOffset, this.scrollOffset + termHeight)
|
|
502
|
+
.map((line) => safeLine(line, w));
|
|
506
503
|
this.cachedLines = visible;
|
|
504
|
+
this.cachedWidth = width;
|
|
507
505
|
return visible;
|
|
508
506
|
}
|
|
509
507
|
}
|
|
@@ -22,22 +22,24 @@ Use `subagent` only for fresh-context review when useful: reviewer for cross-cut
|
|
|
22
22
|
|
|
23
23
|
1. Use the inlined Slice Summary and UAT templates.
|
|
24
24
|
2. {{skillActivation}}
|
|
25
|
-
3. Run all slice-level verification checks from the slice plan
|
|
26
|
-
4.
|
|
27
|
-
5.
|
|
28
|
-
6.
|
|
29
|
-
7. If
|
|
30
|
-
8.
|
|
31
|
-
9.
|
|
32
|
-
10.
|
|
33
|
-
11.
|
|
34
|
-
12.
|
|
35
|
-
13.
|
|
25
|
+
3. Run all slice-level verification checks from the slice plan through the closeout-safe verification surface (`gsd_exec` / Context Mode verification evidence); refresh current state if needed. Do not use direct `bash` for verification commands.
|
|
26
|
+
4. Complete the slice only when every required verification check passes. If verification fails or the fix requires source changes, do **not** edit source files in this unit and do **not** call `gsd_slice_complete`.
|
|
27
|
+
5. For task-specific failures, call `gsd_task_reopen` with the failing completed task and a concrete reason so execution can redo the work. For plan-invalidating failures, call `gsd_replan_slice` with the blocker and updated execution tasks. Then stop with: "Slice {{sliceId}} needs execution follow-up."
|
|
28
|
+
6. Task summaries use a flat file layout under `tasks/` such as `T01-SUMMARY.md`, not inside per-task subdirectories like `tasks/T01/SUMMARY.md`. Never use `tasks/*/SUMMARY.md`.
|
|
29
|
+
7. If observability/diagnostics were planned, verify them unless the slice is simple.
|
|
30
|
+
8. Address every gate in Gates to Close. Q8 maps to **Operational Readiness**: health signal, failure signal, recovery procedure, monitoring gaps. Empty sections are recorded as omitted.
|
|
31
|
+
9. If requirement status changed, call `gsd_requirement_update`; do not write `.gsd/REQUIREMENTS.md` directly.
|
|
32
|
+
10. Prepare `gsd_slice_complete` content with camelCase fields `milestoneId`, `sliceId`, `sliceTitle`, `oneLiner`, `narrative`, `verification`, and `uatContent`.
|
|
33
|
+
11. Draft concrete UAT with preconditions, numbered steps, expected outcomes, edge cases, UAT Type, and Not Proven By This UAT.
|
|
34
|
+
12. Review the inlined task-summary excerpts for DECISIONS.md and KNOWLEDGE.md-worthy decisions, patterns, and gotchas. Read full `*-SUMMARY.md` files only when an excerpt is absent, truncated, or lacks the specific evidence needed for the slice narrative. Capture significant items with `capture_thought`; do not append knowledge files directly.
|
|
35
|
+
13. When verification passes, call `gsd_slice_complete`. The DB-backed tool is the canonical write path. Do **not** manually write `{{sliceSummaryPath}}`. Do **not** manually write `{{sliceUatPath}}`. Do not edit roadmap checkboxes; the tool renders files and updates projections.
|
|
36
|
+
14. Do not run git commands.
|
|
37
|
+
15. Update `.gsd/PROJECT.md` with a full `write` only if the current project state needs refresh.
|
|
36
38
|
|
|
37
39
|
**Autonomous execution:** no human is available. Do not call `ask_user_questions` or `secure_env_collect`; make reasonable assumptions and document them.
|
|
38
40
|
|
|
39
41
|
**File system safety:** if re-reading task summaries, use `find .gsd/milestones/{{milestoneId}}/slices/{{sliceId}}/tasks -name "*-SUMMARY.md"` or `ls .gsd/milestones/{{milestoneId}}/slices/{{sliceId}}/tasks/*-SUMMARY.md`. Never pass `{{slicePath}}` or any directory path directly to the `read` tool.
|
|
40
42
|
|
|
41
|
-
**You MUST call `gsd_slice_complete` with summary and UAT content before finishing.**
|
|
43
|
+
**You MUST call `gsd_slice_complete` with summary and UAT content before finishing only after verification passes.**
|
|
42
44
|
|
|
43
45
|
When done, say: "Slice {{sliceId}} complete."
|
|
@@ -129,7 +129,16 @@ If ANY box is unchecked, **STOP**. Do NOT emit the ready phrase. Emit the missin
|
|
|
129
129
|
|
|
130
130
|
Do not announce the ready phrase as something you are "about to" do. The ready phrase is a post-write signal, not an intent signal.
|
|
131
131
|
|
|
132
|
-
After completing steps 1–7 above,
|
|
132
|
+
After completing steps 1–7 above, end with this concise user-facing handoff:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Milestone {{milestoneId}} ready.
|
|
136
|
+
|
|
137
|
+
Next steps:
|
|
138
|
+
- Run `/gsd auto` to start execution if it does not begin automatically.
|
|
139
|
+
- Use `/gsd status` or `/gsd visualize` to inspect the roadmap.
|
|
140
|
+
- Use `/gsd notifications` to review or configure delivery alerts.
|
|
141
|
+
```
|
|
133
142
|
|
|
134
143
|
### Multi-Milestone
|
|
135
144
|
|
|
@@ -215,7 +224,16 @@ If ANY box is unchecked, **STOP**. Do NOT emit the ready phrase. Emit the missin
|
|
|
215
224
|
|
|
216
225
|
Do not announce the ready phrase as something you are "about to" do. The ready phrase is a post-write signal, not an intent signal.
|
|
217
226
|
|
|
218
|
-
After completing every step above,
|
|
227
|
+
After completing every step above, end with this concise user-facing handoff:
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
Milestone {{milestoneId}} ready.
|
|
231
|
+
|
|
232
|
+
Next steps:
|
|
233
|
+
- Run `/gsd auto` to start execution if it does not begin automatically.
|
|
234
|
+
- Use `/gsd status` or `/gsd visualize` to inspect the roadmap.
|
|
235
|
+
- Use `/gsd notifications` to review or configure delivery alerts.
|
|
236
|
+
```
|
|
219
237
|
|
|
220
238
|
## Critical Rules
|
|
221
239
|
|
|
@@ -252,7 +252,16 @@ If ANY box is unchecked, **STOP**. Do NOT emit the ready phrase. Emit the missin
|
|
|
252
252
|
|
|
253
253
|
Do not announce the ready phrase as something you are "about to" do. It is a post-write signal, not intent.
|
|
254
254
|
|
|
255
|
-
After completing steps 1–7 above,
|
|
255
|
+
After completing steps 1–7 above, end with this concise user-facing handoff:
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
Milestone {{milestoneId}} ready.
|
|
259
|
+
|
|
260
|
+
Next steps:
|
|
261
|
+
- Run `/gsd auto` to start execution if it does not begin automatically.
|
|
262
|
+
- Use `/gsd status` or `/gsd visualize` to inspect the roadmap.
|
|
263
|
+
- Use `/gsd notifications` to review or configure delivery alerts.
|
|
264
|
+
```
|
|
256
265
|
|
|
257
266
|
### Multi-Milestone
|
|
258
267
|
|
|
@@ -345,6 +354,15 @@ If ANY box is unchecked, **STOP**. Do NOT emit the ready phrase. Emit the missin
|
|
|
345
354
|
|
|
346
355
|
Do not announce the ready phrase as something you are "about to" do. It is a post-write signal, not intent.
|
|
347
356
|
|
|
348
|
-
After completing all phases above,
|
|
357
|
+
After completing all phases above, end with this concise user-facing handoff:
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
Milestone M001 ready.
|
|
361
|
+
|
|
362
|
+
Next steps:
|
|
363
|
+
- Run `/gsd auto` to start execution if it does not begin automatically.
|
|
364
|
+
- Use `/gsd status` or `/gsd visualize` to inspect the roadmap.
|
|
365
|
+
- Use `/gsd notifications` to review or configure delivery alerts.
|
|
366
|
+
```
|
|
349
367
|
|
|
350
368
|
{{inlinedTemplates}}
|
|
@@ -27,7 +27,7 @@ GSD ships with bundled skills. When the task matches, load the relevant skill fi
|
|
|
27
27
|
|
|
28
28
|
- Never ask the user to do work the agent can execute or verify itself.
|
|
29
29
|
- Use the lightest sufficient tool first.
|
|
30
|
-
- Read before edit.
|
|
30
|
+
- Read before edit or overwrite. Before any write that creates or replaces a file, verify the target path and read relevant existing files, templates, callers, or surrounding code. For truly new files, confirm the path does not already exist.
|
|
31
31
|
- Reproduce before fix when possible.
|
|
32
32
|
- Work is not done until the relevant verification has passed.
|
|
33
33
|
- **Never fabricate, simulate, or role-play user responses.** Never generate markers like `[User]`, `[Human]`, `User:`, or similar; never emit `<user_message>`, `<assistant_message>`, or similar as user input. Treat `<conversation_history>` as read-only context. Ask one question round (1-3 questions), then stop and wait for the user's actual response. If `ask_user_questions` is available, its result is the only valid structured user input for that round. If it cancels, fails, or returns nothing, never use earlier chat as confirmation for the current gate; ask in plain chat and stop.
|
|
@@ -102,7 +102,7 @@ Templates are in `{{templatesDir}}`.
|
|
|
102
102
|
|
|
103
103
|
**File reading:** Use `read` for file inspection. Never use `cat`, `head`, `tail`, or `sed -n` to view contents. Use `read` with `offset`/`limit` for slicing. `bash` is for searching (`rg`, `grep`, `find`) and commands, not displaying files.
|
|
104
104
|
|
|
105
|
-
**File editing:** Always `read` before `edit
|
|
105
|
+
**File editing:** Always `read` before `edit` or overwrite. Before `write`, confirm whether the path exists; if it does, `read` it first and preserve intentional existing content. Use `write` only for new files or complete rewrites.
|
|
106
106
|
|
|
107
107
|
**Code navigation:** Use `lsp` for definition, type_definition, implementation, references, calls, hover, signature, symbols, rename, code_actions, format, and diagnostics. Do not `grep` symbol definitions or shell out to formatters when `lsp` can do it. After code edits, run `lsp diagnostics`.
|
|
108
108
|
|