@qduc/term2 0.30.0 → 0.31.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/dist/app.d.ts.map +1 -1
- package/dist/app.js +24 -5
- package/dist/app.js.map +1 -1
- package/dist/build-info.json +2 -2
- package/dist/cli.js +36 -25
- package/dist/cli.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts +1 -1
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/ErrorBoundary.js +28 -23
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/components/InputBox.d.ts.map +1 -1
- package/dist/components/InputBox.js +124 -32
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/components/MarkdownRenderer.js +31 -28
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/common/Divider.d.ts.map +1 -1
- package/dist/components/common/Divider.js +5 -2
- package/dist/components/common/Divider.js.map +1 -1
- package/dist/components/common/MenuContainer.d.ts +6 -20
- package/dist/components/common/MenuContainer.d.ts.map +1 -1
- package/dist/components/common/MenuContainer.js +24 -40
- package/dist/components/common/MenuContainer.js.map +1 -1
- package/dist/components/common/ScrollableTabBar.d.ts.map +1 -1
- package/dist/components/common/ScrollableTabBar.js +6 -5
- package/dist/components/common/ScrollableTabBar.js.map +1 -1
- package/dist/components/common/SelectionMarker.d.ts +16 -0
- package/dist/components/common/SelectionMarker.d.ts.map +1 -0
- package/dist/components/common/SelectionMarker.js +20 -0
- package/dist/components/common/SelectionMarker.js.map +1 -0
- package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
- package/dist/components/input/ApplicationInputSurface.js +3 -1
- package/dist/components/input/ApplicationInputSurface.js.map +1 -1
- package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -1
- package/dist/components/input/FirstRunSetupPrompt.js +8 -6
- package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
- package/dist/components/input/MenuSurface.d.ts.map +1 -1
- package/dist/components/input/MenuSurface.js +4 -3
- package/dist/components/input/MenuSurface.js.map +1 -1
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
- package/dist/components/input/ModelMenuSession.js +3 -2
- package/dist/components/input/ModelMenuSession.js.map +1 -1
- package/dist/components/input/PendingQueueList.d.ts +3 -0
- package/dist/components/input/PendingQueueList.d.ts.map +1 -1
- package/dist/components/input/PendingQueueList.js +9 -8
- package/dist/components/input/PendingQueueList.js.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsValueMenuSession.js +3 -2
- package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTaskManager.js +113 -107
- package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
- package/dist/components/layout/BackgroundTasksPanel.js +26 -28
- package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
- package/dist/components/layout/Banner.d.ts.map +1 -1
- package/dist/components/layout/Banner.js +3 -47
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/BottomArea.d.ts.map +1 -1
- package/dist/components/layout/BottomArea.js +14 -34
- package/dist/components/layout/BottomArea.js.map +1 -1
- package/dist/components/layout/DiffView.d.ts.map +1 -1
- package/dist/components/layout/DiffView.js +8 -7
- package/dist/components/layout/DiffView.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts +8 -0
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +195 -290
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/menu/CopyMenu.d.ts.map +1 -1
- package/dist/components/menu/CopyMenu.js +16 -13
- package/dist/components/menu/CopyMenu.js.map +1 -1
- package/dist/components/menu/McpSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/McpSelectionMenu.js +8 -7
- package/dist/components/menu/McpSelectionMenu.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +21 -20
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/PathSelectionMenu.js +5 -4
- package/dist/components/menu/PathSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.js +17 -20
- package/dist/components/menu/ProfileSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProviderSelectionMenu.js +37 -36
- package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.js +21 -22
- package/dist/components/menu/ResumeSelectionMenu.js.map +1 -1
- package/dist/components/menu/RewindMenu.d.ts.map +1 -1
- package/dist/components/menu/RewindMenu.js +5 -4
- package/dist/components/menu/RewindMenu.js.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.js +15 -14
- package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsValueSelectionMenu.js +15 -14
- package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.js +17 -18
- package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
- package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
- package/dist/components/menu/SlashCommandMenu.js +5 -4
- package/dist/components/menu/SlashCommandMenu.js.map +1 -1
- package/dist/components/menu/StandaloneModelPickerApp.d.ts.map +1 -1
- package/dist/components/menu/StandaloneModelPickerApp.js +3 -2
- package/dist/components/menu/StandaloneModelPickerApp.js.map +1 -1
- package/dist/components/menu/SubagentPoolSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SubagentPoolSelectionMenu.js +26 -24
- package/dist/components/menu/SubagentPoolSelectionMenu.js.map +1 -1
- package/dist/components/menu/settings-value-formatter.d.ts +3 -1
- package/dist/components/menu/settings-value-formatter.d.ts.map +1 -1
- package/dist/components/menu/settings-value-formatter.js +24 -25
- package/dist/components/menu/settings-value-formatter.js.map +1 -1
- package/dist/components/message/ChatMessage.d.ts.map +1 -1
- package/dist/components/message/ChatMessage.js +11 -7
- package/dist/components/message/ChatMessage.js.map +1 -1
- package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
- package/dist/components/message/CodeContextSearchRenderer.js +14 -11
- package/dist/components/message/CodeContextSearchRenderer.js.map +1 -1
- package/dist/components/message/CommandGroupSummary.d.ts.map +1 -1
- package/dist/components/message/CommandGroupSummary.js +8 -36
- package/dist/components/message/CommandGroupSummary.js.map +1 -1
- package/dist/components/message/CommandMessage.d.ts.map +1 -1
- package/dist/components/message/CommandMessage.js +313 -329
- package/dist/components/message/CommandMessage.js.map +1 -1
- package/dist/components/message/GrepRenderer.d.ts.map +1 -1
- package/dist/components/message/GrepRenderer.js +12 -9
- package/dist/components/message/GrepRenderer.js.map +1 -1
- package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
- package/dist/components/message/MemoryRenderer.js +45 -38
- package/dist/components/message/MemoryRenderer.js.map +1 -1
- package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
- package/dist/components/message/ReadFileRenderer.js +20 -16
- package/dist/components/message/ReadFileRenderer.js.map +1 -1
- package/dist/components/message/RunCodeRenderer.d.ts.map +1 -1
- package/dist/components/message/RunCodeRenderer.js +19 -14
- package/dist/components/message/RunCodeRenderer.js.map +1 -1
- package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
- package/dist/components/message/SubagentActivityMessage.js +15 -15
- package/dist/components/message/SubagentActivityMessage.js.map +1 -1
- package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
- package/dist/components/message/WebFetchRenderer.js +16 -13
- package/dist/components/message/WebFetchRenderer.js.map +1 -1
- package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
- package/dist/components/message/WebSearchRenderer.js +20 -16
- package/dist/components/message/WebSearchRenderer.js.map +1 -1
- package/dist/components/message/command-message-helpers.d.ts +2 -2
- package/dist/components/message/command-message-helpers.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts +12 -1
- package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ApprovalPrompt.js +100 -147
- package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
- package/dist/components/prompt/ConfirmPrompt.d.ts.map +1 -1
- package/dist/components/prompt/ConfirmPrompt.js +7 -4
- package/dist/components/prompt/ConfirmPrompt.js.map +1 -1
- package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
- package/dist/components/prompt/QueuePausedPrompt.js +7 -4
- package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
- package/dist/components/theme.d.ts +10 -52
- package/dist/components/theme.d.ts.map +1 -1
- package/dist/components/theme.js +11 -68
- package/dist/components/theme.js.map +1 -1
- package/dist/context/InputContext.d.ts +17 -0
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +12 -0
- package/dist/context/InputContext.js.map +1 -1
- package/dist/gateway/gateway.d.ts.map +1 -1
- package/dist/gateway/gateway.js +11 -1
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/hooks/conversation-ui-reducer.d.ts +5 -2
- package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
- package/dist/hooks/conversation-ui-reducer.js +9 -2
- package/dist/hooks/conversation-ui-reducer.js.map +1 -1
- package/dist/hooks/settings-completion-config.d.ts.map +1 -1
- package/dist/hooks/settings-completion-config.js +2 -0
- package/dist/hooks/settings-completion-config.js.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts +6 -1
- package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
- package/dist/hooks/use-app-keyboard-shortcuts.js +17 -11
- package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
- package/dist/hooks/use-conversation.d.ts +1 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +2 -2
- package/dist/providers/model-catalog/catalog.generated.d.ts +239 -171
- package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
- package/dist/providers/model-catalog/catalog.generated.js +238 -179
- package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
- package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
- package/dist/providers/model-catalog/generate-catalog.js +13 -5
- package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
- package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
- package/dist/providers/openai-chat-completions-model.js +5 -2
- package/dist/providers/openai-chat-completions-model.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.d.ts +1 -0
- package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
- package/dist/services/approval/background-subagent-approval-controller.js +3 -0
- package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
- package/dist/services/approval/background-subagent-approval-queue.d.ts +5 -0
- package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -1
- package/dist/services/approval/background-subagent-approval-queue.js +18 -2
- package/dist/services/approval/background-subagent-approval-queue.js.map +1 -1
- package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
- package/dist/services/conversation/conversation-adapter.js +32 -6
- package/dist/services/conversation/conversation-adapter.js.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.d.ts +2 -0
- package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
- package/dist/services/conversation/conversation-admission-workflow.js +1 -1
- package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +41 -21
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.types.d.ts +4 -3
- package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +16 -1
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/cost/model-cost.d.ts +6 -0
- package/dist/services/cost/model-cost.d.ts.map +1 -1
- package/dist/services/cost/model-cost.js +12 -0
- package/dist/services/cost/model-cost.js.map +1 -1
- package/dist/services/cost/pricing.d.ts +1 -1
- package/dist/services/cost/pricing.d.ts.map +1 -1
- package/dist/services/cost/pricing.js +5 -5
- package/dist/services/cost/pricing.js.map +1 -1
- package/dist/services/models/model-picker-host.d.ts.map +1 -1
- package/dist/services/models/model-picker-host.js +9 -5
- package/dist/services/models/model-picker-host.js.map +1 -1
- package/dist/services/queue/queue-controller.d.ts +3 -0
- package/dist/services/queue/queue-controller.d.ts.map +1 -1
- package/dist/services/queue/queue-controller.js +53 -5
- package/dist/services/queue/queue-controller.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +4 -1
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +66 -13
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +34 -0
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +16 -0
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts +2 -0
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +2 -0
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -1
- package/dist/services/settings/settings-ui-metadata.js +2 -0
- package/dist/services/settings/settings-ui-metadata.js.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +7 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
- package/dist/services/shell/background-shell-output-store.d.ts +4 -2
- package/dist/services/shell/background-shell-output-store.d.ts.map +1 -1
- package/dist/services/shell/background-shell-output-store.js +9 -8
- package/dist/services/shell/background-shell-output-store.js.map +1 -1
- package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
- package/dist/services/shell/background-shell-watches.js +20 -9
- package/dist/services/shell/background-shell-watches.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +2 -2
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
- package/dist/services/subagents/subagent-run-control.js +3 -2
- package/dist/services/subagents/subagent-run-control.js.map +1 -1
- package/dist/services/subagents/utils.d.ts +1 -1
- package/dist/services/subagents/utils.d.ts.map +1 -1
- package/dist/services/subagents/utils.js +5 -4
- package/dist/services/subagents/utils.js.map +1 -1
- package/dist/skins/SkinContext.d.ts +18 -0
- package/dist/skins/SkinContext.d.ts.map +1 -0
- package/dist/skins/SkinContext.js +23 -0
- package/dist/skins/SkinContext.js.map +1 -0
- package/dist/skins/cards/activity.d.ts +8 -0
- package/dist/skins/cards/activity.d.ts.map +1 -0
- package/dist/skins/cards/activity.js +23 -0
- package/dist/skins/cards/activity.js.map +1 -0
- package/dist/skins/cards/approval.d.ts +15 -0
- package/dist/skins/cards/approval.d.ts.map +1 -0
- package/dist/skins/cards/approval.js +64 -0
- package/dist/skins/cards/approval.js.map +1 -0
- package/dist/skins/cards/body.d.ts +14 -0
- package/dist/skins/cards/body.d.ts.map +1 -0
- package/dist/skins/cards/body.js +65 -0
- package/dist/skins/cards/body.js.map +1 -0
- package/dist/skins/cards/card.d.ts +28 -0
- package/dist/skins/cards/card.d.ts.map +1 -0
- package/dist/skins/cards/card.js +37 -0
- package/dist/skins/cards/card.js.map +1 -0
- package/dist/skins/cards/index.d.ts +9 -0
- package/dist/skins/cards/index.d.ts.map +1 -0
- package/dist/skins/cards/index.js +41 -0
- package/dist/skins/cards/index.js.map +1 -0
- package/dist/skins/cards/live-region.d.ts +16 -0
- package/dist/skins/cards/live-region.d.ts.map +1 -0
- package/dist/skins/cards/live-region.js +83 -0
- package/dist/skins/cards/live-region.js.map +1 -0
- package/dist/skins/cards/measure.d.ts +17 -0
- package/dist/skins/cards/measure.d.ts.map +1 -0
- package/dist/skins/cards/measure.js +29 -0
- package/dist/skins/cards/measure.js.map +1 -0
- package/dist/skins/cards/messages.d.ts +23 -0
- package/dist/skins/cards/messages.d.ts.map +1 -0
- package/dist/skins/cards/messages.js +80 -0
- package/dist/skins/cards/messages.js.map +1 -0
- package/dist/skins/cards/status.d.ts +9 -0
- package/dist/skins/cards/status.d.ts.map +1 -0
- package/dist/skins/cards/status.js +205 -0
- package/dist/skins/cards/status.js.map +1 -0
- package/dist/skins/cards/tools.d.ts +21 -0
- package/dist/skins/cards/tools.d.ts.map +1 -0
- package/dist/skins/cards/tools.js +101 -0
- package/dist/skins/cards/tools.js.map +1 -0
- package/dist/skins/cards/width.d.ts +4 -0
- package/dist/skins/cards/width.d.ts.map +1 -0
- package/dist/skins/cards/width.js +32 -0
- package/dist/skins/cards/width.js.map +1 -0
- package/dist/skins/classic/approval.d.ts +19 -0
- package/dist/skins/classic/approval.d.ts.map +1 -0
- package/dist/skins/classic/approval.js +50 -0
- package/dist/skins/classic/approval.js.map +1 -0
- package/dist/skins/classic/index.d.ts +7 -0
- package/dist/skins/classic/index.d.ts.map +1 -0
- package/dist/skins/classic/index.js +39 -0
- package/dist/skins/classic/index.js.map +1 -0
- package/dist/skins/classic/live-region.d.ts +19 -0
- package/dist/skins/classic/live-region.d.ts.map +1 -0
- package/dist/skins/classic/live-region.js +71 -0
- package/dist/skins/classic/live-region.js.map +1 -0
- package/dist/skins/classic/menu.d.ts +5 -0
- package/dist/skins/classic/menu.d.ts.map +1 -0
- package/dist/skins/classic/menu.js +20 -0
- package/dist/skins/classic/menu.js.map +1 -0
- package/dist/skins/classic/messages.d.ts +13 -0
- package/dist/skins/classic/messages.d.ts.map +1 -0
- package/dist/skins/classic/messages.js +65 -0
- package/dist/skins/classic/messages.js.map +1 -0
- package/dist/skins/classic/question.d.ts +5 -0
- package/dist/skins/classic/question.d.ts.map +1 -0
- package/dist/skins/classic/question.js +33 -0
- package/dist/skins/classic/question.js.map +1 -0
- package/dist/skins/classic/status.d.ts +10 -0
- package/dist/skins/classic/status.d.ts.map +1 -0
- package/dist/skins/classic/status.js +158 -0
- package/dist/skins/classic/status.js.map +1 -0
- package/dist/skins/classic/subagent.d.ts +5 -0
- package/dist/skins/classic/subagent.d.ts.map +1 -0
- package/dist/skins/classic/subagent.js +14 -0
- package/dist/skins/classic/subagent.js.map +1 -0
- package/dist/skins/classic/tool-section.d.ts +8 -0
- package/dist/skins/classic/tool-section.d.ts.map +1 -0
- package/dist/skins/classic/tool-section.js +20 -0
- package/dist/skins/classic/tool-section.js.map +1 -0
- package/dist/skins/classic/tools.d.ts +19 -0
- package/dist/skins/classic/tools.d.ts.map +1 -0
- package/dist/skins/classic/tools.js +72 -0
- package/dist/skins/classic/tools.js.map +1 -0
- package/dist/skins/ledger/activity.d.ts +6 -0
- package/dist/skins/ledger/activity.d.ts.map +1 -0
- package/dist/skins/ledger/activity.js +18 -0
- package/dist/skins/ledger/activity.js.map +1 -0
- package/dist/skins/ledger/approval.d.ts +17 -0
- package/dist/skins/ledger/approval.d.ts.map +1 -0
- package/dist/skins/ledger/approval.js +67 -0
- package/dist/skins/ledger/approval.js.map +1 -0
- package/dist/skins/ledger/body.d.ts +11 -0
- package/dist/skins/ledger/body.d.ts.map +1 -0
- package/dist/skins/ledger/body.js +77 -0
- package/dist/skins/ledger/body.js.map +1 -0
- package/dist/skins/ledger/chip.d.ts +27 -0
- package/dist/skins/ledger/chip.d.ts.map +1 -0
- package/dist/skins/ledger/chip.js +25 -0
- package/dist/skins/ledger/chip.js.map +1 -0
- package/dist/skins/ledger/index.d.ts +11 -0
- package/dist/skins/ledger/index.d.ts.map +1 -0
- package/dist/skins/ledger/index.js +44 -0
- package/dist/skins/ledger/index.js.map +1 -0
- package/dist/skins/ledger/live-region.d.ts +20 -0
- package/dist/skins/ledger/live-region.d.ts.map +1 -0
- package/dist/skins/ledger/live-region.js +89 -0
- package/dist/skins/ledger/live-region.js.map +1 -0
- package/dist/skins/ledger/messages.d.ts +17 -0
- package/dist/skins/ledger/messages.d.ts.map +1 -0
- package/dist/skins/ledger/messages.js +62 -0
- package/dist/skins/ledger/messages.js.map +1 -0
- package/dist/skins/ledger/status.d.ts +10 -0
- package/dist/skins/ledger/status.d.ts.map +1 -0
- package/dist/skins/ledger/status.js +302 -0
- package/dist/skins/ledger/status.js.map +1 -0
- package/dist/skins/ledger/tools.d.ts +20 -0
- package/dist/skins/ledger/tools.d.ts.map +1 -0
- package/dist/skins/ledger/tools.js +101 -0
- package/dist/skins/ledger/tools.js.map +1 -0
- package/dist/skins/names.d.ts +10 -0
- package/dist/skins/names.d.ts.map +1 -0
- package/dist/skins/names.js +9 -0
- package/dist/skins/names.js.map +1 -0
- package/dist/skins/rail/activity.d.ts +8 -0
- package/dist/skins/rail/activity.d.ts.map +1 -0
- package/dist/skins/rail/activity.js +23 -0
- package/dist/skins/rail/activity.js.map +1 -0
- package/dist/skins/rail/approval.d.ts +16 -0
- package/dist/skins/rail/approval.d.ts.map +1 -0
- package/dist/skins/rail/approval.js +45 -0
- package/dist/skins/rail/approval.js.map +1 -0
- package/dist/skins/rail/body.d.ts +19 -0
- package/dist/skins/rail/body.d.ts.map +1 -0
- package/dist/skins/rail/body.js +69 -0
- package/dist/skins/rail/body.js.map +1 -0
- package/dist/skins/rail/index.d.ts +12 -0
- package/dist/skins/rail/index.d.ts.map +1 -0
- package/dist/skins/rail/index.js +44 -0
- package/dist/skins/rail/index.js.map +1 -0
- package/dist/skins/rail/live-region.d.ts +19 -0
- package/dist/skins/rail/live-region.d.ts.map +1 -0
- package/dist/skins/rail/live-region.js +88 -0
- package/dist/skins/rail/live-region.js.map +1 -0
- package/dist/skins/rail/messages.d.ts +21 -0
- package/dist/skins/rail/messages.d.ts.map +1 -0
- package/dist/skins/rail/messages.js +90 -0
- package/dist/skins/rail/messages.js.map +1 -0
- package/dist/skins/rail/parts.d.ts +25 -0
- package/dist/skins/rail/parts.d.ts.map +1 -0
- package/dist/skins/rail/parts.js +37 -0
- package/dist/skins/rail/parts.js.map +1 -0
- package/dist/skins/rail/status.d.ts +10 -0
- package/dist/skins/rail/status.d.ts.map +1 -0
- package/dist/skins/rail/status.js +147 -0
- package/dist/skins/rail/status.js.map +1 -0
- package/dist/skins/rail/tools.d.ts +28 -0
- package/dist/skins/rail/tools.d.ts.map +1 -0
- package/dist/skins/rail/tools.js +85 -0
- package/dist/skins/rail/tools.js.map +1 -0
- package/dist/skins/registry.d.ts +6 -0
- package/dist/skins/registry.d.ts.map +1 -0
- package/dist/skins/registry.js +15 -0
- package/dist/skins/registry.js.map +1 -0
- package/dist/skins/shared/gauge.d.ts +17 -0
- package/dist/skins/shared/gauge.d.ts.map +1 -0
- package/dist/skins/shared/gauge.js +29 -0
- package/dist/skins/shared/gauge.js.map +1 -0
- package/dist/skins/shared/limits.d.ts +3 -0
- package/dist/skins/shared/limits.d.ts.map +1 -0
- package/dist/skins/shared/limits.js +3 -0
- package/dist/skins/shared/limits.js.map +1 -0
- package/dist/skins/shared/spinner.d.ts +14 -0
- package/dist/skins/shared/spinner.d.ts.map +1 -0
- package/dist/skins/shared/spinner.js +25 -0
- package/dist/skins/shared/spinner.js.map +1 -0
- package/dist/skins/testing/conformance.d.ts +8 -0
- package/dist/skins/testing/conformance.d.ts.map +1 -0
- package/dist/skins/testing/conformance.js +34 -0
- package/dist/skins/testing/conformance.js.map +1 -0
- package/dist/skins/testing/scenes.d.ts +45 -0
- package/dist/skins/testing/scenes.d.ts.map +1 -0
- package/dist/skins/testing/scenes.js +466 -0
- package/dist/skins/testing/scenes.js.map +1 -0
- package/dist/skins/types.d.ts +294 -0
- package/dist/skins/types.d.ts.map +1 -0
- package/dist/skins/types.js +10 -0
- package/dist/skins/types.js.map +1 -0
- package/dist/skins/zen/activity.d.ts +7 -0
- package/dist/skins/zen/activity.d.ts.map +1 -0
- package/dist/skins/zen/activity.js +22 -0
- package/dist/skins/zen/activity.js.map +1 -0
- package/dist/skins/zen/approval.d.ts +20 -0
- package/dist/skins/zen/approval.d.ts.map +1 -0
- package/dist/skins/zen/approval.js +67 -0
- package/dist/skins/zen/approval.js.map +1 -0
- package/dist/skins/zen/body.d.ts +14 -0
- package/dist/skins/zen/body.d.ts.map +1 -0
- package/dist/skins/zen/body.js +82 -0
- package/dist/skins/zen/body.js.map +1 -0
- package/dist/skins/zen/index.d.ts +12 -0
- package/dist/skins/zen/index.d.ts.map +1 -0
- package/dist/skins/zen/index.js +44 -0
- package/dist/skins/zen/index.js.map +1 -0
- package/dist/skins/zen/live-region.d.ts +21 -0
- package/dist/skins/zen/live-region.d.ts.map +1 -0
- package/dist/skins/zen/live-region.js +77 -0
- package/dist/skins/zen/live-region.js.map +1 -0
- package/dist/skins/zen/messages.d.ts +27 -0
- package/dist/skins/zen/messages.d.ts.map +1 -0
- package/dist/skins/zen/messages.js +81 -0
- package/dist/skins/zen/messages.js.map +1 -0
- package/dist/skins/zen/status.d.ts +11 -0
- package/dist/skins/zen/status.d.ts.map +1 -0
- package/dist/skins/zen/status.js +177 -0
- package/dist/skins/zen/status.js.map +1 -0
- package/dist/skins/zen/style.d.ts +26 -0
- package/dist/skins/zen/style.d.ts.map +1 -0
- package/dist/skins/zen/style.js +14 -0
- package/dist/skins/zen/style.js.map +1 -0
- package/dist/skins/zen/tools.d.ts +23 -0
- package/dist/skins/zen/tools.d.ts.map +1 -0
- package/dist/skins/zen/tools.js +81 -0
- package/dist/skins/zen/tools.js.map +1 -0
- package/dist/skins/zen/width.d.ts +12 -0
- package/dist/skins/zen/width.d.ts.map +1 -0
- package/dist/skins/zen/width.js +27 -0
- package/dist/skins/zen/width.js.map +1 -0
- package/dist/theme/ThemeContext.d.ts +26 -0
- package/dist/theme/ThemeContext.d.ts.map +1 -0
- package/dist/theme/ThemeContext.js +24 -0
- package/dist/theme/ThemeContext.js.map +1 -0
- package/dist/theme/detect-terminal-background.d.ts +29 -0
- package/dist/theme/detect-terminal-background.d.ts.map +1 -0
- package/dist/theme/detect-terminal-background.js +72 -0
- package/dist/theme/detect-terminal-background.js.map +1 -0
- package/dist/theme/palettes.d.ts +84 -0
- package/dist/theme/palettes.d.ts.map +1 -0
- package/dist/theme/palettes.js +175 -0
- package/dist/theme/palettes.js.map +1 -0
- package/dist/theme/resolve-theme.d.ts +44 -0
- package/dist/theme/resolve-theme.d.ts.map +1 -0
- package/dist/theme/resolve-theme.js +72 -0
- package/dist/theme/resolve-theme.js.map +1 -0
- package/dist/tools/file/create-file.js +1 -1
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code-runtime.js +87 -6
- package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
- package/dist/utils/shell/execute-shell.js +1 -1
- package/dist/utils/shell/execute-shell.js.map +1 -1
- package/dist/utils/value-suggestions.d.ts.map +1 -1
- package/dist/utils/value-suggestions.js +14 -0
- package/dist/utils/value-suggestions.js.map +1 -1
- package/package.json +3 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/body.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG5G;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,mBAAmB,CAkDtD,CAAC;AAEF,2GAA2G;AAC3G,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,iBAAiB,CAWlD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,gBAAgB,CAYhD,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,cAAc,CAuB5C,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { GLYPH_FAVORITE, GLYPH_SELECTED, useTheme } from '../../components/theme.js';
|
|
4
|
+
import { Hairline, RAIL_HEAVY, RAIL_THIN, Rail } from './parts.js';
|
|
5
|
+
/**
|
|
6
|
+
* The question sits behind a heavy warning rail, like an approval; its options are
|
|
7
|
+
* the same numbered list the approval uses, the selected one explained in one dim
|
|
8
|
+
* line under the list rather than in a side pane.
|
|
9
|
+
*/
|
|
10
|
+
export const RailQuestionPrompt = ({ progress, question, notice, options, description, footer, }) => {
|
|
11
|
+
const theme = useTheme();
|
|
12
|
+
return (React.createElement(Rail, { glyph: RAIL_HEAVY, color: theme.warning },
|
|
13
|
+
progress !== undefined && React.createElement(Text, { color: theme.textSubtle }, progress),
|
|
14
|
+
React.createElement(Text, { bold: true, color: theme.warning }, question),
|
|
15
|
+
notice !== undefined && React.createElement(Text, { color: theme.accent },
|
|
16
|
+
"\u276F ",
|
|
17
|
+
notice),
|
|
18
|
+
React.createElement(Box, { flexDirection: "column", marginTop: 1 }, options.map((option, index) => {
|
|
19
|
+
const tone = option.tone ? theme[option.tone] : undefined;
|
|
20
|
+
const checkbox = option.checked === undefined ? '' : option.checked ? '[x] ' : '[ ] ';
|
|
21
|
+
return (React.createElement(Box, { key: option.label },
|
|
22
|
+
React.createElement(Box, { width: 2, flexShrink: 0 },
|
|
23
|
+
React.createElement(Text, { color: theme.accent, bold: true }, option.selected ? GLYPH_SELECTED : ' ')),
|
|
24
|
+
React.createElement(Box, { width: 2, flexShrink: 0 },
|
|
25
|
+
React.createElement(Text, { color: theme.textSubtle }, option.recommended ? GLYPH_FAVORITE : ' ')),
|
|
26
|
+
React.createElement(Box, { flexShrink: 1 },
|
|
27
|
+
React.createElement(Text, { color: option.selected ? tone : theme.textMuted, bold: option.selected },
|
|
28
|
+
index + 1,
|
|
29
|
+
". ",
|
|
30
|
+
checkbox,
|
|
31
|
+
option.label))));
|
|
32
|
+
})),
|
|
33
|
+
description.text && (React.createElement(Box, { marginTop: 1 },
|
|
34
|
+
React.createElement(Text, { color: theme.textSubtle, italic: true }, description.text))),
|
|
35
|
+
React.createElement(Box, { marginTop: 1 }, footer)));
|
|
36
|
+
};
|
|
37
|
+
/** A thin rail in the status colour down the whole feed, so it reads as one unit apart from the answer. */
|
|
38
|
+
export const RailSubagentFeed = ({ title, statusSuffix, tone, summary, children }) => {
|
|
39
|
+
const theme = useTheme();
|
|
40
|
+
return (React.createElement(Rail, { glyph: RAIL_THIN, color: theme[tone] },
|
|
41
|
+
React.createElement(Text, { color: theme[tone], bold: true },
|
|
42
|
+
title,
|
|
43
|
+
statusSuffix),
|
|
44
|
+
summary !== undefined ? React.createElement(Text, { color: theme.textSubtle }, summary) : children));
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Renderer bodies always sit inside the tool call's own rail, so a second rail here
|
|
48
|
+
* would double it. Rows and content blocks indent; a callout opens with a bold
|
|
49
|
+
* heading in its tone.
|
|
50
|
+
*/
|
|
51
|
+
export const RailToolSection = ({ variant, title, tone = 'warning', children }) => {
|
|
52
|
+
const theme = useTheme();
|
|
53
|
+
return (React.createElement(Box, { flexDirection: "column", paddingLeft: 2 },
|
|
54
|
+
variant === 'callout' && title !== undefined && (React.createElement(Text, { color: theme[tone], bold: true }, title)),
|
|
55
|
+
children));
|
|
56
|
+
};
|
|
57
|
+
/** Hairlines above and below, no box; a state colour (error) tints the title instead of a border. */
|
|
58
|
+
export const RailMenuFrame = ({ title, borderColor, footer, footerPlacement, children }) => {
|
|
59
|
+
const theme = useTheme();
|
|
60
|
+
const footerNode = footer ? (typeof footer === 'string' ? (React.createElement(Text, { color: theme.textSubtle }, footer)) : (footer)) : null;
|
|
61
|
+
return (React.createElement(Box, { flexDirection: "column", width: "100%" },
|
|
62
|
+
React.createElement(Hairline, null),
|
|
63
|
+
title ? (React.createElement(Text, { bold: true, color: borderColor === theme.danger ? theme.danger : theme.textMuted }, title)) : null,
|
|
64
|
+
children,
|
|
65
|
+
footerPlacement === 'inside' && footerNode,
|
|
66
|
+
React.createElement(Hairline, null),
|
|
67
|
+
footerPlacement === 'outside' && footerNode));
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body.js","sourceRoot":"","sources":["../../../source/skins/rail/body.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Skin } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* "Rail": quiet and typographic. No boxes, no background bands, so it reads the
|
|
4
|
+
* same on a light and a dark terminal. A tool call is a status-coloured rail with
|
|
5
|
+
* its output indented behind it, the prompt sits between two hairlines, the status
|
|
6
|
+
* is one line, and an approval is a rail down its whole height (heavier, with a
|
|
7
|
+
* `▲`, when it is the riskiest class).
|
|
8
|
+
*
|
|
9
|
+
* Spread from classic so any slot added to the contract later still renders.
|
|
10
|
+
*/
|
|
11
|
+
export declare const railSkin: Skin;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAQxC;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE,IAyBtB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { RailShellActivity, RailTaskPanel, RAIL_TASK_PANEL_GUTTER } from './activity.js';
|
|
2
|
+
import { classicSkin } from '../classic/index.js';
|
|
3
|
+
import { RailMenuFrame, RailQuestionPrompt, RailSubagentFeed, RailToolSection } from './body.js';
|
|
4
|
+
import { RailApprovalChoices, RailApprovalFrame } from './approval.js';
|
|
5
|
+
import { RailHints, RailInputFrame, RailLiveDivider, RailPromptMarker, RailWorkingIndicator } from './live-region.js';
|
|
6
|
+
import { RailAssistantFrame, RailBanner, RailUserMessage } from './messages.js';
|
|
7
|
+
import { RailStatusBar } from './status.js';
|
|
8
|
+
import { RailToolFrame, RailToolGroupSummary, RailToolHeader } from './tools.js';
|
|
9
|
+
/**
|
|
10
|
+
* "Rail": quiet and typographic. No boxes, no background bands, so it reads the
|
|
11
|
+
* same on a light and a dark terminal. A tool call is a status-coloured rail with
|
|
12
|
+
* its output indented behind it, the prompt sits between two hairlines, the status
|
|
13
|
+
* is one line, and an approval is a rail down its whole height (heavier, with a
|
|
14
|
+
* `▲`, when it is the riskiest class).
|
|
15
|
+
*
|
|
16
|
+
* Spread from classic so any slot added to the contract later still renders.
|
|
17
|
+
*/
|
|
18
|
+
export const railSkin = {
|
|
19
|
+
...classicSkin,
|
|
20
|
+
name: 'rail',
|
|
21
|
+
taskPanelGutter: RAIL_TASK_PANEL_GUTTER,
|
|
22
|
+
assistantGutter: 0,
|
|
23
|
+
Banner: RailBanner,
|
|
24
|
+
UserMessage: RailUserMessage,
|
|
25
|
+
AssistantFrame: RailAssistantFrame,
|
|
26
|
+
ToolFrame: RailToolFrame,
|
|
27
|
+
ToolHeader: RailToolHeader,
|
|
28
|
+
ToolGroupSummary: RailToolGroupSummary,
|
|
29
|
+
WorkingIndicator: RailWorkingIndicator,
|
|
30
|
+
LiveDivider: RailLiveDivider,
|
|
31
|
+
PromptMarker: RailPromptMarker,
|
|
32
|
+
InputFrame: RailInputFrame,
|
|
33
|
+
Hints: RailHints,
|
|
34
|
+
ShellActivity: RailShellActivity,
|
|
35
|
+
TaskPanel: RailTaskPanel,
|
|
36
|
+
ApprovalFrame: RailApprovalFrame,
|
|
37
|
+
ApprovalChoices: RailApprovalChoices,
|
|
38
|
+
QuestionPrompt: RailQuestionPrompt,
|
|
39
|
+
SubagentFeed: RailSubagentFeed,
|
|
40
|
+
ToolSection: RailToolSection,
|
|
41
|
+
MenuFrame: RailMenuFrame,
|
|
42
|
+
StatusBar: RailStatusBar,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/skins/rail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACtH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,GAAG,WAAW;IACd,IAAI,EAAE,MAAM;IACZ,eAAe,EAAE,sBAAsB;IACvC,eAAe,EAAE,CAAC;IAClB,MAAM,EAAE,UAAU;IAClB,WAAW,EAAE,eAAe;IAC5B,cAAc,EAAE,kBAAkB;IAClC,SAAS,EAAE,aAAa;IACxB,UAAU,EAAE,cAAc;IAC1B,gBAAgB,EAAE,oBAAoB;IACtC,gBAAgB,EAAE,oBAAoB;IACtC,WAAW,EAAE,eAAe;IAC5B,YAAY,EAAE,gBAAgB;IAC9B,UAAU,EAAE,cAAc;IAC1B,KAAK,EAAE,SAAS;IAChB,aAAa,EAAE,iBAAiB;IAChC,SAAS,EAAE,aAAa;IACxB,aAAa,EAAE,iBAAiB;IAChC,eAAe,EAAE,mBAAmB;IACpC,cAAc,EAAE,kBAAkB;IAClC,YAAY,EAAE,gBAAgB;IAC9B,WAAW,EAAE,eAAe;IAC5B,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,aAAa;CACzB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { HintsProps, InputFrameProps, PromptMarkerProps, WorkingIndicatorView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* `⠋ Thinking… 12s esc to interrupt`. The interrupt hint is decoration: it is
|
|
5
|
+
* the first thing dropped when the line would not fit.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RailWorkingIndicator: FC<WorkingIndicatorView>;
|
|
8
|
+
/** Above the live region: one hairline between printed history and the controls. */
|
|
9
|
+
export declare const RailLiveDivider: FC;
|
|
10
|
+
export declare const RailPromptMarker: FC<PromptMarkerProps>;
|
|
11
|
+
/** The prompt sits between two hairlines: the live divider above, this one below. */
|
|
12
|
+
export declare const RailInputFrame: FC<InputFrameProps>;
|
|
13
|
+
/**
|
|
14
|
+
* `⏎ steer · alt+⏎ queue · / commands`: dim, joined by middle dots. Keys are one
|
|
15
|
+
* step brighter than the words they name, or in their own role colour when the
|
|
16
|
+
* container gave one. Whole hints wrap, never the middle of one.
|
|
17
|
+
*/
|
|
18
|
+
export declare const RailHints: FC<HintsProps>;
|
|
19
|
+
//# sourceMappingURL=live-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-region.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/live-region.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAqCxG;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,CAsBzD,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,eAAe,EAAE,EAAuB,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,iBAAiB,CAqBlD,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,eAAe,CAK9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,UAAU,CAYpC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useTheme } from '../../components/theme.js';
|
|
4
|
+
import { useTerminalColumns } from '../../hooks/use-terminal-columns.js';
|
|
5
|
+
import { formatTokensPerSecond } from '../../utils/streaming/streaming-speed-tracker.js';
|
|
6
|
+
import { BRAILLE_SPINNER, useSpinnerFrame } from '../shared/spinner.js';
|
|
7
|
+
import { Hairline, cells } from './parts.js';
|
|
8
|
+
const INTERRUPT_HINT = 'esc to interrupt';
|
|
9
|
+
/** The spinner glyph. Its own component so only this cell re-renders on each tick. */
|
|
10
|
+
const WorkingGlyph = () => {
|
|
11
|
+
const theme = useTheme();
|
|
12
|
+
const frame = useSpinnerFrame(BRAILLE_SPINNER);
|
|
13
|
+
return React.createElement(Text, { color: theme.accent }, frame);
|
|
14
|
+
};
|
|
15
|
+
/** What the agent is doing, as the text of one line: `Thinking… 12s`. */
|
|
16
|
+
function workingLabel(view) {
|
|
17
|
+
const { phase, elapsedSeconds, tokensPerSecond, toolName, argumentChars } = view;
|
|
18
|
+
const rate = tokensPerSecond != null && tokensPerSecond > 0 ? formatTokensPerSecond(tokensPerSecond) : undefined;
|
|
19
|
+
if (phase === 'tool_call') {
|
|
20
|
+
const detail = [argumentChars != null ? `${argumentChars} chars` : undefined, rate].filter(Boolean).join(' · ');
|
|
21
|
+
return {
|
|
22
|
+
before: toolName ? 'Calling tool ' : 'Calling tool',
|
|
23
|
+
strong: toolName,
|
|
24
|
+
after: `… ${elapsedSeconds}s${detail ? ` (${detail})` : ''}`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (phase === 'thinking')
|
|
28
|
+
return { before: `Thinking… ${elapsedSeconds}s${rate ? ` (${rate})` : ''}`, after: '' };
|
|
29
|
+
if (rate)
|
|
30
|
+
return { before: `Generating… ${elapsedSeconds}s (${rate})`, after: '' };
|
|
31
|
+
return { before: `Processing… ${elapsedSeconds}s`, after: '' };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* `⠋ Thinking… 12s esc to interrupt`. The interrupt hint is decoration: it is
|
|
35
|
+
* the first thing dropped when the line would not fit.
|
|
36
|
+
*/
|
|
37
|
+
export const RailWorkingIndicator = (view) => {
|
|
38
|
+
const theme = useTheme();
|
|
39
|
+
const columns = useTerminalColumns();
|
|
40
|
+
const { before, strong, after } = workingLabel(view);
|
|
41
|
+
const width = 2 + cells(before) + cells(strong ?? '') + cells(after) + 3 + cells(INTERRUPT_HINT);
|
|
42
|
+
const showHint = width <= columns;
|
|
43
|
+
return (React.createElement(Box, null,
|
|
44
|
+
React.createElement(Box, { width: 2, flexShrink: 0 },
|
|
45
|
+
React.createElement(WorkingGlyph, null)),
|
|
46
|
+
React.createElement(Box, { flexShrink: 1 },
|
|
47
|
+
React.createElement(Text, { color: theme.textMuted },
|
|
48
|
+
before,
|
|
49
|
+
strong !== undefined && React.createElement(Text, { bold: true }, strong),
|
|
50
|
+
after,
|
|
51
|
+
showHint && React.createElement(Text, { color: theme.textSubtle }, ` ${INTERRUPT_HINT}`)))));
|
|
52
|
+
};
|
|
53
|
+
/** Above the live region: one hairline between printed history and the controls. */
|
|
54
|
+
export const RailLiveDivider = () => React.createElement(Hairline, null);
|
|
55
|
+
export const RailPromptMarker = ({ mode }) => {
|
|
56
|
+
const theme = useTheme();
|
|
57
|
+
if (mode === 'rejection') {
|
|
58
|
+
return (React.createElement(Text, { color: theme.warning, bold: true },
|
|
59
|
+
"Why?",
|
|
60
|
+
' '));
|
|
61
|
+
}
|
|
62
|
+
if (mode === 'shell') {
|
|
63
|
+
return (React.createElement(Text, { color: theme.danger, bold: true },
|
|
64
|
+
"!",
|
|
65
|
+
' '));
|
|
66
|
+
}
|
|
67
|
+
return (React.createElement(Text, { color: theme.accent, bold: true },
|
|
68
|
+
"\u276F",
|
|
69
|
+
' '));
|
|
70
|
+
};
|
|
71
|
+
/** The prompt sits between two hairlines: the live divider above, this one below. */
|
|
72
|
+
export const RailInputFrame = ({ children }) => (React.createElement(Box, { flexDirection: "column" },
|
|
73
|
+
React.createElement(Box, null, children),
|
|
74
|
+
React.createElement(Hairline, null)));
|
|
75
|
+
/**
|
|
76
|
+
* `⏎ steer · alt+⏎ queue · / commands`: dim, joined by middle dots. Keys are one
|
|
77
|
+
* step brighter than the words they name, or in their own role colour when the
|
|
78
|
+
* container gave one. Whole hints wrap, never the middle of one.
|
|
79
|
+
*/
|
|
80
|
+
export const RailHints = ({ hints }) => {
|
|
81
|
+
const theme = useTheme();
|
|
82
|
+
return (React.createElement(Box, { flexWrap: "wrap", columnGap: 1 }, hints.map(([key, action, keyColor], index) => (React.createElement(Text, { key: key, color: theme.textSubtle },
|
|
83
|
+
React.createElement(Text, { color: keyColor ? theme[keyColor] : theme.textMuted }, key),
|
|
84
|
+
" ",
|
|
85
|
+
action,
|
|
86
|
+
index < hints.length - 1 ? ' ·' : '')))));
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=live-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-region.js","sourceRoot":"","sources":["../../../source/skins/rail/live-region.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { AssistantFrameProps, BannerView, UserMessageView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* One line, no box: `term² v0.30.0 · Codex/gpt-5.6-luna (high)`, then a pill only
|
|
5
|
+
* when the mode is not the default. On a narrow terminal the version is the first
|
|
6
|
+
* thing to go, and if the rest still does not fit the model moves to its own line.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RailBanner: FC<BannerView>;
|
|
9
|
+
/**
|
|
10
|
+
* No background band: a band only works against the terminal background it was
|
|
11
|
+
* tuned for, whereas bold text behind an accent prompt reads on any. A long
|
|
12
|
+
* message wraps under its first word, not under the `❯`.
|
|
13
|
+
*/
|
|
14
|
+
export declare const RailUserMessage: FC<UserMessageView>;
|
|
15
|
+
/**
|
|
16
|
+
* Answers and reasoning are printed bare, flush left. Reasoning is already
|
|
17
|
+
* quieter (its own colour from the container), and indenting only it would need
|
|
18
|
+
* a gutter that `assistantGutter` cannot declare per kind.
|
|
19
|
+
*/
|
|
20
|
+
export declare const RailAssistantFrame: FC<AssistantFrameProps>;
|
|
21
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/messages.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoBpF;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,UAAU,CA+ErC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,eAAe,CAgB/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAqC,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useTheme } from '../../components/theme.js';
|
|
4
|
+
import { useTerminalColumns } from '../../hooks/use-terminal-columns.js';
|
|
5
|
+
import { MODEL_LABEL_MAX } from '../shared/limits.js';
|
|
6
|
+
import { cells } from './parts.js';
|
|
7
|
+
const truncateModel = (name) => name.length > MODEL_LABEL_MAX ? `${name.slice(0, MODEL_LABEL_MAX - 1)}…` : name;
|
|
8
|
+
/**
|
|
9
|
+
* A small pill. Under `mono` the badge colour is undefined, so the pill is drawn
|
|
10
|
+
* inverted instead: a mode must never be invisible just because there is no colour.
|
|
11
|
+
*/
|
|
12
|
+
const Badge = ({ mode }) => {
|
|
13
|
+
const theme = useTheme();
|
|
14
|
+
const background = theme.modeBadge[mode];
|
|
15
|
+
return (React.createElement(Text, { backgroundColor: background, color: theme.modeBadgeForeground, inverse: background === undefined, bold: true }, ` ${mode} `));
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* One line, no box: `term² v0.30.0 · Codex/gpt-5.6-luna (high)`, then a pill only
|
|
19
|
+
* when the mode is not the default. On a narrow terminal the version is the first
|
|
20
|
+
* thing to go, and if the rest still does not fit the model moves to its own line.
|
|
21
|
+
*/
|
|
22
|
+
export const RailBanner = ({ version, mode, mentor, providerLabel, model, reasoningEffort, mentorModel, mentorReasoningEffort, }) => {
|
|
23
|
+
const theme = useTheme();
|
|
24
|
+
const columns = useTerminalColumns();
|
|
25
|
+
const effort = reasoningEffort !== 'none' ? ` (${reasoningEffort})` : '';
|
|
26
|
+
const modelText = `${providerLabel}/${model ? truncateModel(model) : '—'}${effort}`;
|
|
27
|
+
const mentorEffort = mentorReasoningEffort !== 'none' ? ` (${mentorReasoningEffort})` : '';
|
|
28
|
+
const mentorText = mentor && mentorModel ? `${truncateModel(mentorModel)}${mentorEffort}` : '';
|
|
29
|
+
const badges = [...(mode !== 'STANDARD' ? [mode] : []), ...(mentor ? ['MENTOR'] : [])];
|
|
30
|
+
const badgeWidth = badges.reduce((total, badge) => total + cells(badge) + 3, 0);
|
|
31
|
+
const versionText = `v${version}`;
|
|
32
|
+
const brandWidth = cells('term²');
|
|
33
|
+
const tailWidth = 3 + cells(modelText) + (mentorText ? 1 + cells(mentorText) : 0) + badgeWidth;
|
|
34
|
+
const withVersion = brandWidth + 1 + cells(versionText) + tailWidth;
|
|
35
|
+
const showVersion = withVersion <= columns;
|
|
36
|
+
const oneLine = showVersion || brandWidth + tailWidth <= columns;
|
|
37
|
+
const brand = (React.createElement(React.Fragment, null,
|
|
38
|
+
React.createElement(Text, { color: theme.accent, bold: true }, "term\u00B2"),
|
|
39
|
+
showVersion && React.createElement(Text, { color: theme.textMuted },
|
|
40
|
+
" ",
|
|
41
|
+
versionText)));
|
|
42
|
+
const separator = React.createElement(Text, { color: theme.textSubtle }, " \u00B7 ");
|
|
43
|
+
const modelNode = (React.createElement(React.Fragment, null,
|
|
44
|
+
React.createElement(Text, { color: theme.textMuted }, providerLabel),
|
|
45
|
+
React.createElement(Text, { color: theme.textSubtle }, "/"),
|
|
46
|
+
React.createElement(Text, { color: theme.accent }, model ? truncateModel(model) : '—'),
|
|
47
|
+
effort && React.createElement(Text, { color: theme.textSubtle }, effort)));
|
|
48
|
+
const badgeNodes = badges.map((badge) => (React.createElement(Text, { key: badge },
|
|
49
|
+
' ',
|
|
50
|
+
React.createElement(Badge, { mode: badge }))));
|
|
51
|
+
const mentorNode = mentorText ? React.createElement(Text, { color: theme.accentAlt },
|
|
52
|
+
" ",
|
|
53
|
+
mentorText) : null;
|
|
54
|
+
if (oneLine) {
|
|
55
|
+
return (React.createElement(Box, { marginBottom: 1 },
|
|
56
|
+
React.createElement(Text, null,
|
|
57
|
+
brand,
|
|
58
|
+
separator,
|
|
59
|
+
modelNode,
|
|
60
|
+
badgeNodes,
|
|
61
|
+
mentorNode)));
|
|
62
|
+
}
|
|
63
|
+
return (React.createElement(Box, { flexDirection: "column", marginBottom: 1 },
|
|
64
|
+
React.createElement(Text, null,
|
|
65
|
+
brand,
|
|
66
|
+
badgeNodes),
|
|
67
|
+
React.createElement(Text, null,
|
|
68
|
+
modelNode,
|
|
69
|
+
mentorNode)));
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* No background band: a band only works against the terminal background it was
|
|
73
|
+
* tuned for, whereas bold text behind an accent prompt reads on any. A long
|
|
74
|
+
* message wraps under its first word, not under the `❯`.
|
|
75
|
+
*/
|
|
76
|
+
export const RailUserMessage = ({ text }) => {
|
|
77
|
+
const theme = useTheme();
|
|
78
|
+
return (React.createElement(Box, null,
|
|
79
|
+
React.createElement(Box, { width: 2, flexShrink: 0 },
|
|
80
|
+
React.createElement(Text, { color: theme.accent, bold: true }, "\u276F")),
|
|
81
|
+
React.createElement(Box, { flexShrink: 1 },
|
|
82
|
+
React.createElement(Text, { bold: true, color: theme.userText }, text))));
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Answers and reasoning are printed bare, flush left. Reasoning is already
|
|
86
|
+
* quieter (its own colour from the container), and indenting only it would need
|
|
87
|
+
* a gutter that `assistantGutter` cannot declare per kind.
|
|
88
|
+
*/
|
|
89
|
+
export const RailAssistantFrame = ({ children }) => React.createElement(React.Fragment, null, children);
|
|
90
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../source/skins/rail/messages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type FC, type ReactNode } from 'react';
|
|
2
|
+
/** Thin, for a calm tool call. */
|
|
3
|
+
export declare const RAIL_THIN = "\u258E";
|
|
4
|
+
/** Heavier, for a call that failed or an approval that needs a decision. */
|
|
5
|
+
export declare const RAIL_HEAVY = "\u258C";
|
|
6
|
+
/** The heaviest, reserved for the riskiest approval class. */
|
|
7
|
+
export declare const RAIL_SOLID = "\u2588";
|
|
8
|
+
/**
|
|
9
|
+
* A rail down the left of its children, one glyph per line, sized by Yoga so it
|
|
10
|
+
* follows wrapped lines and resizes with the terminal. It costs two columns: the
|
|
11
|
+
* glyph and one column of padding, which every caller accounts for.
|
|
12
|
+
*/
|
|
13
|
+
export declare const Rail: FC<{
|
|
14
|
+
glyph: string;
|
|
15
|
+
color: string | undefined;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* A one-cell-tall horizontal rule. In `mono` there is no colour to make it recede,
|
|
20
|
+
* so it is dimmed instead of drawn at full weight.
|
|
21
|
+
*/
|
|
22
|
+
export declare const Hairline: FC;
|
|
23
|
+
/** Columns a string occupies, for the single-cell glyphs this skin is built from. */
|
|
24
|
+
export declare const cells: (value: string) => number;
|
|
25
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/parts.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBvD,kCAAkC;AAClC,eAAO,MAAM,SAAS,WAAM,CAAC;AAC7B,4EAA4E;AAC5E,eAAO,MAAM,UAAU,WAAM,CAAC;AAC9B,8DAA8D;AAC9D,eAAO,MAAM,UAAU,WAAM,CAAC;AAE9B;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAgBtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,EActB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,KAAK,UAAW,MAAM,KAAG,MAAkC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box } from 'ink';
|
|
3
|
+
import { useTheme } from '../../components/theme.js';
|
|
4
|
+
/** A border style that draws only its left edge, as one repeated glyph: the rail. */
|
|
5
|
+
const railStyle = (glyph) => ({
|
|
6
|
+
topLeft: '',
|
|
7
|
+
top: '',
|
|
8
|
+
topRight: '',
|
|
9
|
+
right: '',
|
|
10
|
+
bottomRight: '',
|
|
11
|
+
bottom: '',
|
|
12
|
+
bottomLeft: '',
|
|
13
|
+
left: glyph,
|
|
14
|
+
});
|
|
15
|
+
/** Thin, for a calm tool call. */
|
|
16
|
+
export const RAIL_THIN = '▎';
|
|
17
|
+
/** Heavier, for a call that failed or an approval that needs a decision. */
|
|
18
|
+
export const RAIL_HEAVY = '▌';
|
|
19
|
+
/** The heaviest, reserved for the riskiest approval class. */
|
|
20
|
+
export const RAIL_SOLID = '█';
|
|
21
|
+
/**
|
|
22
|
+
* A rail down the left of its children, one glyph per line, sized by Yoga so it
|
|
23
|
+
* follows wrapped lines and resizes with the terminal. It costs two columns: the
|
|
24
|
+
* glyph and one column of padding, which every caller accounts for.
|
|
25
|
+
*/
|
|
26
|
+
export const Rail = ({ glyph, color, children, }) => (React.createElement(Box, { flexDirection: "column", borderStyle: railStyle(glyph), borderColor: color, borderTop: false, borderBottom: false, borderRight: false, paddingLeft: 1 }, children));
|
|
27
|
+
/**
|
|
28
|
+
* A one-cell-tall horizontal rule. In `mono` there is no colour to make it recede,
|
|
29
|
+
* so it is dimmed instead of drawn at full weight.
|
|
30
|
+
*/
|
|
31
|
+
export const Hairline = () => {
|
|
32
|
+
const theme = useTheme();
|
|
33
|
+
return (React.createElement(Box, { width: "100%", borderStyle: "single", borderColor: theme.border, borderDimColor: theme.border === undefined, borderTop: true, borderBottom: false, borderLeft: false, borderRight: false }));
|
|
34
|
+
};
|
|
35
|
+
/** Columns a string occupies, for the single-cell glyphs this skin is built from. */
|
|
36
|
+
export const cells = (value) => Array.from(value).length;
|
|
37
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../../source/skins/rail/parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,qFAAqF;AACrF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,EAAE;IACX,GAAG,EAAE,EAAE;IACP,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,KAAK;CACZ,CAAC,CAAC;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAC7B,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAC9B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC;AAE9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAA0E,CAAC,EAC1F,KAAK,EACL,KAAK,EACL,QAAQ,GACT,EAAE,EAAE,CAAC,CACJ,oBAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,EAC7B,WAAW,EAAE,KAAK,EAClB,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,KAAK,EACnB,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,CAAC,IAEb,QAAQ,CACL,CACP,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAO,GAAG,EAAE;IAC/B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,oBAAC,GAAG,IACF,KAAK,EAAC,MAAM,EACZ,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,cAAc,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,EAC1C,SAAS,QACT,YAAY,EAAE,KAAK,EACnB,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,KAAK,GAClB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { StatusView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* One line when nothing is wrong: `Sandboxed · codex/gpt-5.6-luna high · ctx ▰▰▰▱▱ 84% · $0.12`.
|
|
5
|
+
* A second line appears only for an alert or provider quota. Low-priority
|
|
6
|
+
* segments drop by their `tier` as the terminal narrows; whatever must stay and
|
|
7
|
+
* still does not fit wraps onto another line rather than being cut.
|
|
8
|
+
*/
|
|
9
|
+
export declare const RailStatusBar: FC<StatusView>;
|
|
10
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../source/skins/rail/status.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAyD,UAAU,EAAE,MAAM,aAAa,CAAC;AA8JrG;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,UAAU,CAyCxC,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { GLYPH_WARNING, useTheme } from '../../components/theme.js';
|
|
4
|
+
import { CONTEXT_DANGER_PERCENT, CONTEXT_WARN_PERCENT, contextTone, gaugeBar } from '../shared/gauge.js';
|
|
5
|
+
import { cells } from './parts.js';
|
|
6
|
+
const GAUGE_CELLS = 5;
|
|
7
|
+
const SEPARATOR = ' · ';
|
|
8
|
+
const SEPARATOR_WIDTH = cells(SEPARATOR);
|
|
9
|
+
const widthOf = (item) => item.parts.reduce((total, part) => total + cells(part.text), 0);
|
|
10
|
+
function segment(view, overrides = {}) {
|
|
11
|
+
if (!view.text)
|
|
12
|
+
return undefined;
|
|
13
|
+
return {
|
|
14
|
+
id: view.id,
|
|
15
|
+
parts: [{ text: view.text.trim(), tone: view.tone, bold: view.bold }],
|
|
16
|
+
tier: view.tier,
|
|
17
|
+
...overrides,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `ctx ▰▰▰▱▱ 84%`, quiet until it matters. At 75% the number turns bold and warm;
|
|
22
|
+
* at 90% a `▲` is added, so a nearly-full context is noticed in `mono` too. A
|
|
23
|
+
* context that is filling up is never dropped for space.
|
|
24
|
+
*/
|
|
25
|
+
function contextItem(percent, fallback) {
|
|
26
|
+
if (percent === undefined)
|
|
27
|
+
return fallback && segment(fallback);
|
|
28
|
+
const tone = contextTone(percent);
|
|
29
|
+
const hot = percent >= CONTEXT_WARN_PERCENT;
|
|
30
|
+
const danger = percent >= CONTEXT_DANGER_PERCENT;
|
|
31
|
+
return {
|
|
32
|
+
id: 'context',
|
|
33
|
+
tier: hot ? undefined : fallback?.tier,
|
|
34
|
+
parts: [
|
|
35
|
+
{ text: 'ctx ', tone: 'textSubtle' },
|
|
36
|
+
{ text: `${gaugeBar(percent, GAUGE_CELLS)} ${percent}%${danger ? ` ${GLYPH_WARNING}` : ''}`, tone, bold: hot },
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** `gpt-5.6-luna high`: the effort is a quiet suffix of the model, not its own segment. */
|
|
41
|
+
const stripLeadingDot = (text) => text.replace(/^[\s·]+/, '');
|
|
42
|
+
/** The segments this skin shows, in its own order: where, how safe, which model, then the numbers. */
|
|
43
|
+
function buildItems({ config, metrics, gauges }) {
|
|
44
|
+
const byId = (list, id) => list.find((view) => view.id === id);
|
|
45
|
+
const items = [];
|
|
46
|
+
const sshMarker = byId(config, 'ssh-marker');
|
|
47
|
+
const sshDetail = byId(config, 'ssh-detail');
|
|
48
|
+
items.push(sshMarker && segment(sshMarker));
|
|
49
|
+
items.push(sshDetail && segment(sshDetail, { glue: true }));
|
|
50
|
+
const safety = byId(config, 'safety');
|
|
51
|
+
const mode = byId(config, 'mode');
|
|
52
|
+
const queue = byId(config, 'queue');
|
|
53
|
+
const model = byId(config, 'provider-model');
|
|
54
|
+
const reasoning = byId(config, 'reasoning');
|
|
55
|
+
const mentor = byId(config, 'mentor');
|
|
56
|
+
items.push(safety && segment(safety));
|
|
57
|
+
items.push(mode && segment(mode));
|
|
58
|
+
items.push(queue && segment(queue));
|
|
59
|
+
items.push(model && segment(model));
|
|
60
|
+
items.push(reasoning && segment({ ...reasoning, text: stripLeadingDot(reasoning.text), tone: 'textSubtle' }, { glue: true }));
|
|
61
|
+
items.push(mentor && segment(mentor));
|
|
62
|
+
items.push(contextItem(gauges.contextPercent, byId(metrics, 'context')));
|
|
63
|
+
const cost = byId(metrics, 'cost');
|
|
64
|
+
const cache = byId(metrics, 'cache');
|
|
65
|
+
const speed = byId(metrics, 'speed');
|
|
66
|
+
items.push(cost && segment(cost));
|
|
67
|
+
items.push(cache && segment(cache));
|
|
68
|
+
items.push(speed && segment({ ...speed, text: speed.text.replace(/^\((.*)\)$/, '$1') }));
|
|
69
|
+
return items.filter((item) => item !== undefined);
|
|
70
|
+
}
|
|
71
|
+
const separatorBefore = (items, index) => index === 0 ? 0 : items[index].glue ? 1 : SEPARATOR_WIDTH;
|
|
72
|
+
const totalWidth = (items) => items.reduce((total, item, index) => total + separatorBefore(items, index) + widthOf(item), 0);
|
|
73
|
+
/** Drops the lowest-tier items one at a time until the line fits, or only never-dropped ones remain. */
|
|
74
|
+
function fitItems(items, budget) {
|
|
75
|
+
let kept = items;
|
|
76
|
+
while (totalWidth(kept) > budget) {
|
|
77
|
+
const droppable = kept.filter((item) => item.tier !== undefined);
|
|
78
|
+
if (droppable.length === 0)
|
|
79
|
+
break;
|
|
80
|
+
// Lowest tier first; among equals the one furthest right, which is the least important by position.
|
|
81
|
+
const lowest = Math.min(...droppable.map((item) => item.tier));
|
|
82
|
+
const victim = [...droppable].reverse().find((item) => item.tier === lowest);
|
|
83
|
+
kept = kept.filter((item) => item !== victim);
|
|
84
|
+
// A glued item belongs to the item before it: if that was the victim, the glue has nothing to attach to.
|
|
85
|
+
if (kept[0]?.glue)
|
|
86
|
+
kept = [{ ...kept[0], glue: false }, ...kept.slice(1)];
|
|
87
|
+
}
|
|
88
|
+
return kept;
|
|
89
|
+
}
|
|
90
|
+
const ItemText = ({ item }) => {
|
|
91
|
+
const theme = useTheme();
|
|
92
|
+
return (React.createElement(React.Fragment, null, item.parts.map((part, index) => (React.createElement(Text, { key: index, color: part.tone ? theme[part.tone] : undefined, bold: part.bold }, part.text)))));
|
|
93
|
+
};
|
|
94
|
+
/** `5H ▰▰▱▱▱ 42%→3h`: a window of provider quota as a mini gauge. */
|
|
95
|
+
const QuotaGauge = ({ window }) => {
|
|
96
|
+
const theme = useTheme();
|
|
97
|
+
const tone = theme[contextTone(window.percent)];
|
|
98
|
+
return (React.createElement(Text, null,
|
|
99
|
+
React.createElement(Text, { color: theme.textSubtle },
|
|
100
|
+
window.label,
|
|
101
|
+
" "),
|
|
102
|
+
React.createElement(Text, { color: tone },
|
|
103
|
+
gaugeBar(window.percent, GAUGE_CELLS),
|
|
104
|
+
" ",
|
|
105
|
+
window.percent,
|
|
106
|
+
"%"),
|
|
107
|
+
window.resetText ? React.createElement(Text, { color: theme.textSubtle },
|
|
108
|
+
"\u2192",
|
|
109
|
+
window.resetText) : null));
|
|
110
|
+
};
|
|
111
|
+
const Alert = ({ alert }) => {
|
|
112
|
+
const theme = useTheme();
|
|
113
|
+
return (React.createElement(Text, null, alert.parts.map((part, index) => (React.createElement(Text, { key: index, color: theme[part.tone], bold: part.bold }, part.text)))));
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* One line when nothing is wrong: `Sandboxed · codex/gpt-5.6-luna high · ctx ▰▰▰▱▱ 84% · $0.12`.
|
|
117
|
+
* A second line appears only for an alert or provider quota. Low-priority
|
|
118
|
+
* segments drop by their `tier` as the terminal narrows; whatever must stay and
|
|
119
|
+
* still does not fit wraps onto another line rather than being cut.
|
|
120
|
+
*/
|
|
121
|
+
export const RailStatusBar = (view) => {
|
|
122
|
+
const theme = useTheme();
|
|
123
|
+
const { columns, alerts, quotaText, gauges } = view;
|
|
124
|
+
const kept = fitItems(buildItems(view), Math.max(1, columns));
|
|
125
|
+
const hasQuota = gauges.quotaWindows.length > 0 || quotaText !== '';
|
|
126
|
+
// Units, not items, are what wraps: an effort stays beside its model. The
|
|
127
|
+
// separator trails its unit, so a wrapped line never begins with a dot.
|
|
128
|
+
const units = [];
|
|
129
|
+
for (const item of kept) {
|
|
130
|
+
if (item.glue && units.length > 0)
|
|
131
|
+
units[units.length - 1].push(item);
|
|
132
|
+
else
|
|
133
|
+
units.push([item]);
|
|
134
|
+
}
|
|
135
|
+
return (React.createElement(Box, { flexDirection: "column", width: "100%" },
|
|
136
|
+
React.createElement(Box, { flexWrap: "wrap", columnGap: 1 }, units.map((unit, unitIndex) => (React.createElement(Text, { key: unit[0].id },
|
|
137
|
+
unit.map((item, itemIndex) => (React.createElement(React.Fragment, { key: item.id },
|
|
138
|
+
itemIndex > 0 && ' ',
|
|
139
|
+
React.createElement(ItemText, { item: item })))),
|
|
140
|
+
unitIndex < units.length - 1 && React.createElement(Text, { color: theme.textSubtle }, " \u00B7"))))),
|
|
141
|
+
(alerts.length > 0 || hasQuota) && (React.createElement(Box, { flexWrap: "wrap", columnGap: 2 },
|
|
142
|
+
alerts.map((alert) => (React.createElement(Alert, { key: alert.id, alert: alert }))),
|
|
143
|
+
gauges.quotaWindows.length > 0
|
|
144
|
+
? gauges.quotaWindows.map((window) => React.createElement(QuotaGauge, { key: window.label, window: window }))
|
|
145
|
+
: quotaText && React.createElement(Text, { color: theme.textSubtle }, quotaText)))));
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=status.js.map
|