@opengsd/gsd-pi 1.2.0-dev.0b870afa → 1.2.0-dev.23d85b63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-model-override.d.ts +15 -0
- package/dist/cli-model-override.js +21 -0
- package/dist/cli.js +14 -19
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/loader.js +6 -4
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- package/dist/register-agent-bundles.d.ts +11 -2
- package/dist/register-agent-bundles.js +18 -4
- package/dist/resource-loader.d.ts +10 -5
- package/dist/resource-loader.js +121 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/ask-user-questions.js +3 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +447 -215
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +33 -1
- package/dist/resources/extensions/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +21 -6
- package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
- package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
- package/dist/resources/extensions/gsd/auto/loop.js +4 -1
- package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +119 -18
- package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +17 -2372
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -0
- package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
- 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 +19 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +9 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +12 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +5 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +52 -6
- package/dist/resources/extensions/gsd/auto-start.js +28 -7
- package/dist/resources/extensions/gsd/auto-worktree.js +48 -3
- package/dist/resources/extensions/gsd/auto.js +83 -19
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +4 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -7
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +32 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +56 -16
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +8 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/db/engine.js +24 -6
- package/dist/resources/extensions/gsd/db/queries.js +30 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
- package/dist/resources/extensions/gsd/db-transaction.js +27 -23
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/doctor-environment.js +256 -125
- package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +11 -9
- package/dist/resources/extensions/gsd/gsd-db.js +15 -20
- package/dist/resources/extensions/gsd/guided-flow.js +88 -2
- package/dist/resources/extensions/gsd/health-widget.js +87 -28
- package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
- package/dist/resources/extensions/gsd/memory-relations.js +1 -1
- package/dist/resources/extensions/gsd/milestone-settlement.js +2 -2
- package/dist/resources/extensions/gsd/notifications.js +12 -7
- package/dist/resources/extensions/gsd/preferences-models.js +17 -9
- package/dist/resources/extensions/gsd/preferences.js +91 -5
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +7 -2
- 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/run-uat.md +7 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/session-lock.js +4 -3
- package/dist/resources/extensions/gsd/skill-activation.js +3 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +13 -6
- package/dist/resources/extensions/gsd/state.js +6 -2
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +83 -31
- package/dist/resources/extensions/gsd/tools/complete-task.js +62 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
- package/dist/resources/extensions/gsd/unit-registry.js +34 -4
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +101 -2
- package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/gsd/worktree.js +8 -1
- package/dist/resources/extensions/mcp-client/manager.js +6 -1
- 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/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/runtime-checks.d.ts +10 -0
- package/dist/runtime-checks.js +27 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-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/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +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 +10 -10
- package/dist/web/standalone/.next/server/chunks/{5942.js → 1128.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/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/node_modules/node-pty/build/Makefile +1 -1
- package/package.json +4 -4
- 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 +12 -6
- 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/settings-selector.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.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 +11 -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 +85 -19
- 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 +71 -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 +257 -37
- 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 +10 -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 +48 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.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 +12 -3
- package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
- package/packages/mcp-server/dist/cli-runner.js +137 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -0
- package/packages/mcp-server/dist/cli.js +2 -58
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
- package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
- package/packages/mcp-server/dist/pid-registry.js +459 -0
- package/packages/mcp-server/dist/pid-registry.js.map +1 -0
- package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
- package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
- package/packages/mcp-server/dist/probe-mode.js +10 -0
- package/packages/mcp-server/dist/probe-mode.js.map +1 -0
- package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
- package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
- package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
- package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +62 -43
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +52 -2
- 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/core/settings-manager.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.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/dist/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
- package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/package.json +8 -8
- package/packages/pi-tui/README.md +15 -0
- 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/dist/index.d.ts +2 -2
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -2
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
- package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal-image.js +54 -2
- package/packages/pi-tui/dist/terminal-image.js.map +1 -1
- package/packages/pi-tui/dist/terminal.d.ts +12 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +70 -25
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +15 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +106 -21
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +110 -36
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +45 -17
- package/pkg/dist/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +7 -2
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +531 -226
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +672 -7
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +38 -1
- package/src/resources/extensions/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +22 -6
- package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
- package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
- package/src/resources/extensions/gsd/auto/loop.ts +4 -1
- package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +140 -18
- package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
- package/src/resources/extensions/gsd/auto/phases.ts +58 -3061
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -0
- package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
- 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 +24 -2
- package/src/resources/extensions/gsd/auto-model-selection.ts +20 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -9
- package/src/resources/extensions/gsd/auto-prompts.ts +5 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +62 -8
- package/src/resources/extensions/gsd/auto-start.ts +44 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +51 -3
- package/src/resources/extensions/gsd/auto.ts +118 -18
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +56 -6
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +36 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +69 -16
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/commands/handlers/core.ts +27 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +7 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
- package/src/resources/extensions/gsd/config-overlay.ts +22 -9
- package/src/resources/extensions/gsd/db/engine.ts +26 -6
- package/src/resources/extensions/gsd/db/queries.ts +29 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
- package/src/resources/extensions/gsd/db-transaction.ts +37 -20
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/doctor-environment.ts +267 -142
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +10 -10
- package/src/resources/extensions/gsd/gsd-db.ts +15 -19
- package/src/resources/extensions/gsd/guided-flow.ts +128 -2
- package/src/resources/extensions/gsd/health-widget.ts +91 -27
- package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
- package/src/resources/extensions/gsd/memory-relations.ts +1 -1
- package/src/resources/extensions/gsd/milestone-settlement.ts +2 -2
- package/src/resources/extensions/gsd/notifications.ts +13 -6
- package/src/resources/extensions/gsd/preferences-models.ts +26 -8
- package/src/resources/extensions/gsd/preferences.ts +111 -5
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +7 -2
- 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/run-uat.md +7 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/session-lock.ts +8 -7
- package/src/resources/extensions/gsd/skill-activation.ts +3 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +23 -10
- package/src/resources/extensions/gsd/state.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -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 +206 -22
- 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 +16 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +89 -22
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +97 -4
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
- package/src/resources/extensions/gsd/tests/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -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-db.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +335 -0
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
- 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 +11 -2
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
- 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/remote-notification-from-desktop.test.ts +31 -81
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +7 -1
- 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 +170 -48
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +17 -1
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +184 -10
- 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/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +126 -19
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
- package/src/resources/extensions/gsd/unit-registry.ts +34 -4
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
- package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +97 -2
- package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -1
- package/src/resources/extensions/mcp-client/manager.ts +7 -1
- 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/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_ssgManifest.js +0 -0
|
@@ -8,6 +8,12 @@ export type FrameTone = "assistant" | "user" | "compaction" | "skill";
|
|
|
8
8
|
export declare function chatMessageWidth(width: number): number;
|
|
9
9
|
/** Outer indent for user turns and tool/work cards in the connected transcript. */
|
|
10
10
|
export declare const TRANSCRIPT_CARD_INDENT = 4;
|
|
11
|
+
/** Tool rows in the transcript (Variant A). */
|
|
12
|
+
export declare const TRANSCRIPT_TOOL_MARKER = "\u25B8";
|
|
13
|
+
/** System/compaction/skill notices in the transcript (Variant A). */
|
|
14
|
+
export declare const TRANSCRIPT_SYSTEM_MARKER = "\u25C7";
|
|
15
|
+
export declare function setRailAnimationEnabled(enabled: boolean): void;
|
|
16
|
+
export declare function isRailAnimationEnabled(): boolean;
|
|
11
17
|
export declare function headerLabel(text: string): string;
|
|
12
18
|
export declare function renderChatTurnBridge(width: number, fromIndent?: number, railColor?: ThemeColor): string[];
|
|
13
19
|
/** Bridge from a left-pegged assistant turn down into the next indented user turn. */
|
|
@@ -26,6 +32,8 @@ export declare function trimOuterBlankLines(lines: string[]): string[];
|
|
|
26
32
|
export declare function collapseBlankLines(lines: string[]): string[];
|
|
27
33
|
export declare function breakpoint(width: number): TuiBreakpoint;
|
|
28
34
|
export declare function badge(text: string, tone?: TuiTone): string;
|
|
35
|
+
/** Compact braille spinner for live auto-mode status chrome. */
|
|
36
|
+
export declare function styledActivitySpinner(tone?: TuiTone): string;
|
|
29
37
|
export declare function keyValue(label: string, value: string, valueColor?: ThemeColor, labelWidth?: number): string;
|
|
30
38
|
export declare function roundedPanel(lines: string[], width: number, opts?: {
|
|
31
39
|
tone?: TuiTone;
|
|
@@ -49,9 +57,8 @@ export declare function openSurface(lines: string[], width: number, opts: {
|
|
|
49
57
|
paddingX?: number;
|
|
50
58
|
}): string[];
|
|
51
59
|
/**
|
|
52
|
-
* Render a
|
|
53
|
-
*
|
|
54
|
-
* and body lines with no border column. Replaces the former chat-frame.ts.
|
|
60
|
+
* Render a system/conversation notice (compaction, skill invocations) as a
|
|
61
|
+
* plain ◇ header plus copy-clean body lines (Variant A — no horizontal rules).
|
|
55
62
|
*/
|
|
56
63
|
export declare function renderChatFrame(contentLines: string[], width: number, opts: {
|
|
57
64
|
label: string;
|
|
@@ -60,6 +67,18 @@ export declare function renderChatFrame(contentLines: string[], width: number, o
|
|
|
60
67
|
timestampFormat: TimestampFormat;
|
|
61
68
|
showTimestamp?: boolean;
|
|
62
69
|
}): string[];
|
|
70
|
+
/** Chat/dialog corner glyph — top-left opener on speaker headers. */
|
|
71
|
+
export declare const CHAT_CORNER_TOP_LEFT = "\u256D\u2500 ";
|
|
72
|
+
/** @deprecated Prefer renderCornerSpeakerHeader via renderPlainSpeakerMessage. */
|
|
73
|
+
export declare function renderPlainSpeakerHeader(label: string, meta: string | undefined, width: number, tone: "user" | "assistant"): string;
|
|
74
|
+
export declare function renderPlainSpeakerBody(lines: string[], width: number, bodyColor: "userMessageText" | "assistantMessageText"): string[];
|
|
75
|
+
export declare function renderPlainSpeakerMessage(lines: string[], width: number, opts: {
|
|
76
|
+
label: string;
|
|
77
|
+
meta?: string;
|
|
78
|
+
tone: "user" | "assistant";
|
|
79
|
+
trailingBlank?: boolean;
|
|
80
|
+
}): string[];
|
|
81
|
+
/** @deprecated Connected rails — Variant B. Prefer renderPlainSpeakerMessage. */
|
|
63
82
|
export declare function renderAssistantRail(lines: string[], width: number, opts?: {
|
|
64
83
|
label?: string;
|
|
65
84
|
meta?: string;
|
|
@@ -67,6 +86,7 @@ export declare function renderAssistantRail(lines: string[], width: number, opts
|
|
|
67
86
|
connected?: boolean;
|
|
68
87
|
continuesToUser?: boolean;
|
|
69
88
|
}): string[];
|
|
89
|
+
/** @deprecated Connected rails — Variant B. Prefer renderPlainSpeakerMessage. */
|
|
70
90
|
export declare function renderUserRail(lines: string[], width: number, opts: {
|
|
71
91
|
label?: string;
|
|
72
92
|
meta?: string;
|
|
@@ -80,6 +100,18 @@ export declare function renderTranscriptCard(lines: string[], width: number, opt
|
|
|
80
100
|
footerRight?: string;
|
|
81
101
|
indent?: number;
|
|
82
102
|
}): string[];
|
|
103
|
+
export declare function renderCompactToolStrip(title: string, target: string | undefined, width: number, opts: {
|
|
104
|
+
status: string;
|
|
105
|
+
tone: StatusTone;
|
|
106
|
+
hidden?: boolean;
|
|
107
|
+
}): string[];
|
|
108
|
+
export declare function renderPlainToolMessage(bodyLines: string[], width: number, opts: {
|
|
109
|
+
title: string;
|
|
110
|
+
target?: string;
|
|
111
|
+
meta?: string;
|
|
112
|
+
tone: StatusTone;
|
|
113
|
+
}): string[];
|
|
114
|
+
/** @deprecated Prefer renderCompactToolStrip (Variant A). */
|
|
83
115
|
export declare function renderToolLineCard(title: string, target: string | undefined, width: number, opts: {
|
|
84
116
|
status: string;
|
|
85
117
|
tone: StatusTone;
|
|
@@ -95,5 +127,41 @@ export declare function renderCommandCard(command: string, width: number, opts:
|
|
|
95
127
|
indent?: number;
|
|
96
128
|
}): string[];
|
|
97
129
|
export declare function renderProgressBar(done: number, total: number, width: number, tone?: StatusTone): string;
|
|
130
|
+
export type StepDotMode = "position" | "completed";
|
|
131
|
+
/**
|
|
132
|
+
* Discrete step indicator — ● for reached steps, ○ for pending.
|
|
133
|
+
* `position`: done is the active step index (1-based, includes current).
|
|
134
|
+
* `completed`: done is the count of fully finished steps.
|
|
135
|
+
*/
|
|
136
|
+
export declare function renderStepDots(done: number, total: number, opts?: {
|
|
137
|
+
maxDots?: number;
|
|
138
|
+
mode?: StepDotMode;
|
|
139
|
+
}): string;
|
|
140
|
+
/** Label + step dots + numeric count, e.g. `tasks ●●●○○ 3/5`. */
|
|
141
|
+
export declare function formatStepProgress(label: string, done: number, total: number, opts?: {
|
|
142
|
+
maxDots?: number;
|
|
143
|
+
mode?: StepDotMode;
|
|
144
|
+
countColor?: ThemeColor;
|
|
145
|
+
}): string;
|
|
98
146
|
export declare function renderFooterStrip(leftSegments: string[], right: string, width: number): string[];
|
|
147
|
+
/**
|
|
148
|
+
* Full-width footer: fixed segments plus one flex segment (typically context + bar).
|
|
149
|
+
* The flex segment receives all remaining horizontal space.
|
|
150
|
+
*/
|
|
151
|
+
export declare function layoutFullWidthFooter(segments: string[], width: number, flexAt: number, flexRender: (segmentBudget: number) => string): string;
|
|
152
|
+
export declare function renderFullWidthFooterStrip(segments: string[], width: number, flex?: {
|
|
153
|
+
at: number;
|
|
154
|
+
render: (segmentBudget: number) => string;
|
|
155
|
+
}): string[];
|
|
156
|
+
/** Single-line footer — no box, ` · ` separators. */
|
|
157
|
+
export declare function layoutMinimalFooter(segments: string[], width: number, flex?: {
|
|
158
|
+
at: number;
|
|
159
|
+
render: (segmentBudget: number) => string;
|
|
160
|
+
}): string;
|
|
161
|
+
/**
|
|
162
|
+
* Full-width minimal footer: left + center (flex) flush left, stats flush right.
|
|
163
|
+
*/
|
|
164
|
+
export declare function layoutFullWidthMinimalFooter(leftSegments: string[], rightSegments: string[], width: number, flexRender: (segmentBudget: number) => string): string;
|
|
165
|
+
/** Single-line footer output — no rounded panel. */
|
|
166
|
+
export declare function renderMinimalFooterLine(line: string, width: number): string[];
|
|
99
167
|
//# sourceMappingURL=transcript-design.d.ts.map
|
package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-design.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/transcript-design.ts"],"names":[],"mappings":"AAIA,OAAO,EAAS,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAC/E,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AACvF,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3D,+EAA+E;AAC/E,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC;AAEtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"transcript-design.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/transcript-design.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
2
|
// File Purpose: Shared recommended transcript rendering primitives for assistant, tool, command, footer, and auto-mode TUI surfaces.
|
|
3
|
-
import { alignRight, padRight, style, truncateToWidth, visibleWidth } from "@gsd/pi-tui";
|
|
3
|
+
import { alignRight, isImageLine, padRight, style, truncateToWidth, visibleWidth } from "@gsd/pi-tui";
|
|
4
4
|
import { theme } from "@gsd/pi-coding-agent/theme/theme.js";
|
|
5
5
|
import { formatTimestamp } from "./timestamp.js";
|
|
6
6
|
export function chatMessageWidth(width) {
|
|
@@ -8,10 +8,27 @@ export function chatMessageWidth(width) {
|
|
|
8
8
|
}
|
|
9
9
|
/** Outer indent for user turns and tool/work cards in the connected transcript. */
|
|
10
10
|
export const TRANSCRIPT_CARD_INDENT = 4;
|
|
11
|
+
/** Tool rows in the transcript (Variant A). */
|
|
12
|
+
export const TRANSCRIPT_TOOL_MARKER = "▸";
|
|
13
|
+
/** System/compaction/skill notices in the transcript (Variant A). */
|
|
14
|
+
export const TRANSCRIPT_SYSTEM_MARKER = "◇";
|
|
11
15
|
const RUNNING_RAIL_FRAME_MS = 70;
|
|
12
16
|
const RUNNING_RAIL_TRAIL = 5;
|
|
13
17
|
const HORIZONTAL_RAIL = "─";
|
|
14
18
|
const HORIZONTAL_RAIL_HEAD = "━";
|
|
19
|
+
// Whether the "running" rail sweeps (animates) or renders as a static rule. User
|
|
20
|
+
// setting `terminal.toolRailAnimation` (default on). When off, running cards show
|
|
21
|
+
// a static rail and ToolExecutionComponent does not arm its re-render timer, so a
|
|
22
|
+
// long-running tool costs zero idle CPU. Module-level (not per-card) because every
|
|
23
|
+
// running card shares the one preference; the interactive mode sets it at startup
|
|
24
|
+
// and when the setting is toggled.
|
|
25
|
+
let railAnimationEnabled = true;
|
|
26
|
+
export function setRailAnimationEnabled(enabled) {
|
|
27
|
+
railAnimationEnabled = enabled;
|
|
28
|
+
}
|
|
29
|
+
export function isRailAnimationEnabled() {
|
|
30
|
+
return railAnimationEnabled;
|
|
31
|
+
}
|
|
15
32
|
export function headerLabel(text) {
|
|
16
33
|
return text.toUpperCase();
|
|
17
34
|
}
|
|
@@ -74,7 +91,7 @@ export function renderConnectedCard(width, title, bodyLines, opts = {}) {
|
|
|
74
91
|
const indent = opts.indent ?? TRANSCRIPT_CARD_INDENT;
|
|
75
92
|
const prefix = indentSpaces(indent);
|
|
76
93
|
const railColor = opts.railColor ?? "borderAccent";
|
|
77
|
-
const sweepFrame = opts.railSweep ? runningRailFrame() : undefined;
|
|
94
|
+
const sweepFrame = opts.railSweep && railAnimationEnabled ? runningRailFrame() : undefined;
|
|
78
95
|
const rail = (text) => renderRailText(text, railColor, sweepFrame);
|
|
79
96
|
const resolvedTitleColor = opts.titleColor ??
|
|
80
97
|
(title.includes("✕") ? "error" : title.includes("✓") ? "success" : railColor);
|
|
@@ -95,12 +112,26 @@ export function renderConnectedCard(width, title, bodyLines, opts = {}) {
|
|
|
95
112
|
}
|
|
96
113
|
}
|
|
97
114
|
const paintBody = (line) => {
|
|
115
|
+
// Image (Kitty/iTerm2) sequence lines carry raw terminal graphics escapes and
|
|
116
|
+
// rely on exact column/row positioning. Prepend the SAME left offset normal
|
|
117
|
+
// body lines get (card indent + 3 spaces) so the image aligns under the card
|
|
118
|
+
// text rather than hugging column 0, but do NOT padRight/truncate — trailing
|
|
119
|
+
// padding or clipping after the sequence would corrupt the placement. The
|
|
120
|
+
// leading spaces simply advance the cursor before the image draws.
|
|
121
|
+
if (isImageLine(line)) {
|
|
122
|
+
return prefix + " " + line;
|
|
123
|
+
}
|
|
98
124
|
const innerWidth = Math.max(1, width - indent);
|
|
99
125
|
const inner = padRight(" " + line, innerWidth);
|
|
100
126
|
const painted = opts.bodyBg ? theme.bg(opts.bodyBg, inner) : inner;
|
|
101
127
|
return prefix + painted;
|
|
102
128
|
};
|
|
103
|
-
|
|
129
|
+
// When the body contains an inline image, its reserved blank padding rows (the
|
|
130
|
+
// rows the TUI counts so content below the image lands in the right place) must
|
|
131
|
+
// NOT be trimmed/collapsed — trimming them collapses a tall image to one line
|
|
132
|
+
// and the terminal then paints the full image over the chat and footer below.
|
|
133
|
+
const hasImage = bodyLines.some((l) => isImageLine(l));
|
|
134
|
+
const bodySource = hasImage ? bodyLines : trimOuterBlankLines(bodyLines);
|
|
104
135
|
const out = [padLine(topLine, width)];
|
|
105
136
|
for (const line of bodySource) {
|
|
106
137
|
out.push(paintBody(line));
|
|
@@ -110,12 +141,18 @@ export function renderConnectedCard(width, title, bodyLines, opts = {}) {
|
|
|
110
141
|
}
|
|
111
142
|
return out;
|
|
112
143
|
}
|
|
144
|
+
function stripAnsiCodes(text) {
|
|
145
|
+
return text.replace(/\x1b\[[0-9;]*m/g, "");
|
|
146
|
+
}
|
|
147
|
+
function isBlankRenderLine(line) {
|
|
148
|
+
return stripAnsiCodes(line).trim().length === 0;
|
|
149
|
+
}
|
|
113
150
|
export function trimOuterBlankLines(lines) {
|
|
114
151
|
let start = 0;
|
|
115
152
|
let end = lines.length;
|
|
116
|
-
while (start < end && lines[start]
|
|
153
|
+
while (start < end && isBlankRenderLine(lines[start]))
|
|
117
154
|
start++;
|
|
118
|
-
while (end > start && lines[end - 1]
|
|
155
|
+
while (end > start && isBlankRenderLine(lines[end - 1]))
|
|
119
156
|
end--;
|
|
120
157
|
return lines.slice(start, end);
|
|
121
158
|
}
|
|
@@ -123,8 +160,8 @@ export function trimOuterBlankLines(lines) {
|
|
|
123
160
|
export function collapseBlankLines(lines) {
|
|
124
161
|
const out = [];
|
|
125
162
|
for (const line of lines) {
|
|
126
|
-
const blank = line
|
|
127
|
-
if (blank && out.length > 0 && out[out.length - 1]
|
|
163
|
+
const blank = isBlankRenderLine(line);
|
|
164
|
+
if (blank && out.length > 0 && isBlankRenderLine(out[out.length - 1]))
|
|
128
165
|
continue;
|
|
129
166
|
out.push(line);
|
|
130
167
|
}
|
|
@@ -164,6 +201,12 @@ function panelToneColor(tone) {
|
|
|
164
201
|
export function badge(text, tone = "default") {
|
|
165
202
|
return theme.fg(panelToneColor(tone), text);
|
|
166
203
|
}
|
|
204
|
+
const ACTIVITY_SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
205
|
+
/** Compact braille spinner for live auto-mode status chrome. */
|
|
206
|
+
export function styledActivitySpinner(tone = "accent") {
|
|
207
|
+
const frame = ACTIVITY_SPINNER_FRAMES[Math.floor(Date.now() / 120) % ACTIVITY_SPINNER_FRAMES.length];
|
|
208
|
+
return theme.fg(panelToneColor(tone), frame);
|
|
209
|
+
}
|
|
167
210
|
export function keyValue(label, value, valueColor = "text", labelWidth = 10) {
|
|
168
211
|
return `${theme.fg("dim", padRight(label, labelWidth))}${theme.fg(valueColor, value)}`;
|
|
169
212
|
}
|
|
@@ -211,9 +254,8 @@ export function openSurface(lines, width, opts) {
|
|
|
211
254
|
return surface.render(lines, Math.max(20, width));
|
|
212
255
|
}
|
|
213
256
|
/**
|
|
214
|
-
* Render a
|
|
215
|
-
*
|
|
216
|
-
* and body lines with no border column. Replaces the former chat-frame.ts.
|
|
257
|
+
* Render a system/conversation notice (compaction, skill invocations) as a
|
|
258
|
+
* plain ◇ header plus copy-clean body lines (Variant A — no horizontal rules).
|
|
217
259
|
*/
|
|
218
260
|
export function renderChatFrame(contentLines, width, opts) {
|
|
219
261
|
const outerWidth = Math.max(20, width);
|
|
@@ -222,21 +264,47 @@ export function renderChatFrame(contentLines, width, opts) {
|
|
|
222
264
|
const bodyColor = opts.tone === "user" ? "userMessageText" : isPurple ? "customMessageText" : "assistantMessageText";
|
|
223
265
|
// A label may carry a " - " splitting a bold name from a dim detail.
|
|
224
266
|
const dashIdx = opts.label.indexOf(" - ");
|
|
225
|
-
const
|
|
267
|
+
const labelStyled = dashIdx >= 0
|
|
226
268
|
? theme.fg(frameColor, theme.bold(opts.label.slice(0, dashIdx))) + theme.fg("dim", opts.label.slice(dashIdx))
|
|
227
269
|
: theme.fg(frameColor, theme.bold(opts.label));
|
|
228
270
|
const rightRaw = opts.showTimestamp === false || !opts.timestamp ? "" : formatTimestamp(opts.timestamp, opts.timestampFormat);
|
|
271
|
+
const metaStyled = rightRaw ? theme.fg("dim", ` · ${rightRaw}`) : "";
|
|
272
|
+
const header = padLine(truncateToWidth(`${theme.fg(frameColor, TRANSCRIPT_SYSTEM_MARKER)} ${labelStyled}${metaStyled}`, outerWidth, "…"), outerWidth);
|
|
229
273
|
const source = trimOuterBlankLines(contentLines);
|
|
230
|
-
const body = (source.length > 0 ? source : [""]).map((line) => theme.fg(bodyColor, line));
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
274
|
+
const body = (source.length > 0 ? source : [""]).map((line) => padLine(theme.fg(bodyColor, line), outerWidth));
|
|
275
|
+
return [header, ...body, ""];
|
|
276
|
+
}
|
|
277
|
+
/** Chat/dialog corner glyph — top-left opener on speaker headers. */
|
|
278
|
+
export const CHAT_CORNER_TOP_LEFT = "╭─ ";
|
|
279
|
+
function speakerCornerColor(tone) {
|
|
280
|
+
return tone === "user" ? "border" : "borderAccent";
|
|
281
|
+
}
|
|
282
|
+
function renderCornerSpeakerHeader(label, meta, width, tone) {
|
|
283
|
+
const cornerColor = speakerCornerColor(tone);
|
|
284
|
+
const labelStyled = tone === "user" ? theme.fg("border", theme.bold(label)) : theme.fg("accent", theme.bold(label));
|
|
285
|
+
const metaStyled = meta ? theme.fg("dim", ` · ${meta}`) : "";
|
|
286
|
+
const topLeft = theme.fg(cornerColor, CHAT_CORNER_TOP_LEFT) + labelStyled + metaStyled;
|
|
287
|
+
return padLine(truncateToWidth(topLeft, width, "…"), width);
|
|
288
|
+
}
|
|
289
|
+
/** @deprecated Prefer renderCornerSpeakerHeader via renderPlainSpeakerMessage. */
|
|
290
|
+
export function renderPlainSpeakerHeader(label, meta, width, tone) {
|
|
291
|
+
return renderCornerSpeakerHeader(label, meta, width, tone);
|
|
292
|
+
}
|
|
293
|
+
export function renderPlainSpeakerBody(lines, width, bodyColor) {
|
|
294
|
+
const source = trimOuterBlankLines(lines);
|
|
295
|
+
return source.map((line) => padLine(theme.fg(bodyColor, line), width));
|
|
296
|
+
}
|
|
297
|
+
export function renderPlainSpeakerMessage(lines, width, opts) {
|
|
298
|
+
const outerWidth = Math.max(20, width);
|
|
299
|
+
const bodyColor = opts.tone === "user" ? "userMessageText" : "assistantMessageText";
|
|
300
|
+
const body = renderPlainSpeakerBody(lines, outerWidth, bodyColor);
|
|
301
|
+
const out = [renderCornerSpeakerHeader(opts.label, opts.meta, outerWidth, opts.tone), ...body];
|
|
302
|
+
if (opts.trailingBlank !== false) {
|
|
303
|
+
out.push("");
|
|
237
304
|
}
|
|
238
|
-
return
|
|
305
|
+
return out;
|
|
239
306
|
}
|
|
307
|
+
/** @deprecated Connected rails — Variant B. Prefer renderPlainSpeakerMessage. */
|
|
240
308
|
export function renderAssistantRail(lines, width, opts = {}) {
|
|
241
309
|
const railColor = opts.railColor ?? "borderAccent";
|
|
242
310
|
const source = trimOuterBlankLines(lines);
|
|
@@ -257,11 +325,12 @@ export function renderAssistantRail(lines, width, opts = {}) {
|
|
|
257
325
|
}
|
|
258
326
|
return result;
|
|
259
327
|
}
|
|
328
|
+
/** @deprecated Connected rails — Variant B. Prefer renderPlainSpeakerMessage. */
|
|
260
329
|
export function renderUserRail(lines, width, opts) {
|
|
261
330
|
const source = trimOuterBlankLines(lines);
|
|
262
331
|
const body = (source.length > 0 ? source : [""]).map((line) => theme.fg("userMessageText", line));
|
|
263
332
|
const titleRight = opts.meta ? theme.fg("dim", opts.meta) : undefined;
|
|
264
|
-
return renderConnectedCard(width, opts.label ?? "
|
|
333
|
+
return renderConnectedCard(width, opts.label ?? "YOU", body, {
|
|
265
334
|
indent: TRANSCRIPT_CARD_INDENT,
|
|
266
335
|
titleRight,
|
|
267
336
|
railColor: "border",
|
|
@@ -288,7 +357,7 @@ function openRuleLine(title, right, width, tone, sweep = false) {
|
|
|
288
357
|
const clippedRight = truncateToWidth(right, rightBudget, "");
|
|
289
358
|
const fixed = 4 + visibleWidth(clippedTitle) + 2 + visibleWidth(clippedRight) + 4;
|
|
290
359
|
const fill = Math.max(1, w - fixed);
|
|
291
|
-
const sweepFrame = sweep ? runningRailFrame() : undefined;
|
|
360
|
+
const sweepFrame = sweep && railAnimationEnabled ? runningRailFrame() : undefined;
|
|
292
361
|
return padLine(renderRailText("─── ", tone) +
|
|
293
362
|
clippedTitle +
|
|
294
363
|
renderRailText(` ${"─".repeat(fill)} `, tone, sweepFrame) +
|
|
@@ -305,7 +374,9 @@ export function renderTranscriptCard(lines, width, opts) {
|
|
|
305
374
|
const outerWidth = Math.max(20, width);
|
|
306
375
|
const indent = opts.indent ?? TRANSCRIPT_CARD_INDENT;
|
|
307
376
|
const tone = toneColor(opts.tone);
|
|
308
|
-
|
|
377
|
+
// Preserve image padding rows (see renderConnectedCard) — trimming them would
|
|
378
|
+
// collapse a tall inline image and make it overflow the card.
|
|
379
|
+
const body = lines.some((l) => isImageLine(l)) ? lines : trimOuterBlankLines(lines);
|
|
309
380
|
let titleRight = opts.right ? theme.fg(tone, opts.right) : undefined;
|
|
310
381
|
if (opts.footerLeft || opts.footerRight) {
|
|
311
382
|
const hint = [opts.footerLeft, opts.footerRight].filter(Boolean).join(" · ");
|
|
@@ -319,27 +390,64 @@ export function renderTranscriptCard(lines, width, opts) {
|
|
|
319
390
|
railSweep: opts.tone === "running",
|
|
320
391
|
});
|
|
321
392
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
393
|
+
function statusColorForTone(tone) {
|
|
394
|
+
if (tone === "error")
|
|
395
|
+
return "error";
|
|
396
|
+
if (tone === "running")
|
|
397
|
+
return "accent";
|
|
398
|
+
if (tone === "warning")
|
|
399
|
+
return "warning";
|
|
400
|
+
return "success";
|
|
401
|
+
}
|
|
402
|
+
export function renderCompactToolStrip(title, target, width, opts) {
|
|
403
|
+
const titleText = target
|
|
404
|
+
? `${styledHeader(title, "borderAccent")} ${theme.fg("text", target)}`
|
|
405
|
+
: styledHeader(title, "borderAccent");
|
|
406
|
+
const left = `${theme.fg("borderAccent", TRANSCRIPT_TOOL_MARKER)} ${titleText}`;
|
|
327
407
|
const statusText = opts.hidden ? `${opts.status} · output hidden · ctrl+o expand` : opts.status;
|
|
328
|
-
const right = theme.fg(opts.tone
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
408
|
+
const right = theme.fg(statusColorForTone(opts.tone), statusText);
|
|
409
|
+
return [padLine(alignRight(left, right, width), width)];
|
|
410
|
+
}
|
|
411
|
+
export function renderPlainToolMessage(bodyLines, width, opts) {
|
|
412
|
+
const outerWidth = Math.max(20, width);
|
|
413
|
+
const indent = TRANSCRIPT_CARD_INDENT;
|
|
414
|
+
const prefix = indentSpaces(indent);
|
|
415
|
+
const innerWidth = Math.max(1, outerWidth - indent);
|
|
416
|
+
const titleText = opts.target
|
|
417
|
+
? `${styledHeader(opts.title, "borderAccent")} ${theme.fg("text", opts.target)}`
|
|
418
|
+
: styledHeader(opts.title, "borderAccent");
|
|
419
|
+
const left = `${theme.fg("borderAccent", TRANSCRIPT_TOOL_MARKER)} ${titleText}`;
|
|
420
|
+
const right = opts.meta ? theme.fg(statusColorForTone(opts.tone), opts.meta) : "";
|
|
421
|
+
const header = padLine(alignRight(left, right, outerWidth), outerWidth);
|
|
422
|
+
const hasImage = bodyLines.some((line) => isImageLine(line));
|
|
423
|
+
const bodySource = hasImage ? bodyLines : collapseBlankLines(bodyLines);
|
|
424
|
+
const paintBody = (line) => {
|
|
425
|
+
if (isImageLine(line)) {
|
|
426
|
+
return prefix + " " + line;
|
|
427
|
+
}
|
|
428
|
+
if (hasImage && isBlankRenderLine(line)) {
|
|
429
|
+
return padLine(prefix + padRight("", innerWidth), outerWidth);
|
|
430
|
+
}
|
|
431
|
+
return padLine(truncateToWidth(line, outerWidth, ""), outerWidth);
|
|
432
|
+
};
|
|
433
|
+
return [header, ...bodySource.map(paintBody), ""];
|
|
434
|
+
}
|
|
435
|
+
/** @deprecated Prefer renderCompactToolStrip (Variant A). */
|
|
436
|
+
export function renderToolLineCard(title, target, width, opts) {
|
|
437
|
+
return renderCompactToolStrip(title, target, width, {
|
|
438
|
+
status: opts.status,
|
|
439
|
+
tone: opts.tone,
|
|
440
|
+
hidden: opts.hidden,
|
|
441
|
+
});
|
|
332
442
|
}
|
|
333
443
|
export function renderCommandCard(command, width, opts) {
|
|
334
|
-
const
|
|
335
|
-
const indent = opts.indent ?? TRANSCRIPT_CARD_INDENT;
|
|
336
|
-
const innerWidth = Math.max(20, width - indent);
|
|
337
|
-
const titleText = `${theme.fg("accent", "$")} ${theme.fg("text", command)}`;
|
|
444
|
+
const left = `${theme.fg("accent", "$")} ${theme.fg("text", command)}`;
|
|
338
445
|
const statusText = opts.progress
|
|
339
446
|
? `${opts.progress} ${opts.status}`
|
|
340
447
|
: `${opts.status} · output hidden · ctrl+o expand`;
|
|
341
|
-
const
|
|
342
|
-
|
|
448
|
+
const statusColor = opts.tone === "error" ? "error" : opts.tone === "running" ? "accent" : "success";
|
|
449
|
+
const right = theme.fg(statusColor, statusText);
|
|
450
|
+
return [padLine(alignRight(left, right, width), width)];
|
|
343
451
|
}
|
|
344
452
|
export function renderProgressBar(done, total, width, tone = "success") {
|
|
345
453
|
const clampedWidth = Math.max(0, width);
|
|
@@ -348,6 +456,46 @@ export function renderProgressBar(done, total, width, tone = "success") {
|
|
|
348
456
|
return (theme.fg(toneColor(tone), "█".repeat(filled)) +
|
|
349
457
|
theme.fg("dim", "░".repeat(clampedWidth - filled)));
|
|
350
458
|
}
|
|
459
|
+
const STEP_DOT_MAX = 12;
|
|
460
|
+
/**
|
|
461
|
+
* Discrete step indicator — ● for reached steps, ○ for pending.
|
|
462
|
+
* `position`: done is the active step index (1-based, includes current).
|
|
463
|
+
* `completed`: done is the count of fully finished steps.
|
|
464
|
+
*/
|
|
465
|
+
export function renderStepDots(done, total, opts = {}) {
|
|
466
|
+
if (total <= 0)
|
|
467
|
+
return "";
|
|
468
|
+
const maxDots = opts.maxDots ?? STEP_DOT_MAX;
|
|
469
|
+
const mode = opts.mode ?? "position";
|
|
470
|
+
const complete = done >= total;
|
|
471
|
+
let displayTotal = total;
|
|
472
|
+
let displayDone = Math.max(0, Math.min(done, total));
|
|
473
|
+
let overflowSuffix = "";
|
|
474
|
+
if (total > maxDots) {
|
|
475
|
+
displayTotal = maxDots;
|
|
476
|
+
displayDone = Math.max(0, Math.min(displayTotal, Math.round((done / total) * displayTotal)));
|
|
477
|
+
overflowSuffix = theme.fg("dim", `+${total - maxDots}`);
|
|
478
|
+
}
|
|
479
|
+
let dots = "";
|
|
480
|
+
for (let i = 0; i < displayTotal; i++) {
|
|
481
|
+
const reached = i < displayDone;
|
|
482
|
+
if (reached) {
|
|
483
|
+
const isCurrent = !complete && mode === "position" && i === displayDone - 1;
|
|
484
|
+
const color = complete ? "success" : isCurrent ? "accent" : "text";
|
|
485
|
+
dots += theme.fg(color, "●");
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
dots += theme.fg("dim", "○");
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return dots + overflowSuffix;
|
|
492
|
+
}
|
|
493
|
+
/** Label + step dots + numeric count, e.g. `tasks ●●●○○ 3/5`. */
|
|
494
|
+
export function formatStepProgress(label, done, total, opts = {}) {
|
|
495
|
+
const dots = renderStepDots(done, total, opts);
|
|
496
|
+
const countColor = opts.countColor ?? "dim";
|
|
497
|
+
return `${theme.fg("dim", label)} ${dots}${theme.fg(countColor, ` ${done}/${total}`)}`;
|
|
498
|
+
}
|
|
351
499
|
export function renderFooterStrip(leftSegments, right, width) {
|
|
352
500
|
const outerWidth = Math.max(20, width);
|
|
353
501
|
const innerWidth = Math.max(1, outerWidth - 2);
|
|
@@ -359,4 +507,76 @@ export function renderFooterStrip(leftSegments, right, width) {
|
|
|
359
507
|
const content = rightAlign(left, rightStyled, innerWidth);
|
|
360
508
|
return roundedPanel([content], outerWidth);
|
|
361
509
|
}
|
|
510
|
+
const footerSegmentSep = () => theme.fg("dim", " │ ");
|
|
511
|
+
/**
|
|
512
|
+
* Full-width footer: fixed segments plus one flex segment (typically context + bar).
|
|
513
|
+
* The flex segment receives all remaining horizontal space.
|
|
514
|
+
*/
|
|
515
|
+
export function layoutFullWidthFooter(segments, width, flexAt, flexRender) {
|
|
516
|
+
const sep = footerSegmentSep();
|
|
517
|
+
const sepWidth = visibleWidth(sep);
|
|
518
|
+
const slotCount = segments.length + 1;
|
|
519
|
+
const separators = Math.max(0, slotCount - 1) * sepWidth;
|
|
520
|
+
let fixedWidth = 0;
|
|
521
|
+
for (const segment of segments) {
|
|
522
|
+
fixedWidth += visibleWidth(segment);
|
|
523
|
+
}
|
|
524
|
+
const flexBudget = Math.max(12, width - fixedWidth - separators);
|
|
525
|
+
const flexSegment = flexRender(flexBudget);
|
|
526
|
+
const parts = [...segments.slice(0, flexAt), flexSegment, ...segments.slice(flexAt)];
|
|
527
|
+
const line = parts.join(sep);
|
|
528
|
+
return truncateToWidth(line, width, "…");
|
|
529
|
+
}
|
|
530
|
+
export function renderFullWidthFooterStrip(segments, width, flex) {
|
|
531
|
+
const outerWidth = Math.max(20, width);
|
|
532
|
+
const innerWidth = Math.max(1, outerWidth - 2);
|
|
533
|
+
const content = flex
|
|
534
|
+
? layoutFullWidthFooter(segments, innerWidth, flex.at, flex.render)
|
|
535
|
+
: truncateToWidth(segments.filter(Boolean).join(footerSegmentSep()), innerWidth, "…");
|
|
536
|
+
return roundedPanel([content], outerWidth);
|
|
537
|
+
}
|
|
538
|
+
/** Single-line footer — no box, ` · ` separators. */
|
|
539
|
+
export function layoutMinimalFooter(segments, width, flex) {
|
|
540
|
+
const sep = theme.fg("dim", " · ");
|
|
541
|
+
const sepWidth = visibleWidth(sep);
|
|
542
|
+
if (flex) {
|
|
543
|
+
const slotCount = segments.length + 1;
|
|
544
|
+
const separators = Math.max(0, slotCount - 1) * sepWidth;
|
|
545
|
+
let fixedWidth = 0;
|
|
546
|
+
for (const segment of segments) {
|
|
547
|
+
fixedWidth += visibleWidth(segment);
|
|
548
|
+
}
|
|
549
|
+
const flexBudget = Math.max(8, width - fixedWidth - separators);
|
|
550
|
+
const flexSegment = flex.render(flexBudget);
|
|
551
|
+
const parts = [...segments.slice(0, flex.at), flexSegment, ...segments.slice(flex.at)];
|
|
552
|
+
return truncateToWidth(parts.join(sep), width, "…");
|
|
553
|
+
}
|
|
554
|
+
return truncateToWidth(segments.filter(Boolean).join(sep), width, "…");
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Full-width minimal footer: left + center (flex) flush left, stats flush right.
|
|
558
|
+
*/
|
|
559
|
+
export function layoutFullWidthMinimalFooter(leftSegments, rightSegments, width, flexRender) {
|
|
560
|
+
const sep = theme.fg("dim", " · ");
|
|
561
|
+
const left = leftSegments.filter(Boolean).join(sep);
|
|
562
|
+
const right = rightSegments.filter(Boolean).join(sep);
|
|
563
|
+
const leftWidth = left ? visibleWidth(left) : 0;
|
|
564
|
+
const rightWidth = right ? visibleWidth(right) : 0;
|
|
565
|
+
const sepWidth = visibleWidth(sep);
|
|
566
|
+
if (!right) {
|
|
567
|
+
const flexBudget = Math.max(8, width - leftWidth - (left ? sepWidth : 0));
|
|
568
|
+
const center = flexRender(flexBudget);
|
|
569
|
+
const line = [left, center].filter(Boolean).join(sep);
|
|
570
|
+
return truncateToWidth(line, width, "…");
|
|
571
|
+
}
|
|
572
|
+
const flexBudget = Math.max(8, width - leftWidth - rightWidth - sepWidth - 1);
|
|
573
|
+
const center = flexRender(flexBudget);
|
|
574
|
+
const leftBlock = center ? (left ? `${left}${sep}${center}` : center) : left;
|
|
575
|
+
return alignRight(leftBlock, right, width);
|
|
576
|
+
}
|
|
577
|
+
/** Single-line footer output — no rounded panel. */
|
|
578
|
+
export function renderMinimalFooterLine(line, width) {
|
|
579
|
+
const outerWidth = Math.max(20, width);
|
|
580
|
+
return [padRight(truncateToWidth(line, outerWidth, "…"), outerWidth)];
|
|
581
|
+
}
|
|
362
582
|
//# sourceMappingURL=transcript-design.js.map
|