@prestyj/cli 4.3.210 → 4.3.238
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -9
- package/dist/cli/auth.d.ts +4 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +344 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/command-routing.d.ts +28 -0
- package/dist/cli/command-routing.d.ts.map +1 -0
- package/dist/cli/command-routing.js +53 -0
- package/dist/cli/command-routing.js.map +1 -0
- package/dist/cli/command-routing.test.d.ts +2 -0
- package/dist/cli/command-routing.test.d.ts.map +1 -0
- package/dist/cli/command-routing.test.js +60 -0
- package/dist/cli/command-routing.test.js.map +1 -0
- package/dist/cli/mcp.d.ts +2 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +309 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/pixel.d.ts +27 -0
- package/dist/cli/pixel.d.ts.map +1 -0
- package/dist/cli/pixel.js +103 -0
- package/dist/cli/pixel.js.map +1 -0
- package/dist/cli/shared.d.ts +13 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +82 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli.d.ts +4 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +174 -732
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +29 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/agent-session-compaction.test.d.ts +2 -0
- package/dist/core/agent-session-compaction.test.d.ts.map +1 -0
- package/dist/core/agent-session-compaction.test.js +114 -0
- package/dist/core/agent-session-compaction.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +0 -23
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -101
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/checkpoint-store.d.ts +93 -0
- package/dist/core/checkpoint-store.d.ts.map +1 -0
- package/dist/core/checkpoint-store.js +188 -0
- package/dist/core/checkpoint-store.js.map +1 -0
- package/dist/core/checkpoint-store.test.d.ts +2 -0
- package/dist/core/checkpoint-store.test.d.ts.map +1 -0
- package/dist/core/checkpoint-store.test.js +111 -0
- package/dist/core/checkpoint-store.test.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +4 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +81 -28
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +33 -9
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/compaction/token-estimator.test.js +1 -1
- package/dist/core/continue-replay-inventory.test.d.ts +2 -0
- package/dist/core/continue-replay-inventory.test.d.ts.map +1 -0
- package/dist/core/continue-replay-inventory.test.js +42 -0
- package/dist/core/continue-replay-inventory.test.js.map +1 -0
- package/dist/core/goal-controller.d.ts +4 -0
- package/dist/core/goal-controller.d.ts.map +1 -1
- package/dist/core/goal-controller.js +223 -32
- package/dist/core/goal-controller.js.map +1 -1
- package/dist/core/goal-controller.test.js +387 -22
- package/dist/core/goal-controller.test.js.map +1 -1
- package/dist/core/goal-lifecycle-smoke.test.js +49 -8
- package/dist/core/goal-lifecycle-smoke.test.js.map +1 -1
- package/dist/core/goal-prerequisites.d.ts +23 -0
- package/dist/core/goal-prerequisites.d.ts.map +1 -0
- package/dist/core/goal-prerequisites.js +114 -0
- package/dist/core/goal-prerequisites.js.map +1 -0
- package/dist/core/goal-prerequisites.test.d.ts +2 -0
- package/dist/core/goal-prerequisites.test.d.ts.map +1 -0
- package/dist/core/goal-prerequisites.test.js +118 -0
- package/dist/core/goal-prerequisites.test.js.map +1 -0
- package/dist/core/goal-store.d.ts +12 -1
- package/dist/core/goal-store.d.ts.map +1 -1
- package/dist/core/goal-store.js +146 -40
- package/dist/core/goal-store.js.map +1 -1
- package/dist/core/goal-store.test.js +65 -8
- package/dist/core/goal-store.test.js.map +1 -1
- package/dist/core/goal-verifier.d.ts.map +1 -1
- package/dist/core/goal-verifier.js +4 -1
- package/dist/core/goal-verifier.js.map +1 -1
- package/dist/core/goal-verifier.test.js +43 -0
- package/dist/core/goal-verifier.test.js.map +1 -1
- package/dist/core/goal-worker.d.ts +2 -0
- package/dist/core/goal-worker.d.ts.map +1 -1
- package/dist/core/goal-worker.js +31 -7
- package/dist/core/goal-worker.js.map +1 -1
- package/dist/core/goal-worker.test.js +44 -0
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/ideal-review.d.ts +20 -0
- package/dist/core/ideal-review.d.ts.map +1 -0
- package/dist/core/ideal-review.js +55 -0
- package/dist/core/ideal-review.js.map +1 -0
- package/dist/core/ideal-review.test.d.ts +2 -0
- package/dist/core/ideal-review.test.d.ts.map +1 -0
- package/dist/core/ideal-review.test.js +59 -0
- package/dist/core/ideal-review.test.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/loop-breaker.d.ts +46 -0
- package/dist/core/loop-breaker.d.ts.map +1 -0
- package/dist/core/loop-breaker.js +79 -0
- package/dist/core/loop-breaker.js.map +1 -0
- package/dist/core/loop-breaker.test.d.ts +2 -0
- package/dist/core/loop-breaker.test.d.ts.map +1 -0
- package/dist/core/loop-breaker.test.js +110 -0
- package/dist/core/loop-breaker.test.js.map +1 -0
- package/dist/core/mcp/client.d.ts +20 -0
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +55 -11
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/defaults.d.ts +7 -0
- package/dist/core/mcp/defaults.d.ts.map +1 -1
- package/dist/core/mcp/defaults.js +14 -0
- package/dist/core/mcp/defaults.js.map +1 -1
- package/dist/core/mcp/index.d.ts +6 -1
- package/dist/core/mcp/index.d.ts.map +1 -1
- package/dist/core/mcp/index.js +3 -1
- package/dist/core/mcp/index.js.map +1 -1
- package/dist/core/mcp/parse-add-command.d.ts +25 -0
- package/dist/core/mcp/parse-add-command.d.ts.map +1 -0
- package/dist/core/mcp/parse-add-command.js +220 -0
- package/dist/core/mcp/parse-add-command.js.map +1 -0
- package/dist/core/mcp/parse-add-command.test.d.ts +2 -0
- package/dist/core/mcp/parse-add-command.test.d.ts.map +1 -0
- package/dist/core/mcp/parse-add-command.test.js +75 -0
- package/dist/core/mcp/parse-add-command.test.js.map +1 -0
- package/dist/core/mcp/store.d.ts +80 -0
- package/dist/core/mcp/store.d.ts.map +1 -0
- package/dist/core/mcp/store.js +157 -0
- package/dist/core/mcp/store.js.map +1 -0
- package/dist/core/mcp/store.test.d.ts +2 -0
- package/dist/core/mcp/store.test.d.ts.map +1 -0
- package/dist/core/mcp/store.test.js +101 -0
- package/dist/core/mcp/store.test.js.map +1 -0
- package/dist/core/model-registry.d.ts +2 -2
- package/dist/core/model-registry.js +4 -4
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-registry.test.js +1 -1
- package/dist/core/model-registry.test.js.map +1 -1
- package/dist/core/prompt-commands.d.ts.map +1 -1
- package/dist/core/prompt-commands.js +64 -894
- package/dist/core/prompt-commands.js.map +1 -1
- package/dist/core/prompt-commands.test.js +49 -41
- package/dist/core/prompt-commands.test.js.map +1 -1
- package/dist/core/regrounding.d.ts +23 -0
- package/dist/core/regrounding.d.ts.map +1 -0
- package/dist/core/regrounding.js +21 -0
- package/dist/core/regrounding.js.map +1 -0
- package/dist/core/regrounding.test.d.ts +2 -0
- package/dist/core/regrounding.test.d.ts.map +1 -0
- package/dist/core/regrounding.test.js +38 -0
- package/dist/core/regrounding.test.js.map +1 -0
- package/dist/core/runtime-mode.d.ts +23 -0
- package/dist/core/runtime-mode.d.ts.map +1 -0
- package/dist/core/runtime-mode.js +30 -0
- package/dist/core/runtime-mode.js.map +1 -0
- package/dist/core/session-manager.d.ts +4 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +20 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-restore-display.test.d.ts +2 -0
- package/dist/core/session-restore-display.test.d.ts.map +1 -0
- package/dist/core/session-restore-display.test.js +78 -0
- package/dist/core/session-restore-display.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +4 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +3 -6
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts +0 -2
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +10 -15
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/style-packs/index.js +1 -1
- package/dist/core/style-packs/index.js.map +1 -1
- package/dist/core/task-store.d.ts +26 -0
- package/dist/core/task-store.d.ts.map +1 -0
- package/dist/core/task-store.js +147 -0
- package/dist/core/task-store.js.map +1 -0
- package/dist/core/tasks-store.d.ts +24 -0
- package/dist/core/tasks-store.d.ts.map +1 -0
- package/dist/core/tasks-store.js +81 -0
- package/dist/core/tasks-store.js.map +1 -0
- package/dist/core/thinking-level.d.ts +5 -0
- package/dist/core/thinking-level.d.ts.map +1 -0
- package/dist/core/thinking-level.js +59 -0
- package/dist/core/thinking-level.js.map +1 -0
- package/dist/core/thinking-level.test.d.ts +2 -0
- package/dist/core/thinking-level.test.d.ts.map +1 -0
- package/dist/core/thinking-level.test.js +38 -0
- package/dist/core/thinking-level.test.js.map +1 -0
- package/dist/core/verify-commands.js +4 -4
- package/dist/core/verify-commands.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +3 -1
- package/dist/interactive.js.map +1 -1
- package/dist/system-prompt.d.ts +5 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +76 -48
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +98 -46
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/bash.d.ts +6 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +21 -3
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/checkpoint-hook.test.d.ts +2 -0
- package/dist/tools/checkpoint-hook.test.d.ts.map +1 -0
- package/dist/tools/checkpoint-hook.test.js +65 -0
- package/dist/tools/checkpoint-hook.test.js.map +1 -0
- package/dist/tools/edit-diff.d.ts +17 -4
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +78 -16
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +31 -1
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit-robustness.test.d.ts +2 -0
- package/dist/tools/edit-robustness.test.d.ts.map +1 -0
- package/dist/tools/edit-robustness.test.js +415 -0
- package/dist/tools/edit-robustness.test.js.map +1 -0
- package/dist/tools/edit.d.ts +8 -2
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +48 -20
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +23 -22
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/enter-plan.d.ts +1 -3
- package/dist/tools/enter-plan.d.ts.map +1 -1
- package/dist/tools/enter-plan.js +9 -21
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.d.ts.map +1 -1
- package/dist/tools/exit-plan.js +8 -9
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/goal-mode.test.d.ts +2 -0
- package/dist/tools/goal-mode.test.d.ts.map +1 -0
- package/dist/tools/goal-mode.test.js +121 -0
- package/dist/tools/goal-mode.test.js.map +1 -0
- package/dist/tools/goals.d.ts +14 -2
- package/dist/tools/goals.d.ts.map +1 -1
- package/dist/tools/goals.js +257 -26
- package/dist/tools/goals.js.map +1 -1
- package/dist/tools/goals.test.js +365 -1
- package/dist/tools/goals.test.js.map +1 -1
- package/dist/tools/html-extract.d.ts +58 -0
- package/dist/tools/html-extract.d.ts.map +1 -0
- package/dist/tools/html-extract.js +130 -0
- package/dist/tools/html-extract.js.map +1 -0
- package/dist/tools/html-extract.test.d.ts +2 -0
- package/dist/tools/html-extract.test.d.ts.map +1 -0
- package/dist/tools/html-extract.test.js +60 -0
- package/dist/tools/html-extract.test.js.map +1 -0
- package/dist/tools/index.d.ts +15 -12
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +12 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/pdf-extract.d.ts +18 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +43 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/pdf-extract.test.d.ts +2 -0
- package/dist/tools/pdf-extract.test.d.ts.map +1 -0
- package/dist/tools/pdf-extract.test.js +15 -0
- package/dist/tools/pdf-extract.test.js.map +1 -0
- package/dist/tools/plan-mode.test.js +82 -243
- package/dist/tools/plan-mode.test.js.map +1 -1
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +6 -9
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/read-only-bash.d.ts +13 -0
- package/dist/tools/read-only-bash.d.ts.map +1 -0
- package/dist/tools/read-only-bash.js +155 -0
- package/dist/tools/read-only-bash.js.map +1 -0
- package/dist/tools/read-only-bash.test.d.ts +2 -0
- package/dist/tools/read-only-bash.test.d.ts.map +1 -0
- package/dist/tools/read-only-bash.test.js +47 -0
- package/dist/tools/read-only-bash.test.js.map +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +14 -1
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/read.test.js +4 -0
- package/dist/tools/read.test.js.map +1 -1
- package/dist/tools/screenshot.d.ts +25 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +165 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/screenshot.test.d.ts +2 -0
- package/dist/tools/screenshot.test.d.ts.map +1 -0
- package/dist/tools/screenshot.test.js +145 -0
- package/dist/tools/screenshot.test.js.map +1 -0
- package/dist/tools/subagent.d.ts +7 -2
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +31 -9
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +22 -58
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +16 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +357 -45
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +263 -2
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +14 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +321 -35
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +144 -1
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/tools/write.d.ts +8 -2
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +36 -9
- package/dist/tools/write.js.map +1 -1
- package/dist/tools/write.test.js +0 -16
- package/dist/tools/write.test.js.map +1 -1
- package/dist/ui/App.d.ts +52 -280
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +1608 -2235
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/activity-phrases.d.ts.map +1 -1
- package/dist/ui/activity-phrases.js +0 -2
- package/dist/ui/activity-phrases.js.map +1 -1
- package/dist/ui/app-items.d.ts +276 -0
- package/dist/ui/app-items.d.ts.map +1 -0
- package/dist/ui/app-items.js +52 -0
- package/dist/ui/app-items.js.map +1 -0
- package/dist/ui/app-items.test.d.ts +2 -0
- package/dist/ui/app-items.test.d.ts.map +1 -0
- package/dist/ui/app-items.test.js +38 -0
- package/dist/ui/app-items.test.js.map +1 -0
- package/dist/ui/app-state-persistence.test.js +45 -160
- package/dist/ui/app-state-persistence.test.js.map +1 -1
- package/dist/ui/assistant-stream-flush-parity.test.d.ts +2 -0
- package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +1 -0
- package/dist/ui/assistant-stream-flush-parity.test.js +85 -0
- package/dist/ui/assistant-stream-flush-parity.test.js.map +1 -0
- package/dist/ui/chat-layout-pinning.test.d.ts +2 -0
- package/dist/ui/chat-layout-pinning.test.d.ts.map +1 -0
- package/dist/ui/chat-layout-pinning.test.js +525 -0
- package/dist/ui/chat-layout-pinning.test.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +1 -2
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +63 -94
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +3 -5
- package/dist/ui/components/AnimationContext.js.map +1 -1
- package/dist/ui/components/AssistantMessage.d.ts +6 -2
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
- package/dist/ui/components/AssistantMessage.js +9 -4
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/AssistantMessage.test.d.ts +2 -0
- package/dist/ui/components/AssistantMessage.test.d.ts.map +1 -0
- package/dist/ui/components/AssistantMessage.test.js +387 -0
- package/dist/ui/components/AssistantMessage.test.js.map +1 -0
- package/dist/ui/components/BackgroundTasksBar.d.ts +1 -3
- package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.js +8 -10
- package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
- package/dist/ui/components/Banner.d.ts +1 -2
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/Banner.js +9 -4
- package/dist/ui/components/Banner.js.map +1 -1
- package/dist/ui/components/ChatFooterPane.d.ts +25 -0
- package/dist/ui/components/ChatFooterPane.d.ts.map +1 -0
- package/dist/ui/components/ChatFooterPane.js +15 -0
- package/dist/ui/components/ChatFooterPane.js.map +1 -0
- package/dist/ui/components/ChatInputStack.d.ts +36 -0
- package/dist/ui/components/ChatInputStack.d.ts.map +1 -0
- package/dist/ui/components/ChatInputStack.js +10 -0
- package/dist/ui/components/ChatInputStack.js.map +1 -0
- package/dist/ui/components/ChatLayout.d.ts +37 -0
- package/dist/ui/components/ChatLayout.d.ts.map +1 -0
- package/dist/ui/components/ChatLayout.js +21 -0
- package/dist/ui/components/ChatLayout.js.map +1 -0
- package/dist/ui/components/ChatLivePane.d.ts +18 -0
- package/dist/ui/components/ChatLivePane.d.ts.map +1 -0
- package/dist/ui/components/ChatLivePane.js +22 -0
- package/dist/ui/components/ChatLivePane.js.map +1 -0
- package/dist/ui/components/ChatScreen.d.ts +136 -0
- package/dist/ui/components/ChatScreen.d.ts.map +1 -0
- package/dist/ui/components/ChatScreen.js +16 -0
- package/dist/ui/components/ChatScreen.js.map +1 -0
- package/dist/ui/components/ChatStatusRow.d.ts +34 -0
- package/dist/ui/components/ChatStatusRow.d.ts.map +1 -0
- package/dist/ui/components/ChatStatusRow.js +11 -0
- package/dist/ui/components/ChatStatusRow.js.map +1 -0
- package/dist/ui/components/CompactionNotice.d.ts +4 -2
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
- package/dist/ui/components/CompactionNotice.js +4 -4
- package/dist/ui/components/CompactionNotice.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +27 -6
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +75 -30
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/FooterStatusRow.d.ts +20 -0
- package/dist/ui/components/FooterStatusRow.d.ts.map +1 -0
- package/dist/ui/components/FooterStatusRow.js +10 -0
- package/dist/ui/components/FooterStatusRow.js.map +1 -0
- package/dist/ui/components/FullScreenOverlayRouter.d.ts +19 -0
- package/dist/ui/components/FullScreenOverlayRouter.d.ts.map +1 -0
- package/dist/ui/components/FullScreenOverlayRouter.js +18 -0
- package/dist/ui/components/FullScreenOverlayRouter.js.map +1 -0
- package/dist/ui/components/GoalOverlay.d.ts +28 -20
- package/dist/ui/components/GoalOverlay.d.ts.map +1 -1
- package/dist/ui/components/GoalOverlay.js +283 -253
- package/dist/ui/components/GoalOverlay.js.map +1 -1
- package/dist/ui/components/GoalStatusBar.d.ts.map +1 -1
- package/dist/ui/components/GoalStatusBar.js +2 -1
- package/dist/ui/components/GoalStatusBar.js.map +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts +14 -0
- package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
- package/dist/ui/components/IdealHookMessage.js +26 -0
- package/dist/ui/components/IdealHookMessage.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +31 -6
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +208 -50
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/InputArea.test.js +11 -1
- package/dist/ui/components/InputArea.test.js.map +1 -1
- package/dist/ui/components/LiveToolPanel.d.ts +30 -0
- package/dist/ui/components/LiveToolPanel.d.ts.map +1 -0
- package/dist/ui/components/LiveToolPanel.js +66 -0
- package/dist/ui/components/LiveToolPanel.js.map +1 -0
- package/dist/ui/components/Markdown.d.ts +11 -11
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +28 -198
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/ModelSelector.d.ts.map +1 -1
- package/dist/ui/components/ModelSelector.js +18 -18
- package/dist/ui/components/ModelSelector.js.map +1 -1
- package/dist/ui/components/PlanModeLogo.d.ts +3 -0
- package/dist/ui/components/PlanModeLogo.d.ts.map +1 -0
- package/dist/ui/components/PlanModeLogo.js +49 -0
- package/dist/ui/components/PlanModeLogo.js.map +1 -0
- package/dist/ui/components/PlanOverlay.d.ts +7 -0
- package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
- package/dist/ui/components/PlanOverlay.js +17 -3
- package/dist/ui/components/PlanOverlay.js.map +1 -1
- package/dist/ui/components/PlanOverlay.test.d.ts +2 -0
- package/dist/ui/components/PlanOverlay.test.d.ts.map +1 -0
- package/dist/ui/components/PlanOverlay.test.js +24 -0
- package/dist/ui/components/PlanOverlay.test.js.map +1 -0
- package/dist/ui/components/QueueIndicator.d.ts +9 -0
- package/dist/ui/components/QueueIndicator.d.ts.map +1 -0
- package/dist/ui/components/QueueIndicator.js +9 -0
- package/dist/ui/components/QueueIndicator.js.map +1 -0
- package/dist/ui/components/RewindOverlay.d.ts +18 -0
- package/dist/ui/components/RewindOverlay.d.ts.map +1 -0
- package/dist/ui/components/RewindOverlay.js +52 -0
- package/dist/ui/components/RewindOverlay.js.map +1 -0
- package/dist/ui/components/SelectList.d.ts.map +1 -1
- package/dist/ui/components/SelectList.js +5 -0
- package/dist/ui/components/SelectList.js.map +1 -1
- package/dist/ui/components/ServerToolExecution.d.ts +2 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.js +7 -23
- package/dist/ui/components/ServerToolExecution.js.map +1 -1
- package/dist/ui/components/SessionSummary.d.ts +5 -0
- package/dist/ui/components/SessionSummary.d.ts.map +1 -0
- package/dist/ui/components/SessionSummary.js +32 -0
- package/dist/ui/components/SessionSummary.js.map +1 -0
- package/dist/ui/components/SlashCommandMenu.d.ts +4 -3
- package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -1
- package/dist/ui/components/SlashCommandMenu.js +38 -26
- package/dist/ui/components/SlashCommandMenu.js.map +1 -1
- package/dist/ui/components/SlashStyledSelectList.d.ts +21 -0
- package/dist/ui/components/SlashStyledSelectList.d.ts.map +1 -0
- package/dist/ui/components/SlashStyledSelectList.js +71 -0
- package/dist/ui/components/SlashStyledSelectList.js.map +1 -0
- package/dist/ui/components/StreamingArea.d.ts +11 -2
- package/dist/ui/components/StreamingArea.d.ts.map +1 -1
- package/dist/ui/components/StreamingArea.js +20 -23
- package/dist/ui/components/StreamingArea.js.map +1 -1
- package/dist/ui/components/StreamingArea.test.d.ts +2 -0
- package/dist/ui/components/StreamingArea.test.d.ts.map +1 -0
- package/dist/ui/components/StreamingArea.test.js +18 -0
- package/dist/ui/components/StreamingArea.test.js.map +1 -0
- package/dist/ui/components/SubAgentPanel.d.ts +2 -1
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +4 -3
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/components/TaskOverlay.d.ts.map +1 -1
- package/dist/ui/components/TaskOverlay.js +53 -82
- package/dist/ui/components/TaskOverlay.js.map +1 -1
- package/dist/ui/components/TaskPickerMenu.d.ts +9 -0
- package/dist/ui/components/TaskPickerMenu.d.ts.map +1 -0
- package/dist/ui/components/TaskPickerMenu.js +33 -0
- package/dist/ui/components/TaskPickerMenu.js.map +1 -0
- package/dist/ui/components/ThemeSelector.js +2 -2
- package/dist/ui/components/ThemeSelector.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +2 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +18 -52
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts +6 -2
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +15 -147
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/components/ToolUseLoader.d.ts +3 -1
- package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
- package/dist/ui/components/ToolUseLoader.js +2 -2
- package/dist/ui/components/ToolUseLoader.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +34 -0
- package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
- package/dist/ui/components/TranscriptViewport.js +45 -0
- package/dist/ui/components/TranscriptViewport.js.map +1 -0
- package/dist/ui/components/UserMessage.d.ts.map +1 -1
- package/dist/ui/components/UserMessage.js +15 -10
- package/dist/ui/components/UserMessage.js.map +1 -1
- package/dist/ui/components/UserMessage.test.d.ts +2 -0
- package/dist/ui/components/UserMessage.test.d.ts.map +1 -0
- package/dist/ui/components/UserMessage.test.js +39 -0
- package/dist/ui/components/UserMessage.test.js.map +1 -0
- package/dist/ui/components/index.d.ts +5 -0
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +5 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/duration-format.d.ts +2 -0
- package/dist/ui/duration-format.d.ts.map +1 -0
- package/dist/ui/duration-format.js +9 -0
- package/dist/ui/duration-format.js.map +1 -0
- package/dist/ui/duration-summary.d.ts +2 -0
- package/dist/ui/duration-summary.d.ts.map +1 -0
- package/dist/ui/duration-summary.js +66 -0
- package/dist/ui/duration-summary.js.map +1 -0
- package/dist/ui/error-item.d.ts +8 -0
- package/dist/ui/error-item.d.ts.map +1 -0
- package/dist/ui/error-item.js +32 -0
- package/dist/ui/error-item.js.map +1 -0
- package/dist/ui/footer-jump-regression.test.d.ts +2 -0
- package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
- package/dist/ui/footer-jump-regression.test.js +177 -0
- package/dist/ui/footer-jump-regression.test.js.map +1 -0
- package/dist/ui/footer-status-layout.test.js +22 -7
- package/dist/ui/footer-status-layout.test.js.map +1 -1
- package/dist/ui/goal-events.d.ts.map +1 -1
- package/dist/ui/goal-events.js +14 -6
- package/dist/ui/goal-events.js.map +1 -1
- package/dist/ui/goal-events.test.js +40 -2
- package/dist/ui/goal-events.test.js.map +1 -1
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts +2 -0
- package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +1 -0
- package/dist/ui/goal-lifecycle-orchestration.test.js +512 -0
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -0
- package/dist/ui/goal-overlay.test.js +122 -44
- package/dist/ui/goal-overlay.test.js.map +1 -1
- package/dist/ui/goal-status-bar.test.js +29 -0
- package/dist/ui/goal-status-bar.test.js.map +1 -1
- package/dist/ui/goal-summary.d.ts +14 -0
- package/dist/ui/goal-summary.d.ts.map +1 -0
- package/dist/ui/goal-summary.js +194 -0
- package/dist/ui/goal-summary.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.d.ts +25 -4
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +197 -22
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.test.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.test.d.ts.map +1 -0
- package/dist/ui/hooks/useAgentLoop.test.js +8 -0
- package/dist/ui/hooks/useAgentLoop.test.js.map +1 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +45 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.js +97 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -0
- package/dist/ui/hooks/useContextCompaction.d.ts +41 -0
- package/dist/ui/hooks/useContextCompaction.d.ts.map +1 -0
- package/dist/ui/hooks/useContextCompaction.js +149 -0
- package/dist/ui/hooks/useContextCompaction.js.map +1 -0
- package/dist/ui/hooks/useModeState.d.ts +56 -0
- package/dist/ui/hooks/useModeState.d.ts.map +1 -0
- package/dist/ui/hooks/useModeState.js +65 -0
- package/dist/ui/hooks/useModeState.js.map +1 -0
- package/dist/ui/hooks/usePixelFixFlow.d.ts +57 -0
- package/dist/ui/hooks/usePixelFixFlow.d.ts.map +1 -0
- package/dist/ui/hooks/usePixelFixFlow.js +102 -0
- package/dist/ui/hooks/usePixelFixFlow.js.map +1 -0
- package/dist/ui/hooks/useSessionPersistence.d.ts +34 -0
- package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -0
- package/dist/ui/hooks/useSessionPersistence.js +67 -0
- package/dist/ui/hooks/useSessionPersistence.js.map +1 -0
- package/dist/ui/hooks/useTaskPickerController.d.ts +19 -0
- package/dist/ui/hooks/useTaskPickerController.d.ts.map +1 -0
- package/dist/ui/hooks/useTaskPickerController.js +41 -0
- package/dist/ui/hooks/useTaskPickerController.js.map +1 -0
- package/dist/ui/hooks/useTerminalSize.d.ts +13 -10
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +21 -16
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts +48 -0
- package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.js +113 -0
- package/dist/ui/hooks/useTranscriptHistory.js.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.js +44 -0
- package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
- package/dist/ui/item-helpers.d.ts +26 -0
- package/dist/ui/item-helpers.d.ts.map +1 -0
- package/dist/ui/item-helpers.js +114 -0
- package/dist/ui/item-helpers.js.map +1 -0
- package/dist/ui/layout-decisions.d.ts +81 -0
- package/dist/ui/layout-decisions.d.ts.map +1 -0
- package/dist/ui/layout-decisions.js +89 -0
- package/dist/ui/layout-decisions.js.map +1 -0
- package/dist/ui/live-area-clamp.test.d.ts +2 -0
- package/dist/ui/live-area-clamp.test.d.ts.map +1 -0
- package/dist/ui/live-area-clamp.test.js +88 -0
- package/dist/ui/live-area-clamp.test.js.map +1 -0
- package/dist/ui/live-area-height.d.ts +35 -0
- package/dist/ui/live-area-height.d.ts.map +1 -0
- package/dist/ui/live-area-height.js +80 -0
- package/dist/ui/live-area-height.js.map +1 -0
- package/dist/ui/live-area-height.test.d.ts +2 -0
- package/dist/ui/live-area-height.test.d.ts.map +1 -0
- package/dist/ui/live-area-height.test.js +67 -0
- package/dist/ui/live-area-height.test.js.map +1 -0
- package/dist/ui/live-frame-height.test.d.ts +2 -0
- package/dist/ui/live-frame-height.test.d.ts.map +1 -0
- package/dist/ui/live-frame-height.test.js +116 -0
- package/dist/ui/live-frame-height.test.js.map +1 -0
- package/dist/ui/live-item-flush.d.ts +2 -2
- package/dist/ui/live-item-flush.d.ts.map +1 -1
- package/dist/ui/live-item-flush.js +8 -4
- package/dist/ui/live-item-flush.js.map +1 -1
- package/dist/ui/login.js +1 -1
- package/dist/ui/long-prompt-regression-harness.test.d.ts +2 -0
- package/dist/ui/long-prompt-regression-harness.test.d.ts.map +1 -0
- package/dist/ui/long-prompt-regression-harness.test.js +195 -0
- package/dist/ui/long-prompt-regression-harness.test.js.map +1 -0
- package/dist/ui/mcp.d.ts +62 -0
- package/dist/ui/mcp.d.ts.map +1 -0
- package/dist/ui/mcp.js +306 -0
- package/dist/ui/mcp.js.map +1 -0
- package/dist/ui/plan-overlay.test.js +7 -29
- package/dist/ui/plan-overlay.test.js.map +1 -1
- package/dist/ui/prompt-routing.d.ts +11 -0
- package/dist/ui/prompt-routing.d.ts.map +1 -0
- package/dist/ui/prompt-routing.js +61 -0
- package/dist/ui/prompt-routing.js.map +1 -0
- package/dist/ui/queued-message.test.d.ts +2 -0
- package/dist/ui/queued-message.test.d.ts.map +1 -0
- package/dist/ui/queued-message.test.js +162 -0
- package/dist/ui/queued-message.test.js.map +1 -0
- package/dist/ui/render.d.ts +38 -42
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +128 -42
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/render.test.d.ts +2 -0
- package/dist/ui/render.test.d.ts.map +1 -0
- package/dist/ui/render.test.js +16 -0
- package/dist/ui/render.test.js.map +1 -0
- package/dist/ui/scroll-stabilization.test.js +1 -7
- package/dist/ui/scroll-stabilization.test.js.map +1 -1
- package/dist/ui/session-summary.d.ts +63 -0
- package/dist/ui/session-summary.d.ts.map +1 -0
- package/dist/ui/session-summary.js +81 -0
- package/dist/ui/session-summary.js.map +1 -0
- package/dist/ui/slash-command-images.test.js +12 -11
- package/dist/ui/slash-command-images.test.js.map +1 -1
- package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
- package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
- package/dist/ui/streaming-flush-bounce.test.d.ts +2 -0
- package/dist/ui/streaming-flush-bounce.test.d.ts.map +1 -0
- package/dist/ui/streaming-flush-bounce.test.js +156 -0
- package/dist/ui/streaming-flush-bounce.test.js.map +1 -0
- package/dist/ui/submit-prompt-command.d.ts +49 -0
- package/dist/ui/submit-prompt-command.d.ts.map +1 -0
- package/dist/ui/submit-prompt-command.js +107 -0
- package/dist/ui/submit-prompt-command.js.map +1 -0
- package/dist/ui/submit-slash-commands.d.ts +12 -0
- package/dist/ui/submit-slash-commands.d.ts.map +1 -0
- package/dist/ui/submit-slash-commands.js +32 -0
- package/dist/ui/submit-slash-commands.js.map +1 -0
- package/dist/ui/terminal-history-format.d.ts +43 -0
- package/dist/ui/terminal-history-format.d.ts.map +1 -0
- package/dist/ui/terminal-history-format.js +133 -0
- package/dist/ui/terminal-history-format.js.map +1 -0
- package/dist/ui/terminal-history-retry-dedup.test.d.ts +2 -0
- package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +1 -0
- package/dist/ui/terminal-history-retry-dedup.test.js +61 -0
- package/dist/ui/terminal-history-retry-dedup.test.js.map +1 -0
- package/dist/ui/terminal-history-spacing.d.ts +2 -0
- package/dist/ui/terminal-history-spacing.d.ts.map +1 -0
- package/dist/ui/terminal-history-spacing.js +2 -0
- package/dist/ui/terminal-history-spacing.js.map +1 -0
- package/dist/ui/terminal-history-status-renderers.d.ts +15 -0
- package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -0
- package/dist/ui/terminal-history-status-renderers.js +99 -0
- package/dist/ui/terminal-history-status-renderers.js.map +1 -0
- package/dist/ui/terminal-history.d.ts +26 -0
- package/dist/ui/terminal-history.d.ts.map +1 -0
- package/dist/ui/terminal-history.js +916 -0
- package/dist/ui/terminal-history.js.map +1 -0
- package/dist/ui/terminal-history.test.d.ts +2 -0
- package/dist/ui/terminal-history.test.d.ts.map +1 -0
- package/dist/ui/terminal-history.test.js +550 -0
- package/dist/ui/terminal-history.test.js.map +1 -0
- package/dist/ui/testing/screen-recorder.d.ts +29 -0
- package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
- package/dist/ui/testing/screen-recorder.js +179 -0
- package/dist/ui/testing/screen-recorder.js.map +1 -0
- package/dist/ui/thinking-level-cycle.test.d.ts +2 -0
- package/dist/ui/thinking-level-cycle.test.d.ts.map +1 -0
- package/dist/ui/thinking-level-cycle.test.js +45 -0
- package/dist/ui/thinking-level-cycle.test.js.map +1 -0
- package/dist/ui/thinking-level.d.ts +2 -0
- package/dist/ui/thinking-level.d.ts.map +1 -0
- package/dist/ui/thinking-level.js +2 -0
- package/dist/ui/thinking-level.js.map +1 -0
- package/dist/ui/tool-group-summary.d.ts +24 -0
- package/dist/ui/tool-group-summary.d.ts.map +1 -0
- package/dist/ui/tool-group-summary.js +233 -0
- package/dist/ui/tool-group-summary.js.map +1 -0
- package/dist/ui/tool-group-summary.test.d.ts +2 -0
- package/dist/ui/tool-group-summary.test.d.ts.map +1 -0
- package/dist/ui/tool-group-summary.test.js +79 -0
- package/dist/ui/tool-group-summary.test.js.map +1 -0
- package/dist/ui/tool-line-summary.d.ts +29 -0
- package/dist/ui/tool-line-summary.d.ts.map +1 -0
- package/dist/ui/tool-line-summary.js +153 -0
- package/dist/ui/tool-line-summary.js.map +1 -0
- package/dist/ui/transcript/MiscRows.d.ts +26 -0
- package/dist/ui/transcript/MiscRows.d.ts.map +1 -0
- package/dist/ui/transcript/MiscRows.js +68 -0
- package/dist/ui/transcript/MiscRows.js.map +1 -0
- package/dist/ui/transcript/StatusRow.d.ts +14 -0
- package/dist/ui/transcript/StatusRow.d.ts.map +1 -0
- package/dist/ui/transcript/StatusRow.js +14 -0
- package/dist/ui/transcript/StatusRow.js.map +1 -0
- package/dist/ui/transcript/ToolRows.d.ts +20 -0
- package/dist/ui/transcript/ToolRows.d.ts.map +1 -0
- package/dist/ui/transcript/ToolRows.js +25 -0
- package/dist/ui/transcript/ToolRows.js.map +1 -0
- package/dist/ui/transcript/TranscriptItemFrame.d.ts +8 -0
- package/dist/ui/transcript/TranscriptItemFrame.d.ts.map +1 -0
- package/dist/ui/transcript/TranscriptItemFrame.js +9 -0
- package/dist/ui/transcript/TranscriptItemFrame.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts +22 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.js +111 -0
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -0
- package/dist/ui/transcript/presentation.d.ts +61 -0
- package/dist/ui/transcript/presentation.d.ts.map +1 -0
- package/dist/ui/transcript/presentation.js +86 -0
- package/dist/ui/transcript/presentation.js.map +1 -0
- package/dist/ui/transcript/spacing.d.ts +56 -0
- package/dist/ui/transcript/spacing.d.ts.map +1 -0
- package/dist/ui/transcript/spacing.js +129 -0
- package/dist/ui/transcript/spacing.js.map +1 -0
- package/dist/ui/transcript/spacing.test.d.ts +2 -0
- package/dist/ui/transcript/spacing.test.d.ts.map +1 -0
- package/dist/ui/transcript/spacing.test.js +193 -0
- package/dist/ui/transcript/spacing.test.js.map +1 -0
- package/dist/ui/transcript/tool-presentation.d.ts +12 -0
- package/dist/ui/transcript/tool-presentation.d.ts.map +1 -0
- package/dist/ui/transcript/tool-presentation.js +55 -0
- package/dist/ui/transcript/tool-presentation.js.map +1 -0
- package/dist/ui/transcript/transcript-lines.d.ts +32 -0
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.js +86 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.js +76 -0
- package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.js +148 -0
- package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
- package/dist/ui/tui-history-parity.test.d.ts +2 -0
- package/dist/ui/tui-history-parity.test.d.ts.map +1 -0
- package/dist/ui/tui-history-parity.test.js +381 -0
- package/dist/ui/tui-history-parity.test.js.map +1 -0
- package/dist/ui/tui-simulation.test.d.ts +2 -0
- package/dist/ui/tui-simulation.test.d.ts.map +1 -0
- package/dist/ui/tui-simulation.test.js +139 -0
- package/dist/ui/tui-simulation.test.js.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.js +134 -0
- package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
- package/dist/ui/utils/assistant-stream-split.d.ts +23 -0
- package/dist/ui/utils/assistant-stream-split.d.ts.map +1 -0
- package/dist/ui/utils/assistant-stream-split.js +41 -0
- package/dist/ui/utils/assistant-stream-split.js.map +1 -0
- package/dist/ui/utils/assistant-stream-split.test.d.ts +2 -0
- package/dist/ui/utils/assistant-stream-split.test.d.ts.map +1 -0
- package/dist/ui/utils/assistant-stream-split.test.js +40 -0
- package/dist/ui/utils/assistant-stream-split.test.js.map +1 -0
- package/dist/ui/utils/latex-to-unicode.d.ts +22 -0
- package/dist/ui/utils/latex-to-unicode.d.ts.map +1 -0
- package/dist/ui/utils/latex-to-unicode.js +538 -0
- package/dist/ui/utils/latex-to-unicode.js.map +1 -0
- package/dist/ui/utils/markdown-renderer.d.ts +20 -0
- package/dist/ui/utils/markdown-renderer.d.ts.map +1 -0
- package/dist/ui/utils/markdown-renderer.js +327 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/ui/utils/markdown-table.d.ts +9 -0
- package/dist/ui/utils/markdown-table.d.ts.map +1 -0
- package/dist/ui/utils/markdown-table.js +95 -0
- package/dist/ui/utils/markdown-table.js.map +1 -0
- package/dist/ui/utils/terminal-graphics.d.ts +16 -0
- package/dist/ui/utils/terminal-graphics.d.ts.map +1 -0
- package/dist/ui/utils/terminal-graphics.js +68 -0
- package/dist/ui/utils/terminal-graphics.js.map +1 -0
- package/dist/ui/utils/terminal-graphics.test.d.ts +2 -0
- package/dist/ui/utils/terminal-graphics.test.d.ts.map +1 -0
- package/dist/ui/utils/terminal-graphics.test.js +61 -0
- package/dist/ui/utils/terminal-graphics.test.js.map +1 -0
- package/dist/ui/utils/terminal-input.d.ts +3 -0
- package/dist/ui/utils/terminal-input.d.ts.map +1 -0
- package/dist/ui/utils/terminal-input.js +28 -0
- package/dist/ui/utils/terminal-input.js.map +1 -0
- package/dist/ui/utils/terminal-input.test.d.ts +2 -0
- package/dist/ui/utils/terminal-input.test.d.ts.map +1 -0
- package/dist/ui/utils/terminal-input.test.js +15 -0
- package/dist/ui/utils/terminal-input.test.js.map +1 -0
- package/dist/ui/utils/text-utils.d.ts +8 -0
- package/dist/ui/utils/text-utils.d.ts.map +1 -0
- package/dist/ui/utils/text-utils.js +16 -0
- package/dist/ui/utils/text-utils.js.map +1 -0
- package/dist/ui/utils/token-to-ansi.js +19 -9
- package/dist/ui/utils/token-to-ansi.js.map +1 -1
- package/dist/ui/utils/user-message-display.d.ts +7 -0
- package/dist/ui/utils/user-message-display.d.ts.map +1 -0
- package/dist/ui/utils/user-message-display.js +26 -0
- package/dist/ui/utils/user-message-display.js.map +1 -0
- package/dist/utils/format.js +7 -9
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/image.d.ts +9 -0
- package/dist/utils/image.d.ts.map +1 -1
- package/dist/utils/image.js +25 -0
- package/dist/utils/image.js.map +1 -1
- package/dist/utils/plan-steps.d.ts.map +1 -1
- package/dist/utils/plan-steps.js +5 -1
- package/dist/utils/plan-steps.js.map +1 -1
- package/dist/utils/plan-steps.test.d.ts +2 -0
- package/dist/utils/plan-steps.test.d.ts.map +1 -0
- package/dist/utils/plan-steps.test.js +16 -0
- package/dist/utils/plan-steps.test.js.map +1 -0
- package/package.json +50 -10
- package/dist/core/repomap-context.d.ts +0 -11
- package/dist/core/repomap-context.d.ts.map +0 -1
- package/dist/core/repomap-context.js +0 -68
- package/dist/core/repomap-context.js.map +0 -1
- package/dist/core/repomap-context.test.d.ts +0 -2
- package/dist/core/repomap-context.test.d.ts.map +0 -1
- package/dist/core/repomap-context.test.js +0 -47
- package/dist/core/repomap-context.test.js.map +0 -1
- package/dist/core/repomap.d.ts +0 -74
- package/dist/core/repomap.d.ts.map +0 -1
- package/dist/core/repomap.js +0 -906
- package/dist/core/repomap.js.map +0 -1
- package/dist/core/repomap.test.d.ts +0 -2
- package/dist/core/repomap.test.d.ts.map +0 -1
- package/dist/core/repomap.test.js +0 -494
- package/dist/core/repomap.test.js.map +0 -1
- package/dist/ui/components/EyesOverlay.d.ts +0 -10
- package/dist/ui/components/EyesOverlay.d.ts.map +0 -1
- package/dist/ui/components/EyesOverlay.js +0 -220
- package/dist/ui/components/EyesOverlay.js.map +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type MutableRefObject } from "react";
|
|
2
|
+
import type { Message, Provider } from "@prestyj/ai";
|
|
3
|
+
import type { SessionManager } from "../../core/session-manager.js";
|
|
4
|
+
import type { SessionStats } from "../session-summary.js";
|
|
5
|
+
/** Minimal session-store surface the persistence layer mirrors into. */
|
|
6
|
+
interface PersistenceSessionStore {
|
|
7
|
+
messages: Message[];
|
|
8
|
+
sessionPath?: string;
|
|
9
|
+
sessionId?: string;
|
|
10
|
+
}
|
|
11
|
+
interface UseSessionPersistenceOptions {
|
|
12
|
+
sessionManagerRef: MutableRefObject<SessionManager | null>;
|
|
13
|
+
sessionPathRef: MutableRefObject<string | undefined>;
|
|
14
|
+
sessionStatsRef: MutableRefObject<SessionStats>;
|
|
15
|
+
persistedIndexRef: MutableRefObject<number>;
|
|
16
|
+
messagesRef: MutableRefObject<Message[]>;
|
|
17
|
+
cwdRef: MutableRefObject<string>;
|
|
18
|
+
currentProvider: Provider;
|
|
19
|
+
currentModel: string;
|
|
20
|
+
sessionStore?: PersistenceSessionStore;
|
|
21
|
+
}
|
|
22
|
+
export interface SessionPersistence {
|
|
23
|
+
appendMessagesToSession: (sessionPath: string, messages: readonly Message[], startIndex: number) => Promise<void>;
|
|
24
|
+
persistCompactedSession: (compactedMessages: readonly Message[]) => Promise<void>;
|
|
25
|
+
persistNewMessages: () => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Owns session message persistence: appending new turn messages, persisting a
|
|
29
|
+
* compacted checkpoint, and keeping `persistedIndexRef`/`sessionStatsRef`/the
|
|
30
|
+
* session store in sync. Extracted verbatim from `App.tsx`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function useSessionPersistence({ sessionManagerRef, sessionPathRef, sessionStatsRef, persistedIndexRef, messagesRef, cwdRef, currentProvider, currentModel, sessionStore, }: UseSessionPersistenceOptions): SessionPersistence;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=useSessionPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionPersistence.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useSessionPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,wEAAwE;AACxE,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,4BAA4B;IACpC,iBAAiB,EAAE,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3D,cAAc,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrD,eAAe,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChD,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,QAAQ,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,uBAAuB,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,uBAAuB,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,uBAAuB,EAAE,CAAC,iBAAiB,EAAE,SAAS,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,MAAM,EACN,eAAe,EACf,YAAY,EACZ,YAAY,GACb,EAAE,4BAA4B,GAAG,kBAAkB,CA+DnD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { appendMessagesToSession as appendSessionMessages, createCompactedSessionCheckpoint, } from "../../core/session-compaction.js";
|
|
3
|
+
import { log } from "../../core/logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Owns session message persistence: appending new turn messages, persisting a
|
|
6
|
+
* compacted checkpoint, and keeping `persistedIndexRef`/`sessionStatsRef`/the
|
|
7
|
+
* session store in sync. Extracted verbatim from `App.tsx`.
|
|
8
|
+
*/
|
|
9
|
+
export function useSessionPersistence({ sessionManagerRef, sessionPathRef, sessionStatsRef, persistedIndexRef, messagesRef, cwdRef, currentProvider, currentModel, sessionStore, }) {
|
|
10
|
+
const appendMessagesToSession = useCallback(async (sessionPath, messages, startIndex) => {
|
|
11
|
+
const sm = sessionManagerRef.current;
|
|
12
|
+
if (!sm)
|
|
13
|
+
return;
|
|
14
|
+
await appendSessionMessages(sm, sessionPath, messages, startIndex);
|
|
15
|
+
}, [sessionManagerRef]);
|
|
16
|
+
const persistCompactedSession = useCallback(async (compactedMessages) => {
|
|
17
|
+
const sm = sessionManagerRef.current;
|
|
18
|
+
if (!sm)
|
|
19
|
+
return;
|
|
20
|
+
const session = await createCompactedSessionCheckpoint(sm, {
|
|
21
|
+
cwd: cwdRef.current,
|
|
22
|
+
provider: currentProvider,
|
|
23
|
+
model: currentModel,
|
|
24
|
+
messages: compactedMessages,
|
|
25
|
+
});
|
|
26
|
+
sessionPathRef.current = session.path;
|
|
27
|
+
sessionStatsRef.current.sessionId = session.id;
|
|
28
|
+
persistedIndexRef.current = compactedMessages.length;
|
|
29
|
+
if (sessionStore) {
|
|
30
|
+
sessionStore.sessionPath = session.path;
|
|
31
|
+
sessionStore.sessionId = session.id;
|
|
32
|
+
sessionStore.messages = [...compactedMessages];
|
|
33
|
+
}
|
|
34
|
+
log("INFO", "compaction", "Persisted compacted session checkpoint", { path: session.path });
|
|
35
|
+
}, [
|
|
36
|
+
currentModel,
|
|
37
|
+
currentProvider,
|
|
38
|
+
sessionStore,
|
|
39
|
+
sessionManagerRef,
|
|
40
|
+
sessionPathRef,
|
|
41
|
+
sessionStatsRef,
|
|
42
|
+
persistedIndexRef,
|
|
43
|
+
cwdRef,
|
|
44
|
+
]);
|
|
45
|
+
const persistNewMessages = useCallback(async () => {
|
|
46
|
+
const sp = sessionPathRef.current;
|
|
47
|
+
if (!sp)
|
|
48
|
+
return;
|
|
49
|
+
const allMsgs = messagesRef.current;
|
|
50
|
+
await appendMessagesToSession(sp, allMsgs, persistedIndexRef.current);
|
|
51
|
+
persistedIndexRef.current = allMsgs.length;
|
|
52
|
+
if (sessionStore) {
|
|
53
|
+
sessionStore.messages = [...allMsgs];
|
|
54
|
+
sessionStore.sessionPath = sp;
|
|
55
|
+
sessionStore.sessionId = sessionStatsRef.current.sessionId;
|
|
56
|
+
}
|
|
57
|
+
}, [
|
|
58
|
+
appendMessagesToSession,
|
|
59
|
+
sessionStore,
|
|
60
|
+
sessionPathRef,
|
|
61
|
+
messagesRef,
|
|
62
|
+
persistedIndexRef,
|
|
63
|
+
sessionStatsRef,
|
|
64
|
+
]);
|
|
65
|
+
return { appendMessagesToSession, persistCompactedSession, persistNewMessages };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=useSessionPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionPersistence.js","sourceRoot":"","sources":["../../../src/ui/hooks/useSessionPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type TaskListItem } from "../../core/task-store.js";
|
|
2
|
+
interface UseTaskPickerControllerOptions {
|
|
3
|
+
displayedCwd: string;
|
|
4
|
+
onStartTask: (title: string, prompt: string, taskId: string) => void;
|
|
5
|
+
onRunAllTasksChange: (runAll: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
interface TaskPickerController {
|
|
8
|
+
open: boolean;
|
|
9
|
+
tasks: TaskListItem[];
|
|
10
|
+
close: () => void;
|
|
11
|
+
openPicker: () => void;
|
|
12
|
+
toggle: () => void;
|
|
13
|
+
start: (task: TaskListItem) => void;
|
|
14
|
+
runAll: (task?: TaskListItem) => void;
|
|
15
|
+
deleteTask: (task: TaskListItem) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function useTaskPickerController({ displayedCwd, onStartTask, onRunAllTasksChange, }: UseTaskPickerControllerOptions): TaskPickerController;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=useTaskPickerController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTaskPickerController.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTaskPickerController.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,0BAA0B,CAAC;AAElC,UAAU,8BAA8B;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,WAAW,EACX,mBAAmB,GACpB,EAAE,8BAA8B,GAAG,oBAAoB,CAoDvD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useCallback, useState } from "react";
|
|
2
|
+
import { getNextPendingTask, loadTasksSync, markTaskInProgress, saveTasksSync, } from "../../core/task-store.js";
|
|
3
|
+
export function useTaskPickerController({ displayedCwd, onStartTask, onRunAllTasksChange, }) {
|
|
4
|
+
const [open, setOpen] = useState(false);
|
|
5
|
+
const [tasks, setTasks] = useState(() => loadTasksSync(displayedCwd));
|
|
6
|
+
const refresh = useCallback(() => setTasks(loadTasksSync(displayedCwd)), [displayedCwd]);
|
|
7
|
+
const close = useCallback(() => setOpen(false), []);
|
|
8
|
+
const openPicker = useCallback(() => {
|
|
9
|
+
setTasks(loadTasksSync(displayedCwd));
|
|
10
|
+
setOpen(true);
|
|
11
|
+
}, [displayedCwd]);
|
|
12
|
+
const toggle = useCallback(() => {
|
|
13
|
+
setTasks(loadTasksSync(displayedCwd));
|
|
14
|
+
setOpen((current) => !current);
|
|
15
|
+
}, [displayedCwd]);
|
|
16
|
+
const start = useCallback((task) => {
|
|
17
|
+
setOpen(false);
|
|
18
|
+
markTaskInProgress(displayedCwd, task.id);
|
|
19
|
+
refresh();
|
|
20
|
+
onStartTask(task.title, task.prompt, task.id);
|
|
21
|
+
}, [displayedCwd, onStartTask, refresh]);
|
|
22
|
+
const runAll = useCallback((task) => {
|
|
23
|
+
setOpen(false);
|
|
24
|
+
onRunAllTasksChange(true);
|
|
25
|
+
const selected = task
|
|
26
|
+
? { id: task.id, title: task.title, prompt: task.prompt || task.text || task.title }
|
|
27
|
+
: getNextPendingTask(displayedCwd);
|
|
28
|
+
if (!selected)
|
|
29
|
+
return;
|
|
30
|
+
markTaskInProgress(displayedCwd, selected.id);
|
|
31
|
+
refresh();
|
|
32
|
+
onStartTask(selected.title, selected.prompt, selected.id);
|
|
33
|
+
}, [displayedCwd, onRunAllTasksChange, onStartTask, refresh]);
|
|
34
|
+
const deleteTask = useCallback((task) => {
|
|
35
|
+
const nextTasks = loadTasksSync(displayedCwd).filter((candidate) => candidate.id !== task.id);
|
|
36
|
+
saveTasksSync(displayedCwd, nextTasks);
|
|
37
|
+
setTasks(nextTasks);
|
|
38
|
+
}, [displayedCwd]);
|
|
39
|
+
return { open, tasks, close, openPicker, toggle, start, runAll, deleteTask };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=useTaskPickerController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTaskPickerController.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTaskPickerController.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,17 +12,21 @@ interface TerminalSizeValue {
|
|
|
12
12
|
* or App.tsx) to avoid the MaxListenersExceededWarning that occurs when
|
|
13
13
|
* every component independently listens for resize events.
|
|
14
14
|
*/
|
|
15
|
-
export declare function TerminalSizeProvider({ children, isAgentRunning, }: React.PropsWithChildren<{
|
|
15
|
+
export declare function TerminalSizeProvider({ children, isAgentRunning, fullscreen, }: React.PropsWithChildren<{
|
|
16
16
|
/**
|
|
17
17
|
* Optional getter — when it returns true, the resize debounce skips its
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* and produces duplicate/missing items. During an agent run, the deferred
|
|
22
|
-
* resetUI() in App.tsx cleans up reflow drift the moment the agent goes
|
|
23
|
-
* idle, so the visual cost of skipping here is minimal.
|
|
18
|
+
* resizeKey bump while the agent is running. The deferred resetUI() in
|
|
19
|
+
* App.tsx cleans up reflow drift the moment the agent goes idle, so the
|
|
20
|
+
* visual cost of skipping here is minimal.
|
|
24
21
|
*/
|
|
25
22
|
isAgentRunning?: () => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Fullscreen alt-screen mode. Ink owns the whole screen and repaints the
|
|
25
|
+
* full-height frame in place, so on resize we only re-measure dimensions —
|
|
26
|
+
* no manual screen clear (which would flash) and no resizeKey bump (the
|
|
27
|
+
* full-height layout reflows on the dimension change alone).
|
|
28
|
+
*/
|
|
29
|
+
fullscreen?: boolean;
|
|
26
30
|
}>): React.FunctionComponentElement<React.ProviderProps<TerminalSizeValue | null>>;
|
|
27
31
|
/**
|
|
28
32
|
* Returns { columns, rows, resizeKey } from the nearest TerminalSizeProvider.
|
|
@@ -32,9 +36,8 @@ export declare function TerminalSizeProvider({ children, isAgentRunning, }: Reac
|
|
|
32
36
|
* trigger React re-renders on every resize event while Ink's internal
|
|
33
37
|
* line-tracking still assumes the old width, causing ghost/duplicate renders.
|
|
34
38
|
*
|
|
35
|
-
* `resizeKey` can be used as a React `key` to force
|
|
36
|
-
*
|
|
37
|
-
* already printed to scrollback and got corrupted by terminal text reflow.
|
|
39
|
+
* `resizeKey` can be used as a React `key` to force live-area remounts after
|
|
40
|
+
* terminal dimensions settle.
|
|
38
41
|
*/
|
|
39
42
|
export declare function useTerminalSize(): TerminalSizeValue;
|
|
40
43
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAGnG,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,cAAc,
|
|
1
|
+
{"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAGnG,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,cAAc,EACd,UAAkB,GACnB,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC,iFAmED;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,sBAM9B"}
|
|
@@ -15,7 +15,7 @@ const TerminalSizeContext = createContext(null);
|
|
|
15
15
|
* or App.tsx) to avoid the MaxListenersExceededWarning that occurs when
|
|
16
16
|
* every component independently listens for resize events.
|
|
17
17
|
*/
|
|
18
|
-
export function TerminalSizeProvider({ children, isAgentRunning, }) {
|
|
18
|
+
export function TerminalSizeProvider({ children, isAgentRunning, fullscreen = false, }) {
|
|
19
19
|
const { stdout } = useStdout();
|
|
20
20
|
const [size, setSize] = useState({
|
|
21
21
|
columns: Math.max(MIN_COLUMNS, stdout?.columns ?? 80),
|
|
@@ -39,30 +39,36 @@ export function TerminalSizeProvider({ children, isAgentRunning, }) {
|
|
|
39
39
|
debounceRef.current = setTimeout(() => {
|
|
40
40
|
const running = isAgentRunningRef.current?.() ?? false;
|
|
41
41
|
if (running) {
|
|
42
|
-
// Update dimensions only — skip the
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
// render.ts flags pendingResetUI; App.tsx fires a clean resetUI()
|
|
46
|
-
// the moment the agent goes idle, fixing any reflow drift then.
|
|
42
|
+
// Update dimensions only — skip the resizeKey bump. render.ts flags
|
|
43
|
+
// pendingResetUI; App.tsx fires a clean resetUI() the moment the agent
|
|
44
|
+
// goes idle, fixing any reflow drift then.
|
|
47
45
|
setSize({
|
|
48
46
|
columns: Math.max(MIN_COLUMNS, stdout.columns ?? 80),
|
|
49
47
|
rows: Math.max(MIN_ROWS, stdout.rows ?? 24),
|
|
50
48
|
});
|
|
51
49
|
return;
|
|
52
50
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
if (fullscreen) {
|
|
52
|
+
// Alt screen: re-measure only. The full-height frame reflows to the new
|
|
53
|
+
// dimensions on this state change; Ink repaints it in place with no
|
|
54
|
+
// native scrollback to disturb, so there's nothing to clear.
|
|
55
|
+
setSize({
|
|
56
|
+
columns: Math.max(MIN_COLUMNS, stdout.columns ?? 80),
|
|
57
|
+
rows: Math.max(MIN_ROWS, stdout.rows ?? 24),
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
// Clear visible screen only. Completed chat rows are real terminal
|
|
62
|
+
// scrollback now; preserve them while dropping malformed live frames left
|
|
63
|
+
// behind by resize reflow.
|
|
64
|
+
stdout.write("\x1b[2J\x1b[H");
|
|
59
65
|
setSize({
|
|
60
66
|
columns: Math.max(MIN_COLUMNS, stdout.columns ?? 80),
|
|
61
67
|
rows: Math.max(MIN_ROWS, stdout.rows ?? 24),
|
|
62
68
|
});
|
|
63
69
|
setResizeKey((k) => k + 1);
|
|
64
70
|
}, 300);
|
|
65
|
-
}, [stdout]);
|
|
71
|
+
}, [stdout, fullscreen]);
|
|
66
72
|
useEffect(() => {
|
|
67
73
|
if (!stdout)
|
|
68
74
|
return;
|
|
@@ -84,9 +90,8 @@ export function TerminalSizeProvider({ children, isAgentRunning, }) {
|
|
|
84
90
|
* trigger React re-renders on every resize event while Ink's internal
|
|
85
91
|
* line-tracking still assumes the old width, causing ghost/duplicate renders.
|
|
86
92
|
*
|
|
87
|
-
* `resizeKey` can be used as a React `key` to force
|
|
88
|
-
*
|
|
89
|
-
* already printed to scrollback and got corrupted by terminal text reflow.
|
|
93
|
+
* `resizeKey` can be used as a React `key` to force live-area remounts after
|
|
94
|
+
* terminal dimensions settle.
|
|
90
95
|
*/
|
|
91
96
|
export function useTerminalSize() {
|
|
92
97
|
const ctx = useContext(TerminalSizeContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAQhC,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,uCAAuC;AACvC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,mBAAmB,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,QAAQ,EACR,cAAc,
|
|
1
|
+
{"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAQhC,2EAA2E;AAC3E,0EAA0E;AAC1E,2EAA2E;AAC3E,uCAAuC;AACvC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,MAAM,mBAAmB,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,QAAQ,EACR,cAAc,EACd,UAAU,GAAG,KAAK,GAgBlB;IACA,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;QACrD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACvE,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,iEAAiE;QACjE,uEAAuE;QACvE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,mDAAmD;QACnD,IAAI,WAAW,CAAC,OAAO;YAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3D,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC;gBACZ,oEAAoE;gBACpE,uEAAuE;gBACvE,2CAA2C;gBAC3C,OAAO,CAAC;oBACN,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;oBACpD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;iBAC5C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,wEAAwE;gBACxE,oEAAoE;gBACpE,6DAA6D;gBAC7D,OAAO,CAAC;oBACN,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;oBACpD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;iBAC5C,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,mEAAmE;YACnE,0EAA0E;YAC1E,2BAA2B;YAC3B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9B,OAAO,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACpD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;aAC5C,CAAC,CAAC;YACH,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/B,IAAI,WAAW,CAAC,OAAO;gBAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/E,OAAO,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type SessionManager } from "../../core/session-manager.js";
|
|
2
|
+
import type { CompletedItem } from "../app-items.js";
|
|
3
|
+
import type { TerminalHistoryContext } from "../terminal-history.js";
|
|
4
|
+
interface TranscriptHistoryItem {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
}
|
|
8
|
+
interface SessionStoreLike<TItem extends TranscriptHistoryItem> {
|
|
9
|
+
history?: TItem[];
|
|
10
|
+
liveItems?: TItem[];
|
|
11
|
+
}
|
|
12
|
+
interface TranscriptHistoryPrinter<TItem extends TranscriptHistoryItem> {
|
|
13
|
+
print(items: readonly TItem[], context: TerminalHistoryContext, options?: {
|
|
14
|
+
force?: boolean;
|
|
15
|
+
write?: (data: string) => void;
|
|
16
|
+
}): void;
|
|
17
|
+
clear(): void;
|
|
18
|
+
}
|
|
19
|
+
interface UseTranscriptHistoryOptions<TItem extends TranscriptHistoryItem> {
|
|
20
|
+
terminalHistoryPrinter?: TranscriptHistoryPrinter<TItem>;
|
|
21
|
+
terminalHistoryContext: TerminalHistoryContext;
|
|
22
|
+
writeStdout: (data: string) => void;
|
|
23
|
+
sessionPathRef: React.RefObject<string | undefined>;
|
|
24
|
+
sessionManagerRef: React.RefObject<SessionManager | null>;
|
|
25
|
+
sessionStore?: SessionStoreLike<TItem>;
|
|
26
|
+
history: readonly TItem[];
|
|
27
|
+
setHistory: React.Dispatch<React.SetStateAction<TItem[]>>;
|
|
28
|
+
setLiveItems: React.Dispatch<React.SetStateAction<TItem[]>>;
|
|
29
|
+
compactHistoryItems?: (items: TItem[]) => TItem[];
|
|
30
|
+
persistDisplayItem?: (item: TItem) => unknown;
|
|
31
|
+
trimFlushItems?: (items: TItem[]) => TItem[];
|
|
32
|
+
}
|
|
33
|
+
export interface UseTranscriptHistoryResult<TItem extends TranscriptHistoryItem> {
|
|
34
|
+
pendingHistoryFlushRef: React.RefObject<TItem[]>;
|
|
35
|
+
streamedAssistantFlushRef: React.RefObject<{
|
|
36
|
+
flushedChars: number;
|
|
37
|
+
text: string;
|
|
38
|
+
}>;
|
|
39
|
+
printHistoryItems: (items: readonly TItem[], options?: {
|
|
40
|
+
force?: boolean;
|
|
41
|
+
}) => void;
|
|
42
|
+
queueFlush: (items: TItem[]) => void;
|
|
43
|
+
finalizeSubmittedUserItem: (item: TItem, deferredLiveItems?: readonly TItem[]) => void;
|
|
44
|
+
clearPendingHistory: () => void;
|
|
45
|
+
}
|
|
46
|
+
export declare function useTranscriptHistory<TItem extends TranscriptHistoryItem = CompletedItem>({ terminalHistoryPrinter, terminalHistoryContext, writeStdout, sessionPathRef, sessionManagerRef, sessionStore, history, setHistory, setLiveItems, compactHistoryItems, persistDisplayItem, trimFlushItems, }: UseTranscriptHistoryOptions<TItem>): UseTranscriptHistoryResult<TItem>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=useTranscriptHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranscriptHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
import { DISPLAY_ITEM_CUSTOM_KIND } from "../../core/session-manager.js";
|
|
3
|
+
import { compactHistory } from "../item-helpers.js";
|
|
4
|
+
import { trimFlushedItems } from "../live-item-flush.js";
|
|
5
|
+
export function useTranscriptHistory({ terminalHistoryPrinter, terminalHistoryContext, writeStdout, sessionPathRef, sessionManagerRef, sessionStore, history, setHistory, setLiveItems, compactHistoryItems = (items) => compactHistory(items), persistDisplayItem, trimFlushItems = (items) => trimFlushedItems(items), }) {
|
|
6
|
+
const terminalHistoryContextRef = useRef(terminalHistoryContext);
|
|
7
|
+
const pendingHistoryFlushRef = useRef([]);
|
|
8
|
+
const drainedHistoryFlushRef = useRef([]);
|
|
9
|
+
const persistedDisplayItemIdsRef = useRef(new Set());
|
|
10
|
+
const streamedAssistantFlushRef = useRef({
|
|
11
|
+
flushedChars: 0,
|
|
12
|
+
text: "",
|
|
13
|
+
});
|
|
14
|
+
const [historyFlushGeneration, setHistoryFlushGeneration] = useState(0);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
terminalHistoryContextRef.current = terminalHistoryContext;
|
|
17
|
+
}, [terminalHistoryContext]);
|
|
18
|
+
const printHistoryItems = useCallback((items, options) => {
|
|
19
|
+
if (!terminalHistoryPrinter || items.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
terminalHistoryPrinter.print(items, terminalHistoryContextRef.current, {
|
|
22
|
+
...options,
|
|
23
|
+
write: writeStdout,
|
|
24
|
+
});
|
|
25
|
+
}, [terminalHistoryPrinter, writeStdout]);
|
|
26
|
+
const queueFlush = useCallback((items) => {
|
|
27
|
+
const flushed = trimFlushItems(items);
|
|
28
|
+
if (flushed.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
pendingHistoryFlushRef.current = [...pendingHistoryFlushRef.current, ...flushed];
|
|
31
|
+
const sessionPath = sessionPathRef.current;
|
|
32
|
+
const sessionManager = sessionManagerRef.current;
|
|
33
|
+
if (sessionPath && sessionManager) {
|
|
34
|
+
for (const item of flushed) {
|
|
35
|
+
if (persistedDisplayItemIdsRef.current.has(item.id))
|
|
36
|
+
continue;
|
|
37
|
+
persistedDisplayItemIdsRef.current.add(item.id);
|
|
38
|
+
void sessionManager.appendEntry(sessionPath, {
|
|
39
|
+
type: "custom",
|
|
40
|
+
kind: DISPLAY_ITEM_CUSTOM_KIND,
|
|
41
|
+
data: { version: 1, item: persistDisplayItem ? persistDisplayItem(item) : item },
|
|
42
|
+
id: `display-${item.id}`,
|
|
43
|
+
parentId: null,
|
|
44
|
+
timestamp: new Date().toISOString(),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (sessionStore) {
|
|
49
|
+
const queuedIds = new Set(items.map((item) => item.id));
|
|
50
|
+
sessionStore.liveItems = (sessionStore.liveItems ?? []).filter((item) => !queuedIds.has(item.id));
|
|
51
|
+
}
|
|
52
|
+
setHistoryFlushGeneration((generation) => generation + 1);
|
|
53
|
+
}, [persistDisplayItem, sessionManagerRef, sessionPathRef, sessionStore, trimFlushItems]);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
printHistoryItems(history);
|
|
56
|
+
}, [history, printHistoryItems]);
|
|
57
|
+
useLayoutEffect(() => {
|
|
58
|
+
const flushed = pendingHistoryFlushRef.current;
|
|
59
|
+
if (flushed.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
// Keep the visible row continuous during finalization: write the completed
|
|
62
|
+
// transcript into terminal history while Ink still knows about the current
|
|
63
|
+
// live frame, then remove those live rows. Doing this in the opposite order
|
|
64
|
+
// collapses the live frame to the controls first, so a large final history
|
|
65
|
+
// write scrolls underneath the footer/input and visibly pushes them upward.
|
|
66
|
+
pendingHistoryFlushRef.current = [];
|
|
67
|
+
drainedHistoryFlushRef.current = flushed;
|
|
68
|
+
printHistoryItems(flushed);
|
|
69
|
+
const flushedIds = new Set(flushed.map((item) => item.id));
|
|
70
|
+
setLiveItems((prev) => prev.filter((item) => !flushedIds.has(item.id)));
|
|
71
|
+
}, [historyFlushGeneration, printHistoryItems, setLiveItems]);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
const flushed = drainedHistoryFlushRef.current;
|
|
74
|
+
if (flushed.length === 0)
|
|
75
|
+
return;
|
|
76
|
+
drainedHistoryFlushRef.current = [];
|
|
77
|
+
setHistory((prev) => {
|
|
78
|
+
const existingIds = new Set(prev.map((item) => item.id));
|
|
79
|
+
const nextItems = flushed.filter((item) => !existingIds.has(item.id));
|
|
80
|
+
if (nextItems.length === 0)
|
|
81
|
+
return prev;
|
|
82
|
+
const next = compactHistoryItems([...prev, ...nextItems]);
|
|
83
|
+
if (sessionStore)
|
|
84
|
+
sessionStore.history = next;
|
|
85
|
+
return next;
|
|
86
|
+
});
|
|
87
|
+
}, [historyFlushGeneration, printHistoryItems, sessionStore, setHistory]);
|
|
88
|
+
const finalizeSubmittedUserItem = useCallback((item, deferredLiveItems = []) => {
|
|
89
|
+
streamedAssistantFlushRef.current = { flushedChars: 0, text: "" };
|
|
90
|
+
const priorLiveItems = trimFlushItems([...deferredLiveItems]);
|
|
91
|
+
const finalizedItems = [...priorLiveItems, item];
|
|
92
|
+
queueFlush(finalizedItems);
|
|
93
|
+
// Print synchronously so deferred final assistant output is anchored in
|
|
94
|
+
// scrollback before the next prompt clears the live frame. The queued flush
|
|
95
|
+
// still persists and updates React history; the printer dedupes by id when
|
|
96
|
+
// the effect drains the queue.
|
|
97
|
+
printHistoryItems(finalizedItems);
|
|
98
|
+
setLiveItems([]);
|
|
99
|
+
}, [printHistoryItems, queueFlush, setLiveItems, trimFlushItems]);
|
|
100
|
+
const clearPendingHistory = useCallback(() => {
|
|
101
|
+
pendingHistoryFlushRef.current = [];
|
|
102
|
+
terminalHistoryPrinter?.clear();
|
|
103
|
+
}, [terminalHistoryPrinter]);
|
|
104
|
+
return {
|
|
105
|
+
pendingHistoryFlushRef,
|
|
106
|
+
streamedAssistantFlushRef,
|
|
107
|
+
printHistoryItems,
|
|
108
|
+
queueFlush,
|
|
109
|
+
finalizeSubmittedUserItem,
|
|
110
|
+
clearPendingHistory,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=useTranscriptHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranscriptHistory.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptHistory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranscriptHistory.test.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptHistory.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React, { useEffect } from "react";
|
|
3
|
+
import { render } from "ink";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { useTranscriptHistory } from "./useTranscriptHistory.js";
|
|
6
|
+
import { loadTheme } from "../theme/theme.js";
|
|
7
|
+
const context = {
|
|
8
|
+
theme: loadTheme("dark"),
|
|
9
|
+
columns: 80,
|
|
10
|
+
version: "test",
|
|
11
|
+
model: "test-model",
|
|
12
|
+
provider: "anthropic",
|
|
13
|
+
cwd: "/tmp/project",
|
|
14
|
+
};
|
|
15
|
+
function Harness({ onPrinted }) {
|
|
16
|
+
const [history, setHistory] = React.useState([]);
|
|
17
|
+
const [liveItems, setLiveItems] = React.useState([
|
|
18
|
+
{ kind: "assistant", id: "assistant-live", text: "previous assistant reply" },
|
|
19
|
+
]);
|
|
20
|
+
const printedRef = React.useRef("");
|
|
21
|
+
const submittedRef = React.useRef(false);
|
|
22
|
+
const { finalizeSubmittedUserItem } = useTranscriptHistory({
|
|
23
|
+
terminalHistoryPrinter: {
|
|
24
|
+
print(items, _context, options) {
|
|
25
|
+
for (const item of items) {
|
|
26
|
+
options?.write?.(`${item.kind}:${"text" in item ? item.text : item.id}\n`);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
clear() { },
|
|
30
|
+
},
|
|
31
|
+
terminalHistoryContext: context,
|
|
32
|
+
writeStdout(data) {
|
|
33
|
+
printedRef.current += data;
|
|
34
|
+
},
|
|
35
|
+
sessionPathRef: { current: undefined },
|
|
36
|
+
sessionManagerRef: { current: null },
|
|
37
|
+
history,
|
|
38
|
+
setHistory,
|
|
39
|
+
setLiveItems,
|
|
40
|
+
});
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (submittedRef.current)
|
|
43
|
+
return;
|
|
44
|
+
submittedRef.current = true;
|
|
45
|
+
finalizeSubmittedUserItem({ kind: "user", id: "user-next", text: "follow up prompt" }, liveItems);
|
|
46
|
+
onPrinted(printedRef.current);
|
|
47
|
+
}, [finalizeSubmittedUserItem, liveItems, onPrinted]);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
describe("useTranscriptHistory", () => {
|
|
51
|
+
it("prints deferred final assistant output before the next submitted user prompt", async () => {
|
|
52
|
+
let printed = "";
|
|
53
|
+
const mounted = render(_jsx(Harness, { onPrinted: (value) => (printed = value) }), {
|
|
54
|
+
patchConsole: false,
|
|
55
|
+
});
|
|
56
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
57
|
+
mounted.unmount();
|
|
58
|
+
expect(printed).toContain("assistant:previous assistant reply\nuser:follow up prompt\n");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=useTranscriptHistory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranscriptHistory.test.js","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptHistory.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
interface UseTranscriptScrollOptions {
|
|
2
|
+
/** Total number of transcript lines available to scroll through. */
|
|
3
|
+
totalLines: number;
|
|
4
|
+
/** Height of the transcript viewport in rows. */
|
|
5
|
+
viewportRows: number;
|
|
6
|
+
/** Disable key handling (e.g. while an overlay owns the screen). */
|
|
7
|
+
active: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Bumped by the caller whenever a new prompt is submitted; resets scroll to
|
|
10
|
+
* the bottom so the user always sees their newest message + the response.
|
|
11
|
+
*/
|
|
12
|
+
resetToken: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Keyboard + bounds controller for the fullscreen alt-screen transcript
|
|
16
|
+
* viewport. The offset itself lives in the external transcript-scroll store so
|
|
17
|
+
* that scrolling re-renders only the viewport, not the whole App (see
|
|
18
|
+
* stores/transcript-scroll-store.ts). This hook just:
|
|
19
|
+
* - keeps the store's clamp bounds in sync with content/layout,
|
|
20
|
+
* - resets to the bottom on a new prompt,
|
|
21
|
+
* - maps keys to store actions.
|
|
22
|
+
*
|
|
23
|
+
* Mouse-wheel scrolling is routed straight into the store from the input
|
|
24
|
+
* handler (scrollTranscriptByLines), bypassing React state entirely.
|
|
25
|
+
*
|
|
26
|
+
* Keys: PageUp/PageDown (page), Shift+Up/Down (line), g/G (top/bottom).
|
|
27
|
+
*/
|
|
28
|
+
export declare function useTranscriptScroll({ totalLines, viewportRows, active, resetToken, }: UseTranscriptScrollOptions): void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=useTranscriptScroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTranscriptScroll.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptScroll.ts"],"names":[],"mappings":"AAUA,UAAU,0BAA0B;IAClC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,YAAY,EACZ,MAAM,EACN,UAAU,GACX,EAAE,0BAA0B,GAAG,IAAI,CAyBnC"}
|