@qduc/term2 0.30.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (526) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +24 -5
  3. package/dist/app.js.map +1 -1
  4. package/dist/build-info.json +2 -2
  5. package/dist/cli.js +36 -25
  6. package/dist/cli.js.map +1 -1
  7. package/dist/components/ErrorBoundary.d.ts +1 -1
  8. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  9. package/dist/components/ErrorBoundary.js +28 -23
  10. package/dist/components/ErrorBoundary.js.map +1 -1
  11. package/dist/components/InputBox.d.ts.map +1 -1
  12. package/dist/components/InputBox.js +124 -32
  13. package/dist/components/InputBox.js.map +1 -1
  14. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  15. package/dist/components/MarkdownRenderer.js +31 -28
  16. package/dist/components/MarkdownRenderer.js.map +1 -1
  17. package/dist/components/common/Divider.d.ts.map +1 -1
  18. package/dist/components/common/Divider.js +5 -2
  19. package/dist/components/common/Divider.js.map +1 -1
  20. package/dist/components/common/MenuContainer.d.ts +6 -20
  21. package/dist/components/common/MenuContainer.d.ts.map +1 -1
  22. package/dist/components/common/MenuContainer.js +24 -40
  23. package/dist/components/common/MenuContainer.js.map +1 -1
  24. package/dist/components/common/ScrollableTabBar.d.ts.map +1 -1
  25. package/dist/components/common/ScrollableTabBar.js +6 -5
  26. package/dist/components/common/ScrollableTabBar.js.map +1 -1
  27. package/dist/components/common/SelectionMarker.d.ts +16 -0
  28. package/dist/components/common/SelectionMarker.d.ts.map +1 -0
  29. package/dist/components/common/SelectionMarker.js +20 -0
  30. package/dist/components/common/SelectionMarker.js.map +1 -0
  31. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
  32. package/dist/components/input/ApplicationInputSurface.js +3 -1
  33. package/dist/components/input/ApplicationInputSurface.js.map +1 -1
  34. package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -1
  35. package/dist/components/input/FirstRunSetupPrompt.js +8 -6
  36. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  37. package/dist/components/input/MenuSurface.d.ts.map +1 -1
  38. package/dist/components/input/MenuSurface.js +4 -3
  39. package/dist/components/input/MenuSurface.js.map +1 -1
  40. package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
  41. package/dist/components/input/ModelMenuSession.js +3 -2
  42. package/dist/components/input/ModelMenuSession.js.map +1 -1
  43. package/dist/components/input/PendingQueueList.d.ts +3 -0
  44. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  45. package/dist/components/input/PendingQueueList.js +9 -8
  46. package/dist/components/input/PendingQueueList.js.map +1 -1
  47. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  48. package/dist/components/input/SettingsValueMenuSession.js +3 -2
  49. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  50. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  51. package/dist/components/layout/BackgroundTaskManager.js +113 -107
  52. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  53. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  54. package/dist/components/layout/BackgroundTasksPanel.js +26 -28
  55. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  56. package/dist/components/layout/Banner.d.ts.map +1 -1
  57. package/dist/components/layout/Banner.js +3 -47
  58. package/dist/components/layout/Banner.js.map +1 -1
  59. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  60. package/dist/components/layout/BottomArea.js +14 -34
  61. package/dist/components/layout/BottomArea.js.map +1 -1
  62. package/dist/components/layout/DiffView.d.ts.map +1 -1
  63. package/dist/components/layout/DiffView.js +8 -7
  64. package/dist/components/layout/DiffView.js.map +1 -1
  65. package/dist/components/layout/StatusBar.d.ts +8 -0
  66. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  67. package/dist/components/layout/StatusBar.js +195 -290
  68. package/dist/components/layout/StatusBar.js.map +1 -1
  69. package/dist/components/menu/CopyMenu.d.ts.map +1 -1
  70. package/dist/components/menu/CopyMenu.js +16 -13
  71. package/dist/components/menu/CopyMenu.js.map +1 -1
  72. package/dist/components/menu/McpSelectionMenu.d.ts.map +1 -1
  73. package/dist/components/menu/McpSelectionMenu.js +8 -7
  74. package/dist/components/menu/McpSelectionMenu.js.map +1 -1
  75. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  76. package/dist/components/menu/ModelSelectionMenu.js +21 -20
  77. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  78. package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
  79. package/dist/components/menu/PathSelectionMenu.js +5 -4
  80. package/dist/components/menu/PathSelectionMenu.js.map +1 -1
  81. package/dist/components/menu/ProfileSelectionMenu.d.ts.map +1 -1
  82. package/dist/components/menu/ProfileSelectionMenu.js +17 -20
  83. package/dist/components/menu/ProfileSelectionMenu.js.map +1 -1
  84. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  85. package/dist/components/menu/ProviderSelectionMenu.js +37 -36
  86. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  87. package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -1
  88. package/dist/components/menu/ResumeSelectionMenu.js +21 -22
  89. package/dist/components/menu/ResumeSelectionMenu.js.map +1 -1
  90. package/dist/components/menu/RewindMenu.d.ts.map +1 -1
  91. package/dist/components/menu/RewindMenu.js +5 -4
  92. package/dist/components/menu/RewindMenu.js.map +1 -1
  93. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  94. package/dist/components/menu/SettingsSelectionMenu.js +15 -14
  95. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  96. package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
  97. package/dist/components/menu/SettingsValueSelectionMenu.js +15 -14
  98. package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
  99. package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
  100. package/dist/components/menu/SkillSelectionMenu.js +17 -18
  101. package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
  102. package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
  103. package/dist/components/menu/SlashCommandMenu.js +5 -4
  104. package/dist/components/menu/SlashCommandMenu.js.map +1 -1
  105. package/dist/components/menu/StandaloneModelPickerApp.d.ts.map +1 -1
  106. package/dist/components/menu/StandaloneModelPickerApp.js +3 -2
  107. package/dist/components/menu/StandaloneModelPickerApp.js.map +1 -1
  108. package/dist/components/menu/SubagentPoolSelectionMenu.d.ts.map +1 -1
  109. package/dist/components/menu/SubagentPoolSelectionMenu.js +26 -24
  110. package/dist/components/menu/SubagentPoolSelectionMenu.js.map +1 -1
  111. package/dist/components/menu/settings-value-formatter.d.ts +3 -1
  112. package/dist/components/menu/settings-value-formatter.d.ts.map +1 -1
  113. package/dist/components/menu/settings-value-formatter.js +24 -25
  114. package/dist/components/menu/settings-value-formatter.js.map +1 -1
  115. package/dist/components/message/ChatMessage.d.ts.map +1 -1
  116. package/dist/components/message/ChatMessage.js +11 -7
  117. package/dist/components/message/ChatMessage.js.map +1 -1
  118. package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
  119. package/dist/components/message/CodeContextSearchRenderer.js +14 -11
  120. package/dist/components/message/CodeContextSearchRenderer.js.map +1 -1
  121. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -1
  122. package/dist/components/message/CommandGroupSummary.js +8 -36
  123. package/dist/components/message/CommandGroupSummary.js.map +1 -1
  124. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  125. package/dist/components/message/CommandMessage.js +313 -329
  126. package/dist/components/message/CommandMessage.js.map +1 -1
  127. package/dist/components/message/GrepRenderer.d.ts.map +1 -1
  128. package/dist/components/message/GrepRenderer.js +12 -9
  129. package/dist/components/message/GrepRenderer.js.map +1 -1
  130. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  131. package/dist/components/message/MemoryRenderer.js +45 -38
  132. package/dist/components/message/MemoryRenderer.js.map +1 -1
  133. package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
  134. package/dist/components/message/ReadFileRenderer.js +20 -16
  135. package/dist/components/message/ReadFileRenderer.js.map +1 -1
  136. package/dist/components/message/RunCodeRenderer.d.ts.map +1 -1
  137. package/dist/components/message/RunCodeRenderer.js +19 -14
  138. package/dist/components/message/RunCodeRenderer.js.map +1 -1
  139. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  140. package/dist/components/message/SubagentActivityMessage.js +15 -15
  141. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  142. package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
  143. package/dist/components/message/WebFetchRenderer.js +16 -13
  144. package/dist/components/message/WebFetchRenderer.js.map +1 -1
  145. package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
  146. package/dist/components/message/WebSearchRenderer.js +20 -16
  147. package/dist/components/message/WebSearchRenderer.js.map +1 -1
  148. package/dist/components/message/command-message-helpers.d.ts +2 -2
  149. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  150. package/dist/components/prompt/ApprovalPrompt.d.ts +12 -1
  151. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  152. package/dist/components/prompt/ApprovalPrompt.js +100 -147
  153. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  154. package/dist/components/prompt/ConfirmPrompt.d.ts.map +1 -1
  155. package/dist/components/prompt/ConfirmPrompt.js +7 -4
  156. package/dist/components/prompt/ConfirmPrompt.js.map +1 -1
  157. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  158. package/dist/components/prompt/QueuePausedPrompt.js +7 -4
  159. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  160. package/dist/components/theme.d.ts +10 -52
  161. package/dist/components/theme.d.ts.map +1 -1
  162. package/dist/components/theme.js +11 -68
  163. package/dist/components/theme.js.map +1 -1
  164. package/dist/context/InputContext.d.ts +17 -0
  165. package/dist/context/InputContext.d.ts.map +1 -1
  166. package/dist/context/InputContext.js +12 -0
  167. package/dist/context/InputContext.js.map +1 -1
  168. package/dist/gateway/gateway.d.ts.map +1 -1
  169. package/dist/gateway/gateway.js +11 -1
  170. package/dist/gateway/gateway.js.map +1 -1
  171. package/dist/hooks/conversation-ui-reducer.d.ts +5 -2
  172. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  173. package/dist/hooks/conversation-ui-reducer.js +9 -2
  174. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  175. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  176. package/dist/hooks/settings-completion-config.js +2 -0
  177. package/dist/hooks/settings-completion-config.js.map +1 -1
  178. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +6 -1
  179. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  180. package/dist/hooks/use-app-keyboard-shortcuts.js +17 -11
  181. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  182. package/dist/hooks/use-conversation.d.ts +1 -0
  183. package/dist/hooks/use-conversation.d.ts.map +1 -1
  184. package/dist/hooks/use-conversation.js +2 -2
  185. package/dist/providers/model-catalog/catalog.generated.d.ts +239 -171
  186. package/dist/providers/model-catalog/catalog.generated.d.ts.map +1 -1
  187. package/dist/providers/model-catalog/catalog.generated.js +238 -179
  188. package/dist/providers/model-catalog/catalog.generated.js.map +1 -1
  189. package/dist/providers/model-catalog/generate-catalog.d.ts.map +1 -1
  190. package/dist/providers/model-catalog/generate-catalog.js +13 -5
  191. package/dist/providers/model-catalog/generate-catalog.js.map +1 -1
  192. package/dist/providers/openai-chat-completions-model.d.ts.map +1 -1
  193. package/dist/providers/openai-chat-completions-model.js +5 -2
  194. package/dist/providers/openai-chat-completions-model.js.map +1 -1
  195. package/dist/services/approval/background-subagent-approval-controller.d.ts +1 -0
  196. package/dist/services/approval/background-subagent-approval-controller.d.ts.map +1 -1
  197. package/dist/services/approval/background-subagent-approval-controller.js +3 -0
  198. package/dist/services/approval/background-subagent-approval-controller.js.map +1 -1
  199. package/dist/services/approval/background-subagent-approval-queue.d.ts +5 -0
  200. package/dist/services/approval/background-subagent-approval-queue.d.ts.map +1 -1
  201. package/dist/services/approval/background-subagent-approval-queue.js +18 -2
  202. package/dist/services/approval/background-subagent-approval-queue.js.map +1 -1
  203. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  204. package/dist/services/conversation/conversation-adapter.js +32 -6
  205. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  206. package/dist/services/conversation/conversation-admission-workflow.d.ts +2 -0
  207. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
  208. package/dist/services/conversation/conversation-admission-workflow.js +1 -1
  209. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
  210. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  211. package/dist/services/conversation/conversation-orchestrator.js +41 -21
  212. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  213. package/dist/services/conversation/conversation-orchestrator.types.d.ts +4 -3
  214. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  215. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  216. package/dist/services/conversation/conversation-service.js +16 -1
  217. package/dist/services/conversation/conversation-service.js.map +1 -1
  218. package/dist/services/cost/model-cost.d.ts +6 -0
  219. package/dist/services/cost/model-cost.d.ts.map +1 -1
  220. package/dist/services/cost/model-cost.js +12 -0
  221. package/dist/services/cost/model-cost.js.map +1 -1
  222. package/dist/services/cost/pricing.d.ts +1 -1
  223. package/dist/services/cost/pricing.d.ts.map +1 -1
  224. package/dist/services/cost/pricing.js +5 -5
  225. package/dist/services/cost/pricing.js.map +1 -1
  226. package/dist/services/models/model-picker-host.d.ts.map +1 -1
  227. package/dist/services/models/model-picker-host.js +9 -5
  228. package/dist/services/models/model-picker-host.js.map +1 -1
  229. package/dist/services/queue/queue-controller.d.ts +3 -0
  230. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  231. package/dist/services/queue/queue-controller.js +53 -5
  232. package/dist/services/queue/queue-controller.js.map +1 -1
  233. package/dist/services/session/session-composition.d.ts +4 -1
  234. package/dist/services/session/session-composition.d.ts.map +1 -1
  235. package/dist/services/session/session-composition.js +66 -13
  236. package/dist/services/session/session-composition.js.map +1 -1
  237. package/dist/services/settings/settings-schema.d.ts +34 -0
  238. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  239. package/dist/services/settings/settings-schema.js +16 -0
  240. package/dist/services/settings/settings-schema.js.map +1 -1
  241. package/dist/services/settings/settings-sources.d.ts +2 -0
  242. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  243. package/dist/services/settings/settings-sources.js +2 -0
  244. package/dist/services/settings/settings-sources.js.map +1 -1
  245. package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -1
  246. package/dist/services/settings/settings-ui-metadata.js +2 -0
  247. package/dist/services/settings/settings-ui-metadata.js.map +1 -1
  248. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
  249. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
  250. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +7 -1
  251. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
  252. package/dist/services/shell/background-shell-output-store.d.ts +4 -2
  253. package/dist/services/shell/background-shell-output-store.d.ts.map +1 -1
  254. package/dist/services/shell/background-shell-output-store.js +9 -8
  255. package/dist/services/shell/background-shell-output-store.js.map +1 -1
  256. package/dist/services/shell/background-shell-watches.d.ts.map +1 -1
  257. package/dist/services/shell/background-shell-watches.js +20 -9
  258. package/dist/services/shell/background-shell-watches.js.map +1 -1
  259. package/dist/services/subagents/subagent-async-registry.js +2 -2
  260. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  261. package/dist/services/subagents/subagent-run-control.d.ts.map +1 -1
  262. package/dist/services/subagents/subagent-run-control.js +3 -2
  263. package/dist/services/subagents/subagent-run-control.js.map +1 -1
  264. package/dist/services/subagents/utils.d.ts +1 -1
  265. package/dist/services/subagents/utils.d.ts.map +1 -1
  266. package/dist/services/subagents/utils.js +5 -4
  267. package/dist/services/subagents/utils.js.map +1 -1
  268. package/dist/skins/SkinContext.d.ts +18 -0
  269. package/dist/skins/SkinContext.d.ts.map +1 -0
  270. package/dist/skins/SkinContext.js +23 -0
  271. package/dist/skins/SkinContext.js.map +1 -0
  272. package/dist/skins/cards/activity.d.ts +8 -0
  273. package/dist/skins/cards/activity.d.ts.map +1 -0
  274. package/dist/skins/cards/activity.js +23 -0
  275. package/dist/skins/cards/activity.js.map +1 -0
  276. package/dist/skins/cards/approval.d.ts +15 -0
  277. package/dist/skins/cards/approval.d.ts.map +1 -0
  278. package/dist/skins/cards/approval.js +64 -0
  279. package/dist/skins/cards/approval.js.map +1 -0
  280. package/dist/skins/cards/body.d.ts +14 -0
  281. package/dist/skins/cards/body.d.ts.map +1 -0
  282. package/dist/skins/cards/body.js +65 -0
  283. package/dist/skins/cards/body.js.map +1 -0
  284. package/dist/skins/cards/card.d.ts +28 -0
  285. package/dist/skins/cards/card.d.ts.map +1 -0
  286. package/dist/skins/cards/card.js +37 -0
  287. package/dist/skins/cards/card.js.map +1 -0
  288. package/dist/skins/cards/index.d.ts +9 -0
  289. package/dist/skins/cards/index.d.ts.map +1 -0
  290. package/dist/skins/cards/index.js +41 -0
  291. package/dist/skins/cards/index.js.map +1 -0
  292. package/dist/skins/cards/live-region.d.ts +16 -0
  293. package/dist/skins/cards/live-region.d.ts.map +1 -0
  294. package/dist/skins/cards/live-region.js +83 -0
  295. package/dist/skins/cards/live-region.js.map +1 -0
  296. package/dist/skins/cards/measure.d.ts +17 -0
  297. package/dist/skins/cards/measure.d.ts.map +1 -0
  298. package/dist/skins/cards/measure.js +29 -0
  299. package/dist/skins/cards/measure.js.map +1 -0
  300. package/dist/skins/cards/messages.d.ts +23 -0
  301. package/dist/skins/cards/messages.d.ts.map +1 -0
  302. package/dist/skins/cards/messages.js +80 -0
  303. package/dist/skins/cards/messages.js.map +1 -0
  304. package/dist/skins/cards/status.d.ts +9 -0
  305. package/dist/skins/cards/status.d.ts.map +1 -0
  306. package/dist/skins/cards/status.js +205 -0
  307. package/dist/skins/cards/status.js.map +1 -0
  308. package/dist/skins/cards/tools.d.ts +21 -0
  309. package/dist/skins/cards/tools.d.ts.map +1 -0
  310. package/dist/skins/cards/tools.js +101 -0
  311. package/dist/skins/cards/tools.js.map +1 -0
  312. package/dist/skins/cards/width.d.ts +4 -0
  313. package/dist/skins/cards/width.d.ts.map +1 -0
  314. package/dist/skins/cards/width.js +32 -0
  315. package/dist/skins/cards/width.js.map +1 -0
  316. package/dist/skins/classic/approval.d.ts +19 -0
  317. package/dist/skins/classic/approval.d.ts.map +1 -0
  318. package/dist/skins/classic/approval.js +50 -0
  319. package/dist/skins/classic/approval.js.map +1 -0
  320. package/dist/skins/classic/index.d.ts +7 -0
  321. package/dist/skins/classic/index.d.ts.map +1 -0
  322. package/dist/skins/classic/index.js +39 -0
  323. package/dist/skins/classic/index.js.map +1 -0
  324. package/dist/skins/classic/live-region.d.ts +19 -0
  325. package/dist/skins/classic/live-region.d.ts.map +1 -0
  326. package/dist/skins/classic/live-region.js +71 -0
  327. package/dist/skins/classic/live-region.js.map +1 -0
  328. package/dist/skins/classic/menu.d.ts +5 -0
  329. package/dist/skins/classic/menu.d.ts.map +1 -0
  330. package/dist/skins/classic/menu.js +20 -0
  331. package/dist/skins/classic/menu.js.map +1 -0
  332. package/dist/skins/classic/messages.d.ts +13 -0
  333. package/dist/skins/classic/messages.d.ts.map +1 -0
  334. package/dist/skins/classic/messages.js +65 -0
  335. package/dist/skins/classic/messages.js.map +1 -0
  336. package/dist/skins/classic/question.d.ts +5 -0
  337. package/dist/skins/classic/question.d.ts.map +1 -0
  338. package/dist/skins/classic/question.js +33 -0
  339. package/dist/skins/classic/question.js.map +1 -0
  340. package/dist/skins/classic/status.d.ts +10 -0
  341. package/dist/skins/classic/status.d.ts.map +1 -0
  342. package/dist/skins/classic/status.js +158 -0
  343. package/dist/skins/classic/status.js.map +1 -0
  344. package/dist/skins/classic/subagent.d.ts +5 -0
  345. package/dist/skins/classic/subagent.d.ts.map +1 -0
  346. package/dist/skins/classic/subagent.js +14 -0
  347. package/dist/skins/classic/subagent.js.map +1 -0
  348. package/dist/skins/classic/tool-section.d.ts +8 -0
  349. package/dist/skins/classic/tool-section.d.ts.map +1 -0
  350. package/dist/skins/classic/tool-section.js +20 -0
  351. package/dist/skins/classic/tool-section.js.map +1 -0
  352. package/dist/skins/classic/tools.d.ts +19 -0
  353. package/dist/skins/classic/tools.d.ts.map +1 -0
  354. package/dist/skins/classic/tools.js +72 -0
  355. package/dist/skins/classic/tools.js.map +1 -0
  356. package/dist/skins/ledger/activity.d.ts +6 -0
  357. package/dist/skins/ledger/activity.d.ts.map +1 -0
  358. package/dist/skins/ledger/activity.js +18 -0
  359. package/dist/skins/ledger/activity.js.map +1 -0
  360. package/dist/skins/ledger/approval.d.ts +17 -0
  361. package/dist/skins/ledger/approval.d.ts.map +1 -0
  362. package/dist/skins/ledger/approval.js +67 -0
  363. package/dist/skins/ledger/approval.js.map +1 -0
  364. package/dist/skins/ledger/body.d.ts +11 -0
  365. package/dist/skins/ledger/body.d.ts.map +1 -0
  366. package/dist/skins/ledger/body.js +77 -0
  367. package/dist/skins/ledger/body.js.map +1 -0
  368. package/dist/skins/ledger/chip.d.ts +27 -0
  369. package/dist/skins/ledger/chip.d.ts.map +1 -0
  370. package/dist/skins/ledger/chip.js +25 -0
  371. package/dist/skins/ledger/chip.js.map +1 -0
  372. package/dist/skins/ledger/index.d.ts +11 -0
  373. package/dist/skins/ledger/index.d.ts.map +1 -0
  374. package/dist/skins/ledger/index.js +44 -0
  375. package/dist/skins/ledger/index.js.map +1 -0
  376. package/dist/skins/ledger/live-region.d.ts +20 -0
  377. package/dist/skins/ledger/live-region.d.ts.map +1 -0
  378. package/dist/skins/ledger/live-region.js +89 -0
  379. package/dist/skins/ledger/live-region.js.map +1 -0
  380. package/dist/skins/ledger/messages.d.ts +17 -0
  381. package/dist/skins/ledger/messages.d.ts.map +1 -0
  382. package/dist/skins/ledger/messages.js +62 -0
  383. package/dist/skins/ledger/messages.js.map +1 -0
  384. package/dist/skins/ledger/status.d.ts +10 -0
  385. package/dist/skins/ledger/status.d.ts.map +1 -0
  386. package/dist/skins/ledger/status.js +302 -0
  387. package/dist/skins/ledger/status.js.map +1 -0
  388. package/dist/skins/ledger/tools.d.ts +20 -0
  389. package/dist/skins/ledger/tools.d.ts.map +1 -0
  390. package/dist/skins/ledger/tools.js +101 -0
  391. package/dist/skins/ledger/tools.js.map +1 -0
  392. package/dist/skins/names.d.ts +10 -0
  393. package/dist/skins/names.d.ts.map +1 -0
  394. package/dist/skins/names.js +9 -0
  395. package/dist/skins/names.js.map +1 -0
  396. package/dist/skins/rail/activity.d.ts +8 -0
  397. package/dist/skins/rail/activity.d.ts.map +1 -0
  398. package/dist/skins/rail/activity.js +23 -0
  399. package/dist/skins/rail/activity.js.map +1 -0
  400. package/dist/skins/rail/approval.d.ts +16 -0
  401. package/dist/skins/rail/approval.d.ts.map +1 -0
  402. package/dist/skins/rail/approval.js +45 -0
  403. package/dist/skins/rail/approval.js.map +1 -0
  404. package/dist/skins/rail/body.d.ts +19 -0
  405. package/dist/skins/rail/body.d.ts.map +1 -0
  406. package/dist/skins/rail/body.js +69 -0
  407. package/dist/skins/rail/body.js.map +1 -0
  408. package/dist/skins/rail/index.d.ts +12 -0
  409. package/dist/skins/rail/index.d.ts.map +1 -0
  410. package/dist/skins/rail/index.js +44 -0
  411. package/dist/skins/rail/index.js.map +1 -0
  412. package/dist/skins/rail/live-region.d.ts +19 -0
  413. package/dist/skins/rail/live-region.d.ts.map +1 -0
  414. package/dist/skins/rail/live-region.js +88 -0
  415. package/dist/skins/rail/live-region.js.map +1 -0
  416. package/dist/skins/rail/messages.d.ts +21 -0
  417. package/dist/skins/rail/messages.d.ts.map +1 -0
  418. package/dist/skins/rail/messages.js +90 -0
  419. package/dist/skins/rail/messages.js.map +1 -0
  420. package/dist/skins/rail/parts.d.ts +25 -0
  421. package/dist/skins/rail/parts.d.ts.map +1 -0
  422. package/dist/skins/rail/parts.js +37 -0
  423. package/dist/skins/rail/parts.js.map +1 -0
  424. package/dist/skins/rail/status.d.ts +10 -0
  425. package/dist/skins/rail/status.d.ts.map +1 -0
  426. package/dist/skins/rail/status.js +147 -0
  427. package/dist/skins/rail/status.js.map +1 -0
  428. package/dist/skins/rail/tools.d.ts +28 -0
  429. package/dist/skins/rail/tools.d.ts.map +1 -0
  430. package/dist/skins/rail/tools.js +85 -0
  431. package/dist/skins/rail/tools.js.map +1 -0
  432. package/dist/skins/registry.d.ts +6 -0
  433. package/dist/skins/registry.d.ts.map +1 -0
  434. package/dist/skins/registry.js +15 -0
  435. package/dist/skins/registry.js.map +1 -0
  436. package/dist/skins/shared/gauge.d.ts +17 -0
  437. package/dist/skins/shared/gauge.d.ts.map +1 -0
  438. package/dist/skins/shared/gauge.js +29 -0
  439. package/dist/skins/shared/gauge.js.map +1 -0
  440. package/dist/skins/shared/limits.d.ts +3 -0
  441. package/dist/skins/shared/limits.d.ts.map +1 -0
  442. package/dist/skins/shared/limits.js +3 -0
  443. package/dist/skins/shared/limits.js.map +1 -0
  444. package/dist/skins/shared/spinner.d.ts +14 -0
  445. package/dist/skins/shared/spinner.d.ts.map +1 -0
  446. package/dist/skins/shared/spinner.js +25 -0
  447. package/dist/skins/shared/spinner.js.map +1 -0
  448. package/dist/skins/testing/conformance.d.ts +8 -0
  449. package/dist/skins/testing/conformance.d.ts.map +1 -0
  450. package/dist/skins/testing/conformance.js +34 -0
  451. package/dist/skins/testing/conformance.js.map +1 -0
  452. package/dist/skins/testing/scenes.d.ts +45 -0
  453. package/dist/skins/testing/scenes.d.ts.map +1 -0
  454. package/dist/skins/testing/scenes.js +466 -0
  455. package/dist/skins/testing/scenes.js.map +1 -0
  456. package/dist/skins/types.d.ts +294 -0
  457. package/dist/skins/types.d.ts.map +1 -0
  458. package/dist/skins/types.js +10 -0
  459. package/dist/skins/types.js.map +1 -0
  460. package/dist/skins/zen/activity.d.ts +7 -0
  461. package/dist/skins/zen/activity.d.ts.map +1 -0
  462. package/dist/skins/zen/activity.js +22 -0
  463. package/dist/skins/zen/activity.js.map +1 -0
  464. package/dist/skins/zen/approval.d.ts +20 -0
  465. package/dist/skins/zen/approval.d.ts.map +1 -0
  466. package/dist/skins/zen/approval.js +67 -0
  467. package/dist/skins/zen/approval.js.map +1 -0
  468. package/dist/skins/zen/body.d.ts +14 -0
  469. package/dist/skins/zen/body.d.ts.map +1 -0
  470. package/dist/skins/zen/body.js +82 -0
  471. package/dist/skins/zen/body.js.map +1 -0
  472. package/dist/skins/zen/index.d.ts +12 -0
  473. package/dist/skins/zen/index.d.ts.map +1 -0
  474. package/dist/skins/zen/index.js +44 -0
  475. package/dist/skins/zen/index.js.map +1 -0
  476. package/dist/skins/zen/live-region.d.ts +21 -0
  477. package/dist/skins/zen/live-region.d.ts.map +1 -0
  478. package/dist/skins/zen/live-region.js +77 -0
  479. package/dist/skins/zen/live-region.js.map +1 -0
  480. package/dist/skins/zen/messages.d.ts +27 -0
  481. package/dist/skins/zen/messages.d.ts.map +1 -0
  482. package/dist/skins/zen/messages.js +81 -0
  483. package/dist/skins/zen/messages.js.map +1 -0
  484. package/dist/skins/zen/status.d.ts +11 -0
  485. package/dist/skins/zen/status.d.ts.map +1 -0
  486. package/dist/skins/zen/status.js +177 -0
  487. package/dist/skins/zen/status.js.map +1 -0
  488. package/dist/skins/zen/style.d.ts +26 -0
  489. package/dist/skins/zen/style.d.ts.map +1 -0
  490. package/dist/skins/zen/style.js +14 -0
  491. package/dist/skins/zen/style.js.map +1 -0
  492. package/dist/skins/zen/tools.d.ts +23 -0
  493. package/dist/skins/zen/tools.d.ts.map +1 -0
  494. package/dist/skins/zen/tools.js +81 -0
  495. package/dist/skins/zen/tools.js.map +1 -0
  496. package/dist/skins/zen/width.d.ts +12 -0
  497. package/dist/skins/zen/width.d.ts.map +1 -0
  498. package/dist/skins/zen/width.js +27 -0
  499. package/dist/skins/zen/width.js.map +1 -0
  500. package/dist/theme/ThemeContext.d.ts +26 -0
  501. package/dist/theme/ThemeContext.d.ts.map +1 -0
  502. package/dist/theme/ThemeContext.js +24 -0
  503. package/dist/theme/ThemeContext.js.map +1 -0
  504. package/dist/theme/detect-terminal-background.d.ts +29 -0
  505. package/dist/theme/detect-terminal-background.d.ts.map +1 -0
  506. package/dist/theme/detect-terminal-background.js +72 -0
  507. package/dist/theme/detect-terminal-background.js.map +1 -0
  508. package/dist/theme/palettes.d.ts +84 -0
  509. package/dist/theme/palettes.d.ts.map +1 -0
  510. package/dist/theme/palettes.js +175 -0
  511. package/dist/theme/palettes.js.map +1 -0
  512. package/dist/theme/resolve-theme.d.ts +44 -0
  513. package/dist/theme/resolve-theme.d.ts.map +1 -0
  514. package/dist/theme/resolve-theme.js +72 -0
  515. package/dist/theme/resolve-theme.js.map +1 -0
  516. package/dist/tools/file/create-file.js +1 -1
  517. package/dist/tools/file/create-file.js.map +1 -1
  518. package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -1
  519. package/dist/tools/system/run-code/run-code-runtime.js +87 -6
  520. package/dist/tools/system/run-code/run-code-runtime.js.map +1 -1
  521. package/dist/utils/shell/execute-shell.js +1 -1
  522. package/dist/utils/shell/execute-shell.js.map +1 -1
  523. package/dist/utils/value-suggestions.d.ts.map +1 -1
  524. package/dist/utils/value-suggestions.js +14 -0
  525. package/dist/utils/value-suggestions.js.map +1 -1
  526. package/package.json +3 -4
