gsd-pi 2.81.0 → 2.82.0-dev.2841a1e44
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 +63 -32
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +3 -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/cmux/index.js +5 -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 +176 -125
- package/dist/resources/extensions/gsd/auto-prompts.js +13 -5
- 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 +38 -26
- 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/subagent-input.js +16 -7
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +3 -1
- package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +4 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -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-bootstrap.js +5 -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/unit-context-manifest.js +25 -2
- package/dist/resources/extensions/gsd/verification-verdict.js +26 -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/resources/extensions/subagent/index.js +448 -78
- package/dist/resources/extensions/subagent/launch.js +77 -0
- package/dist/resources/extensions/subagent/run-store.js +148 -0
- package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
- package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/dist/resources/extensions/visual-brief/index.js +5 -0
- package/dist/resources/extensions/visual-brief/page-contract.js +122 -0
- package/dist/resources/extensions/visual-brief/prompts.js +111 -0
- 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 +11 -11
- 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 +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 +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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 +4 -4
- 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 +2 -2
- 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 +5 -5
- 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 +5 -5
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +11 -11
- 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-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 +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
- package/dist/web/standalone/.next/static/chunks/{8359.e059d86b255fce1c.js → 8359.7eb3bb8f8ecf4c01.js} +2 -2
- 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/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-6a95bc41e0f7ec89.js} +1 -1
- package/dist/web/standalone/.next/static/css/0262768ec1b89d34.css +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 +5 -4
- 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/GSD-WORKFLOW.md +3 -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/cmux/index.ts +6 -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 +201 -138
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -5
- 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 +46 -38
- 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/subagent-input.ts +16 -6
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +3 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
- package/src/resources/extensions/gsd/commands/catalog.ts +4 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +25 -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-bootstrap.ts +10 -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/brief-command.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
- package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -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/evidence-cross-ref.test.ts +38 -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 +81 -3
- 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/unit-context-manifest.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -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 +34 -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/unit-context-manifest.ts +35 -2
- package/src/resources/extensions/gsd/verification-verdict.ts +47 -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/src/resources/extensions/subagent/index.ts +567 -103
- package/src/resources/extensions/subagent/launch.ts +131 -0
- package/src/resources/extensions/subagent/run-store.ts +218 -0
- package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
- package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
- package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
- package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/src/resources/extensions/visual-brief/index.ts +8 -0
- package/src/resources/extensions/visual-brief/page-contract.ts +134 -0
- package/src/resources/extensions/visual-brief/prompts.ts +147 -0
- package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +172 -0
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- 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/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Qgr2B_MRhPxC0z8fwv4vT}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Qgr2B_MRhPxC0z8fwv4vT}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief page contract
|
|
2
|
+
|
|
3
|
+
import type { VisualBriefMode } from "./prompts.js";
|
|
4
|
+
|
|
5
|
+
export interface VisualBriefModeProfile {
|
|
6
|
+
goal: string;
|
|
7
|
+
evidenceSteps: readonly string[];
|
|
8
|
+
sections: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const VISUAL_BRIEF_PAGE_RULES: readonly string[] = [
|
|
12
|
+
"Use Mermaid for topology-heavy diagrams when it improves readability.",
|
|
13
|
+
"Use semantic HTML tables for comparisons, audits, matrices, status reports, and dense lists.",
|
|
14
|
+
"Use CSS grid/card layouts when text-heavy module details matter more than edge routing.",
|
|
15
|
+
"For 15+ entities, use a small overview diagram plus detailed cards instead of one crowded diagram.",
|
|
16
|
+
"Include accessible headings, readable contrast, responsive tables, and no horizontal body overflow.",
|
|
17
|
+
"Include source references for factual claims, file relationships, commands, and inferred behavior.",
|
|
18
|
+
"Keep the design distinctive and appropriate to the content; avoid generic purple/blue gradient styling.",
|
|
19
|
+
"CDN libraries are acceptable for Mermaid or charts, but the page must still show useful written context if a CDN fails.",
|
|
20
|
+
"Do not include provider-specific claims, branding, or assumptions.",
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
export function getVisualBriefModeProfile(mode: VisualBriefMode, slides: boolean): VisualBriefModeProfile {
|
|
24
|
+
if (slides || mode === "slides") {
|
|
25
|
+
return {
|
|
26
|
+
goal: "Turn the subject into a concise, visually paced deck that someone can present or skim quickly.",
|
|
27
|
+
evidenceSteps: [
|
|
28
|
+
"Identify the intended audience and the main decision or understanding the deck should support.",
|
|
29
|
+
"Read the relevant files, diffs, docs, or command output before making factual claims.",
|
|
30
|
+
"Extract the smallest set of concepts, risks, and examples needed for a clear narrative.",
|
|
31
|
+
],
|
|
32
|
+
sections: [
|
|
33
|
+
"Title slide with the subject and one-line takeaway",
|
|
34
|
+
"Problem or context slide",
|
|
35
|
+
"System or concept diagram slide",
|
|
36
|
+
"Key evidence slide",
|
|
37
|
+
"Risks, tradeoffs, or unknowns slide",
|
|
38
|
+
"Recommended next steps slide",
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
switch (mode) {
|
|
44
|
+
case "plan":
|
|
45
|
+
return {
|
|
46
|
+
goal: "Create a visual implementation plan that is detailed enough to guide coding without pretending uncertain facts are verified.",
|
|
47
|
+
evidenceSteps: [
|
|
48
|
+
"Read the relevant exports, immediate callers, tests, docs, and shared utilities.",
|
|
49
|
+
"Identify the likely file changes, existing conventions, edge cases, and test requirements.",
|
|
50
|
+
"Mark any assumption that cannot be verified from the repository.",
|
|
51
|
+
],
|
|
52
|
+
sections: [
|
|
53
|
+
"Feature summary and scope boundaries",
|
|
54
|
+
"Before/after workflow comparison",
|
|
55
|
+
"Architecture or state-flow diagram",
|
|
56
|
+
"Files to change with precise responsibilities",
|
|
57
|
+
"API, command, or data-shape changes",
|
|
58
|
+
"Edge cases and failure behavior",
|
|
59
|
+
"Test plan with success and failure paths",
|
|
60
|
+
"Open questions and assumptions",
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
case "diff":
|
|
64
|
+
return {
|
|
65
|
+
goal: "Review the current changes visually so risk, intent, and affected areas are easy to scan.",
|
|
66
|
+
evidenceSteps: [
|
|
67
|
+
"Inspect git status plus staged and unstaged diffs.",
|
|
68
|
+
"Read changed files where needed to understand behavior, not just line changes.",
|
|
69
|
+
"Separate confirmed findings from questions or residual risk.",
|
|
70
|
+
],
|
|
71
|
+
sections: [
|
|
72
|
+
"Change map by file and subsystem",
|
|
73
|
+
"Intent summary inferred from the diff",
|
|
74
|
+
"Risk heatmap",
|
|
75
|
+
"Behavior changes and compatibility notes",
|
|
76
|
+
"Test coverage matrix",
|
|
77
|
+
"Actionable findings and open questions",
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
case "recap":
|
|
81
|
+
return {
|
|
82
|
+
goal: "Create a context-switching snapshot that helps someone regain the project mental model quickly.",
|
|
83
|
+
evidenceSteps: [
|
|
84
|
+
"Read the current project docs, recent git status, relevant plans, and high-signal source files.",
|
|
85
|
+
"Identify active work, stable architecture, uncertain areas, and likely next actions.",
|
|
86
|
+
"Prefer concrete file references and verified facts over broad summaries.",
|
|
87
|
+
],
|
|
88
|
+
sections: [
|
|
89
|
+
"Current project state",
|
|
90
|
+
"Architecture map",
|
|
91
|
+
"Active work and changed files",
|
|
92
|
+
"Important decisions and constraints",
|
|
93
|
+
"Risks or unresolved questions",
|
|
94
|
+
"Recommended next actions",
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
case "table":
|
|
98
|
+
return {
|
|
99
|
+
goal: "Turn dense structured information into an accessible visual table that is easier to compare than terminal output.",
|
|
100
|
+
evidenceSteps: [
|
|
101
|
+
"Identify the row and column meanings before choosing table structure.",
|
|
102
|
+
"Verify each cell from source material, command output, or code when possible.",
|
|
103
|
+
"Use status labels and short notes so the table remains scannable.",
|
|
104
|
+
],
|
|
105
|
+
sections: [
|
|
106
|
+
"Short summary of what is being compared",
|
|
107
|
+
"Primary responsive table with sticky header",
|
|
108
|
+
"Legend for statuses or scoring",
|
|
109
|
+
"Notable patterns, outliers, and caveats",
|
|
110
|
+
"Source references",
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
case "diagram":
|
|
114
|
+
return {
|
|
115
|
+
goal: "Explain the subject visually with a diagram plus enough context to make the diagram trustworthy.",
|
|
116
|
+
evidenceSteps: [
|
|
117
|
+
"Read relevant files, docs, or command output before drawing relationships.",
|
|
118
|
+
"Choose the right diagram type: flowchart, sequence, state, ER/schema, C4-style, timeline, or dashboard.",
|
|
119
|
+
"Keep complex diagrams readable by splitting overview and details.",
|
|
120
|
+
],
|
|
121
|
+
sections: [
|
|
122
|
+
"One-line takeaway",
|
|
123
|
+
"Primary diagram with readable labels",
|
|
124
|
+
"Component or step details",
|
|
125
|
+
"Data/control flow notes",
|
|
126
|
+
"Assumptions, limitations, and source references",
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function formatPageRules(rules: readonly string[] = VISUAL_BRIEF_PAGE_RULES): string {
|
|
133
|
+
return rules.map((rule) => ` - ${rule}`).join("\n");
|
|
134
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief prompt construction
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
createVisualBriefArtifactPolicy,
|
|
5
|
+
formatArtifactPolicy,
|
|
6
|
+
} from "./artifact-policy.js";
|
|
7
|
+
import {
|
|
8
|
+
formatPageRules,
|
|
9
|
+
getVisualBriefModeProfile,
|
|
10
|
+
} from "./page-contract.js";
|
|
11
|
+
|
|
12
|
+
export type VisualBriefMode = "diagram" | "plan" | "diff" | "recap" | "table" | "slides";
|
|
13
|
+
|
|
14
|
+
export interface VisualBriefRequest {
|
|
15
|
+
mode: VisualBriefMode;
|
|
16
|
+
subject: string;
|
|
17
|
+
slides: boolean;
|
|
18
|
+
rawArgs: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface VisualBriefModeInfo {
|
|
22
|
+
mode: VisualBriefMode;
|
|
23
|
+
aliases: readonly string[];
|
|
24
|
+
description: string;
|
|
25
|
+
defaultSubject?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const VISUAL_BRIEF_MODES: readonly VisualBriefModeInfo[] = [
|
|
29
|
+
{
|
|
30
|
+
mode: "diagram",
|
|
31
|
+
aliases: ["diagram", "flow", "architecture", "arch", "web-diagram"],
|
|
32
|
+
description: "Generate a visual system, architecture, flow, state, or data diagram",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
mode: "plan",
|
|
36
|
+
aliases: ["plan", "visual-plan", "implementation-plan"],
|
|
37
|
+
description: "Generate a visual implementation plan with risks, files, edge cases, and tests",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
mode: "diff",
|
|
41
|
+
aliases: ["diff", "review", "diff-review", "changes"],
|
|
42
|
+
description: "Generate a visual review of staged and unstaged changes",
|
|
43
|
+
defaultSubject: "the current staged and unstaged repository changes",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
mode: "recap",
|
|
47
|
+
aliases: ["recap", "project-recap", "summary"],
|
|
48
|
+
description: "Generate a visual project recap for context switching",
|
|
49
|
+
defaultSubject: "the current project",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
mode: "table",
|
|
53
|
+
aliases: ["table", "comparison", "matrix", "audit"],
|
|
54
|
+
description: "Render a dense comparison, audit, or status report as a readable HTML table",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
mode: "slides",
|
|
58
|
+
aliases: ["slides", "deck", "slide-deck"],
|
|
59
|
+
description: "Generate a visual slide deck",
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
export const VISUAL_BRIEF_USAGE =
|
|
64
|
+
"Usage: /gsd brief <diagram|plan|diff|recap|table|slides> [topic] [--slides]";
|
|
65
|
+
|
|
66
|
+
export function parseVisualBriefArgs(args: string): VisualBriefRequest | null {
|
|
67
|
+
const rawArgs = args.trim();
|
|
68
|
+
if (!rawArgs) return null;
|
|
69
|
+
|
|
70
|
+
const tokens = rawArgs.split(/\s+/).filter(Boolean);
|
|
71
|
+
const slidesFlag = tokens.includes("--slides");
|
|
72
|
+
const contentTokens = tokens.filter((token) => token !== "--slides");
|
|
73
|
+
if (contentTokens.length === 0) return null;
|
|
74
|
+
|
|
75
|
+
const firstToken = normalizeToken(contentTokens[0] ?? "");
|
|
76
|
+
const modeInfo = findMode(firstToken);
|
|
77
|
+
const mode = modeInfo?.mode ?? "diagram";
|
|
78
|
+
const subjectTokens = modeInfo ? contentTokens.slice(1) : contentTokens;
|
|
79
|
+
const subject = subjectTokens.join(" ").trim() || modeInfo?.defaultSubject;
|
|
80
|
+
|
|
81
|
+
if (!subject) return null;
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
mode,
|
|
85
|
+
subject,
|
|
86
|
+
slides: slidesFlag || mode === "slides",
|
|
87
|
+
rawArgs,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function buildVisualBriefPrompt(
|
|
92
|
+
request: VisualBriefRequest,
|
|
93
|
+
options: { outputDir: string },
|
|
94
|
+
): string {
|
|
95
|
+
const profile = getVisualBriefModeProfile(request.mode, request.slides);
|
|
96
|
+
const artifactPolicy = createVisualBriefArtifactPolicy(options.outputDir);
|
|
97
|
+
const outputFormat = request.slides ? "slide deck" : "scrollable explanation page";
|
|
98
|
+
|
|
99
|
+
return `Create a visual brief as a single HTML file.
|
|
100
|
+
|
|
101
|
+
## Request
|
|
102
|
+
|
|
103
|
+
- Mode: ${request.mode}
|
|
104
|
+
- Subject: ${request.subject}
|
|
105
|
+
- Output format: ${outputFormat}
|
|
106
|
+
- Output directory: ${options.outputDir}
|
|
107
|
+
|
|
108
|
+
## Goal
|
|
109
|
+
|
|
110
|
+
${profile.goal}
|
|
111
|
+
|
|
112
|
+
## Required workflow
|
|
113
|
+
|
|
114
|
+
1. Gather evidence before writing the page.
|
|
115
|
+
${profile.evidenceSteps.map((step) => ` - ${step}`).join("\n")}
|
|
116
|
+
2. Build the visual structure from the evidence.
|
|
117
|
+
${formatPageRules()}
|
|
118
|
+
3. Write the HTML file.
|
|
119
|
+
${formatArtifactPolicy(artifactPolicy).split("\n").map((line) => ` ${line}`).join("\n")}
|
|
120
|
+
|
|
121
|
+
## Page sections
|
|
122
|
+
|
|
123
|
+
${profile.sections.map((section) => `- ${section}`).join("\n")}
|
|
124
|
+
|
|
125
|
+
## Final response
|
|
126
|
+
|
|
127
|
+
Keep the chat response short: state the output file path, whether the browser opened, and any uncertainty discovered during evidence gathering.`;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function getVisualBriefCompletions(prefix: string): Array<{ value: string; label: string; description: string }> {
|
|
131
|
+
const firstPart = prefix.trim().split(/\s+/)[0] ?? "";
|
|
132
|
+
return VISUAL_BRIEF_MODES
|
|
133
|
+
.filter((mode) => mode.mode.startsWith(firstPart) || mode.aliases.some((alias) => alias.startsWith(firstPart)))
|
|
134
|
+
.map((mode) => ({
|
|
135
|
+
value: mode.mode,
|
|
136
|
+
label: mode.mode,
|
|
137
|
+
description: mode.description,
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function findMode(token: string): VisualBriefModeInfo | undefined {
|
|
142
|
+
return VISUAL_BRIEF_MODES.find((mode) => mode.aliases.includes(token));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function normalizeToken(token: string): string {
|
|
146
|
+
return token.trim().toLowerCase();
|
|
147
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// GSD-2 + Visual Brief command tests
|
|
2
|
+
|
|
3
|
+
import test from "node:test";
|
|
4
|
+
import assert from "node:assert/strict";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { readManifest } from "@gsd/pi-coding-agent";
|
|
8
|
+
import {
|
|
9
|
+
createVisualBriefArtifactPolicy,
|
|
10
|
+
formatArtifactPolicy,
|
|
11
|
+
getVisualBriefOutputDir,
|
|
12
|
+
} from "../artifact-policy.ts";
|
|
13
|
+
import {
|
|
14
|
+
getVisualBriefModeProfile,
|
|
15
|
+
VISUAL_BRIEF_PAGE_RULES,
|
|
16
|
+
} from "../page-contract.ts";
|
|
17
|
+
import {
|
|
18
|
+
buildVisualBriefPrompt,
|
|
19
|
+
getVisualBriefCompletions,
|
|
20
|
+
parseVisualBriefArgs,
|
|
21
|
+
VISUAL_BRIEF_MODES,
|
|
22
|
+
VISUAL_BRIEF_USAGE,
|
|
23
|
+
} from "../prompts.ts";
|
|
24
|
+
|
|
25
|
+
test("keeps Visual Brief command surface under /gsd brief", () => {
|
|
26
|
+
const manifest = readManifest(fileURLToPath(new URL("..", import.meta.url)));
|
|
27
|
+
|
|
28
|
+
assert.equal(manifest?.id, "visual-brief");
|
|
29
|
+
assert.equal(manifest?.provides?.commands, undefined);
|
|
30
|
+
assert.match(VISUAL_BRIEF_USAGE, /^Usage: \/gsd brief/);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("parses explicit modes and slide output", () => {
|
|
34
|
+
const request = parseVisualBriefArgs("plan --slides browser tools verification flow");
|
|
35
|
+
|
|
36
|
+
assert.deepEqual(request, {
|
|
37
|
+
mode: "plan",
|
|
38
|
+
subject: "browser tools verification flow",
|
|
39
|
+
slides: true,
|
|
40
|
+
rawArgs: "plan --slides browser tools verification flow",
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("defaults freeform input to diagram mode", () => {
|
|
45
|
+
const request = parseVisualBriefArgs("authentication sequence");
|
|
46
|
+
|
|
47
|
+
assert.equal(request?.mode, "diagram");
|
|
48
|
+
assert.equal(request?.subject, "authentication sequence");
|
|
49
|
+
assert.equal(request?.slides, false);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("parses supported aliases without registering command aliases", () => {
|
|
53
|
+
const review = parseVisualBriefArgs("review release branch changes");
|
|
54
|
+
const deck = parseVisualBriefArgs("deck launch recap");
|
|
55
|
+
|
|
56
|
+
assert.equal(review?.mode, "diff");
|
|
57
|
+
assert.equal(review?.subject, "release branch changes");
|
|
58
|
+
assert.equal(deck?.mode, "slides");
|
|
59
|
+
assert.equal(deck?.slides, true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("rejects flag-only input as usage", () => {
|
|
63
|
+
assert.equal(parseVisualBriefArgs("--slides"), null);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("uses current changes as the diff subject when none is provided", () => {
|
|
67
|
+
const request = parseVisualBriefArgs("diff");
|
|
68
|
+
|
|
69
|
+
assert.equal(request?.mode, "diff");
|
|
70
|
+
assert.equal(request?.subject, "the current staged and unstaged repository changes");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("builds a provider-neutral prompt with output instructions", () => {
|
|
74
|
+
const request = parseVisualBriefArgs("table release readiness matrix");
|
|
75
|
+
assert.ok(request, "request should parse");
|
|
76
|
+
|
|
77
|
+
const prompt = buildVisualBriefPrompt(request, { outputDir: "/tmp/gsd-diagrams" });
|
|
78
|
+
|
|
79
|
+
assert.match(prompt, /Mode: table/);
|
|
80
|
+
assert.match(prompt, /Subject: release readiness matrix/);
|
|
81
|
+
assert.match(prompt, /Output directory: \/tmp\/gsd-diagrams/);
|
|
82
|
+
assert.match(prompt, /Do not include provider-specific claims/);
|
|
83
|
+
assert.match(prompt, /Use semantic HTML tables/);
|
|
84
|
+
assert.match(prompt, /Use a descriptive kebab-case filename/);
|
|
85
|
+
assert.match(prompt, /one self-contained responsive HTML file/);
|
|
86
|
+
assert.match(prompt, /macOS: open/);
|
|
87
|
+
assert.match(prompt, /absolute file path/);
|
|
88
|
+
assert.ok(prompt.indexOf("Gather evidence before writing the page") < prompt.indexOf("Write the HTML file"));
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("returns first-argument completions for visual brief modes", () => {
|
|
92
|
+
const completions = getVisualBriefCompletions("di");
|
|
93
|
+
|
|
94
|
+
assert.ok(
|
|
95
|
+
completions.some((completion) => completion.value === "diagram"),
|
|
96
|
+
"diagram should be suggested for a matching prefix",
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const allCompletions = getVisualBriefCompletions("");
|
|
100
|
+
for (const mode of VISUAL_BRIEF_MODES) {
|
|
101
|
+
assert.ok(
|
|
102
|
+
allCompletions.some((completion) => completion.value === mode.mode),
|
|
103
|
+
`${mode.mode} should be suggested without a prefix`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("generated prompts include page contract rules and sections for every mode", () => {
|
|
109
|
+
for (const mode of VISUAL_BRIEF_MODES) {
|
|
110
|
+
const request = parseVisualBriefArgs(`${mode.mode} scoped subject`);
|
|
111
|
+
assert.ok(request, `${mode.mode} request should parse`);
|
|
112
|
+
|
|
113
|
+
const prompt = buildVisualBriefPrompt(request, { outputDir: "/tmp/visual-brief" });
|
|
114
|
+
const profile = getVisualBriefModeProfile(request.mode, request.slides);
|
|
115
|
+
|
|
116
|
+
for (const rule of VISUAL_BRIEF_PAGE_RULES) {
|
|
117
|
+
assert.match(prompt, new RegExp(escapeRegExp(rule)), `${mode.mode} prompt should include page rule: ${rule}`);
|
|
118
|
+
}
|
|
119
|
+
for (const step of profile.evidenceSteps) {
|
|
120
|
+
assert.match(prompt, new RegExp(escapeRegExp(step)), `${mode.mode} prompt should include evidence step: ${step}`);
|
|
121
|
+
}
|
|
122
|
+
for (const section of profile.sections) {
|
|
123
|
+
assert.match(prompt, new RegExp(escapeRegExp(section)), `${mode.mode} prompt should include section: ${section}`);
|
|
124
|
+
}
|
|
125
|
+
assert.doesNotMatch(prompt, /\/gsd visualize/);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("diff prompt requires change evidence and review sections", () => {
|
|
130
|
+
const request = parseVisualBriefArgs("diff");
|
|
131
|
+
assert.ok(request, "diff request should parse");
|
|
132
|
+
const prompt = buildVisualBriefPrompt(request, { outputDir: "/tmp/visual-brief" });
|
|
133
|
+
const profile = getVisualBriefModeProfile("diff", false);
|
|
134
|
+
|
|
135
|
+
assert.ok(VISUAL_BRIEF_PAGE_RULES.includes("Include accessible headings, readable contrast, responsive tables, and no horizontal body overflow."));
|
|
136
|
+
assert.ok(
|
|
137
|
+
profile.sections.includes("Test coverage matrix"),
|
|
138
|
+
"diff review should include test coverage matrix section",
|
|
139
|
+
);
|
|
140
|
+
assert.ok(
|
|
141
|
+
profile.evidenceSteps.includes("Inspect git status plus staged and unstaged diffs."),
|
|
142
|
+
"diff review should require inspecting repository changes before claims",
|
|
143
|
+
);
|
|
144
|
+
assert.match(prompt, /Inspect git status plus staged and unstaged diffs/);
|
|
145
|
+
assert.match(prompt, /Change map by file and subsystem/);
|
|
146
|
+
assert.match(prompt, /Risk heatmap/);
|
|
147
|
+
assert.match(prompt, /Behavior changes and compatibility notes/);
|
|
148
|
+
assert.match(prompt, /Test coverage matrix/);
|
|
149
|
+
assert.match(prompt, /Actionable findings and open questions/);
|
|
150
|
+
assert.match(prompt, /Separate confirmed findings from questions or residual risk/);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
test("artifact policy formats output directory and opener guidance", () => {
|
|
154
|
+
const policy = createVisualBriefArtifactPolicy("/tmp/visual-brief");
|
|
155
|
+
const text = formatArtifactPolicy(policy);
|
|
156
|
+
|
|
157
|
+
assert.match(text, /\/tmp\/visual-brief/);
|
|
158
|
+
assert.match(text, /kebab-case filename/);
|
|
159
|
+
assert.match(text, /self-contained responsive HTML file/);
|
|
160
|
+
assert.match(text, /macOS: open/);
|
|
161
|
+
assert.match(text, /Linux: xdg-open/);
|
|
162
|
+
assert.match(text, /Windows: cmd \/c start/);
|
|
163
|
+
assert.match(text, /absolute file path/);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test("artifact output directory is under the configured GSD agent directory", () => {
|
|
167
|
+
assert.equal(getVisualBriefOutputDir("/tmp/gsd-agent-test"), join("/tmp/gsd-agent-test", "diagrams"));
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
function escapeRegExp(value: string): string {
|
|
171
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
172
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2556],{42556:(e,s,t)=>{t.r(s),t.d(s,{VisualizerView:()=>q});var r=t(95155),n=t(12115),a=t(57518),i=t(33024),l=t(31025),d=t(89123),o=t(84980),c=t(49619),m=t(93219),x=t(6962),u=t(12651),h=t(20232),p=t(16950),f=t(30125),g=t(13545),b=t(21628),j=t(21362),v=t(41585),N=t(48368);let w=(0,t(90425).A)("file-braces",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1",key:"1oajmo"}],["path",{d:"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1",key:"mpwhp6"}]]);var y=t(6296),k=t(9199),A=t(91337),$=t(98234),C=t(44004),S=t(35082);let M=[{value:"progress",label:"Progress",Icon:i.A},{value:"deps",label:"Dependencies",Icon:l.A},{value:"metrics",label:"Metrics",Icon:d.A},{value:"timeline",label:"Timeline",Icon:o.A},{value:"agent",label:"Agent",Icon:c.A},{value:"changes",label:"Changes",Icon:m.A},{value:"export",label:"Export",Icon:x.A}];function D(e){switch(e){case"complete":case"done":return(0,r.jsx)(u.A,{className:"h-4 w-4 shrink-0 text-success"});case"active":return(0,r.jsx)(h.A,{className:"h-4 w-4 shrink-0 text-info"});case"pending":return(0,r.jsx)(p.A,{className:"h-4 w-4 shrink-0 text-muted-foreground/50"});case"parked":return(0,r.jsx)(f.A,{className:"h-4 w-4 shrink-0 text-muted-foreground"})}}function P({risk:e}){return(0,r.jsx)("span",{className:(0,A.cn)("inline-flex items-center rounded border px-2 py-0.5 text-[11px] font-semibold uppercase tracking-widest","high"===e?"bg-destructive/15 text-destructive border-destructive/25 ring-destructive/10":"medium"===e?"bg-warning/15 text-warning border-warning/25 ring-warning/10":"bg-success/15 text-success border-success/25 ring-success/10"),children:e})}function I(e){let s=new Date(e);return`${String(s.getHours()).padStart(2,"0")}:${String(s.getMinutes()).padStart(2,"0")}`}function T({children:e}){return(0,r.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,r.jsx)("div",{className:"h-3.5 w-0.5 rounded-full bg-foreground/25"}),(0,r.jsx)("h3",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:e})]})}function U({message:e,icon:s=g.A}){return(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-border py-16 text-center",children:[(0,r.jsx)("div",{className:"rounded-full border border-border bg-muted/50 p-4",children:(0,r.jsx)(s,{className:"h-6 w-6 text-muted-foreground"})}),(0,r.jsx)("p",{className:"text-sm font-medium text-muted-foreground",children:e})]})}function R({label:e,value:s,sub:t,accent:n}){return(0,r.jsxs)("div",{className:(0,A.cn)("relative overflow-hidden rounded-xl border bg-gradient-to-br to-transparent p-5",{sky:"from-info/8 border-info/20",emerald:"from-success/8 border-success/20",amber:"from-warning/8 border-warning/20",default:"from-transparent border-border"}[n??"default"]),children:[(0,r.jsx)("p",{className:"text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:e}),(0,r.jsx)("p",{className:"mt-2 text-2xl font-bold tabular-nums leading-none tracking-tight",children:s}),t&&(0,r.jsx)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:t})]})}function B({value:e,max:s,color:t="sky",animated:n=!1}){let a=s>0?Math.max(1,e/s*100):0;return(0,r.jsx)("div",{className:"h-2 w-full overflow-hidden rounded-full bg-muted",children:(0,r.jsx)("div",{className:(0,A.cn)("h-full rounded-full transition-all duration-700",{sky:"bg-info",emerald:"bg-success",amber:"bg-warning"}[t],n&&"animate-pulse"),style:{width:`${a}%`}})})}function _({data:e}){if(0===e.milestones.length)return(0,r.jsx)(U,{message:"No milestones defined yet.",icon:i.A});let s=e.milestones.flatMap(e=>e.slices),t={low:0,medium:0,high:0};for(let e of s)"high"===e.risk?t.high++:"medium"===e.risk?t.medium++:t.low++;return(0,r.jsxs)("div",{className:"space-y-6",children:[s.length>0&&(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Risk Heatmap"}),(0,r.jsx)("div",{className:"mt-5 space-y-3",children:e.milestones.filter(e=>e.slices.length>0).map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[(0,r.jsx)("span",{className:"w-16 shrink-0 font-mono text-xs font-medium text-muted-foreground",children:e.id}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:e.slices.map(e=>(0,r.jsx)("div",{title:`${e.id}: ${e.title} (${e.risk})`,className:(0,A.cn)("h-6 w-6 rounded cursor-default transition-transform hover:scale-125","high"===e.risk?"bg-destructive":"medium"===e.risk?"bg-warning":"bg-success")},e.id))})]},e.id))}),(0,r.jsxs)("div",{className:"mt-5 flex items-center gap-5 text-xs text-muted-foreground",children:[(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"h-3 w-3 rounded-sm bg-success"}),"Low (",t.low,")"]}),(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"h-3 w-3 rounded-sm bg-warning"}),"Medium (",t.medium,")"]}),(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"h-3 w-3 rounded-sm bg-destructive"}),"High (",t.high,")"]})]})]}),(0,r.jsx)("div",{className:"space-y-4",children:e.milestones.map(e=>(0,r.jsxs)("div",{className:"overflow-hidden rounded-xl border border-border bg-card",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between border-b border-border bg-muted/50 px-5 py-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[D(e.status),(0,r.jsx)("span",{className:"font-mono text-xs font-semibold text-muted-foreground",children:e.id}),(0,r.jsx)("span",{className:"text-sm font-semibold",children:e.title})]}),(0,r.jsx)("span",{className:(0,A.cn)("rounded-md px-2.5 py-1 text-xs font-semibold uppercase tracking-wider","complete"===e.status?"bg-success/15 text-success":"active"===e.status?"bg-info/15 text-info":"parked"===e.status?"bg-warning/15 text-warning":"bg-muted text-muted-foreground"),children:e.status})]}),("pending"===e.status||"parked"===e.status)&&e.dependsOn.length>0&&(0,r.jsxs)("div",{className:"px-5 py-2.5 text-xs text-muted-foreground border-b border-border/50",children:["Depends on ",e.dependsOn.join(", ")]}),e.slices.length>0&&(0,r.jsx)("div",{className:"divide-y divide-border/50",children:e.slices.map(e=>{let s=e.tasks.filter(e=>e.done).length,t=e.done?"done":e.active?"active":"pending";return(0,r.jsxs)("div",{className:"px-5 py-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[D(t),(0,r.jsx)("span",{className:"font-mono text-xs font-medium text-muted-foreground",children:e.id}),(0,r.jsx)("span",{className:"min-w-0 flex-1 truncate text-sm font-medium",children:e.title}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-2.5",children:[e.depends.length>0&&(0,r.jsxs)("span",{className:"text-xs text-muted-foreground",children:["deps: ",e.depends.join(", ")]}),e.tasks.length>0&&(0,r.jsxs)("span",{className:"font-mono text-xs font-medium text-muted-foreground",children:[s,"/",e.tasks.length]}),(0,r.jsx)(P,{risk:e.risk})]})]}),(e.active||e.tasks.some(e=>e.active))&&e.tasks.length>0&&(0,r.jsx)("div",{className:"ml-7 mt-3 space-y-1",children:e.tasks.map(e=>(0,r.jsxs)("div",{className:(0,A.cn)("flex items-center gap-2.5 rounded-lg px-3 py-2 transition-colors",e.active?"bg-info/8 border border-info/20":"hover:bg-muted/50"),children:[e.done?D("done"):e.active?D("active"):D("pending"),(0,r.jsx)("span",{className:"font-mono text-xs font-medium text-muted-foreground",children:e.id}),(0,r.jsx)("span",{className:(0,A.cn)("text-sm",e.done&&"text-muted-foreground line-through",e.active&&"font-semibold text-info",!e.done&&!e.active&&"text-muted-foreground"),children:e.title}),e.active&&(0,r.jsx)("span",{className:"ml-auto rounded-md bg-info/15 px-2 py-0.5 text-[11px] font-bold uppercase tracking-wider text-info",children:"running"})]},e.id))})]},e.id)})})]},e.id))})]})}function F({data:e}){let s,t=e.criticalPath,n=e.milestones.find(e=>"active"===e.status),a=e.milestones.filter(e=>e.dependsOn.length>0);return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Milestone Dependencies"}),(0,r.jsx)("div",{className:"mt-5",children:0===a.length?(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No milestone dependencies configured."}):(0,r.jsx)("div",{className:"flex flex-col gap-3",children:a.flatMap(e=>e.dependsOn.map(s=>(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"rounded-lg border border-info/25 bg-info/10 px-3 py-1.5 font-mono text-sm font-semibold text-info",children:s}),(0,r.jsx)(b.A,{className:"h-4 w-4 text-muted-foreground"}),(0,r.jsx)("span",{className:"rounded-lg border border-border bg-muted/50 px-3 py-1.5 font-mono text-sm font-medium",children:e.id}),(0,r.jsx)("span",{className:"text-sm text-muted-foreground",children:e.title})]},`${s}-${e.id}`)))})})]}),(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Slice Dependencies — Active Milestone"}),(0,r.jsx)("div",{className:"mt-5",children:n?0===(s=n.slices.filter(e=>e.depends.length>0)).length?(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["No slice dependencies in ",n.id,"."]}):(0,r.jsx)("div",{className:"flex flex-col gap-3",children:s.flatMap(e=>e.depends.map(s=>(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)("span",{className:"rounded-lg border border-info/25 bg-info/10 px-3 py-1.5 font-mono text-sm font-semibold text-info",children:s}),(0,r.jsx)(b.A,{className:"h-4 w-4 text-muted-foreground"}),(0,r.jsx)("span",{className:"rounded-lg border border-border bg-muted/50 px-3 py-1.5 font-mono text-sm font-medium",children:e.id}),(0,r.jsx)("span",{className:"text-sm text-muted-foreground",children:e.title})]},`${s}-${e.id}`)))}):(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No active milestone."})})]}),(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Critical Path"}),(0,r.jsx)("div",{className:"mt-5",children:0===t.milestonePath.length?(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"No critical path data."}):(0,r.jsxs)("div",{className:"space-y-7",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"mb-3 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:"Milestone Chain"}),(0,r.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:t.milestonePath.map((e,s)=>(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-1.5 font-mono text-sm font-bold text-destructive",children:e}),s<t.milestonePath.length-1&&(0,r.jsx)(j.A,{className:"h-4 w-4 text-muted-foreground"})]},e))})]}),Object.keys(t.milestoneSlack).length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"mb-3 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:"Milestone Slack"}),(0,r.jsx)("div",{className:"flex flex-col gap-2",children:e.milestones.filter(e=>!t.milestonePath.includes(e.id)).map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-4 rounded-lg bg-muted/50 px-4 py-2.5",children:[(0,r.jsx)("span",{className:"w-16 font-mono text-sm font-semibold",children:e.id}),(0,r.jsx)("span",{className:"text-sm text-muted-foreground",children:e.title}),(0,r.jsxs)("span",{className:"ml-auto font-mono text-xs text-muted-foreground",children:["slack: ",t.milestoneSlack[e.id]??0]})]},e.id))})]}),t.slicePath.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"mb-3 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:"Slice Critical Path"}),(0,r.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:t.slicePath.map((e,s)=>(0,r.jsxs)("span",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"rounded-lg border border-warning/30 bg-warning/10 px-3 py-1.5 font-mono text-sm font-semibold text-warning",children:e}),s<t.slicePath.length-1&&(0,r.jsx)(j.A,{className:"h-4 w-4 text-muted-foreground"})]},e))}),n&&(0,r.jsx)("div",{className:"mt-3 space-y-2",children:t.slicePath.map(e=>n.slices.find(s=>s.id===e)).filter(e=>null!=e&&!e.done&&!e.active).map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-2.5 rounded-lg border border-warning/20 bg-warning/8 px-4 py-2.5 text-sm text-warning",children:[(0,r.jsx)(v.A,{className:"h-4 w-4 shrink-0"}),(0,r.jsx)("span",{className:"font-mono font-semibold",children:e.id}),(0,r.jsx)("span",{children:"is on the critical path but not yet started"})]},e.id))})]}),Object.keys(t.sliceSlack).length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"mb-3 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:"Slice Slack"}),(0,r.jsx)("div",{className:"flex flex-wrap gap-2",children:Object.entries(t.sliceSlack).map(([e,s])=>(0,r.jsxs)("span",{className:"rounded-lg border border-border bg-muted/50 px-3 py-1.5 font-mono text-xs text-muted-foreground",children:[e,": ",s]},e))})]})]})})]})]})}function L({data:e}){if(!e.totals)return(0,r.jsx)(U,{message:"No metrics data available.",icon:d.A});let s=e.totals;return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-4 sm:grid-cols-4",children:[(0,r.jsx)(R,{label:"Execution Units",value:String(s.units),accent:"default"}),(0,r.jsx)(R,{label:"Total Cost",value:(0,C.BD)(s.cost),accent:"emerald"}),(0,r.jsx)(R,{label:"Duration",value:(0,C.a3)(s.duration),accent:"sky"}),(0,r.jsx)(R,{label:"Total Tokens",value:(0,C.ap)(s.tokens.total),sub:`${(0,C.ap)(s.tokens.input)} in \xb7 ${(0,C.ap)(s.tokens.output)} out`,accent:"amber"})]}),e.byPhase.length>0&&(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Cost by Phase"}),(0,r.jsx)("div",{className:"mt-5 space-y-5",children:e.byPhase.map(e=>{let t=s.cost>0?e.cost/s.cost*100:0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-semibold",children:e.phase}),(0,r.jsxs)("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[(0,r.jsx)("span",{className:"font-mono font-medium text-foreground",children:(0,C.BD)(e.cost)}),(0,r.jsxs)("span",{children:[t.toFixed(1),"%"]}),(0,r.jsxs)("span",{children:[(0,C.ap)(e.tokens.total)," tok"]}),(0,r.jsxs)("span",{children:[e.units," units"]})]})]}),(0,r.jsx)(B,{value:t,max:100,color:"sky"})]},e.phase)})})]}),e.byModel.length>0&&(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Cost by Model"}),(0,r.jsx)("div",{className:"mt-5 space-y-5",children:e.byModel.map(e=>{let t=s.cost>0?e.cost/s.cost*100:0;return(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,r.jsx)("span",{className:"font-mono text-sm font-medium",children:e.model}),(0,r.jsxs)("div",{className:"flex items-center gap-4 text-xs text-muted-foreground",children:[(0,r.jsx)("span",{className:"font-mono font-medium text-foreground",children:(0,C.BD)(e.cost)}),(0,r.jsxs)("span",{children:[t.toFixed(1),"%"]}),(0,r.jsxs)("span",{children:[(0,C.ap)(e.tokens.total)," tok"]}),(0,r.jsxs)("span",{children:[e.units," units"]})]})]}),(0,r.jsx)(B,{value:t,max:100,color:"emerald"})]},e.model)})})]}),e.bySlice.length>0&&(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Cost by Slice"}),(0,r.jsx)("div",{className:"mt-5 overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm",children:[(0,r.jsx)("thead",{children:(0,r.jsxs)("tr",{className:"border-b border-border text-left text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:[(0,r.jsx)("th",{className:"pb-3 pr-5",children:"Slice"}),(0,r.jsx)("th",{className:"pb-3 pr-5 text-right",children:"Units"}),(0,r.jsx)("th",{className:"pb-3 pr-5 text-right",children:"Cost"}),(0,r.jsx)("th",{className:"pb-3 pr-5 text-right",children:"Duration"}),(0,r.jsx)("th",{className:"pb-3 text-right",children:"Tokens"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.bySlice.map(e=>(0,r.jsxs)("tr",{className:"transition-colors hover:bg-muted/50",children:[(0,r.jsx)("td",{className:"py-3 pr-5 font-mono text-xs font-semibold",children:e.sliceId}),(0,r.jsx)("td",{className:"py-3 pr-5 text-right tabular-nums text-muted-foreground",children:e.units}),(0,r.jsx)("td",{className:"py-3 pr-5 text-right tabular-nums font-medium",children:(0,C.BD)(e.cost)}),(0,r.jsx)("td",{className:"py-3 pr-5 text-right tabular-nums text-muted-foreground",children:(0,C.a3)(e.duration)}),(0,r.jsx)("td",{className:"py-3 text-right tabular-nums text-muted-foreground",children:(0,C.ap)(e.tokens.total)})]},e.sliceId))})]})})]}),e.bySlice.length>=2&&(0,r.jsx)(O,{data:e,totals:s})]})}function O({data:e,totals:s}){let t=e.bySlice.filter(e=>e.sliceId.includes("/"));if(t.length<2)return null;let n=t.reduce((e,s)=>e+s.cost,0)/t.length,a=n*e.remainingSliceCount,i=s.cost+a,l=s.duration>0?s.cost/(s.duration/36e5):0;return(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Projections"}),(0,r.jsxs)("div",{className:"mt-5 grid grid-cols-2 gap-4 sm:grid-cols-4",children:[(0,r.jsx)(R,{label:"Avg / Slice",value:(0,C.BD)(n)}),(0,r.jsx)(R,{label:"Projected Remaining",value:(0,C.BD)(a),sub:`${e.remainingSliceCount} slices left`}),(0,r.jsx)(R,{label:"Projected Total",value:(0,C.BD)(i)}),l>0&&(0,r.jsx)(R,{label:"Burn Rate",value:`${(0,C.BD)(l)}/hr`})]}),i>2*s.cost&&e.remainingSliceCount>0&&(0,r.jsxs)("div",{className:"mt-4 flex items-center gap-2.5 rounded-lg border border-warning/20 bg-warning/8 px-4 py-3 text-sm text-warning",children:[(0,r.jsx)(v.A,{className:"h-4 w-4 shrink-0"}),"Projected total ",(0,C.BD)(i)," exceeds 2\xd7 current spend"]})]})}function E({data:e}){let s=[...e.units].sort((e,s)=>e.startedAt-s.startedAt).slice(-30),t=s.some(e=>!e.finishedAt||0===e.finishedAt),[a,i]=(0,n.useState)(()=>Date.now());(0,n.useEffect)(()=>{if(!t)return;let e=window.setInterval(()=>{i(Date.now())},1e3);return()=>window.clearInterval(e)},[t]);let l=t?a:0,d=(0,n.useCallback)(e=>(e.finishedAt||l)-e.startedAt,[l]);if(0===e.units.length)return(0,r.jsx)(U,{message:"No execution history yet.",icon:o.A});let c=Math.max(...s.map(d),1);return(0,r.jsx)("div",{className:"space-y-4",children:(0,r.jsxs)("div",{className:"overflow-hidden rounded-xl border border-border bg-card",children:[(0,r.jsxs)("div",{className:"border-b border-border bg-muted/50 px-6 py-4",children:[(0,r.jsx)(T,{children:"Execution Timeline"}),(0,r.jsxs)("p",{className:"mt-1.5 text-xs text-muted-foreground",children:["Showing ",s.length," of ",e.units.length," units — most recent first"]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-[3.5rem_1.5rem_5rem_8rem_1fr_4.5rem_5rem] items-center gap-3 border-b border-border/50 px-6 py-2.5 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:[(0,r.jsx)("span",{children:"Time"}),(0,r.jsx)("span",{}),(0,r.jsx)("span",{children:"Type"}),(0,r.jsx)("span",{children:"ID"}),(0,r.jsx)("span",{children:"Duration"}),(0,r.jsx)("span",{className:"text-right",children:"Time"}),(0,r.jsx)("span",{className:"text-right",children:"Cost"})]}),(0,r.jsx)("div",{className:"divide-y divide-border/40",children:[...s].reverse().map((e,s)=>{let t=d(e),n=!e.finishedAt||0===e.finishedAt;return(0,r.jsxs)("div",{className:"grid grid-cols-[3.5rem_1.5rem_5rem_8rem_1fr_4.5rem_5rem] items-center gap-3 px-6 py-3.5 transition-colors hover:bg-muted/50",children:[(0,r.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:I(e.startedAt)}),n?(0,r.jsx)(h.A,{className:"h-3.5 w-3.5 shrink-0 text-info"}):(0,r.jsx)(u.A,{className:"h-3.5 w-3.5 shrink-0 text-success"}),(0,r.jsx)("span",{className:"truncate text-xs font-medium",children:e.type}),(0,r.jsx)("span",{className:"truncate font-mono text-xs text-muted-foreground",children:e.id}),(0,r.jsx)("div",{className:"hidden sm:block",children:(0,r.jsx)(B,{value:t/c*100,max:100,color:"sky",animated:n})}),(0,r.jsx)("span",{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:(0,C.a3)(t)}),(0,r.jsx)("span",{className:"text-right font-mono text-xs tabular-nums font-medium",children:(0,C.BD)(e.cost)})]},`${e.id}-${e.startedAt}-${s}`)})})]})})}function V({data:e}){let s=e.agentActivity;if(!s)return(0,r.jsx)(U,{message:"No agent activity data available.",icon:c.A});let t=s.completedUnits,n=Math.max(t,s.totalSlices),a=n>0?Math.min(100,Math.round(t/n*100)):0;return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center gap-4",children:[(0,r.jsxs)("div",{className:(0,A.cn)("relative flex h-10 w-10 items-center justify-center rounded-full",s.active?"bg-success/15":"bg-muted"),children:[s.active&&(0,r.jsx)("div",{className:"absolute inset-0 animate-ping rounded-full bg-success/20"}),(0,r.jsx)("div",{className:(0,A.cn)("h-3 w-3 rounded-full",s.active?"bg-success":"bg-muted-foreground/30")})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xl font-bold",children:s.active?"Active":"Idle"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:s.active?"Agent is running":"Waiting for next task"})]})]}),s.active&&(0,r.jsxs)("div",{className:"text-right",children:[(0,r.jsx)("p",{className:"font-mono text-lg font-bold",children:(0,C.a3)(s.elapsed)}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"elapsed"})]})]}),s.currentUnit&&(0,r.jsxs)("div",{className:"mt-5 flex items-center gap-3 rounded-xl border border-info/20 bg-info/8 px-5 py-3.5",children:[(0,r.jsx)(h.A,{className:"h-4 w-4 shrink-0 text-info"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Currently executing"}),(0,r.jsxs)("p",{className:"mt-0.5 font-mono text-sm font-semibold text-info",children:[s.currentUnit.type," — ",s.currentUnit.id]})]})]})]}),n>0&&(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,r.jsx)(T,{children:"Completion Progress"}),(0,r.jsxs)("span",{className:"font-mono text-sm text-muted-foreground",children:[t," / ",n," slices"]})]}),(0,r.jsx)(B,{value:t,max:n,color:"emerald"}),(0,r.jsxs)("div",{className:"mt-3 flex items-center justify-between text-xs text-muted-foreground",children:[(0,r.jsxs)("span",{children:[a,"% complete"]}),(0,r.jsxs)("span",{children:[n-t," remaining"]})]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-4 sm:grid-cols-4",children:[(0,r.jsx)(R,{label:"Completion Rate",value:s.completionRate>0?`${s.completionRate.toFixed(1)}/hr`:"—",accent:"sky"}),(0,r.jsx)(R,{label:"Session Cost",value:(0,C.BD)(s.sessionCost),accent:"emerald"}),(0,r.jsx)(R,{label:"Session Tokens",value:(0,C.ap)(s.sessionTokens),accent:"amber"}),(0,r.jsx)(R,{label:"Completed",value:String(s.completedUnits)})]}),e.units.filter(e=>e.finishedAt>0).length>0&&(0,r.jsxs)("div",{className:"overflow-hidden rounded-xl border border-border bg-card",children:[(0,r.jsx)("div",{className:"border-b border-border bg-muted/50 px-6 py-4",children:(0,r.jsx)(T,{children:"Recent Completed Units"})}),(0,r.jsx)("div",{className:"divide-y divide-border/40",children:e.units.filter(e=>e.finishedAt>0).slice(-5).reverse().map((e,s)=>(0,r.jsxs)("div",{className:"flex items-center gap-4 px-6 py-4 transition-colors hover:bg-muted/50",children:[(0,r.jsx)("span",{className:"w-12 font-mono text-xs text-muted-foreground",children:I(e.startedAt)}),(0,r.jsx)(u.A,{className:"h-4 w-4 shrink-0 text-success"}),(0,r.jsx)("span",{className:"flex-1 truncate text-sm font-medium",children:e.type}),(0,r.jsx)("span",{className:"font-mono text-xs text-muted-foreground",children:e.id}),(0,r.jsx)("span",{className:"font-mono text-xs tabular-nums text-muted-foreground",children:(0,C.a3)(e.finishedAt-e.startedAt)}),(0,r.jsx)("span",{className:"font-mono text-xs tabular-nums font-semibold",children:(0,C.BD)(e.cost)})]},`${e.id}-${s}`))})]})]})}function z({data:e}){let s=e.changelog.entries;if(0===s.length)return(0,r.jsx)(U,{message:"No completed slices yet.",icon:m.A});let t=[...s].reverse();return(0,r.jsx)("div",{className:"space-y-4",children:t.map((e,s)=>(0,r.jsxs)("div",{className:"overflow-hidden rounded-xl border border-border bg-card",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between border-b border-border bg-muted/50 px-6 py-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(u.A,{className:"h-4 w-4 shrink-0 text-success"}),(0,r.jsxs)("span",{className:"font-mono text-xs font-bold text-success",children:[e.milestoneId,"/",e.sliceId]}),(0,r.jsx)("span",{className:"text-sm font-semibold",children:e.title})]}),e.completedAt&&(0,r.jsx)("span",{className:"text-xs text-muted-foreground",children:function(e){let s=Date.now()-new Date(e).getTime();if(s<6e4)return"just now";let t=Math.floor(s/6e4);if(t<60)return`${t}m ago`;let r=Math.floor(t/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}(e.completedAt)})]}),(0,r.jsxs)("div",{className:"px-6 py-5 space-y-5",children:[e.oneLiner&&(0,r.jsxs)("p",{className:"text-sm text-muted-foreground italic leading-relaxed border-l-2 border-muted pl-4",children:["“",e.oneLiner,"”"]}),e.filesModified.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"mb-3 text-xs font-semibold uppercase tracking-widest text-muted-foreground",children:"Files Modified"}),(0,r.jsx)("div",{className:"space-y-2",children:e.filesModified.map((e,s)=>(0,r.jsxs)("div",{className:"flex items-start gap-3 rounded-lg bg-muted/50 px-4 py-2.5",children:[(0,r.jsx)(u.A,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-success/70"}),(0,r.jsx)("span",{className:"font-mono text-xs font-medium text-muted-foreground",children:e.path}),e.description&&(0,r.jsxs)("span",{className:"ml-1 text-xs text-muted-foreground",children:["— ",e.description]})]},s))})]})]})]},`${e.milestoneId}-${e.sliceId}-${s}`))})}function G({data:e}){let s=(0,n.useCallback)((e,s,t)=>{let r=new Blob([e],{type:t}),n=URL.createObjectURL(r),a=document.createElement("a");a.href=n,a.download=s,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(n)},[]),t=(0,n.useCallback)(()=>{let s=[];for(let t of(s.push("# GSD Workflow Report"),s.push(""),s.push(`Generated: ${new Date().toISOString()}`),s.push(`Phase: ${e.phase}`),s.push(""),s.push("## Milestones"),s.push(""),e.milestones)){let e="complete"===t.status?"✓":"active"===t.status?"▸":"○";for(let r of(s.push(`### ${e} ${t.id}: ${t.title} (${t.status})`),t.dependsOn.length>0&&s.push(`Depends on: ${t.dependsOn.join(", ")}`),s.push(""),t.slices)){let e=r.done?"✓":r.active?"▸":"○";for(let t of(s.push(`- ${e} **${r.id}**: ${r.title} [risk: ${r.risk}]`),r.tasks)){let e=t.done?"✓":t.active?"▸":"○";s.push(` - ${e} ${t.id}: ${t.title}`)}}s.push("")}if(e.totals&&(s.push("## Metrics Summary"),s.push(""),s.push("| Metric | Value |"),s.push("|--------|-------|"),s.push(`| Units | ${e.totals.units} |`),s.push(`| Total Cost | ${(0,C.BD)(e.totals.cost)} |`),s.push(`| Duration | ${(0,C.a3)(e.totals.duration)} |`),s.push(`| Tokens | ${(0,C.ap)(e.totals.tokens.total)} |`),s.push("")),e.criticalPath.milestonePath.length>0&&(s.push("## Critical Path"),s.push(""),s.push(`Milestone: ${e.criticalPath.milestonePath.join(" → ")}`),e.criticalPath.slicePath.length>0&&s.push(`Slice: ${e.criticalPath.slicePath.join(" → ")}`),s.push("")),e.changelog.entries.length>0)for(let t of(s.push("## Changelog"),s.push(""),e.changelog.entries)){if(s.push(`### ${t.milestoneId}/${t.sliceId}: ${t.title}`),t.oneLiner&&s.push(`> ${t.oneLiner}`),t.filesModified.length>0)for(let e of(s.push("Files:"),t.filesModified))s.push(`- \`${e.path}\` — ${e.description}`);t.completedAt&&s.push(`Completed: ${t.completedAt}`),s.push("")}return s.join("\n")},[e]);return(0,r.jsx)("div",{className:"space-y-6",children:(0,r.jsxs)("div",{className:"rounded-xl border border-border bg-card p-6",children:[(0,r.jsx)(T,{children:"Export Project Data"}),(0,r.jsx)("p",{className:"mt-3 text-sm leading-relaxed text-muted-foreground",children:"Download the current visualizer data as a structured report. Markdown includes milestones, metrics, critical path, and changelog in a readable format. JSON contains the full raw data payload."}),(0,r.jsxs)("div",{className:"mt-7 grid gap-4 sm:grid-cols-2",children:[(0,r.jsxs)("button",{onClick:()=>s(t(),"gsd-report.md","text/markdown"),className:"group flex items-center gap-5 rounded-xl border border-border bg-muted/50 p-5 text-left transition-all hover:border-info/40 hover:bg-info/5",children:[(0,r.jsx)("div",{className:"rounded-xl border border-info/20 bg-info/10 p-4 transition-colors group-hover:bg-info/15",children:(0,r.jsx)(N.A,{className:"h-6 w-6 text-info"})}),(0,r.jsxs)("div",{className:"flex-1",children:[(0,r.jsx)("p",{className:"text-sm font-semibold transition-colors group-hover:text-info",children:"Download Markdown"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Human-readable report with tables and structure"})]}),(0,r.jsx)(x.A,{className:"h-4 w-4 shrink-0 text-muted-foreground/0 transition-all group-hover:text-info/70"})]}),(0,r.jsxs)("button",{onClick:()=>s(JSON.stringify(e,null,2),"gsd-report.json","application/json"),className:"group flex items-center gap-5 rounded-xl border border-border bg-muted/50 p-5 text-left transition-all hover:border-success/40 hover:bg-success/5",children:[(0,r.jsx)("div",{className:"rounded-xl border border-success/20 bg-success/10 p-4 transition-colors group-hover:bg-success/15",children:(0,r.jsx)(w,{className:"h-6 w-6 text-success"})}),(0,r.jsxs)("div",{className:"flex-1",children:[(0,r.jsx)("p",{className:"text-sm font-semibold transition-colors group-hover:text-success",children:"Download JSON"}),(0,r.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:"Full raw data payload for tooling"})]}),(0,r.jsx)(x.A,{className:"h-4 w-4 shrink-0 text-muted-foreground/0 transition-all group-hover:text-success/70"})]})]})]})})}function H({defaultValue:e,children:s}){return(0,r.jsx)(a.bL,{defaultValue:e,className:"flex h-full flex-col overflow-hidden",children:s})}function K(){return(0,r.jsx)(a.B8,{className:"flex shrink-0 justify-center border-b border-border bg-background px-6",children:M.map(({value:e,label:s,Icon:t})=>(0,r.jsxs)(a.l9,{value:e,className:(0,A.cn)("group relative flex items-center gap-2 px-4 py-3.5 text-sm font-medium outline-none","text-muted-foreground transition-colors duration-150","hover:text-foreground","data-[state=active]:text-foreground","focus-visible:text-foreground","disabled:pointer-events-none disabled:opacity-40"),children:[(0,r.jsx)("span",{className:(0,A.cn)("pointer-events-none absolute bottom-0 left-0 right-0 h-0.5 rounded-t-full","bg-foreground opacity-0 transition-opacity duration-150","group-data-[state=active]:opacity-100")}),(0,r.jsx)("span",{className:"absolute inset-x-0 inset-y-1.5 rounded-lg bg-muted/0 transition-colors duration-150 group-hover:bg-muted group-data-[state=active]:bg-transparent"}),(0,r.jsx)(t,{className:"relative h-4 w-4 shrink-0 transition-colors duration-150 text-muted-foreground group-hover:text-muted-foreground group-data-[state=active]:text-foreground"}),(0,r.jsx)("span",{className:"relative",children:s})]},e))})}function q(){let e=(0,$.gF)(),s=e.boot?.project.cwd,[t,i]=(0,n.useState)(null),[l,d]=(0,n.useState)(!0),[o,c]=(0,n.useState)(null),m=(0,n.useCallback)(async()=>{try{let e=await (0,S.tm)((0,$.fL)("/api/visualizer",s));if(!e.ok){let s=await e.json().catch(()=>({error:"Unknown error"}));throw Error(s.error||`HTTP ${e.status}`)}let t=await e.json();i(t),c(null)}catch(e){c(e instanceof Error?e.message:"Failed to fetch visualizer data")}finally{d(!1)}},[s]);return((0,n.useEffect)(()=>{m();let e=setInterval(m,1e4);return()=>clearInterval(e)},[m]),l&&!t)?(0,r.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,r.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,r.jsx)(y.A,{className:"h-7 w-7 animate-spin text-muted-foreground"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Loading visualizer data…"})]})}):o&&!t?(0,r.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,r.jsxs)("div",{className:"flex flex-col items-center gap-4 text-center",children:[(0,r.jsx)("div",{className:"rounded-full border border-warning/20 bg-warning/10 p-4",children:(0,r.jsx)(v.A,{className:"h-6 w-6 text-warning"})}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-semibold",children:"Failed to load visualizer"}),(0,r.jsx)("p",{className:"mt-1.5 max-w-sm text-xs text-muted-foreground",children:o})]}),(0,r.jsxs)("button",{onClick:m,className:"mt-1 inline-flex items-center gap-2 rounded-lg border border-border bg-card px-4 py-2 text-sm font-medium transition-colors hover:bg-accent",children:[(0,r.jsx)(k.A,{className:"h-3.5 w-3.5"}),"Retry"]})]})}):t?(0,r.jsxs)("div",{className:"flex h-full flex-col overflow-hidden",children:[(0,r.jsx)("div",{className:"flex shrink-0 items-center justify-between border-b border-border px-7 py-5",children:(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-xl font-bold tracking-tight",children:"Workflow Visualizer"}),(0,r.jsxs)("div",{className:"mt-1.5 flex items-center gap-3 text-sm text-muted-foreground",children:[(0,r.jsxs)("span",{children:["Phase:"," ",(0,r.jsx)("span",{className:(0,A.cn)("inline-flex items-center rounded-md px-2 py-0.5 text-xs font-semibold uppercase tracking-wider","complete"===t.phase?"bg-success/15 text-success":"active"===t.phase||"running"===t.phase?"bg-info/15 text-info":"bg-muted text-muted-foreground"),children:t.phase})]}),t.remainingSliceCount>0&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-border",children:"\xb7"}),(0,r.jsxs)("span",{children:[t.remainingSliceCount," slice",1!==t.remainingSliceCount?"s":""," remaining"]})]}),o&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"text-border",children:"\xb7"}),(0,r.jsxs)("span",{className:"flex items-center gap-1 text-warning",children:[(0,r.jsx)(v.A,{className:"h-3 w-3"}),"Stale — ",o]})]})]})]})}),(0,r.jsxs)(H,{defaultValue:"progress",children:[(0,r.jsx)(K,{}),(0,r.jsx)("div",{className:"flex-1 overflow-y-auto",children:(0,r.jsxs)("div",{className:"mx-auto max-w-5xl px-7 py-7",children:[(0,r.jsx)(a.UC,{value:"progress",className:"outline-none",children:(0,r.jsx)(_,{data:t})}),(0,r.jsx)(a.UC,{value:"deps",className:"outline-none",children:(0,r.jsx)(F,{data:t})}),(0,r.jsx)(a.UC,{value:"metrics",className:"outline-none",children:(0,r.jsx)(L,{data:t})}),(0,r.jsx)(a.UC,{value:"timeline",className:"outline-none",children:(0,r.jsx)(E,{data:t})}),(0,r.jsx)(a.UC,{value:"agent",className:"outline-none",children:(0,r.jsx)(V,{data:t})}),(0,r.jsx)(a.UC,{value:"changes",className:"outline-none",children:(0,r.jsx)(z,{data:t})}),(0,r.jsx)(a.UC,{value:"export",className:"outline-none",children:(0,r.jsx)(G,{data:t})})]})})]})]}):null}},49619:(e,s,t)=>{t.d(s,{A:()=>r});let r=(0,t(90425).A)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]])},57518:(e,s,t)=>{t.d(s,{B8:()=>M,UC:()=>P,bL:()=>S,l9:()=>D});var r=t(12115),n=t(70379),a=t(68599),i=t(78538),l=t(83935),d=t(99354),o=t(1933),c=t(98979),m=t(89971),x=t(95155),u="Tabs",[h,p]=(0,a.A)(u,[i.RG]),f=(0,i.RG)(),[g,b]=h(u),j=r.forwardRef((e,s)=>{let{__scopeTabs:t,value:r,onValueChange:n,defaultValue:a,orientation:i="horizontal",dir:l,activationMode:h="automatic",...p}=e,f=(0,o.jH)(l),[b,j]=(0,c.i)({prop:r,onChange:n,defaultProp:a??"",caller:u});return(0,x.jsx)(g,{scope:t,baseId:(0,m.B)(),value:b,onValueChange:j,orientation:i,dir:f,activationMode:h,children:(0,x.jsx)(d.sG.div,{dir:f,"data-orientation":i,...p,ref:s})})});j.displayName=u;var v="TabsList",N=r.forwardRef((e,s)=>{let{__scopeTabs:t,loop:r=!0,...n}=e,a=b(v,t),l=f(t);return(0,x.jsx)(i.bL,{asChild:!0,...l,orientation:a.orientation,dir:a.dir,loop:r,children:(0,x.jsx)(d.sG.div,{role:"tablist","aria-orientation":a.orientation,...n,ref:s})})});N.displayName=v;var w="TabsTrigger",y=r.forwardRef((e,s)=>{let{__scopeTabs:t,value:r,disabled:a=!1,...l}=e,o=b(w,t),c=f(t),m=$(o.baseId,r),u=C(o.baseId,r),h=r===o.value;return(0,x.jsx)(i.q7,{asChild:!0,...c,focusable:!a,active:h,children:(0,x.jsx)(d.sG.button,{type:"button",role:"tab","aria-selected":h,"aria-controls":u,"data-state":h?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:m,...l,ref:s,onMouseDown:(0,n.mK)(e.onMouseDown,e=>{a||0!==e.button||!1!==e.ctrlKey?e.preventDefault():o.onValueChange(r)}),onKeyDown:(0,n.mK)(e.onKeyDown,e=>{[" ","Enter"].includes(e.key)&&o.onValueChange(r)}),onFocus:(0,n.mK)(e.onFocus,()=>{let e="manual"!==o.activationMode;h||a||!e||o.onValueChange(r)})})})});y.displayName=w;var k="TabsContent",A=r.forwardRef((e,s)=>{let{__scopeTabs:t,value:n,forceMount:a,children:i,...o}=e,c=b(k,t),m=$(c.baseId,n),u=C(c.baseId,n),h=n===c.value,p=r.useRef(h);return r.useEffect(()=>{let e=requestAnimationFrame(()=>p.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,x.jsx)(l.C,{present:a||h,children:({present:t})=>(0,x.jsx)(d.sG.div,{"data-state":h?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":m,hidden:!t,id:u,tabIndex:0,...o,ref:s,style:{...e.style,animationDuration:p.current?"0s":void 0},children:t&&i})})});function $(e,s){return`${e}-trigger-${s}`}function C(e,s){return`${e}-content-${s}`}A.displayName=k;var S=j,M=N,D=y,P=A}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{5214:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorage",{enumerable:!0,get:function(){return r.workAsyncStorageInstance}});let r=n(17828)},15726:(e,t,n)=>{Promise.resolve().then(n.bind(n,66919))},17828:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorageInstance",{enumerable:!0,get:function(){return r}});let r=(0,n(64054).createAsyncLocalStorage)()},21957:(e,t,n)=>{"use strict";function r({moduleIds:e}){return null}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PreloadChunks",{enumerable:!0,get:function(){return r}}),n(95155),n(47650),n(5214),n(2451),n(53887)},37206:(e,t,n)=>{"use strict";n.d(t,{default:()=>u.a});var r=n(75707),u=n.n(r)},41112:(e,t,n)=>{"use strict";function r({reason:e,children:t}){return t}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BailoutToCSR",{enumerable:!0,get:function(){return r}}),n(1980)},64054:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={bindSnapshot:function(){return s},createAsyncLocalStorage:function(){return a},createSnapshot:function(){return i}};for(var r in n)Object.defineProperty(t,r,{enumerable:!0,get:n[r]});let u=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class l{disable(){throw u}getStore(){}run(){throw u}exit(){throw u}enterWith(){throw u}static bind(e){return e}}let o="u">typeof globalThis&&globalThis.AsyncLocalStorage;function a(){return o?new o:new l}function s(e){return o?o.bind(e):l.bind(e)}function i(){return o?o.snapshot():function(e,...t){return e(...t)}}},66919:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(95155);let u=(0,n(37206).default)(()=>Promise.all([n.e(1838),n.e(4986),n.e(2059),n.e(8359)]).then(n.bind(n,18359)).then(e=>e.GSDAppShell),{loadableGenerated:{webpack:()=>[18359]},ssr:!1,loading:()=>(0,r.jsx)("div",{className:"flex h-screen items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading workspace…"})});function l(){return(0,r.jsx)(u,{})}},68635:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}});let r=n(95155),u=n(12115),l=n(41112);function o(e){return{default:e&&"default"in e?e.default:e}}n(21957);let a={loader:()=>Promise.resolve(o(()=>null)),loading:null,ssr:!0},s=function(e){let t={...a,...e},n=(0,u.lazy)(()=>t.loader().then(o)),s=t.loading;function i(e){let o=s?(0,r.jsx)(s,{isLoading:!0,pastDelay:!0,error:null}):null,a=!t.ssr||!!t.loading,i=a?u.Suspense:u.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:[null,(0,r.jsx)(n,{...e})]}):(0,r.jsx)(l.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(n,{...e})});return(0,r.jsx)(i,{...a?{fallback:o}:{},children:c})}return i.displayName="LoadableComponent",i}},75707:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return u}});let r=n(73623)._(n(68635));function u(e,t){let n={};"function"==typeof e&&(n.loader=e);let u={...n,...t};return(0,r.default)({...u,modules:u.loadableGenerated?.modules})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=15726)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7358],{2852:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,27123,23)),Promise.resolve().then(n.t.bind(n,61304,23)),Promise.resolve().then(n.t.bind(n,78616,23)),Promise.resolve().then(n.t.bind(n,64777,23)),Promise.resolve().then(n.t.bind(n,57121,23)),Promise.resolve().then(n.t.bind(n,74581,23)),Promise.resolve().then(n.t.bind(n,90484,23)),Promise.resolve().then(n.bind(n,86869))},19393:()=>{}},e=>{var s=s=>e(e.s=s);e.O(0,[8441,3794],()=>(s(83861),s(2852))),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9337],{52560:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,27123,23))}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=52560)),_N_E=e.O()}]);
|