@opengsd/gsd-pi 1.2.0-dev.fbdca60b → 1.3.0-dev.65546769
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 +13 -7
- package/dist/cli.js +28 -1
- package/dist/headless-context.js +0 -1
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/help-text.js +29 -0
- package/dist/hermes-integration-install.d.ts +17 -0
- package/dist/hermes-integration-install.js +199 -0
- package/dist/jiti-workspace-aliases.d.ts +11 -2
- package/dist/jiti-workspace-aliases.js +19 -3
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- package/dist/read-cli.d.ts +23 -0
- package/dist/read-cli.js +90 -0
- package/dist/resource-loader.d.ts +3 -3
- package/dist/resource-loader.js +4 -13
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +22 -22
- package/dist/resources/extensions/claude-code-cli/index.js +7 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +73 -20
- package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
- package/dist/resources/extensions/gsd/auto/loop.js +67 -2
- package/dist/resources/extensions/gsd/auto/orchestrator.js +50 -10
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +8 -0
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +81 -19
- package/dist/resources/extensions/gsd/auto-closeout-messaging.js +90 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
- package/dist/resources/extensions/gsd/auto-dispatch.js +47 -8
- package/dist/resources/extensions/gsd/auto-model-selection.js +14 -8
- package/dist/resources/extensions/gsd/auto-post-unit.js +39 -29
- package/dist/resources/extensions/gsd/auto-prompts.js +44 -30
- package/dist/resources/extensions/gsd/auto-recovery.js +118 -40
- package/dist/resources/extensions/gsd/auto-runtime-state.js +13 -0
- package/dist/resources/extensions/gsd/auto-start.js +58 -31
- package/dist/resources/extensions/gsd/auto-verification.js +5 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +149 -91
- package/dist/resources/extensions/gsd/auto.js +97 -31
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +42 -54
- package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +24 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +108 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +164 -44
- package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +113 -27
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +92 -4
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/codebase-generator.js +5 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
- package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
- package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
- package/dist/resources/extensions/gsd/commands/handlers/core.js +52 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +227 -3
- package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
- package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
- package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +14 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
- package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
- package/dist/resources/extensions/gsd/compat/index.js +3 -0
- package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/consent-question.js +12 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +39 -3
- package/dist/resources/extensions/gsd/db/engine.js +27 -0
- package/dist/resources/extensions/gsd/db/queries.js +54 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-workspace.js +13 -1
- package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
- package/dist/resources/extensions/gsd/doctor-git-checks.js +30 -4
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -24
- package/dist/resources/extensions/gsd/doctor.js +28 -7
- package/dist/resources/extensions/gsd/error-classifier.js +13 -1
- package/dist/resources/extensions/gsd/escalation.js +11 -4
- package/dist/resources/extensions/gsd/export-html.js +10 -3
- package/dist/resources/extensions/gsd/export.js +73 -0
- package/dist/resources/extensions/gsd/file-lock.js +1 -1
- package/dist/resources/extensions/gsd/flat-phase-migration.js +176 -0
- package/dist/resources/extensions/gsd/forensics.js +2 -1
- package/dist/resources/extensions/gsd/git-service.js +7 -4
- package/dist/resources/extensions/gsd/gitignore.js +6 -2
- package/dist/resources/extensions/gsd/guidance.js +7 -7
- package/dist/resources/extensions/gsd/guided-flow.js +11 -6
- package/dist/resources/extensions/gsd/layout-policy.js +75 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +391 -116
- package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
- package/dist/resources/extensions/gsd/md-importer.js +153 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -11
- package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
- package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
- package/dist/resources/extensions/gsd/migrate-external.js +51 -6
- package/dist/resources/extensions/gsd/migration-auto-check.js +5 -14
- package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
- package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
- package/dist/resources/extensions/gsd/milestone-ids.js +50 -19
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
- package/dist/resources/extensions/gsd/model-router.js +79 -20
- package/dist/resources/extensions/gsd/notification-store.js +22 -29
- package/dist/resources/extensions/gsd/notifications.js +36 -7
- package/dist/resources/extensions/gsd/observability-validator.js +12 -4
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
- package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
- package/dist/resources/extensions/gsd/paths.js +356 -44
- package/dist/resources/extensions/gsd/planning-depth.js +2 -1
- package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
- package/dist/resources/extensions/gsd/preferences-models.js +34 -14
- package/dist/resources/extensions/gsd/preferences.js +148 -13
- package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/dist/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
- package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/dist/resources/extensions/gsd/prompts/health.md +37 -0
- package/dist/resources/extensions/gsd/prompts/import.md +30 -0
- package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
- package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
- package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/dist/resources/extensions/gsd/prompts/review.md +27 -0
- package/dist/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
- package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
- package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
- package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
- package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/queue-order.js +3 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
- package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
- package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
- package/dist/resources/extensions/gsd/service-tier.js +2 -1
- package/dist/resources/extensions/gsd/session-lock.js +11 -9
- package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +51 -10
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +95 -19
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +36 -3
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +12 -0
- package/dist/resources/extensions/gsd/state.js +48 -17
- package/dist/resources/extensions/gsd/sync-lock.js +11 -18
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +12 -2
- package/dist/resources/extensions/gsd/tools/complete-task.js +15 -1
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tools/plan-slice.js +1 -3
- package/dist/resources/extensions/gsd/tools/plan-task.js +16 -1
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +44 -5
- package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/undo.js +8 -9
- package/dist/resources/extensions/gsd/unit-registry.js +27 -3
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +58 -2
- package/dist/resources/extensions/gsd/validation-block-guard.js +45 -0
- package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
- package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +25 -4
- package/dist/resources/extensions/gsd/worktree-command.js +6 -6
- package/dist/resources/extensions/gsd/worktree-health.js +6 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +109 -16
- package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/mcp-client/manager.js +3 -3
- package/dist/resources/extensions/search-the-web/index.js +41 -9
- package/dist/resources/extensions/search-the-web/native-search.js +18 -4
- package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
- package/dist/resources/extensions/subagent/index.js +20 -15
- package/dist/resources/extensions/subagent/worktree-cwd.js +31 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.js +15 -4
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +3 -3
- 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.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.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/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/{4283.e4873b058df143a1.js → 4283.8e446784528ed9dc.js} +2 -2
- package/dist/web/standalone/.next/static/chunks/8785.481aa5869991b760.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-f0285ce91d4ec9ef.js → webpack-f46ea08200a0227e.js} +1 -1
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web-mode.d.ts +3 -1
- package/dist/web-mode.js +7 -5
- package/integrations/hermes/README.md +48 -0
- package/integrations/hermes/docs/setup.md +272 -0
- package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
- package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
- package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
- package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
- package/integrations/hermes/open_gsd_hermes/config.py +59 -0
- package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
- package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
- package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
- package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
- package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
- package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
- package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
- package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
- package/integrations/hermes/open_gsd_hermes/types.py +100 -0
- package/integrations/hermes/plugin.yaml +38 -0
- package/integrations/hermes/pyproject.toml +32 -0
- package/integrations/hermes/scripts/preflight.sh +92 -0
- package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
- package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
- package/integrations/hermes/tests/golden/snapshot.txt +8 -0
- package/integrations/hermes/tests/test_binding.py +103 -0
- package/integrations/hermes/tests/test_config.py +36 -0
- package/integrations/hermes/tests/test_cron.py +34 -0
- package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
- package/integrations/hermes/tests/test_memory.py +59 -0
- package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
- package/integrations/hermes/tests/test_register.py +56 -0
- package/integrations/hermes/tests/test_snapshot.py +53 -0
- package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
- package/package.json +8 -7
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
- package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
- package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/sdk.js +6 -2
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +37 -15
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +69 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +223 -32
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -10
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +3 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +25 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +9 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +31 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/README.md +10 -0
- package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
- package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-errors.js +12 -0
- package/packages/mcp-server/dist/cli-errors.js.map +1 -1
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli-runner.js +33 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -1
- package/packages/mcp-server/dist/cli.d.ts +1 -0
- package/packages/mcp-server/dist/cli.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli.js +1 -0
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +29 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +82 -3
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/package.json +21 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +9 -0
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +8 -8
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +6 -1
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +1 -0
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/select-list.js +8 -2
- package/packages/pi-tui/dist/components/select-list.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +22 -22
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- package/src/resources/extensions/claude-code-cli/index.ts +8 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +83 -20
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +47 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +182 -10
- package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
- package/src/resources/extensions/gsd/auto/loop.ts +69 -2
- package/src/resources/extensions/gsd/auto/orchestrator.ts +63 -10
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +13 -1
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +83 -20
- package/src/resources/extensions/gsd/auto-closeout-messaging.ts +90 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +57 -12
- package/src/resources/extensions/gsd/auto-model-selection.ts +27 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +52 -31
- package/src/resources/extensions/gsd/auto-prompts.ts +45 -30
- package/src/resources/extensions/gsd/auto-recovery.ts +126 -37
- package/src/resources/extensions/gsd/auto-runtime-state.ts +13 -0
- package/src/resources/extensions/gsd/auto-start.ts +82 -36
- package/src/resources/extensions/gsd/auto-verification.ts +5 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +83 -15
- package/src/resources/extensions/gsd/auto.ts +133 -32
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +45 -61
- package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +123 -9
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +185 -46
- package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +138 -29
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +107 -3
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/codebase-generator.ts +6 -9
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
- package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
- package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
- package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +230 -3
- package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
- package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
- package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +13 -0
- package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
- package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
- package/src/resources/extensions/gsd/compat/index.ts +12 -0
- package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
- package/src/resources/extensions/gsd/config-overlay.ts +24 -9
- package/src/resources/extensions/gsd/consent-question.ts +11 -1
- package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
- package/src/resources/extensions/gsd/dashboard-overlay.ts +41 -4
- package/src/resources/extensions/gsd/db/engine.ts +26 -0
- package/src/resources/extensions/gsd/db/queries.ts +78 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-workspace.ts +15 -0
- package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
- package/src/resources/extensions/gsd/doctor-git-checks.ts +28 -3
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +12 -25
- package/src/resources/extensions/gsd/doctor-types.ts +1 -0
- package/src/resources/extensions/gsd/doctor.ts +30 -7
- package/src/resources/extensions/gsd/error-classifier.ts +14 -1
- package/src/resources/extensions/gsd/escalation.ts +9 -4
- package/src/resources/extensions/gsd/export-html.ts +11 -4
- package/src/resources/extensions/gsd/export.ts +88 -1
- package/src/resources/extensions/gsd/file-lock.ts +1 -1
- package/src/resources/extensions/gsd/flat-phase-migration.ts +205 -0
- package/src/resources/extensions/gsd/forensics.ts +2 -1
- package/src/resources/extensions/gsd/git-constants.ts +1 -1
- package/src/resources/extensions/gsd/git-service.ts +7 -2
- package/src/resources/extensions/gsd/gitignore.ts +7 -3
- package/src/resources/extensions/gsd/guidance.ts +7 -7
- package/src/resources/extensions/gsd/guided-flow.ts +11 -6
- package/src/resources/extensions/gsd/layout-policy.ts +85 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +404 -104
- package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
- package/src/resources/extensions/gsd/md-importer.ts +215 -65
- package/src/resources/extensions/gsd/metrics.ts +23 -10
- package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
- package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
- package/src/resources/extensions/gsd/migrate-external.ts +49 -6
- package/src/resources/extensions/gsd/migration-auto-check.ts +4 -13
- package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
- package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
- package/src/resources/extensions/gsd/milestone-ids.ts +49 -19
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
- package/src/resources/extensions/gsd/model-router.ts +98 -18
- package/src/resources/extensions/gsd/notification-store.ts +17 -28
- package/src/resources/extensions/gsd/notifications.ts +37 -6
- package/src/resources/extensions/gsd/observability-validator.ts +12 -4
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
- package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
- package/src/resources/extensions/gsd/paths.ts +348 -39
- package/src/resources/extensions/gsd/planning-depth.ts +2 -1
- package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
- package/src/resources/extensions/gsd/preferences-models.ts +47 -13
- package/src/resources/extensions/gsd/preferences.ts +188 -14
- package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
- package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
- package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
- package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
- package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
- package/src/resources/extensions/gsd/prompts/code-review.md +37 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +24 -15
- package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
- package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
- package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +5 -1
- package/src/resources/extensions/gsd/prompts/explore.md +58 -0
- package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
- package/src/resources/extensions/gsd/prompts/health.md +37 -0
- package/src/resources/extensions/gsd/prompts/import.md +30 -0
- package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
- package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
- package/src/resources/extensions/gsd/prompts/manager.md +21 -0
- package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
- package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
- package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
- package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/phase.md +22 -0
- package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
- package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
- package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
- package/src/resources/extensions/gsd/prompts/progress.md +30 -0
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
- package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
- package/src/resources/extensions/gsd/prompts/review.md +27 -0
- package/src/resources/extensions/gsd/prompts/run-uat.md +5 -1
- package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/settings.md +24 -0
- package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
- package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/spike.md +59 -0
- package/src/resources/extensions/gsd/prompts/stats.md +43 -0
- package/src/resources/extensions/gsd/prompts/surface.md +25 -0
- package/src/resources/extensions/gsd/prompts/thread.md +24 -0
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
- package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
- package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
- package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
- package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
- package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
- package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/queue-order.ts +3 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
- package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
- package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
- package/src/resources/extensions/gsd/service-tier.ts +2 -0
- package/src/resources/extensions/gsd/session-lock.ts +15 -13
- package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +58 -14
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +98 -26
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +36 -3
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +12 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
- package/src/resources/extensions/gsd/state.ts +57 -15
- package/src/resources/extensions/gsd/sync-lock.ts +11 -20
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
- package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +322 -1
- package/src/resources/extensions/gsd/tests/auto-closeout-messaging.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
- package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +28 -22
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +19 -2
- package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
- package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
- package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +862 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
- package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +38 -49
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
- package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +372 -0
- package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
- package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
- package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +343 -7
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +339 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +58 -23
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
- package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
- package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
- package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +107 -0
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
- package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +79 -4
- package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
- package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +155 -58
- package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/undo.test.ts +39 -37
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +72 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +34 -8
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +64 -8
- package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +4 -7
- package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -9
- package/src/resources/extensions/gsd/tools/complete-task.ts +15 -1
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tools/plan-slice.ts +1 -3
- package/src/resources/extensions/gsd/tools/plan-task.ts +17 -1
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +43 -4
- package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/undo.ts +8 -9
- package/src/resources/extensions/gsd/unit-registry.ts +27 -3
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +60 -1
- package/src/resources/extensions/gsd/validation-block-guard.ts +46 -0
- package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
- package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +24 -4
- package/src/resources/extensions/gsd/worktree-command.ts +6 -6
- package/src/resources/extensions/gsd/worktree-health.ts +6 -3
- package/src/resources/extensions/gsd/worktree-manager.ts +122 -16
- package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/mcp-client/manager.ts +3 -3
- package/src/resources/extensions/search-the-web/index.ts +45 -9
- package/src/resources/extensions/search-the-web/native-search.ts +16 -4
- package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
- package/src/resources/extensions/subagent/index.ts +20 -15
- package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
- package/src/resources/extensions/subagent/worktree-cwd.ts +35 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{2T9IOdiiM3o3gZ4UbPi8E → BTKtGFF1Y-hvVJEGhBRo9}/_ssgManifest.js +0 -0
|
@@ -7,14 +7,11 @@ import { isDbAvailable, getMilestoneSlices, getSliceTasks } from "./gsd-db.js";
|
|
|
7
7
|
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
8
8
|
import { execFileSync } from "node:child_process";
|
|
9
9
|
import { truncateToWidth, visibleWidth } from "@gsd/pi-tui";
|
|
10
|
-
import {
|
|
11
|
-
import { GLYPH, INDENT } from "../shared/mod.js";
|
|
12
|
-
import { padRightVisible, renderPanel, renderProgressBar, rightAlign, wrapVisibleText } from "./tui/render-kit.js";
|
|
10
|
+
import { padRightVisible, renderPlainOutcome, wrapVisibleText } from "./tui/render-kit.js";
|
|
13
11
|
import { computeProgressScore } from "./progress-score.js";
|
|
14
12
|
import { getGlobalGSDPreferencesPath, getProjectGSDPreferencesPath, parsePreferencesMarkdown, } from "./preferences.js";
|
|
15
13
|
import { parseUnitId } from "./unit-id.js";
|
|
16
14
|
import { logWarning } from "./workflow-logger.js";
|
|
17
|
-
import { formattedShortcutPair } from "./shortcut-defs.js";
|
|
18
15
|
import { readUnitRuntimeRecord } from "./unit-runtime.js";
|
|
19
16
|
import { describeMilestoneReadinessPhase } from "./milestone-readiness.js";
|
|
20
17
|
const ACTIVE_SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
@@ -567,316 +564,84 @@ export function updateProgressWidget(ctx, unitType, unitId, state, accessors, ti
|
|
|
567
564
|
if (mid) {
|
|
568
565
|
updateSliceProgressCache(accessors.getBasePath(), mid.id, slice?.id);
|
|
569
566
|
}
|
|
570
|
-
ctx
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
const healthParts = [];
|
|
640
|
-
if (runtimeSignal?.summary) {
|
|
641
|
-
healthParts.push(theme.fg(healthColor, healthSummary));
|
|
642
|
-
}
|
|
643
|
-
else if (healthLevel !== "green") {
|
|
644
|
-
healthParts.push(`${theme.fg(healthColor, healthIcon)} ${theme.fg(healthColor, healthSummary)}`);
|
|
645
|
-
}
|
|
646
|
-
const headerLeft = [
|
|
647
|
-
`${pad}${spinner} ${theme.fg("accent", theme.bold("GSD"))}`,
|
|
648
|
-
theme.fg("success", modeTag),
|
|
649
|
-
theme.fg(stateColor, activeState),
|
|
650
|
-
...healthParts,
|
|
651
|
-
].join(` ${theme.fg("dim", "·")} `);
|
|
652
|
-
// ETA in header right, after elapsed
|
|
653
|
-
const eta = estimateTimeRemaining();
|
|
654
|
-
const etaShort = eta ? eta.replace(" remaining", " left") : null;
|
|
655
|
-
const headerRight = elapsed
|
|
656
|
-
? (etaShort
|
|
657
|
-
? `${theme.fg("dim", elapsed)} ${theme.fg("dim", "·")} ${theme.fg("dim", etaShort)}`
|
|
658
|
-
: theme.fg("dim", elapsed))
|
|
659
|
-
: "";
|
|
660
|
-
lines.push(rightAlign(headerLeft, headerRight, width));
|
|
661
|
-
// Show health signal details when degraded (yellow/red)
|
|
662
|
-
if (runtimeSignal?.detail && widgetMode !== "min") {
|
|
663
|
-
lines.push(`${pad} ${theme.fg("dim", runtimeSignal.detail)}`);
|
|
664
|
-
}
|
|
665
|
-
else if (score.level !== "green" && score.signals.length > 0 && widgetMode !== "min") {
|
|
666
|
-
// Show up to 3 most relevant signals in compact form
|
|
667
|
-
const topSignals = score.signals
|
|
668
|
-
.filter(s => s.kind === "negative")
|
|
669
|
-
.slice(0, 3);
|
|
670
|
-
if (topSignals.length > 0) {
|
|
671
|
-
const signalStr = topSignals
|
|
672
|
-
.map(s => theme.fg("dim", s.label))
|
|
673
|
-
.join(theme.fg("dim", " · "));
|
|
674
|
-
lines.push(`${pad} ${signalStr}`);
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
// ── Mode: off — return empty ──────────────────────────────────
|
|
678
|
-
if (widgetMode === "off") {
|
|
679
|
-
cachedLines = [];
|
|
680
|
-
cachedWidth = width;
|
|
681
|
-
return [];
|
|
682
|
-
}
|
|
683
|
-
// ── Mode: min — header line only ──────────────────────────────
|
|
684
|
-
if (widgetMode === "min") {
|
|
685
|
-
lines.push(...ui.bar());
|
|
686
|
-
cachedLines = lines;
|
|
687
|
-
cachedWidth = width;
|
|
688
|
-
return lines;
|
|
689
|
-
}
|
|
690
|
-
// ── Mode: small — dense horizontal grid ───────────────────────
|
|
691
|
-
if (widgetMode === "small") {
|
|
692
|
-
lines.length = 0;
|
|
693
|
-
lines.push(...ui.bar());
|
|
694
|
-
const roadmapSlices = mid ? getRoadmapSlicesSync() : null;
|
|
695
|
-
const unitLabel = unitId || [mid?.id, slice?.id, task?.id].filter(Boolean).join("/");
|
|
696
|
-
const statusParts = [
|
|
697
|
-
spinner,
|
|
698
|
-
theme.fg("success", modeTag),
|
|
699
|
-
theme.fg(stateColor, activeState),
|
|
700
|
-
];
|
|
701
|
-
if (runtimeSignal?.summary) {
|
|
702
|
-
statusParts.push(theme.fg(healthColor, healthSummary));
|
|
703
|
-
}
|
|
704
|
-
else if (healthLevel !== "green") {
|
|
705
|
-
statusParts.push(`${theme.fg(healthColor, healthIcon)} ${theme.fg(healthColor, healthSummary)}`);
|
|
706
|
-
}
|
|
707
|
-
const timeValue = [elapsed, etaShort].filter(Boolean).join(" · ") || "--";
|
|
708
|
-
const rowOne = widgetGridColumns(theme, width, [
|
|
709
|
-
`${widgetGridLabel(theme, "status", "border")} ${statusParts.join(" ")}`,
|
|
710
|
-
`${widgetGridLabel(theme, "unit")} ${theme.fg("text", unitLabel || "--")}`,
|
|
711
|
-
`${widgetGridLabel(theme, "spend", "border")} ${theme.fg("dim", formatSmallWidgetSpend())}`,
|
|
712
|
-
`${widgetGridLabel(theme, "time")} ${theme.fg("dim", timeValue)}`,
|
|
713
|
-
]);
|
|
714
|
-
const target = task
|
|
715
|
-
? `${task.id}: ${task.title}`
|
|
716
|
-
: slice
|
|
717
|
-
? `${slice.id}: ${slice.title}`
|
|
718
|
-
: unitId;
|
|
719
|
-
let taskValue = task?.id ?? "--";
|
|
720
|
-
let sliceValue = slice?.id ?? "--";
|
|
721
|
-
if (shouldRenderRoadmapProgress(roadmapSlices)) {
|
|
722
|
-
const { done, total, activeSliceTasks } = roadmapSlices;
|
|
723
|
-
const barWidth = Math.max(4, Math.min(14, Math.floor(width * 0.12)));
|
|
724
|
-
const bar = renderProgressBar(theme, done, total, barWidth);
|
|
725
|
-
sliceValue = `${bar} ${theme.fg("text", `${done}/${total}`)}`;
|
|
726
|
-
if (activeSliceTasks && activeSliceTasks.total > 0) {
|
|
727
|
-
const taskNum = isHook
|
|
728
|
-
? Math.max(activeSliceTasks.done, 1)
|
|
729
|
-
: Math.min(activeSliceTasks.done + 1, activeSliceTasks.total);
|
|
730
|
-
taskValue = `${theme.fg("accent", `${taskNum}`)}${theme.fg("dim", `/${activeSliceTasks.total}`)}`;
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
const rowTwo = widgetGridColumns(theme, width, [
|
|
734
|
-
`${widgetGridLabel(theme, "phase", "border")} ${theme.fg("dim", unitType)}`,
|
|
735
|
-
`${widgetGridLabel(theme, "work")} ${theme.fg("text", target || "--")}`,
|
|
736
|
-
`${widgetGridLabel(theme, "task", "border")} ${taskValue}`,
|
|
737
|
-
`${widgetGridLabel(theme, "slice")} ${sliceValue}`,
|
|
738
|
-
]);
|
|
739
|
-
lines.push(rowOne);
|
|
740
|
-
lines.push(rowTwo);
|
|
741
|
-
lines.push(...ui.bar());
|
|
742
|
-
cachedLines = lines;
|
|
743
|
-
cachedWidth = width;
|
|
744
|
-
return lines;
|
|
745
|
-
}
|
|
746
|
-
// ── Mode: full — complete two-column layout ───────────────────
|
|
747
|
-
lines.push("");
|
|
748
|
-
// Context section: milestone + slice. Footer owns model/cost/context.
|
|
749
|
-
const hasContext = !!(mid || (slice && unitType !== "research-milestone" && unitType !== "plan-milestone"));
|
|
750
|
-
if (mid) {
|
|
751
|
-
lines.push(truncateToWidth(`${pad}${theme.fg("dim", mid.title)}`, width, "…"));
|
|
752
|
-
}
|
|
753
|
-
if (slice && unitType !== "research-milestone" && unitType !== "plan-milestone") {
|
|
754
|
-
lines.push(truncateToWidth(`${pad}${theme.fg("text", theme.bold(`${slice.id}: ${slice.title}`))}`, width, "…"));
|
|
755
|
-
}
|
|
756
|
-
if (hasContext)
|
|
757
|
-
lines.push("");
|
|
758
|
-
const target = task ? `${task.id}: ${task.title}` : unitId;
|
|
759
|
-
const actionLeft = `${pad}${theme.fg("accent", "▸")} ${theme.fg("accent", verb)} ${theme.fg("text", target)}`;
|
|
760
|
-
const tierTag = tierBadge ? theme.fg("dim", `[${tierBadge}] `) : "";
|
|
761
|
-
const phaseBadge = `${tierTag}${theme.fg("dim", phaseLabel)}`;
|
|
762
|
-
lines.push(rightAlign(actionLeft, phaseBadge, width));
|
|
763
|
-
lines.push("");
|
|
764
|
-
// Two-column body
|
|
765
|
-
const minTwoColWidth = 76;
|
|
766
|
-
const roadmapSlices = mid ? getRoadmapSlicesSync() : null;
|
|
767
|
-
const taskDetailsCol = roadmapSlices?.taskDetails ?? null;
|
|
768
|
-
const useTwoCol = width >= minTwoColWidth && taskDetailsCol !== null && taskDetailsCol.length > 0;
|
|
769
|
-
const leftColWidth = useTwoCol
|
|
770
|
-
? Math.floor(width * (width >= 100 ? 0.45 : 0.50))
|
|
771
|
-
: width;
|
|
772
|
-
const leftLines = [];
|
|
773
|
-
if (shouldRenderRoadmapProgress(roadmapSlices)) {
|
|
774
|
-
const { done, total, activeSliceTasks } = roadmapSlices;
|
|
775
|
-
const barWidth = Math.max(6, Math.min(18, Math.floor(leftColWidth * 0.4)));
|
|
776
|
-
const bar = renderProgressBar(theme, done, total, barWidth);
|
|
777
|
-
let meta = `${theme.fg("text", `${done}`)}${theme.fg("dim", `/${total} slices`)}`;
|
|
778
|
-
if (activeSliceTasks && activeSliceTasks.total > 0) {
|
|
779
|
-
const taskNum = isHook
|
|
780
|
-
? Math.max(activeSliceTasks.done, 1)
|
|
781
|
-
: Math.min(activeSliceTasks.done + 1, activeSliceTasks.total);
|
|
782
|
-
meta += `${theme.fg("dim", " · task ")}${theme.fg("accent", `${taskNum}`)}${theme.fg("dim", `/${activeSliceTasks.total}`)}`;
|
|
783
|
-
}
|
|
784
|
-
leftLines.push(`${pad}${bar} ${meta}`);
|
|
785
|
-
}
|
|
786
|
-
// Build right column: task checklist
|
|
787
|
-
const rightLines = [];
|
|
788
|
-
const maxVisibleTasks = 8;
|
|
789
|
-
// Max visible chars for task title text (before ANSI theming)
|
|
790
|
-
const maxTaskTitleLen = 45;
|
|
791
|
-
function truncTitle(s) {
|
|
792
|
-
return s.length > maxTaskTitleLen ? s.slice(0, maxTaskTitleLen - 1) + "…" : s;
|
|
793
|
-
}
|
|
794
|
-
function formatTaskLine(t, isCurrent) {
|
|
795
|
-
const glyph = t.done
|
|
796
|
-
? theme.fg("success", "*")
|
|
797
|
-
: isCurrent
|
|
798
|
-
? theme.fg("accent", ">")
|
|
799
|
-
: theme.fg("dim", ".");
|
|
800
|
-
const id = isCurrent
|
|
801
|
-
? theme.fg("accent", t.id)
|
|
802
|
-
: t.done
|
|
803
|
-
? theme.fg("muted", t.id)
|
|
804
|
-
: theme.fg("dim", t.id);
|
|
805
|
-
const short = truncTitle(t.title);
|
|
806
|
-
const title = isCurrent
|
|
807
|
-
? theme.fg("text", short)
|
|
808
|
-
: t.done
|
|
809
|
-
? theme.fg("muted", short)
|
|
810
|
-
: theme.fg("text", short);
|
|
811
|
-
return `${glyph} ${id}: ${title}`;
|
|
812
|
-
}
|
|
813
|
-
if (useTwoCol && taskDetailsCol) {
|
|
814
|
-
for (const t of taskDetailsCol.slice(0, maxVisibleTasks)) {
|
|
815
|
-
rightLines.push(formatTaskLine(t, !!(task && t.id === task.id)));
|
|
816
|
-
}
|
|
817
|
-
if (taskDetailsCol.length > maxVisibleTasks) {
|
|
818
|
-
rightLines.push(theme.fg("dim", ` +${taskDetailsCol.length - maxVisibleTasks} more`));
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
else if (!useTwoCol && taskDetailsCol && taskDetailsCol.length > 0) {
|
|
822
|
-
for (const t of taskDetailsCol.slice(0, maxVisibleTasks)) {
|
|
823
|
-
leftLines.push(`${pad}${formatTaskLine(t, !!(task && t.id === task.id))}`);
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
// Compose columns
|
|
827
|
-
if (useTwoCol) {
|
|
828
|
-
const maxRows = Math.max(leftLines.length, rightLines.length);
|
|
829
|
-
if (maxRows > 0) {
|
|
830
|
-
lines.push("");
|
|
831
|
-
for (let i = 0; i < maxRows; i++) {
|
|
832
|
-
const left = padRightVisible(truncateToWidth(leftLines[i] ?? "", leftColWidth, "…"), leftColWidth);
|
|
833
|
-
const right = rightLines[i] ?? "";
|
|
834
|
-
lines.push(`${left}${right}`);
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
}
|
|
838
|
-
else {
|
|
839
|
-
if (leftLines.length > 0) {
|
|
840
|
-
lines.push("");
|
|
841
|
-
for (const l of leftLines)
|
|
842
|
-
lines.push(truncateToWidth(l, width, "…"));
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
// ── Auto controls. Footer owns cwd/branch/model/cost/context. ───
|
|
846
|
-
lines.push("");
|
|
847
|
-
// Step-mode guidance — shown above keyboard hints when auto is paused
|
|
848
|
-
if (accessors.isStepMode()) {
|
|
849
|
-
lines.push(`${pad}${theme.fg("accent", "→")} ${theme.fg("dim", "/gsd next to advance one step · /gsd status for overview")}`);
|
|
850
|
-
}
|
|
851
|
-
// Hints line
|
|
852
|
-
const hintParts = [];
|
|
853
|
-
hintParts.push("esc pause");
|
|
854
|
-
hintParts.push(`${formattedShortcutPair("dashboard")} dashboard`);
|
|
855
|
-
hintParts.push(`${formattedShortcutPair("parallel")} parallel`);
|
|
856
|
-
const hintStr = theme.fg("dim", hintParts.join(" | "));
|
|
857
|
-
lines.push(rightAlign("", hintStr, width));
|
|
858
|
-
lines.push(...ui.bar());
|
|
859
|
-
cachedLines = lines;
|
|
860
|
-
cachedWidth = width;
|
|
861
|
-
return lines;
|
|
862
|
-
},
|
|
863
|
-
invalidate() {
|
|
864
|
-
cachedLines = undefined;
|
|
865
|
-
cachedWidth = undefined;
|
|
866
|
-
},
|
|
867
|
-
dispose() {
|
|
868
|
-
clearInterval(spinnerTimer);
|
|
869
|
-
if (progressRefreshTimer)
|
|
870
|
-
clearInterval(progressRefreshTimer);
|
|
871
|
-
},
|
|
872
|
-
};
|
|
873
|
-
});
|
|
567
|
+
installGsdProgressStrip(ctx, accessors, unitType, unitId, mid, slice, task, isHook, verb);
|
|
568
|
+
}
|
|
569
|
+
function buildCompletionRollupLines(theme, snapshot, width) {
|
|
570
|
+
const innerWidth = Math.max(8, width - 2);
|
|
571
|
+
const lines = [];
|
|
572
|
+
const add = (line) => {
|
|
573
|
+
if (!line)
|
|
574
|
+
return;
|
|
575
|
+
for (const wrapped of wrapVisibleText(line, innerWidth).slice(0, 12 - lines.length)) {
|
|
576
|
+
lines.push(wrapped);
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
if (snapshot.milestoneTitle) {
|
|
580
|
+
add(theme.fg("text", snapshot.milestoneTitle));
|
|
581
|
+
}
|
|
582
|
+
const oneLiner = normalizeRollupText(snapshot.oneLiner);
|
|
583
|
+
if (oneLiner) {
|
|
584
|
+
add(`${theme.fg("accent", "Outcome")} ${theme.fg("text", oneLiner)}`);
|
|
585
|
+
}
|
|
586
|
+
const changed = [
|
|
587
|
+
...(snapshot.successCriteriaResults ? [snapshot.successCriteriaResults] : []),
|
|
588
|
+
...(snapshot.requirementOutcomes ? [snapshot.requirementOutcomes] : []),
|
|
589
|
+
...(snapshot.keyDecisions ?? []),
|
|
590
|
+
].map(normalizeRollupText).filter((v) => !!v).slice(0, 4);
|
|
591
|
+
if (changed.length > 0) {
|
|
592
|
+
add(theme.fg("accent", "What changed"));
|
|
593
|
+
for (const item of changed)
|
|
594
|
+
add(` - ${theme.fg("text", item)}`);
|
|
595
|
+
}
|
|
596
|
+
const verification = [
|
|
597
|
+
snapshot.definitionOfDoneResults,
|
|
598
|
+
snapshot.deviations ? `Deviations: ${snapshot.deviations}` : null,
|
|
599
|
+
snapshot.followUps ? `Follow-ups: ${snapshot.followUps}` : null,
|
|
600
|
+
].map(normalizeRollupText).filter((v) => !!v);
|
|
601
|
+
if (verification.length > 0 || (snapshot.keyFiles?.length ?? 0) > 0) {
|
|
602
|
+
add(theme.fg("accent", "Verification"));
|
|
603
|
+
for (const item of verification.slice(0, 3))
|
|
604
|
+
add(` - ${theme.fg("text", item)}`);
|
|
605
|
+
const files = (snapshot.keyFiles ?? []).map(normalizeRollupText).filter((v) => !!v).slice(0, 4);
|
|
606
|
+
if (files.length > 0) {
|
|
607
|
+
add(` ${theme.fg("accent", "Files:")} ${theme.fg("text", files.join("; "))}`);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
const lessons = (snapshot.lessonsLearned ?? []).map(normalizeRollupText).filter((v) => !!v).slice(0, 2);
|
|
611
|
+
if (lessons.length > 0) {
|
|
612
|
+
add(`${theme.fg("accent", "Lessons:")} ${theme.fg("text", lessons.join("; "))}`);
|
|
613
|
+
}
|
|
614
|
+
const nextAction = snapshot.allMilestonesComplete
|
|
615
|
+
? snapshot.unmappedActiveRequirements && snapshot.unmappedActiveRequirements > 0
|
|
616
|
+
? `Review ${snapshot.unmappedActiveRequirements} unmapped active requirement${snapshot.unmappedActiveRequirements === 1 ? "" : "s"}, then start a new milestone when ready.`
|
|
617
|
+
: "Review the roll-up, then start a new milestone when ready."
|
|
618
|
+
: "Review the roll-up, inspect status, or continue to the next milestone.";
|
|
619
|
+
add(`${theme.fg("success", "Next")} ${theme.fg("text", nextAction)}`);
|
|
620
|
+
if ((snapshot.requirementsBacklogPreview?.length ?? 0) > 0) {
|
|
621
|
+
add(theme.fg("accent", "Requirements backlog"));
|
|
622
|
+
for (const line of snapshot.requirementsBacklogPreview ?? []) {
|
|
623
|
+
add(` ${theme.fg("text", line)}`);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
const commands = snapshot.allMilestonesComplete
|
|
627
|
+
? snapshot.unmappedActiveRequirements && snapshot.unmappedActiveRequirements > 0
|
|
628
|
+
? ["/gsd to review requirements backlog", "/gsd status for overview", "/gsd visualize to inspect", "/gsd start for new work"]
|
|
629
|
+
: ["/gsd status for overview", "/gsd visualize to inspect", "/gsd notifications for history", "/gsd start for new work"]
|
|
630
|
+
: ["/gsd status for overview", "/gsd visualize to inspect", "/gsd notifications for history", "/gsd auto for next milestone"];
|
|
631
|
+
const footerCommands = theme.fg("dim", commands.join(" · "));
|
|
632
|
+
if (snapshot.reason) {
|
|
633
|
+
add(theme.fg("dim", snapshot.reason));
|
|
634
|
+
}
|
|
635
|
+
return { lines, footerCommands };
|
|
874
636
|
}
|
|
875
637
|
export function setCompletionProgressWidget(ctx, snapshot) {
|
|
876
638
|
if (!ctx.hasUI)
|
|
877
639
|
return;
|
|
878
|
-
const widgetKey = "gsd-progress";
|
|
879
640
|
clearAutoOutcomeWidget(ctx);
|
|
641
|
+
// Clear the structured GSD progress strip so it does not linger behind
|
|
642
|
+
// the completion widget (the two use separate display channels).
|
|
643
|
+
ctx.ui?.setGsdProgress?.(undefined);
|
|
644
|
+
ctx.ui.setWidget("gsd-progress", undefined);
|
|
880
645
|
if (typeof ctx.ui?.setHeader === "function") {
|
|
881
646
|
ctx.ui.setHeader(() => ({
|
|
882
647
|
render() { return []; },
|
|
@@ -886,113 +651,20 @@ export function setCompletionProgressWidget(ctx, snapshot) {
|
|
|
886
651
|
if (typeof ctx.ui?.setStatus === "function") {
|
|
887
652
|
ctx.ui.setStatus("gsd-step", undefined);
|
|
888
653
|
}
|
|
889
|
-
ctx.ui.setWidget(
|
|
654
|
+
ctx.ui.setWidget("gsd-outcome", (_tui, theme) => ({
|
|
890
655
|
render(width) {
|
|
891
|
-
const ui = makeUI(theme, width);
|
|
892
|
-
const pad = INDENT.base;
|
|
893
|
-
const lines = [];
|
|
894
|
-
const contentWidth = Math.max(20, width - visibleWidth(pad));
|
|
895
|
-
const add = (line = "") => {
|
|
896
|
-
lines.push(line ? truncateToWidth(`${pad}${line}`, width, "…") : "");
|
|
897
|
-
};
|
|
898
|
-
const addSection = (label, value, indent = "") => {
|
|
899
|
-
const clean = normalizeRollupText(value);
|
|
900
|
-
if (!clean)
|
|
901
|
-
return;
|
|
902
|
-
add(`${indent}${theme.fg("accent", label)} ${theme.fg("text", truncateToWidth(clean, contentWidth - indent.length - label.length - 1, "…"))}`);
|
|
903
|
-
};
|
|
904
|
-
const addList = (label, values, limit, indent = "") => {
|
|
905
|
-
const clean = (values ?? []).map(normalizeRollupText).filter((v) => !!v);
|
|
906
|
-
if (clean.length === 0)
|
|
907
|
-
return;
|
|
908
|
-
const shown = clean.slice(0, limit);
|
|
909
|
-
const more = clean.length > shown.length ? ` (+${clean.length - shown.length} more)` : "";
|
|
910
|
-
add(`${indent}${theme.fg("accent", label)} ${theme.fg("text", truncateToWidth(shown.join("; ") + more, contentWidth - indent.length - label.length - 1, "…"))}`);
|
|
911
|
-
};
|
|
912
|
-
lines.push(...ui.bar());
|
|
913
656
|
const elapsed = formatAutoElapsed(snapshot.startedAt);
|
|
914
657
|
const heading = snapshot.allMilestonesComplete
|
|
915
658
|
? "All milestones complete"
|
|
916
659
|
: snapshot.milestoneId
|
|
917
660
|
? `Milestone ${snapshot.milestoneId} roll-up`
|
|
918
661
|
: "Milestone roll-up";
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
addSection("", snapshot.oneLiner, " ");
|
|
926
|
-
const changed = [
|
|
927
|
-
...(snapshot.successCriteriaResults ? [snapshot.successCriteriaResults] : []),
|
|
928
|
-
...(snapshot.requirementOutcomes ? [snapshot.requirementOutcomes] : []),
|
|
929
|
-
...(snapshot.keyDecisions ?? []),
|
|
930
|
-
].map(normalizeRollupText).filter((v) => !!v).slice(0, 4);
|
|
931
|
-
if (changed.length > 0) {
|
|
932
|
-
lines.push("");
|
|
933
|
-
add(theme.fg("accent", "What changed"));
|
|
934
|
-
for (const item of changed)
|
|
935
|
-
add(` - ${theme.fg("text", item)}`);
|
|
936
|
-
}
|
|
937
|
-
const verification = [
|
|
938
|
-
snapshot.definitionOfDoneResults,
|
|
939
|
-
snapshot.deviations ? `Deviations: ${snapshot.deviations}` : null,
|
|
940
|
-
snapshot.followUps ? `Follow-ups: ${snapshot.followUps}` : null,
|
|
941
|
-
].map(normalizeRollupText).filter((v) => !!v);
|
|
942
|
-
if (verification.length > 0 || (snapshot.keyFiles?.length ?? 0) > 0) {
|
|
943
|
-
lines.push("");
|
|
944
|
-
add(theme.fg("accent", "Verification"));
|
|
945
|
-
for (const item of verification.slice(0, 3))
|
|
946
|
-
add(` - ${theme.fg("text", item)}`);
|
|
947
|
-
addList("Files:", snapshot.keyFiles, 4, " ");
|
|
948
|
-
}
|
|
949
|
-
if ((snapshot.lessonsLearned?.length ?? 0) > 0) {
|
|
950
|
-
lines.push("");
|
|
951
|
-
addList("Lessons:", snapshot.lessonsLearned, 2);
|
|
952
|
-
}
|
|
953
|
-
const hasSliceTotals = typeof snapshot.completedSlices === "number" && typeof snapshot.totalSlices === "number" && snapshot.totalSlices > 0;
|
|
954
|
-
lines.push("");
|
|
955
|
-
const stats = [];
|
|
956
|
-
if (hasSliceTotals)
|
|
957
|
-
stats.push(theme.fg("success", `${snapshot.completedSlices}/${snapshot.totalSlices} slices`));
|
|
958
|
-
if (snapshot.unitCount > 0)
|
|
959
|
-
stats.push(theme.fg("dim", `${snapshot.unitCount} units`));
|
|
960
|
-
if (snapshot.totalTokens > 0)
|
|
961
|
-
stats.push(theme.fg("dim", `${formatWidgetTokens(snapshot.totalTokens)} tokens`));
|
|
962
|
-
if (snapshot.totalCost > 0)
|
|
963
|
-
stats.push(theme.fg("warning", `$${snapshot.totalCost.toFixed(2)}`));
|
|
964
|
-
if (typeof snapshot.cacheHitRate === "number") {
|
|
965
|
-
const hitColor = snapshot.cacheHitRate >= 70 ? "success" : snapshot.cacheHitRate >= 40 ? "warning" : "error";
|
|
966
|
-
stats.push(theme.fg(hitColor, `${Math.round(snapshot.cacheHitRate)}% cache hit`));
|
|
967
|
-
}
|
|
968
|
-
if (stats.length > 0) {
|
|
969
|
-
add(`${theme.fg("accent", "Run totals")} ${stats.join(theme.fg("dim", " · "))}`);
|
|
970
|
-
}
|
|
971
|
-
lines.push("");
|
|
972
|
-
const nextAction = snapshot.allMilestonesComplete
|
|
973
|
-
? snapshot.unmappedActiveRequirements && snapshot.unmappedActiveRequirements > 0
|
|
974
|
-
? `Review ${snapshot.unmappedActiveRequirements} unmapped active requirement${snapshot.unmappedActiveRequirements === 1 ? "" : "s"}, then start a new milestone when ready.`
|
|
975
|
-
: "Review the roll-up, then start a new milestone when ready."
|
|
976
|
-
: "Review the roll-up, inspect status, or continue to the next milestone.";
|
|
977
|
-
const commands = snapshot.allMilestonesComplete
|
|
978
|
-
? snapshot.unmappedActiveRequirements && snapshot.unmappedActiveRequirements > 0
|
|
979
|
-
? ["/gsd to review requirements backlog", "/gsd status for overview", "/gsd visualize to inspect", "/gsd start for new work"]
|
|
980
|
-
: ["/gsd status for overview", "/gsd visualize to inspect", "/gsd notifications for history", "/gsd start for new work"]
|
|
981
|
-
: ["/gsd status for overview", "/gsd visualize to inspect", "/gsd notifications for history", "/gsd auto for next milestone"];
|
|
982
|
-
add(`${theme.fg("success", "Next")} ${theme.fg("text", nextAction)}`);
|
|
983
|
-
if ((snapshot.requirementsBacklogPreview?.length ?? 0) > 0) {
|
|
984
|
-
lines.push("");
|
|
985
|
-
add(theme.fg("accent", "Requirements backlog"));
|
|
986
|
-
for (const line of snapshot.requirementsBacklogPreview ?? []) {
|
|
987
|
-
add(` ${theme.fg("text", line)}`);
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
add(theme.fg("dim", commands.join(" · ")));
|
|
991
|
-
const location = snapshot.basePath ? theme.fg("dim", snapshot.basePath) : "";
|
|
992
|
-
const reason = theme.fg("dim", snapshot.reason);
|
|
993
|
-
lines.push(rightAlign(`${pad}${truncateToWidth(location, Math.max(0, width - 32), "…")}`, reason, width));
|
|
994
|
-
lines.push(...ui.bar());
|
|
995
|
-
return lines;
|
|
662
|
+
const statusLine = `${theme.fg("success", "✓")} ${theme.fg("text", heading)}`;
|
|
663
|
+
const { lines, footerCommands } = buildCompletionRollupLines(theme, snapshot, width);
|
|
664
|
+
return renderPlainOutcome(theme, width, statusLine, lines, {
|
|
665
|
+
headerRight: elapsed ? theme.fg("dim", elapsed) : undefined,
|
|
666
|
+
footerRight: footerCommands,
|
|
667
|
+
});
|
|
996
668
|
},
|
|
997
669
|
invalidate() { },
|
|
998
670
|
dispose() { },
|
|
@@ -1001,6 +673,8 @@ export function setCompletionProgressWidget(ctx, snapshot) {
|
|
|
1001
673
|
export function setAutoOutcomeWidget(ctx, snapshot) {
|
|
1002
674
|
if (!ctx.hasUI)
|
|
1003
675
|
return;
|
|
676
|
+
ctx.ui?.setGsdProgress?.(undefined);
|
|
677
|
+
ctx.ui.setWidget("gsd-progress", undefined);
|
|
1004
678
|
ctx.ui.setWidget("gsd-outcome", (_tui, theme) => ({
|
|
1005
679
|
render(width) {
|
|
1006
680
|
const color = snapshot.status === "failed" || snapshot.status === "blocked"
|
|
@@ -1013,37 +687,49 @@ export function setAutoOutcomeWidget(ctx, snapshot) {
|
|
|
1013
687
|
: snapshot.status === "blocked" ? "!"
|
|
1014
688
|
: snapshot.status === "paused" ? "||"
|
|
1015
689
|
: "●";
|
|
1016
|
-
// renderPanel indents body lines by 2; mirror that for wrap width.
|
|
1017
|
-
const innerWidth = Math.max(8, width - 2);
|
|
1018
|
-
const maxLines = 7;
|
|
1019
|
-
const lines = [];
|
|
1020
690
|
const elapsed = snapshot.startedAt ? formatAutoElapsed(snapshot.startedAt) : "";
|
|
1021
|
-
const
|
|
1022
|
-
// Elapsed rides inline after the title on the header rule.
|
|
1023
|
-
const title = elapsed ? `${heading} ${theme.fg("dim", elapsed)}` : heading;
|
|
691
|
+
const statusLine = `${theme.fg(color, icon)} ${theme.fg("text", snapshot.title)}`;
|
|
1024
692
|
const commands = snapshot.commands?.filter(Boolean) ?? [];
|
|
1025
|
-
const commandLine = commands.length > 0 ? theme.fg("dim", commands.join(" · ")) :
|
|
1026
|
-
const
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
693
|
+
const commandLine = commands.length > 0 ? theme.fg("dim", commands.join(" · ")) : undefined;
|
|
694
|
+
const innerWidth = Math.max(8, width);
|
|
695
|
+
const maxLines = 7;
|
|
696
|
+
const splitRows = [];
|
|
697
|
+
let commandsPlaced = false;
|
|
698
|
+
const pushLeft = (left) => {
|
|
699
|
+
if (splitRows.length >= maxLines - (commandLine ? 1 : 0))
|
|
1030
700
|
return;
|
|
1031
|
-
|
|
1032
|
-
for (const [idx, line] of wrapVisibleText(text, available).slice(0, remaining).entries()) {
|
|
1033
|
-
lines.push(`${idx === 0 ? prefix : " ".repeat(visibleWidth(prefix))}${line}`);
|
|
1034
|
-
}
|
|
701
|
+
splitRows.push({ left });
|
|
1035
702
|
};
|
|
1036
703
|
if (snapshot.detail) {
|
|
1037
|
-
|
|
704
|
+
for (const line of wrapVisibleText(snapshot.detail, innerWidth).slice(0, maxLines)) {
|
|
705
|
+
pushLeft(theme.fg("text", line));
|
|
706
|
+
}
|
|
1038
707
|
}
|
|
1039
708
|
if (snapshot.unitLabel) {
|
|
1040
|
-
|
|
709
|
+
const lastLeft = theme.fg("dim", "Last · ") + theme.fg("text", snapshot.unitLabel);
|
|
710
|
+
if (commandLine &&
|
|
711
|
+
visibleWidth(lastLeft) + visibleWidth(commandLine) + 2 <= innerWidth &&
|
|
712
|
+
splitRows.length < maxLines) {
|
|
713
|
+
splitRows.push({ left: lastLeft, right: commandLine });
|
|
714
|
+
commandsPlaced = true;
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
pushLeft(lastLeft);
|
|
718
|
+
}
|
|
1041
719
|
}
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
720
|
+
const nextPrefix = theme.fg("success", "Next · ");
|
|
721
|
+
const nextPrefixWidth = visibleWidth(nextPrefix);
|
|
722
|
+
for (const [idx, line] of wrapVisibleText(snapshot.nextAction, Math.max(8, innerWidth - nextPrefixWidth)).entries()) {
|
|
723
|
+
if (splitRows.length >= maxLines - (commandLine && !commandsPlaced ? 1 : 0))
|
|
724
|
+
break;
|
|
725
|
+
const lead = idx === 0 ? nextPrefix : " ".repeat(nextPrefixWidth);
|
|
726
|
+
pushLeft(theme.fg("text", lead + line));
|
|
1045
727
|
}
|
|
1046
|
-
return
|
|
728
|
+
return renderPlainOutcome(theme, width, statusLine, [], {
|
|
729
|
+
headerRight: elapsed ? theme.fg("dim", elapsed) : undefined,
|
|
730
|
+
splitRows,
|
|
731
|
+
footerRight: commandLine && !commandsPlaced ? commandLine : undefined,
|
|
732
|
+
});
|
|
1047
733
|
},
|
|
1048
734
|
invalidate() { },
|
|
1049
735
|
dispose() { },
|
|
@@ -1111,3 +797,141 @@ function extractMessageText(value) {
|
|
|
1111
797
|
}
|
|
1112
798
|
return null;
|
|
1113
799
|
}
|
|
800
|
+
function buildGsdProgressPayload(accessors, unitType, unitId, mid, slice, task, isHook, verb, runtimeRecord) {
|
|
801
|
+
const mode = getWidgetMode();
|
|
802
|
+
if (mode === "off")
|
|
803
|
+
return undefined;
|
|
804
|
+
const elapsed = formatAutoElapsed(accessors.getAutoStartTime());
|
|
805
|
+
const eta = estimateTimeRemaining();
|
|
806
|
+
const etaShort = eta ? eta.replace(" remaining", " left") : undefined;
|
|
807
|
+
const modeTag = accessors.isStepMode() ? "NEXT" : "AUTO";
|
|
808
|
+
const target = task
|
|
809
|
+
? `${task.id}: ${task.title}`
|
|
810
|
+
: slice
|
|
811
|
+
? `${slice.id}: ${slice.title}`
|
|
812
|
+
: unitId;
|
|
813
|
+
const phase = `${verb} ${target}`.trim();
|
|
814
|
+
const roadmapSlices = mid ? getRoadmapSlicesSync() : null;
|
|
815
|
+
let taskProgress;
|
|
816
|
+
let sliceProgress;
|
|
817
|
+
if (shouldRenderRoadmapProgress(roadmapSlices)) {
|
|
818
|
+
if (roadmapSlices.total > 0) {
|
|
819
|
+
sliceProgress = { done: roadmapSlices.done, total: roadmapSlices.total };
|
|
820
|
+
}
|
|
821
|
+
const { activeSliceTasks } = roadmapSlices;
|
|
822
|
+
if (activeSliceTasks && activeSliceTasks.total > 0) {
|
|
823
|
+
const taskNum = isHook
|
|
824
|
+
? Math.max(activeSliceTasks.done, 1)
|
|
825
|
+
: Math.min(activeSliceTasks.done + 1, activeSliceTasks.total);
|
|
826
|
+
taskProgress = { done: taskNum, total: activeSliceTasks.total };
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
const runtimeSignal = formatRuntimeHealthSignal(runtimeRecord);
|
|
830
|
+
const score = computeProgressScore();
|
|
831
|
+
let healthSummary;
|
|
832
|
+
if (mode !== "min") {
|
|
833
|
+
if (runtimeSignal?.detail) {
|
|
834
|
+
healthSummary = runtimeSignal.detail;
|
|
835
|
+
}
|
|
836
|
+
else if (score.level !== "green") {
|
|
837
|
+
healthSummary = score.signals
|
|
838
|
+
.filter((signal) => signal.kind === "negative")
|
|
839
|
+
.slice(0, 2)
|
|
840
|
+
.map((signal) => signal.label)
|
|
841
|
+
.join(" · ");
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
const unitLabel = unitId || [mid?.id, slice?.id, task?.id].filter(Boolean).join("/");
|
|
845
|
+
return {
|
|
846
|
+
phase,
|
|
847
|
+
modeTag,
|
|
848
|
+
taskProgress,
|
|
849
|
+
sliceProgress,
|
|
850
|
+
sliceLabel: slice?.id,
|
|
851
|
+
taskLabel: task?.id,
|
|
852
|
+
unitLabel,
|
|
853
|
+
elapsed,
|
|
854
|
+
eta: etaShort,
|
|
855
|
+
healthSummary,
|
|
856
|
+
path: accessors.getBasePath(),
|
|
857
|
+
widgetMode: mode,
|
|
858
|
+
};
|
|
859
|
+
}
|
|
860
|
+
function installGsdProgressStrip(ctx, accessors, unitType, unitId, mid, slice, task, isHook, verb) {
|
|
861
|
+
if (!ctx.hasUI || typeof ctx.ui?.setGsdProgress !== "function")
|
|
862
|
+
return;
|
|
863
|
+
ctx.ui.setWidget("gsd-progress", undefined);
|
|
864
|
+
let cachedRuntimeRecord = null;
|
|
865
|
+
const refreshRuntimeRecord = () => {
|
|
866
|
+
try {
|
|
867
|
+
cachedRuntimeRecord = readUnitRuntimeRecord(accessors.getBasePath(), unitType, unitId);
|
|
868
|
+
}
|
|
869
|
+
catch {
|
|
870
|
+
cachedRuntimeRecord = null;
|
|
871
|
+
}
|
|
872
|
+
};
|
|
873
|
+
refreshRuntimeRecord();
|
|
874
|
+
let progressRefreshTimer;
|
|
875
|
+
let elapsedRefreshTimer;
|
|
876
|
+
const dispose = () => {
|
|
877
|
+
if (progressRefreshTimer !== undefined) {
|
|
878
|
+
clearInterval(progressRefreshTimer);
|
|
879
|
+
progressRefreshTimer = undefined;
|
|
880
|
+
}
|
|
881
|
+
if (elapsedRefreshTimer !== undefined) {
|
|
882
|
+
clearInterval(elapsedRefreshTimer);
|
|
883
|
+
elapsedRefreshTimer = undefined;
|
|
884
|
+
}
|
|
885
|
+
// Do not call setGsdProgress here: callers (resetExtensionUI, unit transition,
|
|
886
|
+
// setCompletionProgressWidget) clear gsdProgressState directly, and calling it
|
|
887
|
+
// here would re-enter setGsdProgress which calls dispose again — infinite recursion.
|
|
888
|
+
};
|
|
889
|
+
const publish = (registerDispose = false) => {
|
|
890
|
+
if (accessors.isSessionSwitching()) {
|
|
891
|
+
// On initial install (registerDispose) clear any stale strip from the
|
|
892
|
+
// previous unit. On timer refreshes, skip silently — calling
|
|
893
|
+
// setGsdProgress(undefined) would run dispose() and permanently clear
|
|
894
|
+
// the refresh timers, leaving the strip blank after the switch.
|
|
895
|
+
if (registerDispose) {
|
|
896
|
+
ctx.ui.setGsdProgress(undefined);
|
|
897
|
+
}
|
|
898
|
+
return false;
|
|
899
|
+
}
|
|
900
|
+
ctx.ui.setGsdProgress(buildGsdProgressPayload(accessors, unitType, unitId, mid, slice, task, isHook, verb, cachedRuntimeRecord), registerDispose ? dispose : undefined);
|
|
901
|
+
return true;
|
|
902
|
+
};
|
|
903
|
+
const startElapsedRefreshTimer = () => {
|
|
904
|
+
if (elapsedRefreshTimer !== undefined)
|
|
905
|
+
return;
|
|
906
|
+
elapsedRefreshTimer = setInterval(() => {
|
|
907
|
+
try {
|
|
908
|
+
publish();
|
|
909
|
+
}
|
|
910
|
+
catch (err) {
|
|
911
|
+
logWarning("dashboard", `progress strip elapsed refresh failed: ${getErrorMessage(err)}`);
|
|
912
|
+
}
|
|
913
|
+
}, 1_000);
|
|
914
|
+
elapsedRefreshTimer.unref?.();
|
|
915
|
+
};
|
|
916
|
+
const startProgressRefreshTimer = () => {
|
|
917
|
+
if (progressRefreshTimer !== undefined)
|
|
918
|
+
return;
|
|
919
|
+
progressRefreshTimer = setInterval(() => {
|
|
920
|
+
try {
|
|
921
|
+
if (mid) {
|
|
922
|
+
updateSliceProgressCache(accessors.getBasePath(), mid.id, slice?.id);
|
|
923
|
+
}
|
|
924
|
+
refreshRuntimeRecord();
|
|
925
|
+
publish();
|
|
926
|
+
}
|
|
927
|
+
catch (err) {
|
|
928
|
+
logWarning("dashboard", `progress strip refresh failed: ${getErrorMessage(err)}`);
|
|
929
|
+
}
|
|
930
|
+
}, 15_000);
|
|
931
|
+
progressRefreshTimer.unref?.();
|
|
932
|
+
};
|
|
933
|
+
if (publish(true)) {
|
|
934
|
+
startElapsedRefreshTimer();
|
|
935
|
+
startProgressRefreshTimer();
|
|
936
|
+
}
|
|
937
|
+
}
|