@sagmans/dsh-tui 0.12.1 → 0.14.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 (489) hide show
  1. package/.agents/skills/dsh-tui-dogfood/SKILL.md +18 -2
  2. package/.agents/skills/dsh-tui-dogfood/references/home-state.md +4 -4
  3. package/.agents/skills/dsh-tui-dogfood/scripts/clone-links.mjs +19 -11
  4. package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +31 -9
  5. package/.agents/skills/dsh-tui-update-models/SKILL.md +1 -1
  6. package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +6 -6
  7. package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +21 -13
  8. package/README.md +61 -23
  9. package/cordis.patch.yml +2 -0
  10. package/lib/agent/fork.d.ts +3 -1
  11. package/lib/agent/fork.d.ts.map +1 -1
  12. package/lib/agent/fork.js +2 -0
  13. package/lib/agent/fork.js.map +1 -1
  14. package/lib/agent/history.d.ts +14 -22
  15. package/lib/agent/history.d.ts.map +1 -1
  16. package/lib/agent/history.js +20 -14
  17. package/lib/agent/history.js.map +1 -1
  18. package/lib/agent/host.d.ts.map +1 -1
  19. package/lib/agent/host.js +6 -0
  20. package/lib/agent/host.js.map +1 -1
  21. package/lib/agent/model.d.ts +10 -8
  22. package/lib/agent/model.d.ts.map +1 -1
  23. package/lib/agent/model.js +9 -7
  24. package/lib/agent/model.js.map +1 -1
  25. package/lib/agent/present.d.ts +1 -1
  26. package/lib/agent/present.d.ts.map +1 -1
  27. package/lib/agent/present.js +1 -1
  28. package/lib/agent/present.js.map +1 -1
  29. package/lib/agent/presets.d.ts +4 -1
  30. package/lib/agent/presets.d.ts.map +1 -1
  31. package/lib/agent/presets.js +9 -2
  32. package/lib/agent/presets.js.map +1 -1
  33. package/lib/agent/projections.d.ts +8 -2
  34. package/lib/agent/projections.d.ts.map +1 -1
  35. package/lib/agent/projections.js +8 -2
  36. package/lib/agent/projections.js.map +1 -1
  37. package/lib/agent/prompt-history.d.ts +8 -48
  38. package/lib/agent/prompt-history.d.ts.map +1 -1
  39. package/lib/agent/prompt-history.js +34 -15
  40. package/lib/agent/prompt-history.js.map +1 -1
  41. package/lib/agent/status.d.ts +9 -24
  42. package/lib/agent/status.d.ts.map +1 -1
  43. package/lib/agent/status.js +7 -2
  44. package/lib/agent/status.js.map +1 -1
  45. package/lib/agent/undo.d.ts +2 -4
  46. package/lib/agent/undo.d.ts.map +1 -1
  47. package/lib/agent/undo.js +10 -5
  48. package/lib/agent/undo.js.map +1 -1
  49. package/lib/cards/composition.d.ts +7 -7
  50. package/lib/cards/composition.d.ts.map +1 -1
  51. package/lib/cards/composition.js +13 -12
  52. package/lib/cards/composition.js.map +1 -1
  53. package/lib/cards/presenter.d.ts +11 -14
  54. package/lib/cards/presenter.d.ts.map +1 -1
  55. package/lib/cards/presenter.js +40 -19
  56. package/lib/cards/presenter.js.map +1 -1
  57. package/lib/cards/preview.d.ts.map +1 -1
  58. package/lib/cards/preview.js +5 -1
  59. package/lib/cards/preview.js.map +1 -1
  60. package/lib/cards.d.ts +17 -23
  61. package/lib/cards.d.ts.map +1 -1
  62. package/lib/cards.js +27 -12
  63. package/lib/cards.js.map +1 -1
  64. package/lib/compat/probe.d.ts +2 -5
  65. package/lib/compat/probe.d.ts.map +1 -1
  66. package/lib/compat/probe.js +2 -2
  67. package/lib/compat/probe.js.map +1 -1
  68. package/lib/compat/section.d.ts +5 -4
  69. package/lib/compat/section.d.ts.map +1 -1
  70. package/lib/compat/section.js +4 -0
  71. package/lib/compat/section.js.map +1 -1
  72. package/lib/config.d.ts +0 -3
  73. package/lib/config.d.ts.map +1 -1
  74. package/lib/config.js +7 -1
  75. package/lib/config.js.map +1 -1
  76. package/lib/export.d.ts +5 -7
  77. package/lib/export.d.ts.map +1 -1
  78. package/lib/export.js +48 -10
  79. package/lib/export.js.map +1 -1
  80. package/lib/fold-cursor.d.ts +3 -3
  81. package/lib/fold-cursor.d.ts.map +1 -1
  82. package/lib/fold-cursor.js +5 -3
  83. package/lib/fold-cursor.js.map +1 -1
  84. package/lib/gates/question-card.d.ts +3 -38
  85. package/lib/gates/question-card.d.ts.map +1 -1
  86. package/lib/gates/question-card.js +13 -10
  87. package/lib/gates/question-card.js.map +1 -1
  88. package/lib/gates/questions.d.ts +14 -8
  89. package/lib/gates/questions.d.ts.map +1 -1
  90. package/lib/gates/questions.js +25 -18
  91. package/lib/gates/questions.js.map +1 -1
  92. package/lib/gates.d.ts +17 -25
  93. package/lib/gates.d.ts.map +1 -1
  94. package/lib/gates.js +2 -4
  95. package/lib/gates.js.map +1 -1
  96. package/lib/herdr/client.d.ts +10 -12
  97. package/lib/herdr/client.d.ts.map +1 -1
  98. package/lib/herdr/client.js +9 -8
  99. package/lib/herdr/client.js.map +1 -1
  100. package/lib/herdr/constants.d.ts +3 -2
  101. package/lib/herdr/constants.d.ts.map +1 -1
  102. package/lib/herdr/constants.js +3 -2
  103. package/lib/herdr/constants.js.map +1 -1
  104. package/lib/herdr/reporter.d.ts +4 -39
  105. package/lib/herdr/reporter.d.ts.map +1 -1
  106. package/lib/herdr/reporter.js +13 -19
  107. package/lib/herdr/reporter.js.map +1 -1
  108. package/lib/herdr/state.d.ts +4 -3
  109. package/lib/herdr/state.d.ts.map +1 -1
  110. package/lib/herdr/state.js +6 -5
  111. package/lib/herdr/state.js.map +1 -1
  112. package/lib/host/preset-files.d.ts +0 -17
  113. package/lib/host/preset-files.d.ts.map +1 -1
  114. package/lib/host/preset-files.js +7 -2
  115. package/lib/host/preset-files.js.map +1 -1
  116. package/lib/host/roster.d.ts +1 -1
  117. package/lib/host/roster.d.ts.map +1 -1
  118. package/lib/host/roster.js +3 -3
  119. package/lib/host/roster.js.map +1 -1
  120. package/lib/host/runner.d.ts +2 -5
  121. package/lib/host/runner.d.ts.map +1 -1
  122. package/lib/host/runner.js +2 -5
  123. package/lib/host/runner.js.map +1 -1
  124. package/lib/identity.d.ts +6 -3
  125. package/lib/identity.d.ts.map +1 -1
  126. package/lib/identity.js +18 -3
  127. package/lib/identity.js.map +1 -1
  128. package/lib/index.d.ts +2 -0
  129. package/lib/index.d.ts.map +1 -1
  130. package/lib/index.js +42 -14
  131. package/lib/index.js.map +1 -1
  132. package/lib/injection.d.ts.map +1 -1
  133. package/lib/injection.js +1 -0
  134. package/lib/injection.js.map +1 -1
  135. package/lib/input/action-catalog.d.ts.map +1 -1
  136. package/lib/input/action-catalog.js +4 -0
  137. package/lib/input/action-catalog.js.map +1 -1
  138. package/lib/input/actions.d.ts +4 -3
  139. package/lib/input/actions.d.ts.map +1 -1
  140. package/lib/input/actions.js +8 -3
  141. package/lib/input/actions.js.map +1 -1
  142. package/lib/input/completion.d.ts +3 -11
  143. package/lib/input/completion.d.ts.map +1 -1
  144. package/lib/input/completion.js +8 -6
  145. package/lib/input/completion.js.map +1 -1
  146. package/lib/input/file-index.d.ts +1 -12
  147. package/lib/input/file-index.d.ts.map +1 -1
  148. package/lib/input/file-index.js +21 -17
  149. package/lib/input/file-index.js.map +1 -1
  150. package/lib/input/file-search.d.ts +6 -3
  151. package/lib/input/file-search.d.ts.map +1 -1
  152. package/lib/input/file-search.js +29 -10
  153. package/lib/input/file-search.js.map +1 -1
  154. package/lib/input/fuzzy.d.ts +6 -12
  155. package/lib/input/fuzzy.d.ts.map +1 -1
  156. package/lib/input/fuzzy.js +18 -27
  157. package/lib/input/fuzzy.js.map +1 -1
  158. package/lib/input/ghost.d.ts +5 -5
  159. package/lib/input/ghost.d.ts.map +1 -1
  160. package/lib/input/ghost.js +4 -3
  161. package/lib/input/ghost.js.map +1 -1
  162. package/lib/input/key-press.d.ts +8 -7
  163. package/lib/input/key-press.d.ts.map +1 -1
  164. package/lib/input/key-press.js +8 -6
  165. package/lib/input/key-press.js.map +1 -1
  166. package/lib/input/keymap-conflicts.d.ts +6 -6
  167. package/lib/input/keymap-conflicts.d.ts.map +1 -1
  168. package/lib/input/keymap-conflicts.js +6 -6
  169. package/lib/input/keymap-conflicts.js.map +1 -1
  170. package/lib/input/keymap.d.ts +6 -18
  171. package/lib/input/keymap.d.ts.map +1 -1
  172. package/lib/input/keymap.js +7 -10
  173. package/lib/input/keymap.js.map +1 -1
  174. package/lib/input/match.js +4 -4
  175. package/lib/input/match.js.map +1 -1
  176. package/lib/input/submission.d.ts +7 -3
  177. package/lib/input/submission.d.ts.map +1 -1
  178. package/lib/input/submission.js +2 -2
  179. package/lib/input/submission.js.map +1 -1
  180. package/lib/input/workspace-files.d.ts +1 -2
  181. package/lib/input/workspace-files.d.ts.map +1 -1
  182. package/lib/input/workspace-files.js +20 -11
  183. package/lib/input/workspace-files.js.map +1 -1
  184. package/lib/input.d.ts +6 -0
  185. package/lib/input.d.ts.map +1 -1
  186. package/lib/input.js +34 -1
  187. package/lib/input.js.map +1 -1
  188. package/lib/install-skills.d.ts +5 -22
  189. package/lib/install-skills.d.ts.map +1 -1
  190. package/lib/install-skills.js +18 -18
  191. package/lib/install-skills.js.map +1 -1
  192. package/lib/jobs.d.ts +10 -5
  193. package/lib/jobs.d.ts.map +1 -1
  194. package/lib/jobs.js +39 -13
  195. package/lib/jobs.js.map +1 -1
  196. package/lib/keymaps.d.ts.map +1 -1
  197. package/lib/keymaps.js +2 -0
  198. package/lib/keymaps.js.map +1 -1
  199. package/lib/keys-command.d.ts +1 -1
  200. package/lib/keys-command.d.ts.map +1 -1
  201. package/lib/model-list.d.ts +0 -27
  202. package/lib/model-list.d.ts.map +1 -1
  203. package/lib/model-list.js +1 -1
  204. package/lib/model-list.js.map +1 -1
  205. package/lib/moshi.d.ts +13 -0
  206. package/lib/moshi.d.ts.map +1 -0
  207. package/lib/moshi.js +130 -0
  208. package/lib/moshi.js.map +1 -0
  209. package/lib/spacing.d.ts +0 -7
  210. package/lib/spacing.d.ts.map +1 -1
  211. package/lib/spacing.js +1 -1
  212. package/lib/spacing.js.map +1 -1
  213. package/lib/startup.d.ts +1 -1
  214. package/lib/startup.d.ts.map +1 -1
  215. package/lib/startup.js +9 -1
  216. package/lib/startup.js.map +1 -1
  217. package/lib/stash/lock.d.ts +1 -37
  218. package/lib/stash/lock.d.ts.map +1 -1
  219. package/lib/stash/lock.js +41 -35
  220. package/lib/stash/lock.js.map +1 -1
  221. package/lib/stash/paths.d.ts +8 -7
  222. package/lib/stash/paths.d.ts.map +1 -1
  223. package/lib/stash/paths.js +21 -17
  224. package/lib/stash/paths.js.map +1 -1
  225. package/lib/stash/private-fs.d.ts +14 -5
  226. package/lib/stash/private-fs.d.ts.map +1 -1
  227. package/lib/stash/private-fs.js +30 -8
  228. package/lib/stash/private-fs.js.map +1 -1
  229. package/lib/stash/schema.d.ts +3 -6
  230. package/lib/stash/schema.d.ts.map +1 -1
  231. package/lib/stash/schema.js +11 -9
  232. package/lib/stash/schema.js.map +1 -1
  233. package/lib/stash/store.d.ts +9 -40
  234. package/lib/stash/store.d.ts.map +1 -1
  235. package/lib/stash/store.js +26 -24
  236. package/lib/stash/store.js.map +1 -1
  237. package/lib/stash.d.ts +7 -11
  238. package/lib/stash.d.ts.map +1 -1
  239. package/lib/stash.js +18 -11
  240. package/lib/stash.js.map +1 -1
  241. package/lib/subagents.d.ts +9 -9
  242. package/lib/subagents.d.ts.map +1 -1
  243. package/lib/subagents.js +19 -18
  244. package/lib/subagents.js.map +1 -1
  245. package/lib/surface/appearance-preferences.d.ts.map +1 -1
  246. package/lib/surface/appearance-preferences.js +7 -0
  247. package/lib/surface/appearance-preferences.js.map +1 -1
  248. package/lib/surface/appearance.d.ts.map +1 -1
  249. package/lib/surface/appearance.js +7 -2
  250. package/lib/surface/appearance.js.map +1 -1
  251. package/lib/surface/background-work.d.ts +2 -0
  252. package/lib/surface/background-work.d.ts.map +1 -1
  253. package/lib/surface/background-work.js +45 -36
  254. package/lib/surface/background-work.js.map +1 -1
  255. package/lib/surface/commands.d.ts.map +1 -1
  256. package/lib/surface/commands.js +17 -9
  257. package/lib/surface/commands.js.map +1 -1
  258. package/lib/surface/modal-input.d.ts +4 -0
  259. package/lib/surface/modal-input.d.ts.map +1 -1
  260. package/lib/surface/modal-input.js +81 -46
  261. package/lib/surface/modal-input.js.map +1 -1
  262. package/lib/surface/model-choice.d.ts.map +1 -1
  263. package/lib/surface/model-choice.js +10 -8
  264. package/lib/surface/model-choice.js.map +1 -1
  265. package/lib/surface/plugin-actions.d.ts.map +1 -1
  266. package/lib/surface/plugin-actions.js +4 -0
  267. package/lib/surface/plugin-actions.js.map +1 -1
  268. package/lib/surface/preset-choice.d.ts.map +1 -1
  269. package/lib/surface/preset-choice.js +15 -17
  270. package/lib/surface/preset-choice.js.map +1 -1
  271. package/lib/surface/prompt-input.js +1 -1
  272. package/lib/surface/prompt-input.js.map +1 -1
  273. package/lib/surface/prompt-memory.d.ts +7 -6
  274. package/lib/surface/prompt-memory.d.ts.map +1 -1
  275. package/lib/surface/prompt-memory.js +3 -3
  276. package/lib/surface/session-lifecycle.d.ts +7 -1
  277. package/lib/surface/session-lifecycle.d.ts.map +1 -1
  278. package/lib/surface/session-lifecycle.js +17 -12
  279. package/lib/surface/session-lifecycle.js.map +1 -1
  280. package/lib/surface/session-picker.js +1 -1
  281. package/lib/surface/session-picker.js.map +1 -1
  282. package/lib/surface/session-view.d.ts +1 -1
  283. package/lib/surface/session-view.d.ts.map +1 -1
  284. package/lib/surface/session-view.js +4 -5
  285. package/lib/surface/session-view.js.map +1 -1
  286. package/lib/surface/staged-turns.d.ts.map +1 -1
  287. package/lib/surface/staged-turns.js +8 -4
  288. package/lib/surface/staged-turns.js.map +1 -1
  289. package/lib/surface/terminal-lifecycle.d.ts +1 -1
  290. package/lib/surface/terminal-lifecycle.d.ts.map +1 -1
  291. package/lib/surface/terminal-lifecycle.js +8 -5
  292. package/lib/surface/terminal-lifecycle.js.map +1 -1
  293. package/lib/terminal/bell.d.ts +0 -2
  294. package/lib/terminal/bell.d.ts.map +1 -1
  295. package/lib/terminal/bell.js +2 -1
  296. package/lib/terminal/bell.js.map +1 -1
  297. package/lib/terminal/clipboard.d.ts +4 -4
  298. package/lib/terminal/clipboard.js +4 -4
  299. package/lib/terminal/external-editor.d.ts +4 -60
  300. package/lib/terminal/external-editor.d.ts.map +1 -1
  301. package/lib/terminal/external-editor.js +28 -40
  302. package/lib/terminal/external-editor.js.map +1 -1
  303. package/lib/terminal/host-writes.d.ts +7 -18
  304. package/lib/terminal/host-writes.d.ts.map +1 -1
  305. package/lib/terminal/host-writes.js +19 -18
  306. package/lib/terminal/host-writes.js.map +1 -1
  307. package/lib/terminal/input.d.ts +6 -0
  308. package/lib/terminal/input.d.ts.map +1 -0
  309. package/lib/terminal/input.js +15 -0
  310. package/lib/terminal/input.js.map +1 -0
  311. package/lib/terminal/restore.d.ts +2 -1
  312. package/lib/terminal/restore.d.ts.map +1 -1
  313. package/lib/terminal/signals.d.ts +2 -1
  314. package/lib/terminal/signals.d.ts.map +1 -1
  315. package/lib/terminal/signals.js +1 -1
  316. package/lib/terminal/signals.js.map +1 -1
  317. package/lib/terminal/title.d.ts +1 -11
  318. package/lib/terminal/title.d.ts.map +1 -1
  319. package/lib/terminal/title.js +5 -4
  320. package/lib/terminal/title.js.map +1 -1
  321. package/lib/terminal/warning-screen.d.ts +11 -2
  322. package/lib/terminal/warning-screen.d.ts.map +1 -1
  323. package/lib/terminal/warning-screen.js +166 -22
  324. package/lib/terminal/warning-screen.js.map +1 -1
  325. package/lib/terminal-text/scan.d.ts +4 -5
  326. package/lib/terminal-text/scan.d.ts.map +1 -1
  327. package/lib/terminal-text/scan.js +16 -9
  328. package/lib/terminal-text/scan.js.map +1 -1
  329. package/lib/terminal-text/sgr.d.ts +4 -3
  330. package/lib/terminal-text/sgr.d.ts.map +1 -1
  331. package/lib/terminal-text/sgr.js +9 -14
  332. package/lib/terminal-text/sgr.js.map +1 -1
  333. package/lib/terminal-text.d.ts +7 -12
  334. package/lib/terminal-text.d.ts.map +1 -1
  335. package/lib/terminal-text.js +32 -23
  336. package/lib/terminal-text.js.map +1 -1
  337. package/lib/text.d.ts +8 -14
  338. package/lib/text.d.ts.map +1 -1
  339. package/lib/text.js +14 -15
  340. package/lib/text.js.map +1 -1
  341. package/lib/theme-capability.d.ts +3 -15
  342. package/lib/theme-capability.d.ts.map +1 -1
  343. package/lib/theme-capability.js +18 -15
  344. package/lib/theme-capability.js.map +1 -1
  345. package/lib/theme-defaults.d.ts +3 -57
  346. package/lib/theme-defaults.d.ts.map +1 -1
  347. package/lib/theme-defaults.js +25 -14
  348. package/lib/theme-defaults.js.map +1 -1
  349. package/lib/theme-files.d.ts +16 -32
  350. package/lib/theme-files.d.ts.map +1 -1
  351. package/lib/theme-files.js +43 -27
  352. package/lib/theme-files.js.map +1 -1
  353. package/lib/theme-resolver.d.ts +3 -3
  354. package/lib/theme-resolver.d.ts.map +1 -1
  355. package/lib/theme-resolver.js +9 -6
  356. package/lib/theme-resolver.js.map +1 -1
  357. package/lib/theme-schema.d.ts +7 -42
  358. package/lib/theme-schema.d.ts.map +1 -1
  359. package/lib/theme-schema.js +9 -11
  360. package/lib/theme-schema.js.map +1 -1
  361. package/lib/theme-settings.d.ts +19 -10
  362. package/lib/theme-settings.d.ts.map +1 -1
  363. package/lib/theme-settings.js +23 -17
  364. package/lib/theme-settings.js.map +1 -1
  365. package/lib/theme-tokens.d.ts +6 -12
  366. package/lib/theme-tokens.d.ts.map +1 -1
  367. package/lib/theme-tokens.js +2 -2
  368. package/lib/theme-tokens.js.map +1 -1
  369. package/lib/theme.d.ts +5 -10
  370. package/lib/theme.d.ts.map +1 -1
  371. package/lib/theme.js +11 -18
  372. package/lib/theme.js.map +1 -1
  373. package/lib/todo-guard.d.ts +8 -4
  374. package/lib/todo-guard.d.ts.map +1 -1
  375. package/lib/todo-guard.js +17 -6
  376. package/lib/todo-guard.js.map +1 -1
  377. package/lib/tokens.d.ts +0 -2
  378. package/lib/tokens.d.ts.map +1 -1
  379. package/lib/tokens.js +1 -1
  380. package/lib/tokens.js.map +1 -1
  381. package/lib/tool-display.d.ts +1 -13
  382. package/lib/tool-display.d.ts.map +1 -1
  383. package/lib/tool-display.js +4 -4
  384. package/lib/tool-display.js.map +1 -1
  385. package/lib/transcript/message-content.d.ts.map +1 -1
  386. package/lib/transcript/message-content.js +31 -9
  387. package/lib/transcript/message-content.js.map +1 -1
  388. package/lib/transcript/tool-calls.d.ts +9 -7
  389. package/lib/transcript/tool-calls.d.ts.map +1 -1
  390. package/lib/transcript/tool-calls.js +27 -20
  391. package/lib/transcript/tool-calls.js.map +1 -1
  392. package/lib/transcript.d.ts +15 -18
  393. package/lib/transcript.d.ts.map +1 -1
  394. package/lib/transcript.js +70 -41
  395. package/lib/transcript.js.map +1 -1
  396. package/lib/ui/copy.d.ts +5 -4
  397. package/lib/ui/copy.d.ts.map +1 -1
  398. package/lib/ui/copy.js +9 -6
  399. package/lib/ui/copy.js.map +1 -1
  400. package/lib/ui/diff.d.ts +0 -30
  401. package/lib/ui/diff.d.ts.map +1 -1
  402. package/lib/ui/diff.js +16 -9
  403. package/lib/ui/diff.js.map +1 -1
  404. package/lib/ui/dock.d.ts +12 -10
  405. package/lib/ui/dock.d.ts.map +1 -1
  406. package/lib/ui/dock.js +27 -14
  407. package/lib/ui/dock.js.map +1 -1
  408. package/lib/ui/editor.d.ts +5 -4
  409. package/lib/ui/editor.d.ts.map +1 -1
  410. package/lib/ui/editor.js +17 -9
  411. package/lib/ui/editor.js.map +1 -1
  412. package/lib/ui/frame.d.ts +4 -12
  413. package/lib/ui/frame.d.ts.map +1 -1
  414. package/lib/ui/frame.js +6 -6
  415. package/lib/ui/frame.js.map +1 -1
  416. package/lib/ui/gap.d.ts +0 -4
  417. package/lib/ui/gap.d.ts.map +1 -1
  418. package/lib/ui/gap.js +4 -3
  419. package/lib/ui/gap.js.map +1 -1
  420. package/lib/ui/gate-input.d.ts +3 -3
  421. package/lib/ui/gate-input.d.ts.map +1 -1
  422. package/lib/ui/gate-input.js +9 -9
  423. package/lib/ui/gate-input.js.map +1 -1
  424. package/lib/ui/layout.d.ts +1 -8
  425. package/lib/ui/layout.d.ts.map +1 -1
  426. package/lib/ui/layout.js +10 -11
  427. package/lib/ui/layout.js.map +1 -1
  428. package/lib/ui/markdown.d.ts +3 -5
  429. package/lib/ui/markdown.d.ts.map +1 -1
  430. package/lib/ui/markdown.js +18 -7
  431. package/lib/ui/markdown.js.map +1 -1
  432. package/lib/ui/mermaid.d.ts +0 -11
  433. package/lib/ui/mermaid.d.ts.map +1 -1
  434. package/lib/ui/mermaid.js +32 -17
  435. package/lib/ui/mermaid.js.map +1 -1
  436. package/lib/ui/picker-card.d.ts +4 -8
  437. package/lib/ui/picker-card.d.ts.map +1 -1
  438. package/lib/ui/picker-card.js +17 -15
  439. package/lib/ui/picker-card.js.map +1 -1
  440. package/lib/ui/picker.d.ts +11 -17
  441. package/lib/ui/picker.d.ts.map +1 -1
  442. package/lib/ui/picker.js +36 -17
  443. package/lib/ui/picker.js.map +1 -1
  444. package/lib/ui/queue.d.ts.map +1 -1
  445. package/lib/ui/queue.js +11 -1
  446. package/lib/ui/queue.js.map +1 -1
  447. package/lib/ui/stash-picker.d.ts +1 -10
  448. package/lib/ui/stash-picker.d.ts.map +1 -1
  449. package/lib/ui/stash-picker.js +4 -4
  450. package/lib/ui/stash-picker.js.map +1 -1
  451. package/lib/ui/status.d.ts +2 -19
  452. package/lib/ui/status.d.ts.map +1 -1
  453. package/lib/ui/status.js +15 -17
  454. package/lib/ui/status.js.map +1 -1
  455. package/lib/ui/view/document.d.ts +33 -0
  456. package/lib/ui/view/document.d.ts.map +1 -0
  457. package/lib/ui/view/document.js +96 -0
  458. package/lib/ui/view/document.js.map +1 -0
  459. package/lib/ui/view/gate-card.d.ts +2 -0
  460. package/lib/ui/view/gate-card.d.ts.map +1 -1
  461. package/lib/ui/view/gate-card.js +12 -10
  462. package/lib/ui/view/gate-card.js.map +1 -1
  463. package/lib/ui/view/tool-card.d.ts +7 -4
  464. package/lib/ui/view/tool-card.d.ts.map +1 -1
  465. package/lib/ui/view/tool-card.js +12 -17
  466. package/lib/ui/view/tool-card.js.map +1 -1
  467. package/lib/ui/view/transcript-message.d.ts +7 -7
  468. package/lib/ui/view/transcript-message.d.ts.map +1 -1
  469. package/lib/ui/view/transcript-message.js +19 -10
  470. package/lib/ui/view/transcript-message.js.map +1 -1
  471. package/lib/ui/view.d.ts +53 -84
  472. package/lib/ui/view.d.ts.map +1 -1
  473. package/lib/ui/view.js +79 -158
  474. package/lib/ui/view.js.map +1 -1
  475. package/lib/work.d.ts +13 -10
  476. package/lib/work.d.ts.map +1 -1
  477. package/lib/work.js +30 -8
  478. package/lib/work.js.map +1 -1
  479. package/package.json +12 -7
  480. package/presets/cordis.patch.yml +1 -0
  481. package/presets/minimal.patch.yml +1 -0
  482. package/presets/ptc.patch.yml +1 -0
  483. package/presets/standard.patch.yml +1 -0
  484. package/themes/deepseek-blue.yaml +38 -51
  485. package/themes/marine-static.yaml +27 -35
  486. package/themes/pine-slope.yaml +13 -11
  487. package/themes/polar-drift.yaml +6 -0
  488. package/themes/violet-orbit.yaml +14 -18
  489. package/themes/wine-thicket.yaml +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/compat/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,mDAAmD;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D;QACE,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,sDAAsD;QAC3D,GAAG,EAAE,gEAAgE;KACtE;IACD;QACE,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,yEAAyE;QAC9E,GAAG,EAAE,6HAA6H;KACnI;IACD;QACE,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,8CAA8C;QACnD,GAAG,EAAE,2CAA2C;KACjD;CACF,CAAA;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAA0B;IAC1D;QACE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,yDAAyD;QAC9D,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,0CAA0C;QAC/C,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,OAAO,EAAE,oBAAoB;QAC7B,GAAG,EAAE,uCAAuC;QAC5C,GAAG,EAAE,kDAAkD;KACxD;IACD;QACE,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wCAAwC;QAC7C,GAAG,EAAE,uCAAuC;KAC7C;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,qCAAqC;QAC1C,GAAG,EAAE,sCAAsC;KAC5C;CACF,CAAA;AAQD,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,GAAiC;IAChE,OAAO;QACL,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrF,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACtF,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACpD,KAAK,UAAU,CAAC,OAAO,gBAAgB,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,OAAO,qEAAqE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAChG,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1E,OAAO,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAAA;AACpG,CAAC"}
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/compat/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,mDAAmD;AACnD,MAAM,qBAAqB,GAA0B;IACnD;QACE,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,sDAAsD;QAC3D,GAAG,EAAE,gEAAgE;KACtE;IACD;QACE,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,yEAAyE;QAC9E,GAAG,EAAE,6HAA6H;KACnI;IACD;QACE,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,8CAA8C;QACnD,GAAG,EAAE,2CAA2C;KACjD;CACF,CAAA;AAED,mEAAmE;AACnE,MAAM,qBAAqB,GAA0B;IACnD;QACE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,yDAAyD;QAC9D,GAAG,EAAE,8BAA8B;KACpC;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,0CAA0C;QAC/C,GAAG,EAAE,iCAAiC;KACvC;IACD;QACE,OAAO,EAAE,oBAAoB;QAC7B,GAAG,EAAE,uCAAuC;QAC5C,GAAG,EAAE,kDAAkD;KACxD;IACD;QACE,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,wCAAwC;QAC7C,GAAG,EAAE,uCAAuC;KAC7C;IACD;QACE,OAAO,EAAE,UAAU;QACnB,GAAG,EAAE,qCAAqC;QAC1C,GAAG,EAAE,sCAAsC;KAC5C;CACF,CAAA;AAQD,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,GAAiC;IAChE,OAAO;QACL,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACrF,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACtF,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACpD,KAAK,UAAU,CAAC,OAAO,gBAAgB,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9E,OAAO,qEAAqE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AAChG,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACzD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1E,OAAO,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAAA;AACpG,CAAC"}
@@ -16,10 +16,11 @@ export interface SectionScope {
16
16
  /**
17
17
  * Raw opt-outs can precede a valid commit and therefore never reach get() or notifications.
18
18
  *
19
- * A row the document holds no section for reads as `undefined`, the same as a
20
- * row whose section is empty: neither is an opt-out, and the switches a Config
21
- * patch or the entry itself declares stand. Only a section the service cannot
22
- * describe at all is unreadable, which is a refusal rather than an absence.
19
+ * Raw-layer observation supplements committed preferences; it cannot promise
20
+ * opt-out detection without describe() or a matching descriptor. Those cases
21
+ * leave the caller's existing privacy policy in force. Descriptor errors and
22
+ * invalid revisions refuse observation, so the caller can disable history
23
+ * rather than trust an unreadable layer.
23
24
  */
24
25
  readUser(): {
25
26
  readonly value: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA;IACvE;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,GAAG,IAAI,OAAO,CAAA;IACd,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC;;;;;;;OAOG;IACH,QAAQ,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/E;AA2BD,iFAAiF;AACjF,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3G;AAQD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAyEzF"}
1
+ {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA;IACvE;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,GAAG,IAAI,OAAO,CAAA;IACd,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC;;;;;;;;OAQG;IACH,QAAQ,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/E;AA2BD,iFAAiF;AACjF,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAA;CAC3G;AAQD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CA6EzF"}
@@ -20,6 +20,8 @@ export function openSection(service, request) {
20
20
  throw new Error(READ_UNSUPPORTED);
21
21
  return { value: descriptor.user, revision: descriptor.revision };
22
22
  };
23
+ // Prefer owner-aware attachment for provider source replacement and appearance-change hooks.
24
+ // Section APIs retain section persistence and defaults; row Config is a fallback, not a migration.
23
25
  if (typeof settings.installSection === 'function') {
24
26
  let source = () => request.entry;
25
27
  // An attach notification precedes the caller receiving its scope.
@@ -71,9 +73,11 @@ export function openSection(service, request) {
71
73
  return current === undefined ? config.get() : current.value;
72
74
  },
73
75
  update: async (patch) => {
76
+ // Metadata alone can suppress remounts; native references must carry edits to the active surface.
74
77
  if (!config.live)
75
78
  throw new Error(CONFIG_NOT_LIVE);
76
79
  const current = descriptor();
80
+ // Require a usable revision so the host can reject changes made after this descriptor was read.
77
81
  if (current === undefined || settings.writable === false || typeof settings.update !== 'function'
78
82
  || !Number.isSafeInteger(current.revision) || current.revision < 0)
79
83
  return refuseWrite();
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section.js","sourceRoot":"","sources":["../../src/compat/section.ts"],"names":[],"mappings":"AAGA,MAAM,gBAAgB,GAAG,wEAAwE,CAAA;AACjG,MAAM,iBAAiB,GAAG,0EAA0E,CAAA;AACpG,MAAM,eAAe,GAAG,mGAAmG,CAAA;AA8D3H,2GAA2G;AAC3G,SAAS,UAAU,CAAC,QAAsB;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAA;IAClC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AACnE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAI,OAAgB,EAAE,OAA0B;IACzE,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,EAAE,CAAiB,CAAA;IAChD,MAAM,WAAW,GAAG,GAAmB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;IACtF,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAwC,EAAE;QAChF,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,SAAS,CAAA;QAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACjE,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC5G,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAA;IAClE,CAAC,CAAA;IACD,6FAA6F;IAC7F,mGAAmG;IACnG,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QAClD,IAAI,MAAM,GAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAA;QAC/C,kEAAkE;QAClE,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;YAChF,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,OAAO,CAAA,CAAC,CAAC;YAC1C,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,QAAQ;gBAAE,OAAO,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC;SACrD,CAAC,CAAA;QACF,QAAQ,GAAG,IAAI,CAAA;QACf,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;YACnB,MAAM,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gBACpB,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;oBAAE,OAAO,WAAW,EAAE,CAAA;gBAC9F,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YAC1C,CAAC;SACF,CAAA;IACH,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACpF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gBACpB,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;oBAAE,OAAO,WAAW,EAAE,CAAA;gBAC3F,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC3B,CAAC;SACF,CAAA;IACH,CAAC;IACD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC7B,MAAM,UAAU,GAAG,GAAiC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS;YAC5E,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,QAAQ,CAAC,QAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAA;QAC1D,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,gFAAgF;YAChF,GAAG,EAAE,GAAG,EAAE;gBACR,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;gBAC5B,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA;YAC7D,CAAC;YACD,MAAM,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;gBACpB,kGAAkG;gBAClG,IAAI,CAAC,MAAM,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;gBAClD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;gBAC5B,gGAAgG;gBAChG,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;uBAC5F,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC;oBAAE,OAAO,WAAW,EAAE,CAAA;gBAC1F,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC5D,CAAC;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;QACrD,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA,CAAC,CAAC;QAChD,MAAM,EAAE,WAAW;KACpB,CAAA;AACH,CAAC"}
package/lib/config.d.ts CHANGED
@@ -34,9 +34,6 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
34
34
  export declare function hasLiveRowSettings(raw: unknown): boolean;
35
35
  /** Preserve raw malformed fields for the appearance owner to diagnose without losing opt-outs. */
36
36
  export declare function readRowSettings(raw: unknown): unknown;
37
- /** A composed row whose configuration cannot describe a runnable terminal surface. */
38
- export declare class TuiConfigError extends Error {
39
- }
40
37
  /**
41
38
  * Validate the row's configuration into the runtime shape.
42
39
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAalD,8FAA8F;AAC9F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgBjB,CAAA;AAUF,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOrD;AAED,sFAAsF;AACtF,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAiC5C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAiBxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAalD,8FAA8F;AAC9F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAgBjB,CAAA;AAUF,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQxD;AAED,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAOrD;AA0CD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAiBxD"}
package/lib/config.js CHANGED
@@ -61,14 +61,16 @@ export function readRowSettings(raw) {
61
61
  }));
62
62
  }
63
63
  /** A composed row whose configuration cannot describe a runnable terminal surface. */
64
- export class TuiConfigError extends Error {
64
+ class TuiConfigError extends Error {
65
65
  }
66
+ /** Avoid changing a session lookup key during row validation; whitespace-only keys still cannot name a session. */
66
67
  function requireString(value, field) {
67
68
  if (typeof value !== 'string' || value.trim() === '') {
68
69
  throw new TuiConfigError(`${field} must be a non-empty string`);
69
70
  }
70
71
  return value;
71
72
  }
73
+ /** Treat selector padding as input whitespace, and a blank selector as leaving the choice to its default. */
72
74
  function optionalString(value, field) {
73
75
  if (value === undefined || value === null)
74
76
  return undefined;
@@ -77,6 +79,10 @@ function optionalString(value, field) {
77
79
  const trimmed = value.trim();
78
80
  return trimmed === '' ? undefined : trimmed;
79
81
  }
82
+ /**
83
+ * Unlike the row's shared appearance fields, stash has only a scope selector.
84
+ * Reject misspelled keys rather than silently choosing the default shared-directory draft bank.
85
+ */
80
86
  function stashScope(value) {
81
87
  if (value === undefined)
82
88
  return DEFAULT_STASH_SCOPE;
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/export.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import type { TranscriptEntry } from './transcript.ts';
2
- /** The directory under the harness home a dump with no destination lands in. */
3
- export declare const EXPORTS_DIR_NAME = "exports";
4
2
  /**
5
3
  * Where a dump with no destination is written.
6
4
  *
@@ -8,12 +6,12 @@ export declare const EXPORTS_DIR_NAME = "exports";
8
6
  * belongs to `/theme export` and the surface watches it for edits, so a
9
7
  * dump written there would sit among the reader's themes and be re-read as one.
10
8
  */
11
- export declare function exportsHomeDir(env?: NodeJS.ProcessEnv, home?: string): string;
12
- /** Create the exports directory if it is missing; empty when it is there. */
9
+ export declare function exportsHomeDir(): string;
10
+ /** Owner-only storage keeps dumps private even when the harness home can be traversed. */
13
11
  export declare function ensureExportsHome(dir: string): readonly string[];
14
- /** Directory-relative default the reader can find without being told. */
15
- export declare const DEFAULT_EXPORT_PREFIX = "dsh-session";
16
- /** Default file for a dump: the session's own name, in the working directory. */
12
+ /** Existing readers and hard links must never inherit newly exported private text. */
13
+ export declare function writeTranscriptExport(filePath: string, text: string): void;
14
+ /** Associate the default dump with its session; the caller chooses the destination directory. */
17
15
  export declare function defaultExportFile(sessionId: string): string;
18
16
  /**
19
17
  * Render the visible transcript as markdown.
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAatD,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAErG;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAOhE;AAOD,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,gBAAgB,CAAA;AAelD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAuD5E"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAwBtD;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAahE;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAmB1E;AAuBD,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,CAuD5E"}
package/lib/export.js CHANGED
@@ -1,9 +1,16 @@
1
- import { mkdirSync } from 'node:fs';
2
- import { homedir } from 'node:os';
1
+ import { closeSync, constants, fchmodSync, lstatSync, mkdirSync, mkdtempSync, openSync, renameSync, rmdirSync, rmSync, writeFileSync } from 'node:fs';
3
2
  import path from 'node:path';
4
3
  import { rowText } from "./cards.js";
5
4
  import { dshHomeDir } from "./stash/paths.js";
5
+ import { PRIVATE_DIR_MODE, PRIVATE_FILE_MODE } from "./stash/private-fs.js";
6
6
  import { renderTerminalText } from "./terminal-text.js";
7
+ /** Permission repair must target the owned directory, never a link into unrelated storage. */
8
+ const EXPORT_DIRECTORY_FLAGS = constants.O_RDONLY | (constants.O_DIRECTORY ?? 0) | (constants.O_NOFOLLOW ?? 0);
9
+ const EXPORT_WRITE_FLAGS = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | (constants.O_NOFOLLOW ?? 0);
10
+ const EXPORT_STAGING_PREFIX = '.dsh-export-';
11
+ const EXPORT_STAGED_FILE = 'transcript.tmp';
12
+ const EXPORT_ENCODING = 'utf8';
13
+ const EXPORT_DESTINATION_ERROR = 'export destination must be a regular file';
7
14
  /**
8
15
  * A fragment as a document holds it.
9
16
  *
@@ -15,7 +22,7 @@ function documentText(raw) {
15
22
  return renderTerminalText(raw, { color: 'none' });
16
23
  }
17
24
  /** The directory under the harness home a dump with no destination lands in. */
18
- export const EXPORTS_DIR_NAME = 'exports';
25
+ const EXPORTS_DIR_NAME = 'exports';
19
26
  /**
20
27
  * Where a dump with no destination is written.
21
28
  *
@@ -23,25 +30,56 @@ export const EXPORTS_DIR_NAME = 'exports';
23
30
  * belongs to `/theme export` and the surface watches it for edits, so a
24
31
  * dump written there would sit among the reader's themes and be re-read as one.
25
32
  */
26
- export function exportsHomeDir(env = process.env, home = homedir()) {
27
- return path.join(dshHomeDir(env, home), EXPORTS_DIR_NAME);
33
+ export function exportsHomeDir() {
34
+ return path.join(dshHomeDir(), EXPORTS_DIR_NAME);
28
35
  }
29
- /** Create the exports directory if it is missing; empty when it is there. */
36
+ /** Owner-only storage keeps dumps private even when the harness home can be traversed. */
30
37
  export function ensureExportsHome(dir) {
31
38
  try {
32
- mkdirSync(dir, { recursive: true });
39
+ mkdirSync(dir, { recursive: true, mode: PRIVATE_DIR_MODE });
40
+ const directory = openSync(dir, EXPORT_DIRECTORY_FLAGS);
41
+ try {
42
+ fchmodSync(directory, PRIVATE_DIR_MODE);
43
+ }
44
+ finally {
45
+ closeSync(directory);
46
+ }
33
47
  return [];
34
48
  }
35
49
  catch (error) {
36
50
  return [`exports: cannot create ${dir}: ${message(error)}`];
37
51
  }
38
52
  }
53
+ /** Existing readers and hard links must never inherit newly exported private text. */
54
+ export function writeTranscriptExport(filePath, text) {
55
+ const destination = lstatSync(filePath, { throwIfNoEntry: false });
56
+ if (destination !== undefined && !destination.isFile())
57
+ throw new Error(EXPORT_DESTINATION_ERROR);
58
+ const staging = mkdtempSync(path.join(path.dirname(filePath), EXPORT_STAGING_PREFIX));
59
+ const stagedFile = path.join(staging, EXPORT_STAGED_FILE);
60
+ try {
61
+ const file = openSync(stagedFile, EXPORT_WRITE_FLAGS, PRIVATE_FILE_MODE);
62
+ try {
63
+ fchmodSync(file, PRIVATE_FILE_MODE);
64
+ writeFileSync(file, text, EXPORT_ENCODING);
65
+ }
66
+ finally {
67
+ closeSync(file);
68
+ }
69
+ // Replacement publishes an owner-only inode rather than reusing earlier readers' file descriptions.
70
+ renameSync(stagedFile, filePath);
71
+ }
72
+ finally {
73
+ rmSync(stagedFile, { force: true });
74
+ rmdirSync(staging);
75
+ }
76
+ }
39
77
  /** One sentence out of an error, for a notice that has one line. */
40
78
  function message(error) {
41
79
  return error instanceof Error ? error.message.split('\n')[0] ?? String(error) : String(error);
42
80
  }
43
- /** Directory-relative default the reader can find without being told. */
44
- export const DEFAULT_EXPORT_PREFIX = 'dsh-session';
81
+ /** Make default dumps recognizable as harness sessions when browsing the exports directory. */
82
+ const DEFAULT_EXPORT_PREFIX = 'dsh-session';
45
83
  /** How the dump marks a nested call that returned an error, which the screen carried as colour. */
46
84
  const SUBCALL_FAILED_SUFFIX = ' (failed)';
47
85
  /** Id characters kept in a file name, so a session id cannot escape the directory. */
@@ -52,7 +90,7 @@ const BACKTICK_RUN = /`+/gu;
52
90
  /** A comment body must not close the comment that carries it. */
53
91
  const COMMENT_CLOSE = '-->';
54
92
  const COMMENT_CLOSE_DEFUSED = '--&gt;';
55
- /** Default file for a dump: the session's own name, in the working directory. */
93
+ /** Associate the default dump with its session; the caller chooses the destination directory. */
56
94
  export function defaultExportFile(sessionId) {
57
95
  return `${DEFAULT_EXPORT_PREFIX}-${sessionId.replace(UNSAFE_NAME, '_')}.md`;
58
96
  }
package/lib/export.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@ import type { ForkEvent } from './agent/fork.ts';
5
5
  *
6
6
  * A resumed session is folded while its agent's loop is already live, so the
7
7
  * same event reaches the surface twice: once on the stream, once from the log
8
- * the fold is reading. Every durable event carries a monotonic sequence number,
9
- * which is what tells a row that has already been drawn from one that has not.
8
+ * the fold is reading. When an event carries a sequence number, the cursor uses
9
+ * that number to suppress deliveries at or below the session's high-water mark.
10
10
  *
11
11
  * The session is part of the question rather than the caller's memory: numbers
12
12
  * restart with every session, and a transcript that starts on a session other
@@ -21,7 +21,7 @@ export declare class ViewGeneration {
21
21
  /** An old view cannot regain ownership if its read finishes out of order. */
22
22
  begin(): () => boolean;
23
23
  }
24
- /** Consumes durable events in sequence order, each exactly once per session. */
24
+ /** Suppress sequenced replay/live overlap per session; older arrivals are dropped, not reordered, and unsequenced deliveries always pass. */
25
25
  export declare class FoldCursor {
26
26
  private session;
27
27
  private through;
@@ -1 +1 @@
1
- {"version":3,"file":"fold-cursor.d.ts","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,KAAK,EACzC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,EACrC,OAAO,EAAE,MAAM,OAAO,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC5B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,2EAA2E;AAC3E,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAI;IAEtB,6EAA6E;IAC7E,KAAK,IAAI,MAAM,OAAO;CAIvB;AAED,gFAAgF;AAChF,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb,2EAA2E;IAC3E,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO;CAWtD"}
1
+ {"version":3,"file":"fold-cursor.d.ts","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,KAAK,EACzC,IAAI,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,EACrC,OAAO,EAAE,MAAM,OAAO,EACtB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC5B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,2EAA2E;AAC3E,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAI;IAEtB,6EAA6E;IAC7E,KAAK,IAAI,MAAM,OAAO;CAIvB;AAED,6IAA6I;AAC7I,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb,2EAA2E;IAC3E,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO;CAatD"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * A resumed session is folded while its agent's loop is already live, so the
5
5
  * same event reaches the surface twice: once on the stream, once from the log
6
- * the fold is reading. Every durable event carries a monotonic sequence number,
7
- * which is what tells a row that has already been drawn from one that has not.
6
+ * the fold is reading. When an event carries a sequence number, the cursor uses
7
+ * that number to suppress deliveries at or below the session's high-water mark.
8
8
  *
9
9
  * The session is part of the question rather than the caller's memory: numbers
10
10
  * restart with every session, and a transcript that starts on a session other
@@ -29,7 +29,7 @@ export class ViewGeneration {
29
29
  return () => generation === this.generation;
30
30
  }
31
31
  }
32
- /** Consumes durable events in sequence order, each exactly once per session. */
32
+ /** Suppress sequenced replay/live overlap per session; older arrivals are dropped, not reordered, and unsequenced deliveries always pass. */
33
33
  export class FoldCursor {
34
34
  session;
35
35
  through;
@@ -49,6 +49,8 @@ export class FoldCursor {
49
49
  this.session = session;
50
50
  this.through = undefined;
51
51
  }
52
+ // Without a sequence, this cursor cannot identify replay/live overlap; dropping
53
+ // the delivery could lose content. Unsequenced events can therefore repeat.
52
54
  if (typeof event.seq === 'number') {
53
55
  if (this.through !== undefined && event.seq <= this.through)
54
56
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"fold-cursor.js","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAqC,EACrC,OAAsB,EACtB,KAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,2EAA2E;AAC3E,MAAM,OAAO,cAAc;IACjB,UAAU,GAAG,CAAC,CAAA;IAEtB,6EAA6E;IAC7E,KAAK;QACH,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;QACpC,OAAO,GAAG,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,UAAU;IACb,OAAO,CAAuB;IAC9B,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC1B,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,OAAkB,EAAE,KAAgB;QACzC,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YACzE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
1
+ {"version":3,"file":"fold-cursor.js","sourceRoot":"","sources":["../src/fold-cursor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAqC,EACrC,OAAsB,EACtB,KAA6B;IAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IACxB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,2EAA2E;AAC3E,MAAM,OAAO,cAAc;IACjB,UAAU,GAAG,CAAC,CAAA;IAEtB,6EAA6E;IAC7E,KAAK;QACH,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;QACpC,OAAO,GAAG,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAA;IAC7C,CAAC;CACF;AAED,6IAA6I;AAC7I,MAAM,OAAO,UAAU;IACb,OAAO,CAAuB;IAC9B,OAAO,CAAoB;IAEnC;;;;;OAKG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC1B,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,OAAkB,EAAE,KAAgB;QACzC,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAC1B,CAAC;QACD,gFAAgF;QAChF,4EAA4E;QAC5E,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YACzE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -1,41 +1,6 @@
1
1
  import { type GateCard, type GateInput, type GateQuestion } from '../gates.ts';
2
2
  import { type Keymap } from '../input/actions.ts';
3
3
  import type { PositionedOption } from './questions.ts';
4
- /** The label a question earns for an answer the model did not list. */
5
- export declare const CUSTOM_ROW_LABEL = "other";
6
- /** What the free-text row does, said where the reader decides. */
7
- export declare const CUSTOM_ROW_DESCRIPTION = "type your own answer";
8
- /** How the list hint names that row, which the row itself already labels. */
9
- export declare const CUSTOM_ROW_SHORTHAND = "0 answer freely";
10
- /**
11
- * How a hint names the keys of one action.
12
- *
13
- * A hint is prose about what a key does here, so the word comes from the card
14
- * rather than from the catalog row, which has to read well out of context too.
15
- */
16
- export declare function namedKeys(map: Keymap, id: string, verb: string): string;
17
- /**
18
- * How the free-text row spells the keys that leave it.
19
- *
20
- * A text field keeps its own exits: the arrows and escape are the field's, not
21
- * the question's, so a reader who moved question.up or question.skip somewhere
22
- * else still leaves with these. The question's own movement keys leave it as
23
- * well, which is how the navigation aliases reach a reader who is typing rather
24
- * than filtering. The arrows stay one token because they are pinned together
25
- * rather than listed one direction at a time.
26
- */
27
- export declare function customRowExits(map: Keymap): string;
28
- /** The keys that answer the free-text row, where typing is the answer rather than a filter. */
29
- export declare function customHint(map: Keymap): string;
30
- /**
31
- * The question-id suffix that declares a typed answer a credential. The seam
32
- * has no field for it, so a caller marks its own id and the gate reads that
33
- * declaration rather than the wording: ids are caller-owned, and a question
34
- * that merely mentions a key must still show the answer its author meant read.
35
- */
36
- export declare const SECRET_ID_SUFFIX = ":secret";
37
- /** The free-text row's label when the answer is a credential, so the reader sees what they hand over. */
38
- export declare const SECRET_ROW_LABEL = "API KEY";
39
4
  /** Whether a question declares its typed answer a credential through its id. */
40
5
  export declare function declaresSecret(id: string): boolean;
41
6
  /**
@@ -51,7 +16,7 @@ export interface QuestionCardView {
51
16
  readonly question: GateQuestion | undefined;
52
17
  /** One-based position of that question among the gate's own. */
53
18
  readonly position: number;
54
- /** How many questions the gate asks; the title admits to it only when it is more than one. */
19
+ /** Batch size gives the heading progress context; a lone question needs no batch counter. */
55
20
  readonly total: number;
56
21
  /** Labels already chosen on this question. */
57
22
  readonly chosen: readonly string[];
@@ -65,13 +30,13 @@ export interface QuestionCardView {
65
30
  readonly matched: readonly PositionedOption[];
66
31
  /** The slice of those rows the window shows. */
67
32
  readonly rows: readonly PositionedOption[];
68
- /** One-based row number the window starts at, and where the cursor stands in it. */
33
+ /** Zero-based indices into matched, so windowing preserves cursor identity; only displayed numbers add one. */
69
34
  readonly start: number;
70
35
  readonly cursor: number;
71
36
  /** The keys and the editor in force, read per draw so a settings edit lands on the next frame. */
72
37
  readonly keys: Keymap;
73
38
  readonly input: GateInput;
74
39
  }
75
- /** The card for one question: its heading, its windowed options, the free-text row, and the answer in view. */
40
+ /** Project a question without owning its lifetime; the modal owner settles answers and removes the gate. */
76
41
  export declare function questionCard(view: QuestionCardView): GateCard;
77
42
  //# sourceMappingURL=question-card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"question-card.d.ts","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,UAAU,CAAA;AAEvC,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,yBAAyB,CAAA;AAE5D,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,oBAAuC,CAAA;AAExE;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,yGAAyG;AACzG,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC1C,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAC1B;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,QAAQ,CAmD7D"}
1
+ {"version":3,"file":"question-card.d.ts","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AA4DtD,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC7C,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAC1C,+GAA+G;IAC/G,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAC1B;AAED,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,QAAQ,CAsD7D"}
@@ -1,18 +1,18 @@
1
1
  import { CUSTOM_ROW_NUMBER, lines } from "../gates.js";
2
2
  import { keyName, keysFor } from "../input/actions.js";
3
- /** The label a question earns for an answer the model did not list. */
4
- export const CUSTOM_ROW_LABEL = 'other';
3
+ /** Keep an alternative to the listed choices so the reader can answer in their own words. */
4
+ const CUSTOM_ROW_LABEL = 'other';
5
5
  /** What the free-text row does, said where the reader decides. */
6
- export const CUSTOM_ROW_DESCRIPTION = 'type your own answer';
6
+ const CUSTOM_ROW_DESCRIPTION = 'type your own answer';
7
7
  /** How the list hint names that row, which the row itself already labels. */
8
- export const CUSTOM_ROW_SHORTHAND = `${CUSTOM_ROW_NUMBER} answer freely`;
8
+ const CUSTOM_ROW_SHORTHAND = `${CUSTOM_ROW_NUMBER} answer freely`;
9
9
  /**
10
10
  * How a hint names the keys of one action.
11
11
  *
12
12
  * A hint is prose about what a key does here, so the word comes from the card
13
13
  * rather than from the catalog row, which has to read well out of context too.
14
14
  */
15
- export function namedKeys(map, id, verb) {
15
+ function namedKeys(map, id, verb) {
16
16
  // One verb for the action, however many keys reach it: a hint that repeated
17
17
  // the word would read as two actions rather than two ways to do one.
18
18
  return `${keysFor(map, id).map(keyName).join('/')} ${verb}`;
@@ -27,7 +27,7 @@ export function namedKeys(map, id, verb) {
27
27
  * than filtering. The arrows stay one token because they are pinned together
28
28
  * rather than listed one direction at a time.
29
29
  */
30
- export function customRowExits(map) {
30
+ function customRowExits(map) {
31
31
  const names = ['↑↓'];
32
32
  for (const id of ['question.up', 'question.down']) {
33
33
  for (const key of keysFor(map, id)) {
@@ -39,7 +39,7 @@ export function customRowExits(map) {
39
39
  return names.join('/');
40
40
  }
41
41
  /** The keys that answer the free-text row, where typing is the answer rather than a filter. */
42
- export function customHint(map) {
42
+ function customHint(map) {
43
43
  return `type or paste an answer · ${namedKeys(map, 'question.confirm', 'confirm')} · ${namedKeys(map, 'question.cancel', 'abandon')} · ${customRowExits(map)} or esc to options`;
44
44
  }
45
45
  /**
@@ -48,17 +48,18 @@ export function customHint(map) {
48
48
  * declaration rather than the wording: ids are caller-owned, and a question
49
49
  * that merely mentions a key must still show the answer its author meant read.
50
50
  */
51
- export const SECRET_ID_SUFFIX = ':secret';
51
+ const SECRET_ID_SUFFIX = ':secret';
52
52
  /** The free-text row's label when the answer is a credential, so the reader sees what they hand over. */
53
- export const SECRET_ROW_LABEL = 'API KEY';
53
+ const SECRET_ROW_LABEL = 'API KEY';
54
54
  /** Whether a question declares its typed answer a credential through its id. */
55
55
  export function declaresSecret(id) {
56
56
  return id.endsWith(SECRET_ID_SUFFIX);
57
57
  }
58
- /** The card for one question: its heading, its windowed options, the free-text row, and the answer in view. */
58
+ /** Project a question without owning its lifetime; the modal owner settles answers and removes the gate. */
59
59
  export function questionCard(view) {
60
60
  const question = view.question;
61
61
  if (question === undefined) {
62
+ // A post-decision snapshot must not offer stale choices; this fallback does not keep the modal open.
62
63
  return { kind: 'question', title: 'question', detail: [], optionOffset: 0, options: [], custom: undefined, answerInput: undefined, hint: 'finishing' };
63
64
  }
64
65
  const detail = question.detail === undefined ? [] : lines(question.detail);
@@ -78,6 +79,7 @@ export function questionCard(view) {
78
79
  hint: `type or paste an answer · ${namedKeys(view.keys, 'question.confirm', 'confirm')} · ${namedKeys(view.keys, 'question.skip', 'skip')} · ${namedKeys(view.keys, 'question.cancel', 'abandon')}`,
79
80
  };
80
81
  }
82
+ // Filter and range context keep a partial list from appearing to exhaust the available choices.
81
83
  if (view.typed !== '')
82
84
  detail.push(`filter: ${view.typed}`);
83
85
  const secret = declaresSecret(question.id);
@@ -100,6 +102,7 @@ export function questionCard(view) {
100
102
  label: secret ? SECRET_ROW_LABEL : CUSTOM_ROW_LABEL,
101
103
  description: CUSTOM_ROW_DESCRIPTION,
102
104
  current: view.atCustom,
105
+ // Mark free-text answering in progress, not a submitted answer; retained text stays marked after leaving.
103
106
  selected: view.atCustom || view.written,
104
107
  },
105
108
  // A written answer stays in view whether or not the cursor is on the row,
@@ -1 +1 @@
1
- {"version":3,"file":"question-card.js","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"question-card.js","sourceRoot":"","sources":["../../src/gates/question-card.ts"],"names":[],"mappings":"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"}