@@ -0,0 +1,44 @@
1
+ import { ZenShellActivity, ZenTaskPanel, ZEN_TASK_PANEL_GUTTER } from './activity.js';
2
+ import { ZenMenuFrame, ZenQuestionPrompt, ZenSubagentFeed, ZenToolSection } from './body.js';
3
+ import { classicSkin } from '../classic/index.js';
4
+ import { ZenApprovalChoices, ZenApprovalFrame } from './approval.js';
5
+ import { ZenHints, ZenInputFrame, ZenLiveDivider, ZenPromptMarker, ZenWorkingIndicator } from './live-region.js';
6
+ import { ASSISTANT_GUTTER, ZenAssistantFrame, ZenBanner, ZenUserMessage } from './messages.js';
7
+ import { ZenStatusBar } from './status.js';
8
+ import { ZenToolFrame, ZenToolGroupSummary, ZenToolHeader } from './tools.js';
9
+ /**
10
+ * "Zen": conversation first. One column of prose with a `◆` in its margin, tool
11
+ * calls collapsed to quiet one-liners that only turn red when they fail, a
12
+ * borderless prompt, a status line you only notice when it has something to say,
13
+ * and an approval that reads as a sentence with the answers on one line.
14
+ *
15
+ * It spends colour on trouble and shape on danger, and carries the rest in
16
+ * weight and whitespace, so it reads the same in a terminal with no colour.
17
+ */
18
+ export const zenSkin = {
19
+ ...classicSkin,
20
+ name: 'zen',
21
+ taskPanelGutter: ZEN_TASK_PANEL_GUTTER,
22
+ assistantGutter: ASSISTANT_GUTTER,
23
+ Banner: ZenBanner,
24
+ UserMessage: ZenUserMessage,
25
+ AssistantFrame: ZenAssistantFrame,
26
+ ToolFrame: ZenToolFrame,
27
+ ToolHeader: ZenToolHeader,
28
+ ToolGroupSummary: ZenToolGroupSummary,
29
+ WorkingIndicator: ZenWorkingIndicator,
30
+ LiveDivider: ZenLiveDivider,
31
+ PromptMarker: ZenPromptMarker,
32
+ InputFrame: ZenInputFrame,
33
+ Hints: ZenHints,
34
+ ShellActivity: ZenShellActivity,
35
+ TaskPanel: ZenTaskPanel,
36
+ ApprovalFrame: ZenApprovalFrame,
37
+ ApprovalChoices: ZenApprovalChoices,
38
+ QuestionPrompt: ZenQuestionPrompt,
39
+ SubagentFeed: ZenSubagentFeed,
40
+ ToolSection: ZenToolSection,
41
+ MenuFrame: ZenMenuFrame,
42
+ StatusBar: ZenStatusBar,
43
+ };
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../source/skins/zen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAS;IAC3B,GAAG,WAAW;IACd,IAAI,EAAE,KAAK;IACX,eAAe,EAAE,qBAAqB;IACtC,eAAe,EAAE,gBAAgB;IACjC,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,cAAc;IAC3B,cAAc,EAAE,iBAAiB;IACjC,SAAS,EAAE,YAAY;IACvB,UAAU,EAAE,aAAa;IACzB,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,aAAa;IACzB,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,YAAY;IACvB,aAAa,EAAE,gBAAgB;IAC/B,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;CACxB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type FC } from 'react';
2
+ import type { HintsProps, InputFrameProps, PromptMarkerProps, WorkingIndicatorView } from '../types.js';
3
+ /**
4
+ * `◆ thinking ···`: the answer's own marker, dimmed, with a slow breath beside
5
+ * what is happening. The `◆` is the one thing that does not move, so the line
6
+ * reads as "the next answer is on its way" even in a terminal that shows no colour.
7
+ */
8
+ export declare const ZenWorkingIndicator: FC<WorkingIndicatorView>;
9
+ /** Whitespace is the divider; the live controls are already set off by the blank line above them. */
10
+ export declare const ZenLiveDivider: FC;
11
+ /** The marker is the whole identity of the input: `›` to talk, `!` to run, a question after a refusal. */
12
+ export declare const ZenPromptMarker: FC<PromptMarkerProps>;
13
+ /** Borderless: the input is a line like any other, which is what keeps the page calm. */
14
+ export declare const ZenInputFrame: FC<InputFrameProps>;
15
+ /**
16
+ * Every hint is kept; they are only made small. Keys sit one step above their
17
+ * verbs so the eye can find `esc` without reading the line, and the whole line is
18
+ * the dimmest text on screen.
19
+ */
20
+ export declare const ZenHints: FC<HintsProps>;
21
+ //# sourceMappingURL=live-region.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-region.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/live-region.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAyBxG;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,oBAAoB,CAWxD,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,cAAc,EAAE,EAAe,CAAC;AAE7C,0GAA0G;AAC1G,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,iBAAiB,CAqBjD,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAA2C,CAAC;AAE1F;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,UAAU,CAanC,CAAC"}
@@ -0,0 +1,77 @@
1
+ import React from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import { useTheme } from '../../components/theme.js';
4
+ import { DOT_SPINNER, useSpinnerFrame } from '../shared/spinner.js';
5
+ import { MARKER_COLUMNS, useZenStyles } from './style.js';
6
+ /** Short waits stay calm: a count only appears once the wait is long enough to wonder about. */
7
+ const SHOW_ELAPSED_AFTER_SECONDS = 10;
8
+ const labelFor = ({ phase, toolName }) => {
9
+ switch (phase) {
10
+ case 'thinking':
11
+ return 'thinking';
12
+ case 'generating':
13
+ return 'writing';
14
+ case 'tool_call':
15
+ return toolName ? `using ${toolName}` : 'calling a tool';
16
+ default:
17
+ return 'working';
18
+ }
19
+ };
20
+ /** The breathing dots. Their own component so only these three cells re-render on each tick. */
21
+ const BreathingDots = () => {
22
+ const frame = useSpinnerFrame(DOT_SPINNER, true, 300);
23
+ return React.createElement(Text, null, frame);
24
+ };
25
+ /**
26
+ * `◆ thinking ···`: the answer's own marker, dimmed, with a slow breath beside
27
+ * what is happening. The `◆` is the one thing that does not move, so the line
28
+ * reads as "the next answer is on its way" even in a terminal that shows no colour.
29
+ */
30
+ export const ZenWorkingIndicator = (view) => {
31
+ const theme = useTheme();
32
+ const { faint } = useZenStyles();
33
+ return (React.createElement(Box, { paddingLeft: MARKER_COLUMNS },
34
+ React.createElement(Text, { ...faint },
35
+ React.createElement(Text, { color: theme.accent }, "\u25C6"),
36
+ " ",
37
+ labelFor(view),
38
+ " ",
39
+ React.createElement(BreathingDots, null),
40
+ view.elapsedSeconds >= SHOW_ELAPSED_AFTER_SECONDS ? ` ${view.elapsedSeconds}s` : '')));
41
+ };
42
+ /** Whitespace is the divider; the live controls are already set off by the blank line above them. */
43
+ export const ZenLiveDivider = () => null;
44
+ /** The marker is the whole identity of the input: `›` to talk, `!` to run, a question after a refusal. */
45
+ export const ZenPromptMarker = ({ mode }) => {
46
+ const theme = useTheme();
47
+ if (mode === 'rejection') {
48
+ return (React.createElement(Text, { color: theme.warning, bold: true },
49
+ "why?",
50
+ ' '));
51
+ }
52
+ if (mode === 'shell') {
53
+ return (React.createElement(Text, { color: theme.danger, bold: true },
54
+ "!",
55
+ ' '));
56
+ }
57
+ return (React.createElement(Text, { color: theme.accent, bold: true },
58
+ "\u203A",
59
+ ' '));
60
+ };
61
+ /** Borderless: the input is a line like any other, which is what keeps the page calm. */
62
+ export const ZenInputFrame = ({ children }) => React.createElement(Box, null, children);
63
+ /**
64
+ * Every hint is kept; they are only made small. Keys sit one step above their
65
+ * verbs so the eye can find `esc` without reading the line, and the whole line is
66
+ * the dimmest text on screen.
67
+ */
68
+ export const ZenHints = ({ hints }) => {
69
+ const theme = useTheme();
70
+ const { quiet, faint } = useZenStyles();
71
+ return (React.createElement(Text, { ...faint }, hints.map(([key, action, keyColor], index) => (React.createElement(React.Fragment, { key: `${key}:${action}` },
72
+ index > 0 ? ' · ' : '',
73
+ keyColor ? React.createElement(Text, { color: theme[keyColor] }, key) : React.createElement(Text, { ...quiet }, key),
74
+ " ",
75
+ action)))));
76
+ };
77
+ //# sourceMappingURL=live-region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-region.js","sourceRoot":"","sources":["../../../source/skins/zen/live-region.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type FC } from 'react';
2
+ import type { AssistantFrameProps, BannerView, UserMessageView } from '../types.js';
3
+ /**
4
+ * The answer is the page, so the banner is only a signature: the name, the
5
+ * version beside it, and one muted line saying what it is talking to. The mode
6
+ * only gets a word when it is not the default; its absence is the signal.
7
+ */
8
+ export declare const ZenBanner: FC<BannerView>;
9
+ /**
10
+ * A bare bold line behind an accent `›`: the same marker the prompt uses, so what
11
+ * you typed reads as the line you sent. No band, no box. Continuation lines hang
12
+ * under the first word. The container already puts two blank lines above a user
13
+ * turn, which is all the breathing room it needs.
14
+ */
15
+ export declare const ZenUserMessage: FC<UserMessageView>;
16
+ /** Columns the frame consumes beside the body (marker column plus right slack); declared as `assistantGutter`. */
17
+ export declare const ASSISTANT_GUTTER: number;
18
+ /**
19
+ * The answer hangs off a `◆` in the margin and its body is indented to align
20
+ * with the first word, the way prose sits beside a bullet. Reasoning gets the
21
+ * hollow `◇` instead, so a thought is told apart from an answer by shape and not
22
+ * only by the dim colour the container already gives its text (which does not
23
+ * exist in `mono`). The frame cannot recolour markdown it did not render, so the
24
+ * marker is what carries the difference.
25
+ */
26
+ export declare const ZenAssistantFrame: FC<AssistantFrameProps>;
27
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/messages.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,UAAU,CA4CpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,eAAe,CAc9C,CAAC;AAaF,kHAAkH;AAClH,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,mBAAmB,CAarD,CAAC"}
@@ -0,0 +1,81 @@
1
+ import React from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import { useTheme } from '../../components/theme.js';
4
+ import { MARKER_COLUMNS, useZenStyles } from './style.js';
5
+ /**
6
+ * The answer is the page, so the banner is only a signature: the name, the
7
+ * version beside it, and one muted line saying what it is talking to. The mode
8
+ * only gets a word when it is not the default; its absence is the signal.
9
+ */
10
+ export const ZenBanner = ({ version, mode, mentor, providerLabel, model, reasoningEffort, mentorModel, mentorReasoningEffort, }) => {
11
+ const theme = useTheme();
12
+ const { quiet, faint } = useZenStyles();
13
+ return (React.createElement(Box, { flexDirection: "column", width: "100%", paddingTop: 1, marginBottom: 1 },
14
+ React.createElement(Text, null,
15
+ React.createElement(Text, { color: theme.accent, bold: true }, "term\u00B2"),
16
+ React.createElement(Text, { ...faint },
17
+ " v",
18
+ version),
19
+ mode !== 'STANDARD' && (React.createElement(Text, { color: theme.accent, bold: true },
20
+ ' ',
21
+ mode)),
22
+ mentor && (React.createElement(Text, { color: theme.accentAlt, bold: true },
23
+ ' ',
24
+ "MENTOR"))),
25
+ React.createElement(Text, { ...quiet },
26
+ providerLabel,
27
+ "/",
28
+ model ?? '—',
29
+ reasoningEffort !== 'none' && React.createElement(Text, { ...faint },
30
+ " (",
31
+ reasoningEffort,
32
+ ")"),
33
+ mentor && mentorModel && (React.createElement(React.Fragment, null,
34
+ React.createElement(Text, { ...faint }, " \u00B7 mentor "),
35
+ mentorModel,
36
+ mentorReasoningEffort !== 'none' && React.createElement(Text, { ...faint },
37
+ " (",
38
+ mentorReasoningEffort,
39
+ ")"))))));
40
+ };
41
+ /**
42
+ * A bare bold line behind an accent `›`: the same marker the prompt uses, so what
43
+ * you typed reads as the line you sent. No band, no box. Continuation lines hang
44
+ * under the first word. The container already puts two blank lines above a user
45
+ * turn, which is all the breathing room it needs.
46
+ */
47
+ export const ZenUserMessage = ({ text }) => {
48
+ const theme = useTheme();
49
+ return (React.createElement(Box, { width: "100%" },
50
+ React.createElement(Box, { width: MARKER_COLUMNS, flexShrink: 0 },
51
+ React.createElement(Text, { color: theme.accent, bold: true }, "\u203A")),
52
+ React.createElement(Text, { bold: true, color: theme.text }, text)));
53
+ };
54
+ /**
55
+ * Blank columns kept on the right of the body. Markdown list items are a bullet
56
+ * box beside a text box, and Yoga lays that row out against the text's unwrapped
57
+ * width: a line that only just overflows is left unwrapped, running over its
58
+ * container by up to the width of the bullet and its margin (2). Indenting the body
59
+ * is enough to push such a line past the terminal edge, and a skin cannot reach
60
+ * into the renderer to fix it, so the frame leaves room instead. On a page this
61
+ * sparse the margin is not noticeable.
62
+ */
63
+ const RIGHT_SLACK = 2;
64
+ /** Columns the frame consumes beside the body (marker column plus right slack); declared as `assistantGutter`. */
65
+ export const ASSISTANT_GUTTER = MARKER_COLUMNS + RIGHT_SLACK;
66
+ /**
67
+ * The answer hangs off a `◆` in the margin and its body is indented to align
68
+ * with the first word, the way prose sits beside a bullet. Reasoning gets the
69
+ * hollow `◇` instead, so a thought is told apart from an answer by shape and not
70
+ * only by the dim colour the container already gives its text (which does not
71
+ * exist in `mono`). The frame cannot recolour markdown it did not render, so the
72
+ * marker is what carries the difference.
73
+ */
74
+ export const ZenAssistantFrame = ({ kind, children }) => {
75
+ const theme = useTheme();
76
+ const { faint } = useZenStyles();
77
+ return (React.createElement(Box, null,
78
+ React.createElement(Box, { width: MARKER_COLUMNS, flexShrink: 0 }, kind === 'answer' ? React.createElement(Text, { color: theme.accent }, "\u25C6") : React.createElement(Text, { ...faint }, "\u25C7")),
79
+ React.createElement(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, flexBasis: 0, paddingRight: RIGHT_SLACK }, children)));
80
+ };
81
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../source/skins/zen/messages.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type FC } from 'react';
2
+ import type { StatusView } from '../types.js';
3
+ /**
4
+ * Nearly invisible. One right-aligned, dim line, `Sandboxed · Codex/gpt-5.6-luna · 84% ctx`,
5
+ * that is allowed to raise its voice in exactly two ways: the context segment warns
6
+ * at 75% and escalates at 90%, and alerts (the reasons the bar speaks up at all)
7
+ * each get their own line in their own tone, above it. Quota appears only when a
8
+ * window is nearly spent.
9
+ */
10
+ export declare const ZenStatusBar: FC<StatusView>;
11
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/status.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAyD,UAAU,EAAE,MAAM,aAAa,CAAC;AAuKrG;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,UAAU,CAoDvC,CAAC"}
@@ -0,0 +1,177 @@
1
+ import React from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import { GLYPH_WARNING, useTheme } from '../../components/theme.js';
4
+ import { CONTEXT_DANGER_PERCENT, CONTEXT_WARN_PERCENT, contextTone } from '../shared/gauge.js';
5
+ import { useZenStyles } from './style.js';
6
+ import { cells } from './width.js';
7
+ /** A quota window is only worth a word once it is nearly spent. */
8
+ const QUOTA_SHOWN_ABOVE_PERCENT = 75;
9
+ const QUOTA_URGENT_PERCENT = 90;
10
+ const SEPARATOR = ' · ';
11
+ const toneLook = (tone, bold) => tone === undefined || tone === 'textSubtle' ? { kind: 'faint' } : { kind: 'tone', tone, bold };
12
+ /**
13
+ * The line zen says everything on. The safety label leads because it answers the
14
+ * question people actually glance down here for; the model follows, then whatever
15
+ * is worth a word. Only what the container flagged as attention keeps its tone.
16
+ */
17
+ function configFragments(config) {
18
+ const byId = new Map(config.filter((segment) => segment.text).map((segment) => [segment.id, segment]));
19
+ const order = ['ssh-marker', 'ssh-detail', 'safety', 'mode', 'queue', 'provider-model', 'reasoning', 'mentor'];
20
+ const fragments = [];
21
+ for (const id of order) {
22
+ const segment = byId.get(id);
23
+ if (!segment)
24
+ continue;
25
+ // `reasoning` arrives as " · high", already carrying its own separator; ssh-detail follows its marker.
26
+ const attached = id === 'reasoning' || id === 'ssh-detail';
27
+ const look = id === 'safety'
28
+ ? toneLook(segment.tone, segment.tone === 'danger')
29
+ : id === 'provider-model'
30
+ ? { kind: 'quiet' }
31
+ : id === 'reasoning'
32
+ ? { kind: 'faint' }
33
+ : toneLook(segment.tone, segment.bold);
34
+ fragments.push({
35
+ id,
36
+ text: attached ? segment.text : segment.text.trim(),
37
+ look,
38
+ separated: !attached,
39
+ tier: segment.tier,
40
+ group: 'config',
41
+ });
42
+ }
43
+ return fragments;
44
+ }
45
+ const contextText = (percent, level) => {
46
+ const base = `${percent}% ctx`;
47
+ if (level === 'short')
48
+ return percent >= CONTEXT_DANGER_PERCENT ? `${GLYPH_WARNING} ${base}` : base;
49
+ if (percent >= CONTEXT_DANGER_PERCENT)
50
+ return `${GLYPH_WARNING} ${base} — run /compact`;
51
+ if (percent >= CONTEXT_WARN_PERCENT)
52
+ return `${base} — consider /compact`;
53
+ return base;
54
+ };
55
+ const quotaFragments = (windows) => windows
56
+ .filter((window) => window.percent > QUOTA_SHOWN_ABOVE_PERCENT)
57
+ .map((window) => ({
58
+ id: `quota-${window.label}`,
59
+ text: `${window.label} ${window.percent}%${window.resetText ? `→${window.resetText}` : ''}`,
60
+ look: window.percent >= QUOTA_URGENT_PERCENT
61
+ ? { kind: 'tone', tone: 'warning', bold: true }
62
+ : { kind: 'faint' },
63
+ separated: true,
64
+ // Nearly out of quota is the kind of thing this line exists to say.
65
+ tier: window.percent >= QUOTA_URGENT_PERCENT ? undefined : 2,
66
+ group: 'metrics',
67
+ }));
68
+ function metricFragments(view, contextLevel) {
69
+ const { metrics, gauges } = view;
70
+ const fragments = [];
71
+ for (const segment of metrics) {
72
+ if (!segment.text)
73
+ continue;
74
+ if (segment.id === 'context') {
75
+ const percent = gauges.contextPercent;
76
+ fragments.push({
77
+ id: 'context',
78
+ text: percent === undefined ? segment.text : contextText(percent, contextLevel),
79
+ look: percent === undefined ? { kind: 'faint' } : toneLook(contextTone(percent), percent >= CONTEXT_DANGER_PERCENT),
80
+ separated: true,
81
+ // A window that is filling up is what the line exists to say; below that it is furniture.
82
+ tier: percent !== undefined && percent >= CONTEXT_WARN_PERCENT ? undefined : segment.tier,
83
+ group: 'metrics',
84
+ });
85
+ continue;
86
+ }
87
+ // Numbers that are merely informative (tokens, speed, cache hit rate) are not zen's business. A
88
+ // metric the container has toned, or refused to let go of (a cache-miss warning), is attention.
89
+ const needsAttention = segment.tier === undefined || (segment.tone !== undefined && segment.tone !== 'textSubtle');
90
+ if (segment.id === 'cost' || needsAttention) {
91
+ fragments.push({
92
+ id: segment.id,
93
+ text: segment.text,
94
+ look: toneLook(segment.tone, segment.bold),
95
+ separated: true,
96
+ tier: segment.tier,
97
+ group: 'metrics',
98
+ });
99
+ }
100
+ }
101
+ return fragments;
102
+ }
103
+ const widthOf = (fragments) => fragments.reduce((total, fragment, index) => {
104
+ const separator = index > 0 && fragment.separated ? cells(SEPARATOR) : 0;
105
+ return total + separator + cells(fragment.text);
106
+ }, 0);
107
+ /** Sheds whole fragments, lowest tier first, until the line fits; fragments with no tier are never shed. */
108
+ function fit(fragments, budget) {
109
+ const remaining = [...fragments];
110
+ while (widthOf(remaining) > budget) {
111
+ let victim = -1;
112
+ remaining.forEach((fragment, index) => {
113
+ if (fragment.tier === undefined)
114
+ return;
115
+ if (victim === -1 || fragment.tier < remaining[victim].tier)
116
+ victim = index;
117
+ });
118
+ if (victim === -1)
119
+ break;
120
+ remaining.splice(victim, 1);
121
+ }
122
+ return remaining;
123
+ }
124
+ const Alert = ({ alert }) => {
125
+ const theme = useTheme();
126
+ const { colourless } = useZenStyles();
127
+ const text = alert.parts.map((part) => part.text).join('');
128
+ const lead = text.trimStart().startsWith(GLYPH_WARNING) ? null : (React.createElement(Text, { color: alert.parts.some((part) => part.tone === 'danger') ? theme.danger : theme.warning, bold: true },
129
+ GLYPH_WARNING,
130
+ ' '));
131
+ return (React.createElement(Box, { justifyContent: "flex-end" },
132
+ React.createElement(Text, { wrap: "wrap" },
133
+ lead,
134
+ alert.parts.map((part, index) => (React.createElement(Text, { key: index, color: theme[part.tone], bold: part.bold || (colourless && part.tone !== 'textSubtle') }, part.text))))));
135
+ };
136
+ /**
137
+ * Nearly invisible. One right-aligned, dim line, `Sandboxed · Codex/gpt-5.6-luna · 84% ctx`,
138
+ * that is allowed to raise its voice in exactly two ways: the context segment warns
139
+ * at 75% and escalates at 90%, and alerts (the reasons the bar speaks up at all)
140
+ * each get their own line in their own tone, above it. Quota appears only when a
141
+ * window is nearly spent.
142
+ */
143
+ export const ZenStatusBar = (view) => {
144
+ const theme = useTheme();
145
+ const { quiet, faint, colourless } = useZenStyles();
146
+ const budget = Math.max(1, view.columns - 2);
147
+ // A tone with no colour to carry it has to carry itself in weight.
148
+ const styleOf = (look) => look.kind === 'quiet'
149
+ ? quiet
150
+ : look.kind === 'faint'
151
+ ? faint
152
+ : { color: theme[look.tone], bold: look.bold || colourless, dimColor: false };
153
+ const assemble = (contextLevel) => [
154
+ ...configFragments(view.config),
155
+ ...metricFragments(view, contextLevel),
156
+ ...quotaFragments(view.gauges.quotaWindows),
157
+ ];
158
+ // The advice is the first thing to go; the percentage and its tone carry the warning on their own.
159
+ const full = assemble('full');
160
+ const fragments = fit(widthOf(full) <= budget ? full : assemble('short'), budget);
161
+ // Only when what must stay still does not fit on one line (a narrow terminal with the window filling
162
+ // up) does the line break, and then between its two halves rather than in the middle of one.
163
+ const rows = widthOf(fragments) <= budget
164
+ ? [fragments]
165
+ : [fragments.filter((f) => f.group === 'config'), fragments.filter((f) => f.group === 'metrics')];
166
+ if (fragments.length === 0 && view.alerts.length === 0)
167
+ return null;
168
+ return (React.createElement(Box, { marginTop: 1, flexDirection: "column", width: "100%", paddingX: 1 },
169
+ view.alerts.map((alert) => (React.createElement(Alert, { key: alert.id, alert: alert }))),
170
+ rows
171
+ .filter((row) => row.length > 0)
172
+ .map((row) => (React.createElement(Box, { key: row[0].id, justifyContent: "flex-end" },
173
+ React.createElement(Text, { wrap: "wrap" }, row.map((fragment, index) => (React.createElement(React.Fragment, { key: fragment.id },
174
+ index > 0 && fragment.separated && React.createElement(Text, { ...faint }, SEPARATOR),
175
+ React.createElement(Text, { ...styleOf(fragment.look) }, fragment.text))))))))));
176
+ };
177
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../source/skins/zen/status.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Color } from '../../theme/palettes.js';
2
+ /**
3
+ * Zen is almost all hierarchy and very little chrome, so the quiet levels have to
4
+ * survive a palette with no colour at all. In `mono` every role resolves to
5
+ * `undefined`; there the same ranking is carried by the terminal's `dim`
6
+ * attribute instead, so "recedes" still reads as receding.
7
+ */
8
+ export interface QuietStyle {
9
+ color: Color;
10
+ dimColor: boolean;
11
+ }
12
+ export interface ZenStyles {
13
+ /** Secondary text that should still be read: settled tool calls, the model name. */
14
+ quiet: QuietStyle;
15
+ /** Furniture: separators, hints, elapsed times, reasoning. */
16
+ faint: QuietStyle;
17
+ /**
18
+ * True when the palette has no colour. Anything that elsewhere relies on a tone
19
+ * to stand out (a failure, a warning) must then stand out by weight instead.
20
+ */
21
+ colourless: boolean;
22
+ }
23
+ export declare function useZenStyles(): ZenStyles;
24
+ /** Columns the zen layers share: the marker column ("◆ ", "✓ ", "▲ ") and the indent under it. */
25
+ export declare const MARKER_COLUMNS = 2;
26
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,oFAAoF;IACpF,KAAK,EAAE,UAAU,CAAC;IAClB,8DAA8D;IAC9D,KAAK,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,YAAY,IAAI,SAAS,CASxC;AAED,kGAAkG;AAClG,eAAO,MAAM,cAAc,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { useTheme } from '../../components/theme.js';
2
+ export function useZenStyles() {
3
+ const theme = useTheme();
4
+ // A palette without colour (mono) answers `undefined` for every role.
5
+ const colourless = theme.textSubtle === undefined;
6
+ return {
7
+ quiet: { color: theme.textMuted, dimColor: colourless },
8
+ faint: { color: theme.textSubtle, dimColor: colourless },
9
+ colourless,
10
+ };
11
+ }
12
+ /** Columns the zen layers share: the marker column ("◆ ", "✓ ", "▲ ") and the indent under it. */
13
+ export const MARKER_COLUMNS = 2;
14
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../source/skins/zen/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA0BrD,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,sEAAsE;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IAClD,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;QACvD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE;QACxD,UAAU;KACX,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type FC } from 'react';
2
+ import type { ToolFrameProps, ToolGroupSummaryView, ToolHeaderProps } from '../types.js';
3
+ /**
4
+ * Tool calls sit under the answer's text column, indented by the width of the
5
+ * `◆` marker, so a turn reads as one column of prose with the machinery tucked
6
+ * into it. The frame wraps header and body together (the container composes
7
+ * them), so the indent is all it can do; the header decides everything else.
8
+ */
9
+ export declare const ZenToolFrame: FC<ToolFrameProps>;
10
+ /**
11
+ * One quiet line. Colour is spent only on trouble: a failed call is red from its
12
+ * glyph to its last word, everything that went right recedes. A running call is
13
+ * the one other thing allowed to stand out, with a small spinner in the warning
14
+ * tone, because it is the one thing still happening.
15
+ */
16
+ export declare const ZenToolHeader: FC<ToolHeaderProps>;
17
+ /**
18
+ * One quiet line for a run of calls, and, only when something failed, the failing
19
+ * calls beneath it, in the danger tone. A partly failed run keeps a calm summary:
20
+ * most of it worked, and the line below says exactly what did not.
21
+ */
22
+ export declare const ZenToolGroupSummary: FC<ToolGroupSummaryView>;
23
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../source/skins/zen/tools.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,cAAc,CAI3C,CAAC;AA0BF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,eAAe,CAqC7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,oBAAoB,CA+BxD,CAAC"}