@deepseek-harness-tui/dsh-tui 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +69 -256
- package/bin/dsh-tui.js +172 -5
- package/cordis.patch.yml +16 -4
- package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
- package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
- package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
- package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
- package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
- package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
- package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
- package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
- package/dsh-ecosystem-spec/registry/README.md +14 -14
- package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
- package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
- package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
- package/lib/types/cc/hyperlink.d.ts +7 -1
- package/lib/types/cc/hyperlink.d.ts.map +1 -1
- package/lib/types/cc/hyperlink.js +3 -2
- package/lib/types/cc/markdown.d.ts.map +1 -1
- package/lib/types/cc/markdown.js +33 -3
- package/lib/types/cc/sessionColors.d.ts +27 -0
- package/lib/types/cc/sessionColors.d.ts.map +1 -0
- package/lib/types/cc/sessionColors.js +39 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +6 -0
- package/lib/types/components/AutoRecapRow.d.ts +23 -0
- package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
- package/lib/types/components/AutoRecapRow.js +23 -0
- package/lib/types/components/ColorPicker.d.ts +17 -0
- package/lib/types/components/ColorPicker.d.ts.map +1 -0
- package/lib/types/components/ColorPicker.js +20 -0
- package/lib/types/components/CommandSuggestions.d.ts +3 -1
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.d.ts +33 -0
- package/lib/types/components/ContextBarView.d.ts.map +1 -0
- package/lib/types/components/ContextBarView.js +46 -0
- package/lib/types/components/EffortInputBorder.d.ts +12 -1
- package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
- package/lib/types/components/EffortInputBorder.js +22 -5
- package/lib/types/components/FileActionsPanel.d.ts +22 -0
- package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
- package/lib/types/components/FileActionsPanel.js +28 -0
- package/lib/types/components/FileSuggestions.d.ts +3 -1
- package/lib/types/components/FileSuggestions.d.ts.map +1 -1
- package/lib/types/components/MessageList.d.ts +3 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +13 -6
- package/lib/types/components/ModelPicker.d.ts +26 -4
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +26 -6
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +365 -57
- package/lib/types/components/RecapPanel.d.ts +25 -0
- package/lib/types/components/RecapPanel.d.ts.map +1 -0
- package/lib/types/components/RecapPanel.js +55 -0
- package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
- package/lib/types/components/ScrollbarGutter.js +55 -4
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +6 -4
- package/lib/types/components/SuggestionCard.d.ts +4 -2
- package/lib/types/components/SuggestionCard.d.ts.map +1 -1
- package/lib/types/components/TimelineRail.d.ts.map +1 -1
- package/lib/types/components/TimelineRail.js +9 -2
- package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +2 -1
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +8 -1
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +36 -8
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +41 -9
- package/lib/types/dsh-adapter/channel.d.ts +101 -2
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +969 -93
- package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/index.js +8 -6
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
- package/lib/types/dsh-adapter/contract.d.ts +1 -1
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +1 -0
- package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
- package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.d.ts +10 -0
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +5 -0
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +317 -8
- package/lib/types/dsh-adapter/presets.d.ts +18 -0
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +31 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +89 -5
- package/lib/types/dsh-adapter/questions.d.ts +19 -2
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +53 -10
- package/lib/types/dsh-adapter/recap.d.ts +49 -0
- package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
- package/lib/types/dsh-adapter/recap.js +121 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessionTree.js +954 -0
- package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
- package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
- package/lib/types/dsh-adapter/shortcuts.js +28 -165
- package/lib/types/dsh-adapter/types.d.ts +1 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/herdr.js +1 -1
- package/lib/types/i18n.d.ts +604 -176
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +206 -72
- package/lib/types/ink/log-update.d.ts.map +1 -1
- package/lib/types/ink/log-update.js +21 -0
- package/lib/types/migrationPrefs.d.ts +60 -0
- package/lib/types/migrationPrefs.d.ts.map +1 -0
- package/lib/types/migrationPrefs.js +97 -0
- package/lib/types/modelGroups.d.ts +72 -0
- package/lib/types/modelGroups.d.ts.map +1 -0
- package/lib/types/modelGroups.js +97 -0
- package/lib/types/modelRecents.d.ts +39 -0
- package/lib/types/modelRecents.d.ts.map +1 -0
- package/lib/types/modelRecents.js +97 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +31 -1
- package/lib/types/oauth.d.ts +15 -0
- package/lib/types/oauth.d.ts.map +1 -0
- package/lib/types/oauth.js +14 -0
- package/lib/types/plugin-spec/registry.d.ts +1 -1
- package/lib/types/plugin-spec/registry.js +1 -1
- package/lib/types/reload.d.ts +109 -0
- package/lib/types/reload.d.ts.map +1 -0
- package/lib/types/reload.js +118 -0
- package/lib/types/screens/Chat.d.ts +3 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +588 -64
- package/lib/types/screens/SessionTree.d.ts +27 -0
- package/lib/types/screens/SessionTree.d.ts.map +1 -0
- package/lib/types/screens/SessionTree.js +555 -0
- package/lib/types/screens/StatusLine.d.ts +0 -9
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +215 -52
- package/lib/types/screens/StatusMetrics.d.ts +35 -3
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +63 -8
- package/lib/types/screens/chatOverlay.d.ts +17 -1
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +3 -1
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +22 -4
- package/lib/types/update.d.ts +159 -0
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +496 -30
- package/lib/types/utils/debug.d.ts +1 -1
- package/lib/types/utils/debug.js +3 -3
- package/lib/types/utils/fileTarget.d.ts +46 -0
- package/lib/types/utils/fileTarget.d.ts.map +1 -0
- package/lib/types/utils/fileTarget.js +178 -0
- package/lib/types/utils/keymap.d.ts +134 -0
- package/lib/types/utils/keymap.d.ts.map +1 -0
- package/lib/types/utils/keymap.js +311 -0
- package/lib/types/utils/mentions.d.ts +25 -2
- package/lib/types/utils/mentions.d.ts.map +1 -1
- package/lib/types/utils/mentions.js +69 -10
- package/lib/types/utils/openExternal.d.ts +50 -0
- package/lib/types/utils/openExternal.d.ts.map +1 -0
- package/lib/types/utils/openExternal.js +170 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
- package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/command/LICENSE +21 -21
- package/node_modules/@dsh-std/command/README.md +26 -26
- package/node_modules/@dsh-std/command/README.zh.md +28 -28
- package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/command/package.json +22 -22
- package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/node_modules/@dsh-std/connection/README.md +42 -42
- package/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/node_modules/@dsh-std/connection/package.json +20 -20
- package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/core/LICENSE +21 -21
- package/node_modules/@dsh-std/core/README.md +13 -13
- package/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/core/package.json +21 -21
- package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
- package/node_modules/@dsh-std/manifest/LICENSE +21 -21
- package/node_modules/@dsh-std/manifest/README.md +5 -5
- package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
- package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/manifest/package.json +20 -20
- package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
- package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/messages/LICENSE +21 -21
- package/node_modules/@dsh-std/messages/README.md +5 -5
- package/node_modules/@dsh-std/messages/README.zh.md +7 -7
- package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/messages/package.json +20 -20
- package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
- package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
- package/node_modules/@dsh-std/presentation/LICENSE +21 -21
- package/node_modules/@dsh-std/presentation/README.md +27 -27
- package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
- package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
- package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/presentation/package.json +25 -25
- package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
- package/node_modules/@dsh-std/storage/LICENSE +21 -21
- package/node_modules/@dsh-std/storage/README.md +5 -5
- package/node_modules/@dsh-std/storage/README.zh.md +7 -7
- package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
- package/node_modules/@dsh-std/storage/package.json +20 -20
- package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
- package/package.json +17 -5
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/instruction-hint.mjs +8 -0
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
- package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
2
3
|
import { Box, Text, useTerminalSize, useTheme } from '../ui.js';
|
|
3
4
|
import { formatTokens } from '../cc/format.js';
|
|
4
5
|
import { t } from '../i18n.js';
|
|
5
6
|
import { formatContextUsage, DEFAULT_STATUS_BAR, normalizeStatusBar } from '../tuiDisplayPrefs.js';
|
|
6
|
-
import { Byline } from '../components/design-system/Byline.js';
|
|
7
7
|
import { ActivityLine, contextPressurePct } from '../components/ActivityLine.js';
|
|
8
8
|
import { GoalStatusChip } from '../components/GoalTodoPanel.js';
|
|
9
9
|
import { modeDisplayName } from '../sessionModes.js';
|
|
10
10
|
import { MiniWake } from '../components/trajectory/MiniWake.js';
|
|
11
|
-
import {
|
|
11
|
+
import { ContextBarView } from '../components/ContextBarView.js';
|
|
12
|
+
import { USED_SEGMENTS, renderMiniContextBar, renderTpsGauge, renderTpsSparkline, speedColor, tpsStats, } from './StatusMetrics.js';
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* mode/hint line last. The right side of the footer shows the latest
|
|
19
|
-
* transient notification (errors in red, warnings in amber — CC style).
|
|
14
|
+
* Render field parts as sibling shrinkable Boxes joined by the Byline
|
|
15
|
+
* separator (` · `). The Box-per-field layout is what makes individual
|
|
16
|
+
* fields hoverable — a Byline inside one Text cannot carry per-field mouse
|
|
17
|
+
* rects — at the cost of truncating each field on its own under pressure
|
|
18
|
+
* instead of truncating the joined string's tail.
|
|
20
19
|
*/
|
|
20
|
+
function FieldLine({ parts, hoverProps, }) {
|
|
21
|
+
const visible = parts.filter(part => part.node !== null && part.node !== undefined && part.node !== false);
|
|
22
|
+
return (_jsx(_Fragment, { children: visible.map((part, index) => (_jsxs(React.Fragment, { children: [index > 0 ? _jsx(Text, { dimColor: true, children: " \u00B7 " }) : null, _jsx(Box, { flexShrink: 1, ...(part.id === undefined ? {} : hoverProps(part.id)), children: _jsx(Text, { wrap: "truncate", children: part.node }) })] }, part.key))) }));
|
|
23
|
+
}
|
|
21
24
|
export function StatusLine({ channel, selectionActive = false, helpOpen = false, wake, }) {
|
|
22
25
|
const { columns } = useTerminalSize();
|
|
23
26
|
const [themeName] = useTheme();
|
|
27
|
+
const [hover, setHover] = React.useState(null);
|
|
28
|
+
const hoverProps = React.useCallback((id) => ({
|
|
29
|
+
onMouseEnter: () => setHover(id),
|
|
30
|
+
// Guarded leave: a late leave from a field the pointer already left must
|
|
31
|
+
// not clobber the field it entered.
|
|
32
|
+
onMouseLeave: () => setHover(current => (current === id ? null : current)),
|
|
33
|
+
}), []);
|
|
24
34
|
const statusBar = channel.minimal
|
|
25
35
|
// Minimal mode overrides every field switch: model + cwd only, so the
|
|
26
36
|
// footer can never grow decorations regardless of saved preferences.
|
|
@@ -32,79 +42,145 @@ export function StatusLine({ channel, selectionActive = false, helpOpen = false,
|
|
|
32
42
|
: usage.input + usage.cacheRead + usage.cacheWrite;
|
|
33
43
|
const contextParts = [];
|
|
34
44
|
if (statusBar.thinking && channel.reasoningEffort !== undefined) {
|
|
35
|
-
contextParts.push(
|
|
45
|
+
contextParts.push({
|
|
46
|
+
key: 'effort',
|
|
47
|
+
node: _jsx(Text, { color: "inactiveShimmer", children: channel.reasoningEffort }),
|
|
48
|
+
});
|
|
36
49
|
}
|
|
37
50
|
if (statusBar.mode && channel.modeIndex > 0) {
|
|
38
|
-
contextParts.push(
|
|
51
|
+
contextParts.push({
|
|
52
|
+
key: 'mode',
|
|
53
|
+
node: (_jsx(Text, { color: channel.mode.plan === true ? 'planMode' : 'warning', children: modeDisplayName(channel.mode) })),
|
|
54
|
+
});
|
|
39
55
|
}
|
|
40
56
|
const formattedContext = statusBar.contextUsage
|
|
41
57
|
? formatContextUsage(contextUsed, channel.contextWindow, statusBar.compact)
|
|
42
58
|
: undefined;
|
|
43
|
-
|
|
59
|
+
// The ctx field's two faces: the idle readout, and the hover state — an
|
|
60
|
+
// in-place pressure bar (the user-liked "text becomes a bar" morph).
|
|
61
|
+
//
|
|
62
|
+
// WIDTH-STABLE BY CONSTRUCTION: the idle variable part is
|
|
63
|
+
// `P + " (" + C + ")"` (either order; P = percent text, C = counts) —
|
|
64
|
+
// len(P)+len(C)+3 cells. The hover variant is `▕+bar+▏ + " " + P` —
|
|
65
|
+
// 3+barLen+len(P) cells. Sizing barLen = len(C) makes them equal, so the
|
|
66
|
+
// morph swaps glyphs in place and NO sibling field, separator, or the
|
|
67
|
+
// right-aligned group moves a single cell (the first attempt used a fixed
|
|
68
|
+
// 10-cell gauge and made the whole row jump).
|
|
69
|
+
const ctxParts = (() => {
|
|
70
|
+
if (formattedContext === undefined)
|
|
71
|
+
return undefined;
|
|
72
|
+
const open = formattedContext.indexOf(' (');
|
|
73
|
+
if (open < 0)
|
|
74
|
+
return undefined;
|
|
75
|
+
const first = formattedContext.slice(0, open);
|
|
76
|
+
const second = formattedContext.slice(open + 2, -1);
|
|
77
|
+
if (first.endsWith('%'))
|
|
78
|
+
return { percent: first, counts: second };
|
|
79
|
+
if (second.endsWith('%'))
|
|
80
|
+
return { percent: second, counts: first };
|
|
81
|
+
return undefined;
|
|
82
|
+
})();
|
|
83
|
+
const ctxHoverBarWidth = ctxParts?.counts.length ?? 0;
|
|
84
|
+
const ctxNode = formattedContext === undefined
|
|
44
85
|
? undefined
|
|
45
|
-
:
|
|
86
|
+
: hover === 'ctx' &&
|
|
87
|
+
ctxParts !== undefined &&
|
|
88
|
+
ctxHoverBarWidth > 0 &&
|
|
89
|
+
contextUsed !== undefined &&
|
|
90
|
+
channel.contextWindow !== undefined
|
|
91
|
+
? (_jsxs(Text, { color: "inactiveShimmer", children: [_jsx(Text, { dimColor: true, children: "ctx " }), renderMiniContextBar(contextUsed, channel.contextWindow, ctxHoverBarWidth), ' ', ctxParts.percent] }))
|
|
92
|
+
: (_jsxs(Text, { color: "inactiveShimmer", children: [_jsx(Text, { dimColor: true, children: "ctx " }), formattedContext] }));
|
|
46
93
|
if (statusBar.cache) {
|
|
47
94
|
const cacheRate = formatCacheHitRate(usage);
|
|
48
95
|
if (cacheRate !== undefined) {
|
|
49
|
-
contextParts.push(
|
|
96
|
+
contextParts.push({
|
|
97
|
+
key: 'cache',
|
|
98
|
+
id: 'cache',
|
|
99
|
+
node: (_jsxs(Text, { color: "inactiveShimmer", children: [_jsx(Text, { dimColor: true, children: t('status-cache-label') }), cacheRate] })),
|
|
100
|
+
});
|
|
50
101
|
}
|
|
51
102
|
}
|
|
52
|
-
|
|
103
|
+
let tpsPart;
|
|
53
104
|
if (statusBar.tps && channel.tps !== undefined) {
|
|
54
105
|
if (channel.working && channel.tpsSamples.length === 0) {
|
|
55
|
-
|
|
106
|
+
tpsPart = {
|
|
107
|
+
key: 'tps',
|
|
108
|
+
id: 'tps',
|
|
109
|
+
node: (_jsxs(Text, { children: [renderTpsGauge(channel.tps, channel.tps), ' ', _jsxs(Text, { dimColor: true, children: [Math.round(channel.tps), " tps"] })] })),
|
|
110
|
+
};
|
|
56
111
|
}
|
|
57
112
|
else if (channel.tpsSamples.length > 0) {
|
|
58
113
|
const peak = Math.max(...channel.tpsSamples.map(sample => sample.tps), channel.tps);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
114
|
+
tpsPart = {
|
|
115
|
+
key: 'tps',
|
|
116
|
+
id: 'tps',
|
|
117
|
+
node: (_jsxs(Text, { children: [channel.working
|
|
118
|
+
? renderTpsGauge(channel.tps, peak)
|
|
119
|
+
: renderTpsSparkline(channel.tpsSamples), ' ', speedColor(channel.tps, `${Math.round(channel.tps)}`), " tps"] })),
|
|
120
|
+
};
|
|
62
121
|
}
|
|
63
122
|
else {
|
|
64
|
-
|
|
123
|
+
tpsPart = {
|
|
124
|
+
key: 'tps',
|
|
125
|
+
id: 'tps',
|
|
126
|
+
node: _jsxs(Text, { dimColor: true, children: [Math.round(channel.tps), " t/s"] }),
|
|
127
|
+
};
|
|
65
128
|
}
|
|
66
129
|
}
|
|
67
|
-
const
|
|
130
|
+
const leftFields = [
|
|
68
131
|
...(statusBar.model
|
|
69
|
-
? [_jsx(Text, { color: "inactiveShimmer", children: channel.model }
|
|
132
|
+
? [{ key: 'model', node: _jsx(Text, { color: "inactiveShimmer", children: channel.model }) }]
|
|
70
133
|
: []),
|
|
71
|
-
...
|
|
134
|
+
...(tpsPart !== undefined ? [tpsPart] : []),
|
|
72
135
|
...contextParts,
|
|
73
136
|
...(statusBar.tokens
|
|
74
|
-
? [
|
|
75
|
-
|
|
76
|
-
|
|
137
|
+
? [{
|
|
138
|
+
key: 'tokens',
|
|
139
|
+
id: 'tokens',
|
|
140
|
+
node: (_jsxs(Text, { color: "inactiveShimmer", children: [formatTokens(channel.tokens.input), "\u2192", formatTokens(channel.tokens.output)] })),
|
|
141
|
+
}]
|
|
77
142
|
: []),
|
|
78
143
|
];
|
|
79
|
-
const
|
|
144
|
+
const rightFields = [
|
|
80
145
|
// Goal chip first: session-level state outranks repo/location details.
|
|
81
146
|
...(statusBar.goal && channel.goal !== undefined
|
|
82
|
-
? [
|
|
83
|
-
|
|
84
|
-
|
|
147
|
+
? [{
|
|
148
|
+
key: 'goal',
|
|
149
|
+
id: 'goal',
|
|
150
|
+
node: _jsx(GoalStatusChip, { goal: channel.goal, minimal: channel.minimal }),
|
|
151
|
+
}]
|
|
85
152
|
: []),
|
|
86
153
|
...(statusBar.gitBranch && channel.gitBranch
|
|
87
154
|
? [
|
|
88
|
-
|
|
155
|
+
{
|
|
156
|
+
key: 'git',
|
|
157
|
+
node: _jsx(Text, { color: "professionalBlue", children: channel.gitBranch }),
|
|
158
|
+
},
|
|
89
159
|
]
|
|
90
160
|
: []),
|
|
91
161
|
...(statusBar.cwd
|
|
92
|
-
? [
|
|
93
|
-
|
|
94
|
-
|
|
162
|
+
? [{
|
|
163
|
+
key: 'cwd',
|
|
164
|
+
id: 'cwd',
|
|
165
|
+
node: (_jsx(Text, { color: "inactiveShimmer", children: statusBar.compact ? basename(channel.displayCwd) : channel.displayCwd })),
|
|
166
|
+
}]
|
|
95
167
|
: []),
|
|
96
168
|
...(statusBar.sessionTitle && channel.sessionTitle
|
|
97
|
-
? [
|
|
98
|
-
|
|
99
|
-
|
|
169
|
+
? [{
|
|
170
|
+
key: 'title',
|
|
171
|
+
id: 'title',
|
|
172
|
+
node: _jsx(Text, { dimColor: true, children: channel.sessionTitle }),
|
|
173
|
+
}]
|
|
100
174
|
: []),
|
|
101
175
|
// Short id last: a provenance tag trails the content it identifies, and
|
|
102
176
|
// the 8-char form is what the session log filename starts with, so a
|
|
103
177
|
// truncated rendering still names the right log for --resume.
|
|
104
178
|
...(statusBar.sessionId && channel.agentId
|
|
105
|
-
? [
|
|
106
|
-
|
|
107
|
-
|
|
179
|
+
? [{
|
|
180
|
+
key: 'sessionId',
|
|
181
|
+
id: 'sessionId',
|
|
182
|
+
node: _jsx(Text, { dimColor: true, children: `#${channel.agentId.slice(0, 8)}` }),
|
|
183
|
+
}]
|
|
108
184
|
: []),
|
|
109
185
|
];
|
|
110
186
|
const hint = selectionActive
|
|
@@ -122,24 +198,111 @@ export function StatusLine({ channel, selectionActive = false, helpOpen = false,
|
|
|
122
198
|
activity.phase !== 'idle';
|
|
123
199
|
const showTrajectory = statusBar.trajectory && wake !== undefined;
|
|
124
200
|
const barWidth = columns - 4;
|
|
125
|
-
let bar = null;
|
|
126
201
|
const barColors = themeName === 'light'
|
|
127
202
|
? undefined
|
|
128
203
|
: { freeFill: '#2E3440', freeText: '#8D95A6' };
|
|
129
|
-
|
|
204
|
+
const barVisible = statusBar.contextBar &&
|
|
130
205
|
channel.contextBarEnabled &&
|
|
131
206
|
barWidth >= 14 &&
|
|
132
207
|
usage !== undefined &&
|
|
133
|
-
channel.contextWindow !== undefined
|
|
134
|
-
|
|
208
|
+
channel.contextWindow !== undefined;
|
|
209
|
+
// The supplemental-row readout for the hovered field: replaces the idle
|
|
210
|
+
// hint (never the activity line) while the pointer dwells on a field.
|
|
211
|
+
const detail = buildHoverDetail(hover, channel, usage, contextUsed);
|
|
212
|
+
const trailer = detail !== null
|
|
213
|
+
? detail
|
|
214
|
+
: hint !== ''
|
|
215
|
+
? _jsx(Text, { color: "inactiveShimmer", children: hint })
|
|
216
|
+
: null;
|
|
217
|
+
const compactFields = [...leftFields, ...rightFields];
|
|
218
|
+
const fullLeftFields = [
|
|
219
|
+
...leftFields,
|
|
220
|
+
...(ctxNode !== undefined ? [{ key: 'context', id: 'ctx', node: ctxNode }] : []),
|
|
221
|
+
];
|
|
222
|
+
const hasStatusFields = compactFields.length > 0 || ctxNode !== undefined;
|
|
223
|
+
// The supplemental row is PERMANENTLY mounted (height pinned to 1)
|
|
224
|
+
// whenever the footer carries hoverable chrome — mounting it from nothing
|
|
225
|
+
// on hover is what made the footer grow mid-gesture and shoved the
|
|
226
|
+
// transcript up (user feedback). Idle it may sit blank: a stable footer
|
|
227
|
+
// outranks a reclaimable row, and hovering only ever swaps this line's
|
|
228
|
+
// content. Minimal mode keeps the old contract — no hover details, the
|
|
229
|
+
// row appears only for real content (which its defaults never produce).
|
|
230
|
+
const showSupplementalRow = (!channel.minimal && (hasStatusFields || barVisible)) ||
|
|
231
|
+
showActivity ||
|
|
232
|
+
showTrajectory ||
|
|
233
|
+
hint !== '';
|
|
234
|
+
return (_jsx(Box, { paddingX: 1, width: columns, flexShrink: 0, children: _jsxs(Box, { flexDirection: "column", width: "100%", children: [barVisible ? (_jsx(ContextBarView, { segments: channel.contextSegments, usedTokens: contextUsed ?? 0, contextWindow: channel.contextWindow ?? 0, width: barWidth, colors: barColors, onHover: segment => setHover(current => segment === null
|
|
235
|
+
? (current !== null && current.startsWith('segment:') ? null : current)
|
|
236
|
+
: `segment:${segment}`) })) : null, hasStatusFields ? statusBar.compact ? (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, flexDirection: "row", overflow: "hidden", children: _jsx(FieldLine, { parts: compactFields, hoverProps: hoverProps }) }), ctxNode !== undefined ? (_jsx(Box, { flexShrink: 0, ...hoverProps('ctx'), children: _jsx(Text, { wrap: "truncate", children: ctxNode }) })) : null] })) : (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, flexDirection: "row", overflow: "hidden", children: _jsx(FieldLine, { parts: fullLeftFields, hoverProps: hoverProps }) }), _jsx(Box, { justifyContent: "flex-end", flexShrink: 2, flexDirection: "row", overflow: "hidden", children: _jsx(FieldLine, { parts: rightFields, hoverProps: hoverProps }) })] })) : null, showSupplementalRow ? _jsxs(Box, { height: 1, overflow: "hidden", flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsxs(Box, { flexDirection: "row", flexGrow: 1, justifyContent: showActivity && trailer !== null ? 'space-between' : 'flex-start', gap: 2, children: [showActivity && activity !== undefined ? (_jsx(ActivityLine, { activity: activity, activityFrames: channel.activityFrames, warnPct: contextPressurePct(usage, channel.contextWindow), warnDanger: (contextPressurePct(usage, channel.contextWindow) ?? 0) >= 95 })) : trailer, showActivity ? trailer : null] }), showTrajectory && wake !== undefined ? (_jsx(MiniWake, { band: wake.band, hint: wake.hint, tick: wake.tick })) : null] }) : null] }) }));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* The supplemental-row readout for a hovered footer field. Technical label
|
|
240
|
+
* tokens (ctx, free, read, sys…) stay unlocalized like the footer fields
|
|
241
|
+
* themselves; sentences go through t(). Returns null when nothing is
|
|
242
|
+
* hovered (or the hover outlived its data, which the field gating makes
|
|
243
|
+
* near-impossible).
|
|
244
|
+
*/
|
|
245
|
+
function buildHoverDetail(hover, channel, usage, contextUsed) {
|
|
246
|
+
if (hover === null)
|
|
247
|
+
return null;
|
|
248
|
+
const window = channel.contextWindow;
|
|
249
|
+
const dim = (label) => _jsx(Text, { dimColor: true, children: label });
|
|
250
|
+
if (hover.startsWith('segment:')) {
|
|
251
|
+
if (window === undefined || window <= 0 || contextUsed === undefined)
|
|
252
|
+
return null;
|
|
253
|
+
const key = hover.slice('segment:'.length);
|
|
254
|
+
const free = Math.max(0, window - contextUsed);
|
|
255
|
+
if (key === 'free') {
|
|
256
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('free '), formatTokens(free), " \u00B7 ", ((free / window) * 100).toFixed(1), "% ", t('status-detail-of-window')] }));
|
|
257
|
+
}
|
|
258
|
+
const segment = USED_SEGMENTS.find(s => s.key === key);
|
|
259
|
+
if (segment === undefined)
|
|
260
|
+
return null;
|
|
261
|
+
const tokens = channel.contextSegments[segment.key];
|
|
262
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim(`${segment.labels[1] ?? segment.key} `), formatTokens(tokens), " \u00B7", ' ', ((tokens / window) * 100).toFixed(1), "% ", t('status-detail-of-window')] }));
|
|
263
|
+
}
|
|
264
|
+
switch (hover) {
|
|
265
|
+
case 'ctx': {
|
|
266
|
+
if (contextUsed === undefined || window === undefined || window <= 0)
|
|
267
|
+
return null;
|
|
268
|
+
const free = Math.max(0, window - contextUsed);
|
|
269
|
+
// The hover payoff for the ctx ask: percent + counts + free, then the
|
|
270
|
+
// segment breakdown as the truncate-able tail (no bar — the row's
|
|
271
|
+
// in-place morph and the segment bar above already carry the gauge).
|
|
272
|
+
const segments = USED_SEGMENTS.map(segment => `${segment.labels[1] ?? segment.key} ${formatTokens(channel.contextSegments[segment.key])}`).join(' · ');
|
|
273
|
+
return (_jsxs(Text, { wrap: "truncate", children: [((contextUsed / window) * 100).toFixed(1), "% \u00B7", ' ', formatTokens(contextUsed), "/", formatTokens(window), " \u00B7 ", dim('free '), formatTokens(free), ' · ', segments] }));
|
|
274
|
+
}
|
|
275
|
+
case 'cache': {
|
|
276
|
+
const rate = formatCacheHitRate(usage);
|
|
277
|
+
if (usage === undefined || rate === undefined)
|
|
278
|
+
return null;
|
|
279
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('cache '), rate, " \u00B7 ", dim('read '), formatTokens(usage.cacheRead), " \u00B7", ' ', dim('write '), formatTokens(usage.cacheWrite), " \u00B7 ", dim('input '), formatTokens(usage.input)] }));
|
|
280
|
+
}
|
|
281
|
+
case 'tps': {
|
|
282
|
+
if (channel.tps === undefined)
|
|
283
|
+
return null;
|
|
284
|
+
const stats = tpsStats(channel.tpsSamples, Date.now());
|
|
285
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('tps '), Math.round(channel.tps), " \u00B7 ", dim('avg60 '), stats.avg.toFixed(1), " \u00B7", ' ', dim('mean '), stats.mean.toFixed(1), " \u00B7 ", dim('p95 '), stats.p95.toFixed(1)] }));
|
|
286
|
+
}
|
|
287
|
+
case 'tokens': {
|
|
288
|
+
const { input, output } = channel.tokens;
|
|
289
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('in '), input.toLocaleString(), " \u00B7 ", dim('out '), output.toLocaleString(), " \u00B7", ' ', dim('total '), (input + output).toLocaleString()] }));
|
|
290
|
+
}
|
|
291
|
+
case 'goal': {
|
|
292
|
+
const goal = channel.goal;
|
|
293
|
+
if (goal === undefined)
|
|
294
|
+
return null;
|
|
295
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('goal '), goal.phase, " \u00B7 ", dim('r'), goal.roundsStarted, "/", goal.maxGoalRounds, " \u00B7", ' ', goal.objective] }));
|
|
296
|
+
}
|
|
297
|
+
case 'sessionId':
|
|
298
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('# '), channel.agentId, " \u00B7 ", t('status-detail-session-id')] }));
|
|
299
|
+
case 'cwd':
|
|
300
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('cwd '), channel.displayCwd] }));
|
|
301
|
+
case 'title':
|
|
302
|
+
return (_jsxs(Text, { wrap: "truncate", children: [dim('title '), channel.sessionTitle] }));
|
|
303
|
+
default:
|
|
304
|
+
return null;
|
|
135
305
|
}
|
|
136
|
-
const compactLeftParts = [...leftParts, ...rightParts];
|
|
137
|
-
const fullLeftParts = contextUsagePart === undefined
|
|
138
|
-
? leftParts
|
|
139
|
-
: [...leftParts, contextUsagePart];
|
|
140
|
-
const hasStatusFields = compactLeftParts.length > 0 || contextUsagePart !== undefined;
|
|
141
|
-
const showSupplementalRow = hint !== '' || showActivity || showTrajectory;
|
|
142
|
-
return (_jsx(Box, { paddingX: 1, width: columns, flexShrink: 0, children: _jsxs(Box, { flexDirection: "column", width: "100%", children: [bar ? _jsx(Text, { children: bar }) : null, hasStatusFields ? statusBar.compact ? (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { wrap: "truncate", children: _jsx(Byline, { children: compactLeftParts }) }) }), contextUsagePart ? (_jsx(Box, { flexShrink: 0, children: _jsx(Text, { wrap: "truncate", children: _jsx(Byline, { children: [contextUsagePart] }) }) })) : null] })) : (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { wrap: "truncate", children: _jsx(Byline, { children: fullLeftParts }) }) }), _jsx(Box, { justifyContent: "flex-end", flexShrink: 2, children: _jsx(Text, { wrap: "truncate", children: _jsx(Byline, { children: rightParts }) }) })] })) : null, showSupplementalRow ? _jsxs(Box, { height: 1, overflow: "hidden", flexDirection: "row", justifyContent: "space-between", gap: 2, children: [_jsxs(Box, { flexDirection: "row", flexGrow: 1, justifyContent: showActivity && hint ? 'space-between' : 'flex-start', gap: 2, children: [showActivity && activity !== undefined ? (_jsx(ActivityLine, { activity: activity, activityFrames: channel.activityFrames, warnPct: contextPressurePct(usage, channel.contextWindow), warnDanger: (contextPressurePct(usage, channel.contextWindow) ?? 0) >= 95 })) : hint ? (_jsx(Text, { color: "inactiveShimmer", children: hint })) : null, showActivity && hint ? (_jsx(Text, { color: "inactiveShimmer", wrap: "truncate", children: hint })) : null] }), showTrajectory && wake !== undefined ? (_jsx(MiniWake, { band: wake.band, hint: wake.hint, tick: wake.tick })) : null] }) : null] }) }));
|
|
143
306
|
}
|
|
144
307
|
/** Return the prompt-cache hit rate, or nothing when usage is unavailable. */
|
|
145
308
|
export function formatCacheHitRate(usage) {
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
* yellow ≥ 20, red below.
|
|
9
9
|
*/
|
|
10
10
|
/** Context bar segments — DeepSeek blue family (dark-theme friendly: deep
|
|
11
|
-
* navy → brand blue, neutral grey free segment; labels adapt to width).
|
|
12
|
-
|
|
11
|
+
* navy → brand blue, neutral grey free segment; labels adapt to width).
|
|
12
|
+
* Exported for the hoverable JSX bar (ContextBarView), which re-derives
|
|
13
|
+
* the same column split this module's ANSI path renders. */
|
|
14
|
+
export declare const USED_SEGMENTS: readonly [{
|
|
13
15
|
readonly key: "system";
|
|
14
16
|
readonly color: "#22305F";
|
|
15
17
|
readonly labels: readonly ["system", "sys", "s"];
|
|
@@ -37,6 +39,22 @@ export type ContextSegments = Record<(typeof USED_SEGMENTS)[number]['key'], numb
|
|
|
37
39
|
* @returns The compact count string.
|
|
38
40
|
*/
|
|
39
41
|
export declare function formatTokens(count: number): string;
|
|
42
|
+
/** Center `text` in `width` cells (plain spaces, no ANSI). Exported for
|
|
43
|
+
* ContextBarView's JSX used-segment labels. */
|
|
44
|
+
export declare function centeredText(text: string, width: number): string;
|
|
45
|
+
/** Pick the longest label that fits `width` cells. Exported for
|
|
46
|
+
* ContextBarView's JSX segments (same fallback ladder as the ANSI path). */
|
|
47
|
+
export declare function chooseLabel(labels: readonly string[], width: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Compose the free segment's plain text: the `free` label centered, the
|
|
50
|
+
* usage readout right-aligned into whatever width remains. Shared by the
|
|
51
|
+
* ANSI string path (renderContextBar) and the hoverable JSX bar
|
|
52
|
+
* (ContextBarView) so both render pixel-identical content.
|
|
53
|
+
*/
|
|
54
|
+
export declare function composeFreeSegmentText(options: readonly string[], width: number): string;
|
|
55
|
+
/** Give every visible used segment at least one column before sharing the
|
|
56
|
+
* rest. Exported for ContextBarView (hoverable JSX twin of the bar). */
|
|
57
|
+
export declare function allocateBarColumns(values: readonly number[], width: number): number[];
|
|
40
58
|
/**
|
|
41
59
|
* The segmented context bar: used segments by content type, the remainder as
|
|
42
60
|
* a light free segment whose right edge carries the usage readout
|
|
@@ -51,6 +69,21 @@ export declare function renderContextBar(segments: ContextSegments, usedTokens:
|
|
|
51
69
|
freeFill: string;
|
|
52
70
|
freeText: string;
|
|
53
71
|
}): string;
|
|
72
|
+
/** Pressure-colored text: green below 80%, amber ≥ 80, red ≥ 95.
|
|
73
|
+
* @param pct - Context occupancy percent (0–100+).
|
|
74
|
+
* @param text - Text to color.
|
|
75
|
+
* @returns The ANSI 24-bit color-wrapped text.
|
|
76
|
+
*/
|
|
77
|
+
export declare function pressureColor(pct: number, text: string): string;
|
|
78
|
+
/** Compact 1/8-cell context gauge for the footer's ctx field on hover:
|
|
79
|
+
* `▕██████▋···▏`, fill proportional to context occupancy, colored by the
|
|
80
|
+
* amber/red pressure thresholds. Same block ramp as the TPS gauge.
|
|
81
|
+
* @param usedTokens - Total context tokens in use.
|
|
82
|
+
* @param contextWindow - Context window size in tokens.
|
|
83
|
+
* @param width - Gauge width in terminal columns (fill cells, brackets excluded).
|
|
84
|
+
* @returns The ANSI gauge string, or '' for a non-positive window.
|
|
85
|
+
*/
|
|
86
|
+
export declare function renderMiniContextBar(usedTokens: number, contextWindow: number, width?: number): string;
|
|
54
87
|
/** Speed color: green ≥ 50, yellow ≥ 20, red below (pi-tps-meter).
|
|
55
88
|
* @param tps - Tokens per second; selects the color threshold.
|
|
56
89
|
* @param text - Text to color.
|
|
@@ -83,5 +116,4 @@ export declare function tpsStats(samples: readonly {
|
|
|
83
116
|
mean: number;
|
|
84
117
|
p95: number;
|
|
85
118
|
};
|
|
86
|
-
export {};
|
|
87
119
|
//# sourceMappingURL=StatusMetrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusMetrics.d.ts","sourceRoot":"","sources":["../../../src/screens/StatusMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;
|
|
1
|
+
{"version":3,"file":"StatusMetrics.d.ts","sourceRoot":"","sources":["../../../src/screens/StatusMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;6DAG6D;AAC7D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;EAMhB,CAAA;AAEV,yFAAyF;AACzF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;AAsBnF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAID;gDACgD;AAChD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;6EAC6E;AAC7E,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK5E;AA4BD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,GACZ,MAAM,CAmBR;AA+BD;yEACyE;AACzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC9C,MAAM,CAkBR;AASD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,SAAK,GACT,MAAM,CAaR;AAYD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5D;AAYD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAqB9E;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IACxF,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAUA"}
|
|
@@ -8,8 +8,10 @@
|
|
|
8
8
|
* yellow ≥ 20, red below.
|
|
9
9
|
*/
|
|
10
10
|
/** Context bar segments — DeepSeek blue family (dark-theme friendly: deep
|
|
11
|
-
* navy → brand blue, neutral grey free segment; labels adapt to width).
|
|
12
|
-
|
|
11
|
+
* navy → brand blue, neutral grey free segment; labels adapt to width).
|
|
12
|
+
* Exported for the hoverable JSX bar (ContextBarView), which re-derives
|
|
13
|
+
* the same column split this module's ANSI path renders. */
|
|
14
|
+
export const USED_SEGMENTS = [
|
|
13
15
|
{ key: 'system', color: '#22305F', labels: ['system', 'sys', 's'] }, // deep navy
|
|
14
16
|
{ key: 'prompt', color: '#2B3D78', labels: ['prompt', 'pr', 'p'] }, // navy
|
|
15
17
|
{ key: 'assistant', color: '#344A92', labels: ['assistant', 'ast', 'a'] }, // indigo
|
|
@@ -49,7 +51,9 @@ export function formatTokens(count) {
|
|
|
49
51
|
return `${Math.round(value / 1000000)}M`;
|
|
50
52
|
}
|
|
51
53
|
// --- Context bar (pi-nano-context) ---
|
|
52
|
-
|
|
54
|
+
/** Center `text` in `width` cells (plain spaces, no ANSI). Exported for
|
|
55
|
+
* ContextBarView's JSX used-segment labels. */
|
|
56
|
+
export function centeredText(text, width) {
|
|
53
57
|
const textWidth = plainWidth(text);
|
|
54
58
|
if (textWidth > width)
|
|
55
59
|
return ' '.repeat(width);
|
|
@@ -57,7 +61,9 @@ function centeredText(text, width) {
|
|
|
57
61
|
const right = width - textWidth - left;
|
|
58
62
|
return `${' '.repeat(left)}${text}${' '.repeat(right)}`;
|
|
59
63
|
}
|
|
60
|
-
|
|
64
|
+
/** Pick the longest label that fits `width` cells. Exported for
|
|
65
|
+
* ContextBarView's JSX segments (same fallback ladder as the ANSI path). */
|
|
66
|
+
export function chooseLabel(labels, width) {
|
|
61
67
|
for (const label of labels) {
|
|
62
68
|
if (plainWidth(label) <= width)
|
|
63
69
|
return label;
|
|
@@ -81,7 +87,13 @@ function chooseRightAlignedText(options, width, blockedUntil) {
|
|
|
81
87
|
}
|
|
82
88
|
return '';
|
|
83
89
|
}
|
|
84
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Compose the free segment's plain text: the `free` label centered, the
|
|
92
|
+
* usage readout right-aligned into whatever width remains. Shared by the
|
|
93
|
+
* ANSI string path (renderContextBar) and the hoverable JSX bar
|
|
94
|
+
* (ContextBarView) so both render pixel-identical content.
|
|
95
|
+
*/
|
|
96
|
+
export function composeFreeSegmentText(options, width) {
|
|
85
97
|
if (width <= 0)
|
|
86
98
|
return '';
|
|
87
99
|
const content = Array.from({ length: width }, () => ' ');
|
|
@@ -100,7 +112,12 @@ function renderFreeSegment(options, width, fill, text) {
|
|
|
100
112
|
content[labelStart + offset] = char;
|
|
101
113
|
}
|
|
102
114
|
}
|
|
103
|
-
return
|
|
115
|
+
return content.join('');
|
|
116
|
+
}
|
|
117
|
+
function renderFreeSegment(options, width, fill, text) {
|
|
118
|
+
if (width <= 0)
|
|
119
|
+
return '';
|
|
120
|
+
return background(fill, foreground(text, composeFreeSegmentText(options, width)));
|
|
104
121
|
}
|
|
105
122
|
/** Largest-remainder column allocation (pi-nano-context). */
|
|
106
123
|
function allocateProportionally(values, columns) {
|
|
@@ -123,8 +140,9 @@ function allocateProportionally(values, columns) {
|
|
|
123
140
|
}
|
|
124
141
|
return allocatedColumns;
|
|
125
142
|
}
|
|
126
|
-
/** Give every visible used segment at least one column before sharing the
|
|
127
|
-
|
|
143
|
+
/** Give every visible used segment at least one column before sharing the
|
|
144
|
+
* rest. Exported for ContextBarView (hoverable JSX twin of the bar). */
|
|
145
|
+
export function allocateBarColumns(values, width) {
|
|
128
146
|
const visibleUsedSegments = USED_SEGMENTS
|
|
129
147
|
.map((_, index) => index)
|
|
130
148
|
.filter(index => (values[index] ?? 0) > 0);
|
|
@@ -161,6 +179,43 @@ export function renderContextBar(segments, usedTokens, contextWindow, width, col
|
|
|
161
179
|
const free = formatTokens(contextWindow - usedTokens);
|
|
162
180
|
return `${used}${renderFreeSegment([`ctx ${total} ${percent} ${free}`, `${total} ${percent} ${free}`, `${total} ${percent}`, percent], freeWidth, colors?.freeFill ?? FREE_SEGMENT_FILL, colors?.freeText ?? FREE_SEGMENT_TEXT)}`;
|
|
163
181
|
}
|
|
182
|
+
// --- Mini context bar (footer ctx-field hover) ---
|
|
183
|
+
/** Context-pressure thresholds, shared with contextPressurePct's amber/red
|
|
184
|
+
* footer convention (amber ≥ 80%, red ≥ 95%). */
|
|
185
|
+
const PRESSURE_WARN = 80;
|
|
186
|
+
const PRESSURE_DANGER = 95;
|
|
187
|
+
/** Pressure-colored text: green below 80%, amber ≥ 80, red ≥ 95.
|
|
188
|
+
* @param pct - Context occupancy percent (0–100+).
|
|
189
|
+
* @param text - Text to color.
|
|
190
|
+
* @returns The ANSI 24-bit color-wrapped text.
|
|
191
|
+
*/
|
|
192
|
+
export function pressureColor(pct, text) {
|
|
193
|
+
const key = pct >= PRESSURE_DANGER ? 'error' : pct >= PRESSURE_WARN ? 'warning' : 'success';
|
|
194
|
+
return `\x1b[38;2;${colorHex(key)}m${text}\x1b[39m`;
|
|
195
|
+
}
|
|
196
|
+
/** Compact 1/8-cell context gauge for the footer's ctx field on hover:
|
|
197
|
+
* `▕██████▋···▏`, fill proportional to context occupancy, colored by the
|
|
198
|
+
* amber/red pressure thresholds. Same block ramp as the TPS gauge.
|
|
199
|
+
* @param usedTokens - Total context tokens in use.
|
|
200
|
+
* @param contextWindow - Context window size in tokens.
|
|
201
|
+
* @param width - Gauge width in terminal columns (fill cells, brackets excluded).
|
|
202
|
+
* @returns The ANSI gauge string, or '' for a non-positive window.
|
|
203
|
+
*/
|
|
204
|
+
export function renderMiniContextBar(usedTokens, contextWindow, width = 10) {
|
|
205
|
+
if (contextWindow <= 0 || width <= 0)
|
|
206
|
+
return '';
|
|
207
|
+
const pct = Math.min(100, Math.max(0, (usedTokens / contextWindow) * 100));
|
|
208
|
+
const frac = pct / 100;
|
|
209
|
+
const eighths = Math.round(frac * width * 8);
|
|
210
|
+
const full = Math.floor(eighths / 8);
|
|
211
|
+
const rem = eighths % 8;
|
|
212
|
+
let fill = '█'.repeat(Math.min(full, width));
|
|
213
|
+
if (full < width && rem > 0) {
|
|
214
|
+
fill += HBLOCKS[rem];
|
|
215
|
+
}
|
|
216
|
+
const track = TRACK.repeat(Math.max(0, width - fill.length));
|
|
217
|
+
return `▕${pressureColor(pct, fill)}${`\x1b[2m${track}\x1b[22m`}▏`;
|
|
218
|
+
}
|
|
164
219
|
// --- TPS gauge + sparkline (pi-tps-meter) ---
|
|
165
220
|
const BLOCKS = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];
|
|
166
221
|
const HBLOCKS = [' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉'];
|
|
@@ -68,6 +68,9 @@ export type ChatOverlay = {
|
|
|
68
68
|
} | {
|
|
69
69
|
kind: 'activity';
|
|
70
70
|
index: number;
|
|
71
|
+
} | {
|
|
72
|
+
kind: 'color';
|
|
73
|
+
index: number;
|
|
71
74
|
} | {
|
|
72
75
|
kind: 'effort';
|
|
73
76
|
index: number;
|
|
@@ -102,6 +105,19 @@ export type ChatOverlay = {
|
|
|
102
105
|
kind: 'search';
|
|
103
106
|
} | {
|
|
104
107
|
kind: 'tips';
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Click-to-act file menu: opened by clicking a file path in the
|
|
111
|
+
* transcript (tool cards, markdown code spans / plain text, file://
|
|
112
|
+
* links). `index` is the focused action row (0 = open, 1 = reveal in
|
|
113
|
+
* file manager, 2 = copy absolute path). `isDir` tells the panel whether
|
|
114
|
+
* the target is a directory (first row reads "open folder").
|
|
115
|
+
*/
|
|
116
|
+
| {
|
|
117
|
+
kind: 'file-actions';
|
|
118
|
+
path: string;
|
|
119
|
+
index: number;
|
|
120
|
+
isDir: boolean;
|
|
105
121
|
};
|
|
106
122
|
export declare const NO_OVERLAY: ChatOverlay;
|
|
107
123
|
export type ChatOverlayAction =
|
|
@@ -149,7 +165,7 @@ export type ChatOverlayAction =
|
|
|
149
165
|
* flow). Ignored unless that panel is still up. */
|
|
150
166
|
| {
|
|
151
167
|
type: 'set-index';
|
|
152
|
-
kind: 'model' | 'preset' | 'effort' | 'workspace-flow' | 'rewind';
|
|
168
|
+
kind: 'model' | 'preset' | 'effort' | 'workspace-flow' | 'rewind' | 'file-actions';
|
|
153
169
|
index: number;
|
|
154
170
|
}
|
|
155
171
|
/** Edit the history-search draft (query text, caret, focused match). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatOverlay.d.ts","sourceRoot":"","sources":["../../../src/screens/chatOverlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AAEjE,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAA;AAE1F,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IACE,IAAI,EAAE,gBAAgB,CAAA;IACtB,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjC,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjE;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;CACd,GAID;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"chatOverlay.d.ts","sourceRoot":"","sources":["../../../src/screens/chatOverlay.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,12 +42,14 @@ export function chatOverlayReducer(state, action) {
|
|
|
42
42
|
|| state.kind === 'model'
|
|
43
43
|
|| state.kind === 'skills'
|
|
44
44
|
|| state.kind === 'activity'
|
|
45
|
+
|| state.kind === 'color'
|
|
45
46
|
|| state.kind === 'effort'
|
|
46
47
|
|| state.kind === 'preset'
|
|
47
48
|
|| state.kind === 'theme'
|
|
48
49
|
|| state.kind === 'permission'
|
|
49
50
|
|| state.kind === 'plan'
|
|
50
|
-
|| state.kind === 'lang'
|
|
51
|
+
|| state.kind === 'lang'
|
|
52
|
+
|| state.kind === 'file-actions') {
|
|
51
53
|
return { ...state, index: wrapIndex(state.index, action.delta, action.count) };
|
|
52
54
|
}
|
|
53
55
|
if (state.kind === 'history') {
|
package/lib/types/tips.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tips.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhF,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAMzE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../src/tips.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;AAEhF,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;CACX;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAMzE,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,SAAS,GAAG,EA8mB9B,CAAA;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAM,MAAoB,GAAG,GAAG,CAErE;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG,EAAE,CAElD"}
|