@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,386 @@
1
+ /**
2
+ * Session switcher / /resume section of the in-process protocol driver.
3
+ *
4
+ * Moved out of harness/driver.ts's createDriver factory so the factory stays
5
+ * under the line budget. All shared state arrives on `rt` (DriverSessionsCtx)
6
+ * and is read through getters / by-reference holders — never a stale snapshot —
7
+ * because createDriver rebinds `state` on every emit.
8
+ *
9
+ * @module @dsh-cc/tui/harness/driver-sessions
10
+ */
11
+ import { SessionId } from '@deepseek-ai/dsh-session';
12
+ import { UserQuestionError } from '@deepseek-ai/dsh-user-questions';
13
+ import { randomUUID } from 'node:crypto';
14
+ import { join } from 'node:path';
15
+ import { bootBannerRows } from "./boot-banner.js";
16
+ import { filterSessions, sortByActivity } from "./session-list.js";
17
+ import { defaultTuiDir } from "../history.js";
18
+ import { liveSessionCwd } from "./driver-live.js";
19
+ import { isProjectMember, resolveProject } from "../project.js";
20
+ import { readProjectSessionIds } from "../project-sessions.js";
21
+ import { clearQueue, clearRows, clearTurn, closeTodoPanel, moveSessionSwitcherFocus, setApproval, setBusy, setModelPicker, setPermissionMode, setQuestion, setSessionSwitcher, setSessionTitle, setTurnActive, upsertRow, } from "../store.js";
22
+ const toSessionEntryView = (s) => ({
23
+ id: s.id,
24
+ ...(s.cwd === undefined ? {} : { cwd: s.cwd }),
25
+ createdAt: s.createdAt,
26
+ ...(s.updatedAtMs === undefined ? {} : { updatedAtMs: s.updatedAtMs }),
27
+ ...(s.title === undefined ? {} : { title: s.title }),
28
+ ...(s.parentSession === undefined ? {} : { parentSession: s.parentSession }),
29
+ });
30
+ export function createSessionsSection(rt) {
31
+ const { emit, ctx } = rt;
32
+ const listSessions = async () => {
33
+ const persistence = ctx.get('sessionPersistence');
34
+ if (persistence === undefined)
35
+ return [];
36
+ return persistence.list();
37
+ };
38
+ // /resume picker working set: the full unfiltered list lives here while the
39
+ // overlay is open (state.sessionSwitcher.sessions is the visible slice
40
+ // only), and a generation token invalidates an in-flight title decoration
41
+ // when the picker closes or reopens.
42
+ let allSessions = [];
43
+ let switcherGeneration = 0;
44
+ // Project scope for the open picker: resolved once at open (git probes are
45
+ // too expensive per refilter keystroke) and dropped on close. `members`
46
+ // is the sidecar index of the scope project's bucket.
47
+ let switcherProject;
48
+ let switcherMembers = new Set();
49
+ /** cwd-scope predicate: sidecar-indexed, or cwd inside the project (main
50
+ * root or any of its worktrees) at a separator boundary. */
51
+ const isScopeMember = (entry) => switcherMembers.has(entry.id)
52
+ || (entry.cwd !== undefined
53
+ && switcherProject !== undefined
54
+ && isProjectMember(entry.cwd, switcherProject));
55
+ /**
56
+ * Async title decoration for the open picker. The generation token read
57
+ * before the await guards the continuation: a result landing after the
58
+ * picker closed (or was reopened, which re-bumped the token) is dropped
59
+ * instead of mutating a stale view. Per-id rejections are skipped; a
60
+ * whole-call failure or abort just skips decoration — the overlay never
61
+ * fails because titles are missing.
62
+ */
63
+ const decorateSessionTitles = async (ids) => {
64
+ const generation = switcherGeneration;
65
+ const sessionQuery = ctx.get('sessionQuery');
66
+ if (sessionQuery === undefined || ids.length === 0)
67
+ return;
68
+ let results;
69
+ try {
70
+ results = await sessionQuery.readTitleSnapshots(ids);
71
+ }
72
+ catch {
73
+ return;
74
+ }
75
+ if (generation !== switcherGeneration || rt.state().sessionSwitcher === undefined)
76
+ return;
77
+ const titles = new Map();
78
+ for (const result of results) {
79
+ if (result.status !== 'fulfilled')
80
+ continue;
81
+ const title = result.value.title?.title;
82
+ if (title === undefined || title.length === 0)
83
+ continue;
84
+ // Join on the requested id (`sessionId`), not `value.session.id`.
85
+ // The latter is a cloned header and is not the batch's identity key —
86
+ // using it stamps one title onto every row when headers collide.
87
+ titles.set(result.sessionId, title);
88
+ }
89
+ if (titles.size === 0)
90
+ return;
91
+ const withTitle = (entry) => {
92
+ const title = titles.get(entry.id);
93
+ return title === undefined ? entry : { ...entry, title };
94
+ };
95
+ allSessions = allSessions.map(withTitle);
96
+ const sw = rt.state().sessionSwitcher;
97
+ if (sw !== undefined) {
98
+ emit(setSessionSwitcher(rt.state(), { ...sw, sessions: sw.sessions.map(withTitle) }));
99
+ }
100
+ };
101
+ // Re-derive the visible list from the working set after a query/scope edit.
102
+ // Focus follows the current session when it survives the filter, else row 0.
103
+ const refilterSessionSwitcher = () => {
104
+ const sw = rt.state().sessionSwitcher;
105
+ if (sw === undefined)
106
+ return;
107
+ const visible = filterSessions(allSessions, {
108
+ scope: sw.scope,
109
+ query: sw.query,
110
+ currentId: sw.currentId,
111
+ isMember: isScopeMember,
112
+ });
113
+ const index = visible.findIndex((s) => s.id === sw.currentId);
114
+ emit(setSessionSwitcher(rt.state(), {
115
+ ...sw,
116
+ sessions: visible.map(toSessionEntryView),
117
+ focused: index >= 0 ? index : 0,
118
+ totalCount: allSessions.length,
119
+ }));
120
+ // Second-chance decoration for newly visible, still-untitled rows
121
+ // (same generation rules, same 50-id cap as the initial open).
122
+ const untitled = visible.filter((s) => s.title === undefined).slice(0, 50).map((s) => s.id);
123
+ if (untitled.length > 0)
124
+ void decorateSessionTitles(untitled);
125
+ };
126
+ const openSessionSwitcher = async () => {
127
+ const sessions = await listSessions();
128
+ if (sessions.length === 0) {
129
+ emit(upsertRow(rt.state(), { kind: 'status', text: 'No sessions are available to resume.' }));
130
+ return;
131
+ }
132
+ switcherGeneration += 1;
133
+ allSessions = sortByActivity(sessions);
134
+ // Live header cwd wins over the process cwd: a marker-resumed session can
135
+ // have been created elsewhere, and the current session must always be
136
+ // visible in the default (cwd) scope. The scope is the session's
137
+ // *project* (main git root; worktrees collapse onto it), resolved once
138
+ // here — refilters on query keystrokes reuse it.
139
+ const scopeCwd = rt.current.agent.session.header.cwd ?? rt.cwd;
140
+ switcherProject = resolveProject(scopeCwd);
141
+ switcherMembers = readProjectSessionIds(join(defaultTuiDir(), 'projects', switcherProject.projectKey));
142
+ const currentId = String(rt.current.agent.session.id);
143
+ const visible = filterSessions(allSessions, {
144
+ scope: 'cwd',
145
+ query: '',
146
+ currentId,
147
+ isMember: isScopeMember,
148
+ });
149
+ const index = visible.findIndex((s) => s.id === currentId);
150
+ emit(setSessionSwitcher(rt.state(), {
151
+ sessions: visible.map(toSessionEntryView),
152
+ focused: index >= 0 ? index : 0,
153
+ switching: false,
154
+ currentId,
155
+ query: '',
156
+ scope: 'cwd',
157
+ cwd: scopeCwd,
158
+ totalCount: allSessions.length,
159
+ }));
160
+ // Decorate the first screenful asynchronously — the overlay must appear
161
+ // immediately, not wait for the title reads.
162
+ void decorateSessionTitles(visible.slice(0, 50).map((s) => s.id));
163
+ };
164
+ const closeSessionSwitcher = () => {
165
+ // Bump the generation so an in-flight decoration lands nowhere, and drop
166
+ // the working set with the overlay.
167
+ switcherGeneration += 1;
168
+ allSessions = [];
169
+ switcherProject = undefined;
170
+ switcherMembers = new Set();
171
+ emit(setSessionSwitcher(rt.state(), undefined));
172
+ };
173
+ const switchSession = async (id) => {
174
+ // No-op guard: same id → stay.
175
+ if (id === String(rt.current.agent.session.id))
176
+ return;
177
+ // Clear pending overlays and the modal queue (mirror the abort paths):
178
+ // every parked approval resolves cancelled and every parked question
179
+ // rejects cancelled. The session switcher overlay itself is managed by the
180
+ // caller (sessionSwitcherSubmit).
181
+ for (const entry of rt.spliceAll()) {
182
+ if (entry.kind === 'approval')
183
+ entry.resolve('cancelled');
184
+ else
185
+ entry.reject(new UserQuestionError('session switching', 'CANCELLED'));
186
+ }
187
+ emit(setApproval(rt.state(), undefined));
188
+ emit(setQuestion(rt.state(), undefined));
189
+ emit(setModelPicker(rt.state(), undefined));
190
+ emit(closeTodoPanel(rt.state()));
191
+ emit(clearQueue(setBusy(rt.state(), false)));
192
+ // Resume first: keeps the old session alive if resume throws. The harness
193
+ // supports multiple concurrent agents (each independently scoped), so a
194
+ // brief overlap is safe. On the SESSION's stored options — omit
195
+ // agentOptions unless config.provider/model were explicitly set (same
196
+ // logic as boot).
197
+ let newHandle;
198
+ try {
199
+ newHandle = await ctx.agents.resume({
200
+ resumeSessionId: SessionId(id),
201
+ setup: rt.withSelection,
202
+ ...(rt.agentOptions === undefined ? {} : { agentOptions: rt.agentOptions }),
203
+ });
204
+ }
205
+ catch (error) {
206
+ const message = error?.message ?? String(error);
207
+ emit(upsertRow(rt.state(), { kind: 'status', text: `Resume failed: ${message}` }));
208
+ return;
209
+ }
210
+ await bindSession(newHandle, { reseedModel: true });
211
+ };
212
+ // Shared bind path (also used by startFreshSession). dispose() stops the
213
+ // loop, unregisters the agent, and removes its session from the in-memory
214
+ // store; it does NOT delete the durable session log.
215
+ const bindSession = async (newHandle, opts = {}) => {
216
+ await rt.current.handle.dispose();
217
+ rt.current.handle = newHandle;
218
+ rt.current.agent = newHandle.agent;
219
+ // Re-scope prompt/bash history onto the switched session's project: the
220
+ // new session may live in a different working directory, and recall must
221
+ // follow IT, not the boot directory. No-op for same-project switches.
222
+ rt.rebindHistory(rt.current.agent.session.header.cwd);
223
+ // Rebuild the slash-command catalog for the NEW agent: commands.list()
224
+ // and skills.snapshot() are agent- and cwd-scoped, and neither service
225
+ // emits a change event on a switch. Failed resumes returned above, so a
226
+ // failed switch keeps the old catalog.
227
+ rt.refreshCatalog();
228
+ // Pin the switched session in its project's sidecar index so the picker
229
+ // scope no longer relies on the cwd-prefix heuristic for it.
230
+ rt.recordProjectSession(String(rt.current.agent.session.id), rt.current.agent.session.header.cwd);
231
+ // Resume reseeds the model AFTER the rebind: seedDefaultModel(true) reads
232
+ // rt.current.agent, which is the target session only once rebound here;
233
+ // the fresh-session path (startFreshSession) skips reseed and keeps the
234
+ // live /model route as agentOptions instead.
235
+ //
236
+ // Benign boot race (W4, documented — no locking): this reset seed shares
237
+ // no lock with the boot seed's now-async wait seam. If a switch ran
238
+ // during the boot seed window, a boot seed that already passed its
239
+ // `selection.current !== undefined` early-return could still write
240
+ // `selection.current` AFTER this reset intended "unset". At boot both
241
+ // resolve to the same value (agent options / the same deployment
242
+ // default), so the outcome is identical; no synchronization is added.
243
+ if (opts.reseedModel === true)
244
+ await rt.seedDefaultModel(true);
245
+ rt.writeResumeTarget(String(rt.current.agent.session.id));
246
+ rt.setMarkedContent(false);
247
+ // Reset the transcript: clear + boot banner + fold new history + mode/busy.
248
+ // Bind always clears the window title; foldHistory below re-seeds it
249
+ // when the new session's log has a session/title event.
250
+ emit(setSessionTitle(clearRows(rt.state()), undefined));
251
+ const modelLabel = rt.selection.current?.model ?? 'default model';
252
+ for (const row of bootBannerRows(modelLabel, rt.cwd))
253
+ emit(upsertRow(rt.state(), row));
254
+ emit(rt.foldHistory());
255
+ emit(setPermissionMode(rt.state(), rt.liveMode(rt.current.agent)));
256
+ // Success path: drop the previous session's anchor together with the busy
257
+ // sync (a failed resume returned above and keeps it), then re-anchor
258
+ // below once the new session's HUD is seeded.
259
+ emit(clearTurn(setBusy(rt.state(), rt.current.agent.status === 'running')));
260
+ // Refresh the HUD, todos, and branch for the new session: stateOf may
261
+ // already be populated (or absent — stale fields must not leak), and the
262
+ // cwd may point at a different repo.
263
+ rt.seedHud();
264
+ rt.seedTodos();
265
+ // Resumed log may end mid-turn: re-anchor the working line after seedHud
266
+ // so outputBase reads the new session's seeded token totals.
267
+ if (rt.state().busy) {
268
+ emit(setTurnActive(rt.state(), { startedAt: Date.now(), outputBase: rt.state().hud?.tokens?.output }));
269
+ }
270
+ rt.refreshBranch();
271
+ };
272
+ // /clear, /new, /reset: brand-new empty session in-process. Create-first:
273
+ // a failed create keeps the old session fully live. The in-flight turn is
274
+ // cancelled only AFTER the create succeeded, so a failed create leaves the
275
+ // old session untouched (drain-before-create would resolve parked
276
+ // approvals/question even when nothing gets replaced). Mode, cwd, and the
277
+ // live /model route are captured before any of that.
278
+ const startFreshSession = async () => {
279
+ const capturedMode = rt.liveMode(rt.current.agent, rt.state().permissionMode);
280
+ const liveCwd = liveSessionCwd(rt.current.agent, rt.cwd);
281
+ const route = rt.selection.current;
282
+ let newHandle;
283
+ try {
284
+ newHandle = await rt.createHandle(SessionId(`tui-${randomUUID()}`), {
285
+ cwd: liveCwd,
286
+ ...(route?.provider !== undefined && route?.model !== undefined
287
+ ? { agentOptions: { provider: route.provider, model: route.model } }
288
+ : rt.agentOptions === undefined ? {} : { agentOptions: rt.agentOptions }),
289
+ });
290
+ }
291
+ catch (error) {
292
+ const message = error?.message ?? String(error);
293
+ emit(upsertRow(rt.state(), { kind: 'status', text: `Start failed: ${message}` }));
294
+ return;
295
+ }
296
+ // Cancel only now that create succeeded: adjacent cancel+dispose may
297
+ // block until the loop aborts (latency, not correctness) — do not hoist
298
+ // the cancel back before create.
299
+ if (rt.state().busy || rt.current.agent.status === 'running') {
300
+ rt.current.agent.cancel({ kind: 'user' });
301
+ }
302
+ // Clear pending overlays and the modal queue (mirror switchSession):
303
+ // every parked approval resolves cancelled and every parked question
304
+ // rejects cancelled.
305
+ for (const entry of rt.spliceAll()) {
306
+ if (entry.kind === 'approval')
307
+ entry.resolve('cancelled');
308
+ else
309
+ entry.reject(new UserQuestionError('session switching', 'CANCELLED'));
310
+ }
311
+ emit(setApproval(rt.state(), undefined));
312
+ emit(setQuestion(rt.state(), undefined));
313
+ emit(setModelPicker(rt.state(), undefined));
314
+ emit(closeTodoPanel(rt.state()));
315
+ emit(clearQueue(setBusy(rt.state(), false)));
316
+ await bindSession(newHandle);
317
+ if (capturedMode !== 'default')
318
+ await rt.reapplyMode(capturedMode);
319
+ };
320
+ const sessionSwitcherSubmit = async () => {
321
+ const sw = rt.state().sessionSwitcher;
322
+ if (sw === undefined || sw.switching)
323
+ return;
324
+ const session = sw.sessions[sw.focused];
325
+ if (session === undefined)
326
+ return;
327
+ // Show the dim 'Switching…' state and block input while the switch is
328
+ // in flight.
329
+ emit(setSessionSwitcher(rt.state(), { ...sw, switching: true }));
330
+ try {
331
+ await switchSession(session.id);
332
+ }
333
+ finally {
334
+ // Close the overlay whether the switch succeeded or failed.
335
+ closeSessionSwitcher();
336
+ }
337
+ };
338
+ return {
339
+ listSessions,
340
+ openSessionSwitcher,
341
+ closeSessionSwitcher,
342
+ switchSession,
343
+ startFreshSession,
344
+ sessionSwitcherMove(delta) {
345
+ emit(moveSessionSwitcherFocus(rt.state(), delta));
346
+ },
347
+ sessionSwitcherType(text) {
348
+ const sw = rt.state().sessionSwitcher;
349
+ if (sw === undefined || text.length === 0)
350
+ return;
351
+ emit(setSessionSwitcher(rt.state(), { ...sw, query: sw.query + text }));
352
+ refilterSessionSwitcher();
353
+ },
354
+ sessionSwitcherBackspace() {
355
+ const sw = rt.state().sessionSwitcher;
356
+ if (sw === undefined || sw.query.length === 0)
357
+ return;
358
+ emit(setSessionSwitcher(rt.state(), { ...sw, query: sw.query.slice(0, -1) }));
359
+ refilterSessionSwitcher();
360
+ },
361
+ sessionSwitcherToggleScope() {
362
+ const sw = rt.state().sessionSwitcher;
363
+ if (sw === undefined)
364
+ return;
365
+ emit(setSessionSwitcher(rt.state(), { ...sw, scope: sw.scope === 'cwd' ? 'all' : 'cwd' }));
366
+ refilterSessionSwitcher();
367
+ },
368
+ async sessionSwitcherSubmit() {
369
+ await sessionSwitcherSubmit();
370
+ },
371
+ sessionSwitcherCancel() {
372
+ const sw = rt.state().sessionSwitcher;
373
+ if (sw === undefined)
374
+ return;
375
+ // Two-stage escape: a non-empty query clears the filter first (the
376
+ // overlay stays open); an empty query closes it.
377
+ if (sw.query.length > 0) {
378
+ emit(setSessionSwitcher(rt.state(), { ...sw, query: '' }));
379
+ refilterSessionSwitcher();
380
+ return;
381
+ }
382
+ closeSessionSwitcher();
383
+ },
384
+ };
385
+ }
386
+ //# sourceMappingURL=driver-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-sessions.js","sourceRoot":"","sources":["../../src/harness/driver-sessions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * In-process protocol driver: session/event → UI store, followup/steer/cancel
3
+ * back into the agent. Only this directory imports `@deepseek-ai/*`.
4
+ * @module @dsh-cc/tui/harness/driver
5
+ */
6
+ import type { Context } from '@deepseek-ai/cordis';
7
+ import type { ProviderRuntime } from '../provider-command.ts';
8
+ import type { Driver } from '../state/driver-types.ts';
9
+ export type { Driver } from '../state/driver-types.ts';
10
+ import type { DriverConfig } from '../state/driver-types.ts';
11
+ export type { DriverConfig, TokenUsageTotals } from '../state/driver-types.ts';
12
+ export { BASH_OUTPUT_LINE_CAP, BASH_STDOUT_MAX_BYTES, BASH_TIMEOUT_MS, gitBranchOf, } from './shell-output.ts';
13
+ export { formatCostReport } from './usage-view.ts';
14
+ export { allowRuleOf, payloadOf } from './approval-preview.ts';
15
+ /**
16
+ * Create the TUI driver: one agent under the CC preset, interaction providers,
17
+ * and a folded view model.
18
+ */
19
+ export declare function createDriver(ctx: Context, config?: DriverConfig): Promise<Driver & {
20
+ providerRuntime: ProviderRuntime;
21
+ }>;
22
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/harness/driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAoBlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAwB5D,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC9E,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAK9D;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,GAAG;IAAE,eAAe,EAAE,eAAe,CAAA;CAAE,CAAC,CA0alI"}