@dsh-cc/tui 0.5.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 (363) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +144 -0
  3. package/lib/bash-history.d.ts +31 -0
  4. package/lib/bash-history.d.ts.map +1 -0
  5. package/lib/bash-history.js +94 -0
  6. package/lib/bash-history.js.map +1 -0
  7. package/lib/compact-fold.d.ts +35 -0
  8. package/lib/compact-fold.d.ts.map +1 -0
  9. package/lib/compact-fold.js +60 -0
  10. package/lib/compact-fold.js.map +1 -0
  11. package/lib/components/arg-completers.d.ts +22 -0
  12. package/lib/components/arg-completers.d.ts.map +1 -0
  13. package/lib/components/arg-completers.js +75 -0
  14. package/lib/components/arg-completers.js.map +1 -0
  15. package/lib/components/code-theme.d.ts +25 -0
  16. package/lib/components/code-theme.d.ts.map +1 -0
  17. package/lib/components/code-theme.js +137 -0
  18. package/lib/components/code-theme.js.map +1 -0
  19. package/lib/components/completion.d.ts +50 -0
  20. package/lib/components/completion.d.ts.map +1 -0
  21. package/lib/components/completion.js +279 -0
  22. package/lib/components/completion.js.map +1 -0
  23. package/lib/components/diff-card.d.ts +29 -0
  24. package/lib/components/diff-card.d.ts.map +1 -0
  25. package/lib/components/diff-card.js +175 -0
  26. package/lib/components/diff-card.js.map +1 -0
  27. package/lib/components/diff-hunks.d.ts +44 -0
  28. package/lib/components/diff-hunks.d.ts.map +1 -0
  29. package/lib/components/diff-hunks.js +188 -0
  30. package/lib/components/diff-hunks.js.map +1 -0
  31. package/lib/components/editor-history.d.ts +23 -0
  32. package/lib/components/editor-history.d.ts.map +1 -0
  33. package/lib/components/editor-history.js +29 -0
  34. package/lib/components/editor-history.js.map +1 -0
  35. package/lib/components/markdown-theme.d.ts +11 -0
  36. package/lib/components/markdown-theme.d.ts.map +1 -0
  37. package/lib/components/markdown-theme.js +29 -0
  38. package/lib/components/markdown-theme.js.map +1 -0
  39. package/lib/components/masked-input.d.ts +24 -0
  40. package/lib/components/masked-input.d.ts.map +1 -0
  41. package/lib/components/masked-input.js +168 -0
  42. package/lib/components/masked-input.js.map +1 -0
  43. package/lib/components/overlay-host.d.ts +31 -0
  44. package/lib/components/overlay-host.d.ts.map +1 -0
  45. package/lib/components/overlay-host.js +128 -0
  46. package/lib/components/overlay-host.js.map +1 -0
  47. package/lib/components/overlays.d.ts +94 -0
  48. package/lib/components/overlays.d.ts.map +1 -0
  49. package/lib/components/overlays.js +450 -0
  50. package/lib/components/overlays.js.map +1 -0
  51. package/lib/components/provider-box.d.ts +23 -0
  52. package/lib/components/provider-box.d.ts.map +1 -0
  53. package/lib/components/provider-box.js +164 -0
  54. package/lib/components/provider-box.js.map +1 -0
  55. package/lib/components/read-group.d.ts +51 -0
  56. package/lib/components/read-group.d.ts.map +1 -0
  57. package/lib/components/read-group.js +105 -0
  58. package/lib/components/read-group.js.map +1 -0
  59. package/lib/components/root-bash.d.ts +36 -0
  60. package/lib/components/root-bash.d.ts.map +1 -0
  61. package/lib/components/root-bash.js +112 -0
  62. package/lib/components/root-bash.js.map +1 -0
  63. package/lib/components/root-types.d.ts +42 -0
  64. package/lib/components/root-types.d.ts.map +1 -0
  65. package/lib/components/root-types.js +8 -0
  66. package/lib/components/root-types.js.map +1 -0
  67. package/lib/components/root-utils.d.ts +22 -0
  68. package/lib/components/root-utils.d.ts.map +1 -0
  69. package/lib/components/root-utils.js +45 -0
  70. package/lib/components/root-utils.js.map +1 -0
  71. package/lib/components/root.d.ts +25 -0
  72. package/lib/components/root.d.ts.map +1 -0
  73. package/lib/components/root.js +357 -0
  74. package/lib/components/root.js.map +1 -0
  75. package/lib/components/theme.d.ts +61 -0
  76. package/lib/components/theme.d.ts.map +1 -0
  77. package/lib/components/theme.js +99 -0
  78. package/lib/components/theme.js.map +1 -0
  79. package/lib/components/transcript.d.ts +43 -0
  80. package/lib/components/transcript.d.ts.map +1 -0
  81. package/lib/components/transcript.js +203 -0
  82. package/lib/components/transcript.js.map +1 -0
  83. package/lib/components/working-line.d.ts +35 -0
  84. package/lib/components/working-line.d.ts.map +1 -0
  85. package/lib/components/working-line.js +66 -0
  86. package/lib/components/working-line.js.map +1 -0
  87. package/lib/effort-catalog.d.ts +27 -0
  88. package/lib/effort-catalog.d.ts.map +1 -0
  89. package/lib/effort-catalog.js +36 -0
  90. package/lib/effort-catalog.js.map +1 -0
  91. package/lib/export-markdown.d.ts +18 -0
  92. package/lib/export-markdown.d.ts.map +1 -0
  93. package/lib/export-markdown.js +124 -0
  94. package/lib/export-markdown.js.map +1 -0
  95. package/lib/harness/approval-preview.d.ts +33 -0
  96. package/lib/harness/approval-preview.d.ts.map +1 -0
  97. package/lib/harness/approval-preview.js +179 -0
  98. package/lib/harness/approval-preview.js.map +1 -0
  99. package/lib/harness/boot-banner.d.ts +14 -0
  100. package/lib/harness/boot-banner.d.ts.map +1 -0
  101. package/lib/harness/boot-banner.js +89 -0
  102. package/lib/harness/boot-banner.js.map +1 -0
  103. package/lib/harness/driver-agent.d.ts +78 -0
  104. package/lib/harness/driver-agent.d.ts.map +1 -0
  105. package/lib/harness/driver-agent.js +314 -0
  106. package/lib/harness/driver-agent.js.map +1 -0
  107. package/lib/harness/driver-agents.d.ts +20 -0
  108. package/lib/harness/driver-agents.d.ts.map +1 -0
  109. package/lib/harness/driver-agents.js +123 -0
  110. package/lib/harness/driver-agents.js.map +1 -0
  111. package/lib/harness/driver-approvals.d.ts +38 -0
  112. package/lib/harness/driver-approvals.d.ts.map +1 -0
  113. package/lib/harness/driver-approvals.js +277 -0
  114. package/lib/harness/driver-approvals.js.map +1 -0
  115. package/lib/harness/driver-bash.d.ts +15 -0
  116. package/lib/harness/driver-bash.d.ts.map +1 -0
  117. package/lib/harness/driver-bash.js +73 -0
  118. package/lib/harness/driver-bash.js.map +1 -0
  119. package/lib/harness/driver-catalog.d.ts +84 -0
  120. package/lib/harness/driver-catalog.d.ts.map +1 -0
  121. package/lib/harness/driver-catalog.js +256 -0
  122. package/lib/harness/driver-catalog.js.map +1 -0
  123. package/lib/harness/driver-ctx.d.ts +462 -0
  124. package/lib/harness/driver-ctx.d.ts.map +1 -0
  125. package/lib/harness/driver-ctx.js +11 -0
  126. package/lib/harness/driver-ctx.js.map +1 -0
  127. package/lib/harness/driver-hud.d.ts +31 -0
  128. package/lib/harness/driver-hud.d.ts.map +1 -0
  129. package/lib/harness/driver-hud.js +204 -0
  130. package/lib/harness/driver-hud.js.map +1 -0
  131. package/lib/harness/driver-live.d.ts +36 -0
  132. package/lib/harness/driver-live.d.ts.map +1 -0
  133. package/lib/harness/driver-live.js +44 -0
  134. package/lib/harness/driver-live.js.map +1 -0
  135. package/lib/harness/driver-modal.d.ts +52 -0
  136. package/lib/harness/driver-modal.d.ts.map +1 -0
  137. package/lib/harness/driver-modal.js +78 -0
  138. package/lib/harness/driver-modal.js.map +1 -0
  139. package/lib/harness/driver-mode.d.ts +35 -0
  140. package/lib/harness/driver-mode.d.ts.map +1 -0
  141. package/lib/harness/driver-mode.js +84 -0
  142. package/lib/harness/driver-mode.js.map +1 -0
  143. package/lib/harness/driver-pickers.d.ts +48 -0
  144. package/lib/harness/driver-pickers.d.ts.map +1 -0
  145. package/lib/harness/driver-pickers.js +249 -0
  146. package/lib/harness/driver-pickers.js.map +1 -0
  147. package/lib/harness/driver-promote.d.ts +29 -0
  148. package/lib/harness/driver-promote.d.ts.map +1 -0
  149. package/lib/harness/driver-promote.js +36 -0
  150. package/lib/harness/driver-promote.js.map +1 -0
  151. package/lib/harness/driver-queue.d.ts +19 -0
  152. package/lib/harness/driver-queue.d.ts.map +1 -0
  153. package/lib/harness/driver-queue.js +281 -0
  154. package/lib/harness/driver-queue.js.map +1 -0
  155. package/lib/harness/driver-run-local.d.ts +32 -0
  156. package/lib/harness/driver-run-local.d.ts.map +1 -0
  157. package/lib/harness/driver-run-local.js +366 -0
  158. package/lib/harness/driver-run-local.js.map +1 -0
  159. package/lib/harness/driver-sessions.d.ts +28 -0
  160. package/lib/harness/driver-sessions.d.ts.map +1 -0
  161. package/lib/harness/driver-sessions.js +386 -0
  162. package/lib/harness/driver-sessions.js.map +1 -0
  163. package/lib/harness/driver.d.ts +22 -0
  164. package/lib/harness/driver.d.ts.map +1 -0
  165. package/lib/harness/driver.js +459 -0
  166. package/lib/harness/driver.js.map +1 -0
  167. package/lib/harness/preset.d.ts +32 -0
  168. package/lib/harness/preset.d.ts.map +1 -0
  169. package/lib/harness/preset.js +34 -0
  170. package/lib/harness/preset.js.map +1 -0
  171. package/lib/harness/session-list.d.ts +65 -0
  172. package/lib/harness/session-list.d.ts.map +1 -0
  173. package/lib/harness/session-list.js +91 -0
  174. package/lib/harness/session-list.js.map +1 -0
  175. package/lib/harness/shell-output.d.ts +44 -0
  176. package/lib/harness/shell-output.d.ts.map +1 -0
  177. package/lib/harness/shell-output.js +90 -0
  178. package/lib/harness/shell-output.js.map +1 -0
  179. package/lib/harness/statusline-cc-transcript.d.ts +51 -0
  180. package/lib/harness/statusline-cc-transcript.d.ts.map +1 -0
  181. package/lib/harness/statusline-cc-transcript.js +191 -0
  182. package/lib/harness/statusline-cc-transcript.js.map +1 -0
  183. package/lib/harness/statusline-command.d.ts +54 -0
  184. package/lib/harness/statusline-command.d.ts.map +1 -0
  185. package/lib/harness/statusline-command.js +161 -0
  186. package/lib/harness/statusline-command.js.map +1 -0
  187. package/lib/harness/statusline-payload.d.ts +79 -0
  188. package/lib/harness/statusline-payload.d.ts.map +1 -0
  189. package/lib/harness/statusline-payload.js +93 -0
  190. package/lib/harness/statusline-payload.js.map +1 -0
  191. package/lib/harness/statusline-settings.d.ts +47 -0
  192. package/lib/harness/statusline-settings.d.ts.map +1 -0
  193. package/lib/harness/statusline-settings.js +57 -0
  194. package/lib/harness/statusline-settings.js.map +1 -0
  195. package/lib/harness/statusline-wiring.d.ts +45 -0
  196. package/lib/harness/statusline-wiring.d.ts.map +1 -0
  197. package/lib/harness/statusline-wiring.js +247 -0
  198. package/lib/harness/statusline-wiring.js.map +1 -0
  199. package/lib/harness/usage-view.d.ts +84 -0
  200. package/lib/harness/usage-view.d.ts.map +1 -0
  201. package/lib/harness/usage-view.js +199 -0
  202. package/lib/harness/usage-view.js.map +1 -0
  203. package/lib/harness/worktree-exit.d.ts +105 -0
  204. package/lib/harness/worktree-exit.d.ts.map +1 -0
  205. package/lib/harness/worktree-exit.js +168 -0
  206. package/lib/harness/worktree-exit.js.map +1 -0
  207. package/lib/history.d.ts +50 -0
  208. package/lib/history.d.ts.map +1 -0
  209. package/lib/history.js +139 -0
  210. package/lib/history.js.map +1 -0
  211. package/lib/index.d.ts +63 -0
  212. package/lib/index.d.ts.map +1 -0
  213. package/lib/index.js +54 -0
  214. package/lib/index.js.map +1 -0
  215. package/lib/input.d.ts +158 -0
  216. package/lib/input.d.ts.map +1 -0
  217. package/lib/input.js +400 -0
  218. package/lib/input.js.map +1 -0
  219. package/lib/invariant.d.ts +14 -0
  220. package/lib/invariant.d.ts.map +1 -0
  221. package/lib/invariant.js +20 -0
  222. package/lib/invariant.js.map +1 -0
  223. package/lib/mode-cycle.d.ts +22 -0
  224. package/lib/mode-cycle.d.ts.map +1 -0
  225. package/lib/mode-cycle.js +32 -0
  226. package/lib/mode-cycle.js.map +1 -0
  227. package/lib/model-catalog.d.ts +22 -0
  228. package/lib/model-catalog.d.ts.map +1 -0
  229. package/lib/model-catalog.js +45 -0
  230. package/lib/model-catalog.js.map +1 -0
  231. package/lib/packaged-preset.d.ts +32 -0
  232. package/lib/packaged-preset.d.ts.map +1 -0
  233. package/lib/packaged-preset.js +94 -0
  234. package/lib/packaged-preset.js.map +1 -0
  235. package/lib/plugin.d.ts +11 -0
  236. package/lib/plugin.d.ts.map +1 -0
  237. package/lib/plugin.js +88 -0
  238. package/lib/plugin.js.map +1 -0
  239. package/lib/profile.d.ts +4 -0
  240. package/lib/profile.d.ts.map +1 -0
  241. package/lib/profile.js +7 -0
  242. package/lib/profile.js.map +1 -0
  243. package/lib/project-sessions.d.ts +29 -0
  244. package/lib/project-sessions.d.ts.map +1 -0
  245. package/lib/project-sessions.js +60 -0
  246. package/lib/project-sessions.js.map +1 -0
  247. package/lib/project.d.ts +75 -0
  248. package/lib/project.d.ts.map +1 -0
  249. package/lib/project.js +196 -0
  250. package/lib/project.js.map +1 -0
  251. package/lib/provider-actions.d.ts +37 -0
  252. package/lib/provider-actions.d.ts.map +1 -0
  253. package/lib/provider-actions.js +417 -0
  254. package/lib/provider-actions.js.map +1 -0
  255. package/lib/provider-command.d.ts +109 -0
  256. package/lib/provider-command.d.ts.map +1 -0
  257. package/lib/provider-command.js +220 -0
  258. package/lib/provider-command.js.map +1 -0
  259. package/lib/provider-detail.d.ts +15 -0
  260. package/lib/provider-detail.d.ts.map +1 -0
  261. package/lib/provider-detail.js +201 -0
  262. package/lib/provider-detail.js.map +1 -0
  263. package/lib/provider-flow.d.ts +191 -0
  264. package/lib/provider-flow.d.ts.map +1 -0
  265. package/lib/provider-flow.js +192 -0
  266. package/lib/provider-flow.js.map +1 -0
  267. package/lib/provider-presets.d.ts +32 -0
  268. package/lib/provider-presets.d.ts.map +1 -0
  269. package/lib/provider-presets.js +105 -0
  270. package/lib/provider-presets.js.map +1 -0
  271. package/lib/provider-read.d.ts +63 -0
  272. package/lib/provider-read.d.ts.map +1 -0
  273. package/lib/provider-read.js +115 -0
  274. package/lib/provider-read.js.map +1 -0
  275. package/lib/provider-settings.d.ts +30 -0
  276. package/lib/provider-settings.d.ts.map +1 -0
  277. package/lib/provider-settings.js +65 -0
  278. package/lib/provider-settings.js.map +1 -0
  279. package/lib/resume-target.d.ts +59 -0
  280. package/lib/resume-target.d.ts.map +1 -0
  281. package/lib/resume-target.js +143 -0
  282. package/lib/resume-target.js.map +1 -0
  283. package/lib/slash.d.ts +44 -0
  284. package/lib/slash.d.ts.map +1 -0
  285. package/lib/slash.js +81 -0
  286. package/lib/slash.js.map +1 -0
  287. package/lib/state/driver-types.d.ts +505 -0
  288. package/lib/state/driver-types.d.ts.map +1 -0
  289. package/lib/state/driver-types.js +8 -0
  290. package/lib/state/driver-types.js.map +1 -0
  291. package/lib/state/driver-usage-types.d.ts +59 -0
  292. package/lib/state/driver-usage-types.d.ts.map +1 -0
  293. package/lib/state/driver-usage-types.js +8 -0
  294. package/lib/state/driver-usage-types.js.map +1 -0
  295. package/lib/statusline.d.ts +63 -0
  296. package/lib/statusline.d.ts.map +1 -0
  297. package/lib/statusline.js +97 -0
  298. package/lib/statusline.js.map +1 -0
  299. package/lib/store/pickers.d.ts +34 -0
  300. package/lib/store/pickers.d.ts.map +1 -0
  301. package/lib/store/pickers.js +111 -0
  302. package/lib/store/pickers.js.map +1 -0
  303. package/lib/store/provider-panel.d.ts +107 -0
  304. package/lib/store/provider-panel.d.ts.map +1 -0
  305. package/lib/store/provider-panel.js +151 -0
  306. package/lib/store/provider-panel.js.map +1 -0
  307. package/lib/store/question.d.ts +21 -0
  308. package/lib/store/question.d.ts.map +1 -0
  309. package/lib/store/question.js +59 -0
  310. package/lib/store/question.js.map +1 -0
  311. package/lib/store/queue.d.ts +27 -0
  312. package/lib/store/queue.d.ts.map +1 -0
  313. package/lib/store/queue.js +34 -0
  314. package/lib/store/queue.js.map +1 -0
  315. package/lib/store/session.d.ts +73 -0
  316. package/lib/store/session.d.ts.map +1 -0
  317. package/lib/store/session.js +172 -0
  318. package/lib/store/session.js.map +1 -0
  319. package/lib/store/subagents.d.ts +16 -0
  320. package/lib/store/subagents.d.ts.map +1 -0
  321. package/lib/store/subagents.js +44 -0
  322. package/lib/store/subagents.js.map +1 -0
  323. package/lib/store/todos.d.ts +35 -0
  324. package/lib/store/todos.d.ts.map +1 -0
  325. package/lib/store/todos.js +68 -0
  326. package/lib/store/todos.js.map +1 -0
  327. package/lib/store/usage.d.ts +15 -0
  328. package/lib/store/usage.d.ts.map +1 -0
  329. package/lib/store/usage.js +27 -0
  330. package/lib/store/usage.js.map +1 -0
  331. package/lib/store/views.d.ts +419 -0
  332. package/lib/store/views.d.ts.map +1 -0
  333. package/lib/store/views.js +3 -0
  334. package/lib/store/views.js.map +1 -0
  335. package/lib/store.d.ts +19 -0
  336. package/lib/store.d.ts.map +1 -0
  337. package/lib/store.js +10 -0
  338. package/lib/store.js.map +1 -0
  339. package/lib/terminal/lease.d.ts +33 -0
  340. package/lib/terminal/lease.d.ts.map +1 -0
  341. package/lib/terminal/lease.js +99 -0
  342. package/lib/terminal/lease.js.map +1 -0
  343. package/lib/tool-card.d.ts +75 -0
  344. package/lib/tool-card.d.ts.map +1 -0
  345. package/lib/tool-card.js +109 -0
  346. package/lib/tool-card.js.map +1 -0
  347. package/lib/tool-verbs.d.ts +12 -0
  348. package/lib/tool-verbs.d.ts.map +1 -0
  349. package/lib/tool-verbs.js +29 -0
  350. package/lib/tool-verbs.js.map +1 -0
  351. package/lib/transcript.d.ts +40 -0
  352. package/lib/transcript.d.ts.map +1 -0
  353. package/lib/transcript.js +413 -0
  354. package/lib/transcript.js.map +1 -0
  355. package/lib/working-line.d.ts +44 -0
  356. package/lib/working-line.d.ts.map +1 -0
  357. package/lib/working-line.js +56 -0
  358. package/lib/working-line.js.map +1 -0
  359. package/package.json +72 -0
  360. package/presets/cc/.dsh-cc-managed.json +5 -0
  361. package/presets/cc/agent.cordis.yml +524 -0
  362. package/presets/cc/preset.yml +3 -0
  363. package/scripts/stage-preset.mjs +26 -0
