@dsh-cc/tui 0.5.0
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/LICENSE +201 -0
- package/README.md +144 -0
- package/lib/bash-history.d.ts +31 -0
- package/lib/bash-history.d.ts.map +1 -0
- package/lib/bash-history.js +94 -0
- package/lib/bash-history.js.map +1 -0
- package/lib/compact-fold.d.ts +35 -0
- package/lib/compact-fold.d.ts.map +1 -0
- package/lib/compact-fold.js +60 -0
- package/lib/compact-fold.js.map +1 -0
- package/lib/components/arg-completers.d.ts +22 -0
- package/lib/components/arg-completers.d.ts.map +1 -0
- package/lib/components/arg-completers.js +75 -0
- package/lib/components/arg-completers.js.map +1 -0
- package/lib/components/code-theme.d.ts +25 -0
- package/lib/components/code-theme.d.ts.map +1 -0
- package/lib/components/code-theme.js +137 -0
- package/lib/components/code-theme.js.map +1 -0
- package/lib/components/completion.d.ts +50 -0
- package/lib/components/completion.d.ts.map +1 -0
- package/lib/components/completion.js +279 -0
- package/lib/components/completion.js.map +1 -0
- package/lib/components/diff-card.d.ts +29 -0
- package/lib/components/diff-card.d.ts.map +1 -0
- package/lib/components/diff-card.js +175 -0
- package/lib/components/diff-card.js.map +1 -0
- package/lib/components/diff-hunks.d.ts +44 -0
- package/lib/components/diff-hunks.d.ts.map +1 -0
- package/lib/components/diff-hunks.js +188 -0
- package/lib/components/diff-hunks.js.map +1 -0
- package/lib/components/editor-history.d.ts +23 -0
- package/lib/components/editor-history.d.ts.map +1 -0
- package/lib/components/editor-history.js +29 -0
- package/lib/components/editor-history.js.map +1 -0
- package/lib/components/markdown-theme.d.ts +11 -0
- package/lib/components/markdown-theme.d.ts.map +1 -0
- package/lib/components/markdown-theme.js +29 -0
- package/lib/components/markdown-theme.js.map +1 -0
- package/lib/components/masked-input.d.ts +24 -0
- package/lib/components/masked-input.d.ts.map +1 -0
- package/lib/components/masked-input.js +168 -0
- package/lib/components/masked-input.js.map +1 -0
- package/lib/components/overlay-host.d.ts +31 -0
- package/lib/components/overlay-host.d.ts.map +1 -0
- package/lib/components/overlay-host.js +128 -0
- package/lib/components/overlay-host.js.map +1 -0
- package/lib/components/overlays.d.ts +94 -0
- package/lib/components/overlays.d.ts.map +1 -0
- package/lib/components/overlays.js +450 -0
- package/lib/components/overlays.js.map +1 -0
- package/lib/components/provider-box.d.ts +23 -0
- package/lib/components/provider-box.d.ts.map +1 -0
- package/lib/components/provider-box.js +164 -0
- package/lib/components/provider-box.js.map +1 -0
- package/lib/components/read-group.d.ts +51 -0
- package/lib/components/read-group.d.ts.map +1 -0
- package/lib/components/read-group.js +105 -0
- package/lib/components/read-group.js.map +1 -0
- package/lib/components/root-bash.d.ts +36 -0
- package/lib/components/root-bash.d.ts.map +1 -0
- package/lib/components/root-bash.js +112 -0
- package/lib/components/root-bash.js.map +1 -0
- package/lib/components/root-types.d.ts +42 -0
- package/lib/components/root-types.d.ts.map +1 -0
- package/lib/components/root-types.js +8 -0
- package/lib/components/root-types.js.map +1 -0
- package/lib/components/root-utils.d.ts +22 -0
- package/lib/components/root-utils.d.ts.map +1 -0
- package/lib/components/root-utils.js +45 -0
- package/lib/components/root-utils.js.map +1 -0
- package/lib/components/root.d.ts +25 -0
- package/lib/components/root.d.ts.map +1 -0
- package/lib/components/root.js +357 -0
- package/lib/components/root.js.map +1 -0
- package/lib/components/theme.d.ts +61 -0
- package/lib/components/theme.d.ts.map +1 -0
- package/lib/components/theme.js +99 -0
- package/lib/components/theme.js.map +1 -0
- package/lib/components/transcript.d.ts +43 -0
- package/lib/components/transcript.d.ts.map +1 -0
- package/lib/components/transcript.js +203 -0
- package/lib/components/transcript.js.map +1 -0
- package/lib/components/working-line.d.ts +35 -0
- package/lib/components/working-line.d.ts.map +1 -0
- package/lib/components/working-line.js +66 -0
- package/lib/components/working-line.js.map +1 -0
- package/lib/effort-catalog.d.ts +27 -0
- package/lib/effort-catalog.d.ts.map +1 -0
- package/lib/effort-catalog.js +36 -0
- package/lib/effort-catalog.js.map +1 -0
- package/lib/export-markdown.d.ts +18 -0
- package/lib/export-markdown.d.ts.map +1 -0
- package/lib/export-markdown.js +124 -0
- package/lib/export-markdown.js.map +1 -0
- package/lib/harness/approval-preview.d.ts +33 -0
- package/lib/harness/approval-preview.d.ts.map +1 -0
- package/lib/harness/approval-preview.js +179 -0
- package/lib/harness/approval-preview.js.map +1 -0
- package/lib/harness/boot-banner.d.ts +14 -0
- package/lib/harness/boot-banner.d.ts.map +1 -0
- package/lib/harness/boot-banner.js +89 -0
- package/lib/harness/boot-banner.js.map +1 -0
- package/lib/harness/driver-agent.d.ts +78 -0
- package/lib/harness/driver-agent.d.ts.map +1 -0
- package/lib/harness/driver-agent.js +314 -0
- package/lib/harness/driver-agent.js.map +1 -0
- package/lib/harness/driver-agents.d.ts +20 -0
- package/lib/harness/driver-agents.d.ts.map +1 -0
- package/lib/harness/driver-agents.js +123 -0
- package/lib/harness/driver-agents.js.map +1 -0
- package/lib/harness/driver-approvals.d.ts +38 -0
- package/lib/harness/driver-approvals.d.ts.map +1 -0
- package/lib/harness/driver-approvals.js +277 -0
- package/lib/harness/driver-approvals.js.map +1 -0
- package/lib/harness/driver-bash.d.ts +15 -0
- package/lib/harness/driver-bash.d.ts.map +1 -0
- package/lib/harness/driver-bash.js +73 -0
- package/lib/harness/driver-bash.js.map +1 -0
- package/lib/harness/driver-catalog.d.ts +84 -0
- package/lib/harness/driver-catalog.d.ts.map +1 -0
- package/lib/harness/driver-catalog.js +256 -0
- package/lib/harness/driver-catalog.js.map +1 -0
- package/lib/harness/driver-ctx.d.ts +462 -0
- package/lib/harness/driver-ctx.d.ts.map +1 -0
- package/lib/harness/driver-ctx.js +11 -0
- package/lib/harness/driver-ctx.js.map +1 -0
- package/lib/harness/driver-hud.d.ts +31 -0
- package/lib/harness/driver-hud.d.ts.map +1 -0
- package/lib/harness/driver-hud.js +204 -0
- package/lib/harness/driver-hud.js.map +1 -0
- package/lib/harness/driver-live.d.ts +36 -0
- package/lib/harness/driver-live.d.ts.map +1 -0
- package/lib/harness/driver-live.js +44 -0
- package/lib/harness/driver-live.js.map +1 -0
- package/lib/harness/driver-modal.d.ts +52 -0
- package/lib/harness/driver-modal.d.ts.map +1 -0
- package/lib/harness/driver-modal.js +78 -0
- package/lib/harness/driver-modal.js.map +1 -0
- package/lib/harness/driver-mode.d.ts +35 -0
- package/lib/harness/driver-mode.d.ts.map +1 -0
- package/lib/harness/driver-mode.js +84 -0
- package/lib/harness/driver-mode.js.map +1 -0
- package/lib/harness/driver-pickers.d.ts +48 -0
- package/lib/harness/driver-pickers.d.ts.map +1 -0
- package/lib/harness/driver-pickers.js +249 -0
- package/lib/harness/driver-pickers.js.map +1 -0
- package/lib/harness/driver-promote.d.ts +29 -0
- package/lib/harness/driver-promote.d.ts.map +1 -0
- package/lib/harness/driver-promote.js +36 -0
- package/lib/harness/driver-promote.js.map +1 -0
- package/lib/harness/driver-queue.d.ts +19 -0
- package/lib/harness/driver-queue.d.ts.map +1 -0
- package/lib/harness/driver-queue.js +281 -0
- package/lib/harness/driver-queue.js.map +1 -0
- package/lib/harness/driver-run-local.d.ts +32 -0
- package/lib/harness/driver-run-local.d.ts.map +1 -0
- package/lib/harness/driver-run-local.js +366 -0
- package/lib/harness/driver-run-local.js.map +1 -0
- package/lib/harness/driver-sessions.d.ts +28 -0
- package/lib/harness/driver-sessions.d.ts.map +1 -0
- package/lib/harness/driver-sessions.js +386 -0
- package/lib/harness/driver-sessions.js.map +1 -0
- package/lib/harness/driver.d.ts +22 -0
- package/lib/harness/driver.d.ts.map +1 -0
- package/lib/harness/driver.js +459 -0
- package/lib/harness/driver.js.map +1 -0
- package/lib/harness/preset.d.ts +32 -0
- package/lib/harness/preset.d.ts.map +1 -0
- package/lib/harness/preset.js +34 -0
- package/lib/harness/preset.js.map +1 -0
- package/lib/harness/session-list.d.ts +65 -0
- package/lib/harness/session-list.d.ts.map +1 -0
- package/lib/harness/session-list.js +91 -0
- package/lib/harness/session-list.js.map +1 -0
- package/lib/harness/shell-output.d.ts +44 -0
- package/lib/harness/shell-output.d.ts.map +1 -0
- package/lib/harness/shell-output.js +90 -0
- package/lib/harness/shell-output.js.map +1 -0
- package/lib/harness/statusline-cc-transcript.d.ts +51 -0
- package/lib/harness/statusline-cc-transcript.d.ts.map +1 -0
- package/lib/harness/statusline-cc-transcript.js +191 -0
- package/lib/harness/statusline-cc-transcript.js.map +1 -0
- package/lib/harness/statusline-command.d.ts +54 -0
- package/lib/harness/statusline-command.d.ts.map +1 -0
- package/lib/harness/statusline-command.js +161 -0
- package/lib/harness/statusline-command.js.map +1 -0
- package/lib/harness/statusline-payload.d.ts +79 -0
- package/lib/harness/statusline-payload.d.ts.map +1 -0
- package/lib/harness/statusline-payload.js +93 -0
- package/lib/harness/statusline-payload.js.map +1 -0
- package/lib/harness/statusline-settings.d.ts +47 -0
- package/lib/harness/statusline-settings.d.ts.map +1 -0
- package/lib/harness/statusline-settings.js +57 -0
- package/lib/harness/statusline-settings.js.map +1 -0
- package/lib/harness/statusline-wiring.d.ts +45 -0
- package/lib/harness/statusline-wiring.d.ts.map +1 -0
- package/lib/harness/statusline-wiring.js +247 -0
- package/lib/harness/statusline-wiring.js.map +1 -0
- package/lib/harness/usage-view.d.ts +84 -0
- package/lib/harness/usage-view.d.ts.map +1 -0
- package/lib/harness/usage-view.js +199 -0
- package/lib/harness/usage-view.js.map +1 -0
- package/lib/harness/worktree-exit.d.ts +105 -0
- package/lib/harness/worktree-exit.d.ts.map +1 -0
- package/lib/harness/worktree-exit.js +168 -0
- package/lib/harness/worktree-exit.js.map +1 -0
- package/lib/history.d.ts +50 -0
- package/lib/history.d.ts.map +1 -0
- package/lib/history.js +139 -0
- package/lib/history.js.map +1 -0
- package/lib/index.d.ts +63 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +54 -0
- package/lib/index.js.map +1 -0
- package/lib/input.d.ts +158 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +400 -0
- package/lib/input.js.map +1 -0
- package/lib/invariant.d.ts +14 -0
- package/lib/invariant.d.ts.map +1 -0
- package/lib/invariant.js +20 -0
- package/lib/invariant.js.map +1 -0
- package/lib/mode-cycle.d.ts +22 -0
- package/lib/mode-cycle.d.ts.map +1 -0
- package/lib/mode-cycle.js +32 -0
- package/lib/mode-cycle.js.map +1 -0
- package/lib/model-catalog.d.ts +22 -0
- package/lib/model-catalog.d.ts.map +1 -0
- package/lib/model-catalog.js +45 -0
- package/lib/model-catalog.js.map +1 -0
- package/lib/packaged-preset.d.ts +32 -0
- package/lib/packaged-preset.d.ts.map +1 -0
- package/lib/packaged-preset.js +94 -0
- package/lib/packaged-preset.js.map +1 -0
- package/lib/plugin.d.ts +11 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +88 -0
- package/lib/plugin.js.map +1 -0
- package/lib/profile.d.ts +4 -0
- package/lib/profile.d.ts.map +1 -0
- package/lib/profile.js +7 -0
- package/lib/profile.js.map +1 -0
- package/lib/project-sessions.d.ts +29 -0
- package/lib/project-sessions.d.ts.map +1 -0
- package/lib/project-sessions.js +60 -0
- package/lib/project-sessions.js.map +1 -0
- package/lib/project.d.ts +75 -0
- package/lib/project.d.ts.map +1 -0
- package/lib/project.js +196 -0
- package/lib/project.js.map +1 -0
- package/lib/provider-actions.d.ts +37 -0
- package/lib/provider-actions.d.ts.map +1 -0
- package/lib/provider-actions.js +417 -0
- package/lib/provider-actions.js.map +1 -0
- package/lib/provider-command.d.ts +109 -0
- package/lib/provider-command.d.ts.map +1 -0
- package/lib/provider-command.js +220 -0
- package/lib/provider-command.js.map +1 -0
- package/lib/provider-detail.d.ts +15 -0
- package/lib/provider-detail.d.ts.map +1 -0
- package/lib/provider-detail.js +201 -0
- package/lib/provider-detail.js.map +1 -0
- package/lib/provider-flow.d.ts +191 -0
- package/lib/provider-flow.d.ts.map +1 -0
- package/lib/provider-flow.js +192 -0
- package/lib/provider-flow.js.map +1 -0
- package/lib/provider-presets.d.ts +32 -0
- package/lib/provider-presets.d.ts.map +1 -0
- package/lib/provider-presets.js +105 -0
- package/lib/provider-presets.js.map +1 -0
- package/lib/provider-read.d.ts +63 -0
- package/lib/provider-read.d.ts.map +1 -0
- package/lib/provider-read.js +115 -0
- package/lib/provider-read.js.map +1 -0
- package/lib/provider-settings.d.ts +30 -0
- package/lib/provider-settings.d.ts.map +1 -0
- package/lib/provider-settings.js +65 -0
- package/lib/provider-settings.js.map +1 -0
- package/lib/resume-target.d.ts +59 -0
- package/lib/resume-target.d.ts.map +1 -0
- package/lib/resume-target.js +143 -0
- package/lib/resume-target.js.map +1 -0
- package/lib/slash.d.ts +44 -0
- package/lib/slash.d.ts.map +1 -0
- package/lib/slash.js +81 -0
- package/lib/slash.js.map +1 -0
- package/lib/state/driver-types.d.ts +505 -0
- package/lib/state/driver-types.d.ts.map +1 -0
- package/lib/state/driver-types.js +8 -0
- package/lib/state/driver-types.js.map +1 -0
- package/lib/state/driver-usage-types.d.ts +59 -0
- package/lib/state/driver-usage-types.d.ts.map +1 -0
- package/lib/state/driver-usage-types.js +8 -0
- package/lib/state/driver-usage-types.js.map +1 -0
- package/lib/statusline.d.ts +63 -0
- package/lib/statusline.d.ts.map +1 -0
- package/lib/statusline.js +97 -0
- package/lib/statusline.js.map +1 -0
- package/lib/store/pickers.d.ts +34 -0
- package/lib/store/pickers.d.ts.map +1 -0
- package/lib/store/pickers.js +111 -0
- package/lib/store/pickers.js.map +1 -0
- package/lib/store/provider-panel.d.ts +107 -0
- package/lib/store/provider-panel.d.ts.map +1 -0
- package/lib/store/provider-panel.js +151 -0
- package/lib/store/provider-panel.js.map +1 -0
- package/lib/store/question.d.ts +21 -0
- package/lib/store/question.d.ts.map +1 -0
- package/lib/store/question.js +59 -0
- package/lib/store/question.js.map +1 -0
- package/lib/store/queue.d.ts +27 -0
- package/lib/store/queue.d.ts.map +1 -0
- package/lib/store/queue.js +34 -0
- package/lib/store/queue.js.map +1 -0
- package/lib/store/session.d.ts +73 -0
- package/lib/store/session.d.ts.map +1 -0
- package/lib/store/session.js +172 -0
- package/lib/store/session.js.map +1 -0
- package/lib/store/subagents.d.ts +16 -0
- package/lib/store/subagents.d.ts.map +1 -0
- package/lib/store/subagents.js +44 -0
- package/lib/store/subagents.js.map +1 -0
- package/lib/store/todos.d.ts +35 -0
- package/lib/store/todos.d.ts.map +1 -0
- package/lib/store/todos.js +68 -0
- package/lib/store/todos.js.map +1 -0
- package/lib/store/usage.d.ts +15 -0
- package/lib/store/usage.d.ts.map +1 -0
- package/lib/store/usage.js +27 -0
- package/lib/store/usage.js.map +1 -0
- package/lib/store/views.d.ts +419 -0
- package/lib/store/views.d.ts.map +1 -0
- package/lib/store/views.js +3 -0
- package/lib/store/views.js.map +1 -0
- package/lib/store.d.ts +19 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +10 -0
- package/lib/store.js.map +1 -0
- package/lib/terminal/lease.d.ts +33 -0
- package/lib/terminal/lease.d.ts.map +1 -0
- package/lib/terminal/lease.js +99 -0
- package/lib/terminal/lease.js.map +1 -0
- package/lib/tool-card.d.ts +75 -0
- package/lib/tool-card.d.ts.map +1 -0
- package/lib/tool-card.js +109 -0
- package/lib/tool-card.js.map +1 -0
- package/lib/tool-verbs.d.ts +12 -0
- package/lib/tool-verbs.d.ts.map +1 -0
- package/lib/tool-verbs.js +29 -0
- package/lib/tool-verbs.js.map +1 -0
- package/lib/transcript.d.ts +40 -0
- package/lib/transcript.d.ts.map +1 -0
- package/lib/transcript.js +413 -0
- package/lib/transcript.js.map +1 -0
- package/lib/working-line.d.ts +44 -0
- package/lib/working-line.d.ts.map +1 -0
- package/lib/working-line.js +56 -0
- package/lib/working-line.js.map +1 -0
- package/package.json +72 -0
- package/presets/cc/.dsh-cc-managed.json +5 -0
- package/presets/cc/agent.cordis.yml +524 -0
- package/presets/cc/preset.yml +3 -0
- package/scripts/stage-preset.mjs +26 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-utils.js","sourceRoot":"","sources":["../../src/components/root-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAA;AAE1C,gFAAgF;AAChF,MAAM,eAAe,GAAG,EAAE,CAAA;AAE1B,MAAM,UAAU,cAAc,CAAC,OAAe;IAC7C,OAAO,OAAO,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;AAChG,CAAC;AAED,4DAA4D;AAC5D,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAE5B,2EAA2E;AAC3E,2EAA2E;AAC3E,2EAA2E;AAC3E,4CAA4C;AAC5C,MAAM,0BAA0B,GAAG,2BAA2B,CAAA;AAE9D;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACpE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACzC,OAAO,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AACxF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QACzC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjF,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACzG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root pi-tui mount: regular mode inlines on the main screen; fullscreen mode
|
|
3
|
+
* takes over the alternate screen with a docked layout.
|
|
4
|
+
* @module @dsh-cc/tui/components/root
|
|
5
|
+
*/
|
|
6
|
+
import type { Driver } from '../state/driver-types.ts';
|
|
7
|
+
import type { BuildRootOptions, RootHandle } from './root-types.ts';
|
|
8
|
+
export type { BuildRootOptions, RootHandle };
|
|
9
|
+
/**
|
|
10
|
+
* Build the pi-tui render tree.
|
|
11
|
+
*
|
|
12
|
+
* Children order: title · transcript · queue chips · todo strip · notice ·
|
|
13
|
+
* [approval] · [question] · working line · editor · statusline. The transcript and overlays
|
|
14
|
+
* rebuild on every driver emit; the editor is persistent so it retains focus
|
|
15
|
+
* and cursor state across renders.
|
|
16
|
+
*
|
|
17
|
+
* In regular mode the children render inline into the main screen. In
|
|
18
|
+
* fullscreen mode the TUI enters the alternate screen: the title and transcript
|
|
19
|
+
* scroll inside a primary ScrollView while the remaining chrome docks at the
|
|
20
|
+
* bottom (the dock keeps its intrinsic height and yields rows first under
|
|
21
|
+
* pressure, with the editor never squeezed below 1 row and the statusline
|
|
22
|
+
* never below 1).
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildRoot(driver: Driver, opts?: BuildRootOptions): RootHandle;
|
|
25
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/components/root.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAatD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEnE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAA;AAE5C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,UAAU,CA8VjF"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Root pi-tui mount: regular mode inlines on the main screen; fullscreen mode
|
|
3
|
+
* takes over the alternate screen with a docked layout.
|
|
4
|
+
* @module @dsh-cc/tui/components/root
|
|
5
|
+
*/
|
|
6
|
+
import { Container, Editor, Key, matchesKey, ProcessTerminal, ScrollView, Text, TuiAltScreen, TuiMainScreen, VStack, getKeybindings, isKeyRelease, } from '@dsh-cc/pi-tui';
|
|
7
|
+
import { overlayOpen, renderOverlayChildren, routeOverlayInput } from "./overlay-host.js";
|
|
8
|
+
import { todoSummary } from "../store.js";
|
|
9
|
+
import { formatWorkingLine } from "../working-line.js";
|
|
10
|
+
import { buildArgCompleters } from "./arg-completers.js";
|
|
11
|
+
import { attachBashMode } from "./root-bash.js";
|
|
12
|
+
import { resetEditorHistory } from "./editor-history.js";
|
|
13
|
+
import { TuiAutocompleteProvider } from "./completion.js";
|
|
14
|
+
import { DOUBLE_PRESS_WINDOW_MS, openSystemUrl, sanitizeWindowTitle, truncateActive } from "./root-utils.js";
|
|
15
|
+
import { createEditorTheme, createTheme } from "./theme.js";
|
|
16
|
+
import { TranscriptView } from "./transcript.js";
|
|
17
|
+
import { WorkingLine } from "./working-line.js";
|
|
18
|
+
/**
|
|
19
|
+
* Build the pi-tui render tree.
|
|
20
|
+
*
|
|
21
|
+
* Children order: title · transcript · queue chips · todo strip · notice ·
|
|
22
|
+
* [approval] · [question] · working line · editor · statusline. The transcript and overlays
|
|
23
|
+
* rebuild on every driver emit; the editor is persistent so it retains focus
|
|
24
|
+
* and cursor state across renders.
|
|
25
|
+
*
|
|
26
|
+
* In regular mode the children render inline into the main screen. In
|
|
27
|
+
* fullscreen mode the TUI enters the alternate screen: the title and transcript
|
|
28
|
+
* scroll inside a primary ScrollView while the remaining chrome docks at the
|
|
29
|
+
* bottom (the dock keeps its intrinsic height and yields rows first under
|
|
30
|
+
* pressure, with the editor never squeezed below 1 row and the statusline
|
|
31
|
+
* never below 1).
|
|
32
|
+
*/
|
|
33
|
+
export function buildRoot(driver, opts = {}) {
|
|
34
|
+
const terminal = opts.terminal ?? new ProcessTerminal();
|
|
35
|
+
const mode = opts.uiMode ?? 'regular';
|
|
36
|
+
const theme = createTheme(opts.theme);
|
|
37
|
+
const tui = mode === 'fullscreen'
|
|
38
|
+
? new TuiAltScreen(terminal, undefined, undefined, {
|
|
39
|
+
mouse: opts.mouse ?? true,
|
|
40
|
+
openUrl: openSystemUrl,
|
|
41
|
+
})
|
|
42
|
+
: new TuiMainScreen(terminal);
|
|
43
|
+
const title = new Text(theme.bold('dsh cc-mode'), 0, 0);
|
|
44
|
+
const transcript = new TranscriptView(theme);
|
|
45
|
+
// Pending-steer chip line. Collapses to zero lines when the queue is empty
|
|
46
|
+
// (Text.render returns [] for blank content), so it takes no vertical space.
|
|
47
|
+
const queueLine = new Text('', 0, 0);
|
|
48
|
+
// Session todo strip (`☐ done/total · active task`), same persistent-Text
|
|
49
|
+
// pattern: blank content collapses it to zero lines when no todos exist.
|
|
50
|
+
const todoLine = new Text('', 0, 0);
|
|
51
|
+
// Transient notice line (e.g. the "Press Ctrl+C again to exit" hint), same
|
|
52
|
+
// persistent-Text pattern: blank content collapses it to zero lines when no
|
|
53
|
+
// notice is parked.
|
|
54
|
+
const noticeLine = new Text('', 0, 0);
|
|
55
|
+
// Live working line (claude-code style spinner row). Visibility is driven
|
|
56
|
+
// purely by the `state.turn` anchor (the subscribe below starts/stops it
|
|
57
|
+
// on undefined→set jumps); the message re-evaluates on every spinner tick,
|
|
58
|
+
// so elapsed time and token deltas keep moving with no driver events.
|
|
59
|
+
// stop() blanks it, and an empty Text collapses to zero lines.
|
|
60
|
+
const workingLine = new WorkingLine(theme.accent, theme.muted, () => {
|
|
61
|
+
const s = driver.state;
|
|
62
|
+
return s.turn === undefined ? '' : formatWorkingLine(s.turn, s.hud?.tokens?.output ?? 0, Date.now());
|
|
63
|
+
}, () => tui.requestRender());
|
|
64
|
+
// Dynamic overlay slot (approval/question boxes). Cleared and rebuilt on
|
|
65
|
+
// every state change so they appear and disappear with the driver state.
|
|
66
|
+
const overlays = new Container();
|
|
67
|
+
const editor = new Editor(tui, createEditorTheme(theme));
|
|
68
|
+
// Seed the editor's ↑/↓ recall from persisted history (oldest first —
|
|
69
|
+
// addToHistory unshifts, so the last-seeded/newest becomes index 0 and is
|
|
70
|
+
// recalled on the first ↑ press). The reference is tracked so a /resume
|
|
71
|
+
// history rebind (new array identity) reseeds the stack in the subscribe
|
|
72
|
+
// callback below.
|
|
73
|
+
let seededHistory = driver.promptHistory;
|
|
74
|
+
resetEditorHistory(editor, seededHistory);
|
|
75
|
+
const bashMode = attachBashMode({ editor, driver, tui, theme });
|
|
76
|
+
const { bashRunning, inShellMode, browseBashHistory, resetBashHistoryBrowsing } = bashMode;
|
|
77
|
+
// Slash-command + @-file autocomplete. The provider is rebuilt only when the
|
|
78
|
+
// driver's command catalog changes identity (driver.listCommands() returns a
|
|
79
|
+
// stable reference until commands/change fires) — cheap reference compare on
|
|
80
|
+
// every state emit, rebuild only when the catalog actually moved.
|
|
81
|
+
// Argument completers (`/model`, `/effort`, `/permissions`, `/resume`) are driver-backed and fetch per
|
|
82
|
+
// request, so a single map built once at mount never goes stale.
|
|
83
|
+
const argCompleters = buildArgCompleters(driver);
|
|
84
|
+
let lastCatalog = driver.listCommands();
|
|
85
|
+
let autocompleteProvider = new TuiAutocompleteProvider(lastCatalog, driver.cwd, undefined, argCompleters);
|
|
86
|
+
editor.setAutocompleteProvider(autocompleteProvider);
|
|
87
|
+
// D5: the statusline string is width-dependent — rebuild it from
|
|
88
|
+
// driver.statusLineIn on every render, so a resize applies immediately.
|
|
89
|
+
const statusline = new class extends Text {
|
|
90
|
+
render(width) {
|
|
91
|
+
this.setText(driver.statusLineIn(terminal.columns));
|
|
92
|
+
return super.render(width);
|
|
93
|
+
}
|
|
94
|
+
}(driver.statusLineIn(terminal.columns), 0, 0);
|
|
95
|
+
// Ordered chrome shared by the inline mount and the fullscreen exit replay.
|
|
96
|
+
const chrome = [title, transcript, queueLine, todoLine, noticeLine, overlays, workingLine, editor, statusline];
|
|
97
|
+
if (tui instanceof TuiAltScreen) {
|
|
98
|
+
// Fullscreen (alternate screen): transcript scrolls inside the primary
|
|
99
|
+
// ScrollView; the rest of the chrome docks at the bottom.
|
|
100
|
+
const body = new VStack();
|
|
101
|
+
body.addChild(title);
|
|
102
|
+
body.addChild(transcript);
|
|
103
|
+
const scrollView = new ScrollView(body, {
|
|
104
|
+
follow: 'end',
|
|
105
|
+
primary: true,
|
|
106
|
+
overscroll: 'chain',
|
|
107
|
+
scrollbar: 'auto',
|
|
108
|
+
});
|
|
109
|
+
const dock = new VStack();
|
|
110
|
+
dock.addChild(queueLine, { shrink: 1, minSize: 0 });
|
|
111
|
+
dock.addChild(todoLine, { shrink: 1, minSize: 0 });
|
|
112
|
+
dock.addChild(noticeLine, { shrink: 1, minSize: 0 });
|
|
113
|
+
dock.addChild(overlays, { shrink: 1, minSize: 0 });
|
|
114
|
+
dock.addChild(workingLine, { shrink: 1, minSize: 0 });
|
|
115
|
+
dock.addChild(editor, { shrink: 1, minSize: 1 });
|
|
116
|
+
dock.addChild(statusline, { shrink: 1, minSize: 1 });
|
|
117
|
+
const layoutRoot = new VStack();
|
|
118
|
+
layoutRoot.addChild(scrollView, { basis: 0, grow: 1, shrink: 1, minSize: 1 });
|
|
119
|
+
layoutRoot.addChild(dock, { basis: 'auto', grow: 0, shrink: 1, minSize: 1 });
|
|
120
|
+
tui.setLayoutRoot(layoutRoot);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
for (const child of chrome)
|
|
124
|
+
tui.addChild(child);
|
|
125
|
+
}
|
|
126
|
+
// Free ctrl+c from the editor's copy keybinding so the global listener
|
|
127
|
+
// owns the quit path.
|
|
128
|
+
getKeybindings().setUserBindings({ 'tui.input.copy': [] });
|
|
129
|
+
// Global key handler — runs BEFORE editor dispatch. Printable text belongs to
|
|
130
|
+
// the editor; this listener owns only overlays and global chords. Anything it
|
|
131
|
+
// does not consume falls through to the focused editor.
|
|
132
|
+
const removeInputListener = tui.addInputListener((data) => {
|
|
133
|
+
// Kitty protocol flag 2 (report event types) delivers a release event
|
|
134
|
+
// after every physical press. pi-tui filters releases only on the
|
|
135
|
+
// focused-component path — this listener chain gets them raw, so drop
|
|
136
|
+
// them here before any routing. Otherwise one keypress double-fires
|
|
137
|
+
// overlay navigation (the /model picker moved two rows per press).
|
|
138
|
+
// Repeats are kept: holding a key must still autoscroll.
|
|
139
|
+
if (isKeyRelease(data))
|
|
140
|
+
return { consume: true };
|
|
141
|
+
const live = driver.state;
|
|
142
|
+
// Ctrl+C arrives as a raw \x03 byte in raw mode (never a SIGINT). Treat it
|
|
143
|
+
// as an escape hatch: interrupt when busy; quit when idle — but only on a
|
|
144
|
+
// double press, so a stray Ctrl+C never kills the session. When an overlay
|
|
145
|
+
// is open and the agent is idle, fall through so the overlay's own key
|
|
146
|
+
// handling (esc to dismiss, etc.) owns it.
|
|
147
|
+
if (data === '\x03') {
|
|
148
|
+
if (live.busy) {
|
|
149
|
+
driver.interrupt();
|
|
150
|
+
return { consume: true };
|
|
151
|
+
}
|
|
152
|
+
if (overlayOpen(live)) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const now = Date.now();
|
|
156
|
+
const lastAttempt = live.lastExitAttemptAt;
|
|
157
|
+
if (lastAttempt !== undefined && now - lastAttempt <= DOUBLE_PRESS_WINDOW_MS) {
|
|
158
|
+
opts.onQuit?.();
|
|
159
|
+
return { consume: true };
|
|
160
|
+
}
|
|
161
|
+
// First press: anchor the window and hint. The window expires
|
|
162
|
+
// naturally — no per-keystroke timer resets.
|
|
163
|
+
driver.markExitAttempt(now);
|
|
164
|
+
driver.showNotice('Press Ctrl+C again to exit');
|
|
165
|
+
return { consume: true };
|
|
166
|
+
}
|
|
167
|
+
// Any parked overlay (approval, question, pickers, panels) owns the key:
|
|
168
|
+
// routed through the shared overlay host and consumed so the editor
|
|
169
|
+
// never sees typing, arrows, or enter while a modal is open.
|
|
170
|
+
if (routeOverlayInput(driver, live, data))
|
|
171
|
+
return { consume: true };
|
|
172
|
+
if (matchesKey(data, 'shift+tab')) {
|
|
173
|
+
driver.cyclePermissionMode();
|
|
174
|
+
return { consume: true };
|
|
175
|
+
}
|
|
176
|
+
if (matchesKey(data, Key.ctrl('o'))) {
|
|
177
|
+
driver.toggleGlobalCollapse();
|
|
178
|
+
return { consume: true };
|
|
179
|
+
}
|
|
180
|
+
if (matchesKey(data, Key.ctrl('t'))) {
|
|
181
|
+
driver.toggleTodoPanel();
|
|
182
|
+
return { consume: true };
|
|
183
|
+
}
|
|
184
|
+
if (matchesKey(data, Key.ctrl('s'))) {
|
|
185
|
+
// Queue-jump: inject the outbox into the running turn now.
|
|
186
|
+
driver.steerQueued();
|
|
187
|
+
return { consume: true };
|
|
188
|
+
}
|
|
189
|
+
if (bashRunning()) {
|
|
190
|
+
// A local `!` command is in flight: the composer is disabled and
|
|
191
|
+
// every key is swallowed until it settles. Ctrl+C above still owns
|
|
192
|
+
// interrupt/quit; the stall is bounded by the command's timeout.
|
|
193
|
+
return { consume: true };
|
|
194
|
+
}
|
|
195
|
+
if (inShellMode() && (matchesKey(data, Key.up) || matchesKey(data, Key.down))) {
|
|
196
|
+
// Bash history browsing: the root-owned stack from driver.bashHistory,
|
|
197
|
+
// consumed here so the editor's built-in prompt navigation never
|
|
198
|
+
// interleaves with it (the editor never sees these arrows).
|
|
199
|
+
browseBashHistory(matchesKey(data, Key.up));
|
|
200
|
+
return { consume: true };
|
|
201
|
+
}
|
|
202
|
+
if (matchesKey(data, Key.up) && editor.getText().length === 0 && live.queued.length > 0) {
|
|
203
|
+
// Empty composer + ↑ recalls the most recent queued entry for editing.
|
|
204
|
+
// A non-empty composer (or empty queue) falls through so the editor's
|
|
205
|
+
// own history navigation keeps working.
|
|
206
|
+
const recalled = driver.recallQueued();
|
|
207
|
+
if (recalled !== undefined) {
|
|
208
|
+
editor.setText(recalled);
|
|
209
|
+
return { consume: true };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (matchesKey(data, Key.ctrl('b'))) {
|
|
213
|
+
// Ctrl+B promotion of a foreground subagent wait (plan §3.4). While
|
|
214
|
+
// busy, promote EVERY armed foreground collect of this session
|
|
215
|
+
// (via the driver → root-realm `ccCollectorRegistry`) and echo one
|
|
216
|
+
// status line; busy with nothing promotable (no armed collect,
|
|
217
|
+
// env kill switch, or driver without the seam) is a consumed
|
|
218
|
+
// no-op — Ctrl+B here is NEVER treated as Esc. Idle falls through
|
|
219
|
+
// to the editor's `tui.editor.cursorLeft` binding, unchanged.
|
|
220
|
+
// tmux: Ctrl+B is the default prefix — double-press passes a
|
|
221
|
+
// literal Ctrl+B through (`send-prefix`); the Ctrl+X Ctrl+B chord
|
|
222
|
+
// is P1 (not implemented).
|
|
223
|
+
if (!live.busy)
|
|
224
|
+
return undefined;
|
|
225
|
+
const promoted = driver.promoteForegroundCollects?.() ?? 0;
|
|
226
|
+
if (promoted > 0) {
|
|
227
|
+
driver.showNotice(`Moved ${promoted} subagent(s) to background — /agents to inspect`);
|
|
228
|
+
}
|
|
229
|
+
return { consume: true };
|
|
230
|
+
}
|
|
231
|
+
if (matchesKey(data, Key.escape)) {
|
|
232
|
+
if (inShellMode()) {
|
|
233
|
+
// Bash mode owns Esc FIRST — this branch must stay above the
|
|
234
|
+
// busy-interrupt path: in shell mode Esc leaves the mode (the
|
|
235
|
+
// buffer clears via onChange, which also restores the border)
|
|
236
|
+
// and never interrupts the agent, even while busy.
|
|
237
|
+
editor.setText('');
|
|
238
|
+
resetBashHistoryBrowsing();
|
|
239
|
+
return { consume: true };
|
|
240
|
+
}
|
|
241
|
+
if (live.busy) {
|
|
242
|
+
driver.interrupt();
|
|
243
|
+
return { consume: true };
|
|
244
|
+
}
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
return undefined;
|
|
248
|
+
});
|
|
249
|
+
// Rebuild transcript + overlays + statusline on every driver emit.
|
|
250
|
+
// `undefined` until the subscribe's immediate first callback seeds the
|
|
251
|
+
// turn-anchor tracker — that first call acts, so a boot into an
|
|
252
|
+
// already-running session (turn set before mount) starts the line.
|
|
253
|
+
let workingLineLive;
|
|
254
|
+
// Window-title tracker for the session/title effect below: the subscribe
|
|
255
|
+
// fires on every state emit, so only real transitions reach the terminal.
|
|
256
|
+
let lastWindowTitle;
|
|
257
|
+
const unsubscribe = driver.subscribe((state) => {
|
|
258
|
+
// Terminal window title mirrors the framework's session/title fold
|
|
259
|
+
// (fallback 'dsh-cc' before the first title lands or after switching
|
|
260
|
+
// to an untitled session). One expression covers boot, resume-boot
|
|
261
|
+
// (history folds before this subscription exists, so the first call
|
|
262
|
+
// already carries the resumed title), live updates, and switches.
|
|
263
|
+
// Gated on a real TTY: piped/headless runs must not leak OSC bytes.
|
|
264
|
+
const windowTitle = sanitizeWindowTitle(state.title ?? 'dsh-cc');
|
|
265
|
+
if (process.stdout.isTTY && windowTitle !== lastWindowTitle) {
|
|
266
|
+
lastWindowTitle = windowTitle;
|
|
267
|
+
terminal.setTitle(windowTitle);
|
|
268
|
+
}
|
|
269
|
+
// /resume rebinds prompt history onto the switched session's project
|
|
270
|
+
// (a new array identity); reseed the editor's recall stack when it
|
|
271
|
+
// moves. Submits also replace the array — the reseed is then
|
|
272
|
+
// content-equivalent and only resets the (already exited) browsing
|
|
273
|
+
// state.
|
|
274
|
+
const liveHistory = driver.promptHistory;
|
|
275
|
+
if (liveHistory !== seededHistory) {
|
|
276
|
+
seededHistory = liveHistory;
|
|
277
|
+
resetEditorHistory(editor, liveHistory);
|
|
278
|
+
}
|
|
279
|
+
transcript.setRows(state.rows, {
|
|
280
|
+
thinkingExpanded: state.thinkingExpanded,
|
|
281
|
+
toolOutputExpanded: state.toolOutputExpanded,
|
|
282
|
+
compactExpanded: state.compactExpanded,
|
|
283
|
+
});
|
|
284
|
+
queueLine.setText(state.queued.length === 0
|
|
285
|
+
? ''
|
|
286
|
+
: state.queued.map(text => theme.muted(`⏵ queued: ${text}`)).join('\n'));
|
|
287
|
+
queueLine.invalidate();
|
|
288
|
+
const summary = todoSummary(state);
|
|
289
|
+
todoLine.setText(summary === undefined
|
|
290
|
+
? ''
|
|
291
|
+
: theme.muted(`☐ ${summary.done}/${summary.total}${summary.active === undefined ? '' : ` · ${truncateActive(summary.active)}`}`));
|
|
292
|
+
todoLine.invalidate();
|
|
293
|
+
noticeLine.setText(state.notice === undefined ? '' : theme.muted(state.notice));
|
|
294
|
+
noticeLine.invalidate();
|
|
295
|
+
// Working line lifecycle tracks the turn anchor: start on the
|
|
296
|
+
// undefined→set jump, stop on the reverse. Seeded by the first
|
|
297
|
+
// (immediate) subscribe call — see workingLineLive above.
|
|
298
|
+
const turnLive = state.turn !== undefined;
|
|
299
|
+
if (workingLineLive !== turnLive) {
|
|
300
|
+
workingLineLive = turnLive;
|
|
301
|
+
if (turnLive)
|
|
302
|
+
workingLine.start();
|
|
303
|
+
else
|
|
304
|
+
workingLine.stop();
|
|
305
|
+
}
|
|
306
|
+
// Overlay boxes (approval/question/pickers/panels) rebuild from the
|
|
307
|
+
// state on every emit via the shared overlay host.
|
|
308
|
+
renderOverlayChildren(overlays, state, theme);
|
|
309
|
+
// Refresh the autocomplete provider when the command catalog moves
|
|
310
|
+
// (reference equality with the last-seen array). The driver keeps the
|
|
311
|
+
// cached array stable across state emits until commands/change fires, so
|
|
312
|
+
// this is a cheap guard that rebuilds only on an actual catalog change.
|
|
313
|
+
const latestCatalog = driver.listCommands();
|
|
314
|
+
if (latestCatalog !== lastCatalog) {
|
|
315
|
+
lastCatalog = latestCatalog;
|
|
316
|
+
autocompleteProvider = new TuiAutocompleteProvider(latestCatalog, driver.cwd, undefined, argCompleters);
|
|
317
|
+
editor.setAutocompleteProvider(autocompleteProvider);
|
|
318
|
+
}
|
|
319
|
+
tui.requestRender();
|
|
320
|
+
});
|
|
321
|
+
tui.setFocus(editor);
|
|
322
|
+
return {
|
|
323
|
+
get tui() {
|
|
324
|
+
return tui;
|
|
325
|
+
},
|
|
326
|
+
get mode() {
|
|
327
|
+
return mode;
|
|
328
|
+
},
|
|
329
|
+
editor,
|
|
330
|
+
destroy() {
|
|
331
|
+
// Stop the working line first: it must not tick after teardown —
|
|
332
|
+
// this covers the quit-mid-turn path (the stopForExit chrome replay
|
|
333
|
+
// would otherwise bake a live spinner frame into scrollback) and the
|
|
334
|
+
// no-polling suite's no-dangling-interval invariant.
|
|
335
|
+
workingLine.stop();
|
|
336
|
+
removeInputListener();
|
|
337
|
+
unsubscribe();
|
|
338
|
+
},
|
|
339
|
+
stopForExit() {
|
|
340
|
+
if (!(tui instanceof TuiAltScreen)) {
|
|
341
|
+
tui.stop();
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
// Fullscreen exit (transcript form): leave the alternate
|
|
345
|
+
// screen without repainting, then replay the chrome through a one-shot
|
|
346
|
+
// main-screen renderer so native scrollback ends up with the same
|
|
347
|
+
// inline layout a regular session would have produced.
|
|
348
|
+
tui.stop({ preserveScreen: true });
|
|
349
|
+
const replay = new TuiMainScreen(terminal);
|
|
350
|
+
for (const child of chrome)
|
|
351
|
+
replay.addChild(child);
|
|
352
|
+
replay.renderNow();
|
|
353
|
+
replay.stop();
|
|
354
|
+
},
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/components/root.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny SGR (Select Graphic Rendition) helpers and the configurable theme
|
|
3
|
+
* palette. No chalk — just raw ANSI codes embedded in Text content, which
|
|
4
|
+
* pi-tui's Text component preserves through word-wrap.
|
|
5
|
+
*
|
|
6
|
+
* {@link createTheme} derives the full theme from optional per-role overrides
|
|
7
|
+
* ({@link ThemeOverrides}). An override value is either a basic ANSI color
|
|
8
|
+
* name (`'red'`, `'brightCyan'`) or a raw SGR parameter string (`'31'`,
|
|
9
|
+
* `'1;31'`, `'38;5;208'`); unknown names and malformed codes silently fall
|
|
10
|
+
* back to the built-in default. The default palette is byte-identical to the
|
|
11
|
+
* historical fixed palette, so an absent config changes nothing on screen.
|
|
12
|
+
* @module @dsh-cc/tui/components/theme
|
|
13
|
+
*/
|
|
14
|
+
import type { EditorTheme } from '@dsh-cc/pi-tui';
|
|
15
|
+
/** Wrap text in an SGR sequence. */
|
|
16
|
+
export declare const sgr: (code: string) => (text: string) => string;
|
|
17
|
+
/** A function that wraps text in an SGR style. */
|
|
18
|
+
export type Styler = (text: string) => string;
|
|
19
|
+
/** Fixed attribute stylers — part of the theme but not user-configurable. */
|
|
20
|
+
export declare const bold: (text: string) => string;
|
|
21
|
+
export declare const italic: (text: string) => string;
|
|
22
|
+
export declare const underline: (text: string) => string;
|
|
23
|
+
export declare const strikethrough: (text: string) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Per-role palette overrides. Every role is optional; `undefined` and invalid
|
|
26
|
+
* values keep the built-in default for that role.
|
|
27
|
+
*/
|
|
28
|
+
export interface ThemeOverrides {
|
|
29
|
+
/** Primary interactive accent (default: cyan). */
|
|
30
|
+
accent?: string;
|
|
31
|
+
/** Success and addition color (default: green). */
|
|
32
|
+
success?: string;
|
|
33
|
+
/** Error and removal color (default: red). */
|
|
34
|
+
error?: string;
|
|
35
|
+
/** Warning and attention color (default: yellow). */
|
|
36
|
+
warning?: string;
|
|
37
|
+
/** De-emphasized text (default: the faint SGR attribute). */
|
|
38
|
+
muted?: string;
|
|
39
|
+
/** Secondary accent for special highlights (default: magenta). */
|
|
40
|
+
highlight?: string;
|
|
41
|
+
}
|
|
42
|
+
/** The resolved palette handed down the component tree. */
|
|
43
|
+
export interface Theme {
|
|
44
|
+
accent: Styler;
|
|
45
|
+
success: Styler;
|
|
46
|
+
error: Styler;
|
|
47
|
+
warning: Styler;
|
|
48
|
+
muted: Styler;
|
|
49
|
+
highlight: Styler;
|
|
50
|
+
bold: Styler;
|
|
51
|
+
italic: Styler;
|
|
52
|
+
underline: Styler;
|
|
53
|
+
strikethrough: Styler;
|
|
54
|
+
}
|
|
55
|
+
/** Build a theme from optional overrides; invalid values keep the default. */
|
|
56
|
+
export declare function createTheme(overrides?: ThemeOverrides): Theme;
|
|
57
|
+
/** The built-in default theme — byte-identical to the historical fixed palette. */
|
|
58
|
+
export declare const defaultTheme: Theme;
|
|
59
|
+
/** Derive the pi-tui editor theme from a palette: accent focus, muted rest. */
|
|
60
|
+
export declare function createEditorTheme(theme: Theme): EditorTheme;
|
|
61
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/components/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,oCAAoC;AACpC,eAAO,MAAM,GAAG,GACb,MAAM,MAAM,MACZ,MAAM,MAAM,KAAG,MACe,CAAA;AAEjC,kDAAkD;AAClD,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;AAE7C,6EAA6E;AAC7E,eAAO,MAAM,IAAI,SAPR,MAAM,KAAG,MAOU,CAAA;AAC5B,eAAO,MAAM,MAAM,SARV,MAAM,KAAG,MAQY,CAAA;AAC9B,eAAO,MAAM,SAAS,SATb,MAAM,KAAG,MASe,CAAA;AACjC,eAAO,MAAM,aAAa,SAVjB,MAAM,KAAG,MAUmB,CAAA;AAErC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,2DAA2D;AAC3D,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;CACtB;AAkDD,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,KAAK,CAe7D;AAED,mFAAmF;AACnF,eAAO,MAAM,YAAY,EAAE,KAAqB,CAAA;AAEhD,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAW3D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny SGR (Select Graphic Rendition) helpers and the configurable theme
|
|
3
|
+
* palette. No chalk — just raw ANSI codes embedded in Text content, which
|
|
4
|
+
* pi-tui's Text component preserves through word-wrap.
|
|
5
|
+
*
|
|
6
|
+
* {@link createTheme} derives the full theme from optional per-role overrides
|
|
7
|
+
* ({@link ThemeOverrides}). An override value is either a basic ANSI color
|
|
8
|
+
* name (`'red'`, `'brightCyan'`) or a raw SGR parameter string (`'31'`,
|
|
9
|
+
* `'1;31'`, `'38;5;208'`); unknown names and malformed codes silently fall
|
|
10
|
+
* back to the built-in default. The default palette is byte-identical to the
|
|
11
|
+
* historical fixed palette, so an absent config changes nothing on screen.
|
|
12
|
+
* @module @dsh-cc/tui/components/theme
|
|
13
|
+
*/
|
|
14
|
+
/** Wrap text in an SGR sequence. */
|
|
15
|
+
export const sgr = (code) => (text) => `\x1b[${code}m${text}\x1b[0m`;
|
|
16
|
+
/** Fixed attribute stylers — part of the theme but not user-configurable. */
|
|
17
|
+
export const bold = sgr('1');
|
|
18
|
+
export const italic = sgr('3');
|
|
19
|
+
export const underline = sgr('4');
|
|
20
|
+
export const strikethrough = sgr('9');
|
|
21
|
+
/**
|
|
22
|
+
* Basic ANSI color names accepted by {@link ThemeOverrides} — the eight base
|
|
23
|
+
* colors plus their bright variants (with `gray`/`grey` aliases). Anything
|
|
24
|
+
* outside this table is treated as a raw SGR code string.
|
|
25
|
+
*/
|
|
26
|
+
const SGR_BY_COLOR_NAME = {
|
|
27
|
+
black: '30',
|
|
28
|
+
red: '31',
|
|
29
|
+
green: '32',
|
|
30
|
+
yellow: '33',
|
|
31
|
+
blue: '34',
|
|
32
|
+
magenta: '35',
|
|
33
|
+
cyan: '36',
|
|
34
|
+
white: '37',
|
|
35
|
+
brightBlack: '90',
|
|
36
|
+
gray: '90',
|
|
37
|
+
grey: '90',
|
|
38
|
+
brightRed: '91',
|
|
39
|
+
brightGreen: '92',
|
|
40
|
+
brightYellow: '93',
|
|
41
|
+
brightBlue: '94',
|
|
42
|
+
brightMagenta: '95',
|
|
43
|
+
brightCyan: '96',
|
|
44
|
+
brightWhite: '97',
|
|
45
|
+
};
|
|
46
|
+
/** Raw SGR parameter string: `;`-separated non-negative integers. */
|
|
47
|
+
const SGR_CODE_PATTERN = /^\d+(;\d+)*$/;
|
|
48
|
+
/** Resolve one override value to an SGR parameter string, or the fallback. */
|
|
49
|
+
function resolveSgr(value, fallback) {
|
|
50
|
+
if (typeof value !== 'string')
|
|
51
|
+
return fallback;
|
|
52
|
+
const named = SGR_BY_COLOR_NAME[value];
|
|
53
|
+
if (named !== undefined)
|
|
54
|
+
return named;
|
|
55
|
+
if (SGR_CODE_PATTERN.test(value))
|
|
56
|
+
return value;
|
|
57
|
+
return fallback;
|
|
58
|
+
}
|
|
59
|
+
/** Built-in default SGR code per configurable role (the historical palette). */
|
|
60
|
+
const DEFAULT_SGR_BY_ROLE = {
|
|
61
|
+
accent: '36',
|
|
62
|
+
success: '32',
|
|
63
|
+
error: '31',
|
|
64
|
+
warning: '33',
|
|
65
|
+
muted: '2',
|
|
66
|
+
highlight: '35',
|
|
67
|
+
};
|
|
68
|
+
/** Build a theme from optional overrides; invalid values keep the default. */
|
|
69
|
+
export function createTheme(overrides) {
|
|
70
|
+
const role = (name) => sgr(resolveSgr(overrides?.[name], DEFAULT_SGR_BY_ROLE[name]));
|
|
71
|
+
return {
|
|
72
|
+
accent: role('accent'),
|
|
73
|
+
success: role('success'),
|
|
74
|
+
error: role('error'),
|
|
75
|
+
warning: role('warning'),
|
|
76
|
+
muted: role('muted'),
|
|
77
|
+
highlight: role('highlight'),
|
|
78
|
+
bold,
|
|
79
|
+
italic,
|
|
80
|
+
underline,
|
|
81
|
+
strikethrough,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** The built-in default theme — byte-identical to the historical fixed palette. */
|
|
85
|
+
export const defaultTheme = createTheme();
|
|
86
|
+
/** Derive the pi-tui editor theme from a palette: accent focus, muted rest. */
|
|
87
|
+
export function createEditorTheme(theme) {
|
|
88
|
+
return {
|
|
89
|
+
borderColor: theme.accent,
|
|
90
|
+
selectList: {
|
|
91
|
+
selectedPrefix: () => '> ',
|
|
92
|
+
selectedText: theme.accent,
|
|
93
|
+
description: theme.muted,
|
|
94
|
+
scrollInfo: theme.muted,
|
|
95
|
+
noMatch: theme.muted,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/components/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript view: a Container that mirrors the TuiState rows. Assistant rows
|
|
3
|
+
* render through the vendored Markdown component; other row kinds use Text.
|
|
4
|
+
* Per-row identity caching avoids re-parsing unchanged historical markdown on
|
|
5
|
+
* every streaming chunk, and a source-line budget clips the oldest rows when
|
|
6
|
+
* the transcript grows very long.
|
|
7
|
+
* @module @dsh-cc/tui/components/transcript
|
|
8
|
+
*/
|
|
9
|
+
import { Container } from '@dsh-cc/pi-tui';
|
|
10
|
+
import type { TranscriptRow } from '../store.ts';
|
|
11
|
+
import { type Theme } from './theme.ts';
|
|
12
|
+
/** Drop oldest rows once the total source-line count exceeds this. */
|
|
13
|
+
export declare const TRANSCRIPT_LINE_BUDGET = 2000;
|
|
14
|
+
/** Cheap source-line count for a row (NOT rendered lines). */
|
|
15
|
+
export declare function rowSourceLines(row: TranscriptRow, theme: Theme, options?: RowRenderOptions): number;
|
|
16
|
+
/** Options that affect how a row renders (independent of row identity). */
|
|
17
|
+
export interface RowRenderOptions {
|
|
18
|
+
/** Expand thinking rows; default false (collapsed to a one-line hint). */
|
|
19
|
+
thinkingExpanded?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Expand tool rows' output (body/result/diffs); default true. When false a
|
|
22
|
+
* collapsed tool row renders only its head plus a dim summary line.
|
|
23
|
+
*/
|
|
24
|
+
toolOutputExpanded?: boolean;
|
|
25
|
+
/** Expand compact rows' summary body; default false (one-line boundary). */
|
|
26
|
+
compactExpanded?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function renderRowText(row: TranscriptRow, options?: RowRenderOptions, theme?: Theme): string;
|
|
29
|
+
/**
|
|
30
|
+
* Container that renders transcript rows as stacked Text/Markdown components.
|
|
31
|
+
* Call `setRows` whenever the driver emits a new state. Styling comes from the
|
|
32
|
+
* injected `theme` (default: the built-in palette).
|
|
33
|
+
*/
|
|
34
|
+
export declare class TranscriptView extends Container {
|
|
35
|
+
private readonly theme;
|
|
36
|
+
private prevCache;
|
|
37
|
+
private prevThinkingExpanded;
|
|
38
|
+
private prevToolOutputExpanded;
|
|
39
|
+
private prevCompactExpanded;
|
|
40
|
+
constructor(theme?: Theme);
|
|
41
|
+
setRows(rows: readonly TranscriptRow[], options?: RowRenderOptions): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/components/transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,OAAO,EAAgB,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AAErD,sEAAsE;AACtE,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,8DAA8D;AAC9D,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,CAUR;AAiBD,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,4EAA4E;IAC5E,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAkBD,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,gBAAgB,EAAE,KAAK,GAAE,KAAoB,GAAG,MAAM,CAuDjH;AAkCD;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,oBAAoB,CAAQ;IACpC,OAAO,CAAC,sBAAsB,CAAO;IACrC,OAAO,CAAC,mBAAmB,CAAQ;gBAEvB,KAAK,GAAE,KAAoB;IAKvC,OAAO,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI;CA4D1E"}
|