@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.
Files changed (307) hide show
  1. package/README.md +69 -256
  2. package/bin/dsh-tui.js +172 -5
  3. package/cordis.patch.yml +16 -4
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
  5. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
  7. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
  8. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
  9. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
  11. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
  12. package/dsh-ecosystem-spec/registry/README.md +14 -14
  13. package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
  14. package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
  15. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
  16. package/lib/types/cc/hyperlink.d.ts +7 -1
  17. package/lib/types/cc/hyperlink.d.ts.map +1 -1
  18. package/lib/types/cc/hyperlink.js +3 -2
  19. package/lib/types/cc/markdown.d.ts.map +1 -1
  20. package/lib/types/cc/markdown.js +33 -3
  21. package/lib/types/cc/sessionColors.d.ts +27 -0
  22. package/lib/types/cc/sessionColors.d.ts.map +1 -0
  23. package/lib/types/cc/sessionColors.js +39 -0
  24. package/lib/types/commands.d.ts.map +1 -1
  25. package/lib/types/commands.js +6 -0
  26. package/lib/types/components/AutoRecapRow.d.ts +23 -0
  27. package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
  28. package/lib/types/components/AutoRecapRow.js +23 -0
  29. package/lib/types/components/ColorPicker.d.ts +17 -0
  30. package/lib/types/components/ColorPicker.d.ts.map +1 -0
  31. package/lib/types/components/ColorPicker.js +20 -0
  32. package/lib/types/components/CommandSuggestions.d.ts +3 -1
  33. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  34. package/lib/types/components/ContextBarView.d.ts +33 -0
  35. package/lib/types/components/ContextBarView.d.ts.map +1 -0
  36. package/lib/types/components/ContextBarView.js +46 -0
  37. package/lib/types/components/EffortInputBorder.d.ts +12 -1
  38. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  39. package/lib/types/components/EffortInputBorder.js +22 -5
  40. package/lib/types/components/FileActionsPanel.d.ts +22 -0
  41. package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
  42. package/lib/types/components/FileActionsPanel.js +28 -0
  43. package/lib/types/components/FileSuggestions.d.ts +3 -1
  44. package/lib/types/components/FileSuggestions.d.ts.map +1 -1
  45. package/lib/types/components/MessageList.d.ts +3 -1
  46. package/lib/types/components/MessageList.d.ts.map +1 -1
  47. package/lib/types/components/MessageList.js +13 -6
  48. package/lib/types/components/ModelPicker.d.ts +26 -4
  49. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  50. package/lib/types/components/ModelPicker.js +26 -6
  51. package/lib/types/components/PromptInput.d.ts.map +1 -1
  52. package/lib/types/components/PromptInput.js +365 -57
  53. package/lib/types/components/RecapPanel.d.ts +25 -0
  54. package/lib/types/components/RecapPanel.d.ts.map +1 -0
  55. package/lib/types/components/RecapPanel.js +55 -0
  56. package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
  57. package/lib/types/components/ScrollbarGutter.js +55 -4
  58. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  59. package/lib/types/components/SubagentCard.js +6 -4
  60. package/lib/types/components/SuggestionCard.d.ts +4 -2
  61. package/lib/types/components/SuggestionCard.d.ts.map +1 -1
  62. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  63. package/lib/types/components/TimelineRail.js +9 -2
  64. package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
  65. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  66. package/lib/types/components/design-system/ThemeProvider.js +2 -1
  67. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +8 -1
  68. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  69. package/lib/types/components/messages/AssistantToolUseMessage.js +36 -8
  70. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
  71. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  72. package/lib/types/components/questions/AskUserQuestionPanel.js +41 -9
  73. package/lib/types/dsh-adapter/channel.d.ts +101 -2
  74. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  75. package/lib/types/dsh-adapter/channel.js +969 -93
  76. package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
  77. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  78. package/lib/types/dsh-adapter/compat/index.js +8 -6
  79. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
  80. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  81. package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
  82. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  83. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  84. package/lib/types/dsh-adapter/contract.js +1 -0
  85. package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
  86. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  87. package/lib/types/dsh-adapter/index.d.ts +10 -0
  88. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  89. package/lib/types/dsh-adapter/index.js +5 -0
  90. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  91. package/lib/types/dsh-adapter/plugin.js +317 -8
  92. package/lib/types/dsh-adapter/presets.d.ts +18 -0
  93. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  94. package/lib/types/dsh-adapter/presets.js +31 -0
  95. package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
  96. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  97. package/lib/types/dsh-adapter/providerWizard.js +89 -5
  98. package/lib/types/dsh-adapter/questions.d.ts +19 -2
  99. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  100. package/lib/types/dsh-adapter/questions.js +53 -10
  101. package/lib/types/dsh-adapter/recap.d.ts +49 -0
  102. package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
  103. package/lib/types/dsh-adapter/recap.js +121 -0
  104. package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
  105. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
  106. package/lib/types/dsh-adapter/sessionTree.js +954 -0
  107. package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
  108. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  109. package/lib/types/dsh-adapter/shortcuts.js +28 -165
  110. package/lib/types/dsh-adapter/types.d.ts +1 -1
  111. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  112. package/lib/types/herdr.js +1 -1
  113. package/lib/types/i18n.d.ts +604 -176
  114. package/lib/types/i18n.d.ts.map +1 -1
  115. package/lib/types/i18n.js +206 -72
  116. package/lib/types/ink/log-update.d.ts.map +1 -1
  117. package/lib/types/ink/log-update.js +21 -0
  118. package/lib/types/migrationPrefs.d.ts +60 -0
  119. package/lib/types/migrationPrefs.d.ts.map +1 -0
  120. package/lib/types/migrationPrefs.js +97 -0
  121. package/lib/types/modelGroups.d.ts +72 -0
  122. package/lib/types/modelGroups.d.ts.map +1 -0
  123. package/lib/types/modelGroups.js +97 -0
  124. package/lib/types/modelRecents.d.ts +39 -0
  125. package/lib/types/modelRecents.d.ts.map +1 -0
  126. package/lib/types/modelRecents.js +97 -0
  127. package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
  128. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  129. package/lib/types/native-ts/yoga-layout/index.js +31 -1
  130. package/lib/types/oauth.d.ts +15 -0
  131. package/lib/types/oauth.d.ts.map +1 -0
  132. package/lib/types/oauth.js +14 -0
  133. package/lib/types/plugin-spec/registry.d.ts +1 -1
  134. package/lib/types/plugin-spec/registry.js +1 -1
  135. package/lib/types/reload.d.ts +109 -0
  136. package/lib/types/reload.d.ts.map +1 -0
  137. package/lib/types/reload.js +118 -0
  138. package/lib/types/screens/Chat.d.ts +3 -1
  139. package/lib/types/screens/Chat.d.ts.map +1 -1
  140. package/lib/types/screens/Chat.js +588 -64
  141. package/lib/types/screens/SessionTree.d.ts +27 -0
  142. package/lib/types/screens/SessionTree.d.ts.map +1 -0
  143. package/lib/types/screens/SessionTree.js +555 -0
  144. package/lib/types/screens/StatusLine.d.ts +0 -9
  145. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  146. package/lib/types/screens/StatusLine.js +215 -52
  147. package/lib/types/screens/StatusMetrics.d.ts +35 -3
  148. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  149. package/lib/types/screens/StatusMetrics.js +63 -8
  150. package/lib/types/screens/chatOverlay.d.ts +17 -1
  151. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  152. package/lib/types/screens/chatOverlay.js +3 -1
  153. package/lib/types/tips.d.ts.map +1 -1
  154. package/lib/types/tips.js +22 -4
  155. package/lib/types/update.d.ts +159 -0
  156. package/lib/types/update.d.ts.map +1 -1
  157. package/lib/types/update.js +496 -30
  158. package/lib/types/utils/debug.d.ts +1 -1
  159. package/lib/types/utils/debug.js +3 -3
  160. package/lib/types/utils/fileTarget.d.ts +46 -0
  161. package/lib/types/utils/fileTarget.d.ts.map +1 -0
  162. package/lib/types/utils/fileTarget.js +178 -0
  163. package/lib/types/utils/keymap.d.ts +134 -0
  164. package/lib/types/utils/keymap.d.ts.map +1 -0
  165. package/lib/types/utils/keymap.js +311 -0
  166. package/lib/types/utils/mentions.d.ts +25 -2
  167. package/lib/types/utils/mentions.d.ts.map +1 -1
  168. package/lib/types/utils/mentions.js +69 -10
  169. package/lib/types/utils/openExternal.d.ts +50 -0
  170. package/lib/types/utils/openExternal.d.ts.map +1 -0
  171. package/lib/types/utils/openExternal.js +170 -0
  172. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
  173. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
  174. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
  175. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
  176. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
  177. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
  178. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
  179. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
  180. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
  181. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
  182. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
  183. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
  184. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
  185. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
  186. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
  187. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
  188. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
  189. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
  190. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
  191. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  192. package/node_modules/@dsh-std/command/LICENSE +21 -21
  193. package/node_modules/@dsh-std/command/README.md +26 -26
  194. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  195. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  196. package/node_modules/@dsh-std/command/package.json +22 -22
  197. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  198. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  199. package/node_modules/@dsh-std/connection/README.md +42 -42
  200. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  201. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  202. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  203. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  204. package/node_modules/@dsh-std/connection/package.json +20 -20
  205. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  206. package/node_modules/@dsh-std/core/LICENSE +21 -21
  207. package/node_modules/@dsh-std/core/README.md +13 -13
  208. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  209. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  210. package/node_modules/@dsh-std/core/package.json +21 -21
  211. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  212. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  213. package/node_modules/@dsh-std/manifest/README.md +5 -5
  214. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  215. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  216. package/node_modules/@dsh-std/manifest/package.json +20 -20
  217. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  218. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  219. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  220. package/node_modules/@dsh-std/messages/README.md +5 -5
  221. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  222. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  223. package/node_modules/@dsh-std/messages/package.json +20 -20
  224. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  225. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  226. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  227. package/node_modules/@dsh-std/presentation/README.md +27 -27
  228. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  229. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  230. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  231. package/node_modules/@dsh-std/presentation/package.json +25 -25
  232. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  233. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  234. package/node_modules/@dsh-std/storage/README.md +5 -5
  235. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  236. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  237. package/node_modules/@dsh-std/storage/package.json +20 -20
  238. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  239. package/package.json +17 -5
  240. package/presets/liangshen/.dsh-tui-managed.json +1 -1
  241. package/presets/liangshen/instruction-hint.mjs +8 -0
  242. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  243. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  244. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  245. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  246. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  247. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  248. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  249. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  250. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  251. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  252. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  253. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  254. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  255. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  256. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  257. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  258. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  259. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  260. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  261. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  262. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  263. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  264. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  265. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  266. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  267. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  268. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  269. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  270. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  271. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  272. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  273. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  274. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  275. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  276. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  277. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  278. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  279. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  280. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  281. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  282. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  283. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  284. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  285. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  286. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  287. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  288. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  289. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  290. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  291. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  292. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  293. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  294. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  295. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  296. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  297. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  298. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  299. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  300. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  301. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  302. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  303. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  304. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  305. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  306. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  307. 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 { renderContextBar, renderTpsGauge, renderTpsSparkline, speedColor, } from './StatusMetrics.js';
