@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,44 @@
|
|
|
1
|
+
import { ZenShellActivity, ZenTaskPanel, ZEN_TASK_PANEL_GUTTER } from './activity.js';
|
|
2
|
+
import { ZenMenuFrame, ZenQuestionPrompt, ZenSubagentFeed, ZenToolSection } from './body.js';
|
|
3
|
+
import { classicSkin } from '../classic/index.js';
|
|
4
|
+
import { ZenApprovalChoices, ZenApprovalFrame } from './approval.js';
|
|
5
|
+
import { ZenHints, ZenInputFrame, ZenLiveDivider, ZenPromptMarker, ZenWorkingIndicator } from './live-region.js';
|
|
6
|
+
import { ASSISTANT_GUTTER, ZenAssistantFrame, ZenBanner, ZenUserMessage } from './messages.js';
|
|
7
|
+
import { ZenStatusBar } from './status.js';
|
|
8
|
+
import { ZenToolFrame, ZenToolGroupSummary, ZenToolHeader } from './tools.js';
|
|
9
|
+
/**
|
|
10
|
+
* "Zen": conversation first. One column of prose with a `◆` in its margin, tool
|
|
11
|
+
* calls collapsed to quiet one-liners that only turn red when they fail, a
|
|
12
|
+
* borderless prompt, a status line you only notice when it has something to say,
|
|
13
|
+
* and an approval that reads as a sentence with the answers on one line.
|
|
14
|
+
*
|
|
15
|
+
* It spends colour on trouble and shape on danger, and carries the rest in
|
|
16
|
+
* weight and whitespace, so it reads the same in a terminal with no colour.
|
|
17
|
+
*/
|
|
18
|
+
export const zenSkin = {
|
|
19
|
+
...classicSkin,
|
|
20
|
+
name: 'zen',
|
|
21
|
+
taskPanelGutter: ZEN_TASK_PANEL_GUTTER,
|
|
22
|
+
assistantGutter: ASSISTANT_GUTTER,
|
|
23
|
+
Banner: ZenBanner,
|
|
24
|
+
UserMessage: ZenUserMessage,
|
|
25
|
+
AssistantFrame: ZenAssistantFrame,
|
|
26
|
+
ToolFrame: ZenToolFrame,
|
|
27
|
+
ToolHeader: ZenToolHeader,
|
|
28
|
+
ToolGroupSummary: ZenToolGroupSummary,
|
|
29
|
+
WorkingIndicator: ZenWorkingIndicator,
|
|
30
|
+
LiveDivider: ZenLiveDivider,
|
|
31
|
+
PromptMarker: ZenPromptMarker,
|
|
32
|
+
InputFrame: ZenInputFrame,
|
|
33
|
+
Hints: ZenHints,
|
|
34
|
+
ShellActivity: ZenShellActivity,
|
|
35
|
+
TaskPanel: ZenTaskPanel,
|
|
36
|
+
ApprovalFrame: ZenApprovalFrame,
|
|
37
|
+
ApprovalChoices: ZenApprovalChoices,
|
|
38
|
+
QuestionPrompt: ZenQuestionPrompt,
|
|
39
|
+
SubagentFeed: ZenSubagentFeed,
|
|
40
|
+
ToolSection: ZenToolSection,
|
|
41
|
+
MenuFrame: ZenMenuFrame,
|
|
42
|
+
StatusBar: ZenStatusBar,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/skins/zen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,GAAG,WAAW;IACd,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,qBAAqB;IACtC,eAAe,EAAE,gBAAgB;IACjC,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,cAAc;IAC3B,cAAc,EAAE,iBAAiB;IACjC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,aAAa;IACzB,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,aAAa;IACzB,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,YAAY;IACvB,aAAa,EAAE,gBAAgB;IAC/B,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;CACxB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { HintsProps, InputFrameProps, PromptMarkerProps, WorkingIndicatorView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* `◆ thinking ···`: the answer's own marker, dimmed, with a slow breath beside
|
|
5
|
+
* what is happening. The `◆` is the one thing that does not move, so the line
|
|
6
|
+
* reads as "the next answer is on its way" even in a terminal that shows no colour.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ZenWorkingIndicator: FC<WorkingIndicatorView>;
|
|
9
|
+
/** Whitespace is the divider; the live controls are already set off by the blank line above them. */
|
|
10
|
+
export declare const ZenLiveDivider: FC;
|
|
11
|
+
/** The marker is the whole identity of the input: `›` to talk, `!` to run, a question after a refusal. */
|
|
12
|
+
export declare const ZenPromptMarker: FC<PromptMarkerProps>;
|
|
13
|
+
/** Borderless: the input is a line like any other, which is what keeps the page calm. */
|
|
14
|
+
export declare const ZenInputFrame: FC<InputFrameProps>;
|
|
15
|
+
/**
|
|
16
|
+
* Every hint is kept; they are only made small. Keys sit one step above their
|
|
17
|
+
* verbs so the eye can find `esc` without reading the line, and the whole line is
|
|
18
|
+
* the dimmest text on screen.
|
|
19
|
+
*/
|
|
20
|
+
export declare const ZenHints: FC<HintsProps>;
|
|
21
|
+
//# sourceMappingURL=live-region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-region.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/live-region.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAyBxG;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,oBAAoB,CAWxD,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,cAAc,EAAE,EAAe,CAAC;AAE7C,0GAA0G;AAC1G,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,iBAAiB,CAqBjD,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAA2C,CAAC;AAE1F;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,UAAU,CAanC,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useTheme } from '../../components/theme.js';
|
|
4
|
+
import { DOT_SPINNER, useSpinnerFrame } from '../shared/spinner.js';
|
|
5
|
+
import { MARKER_COLUMNS, useZenStyles } from './style.js';
|
|
6
|
+
/** Short waits stay calm: a count only appears once the wait is long enough to wonder about. */
|
|
7
|
+
const SHOW_ELAPSED_AFTER_SECONDS = 10;
|
|
8
|
+
const labelFor = ({ phase, toolName }) => {
|
|
9
|
+
switch (phase) {
|
|
10
|
+
case 'thinking':
|
|
11
|
+
return 'thinking';
|
|
12
|
+
case 'generating':
|
|
13
|
+
return 'writing';
|
|
14
|
+
case 'tool_call':
|
|
15
|
+
return toolName ? `using ${toolName}` : 'calling a tool';
|
|
16
|
+
default:
|
|
17
|
+
return 'working';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/** The breathing dots. Their own component so only these three cells re-render on each tick. */
|
|
21
|
+
const BreathingDots = () => {
|
|
22
|
+
const frame = useSpinnerFrame(DOT_SPINNER, true, 300);
|
|
23
|
+
return React.createElement(Text, null, frame);
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* `◆ thinking ···`: the answer's own marker, dimmed, with a slow breath beside
|
|
27
|
+
* what is happening. The `◆` is the one thing that does not move, so the line
|
|
28
|
+
* reads as "the next answer is on its way" even in a terminal that shows no colour.
|
|
29
|
+
*/
|
|
30
|
+
export const ZenWorkingIndicator = (view) => {
|
|
31
|
+
const theme = useTheme();
|
|
32
|
+
const { faint } = useZenStyles();
|
|
33
|
+
return (React.createElement(Box, { paddingLeft: MARKER_COLUMNS },
|
|
34
|
+
React.createElement(Text, { ...faint },
|
|
35
|
+
React.createElement(Text, { color: theme.accent }, "\u25C6"),
|
|
36
|
+
" ",
|
|
37
|
+
labelFor(view),
|
|
38
|
+
" ",
|
|
39
|
+
React.createElement(BreathingDots, null),
|
|
40
|
+
view.elapsedSeconds >= SHOW_ELAPSED_AFTER_SECONDS ? ` ${view.elapsedSeconds}s` : '')));
|
|
41
|
+
};
|
|
42
|
+
/** Whitespace is the divider; the live controls are already set off by the blank line above them. */
|
|
43
|
+
export const ZenLiveDivider = () => null;
|
|
44
|
+
/** The marker is the whole identity of the input: `›` to talk, `!` to run, a question after a refusal. */
|
|
45
|
+
export const ZenPromptMarker = ({ mode }) => {
|
|
46
|
+
const theme = useTheme();
|
|
47
|
+
if (mode === 'rejection') {
|
|
48
|
+
return (React.createElement(Text, { color: theme.warning, bold: true },
|
|
49
|
+
"why?",
|
|
50
|
+
' '));
|
|
51
|
+
}
|
|
52
|
+
if (mode === 'shell') {
|
|
53
|
+
return (React.createElement(Text, { color: theme.danger, bold: true },
|
|
54
|
+
"!",
|
|
55
|
+
' '));
|
|
56
|
+
}
|
|
57
|
+
return (React.createElement(Text, { color: theme.accent, bold: true },
|
|
58
|
+
"\u203A",
|
|
59
|
+
' '));
|
|
60
|
+
};
|
|
61
|
+
/** Borderless: the input is a line like any other, which is what keeps the page calm. */
|
|
62
|
+
export const ZenInputFrame = ({ children }) => React.createElement(Box, null, children);
|
|
63
|
+
/**
|
|
64
|
+
* Every hint is kept; they are only made small. Keys sit one step above their
|
|
65
|
+
* verbs so the eye can find `esc` without reading the line, and the whole line is
|
|
66
|
+
* the dimmest text on screen.
|
|
67
|
+
*/
|
|
68
|
+
export const ZenHints = ({ hints }) => {
|
|
69
|
+
const theme = useTheme();
|
|
70
|
+
const { quiet, faint } = useZenStyles();
|
|
71
|
+
return (React.createElement(Text, { ...faint }, hints.map(([key, action, keyColor], index) => (React.createElement(React.Fragment, { key: `${key}:${action}` },
|
|
72
|
+
index > 0 ? ' · ' : '',
|
|
73
|
+
keyColor ? React.createElement(Text, { color: theme[keyColor] }, key) : React.createElement(Text, { ...quiet }, key),
|
|
74
|
+
" ",
|
|
75
|
+
action)))));
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=live-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-region.js","sourceRoot":"","sources":["../../../source/skins/zen/live-region.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { AssistantFrameProps, BannerView, UserMessageView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The answer is the page, so the banner is only a signature: the name, the
|
|
5
|
+
* version beside it, and one muted line saying what it is talking to. The mode
|
|
6
|
+
* only gets a word when it is not the default; its absence is the signal.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ZenBanner: FC<BannerView>;
|
|
9
|
+
/**
|
|
10
|
+
* A bare bold line behind an accent `›`: the same marker the prompt uses, so what
|
|
11
|
+
* you typed reads as the line you sent. No band, no box. Continuation lines hang
|
|
12
|
+
* under the first word. The container already puts two blank lines above a user
|
|
13
|
+
* turn, which is all the breathing room it needs.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ZenUserMessage: FC<UserMessageView>;
|
|
16
|
+
/** Columns the frame consumes beside the body (marker column plus right slack); declared as `assistantGutter`. */
|
|
17
|
+
export declare const ASSISTANT_GUTTER: number;
|
|
18
|
+
/**
|
|
19
|
+
* The answer hangs off a `◆` in the margin and its body is indented to align
|
|
20
|
+
* with the first word, the way prose sits beside a bullet. Reasoning gets the
|
|
21
|
+
* hollow `◇` instead, so a thought is told apart from an answer by shape and not
|
|
22
|
+
* only by the dim colour the container already gives its text (which does not
|
|
23
|
+
* exist in `mono`). The frame cannot recolour markdown it did not render, so the
|
|
24
|
+
* marker is what carries the difference.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ZenAssistantFrame: FC<AssistantFrameProps>;
|
|
27
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/messages.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,UAAU,CA4CpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,eAAe,CAc9C,CAAC;AAaF,kHAAkH;AAClH,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,mBAAmB,CAarD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { useTheme } from '../../components/theme.js';
|
|
4
|
+
import { MARKER_COLUMNS, useZenStyles } from './style.js';
|
|
5
|
+
/**
|
|
6
|
+
* The answer is the page, so the banner is only a signature: the name, the
|
|
7
|
+
* version beside it, and one muted line saying what it is talking to. The mode
|
|
8
|
+
* only gets a word when it is not the default; its absence is the signal.
|
|
9
|
+
*/
|
|
10
|
+
export const ZenBanner = ({ version, mode, mentor, providerLabel, model, reasoningEffort, mentorModel, mentorReasoningEffort, }) => {
|
|
11
|
+
const theme = useTheme();
|
|
12
|
+
const { quiet, faint } = useZenStyles();
|
|
13
|
+
return (React.createElement(Box, { flexDirection: "column", width: "100%", paddingTop: 1, marginBottom: 1 },
|
|
14
|
+
React.createElement(Text, null,
|
|
15
|
+
React.createElement(Text, { color: theme.accent, bold: true }, "term\u00B2"),
|
|
16
|
+
React.createElement(Text, { ...faint },
|
|
17
|
+
" v",
|
|
18
|
+
version),
|
|
19
|
+
mode !== 'STANDARD' && (React.createElement(Text, { color: theme.accent, bold: true },
|
|
20
|
+
' ',
|
|
21
|
+
mode)),
|
|
22
|
+
mentor && (React.createElement(Text, { color: theme.accentAlt, bold: true },
|
|
23
|
+
' ',
|
|
24
|
+
"MENTOR"))),
|
|
25
|
+
React.createElement(Text, { ...quiet },
|
|
26
|
+
providerLabel,
|
|
27
|
+
"/",
|
|
28
|
+
model ?? '—',
|
|
29
|
+
reasoningEffort !== 'none' && React.createElement(Text, { ...faint },
|
|
30
|
+
" (",
|
|
31
|
+
reasoningEffort,
|
|
32
|
+
")"),
|
|
33
|
+
mentor && mentorModel && (React.createElement(React.Fragment, null,
|
|
34
|
+
React.createElement(Text, { ...faint }, " \u00B7 mentor "),
|
|
35
|
+
mentorModel,
|
|
36
|
+
mentorReasoningEffort !== 'none' && React.createElement(Text, { ...faint },
|
|
37
|
+
" (",
|
|
38
|
+
mentorReasoningEffort,
|
|
39
|
+
")"))))));
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* A bare bold line behind an accent `›`: the same marker the prompt uses, so what
|
|
43
|
+
* you typed reads as the line you sent. No band, no box. Continuation lines hang
|
|
44
|
+
* under the first word. The container already puts two blank lines above a user
|
|
45
|
+
* turn, which is all the breathing room it needs.
|
|
46
|
+
*/
|
|
47
|
+
export const ZenUserMessage = ({ text }) => {
|
|
48
|
+
const theme = useTheme();
|
|
49
|
+
return (React.createElement(Box, { width: "100%" },
|
|
50
|
+
React.createElement(Box, { width: MARKER_COLUMNS, flexShrink: 0 },
|
|
51
|
+
React.createElement(Text, { color: theme.accent, bold: true }, "\u203A")),
|
|
52
|
+
React.createElement(Text, { bold: true, color: theme.text }, text)));
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Blank columns kept on the right of the body. Markdown list items are a bullet
|
|
56
|
+
* box beside a text box, and Yoga lays that row out against the text's unwrapped
|
|
57
|
+
* width: a line that only just overflows is left unwrapped, running over its
|
|
58
|
+
* container by up to the width of the bullet and its margin (2). Indenting the body
|
|
59
|
+
* is enough to push such a line past the terminal edge, and a skin cannot reach
|
|
60
|
+
* into the renderer to fix it, so the frame leaves room instead. On a page this
|
|
61
|
+
* sparse the margin is not noticeable.
|
|
62
|
+
*/
|
|
63
|
+
const RIGHT_SLACK = 2;
|
|
64
|
+
/** Columns the frame consumes beside the body (marker column plus right slack); declared as `assistantGutter`. */
|
|
65
|
+
export const ASSISTANT_GUTTER = MARKER_COLUMNS + RIGHT_SLACK;
|
|
66
|
+
/**
|
|
67
|
+
* The answer hangs off a `◆` in the margin and its body is indented to align
|
|
68
|
+
* with the first word, the way prose sits beside a bullet. Reasoning gets the
|
|
69
|
+
* hollow `◇` instead, so a thought is told apart from an answer by shape and not
|
|
70
|
+
* only by the dim colour the container already gives its text (which does not
|
|
71
|
+
* exist in `mono`). The frame cannot recolour markdown it did not render, so the
|
|
72
|
+
* marker is what carries the difference.
|
|
73
|
+
*/
|
|
74
|
+
export const ZenAssistantFrame = ({ kind, children }) => {
|
|
75
|
+
const theme = useTheme();
|
|
76
|
+
const { faint } = useZenStyles();
|
|
77
|
+
return (React.createElement(Box, null,
|
|
78
|
+
React.createElement(Box, { width: MARKER_COLUMNS, flexShrink: 0 }, kind === 'answer' ? React.createElement(Text, { color: theme.accent }, "\u25C6") : React.createElement(Text, { ...faint }, "\u25C7")),
|
|
79
|
+
React.createElement(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, flexBasis: 0, paddingRight: RIGHT_SLACK }, children)));
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../source/skins/zen/messages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { StatusView } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Nearly invisible. One right-aligned, dim line, `Sandboxed · Codex/gpt-5.6-luna · 84% ctx`,
|
|
5
|
+
* that is allowed to raise its voice in exactly two ways: the context segment warns
|
|
6
|
+
* at 75% and escalates at 90%, and alerts (the reasons the bar speaks up at all)
|
|
7
|
+
* each get their own line in their own tone, above it. Quota appears only when a
|
|
8
|
+
* window is nearly spent.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ZenStatusBar: FC<StatusView>;
|
|
11
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/status.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAyD,UAAU,EAAE,MAAM,aAAa,CAAC;AAuKrG;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,UAAU,CAoDvC,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
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 } from '../shared/gauge.js';
|
|
5
|
+
import { useZenStyles } from './style.js';
|
|
6
|
+
import { cells } from './width.js';
|
|
7
|
+
/** A quota window is only worth a word once it is nearly spent. */
|
|
8
|
+
const QUOTA_SHOWN_ABOVE_PERCENT = 75;
|
|
9
|
+
const QUOTA_URGENT_PERCENT = 90;
|
|
10
|
+
const SEPARATOR = ' · ';
|
|
11
|
+
const toneLook = (tone, bold) => tone === undefined || tone === 'textSubtle' ? { kind: 'faint' } : { kind: 'tone', tone, bold };
|
|
12
|
+
/**
|
|
13
|
+
* The line zen says everything on. The safety label leads because it answers the
|
|
14
|
+
* question people actually glance down here for; the model follows, then whatever
|
|
15
|
+
* is worth a word. Only what the container flagged as attention keeps its tone.
|
|
16
|
+
*/
|
|
17
|
+
function configFragments(config) {
|
|
18
|
+
const byId = new Map(config.filter((segment) => segment.text).map((segment) => [segment.id, segment]));
|
|
19
|
+
const order = ['ssh-marker', 'ssh-detail', 'safety', 'mode', 'queue', 'provider-model', 'reasoning', 'mentor'];
|
|
20
|
+
const fragments = [];
|
|
21
|
+
for (const id of order) {
|
|
22
|
+
const segment = byId.get(id);
|
|
23
|
+
if (!segment)
|
|
24
|
+
continue;
|
|
25
|
+
// `reasoning` arrives as " · high", already carrying its own separator; ssh-detail follows its marker.
|
|
26
|
+
const attached = id === 'reasoning' || id === 'ssh-detail';
|
|
27
|
+
const look = id === 'safety'
|
|
28
|
+
? toneLook(segment.tone, segment.tone === 'danger')
|
|
29
|
+
: id === 'provider-model'
|
|
30
|
+
? { kind: 'quiet' }
|
|
31
|
+
: id === 'reasoning'
|
|
32
|
+
? { kind: 'faint' }
|
|
33
|
+
: toneLook(segment.tone, segment.bold);
|
|
34
|
+
fragments.push({
|
|
35
|
+
id,
|
|
36
|
+
text: attached ? segment.text : segment.text.trim(),
|
|
37
|
+
look,
|
|
38
|
+
separated: !attached,
|
|
39
|
+
tier: segment.tier,
|
|
40
|
+
group: 'config',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return fragments;
|
|
44
|
+
}
|
|
45
|
+
const contextText = (percent, level) => {
|
|
46
|
+
const base = `${percent}% ctx`;
|
|
47
|
+
if (level === 'short')
|
|
48
|
+
return percent >= CONTEXT_DANGER_PERCENT ? `${GLYPH_WARNING} ${base}` : base;
|
|
49
|
+
if (percent >= CONTEXT_DANGER_PERCENT)
|
|
50
|
+
return `${GLYPH_WARNING} ${base} — run /compact`;
|
|
51
|
+
if (percent >= CONTEXT_WARN_PERCENT)
|
|
52
|
+
return `${base} — consider /compact`;
|
|
53
|
+
return base;
|
|
54
|
+
};
|
|
55
|
+
const quotaFragments = (windows) => windows
|
|
56
|
+
.filter((window) => window.percent > QUOTA_SHOWN_ABOVE_PERCENT)
|
|
57
|
+
.map((window) => ({
|
|
58
|
+
id: `quota-${window.label}`,
|
|
59
|
+
text: `${window.label} ${window.percent}%${window.resetText ? `→${window.resetText}` : ''}`,
|
|
60
|
+
look: window.percent >= QUOTA_URGENT_PERCENT
|
|
61
|
+
? { kind: 'tone', tone: 'warning', bold: true }
|
|
62
|
+
: { kind: 'faint' },
|
|
63
|
+
separated: true,
|
|
64
|
+
// Nearly out of quota is the kind of thing this line exists to say.
|
|
65
|
+
tier: window.percent >= QUOTA_URGENT_PERCENT ? undefined : 2,
|
|
66
|
+
group: 'metrics',
|
|
67
|
+
}));
|
|
68
|
+
function metricFragments(view, contextLevel) {
|
|
69
|
+
const { metrics, gauges } = view;
|
|
70
|
+
const fragments = [];
|
|
71
|
+
for (const segment of metrics) {
|
|
72
|
+
if (!segment.text)
|
|
73
|
+
continue;
|
|
74
|
+
if (segment.id === 'context') {
|
|
75
|
+
const percent = gauges.contextPercent;
|
|
76
|
+
fragments.push({
|
|
77
|
+
id: 'context',
|
|
78
|
+
text: percent === undefined ? segment.text : contextText(percent, contextLevel),
|
|
79
|
+
look: percent === undefined ? { kind: 'faint' } : toneLook(contextTone(percent), percent >= CONTEXT_DANGER_PERCENT),
|
|
80
|
+
separated: true,
|
|
81
|
+
// A window that is filling up is what the line exists to say; below that it is furniture.
|
|
82
|
+
tier: percent !== undefined && percent >= CONTEXT_WARN_PERCENT ? undefined : segment.tier,
|
|
83
|
+
group: 'metrics',
|
|
84
|
+
});
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Numbers that are merely informative (tokens, speed, cache hit rate) are not zen's business. A
|
|
88
|
+
// metric the container has toned, or refused to let go of (a cache-miss warning), is attention.
|
|
89
|
+
const needsAttention = segment.tier === undefined || (segment.tone !== undefined && segment.tone !== 'textSubtle');
|
|
90
|
+
if (segment.id === 'cost' || needsAttention) {
|
|
91
|
+
fragments.push({
|
|
92
|
+
id: segment.id,
|
|
93
|
+
text: segment.text,
|
|
94
|
+
look: toneLook(segment.tone, segment.bold),
|
|
95
|
+
separated: true,
|
|
96
|
+
tier: segment.tier,
|
|
97
|
+
group: 'metrics',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return fragments;
|
|
102
|
+
}
|
|
103
|
+
const widthOf = (fragments) => fragments.reduce((total, fragment, index) => {
|
|
104
|
+
const separator = index > 0 && fragment.separated ? cells(SEPARATOR) : 0;
|
|
105
|
+
return total + separator + cells(fragment.text);
|
|
106
|
+
}, 0);
|
|
107
|
+
/** Sheds whole fragments, lowest tier first, until the line fits; fragments with no tier are never shed. */
|
|
108
|
+
function fit(fragments, budget) {
|
|
109
|
+
const remaining = [...fragments];
|
|
110
|
+
while (widthOf(remaining) > budget) {
|
|
111
|
+
let victim = -1;
|
|
112
|
+
remaining.forEach((fragment, index) => {
|
|
113
|
+
if (fragment.tier === undefined)
|
|
114
|
+
return;
|
|
115
|
+
if (victim === -1 || fragment.tier < remaining[victim].tier)
|
|
116
|
+
victim = index;
|
|
117
|
+
});
|
|
118
|
+
if (victim === -1)
|
|
119
|
+
break;
|
|
120
|
+
remaining.splice(victim, 1);
|
|
121
|
+
}
|
|
122
|
+
return remaining;
|
|
123
|
+
}
|
|
124
|
+
const Alert = ({ alert }) => {
|
|
125
|
+
const theme = useTheme();
|
|
126
|
+
const { colourless } = useZenStyles();
|
|
127
|
+
const text = alert.parts.map((part) => part.text).join('');
|
|
128
|
+
const lead = text.trimStart().startsWith(GLYPH_WARNING) ? null : (React.createElement(Text, { color: alert.parts.some((part) => part.tone === 'danger') ? theme.danger : theme.warning, bold: true },
|
|
129
|
+
GLYPH_WARNING,
|
|
130
|
+
' '));
|
|
131
|
+
return (React.createElement(Box, { justifyContent: "flex-end" },
|
|
132
|
+
React.createElement(Text, { wrap: "wrap" },
|
|
133
|
+
lead,
|
|
134
|
+
alert.parts.map((part, index) => (React.createElement(Text, { key: index, color: theme[part.tone], bold: part.bold || (colourless && part.tone !== 'textSubtle') }, part.text))))));
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Nearly invisible. One right-aligned, dim line, `Sandboxed · Codex/gpt-5.6-luna · 84% ctx`,
|
|
138
|
+
* that is allowed to raise its voice in exactly two ways: the context segment warns
|
|
139
|
+
* at 75% and escalates at 90%, and alerts (the reasons the bar speaks up at all)
|
|
140
|
+
* each get their own line in their own tone, above it. Quota appears only when a
|
|
141
|
+
* window is nearly spent.
|
|
142
|
+
*/
|
|
143
|
+
export const ZenStatusBar = (view) => {
|
|
144
|
+
const theme = useTheme();
|
|
145
|
+
const { quiet, faint, colourless } = useZenStyles();
|
|
146
|
+
const budget = Math.max(1, view.columns - 2);
|
|
147
|
+
// A tone with no colour to carry it has to carry itself in weight.
|
|
148
|
+
const styleOf = (look) => look.kind === 'quiet'
|
|
149
|
+
? quiet
|
|
150
|
+
: look.kind === 'faint'
|
|
151
|
+
? faint
|
|
152
|
+
: { color: theme[look.tone], bold: look.bold || colourless, dimColor: false };
|
|
153
|
+
const assemble = (contextLevel) => [
|
|
154
|
+
...configFragments(view.config),
|
|
155
|
+
...metricFragments(view, contextLevel),
|
|
156
|
+
...quotaFragments(view.gauges.quotaWindows),
|
|
157
|
+
];
|
|
158
|
+
// The advice is the first thing to go; the percentage and its tone carry the warning on their own.
|
|
159
|
+
const full = assemble('full');
|
|
160
|
+
const fragments = fit(widthOf(full) <= budget ? full : assemble('short'), budget);
|
|
161
|
+
// Only when what must stay still does not fit on one line (a narrow terminal with the window filling
|
|
162
|
+
// up) does the line break, and then between its two halves rather than in the middle of one.
|
|
163
|
+
const rows = widthOf(fragments) <= budget
|
|
164
|
+
? [fragments]
|
|
165
|
+
: [fragments.filter((f) => f.group === 'config'), fragments.filter((f) => f.group === 'metrics')];
|
|
166
|
+
if (fragments.length === 0 && view.alerts.length === 0)
|
|
167
|
+
return null;
|
|
168
|
+
return (React.createElement(Box, { marginTop: 1, flexDirection: "column", width: "100%", paddingX: 1 },
|
|
169
|
+
view.alerts.map((alert) => (React.createElement(Alert, { key: alert.id, alert: alert }))),
|
|
170
|
+
rows
|
|
171
|
+
.filter((row) => row.length > 0)
|
|
172
|
+
.map((row) => (React.createElement(Box, { key: row[0].id, justifyContent: "flex-end" },
|
|
173
|
+
React.createElement(Text, { wrap: "wrap" }, row.map((fragment, index) => (React.createElement(React.Fragment, { key: fragment.id },
|
|
174
|
+
index > 0 && fragment.separated && React.createElement(Text, { ...faint }, SEPARATOR),
|
|
175
|
+
React.createElement(Text, { ...styleOf(fragment.look) }, fragment.text))))))))));
|
|
176
|
+
};
|
|
177
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../source/skins/zen/status.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Color } from '../../theme/palettes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Zen is almost all hierarchy and very little chrome, so the quiet levels have to
|
|
4
|
+
* survive a palette with no colour at all. In `mono` every role resolves to
|
|
5
|
+
* `undefined`; there the same ranking is carried by the terminal's `dim`
|
|
6
|
+
* attribute instead, so "recedes" still reads as receding.
|
|
7
|
+
*/
|
|
8
|
+
export interface QuietStyle {
|
|
9
|
+
color: Color;
|
|
10
|
+
dimColor: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ZenStyles {
|
|
13
|
+
/** Secondary text that should still be read: settled tool calls, the model name. */
|
|
14
|
+
quiet: QuietStyle;
|
|
15
|
+
/** Furniture: separators, hints, elapsed times, reasoning. */
|
|
16
|
+
faint: QuietStyle;
|
|
17
|
+
/**
|
|
18
|
+
* True when the palette has no colour. Anything that elsewhere relies on a tone
|
|
19
|
+
* to stand out (a failure, a warning) must then stand out by weight instead.
|
|
20
|
+
*/
|
|
21
|
+
colourless: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function useZenStyles(): ZenStyles;
|
|
24
|
+
/** Columns the zen layers share: the marker column ("◆ ", "✓ ", "▲ ") and the indent under it. */
|
|
25
|
+
export declare const MARKER_COLUMNS = 2;
|
|
26
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,oFAAoF;IACpF,KAAK,EAAE,UAAU,CAAC;IAClB,8DAA8D;IAC9D,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,YAAY,IAAI,SAAS,CASxC;AAED,kGAAkG;AAClG,eAAO,MAAM,cAAc,IAAI,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useTheme } from '../../components/theme.js';
|
|
2
|
+
export function useZenStyles() {
|
|
3
|
+
const theme = useTheme();
|
|
4
|
+
// A palette without colour (mono) answers `undefined` for every role.
|
|
5
|
+
const colourless = theme.textSubtle === undefined;
|
|
6
|
+
return {
|
|
7
|
+
quiet: { color: theme.textMuted, dimColor: colourless },
|
|
8
|
+
faint: { color: theme.textSubtle, dimColor: colourless },
|
|
9
|
+
colourless,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** Columns the zen layers share: the marker column ("◆ ", "✓ ", "▲ ") and the indent under it. */
|
|
13
|
+
export const MARKER_COLUMNS = 2;
|
|
14
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.js","sourceRoot":"","sources":["../../../source/skins/zen/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA0BrD,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,sEAAsE;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IAClD,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;QACvD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;QACxD,UAAU;KACX,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import type { ToolFrameProps, ToolGroupSummaryView, ToolHeaderProps } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tool calls sit under the answer's text column, indented by the width of the
|
|
5
|
+
* `◆` marker, so a turn reads as one column of prose with the machinery tucked
|
|
6
|
+
* into it. The frame wraps header and body together (the container composes
|
|
7
|
+
* them), so the indent is all it can do; the header decides everything else.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ZenToolFrame: FC<ToolFrameProps>;
|
|
10
|
+
/**
|
|
11
|
+
* One quiet line. Colour is spent only on trouble: a failed call is red from its
|
|
12
|
+
* glyph to its last word, everything that went right recedes. A running call is
|
|
13
|
+
* the one other thing allowed to stand out, with a small spinner in the warning
|
|
14
|
+
* tone, because it is the one thing still happening.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ZenToolHeader: FC<ToolHeaderProps>;
|
|
17
|
+
/**
|
|
18
|
+
* One quiet line for a run of calls, and, only when something failed, the failing
|
|
19
|
+
* calls beneath it, in the danger tone. A partly failed run keeps a calm summary:
|
|
20
|
+
* most of it worked, and the line below says exactly what did not.
|
|
21
|
+
*/
|
|
22
|
+
export declare const ZenToolGroupSummary: FC<ToolGroupSummaryView>;
|
|
23
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/tools.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,cAAc,CAI3C,CAAC;AA0BF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAqC7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,oBAAoB,CA+BxD,CAAC"}
|