@@ -0,0 +1,413 @@
1
+ /**
2
+ * Fold a harness session-event envelope into the TUI store. UI-only: never
3
+ * appends new durable event types.
4
+ * @module @dsh-cc/tui/transcript
5
+ */
6
+ import { formatCallCard, formatResultCard, } from "./tool-card.js";
7
+ import { setBusy, setPermissionMode, setSessionTitle, upsertRow, } from "./store.js";
8
+ import { dropRowsInRange, extractCompactSummary, isCompactCheckpointSource } from "./compact-fold.js";
9
+ function parseArgs(raw) {
10
+ if (raw.length === 0)
11
+ return {};
12
+ try {
13
+ return JSON.parse(raw);
14
+ }
15
+ catch {
16
+ return raw;
17
+ }
18
+ }
19
+ function textOf(data) {
20
+ if (data === null || data === undefined)
21
+ return '';
22
+ if (typeof data === 'string')
23
+ return data;
24
+ if (typeof data !== 'object')
25
+ return String(data);
26
+ const record = data;
27
+ if (typeof record.text === 'string')
28
+ return record.text;
29
+ if (typeof record.message === 'string')
30
+ return record.message;
31
+ if (typeof record.content === 'string')
32
+ return record.content;
33
+ // UserMessage carries content as an array of typed blocks; concatenate the
34
+ // text of every text block (ignore images and other non-text blocks).
35
+ if (Array.isArray(record.content)) {
36
+ return record.content
37
+ .filter((block) => block !== null && typeof block === 'object' &&
38
+ block.type === 'text' &&
39
+ typeof block.text === 'string')
40
+ .map(block => block.text)
41
+ .join('');
42
+ }
43
+ return '';
44
+ }
45
+ function callIdOf(data) {
46
+ if (data === null || typeof data !== 'object')
47
+ return '';
48
+ const record = data;
49
+ if (record.callId !== undefined)
50
+ return String(record.callId);
51
+ if (record.id !== undefined)
52
+ return String(record.id);
53
+ return '';
54
+ }
55
+ function nameOf(data) {
56
+ if (data === null || typeof data !== 'object')
57
+ return 'tool';
58
+ const record = data;
59
+ if (typeof record.name === 'string')
60
+ return record.name;
61
+ if (typeof record.toolName === 'string')
62
+ return record.toolName;
63
+ return 'tool';
64
+ }
65
+ function argsOf(data) {
66
+ if (data === null || typeof data !== 'object')
67
+ return '';
68
+ const record = data;
69
+ if (typeof record.arguments === 'string')
70
+ return record.arguments;
71
+ if (record.arguments !== undefined) {
72
+ try {
73
+ return JSON.stringify(record.arguments);
74
+ }
75
+ catch {
76
+ return String(record.arguments);
77
+ }
78
+ }
79
+ return '';
80
+ }
81
+ /** Unwrap the live {turn, step, chunk} envelope to the inner StreamChunk. */
82
+ function unwrapChunk(data) {
83
+ if (data === null || typeof data !== 'object')
84
+ return data;
85
+ const record = data;
86
+ if (record.chunk !== null && typeof record.chunk === 'object' && !Array.isArray(record.chunk)) {
87
+ return record.chunk;
88
+ }
89
+ return data;
90
+ }
91
+ /** Structural check for a tool-call-delta stream chunk. */
92
+ function isToolCallDelta(chunk) {
93
+ if (chunk === null || typeof chunk !== 'object')
94
+ return false;
95
+ const record = chunk;
96
+ return record.type === 'tool-call-delta'
97
+ && (typeof record.id === 'string' || typeof record.id === 'number')
98
+ && typeof record.argumentsDelta === 'string';
99
+ }
100
+ function chunkKind(data) {
101
+ const chunk = unwrapChunk(data);
102
+ if (chunk === null || typeof chunk !== 'object')
103
+ return 'assistant';
104
+ const record = chunk;
105
+ const type = typeof record.type === 'string' ? record.type : '';
106
+ if (type.includes('reason') || type.includes('think'))
107
+ return 'thinking';
108
+ if (record.reasoning === true)
109
+ return 'thinking';
110
+ return 'assistant';
111
+ }
112
+ function chunkText(data) {
113
+ if (data === null || typeof data !== 'object')
114
+ return textOf(data);
115
+ const record = unwrapChunk(data);
116
+ if (typeof record.text === 'string')
117
+ return record.text;
118
+ if (typeof record.delta === 'string')
119
+ return record.delta;
120
+ if (record.delta !== null && typeof record.delta === 'object') {
121
+ const delta = record.delta;
122
+ if (typeof delta.text === 'string')
123
+ return delta.text;
124
+ }
125
+ return textOf(data);
126
+ }
127
+ /**
128
+ * Seq tag for rows created by `event`: rows carry the log position that
129
+ * produced them so a surface `replace` can drop the exact replaced span.
130
+ * Omitted (key absent) when the envelope carries no seq.
131
+ */
132
+ function seqTag(event) {
133
+ return typeof event.seq === 'number' ? { seq: event.seq } : {};
134
+ }
135
+ /** The surface-replacement range of a `user/message`, when it replaces. */
136
+ function replaceOpOf(event) {
137
+ const op = event.surfaceOp;
138
+ if (typeof op !== 'object' || op === null || op.op !== 'replace')
139
+ return undefined;
140
+ return typeof op.start === 'number' && typeof op.end === 'number' ? { start: op.start, end: op.end } : undefined;
141
+ }
142
+ /** Drop `pendingCompact` (exactOptionalPropertyTypes-safe field removal). */
143
+ function withoutPendingCompact(state) {
144
+ const { pendingCompact: _dropped, ...rest } = state;
145
+ return rest;
146
+ }
147
+ /**
148
+ * Apply one surface replacement: drop the replaced span from the transcript
149
+ * and — when the replacement is a compact checkpoint — paint the collapsible
150
+ * compact boundary at the cut point using the metering armed by the adjacent
151
+ * `compaction/summary`. Non-checkpoint replacements just shrink the visible
152
+ * transcript (the model sees the same surface).
153
+ */
154
+ function applySurfaceReplace(state, event, op) {
155
+ const data = event.data;
156
+ const source = data !== null && typeof data === 'object'
157
+ ? data.source
158
+ : undefined;
159
+ const rows = dropRowsInRange(state.rows, op.start, op.end);
160
+ if (!isCompactCheckpointSource(source)) {
161
+ return withoutPendingCompact({ ...state, rows });
162
+ }
163
+ const pending = state.pendingCompact;
164
+ const sourceCommandId = pending?.sourceCommandId
165
+ ?? (source !== null && typeof source === 'object'
166
+ && typeof source.sourceCommandId === 'string'
167
+ ? source.sourceCommandId
168
+ : undefined);
169
+ const compact = {
170
+ kind: 'compact',
171
+ trigger: sourceCommandId === undefined ? 'auto' : 'manual',
172
+ items: pending?.items ?? 0,
173
+ tokens: pending?.tokens ?? 0,
174
+ summary: extractCompactSummary(data.content),
175
+ ...seqTag(event),
176
+ };
177
+ // Insert at the cut point: before the first surviving row past the
178
+ // replaced range (or the tail when the compaction kept nothing newer).
179
+ const insertAt = rows.findIndex(row => {
180
+ const seq = row.seq;
181
+ return typeof seq === 'number' && seq > op.end;
182
+ });
183
+ const withCompact = insertAt === -1
184
+ ? [...rows, compact]
185
+ : [...rows.slice(0, insertAt), compact, ...rows.slice(insertAt)];
186
+ return withoutPendingCompact({ ...state, rows: withCompact });
187
+ }
188
+ /**
189
+ * Fold a tool-call-delta chunk into the pending tool row, accumulating
190
+ * `argumentsDelta` per callId. Presenters are NOT invoked on partial JSON;
191
+ * the durable tool/call finalizes the card through the existing callId
192
+ * upsert. A delta arriving after the row was finalized (running:false with
193
+ * a result) is ignored — durable order normally prevents this.
194
+ */
195
+ function foldToolCallDelta(state, chunk, seq) {
196
+ const callId = String(chunk.id);
197
+ const carriedName = typeof chunk.name === 'string' && chunk.name.length > 0 ? chunk.name : undefined;
198
+ const existing = state.rows.find(row => row.kind === 'tool' && row.callId === callId);
199
+ if (existing !== undefined && existing.kind === 'tool') {
200
+ if (existing.running === false && existing.result !== undefined)
201
+ return state;
202
+ const name = carriedName !== undefined && existing.name === 'tool' ? carriedName : existing.name;
203
+ const title = carriedName !== undefined && existing.title === 'tool' ? carriedName : existing.title;
204
+ return setBusy(upsertRow(state, {
205
+ kind: 'tool',
206
+ callId,
207
+ name,
208
+ args: existing.args + chunk.argumentsDelta,
209
+ title,
210
+ ...existing.body !== undefined ? { body: existing.body } : {},
211
+ ...existing.result !== undefined ? { result: existing.result } : {},
212
+ ...existing.error !== undefined ? { error: existing.error } : {},
213
+ running: true,
214
+ ...seq === undefined ? {} : { seq },
215
+ }), true);
216
+ }
217
+ const initialName = carriedName ?? 'tool';
218
+ return setBusy(upsertRow(state, {
219
+ kind: 'tool',
220
+ callId,
221
+ name: initialName,
222
+ args: chunk.argumentsDelta,
223
+ title: initialName,
224
+ running: true,
225
+ ...seq === undefined ? {} : { seq },
226
+ }), true);
227
+ }
228
+ /**
229
+ * Apply one session event to the view model.
230
+ * @param state - current TUI state.
231
+ * @param event - a `session/event` envelope.
232
+ * @param presenters - optional presentCall/presentResult lookup.
233
+ */
234
+ export function applySessionEvent(state, event, presenters) {
235
+ const data = event.data;
236
+ switch (event.type) {
237
+ case 'user/message': {
238
+ // A surface replacement follows the compact seam: drop the replaced
239
+ // span and (for the checkpoint) paint the compact boundary. Busy and
240
+ // turn anchoring stay driver-side.
241
+ const replace = replaceOpOf(event);
242
+ if (replace !== undefined)
243
+ return applySurfaceReplace(state, event, replace);
244
+ // Route on UserMessage.source.kind: only human input renders as a user
245
+ // row. Injected context (kind 'plugin') is model-facing — a notice form
246
+ // surfaces as a one-line dim status per its contract, every other form
247
+ // (instructions/catalog/snapshot/relay/recall) stays hidden. Tool and
248
+ // unknown/absent kinds fold to nothing: never dump unrecognized
249
+ // injected content as if the user typed it.
250
+ const source = data !== null && typeof data === 'object'
251
+ ? data.source
252
+ : undefined;
253
+ const kind = source !== null && typeof source === 'object'
254
+ && typeof source.kind === 'string'
255
+ ? source.kind
256
+ : undefined;
257
+ if (kind !== 'user') {
258
+ if (kind === 'plugin') {
259
+ const plugin = source;
260
+ if (plugin.form === 'notice' && typeof plugin.summary === 'string') {
261
+ return upsertRow(state, { kind: 'status', text: plugin.summary, ...seqTag(event) });
262
+ }
263
+ }
264
+ return state;
265
+ }
266
+ const text = textOf(data);
267
+ // Chip clearing is deliberately NOT event-driven: the driver clears the
268
+ // queue synchronously at dispatch (flush / Ctrl+S / interrupt / recall),
269
+ // so a late durable `user/message` can never wipe a same-text chip the
270
+ // user re-queued in the meantime. Empty or whitespace-only text adds no
271
+ // row (no blank `> ` lines).
272
+ if (text.trim().length === 0)
273
+ return state;
274
+ return upsertRow(state, { kind: 'user', text, ...seqTag(event) });
275
+ }
276
+ case 'compaction/summary': {
277
+ // Metering for the immediately following surface replacement: park the
278
+ // shadowed accounting on state; the replacement paints the compact row.
279
+ const record = data !== null && typeof data === 'object'
280
+ ? data
281
+ : {};
282
+ const items = Array.isArray(record.shadowedSeqs) ? record.shadowedSeqs.length : 0;
283
+ const tokens = typeof record.shadowedTokenCount === 'number' ? record.shadowedTokenCount : 0;
284
+ return {
285
+ ...state,
286
+ pendingCompact: {
287
+ items,
288
+ tokens,
289
+ ...typeof record.sourceCommandId === 'string' ? { sourceCommandId: record.sourceCommandId } : {},
290
+ },
291
+ };
292
+ }
293
+ case 'assistant/chunk': {
294
+ const chunk = unwrapChunk(data);
295
+ if (isToolCallDelta(chunk))
296
+ return foldToolCallDelta(state, chunk, event.seq);
297
+ const text = chunkText(data);
298
+ if (text.length === 0)
299
+ return setBusy(state, true);
300
+ return setBusy(upsertRow(state, { kind: chunkKind(data), text, ...seqTag(event) }), true);
301
+ }
302
+ case 'assistant/message':
303
+ return setBusy(state, false);
304
+ case 'tool/call': {
305
+ const name = nameOf(data);
306
+ const args = argsOf(data);
307
+ const view = presenters?.presentCall?.(name, parseArgs(args));
308
+ const card = formatCallCard(view, { name, args });
309
+ const diffs = view !== undefined && view.card === 'diff' ? view.diffs : undefined;
310
+ return upsertRow(state, {
311
+ kind: 'tool',
312
+ callId: callIdOf(data),
313
+ name,
314
+ args,
315
+ title: card.title,
316
+ ...card.body === undefined ? {} : { body: card.body },
317
+ ...diffs !== undefined ? { diffs } : {},
318
+ running: true,
319
+ ...seqTag(event),
320
+ });
321
+ }
322
+ case 'tool/result': {
323
+ const name = nameOf(data);
324
+ const callId = callIdOf(data);
325
+ const pending = state.rows.find(row => row.kind === 'tool' && row.callId === callId);
326
+ const pendingTitle = pending?.kind === 'tool' ? pending.title : name;
327
+ const pendingArgs = pending?.kind === 'tool' ? pending.args : argsOf(data);
328
+ const isError = data !== null && typeof data === 'object' && data.error !== undefined;
329
+ const fallback = textOf(data) || argsOf(data);
330
+ const view = presenters?.presentResult?.(name, parseArgs(pendingArgs), {
331
+ content: data,
332
+ isError,
333
+ });
334
+ const card = formatResultCard(view, { pendingTitle, fallback, error: isError });
335
+ const diffs = view !== undefined && view.card === 'diff' ? view.diffs : undefined;
336
+ return upsertRow(state, {
337
+ kind: 'tool',
338
+ callId,
339
+ name,
340
+ args: pendingArgs,
341
+ title: card.title,
342
+ ...card.body === undefined ? {} : { body: card.body, result: card.body },
343
+ ...diffs !== undefined ? { diffs } : {},
344
+ error: card.error,
345
+ running: false,
346
+ ...seqTag(event),
347
+ });
348
+ }
349
+ case 'turn/start':
350
+ return setBusy(state, true);
351
+ case 'turn/end': {
352
+ // A turn always clears busy. Beyond that, fold the reason into a visible
353
+ // status row so a backend failure never ends the turn silently: error
354
+ // reasons paint red, blocked/max-tokens paint dim, and
355
+ // completed/aborted/absent add nothing (abort already shows
356
+ // "Interrupted by user." from interrupt()).
357
+ const reason = data !== null && typeof data === 'object'
358
+ ? data.reason
359
+ : undefined;
360
+ const kind = reason !== null && typeof reason === 'object'
361
+ ? reason.kind
362
+ : undefined;
363
+ if (kind === 'error') {
364
+ const err = reason.error;
365
+ const message = err !== null && typeof err === 'object'
366
+ ? err.message
367
+ : undefined;
368
+ const text = typeof message === 'string' && message.length > 0
369
+ ? `⚠ Turn failed: ${message}`
370
+ : '⚠ Turn failed';
371
+ return setBusy(upsertRow(state, { kind: 'status', text, error: true, ...seqTag(event) }), false);
372
+ }
373
+ if (kind === 'blocked') {
374
+ return setBusy(upsertRow(state, { kind: 'status', text: '⚠ Turn blocked', ...seqTag(event) }), false);
375
+ }
376
+ if (kind === 'max-tokens') {
377
+ return setBusy(upsertRow(state, { kind: 'status', text: '⚠ Reached the token ceiling', ...seqTag(event) }), false);
378
+ }
379
+ return setBusy(state, false);
380
+ }
381
+ case 'agent/status': {
382
+ const status = data !== null && typeof data === 'object'
383
+ ? data.status
384
+ : undefined;
385
+ if (event.type === 'agent/status' && status === 'running')
386
+ return setBusy(state, true);
387
+ return setBusy(state, false);
388
+ }
389
+ case 'permission/mode': {
390
+ const mode = data !== null && typeof data === 'object'
391
+ ? data.mode
392
+ : undefined;
393
+ return mode === undefined ? state : setPermissionMode(state, mode);
394
+ }
395
+ case 'plan/mode': {
396
+ const active = data !== null && typeof data === 'object'
397
+ ? data.active
398
+ : undefined;
399
+ return active ? setPermissionMode(state, 'plan') : state;
400
+ }
401
+ case 'session/title': {
402
+ // Log-only framework title (fallback or LLM provider): fold last-wins
403
+ // into state.title for the window-title effect; never a transcript row.
404
+ const title = data !== null && typeof data === 'object'
405
+ ? data.title
406
+ : undefined;
407
+ return typeof title === 'string' && title.length > 0 ? setSessionTitle(state, title) : state;
408
+ }
409
+ default:
410
+ return state;
411
+ }
412
+ }
413
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Pure helpers for the live working line (claude-code style spinner row).
3
+ * Deliberately a leaf module: the store imports `VERBS`/`TurnAnchor` from
4
+ * here, so nothing here may import back from the store or components.
5
+ * @module @dsh-cc/tui/working-line
6
+ */
7
+ /**
8
+ * Whimsical progressive verbs the working line cycles through. Lives in this
9
+ * leaf module (not the component) so `store.ts` can derive
10
+ * `verbIndex = startedAt % VERBS.length` without a store → components
11
+ * reverse dependency.
12
+ */
13
+ export declare const VERBS: readonly string[];
14
+ /**
15
+ * Anchor for the currently-running turn: when it started, the session's
16
+ * cumulative output-token total at anchor time (`undefined` when the HUD was
17
+ * not yet seeded — the first tokenUsage change pins it, see the driver's
18
+ * rebase guard), and the deterministic spinner verb index. `stepStartedAt`
19
+ * (optional) is the current step's clock, reset by the driver on each
20
+ * `tool/call`/`tool/result`; when absent the step clock falls back to
21
+ * `startedAt`, so elapsed time shows the whole turn.
22
+ */
23
+ export interface TurnAnchor {
24
+ startedAt: number;
25
+ outputBase: number | undefined;
26
+ verbIndex: number;
27
+ stepStartedAt?: number;
28
+ }
29
+ /**
30
+ * Compact elapsed time: `12s` under a minute, `4m 23s` under an hour, `1h 5m`
31
+ * beyond. Negative inputs clamp to `0s` — the line stays calm on clock skew.
32
+ */
33
+ export declare function formatElapsed(ms: number): string;
34
+ /**
35
+ * Render the working-line message for a live turn:
36
+ * `Galloping… (4m 23s · ↓ 5.8k tokens)`. Elapsed time counts from the current
37
+ * step (`stepStartedAt`, falling back to `startedAt`) — the driver resets the
38
+ * step clock per tool call/result, so the line shows this step's duration.
39
+ * The token segment is omitted while the baseline is unseeded
40
+ * (`outputBase === undefined`) or the delta has not yet gone positive — no
41
+ * `↓ 0 tokens` flicker at turn start.
42
+ */
43
+ export declare function formatWorkingLine(turn: TurnAnchor, currentOutput: number, now: number): string;
44
+ //# sourceMappingURL=working-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-line.d.ts","sourceRoot":"","sources":["../src/working-line.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EASlC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ9F"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Pure helpers for the live working line (claude-code style spinner row).
3
+ * Deliberately a leaf module: the store imports `VERBS`/`TurnAnchor` from
4
+ * here, so nothing here may import back from the store or components.
5
+ * @module @dsh-cc/tui/working-line
6
+ */
7
+ import { formatTokens } from "./statusline.js";
8
+ /**
9
+ * Whimsical progressive verbs the working line cycles through. Lives in this
10
+ * leaf module (not the component) so `store.ts` can derive
11
+ * `verbIndex = startedAt % VERBS.length` without a store → components
12
+ * reverse dependency.
13
+ */
14
+ export const VERBS = [
15
+ 'Thinking',
16
+ 'Galloping',
17
+ 'Cogitating',
18
+ 'Pondering',
19
+ 'Brewing',
20
+ 'Percolating',
21
+ 'Deliberating',
22
+ 'Musing',
23
+ ];
24
+ /**
25
+ * Compact elapsed time: `12s` under a minute, `4m 23s` under an hour, `1h 5m`
26
+ * beyond. Negative inputs clamp to `0s` — the line stays calm on clock skew.
27
+ */
28
+ export function formatElapsed(ms) {
29
+ const totalSeconds = Math.max(0, Math.floor(ms / 1000));
30
+ if (totalSeconds < 60)
31
+ return `${totalSeconds}s`;
32
+ const minutes = Math.floor(totalSeconds / 60) % 60;
33
+ const hours = Math.floor(totalSeconds / 3600);
34
+ if (hours === 0)
35
+ return `${minutes}m ${totalSeconds % 60}s`;
36
+ return `${hours}h ${minutes}m`;
37
+ }
38
+ /**
39
+ * Render the working-line message for a live turn:
40
+ * `Galloping… (4m 23s · ↓ 5.8k tokens)`. Elapsed time counts from the current
41
+ * step (`stepStartedAt`, falling back to `startedAt`) — the driver resets the
42
+ * step clock per tool call/result, so the line shows this step's duration.
43
+ * The token segment is omitted while the baseline is unseeded
44
+ * (`outputBase === undefined`) or the delta has not yet gone positive — no
45
+ * `↓ 0 tokens` flicker at turn start.
46
+ */
47
+ export function formatWorkingLine(turn, currentOutput, now) {
48
+ const elapsed = formatElapsed(now - (turn.stepStartedAt ?? turn.startedAt));
49
+ const delta = turn.outputBase === undefined ? 0 : currentOutput - turn.outputBase;
50
+ const tokens = turn.outputBase !== undefined && delta > 0
51
+ ? ` · ↓ ${formatTokens(delta)} tokens`
52
+ : '';
53
+ const verb = VERBS[turn.verbIndex % VERBS.length] ?? VERBS[0];
54
+ return `${verb}… (${elapsed}${tokens})`;
55
+ }
56
+ //# sourceMappingURL=working-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"working-line.js","sourceRoot":"","sources":["../src/working-line.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAsB;IACtC,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,SAAS;IACT,aAAa;IACb,cAAc;IACd,QAAQ;CACT,CAAA;AAkBD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IACvD,IAAI,YAAY,GAAG,EAAE;QAAE,OAAO,GAAG,YAAY,GAAG,CAAA;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC7C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,OAAO,KAAK,YAAY,GAAG,EAAE,GAAG,CAAA;IAC3D,OAAO,GAAG,KAAK,KAAK,OAAO,GAAG,CAAA;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAgB,EAAE,aAAqB,EAAE,GAAW;IACpF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAA;IACjF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC;QACvD,CAAC,CAAC,QAAQ,YAAY,CAAC,KAAK,CAAC,SAAS;QACtC,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAA;IAC9D,OAAO,GAAG,IAAI,MAAM,OAAO,GAAG,MAAM,GAAG,CAAA;AACzC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@dsh-cc/tui",
3
+ "version": "0.5.0",
4
+ "description": "Claude Code-style terminal surface for the dsh tui profile (CC agent preset)",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "files": [
9
+ "lib",
10
+ "presets",
11
+ "scripts/stage-preset.mjs"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "types": "./lib/index.d.ts",
16
+ "default": "./lib/index.js"
17
+ },
18
+ "./invariant": {
19
+ "types": "./lib/invariant.d.ts",
20
+ "default": "./lib/invariant.js"
21
+ },
22
+ "./src/*": "./src/*",
23
+ "./package.json": "./package.json"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/dsh-cc/dsh-cc.git",
28
+ "directory": "packages/ui/tui"
29
+ },
30
+ "license": "Apache-2.0",
31
+ "peerDependencies": {
32
+ "@deepseek-ai/cordis": ">=0.1.1-rc.2",
33
+ "@deepseek-ai/dsh-agent": ">=0.1.1-rc.2",
34
+ "@deepseek-ai/dsh-agent-presets": ">=0.1.1-rc.2",
35
+ "@deepseek-ai/dsh-commands": ">=0.1.1-rc.2",
36
+ "@deepseek-ai/dsh-invariants": ">=0.1.1-rc.2",
37
+ "@deepseek-ai/dsh-llm": ">=0.1.1-rc.2",
38
+ "@deepseek-ai/dsh-plan-mode": ">=0.1.1-rc.2",
39
+ "@deepseek-ai/dsh-session": ">=0.1.1-rc.2",
40
+ "@deepseek-ai/dsh-user-approval": ">=0.1.1-rc.2",
41
+ "@deepseek-ai/dsh-user-questions": ">=0.1.1-rc.2",
42
+ "@deepseek-ai/schemastery": ">=3.18.1"
43
+ },
44
+ "dependencies": {
45
+ "highlight.js": "11.12.0",
46
+ "@dsh-cc/command-agents": "^0.5.0",
47
+ "@dsh-cc/command-permissions": "^0.5.0",
48
+ "@dsh-cc/subagent-task": "^0.5.0",
49
+ "@dsh-cc/permission-rules": "^0.5.0",
50
+ "@dsh-cc/pi-tui": "^0.5.0"
51
+ },
52
+ "devDependencies": {
53
+ "@deepseek-ai/cordis": "link:../../../../deepseek-harness/vendor/cordis",
54
+ "@deepseek-ai/cordis-plugin-loader": "link:../../../../deepseek-harness/vendor/loader",
55
+ "@deepseek-ai/dsh-agent": "link:../../../../deepseek-harness/packages/core/agent",
56
+ "@deepseek-ai/dsh-agent-presets": "link:../../../../deepseek-harness/packages/preset/agent-presets",
57
+ "@deepseek-ai/dsh-commands": "link:../../../../deepseek-harness/packages/interaction/commands",
58
+ "@deepseek-ai/dsh-invariants": "link:../../../../deepseek-harness/packages/runtime-diagnostics/invariants",
59
+ "@deepseek-ai/dsh-llm": "link:../../../../deepseek-harness/packages/llm/llm",
60
+ "@deepseek-ai/dsh-plan-mode": "link:../../../../deepseek-harness/packages/plan/plan-mode",
61
+ "@deepseek-ai/dsh-session": "link:../../../../deepseek-harness/packages/core/session",
62
+ "@deepseek-ai/dsh-settings": "link:../../../../deepseek-harness/packages/settings/settings",
63
+ "@deepseek-ai/dsh-user-approval": "link:../../../../deepseek-harness/packages/interaction/user-approval",
64
+ "@deepseek-ai/dsh-user-questions": "link:../../../../deepseek-harness/packages/interaction/user-questions",
65
+ "@deepseek-ai/schemastery": "link:../../../../deepseek-harness/vendor/schemastery",
66
+ "@xterm/headless": "5.5.0"
67
+ },
68
+ "publishConfig": {
69
+ "access": "public"
70
+ },
71
+ "scripts": {}
72
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "owner": "@dsh-cc/tui",
3
+ "preset": "cc",
4
+ "revision": "0.1.0"
5
+ }