11
+ import { ContextBarView } from '../components/ContextBarView.js';
12
+ import { USED_SEGMENTS, renderMiniContextBar, renderTpsGauge, renderTpsSparkline, speedColor, tpsStats, } from './StatusMetrics.js';
12
13
  /**
13
- * The footer under the prompt input, in Claude Code's PromptInputFooter
14
- * layout: the segmented context progress bar on its own first line, the
15
- * status line below (left group: model · tokens · think level · cache · tps
16
- * gauge/sparkline; right group: git · cwd · title · short session id,
17
- * right-aligned), and the
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(_jsx(Text, { color: "inactiveShimmer", children: channel.reasoningEffort }, "effort"));
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(_jsx(Text, { color: channel.mode.plan === true ? 'planMode' : 'warning', children: modeDisplayName(channel.mode) }, "mode"));
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
- const contextUsagePart = formattedContext === undefined
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
- : (_jsxs(Text, { color: "inactiveShimmer", children: [_jsx(Text, { dimColor: true, children: "ctx " }), formattedContext] }, "context"));
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(_jsxs(Text, { color: "inactiveShimmer", children: [_jsx(Text, { dimColor: true, children: t('status-cache-label') }), cacheRate] }, "cache"));
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
- const tpsParts = [];
103
+ let tpsPart;
53
104
  if (statusBar.tps && channel.tps !== undefined) {
54
105
  if (channel.working && channel.tpsSamples.length === 0) {
55
- tpsParts.push(_jsxs(Text, { children: [renderTpsGauge(channel.tps, channel.tps), ' ', _jsxs(Text, { dimColor: true, children: [Math.round(channel.tps), " tps"] })] }, "tps"));
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
- tpsParts.push(_jsxs(Text, { children: [channel.working
60
- ? renderTpsGauge(channel.tps, peak)
61
- : renderTpsSparkline(channel.tpsSamples), ' ', speedColor(channel.tps, `${Math.round(channel.tps)}`), " tps"] }, "tps"));
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
- tpsParts.push(_jsxs(Text, { dimColor: true, children: [Math.round(channel.tps), " t/s"] }, "tps"));
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 leftParts = [
130
+ const leftFields = [
68
131
  ...(statusBar.model
69
- ? [_jsx(Text, { color: "inactiveShimmer", children: channel.model }, "model")]
132
+ ? [{ key: 'model', node: _jsx(Text, { color: "inactiveShimmer", children: channel.model }) }]
70
133
  : []),
71
- ...tpsParts,
134
+ ...(tpsPart !== undefined ? [tpsPart] : []),
72
135
  ...contextParts,
73
136
  ...(statusBar.tokens
74
- ? [
75
- _jsxs(Text, { color: "inactiveShimmer", children: [formatTokens(channel.tokens.input), "\u2192", formatTokens(channel.tokens.output)] }, "tokens"),
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 rightParts = [
144
+ const rightFields = [
80
145
  // Goal chip first: session-level state outranks repo/location details.
81
146
  ...(statusBar.goal && channel.goal !== undefined
82
- ? [
83
- _jsx(GoalStatusChip, { goal: channel.goal, minimal: channel.minimal }, "goal"),
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
- _jsx(Text, { color: "professionalBlue", children: channel.gitBranch }, "git"),
155
+ {
156
+ key: 'git',
157
+ node: _jsx(Text, { color: "professionalBlue", children: channel.gitBranch }),
158
+ },
89
159
  ]
90
160
  : []),
91
161
  ...(statusBar.cwd
92
- ? [
93
- _jsx(Text, { color: "inactiveShimmer", children: statusBar.compact ? basename(channel.displayCwd) : channel.displayCwd }, "cwd"),
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
- _jsx(Text, { dimColor: true, children: channel.sessionTitle }, "title"),
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
- _jsx(Text, { dimColor: true, children: `#${channel.agentId.slice(0, 8)}` }, "sessionId"),
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
- if (statusBar.contextBar &&
204
+ const barVisible = statusBar.contextBar &&
130
205
  channel.contextBarEnabled &&
131
206
  barWidth >= 14 &&
132
207
  usage !== undefined &&
133
- channel.contextWindow !== undefined) {
134
- bar = renderContextBar(channel.contextSegments, contextUsed ?? 0, channel.contextWindow, barWidth, barColors);
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
- declare const USED_SEGMENTS: readonly [{
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;4EAC4E;AAC5E,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;EAMT,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;AA+GD;;;;;;;;;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;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"}
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
- const USED_SEGMENTS = [
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
- function centeredText(text, width) {
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
- function chooseLabel(labels, width) {
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
- function renderFreeSegment(options, width, fill, text) {
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 background(fill, foreground(text, content.join('')));
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 rest. */
127
- function allocateBarColumns(values, width) {
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":"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"}
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') {
@@ -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,EA4lB9B,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"}
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"}