@sagmans/dsh-tui 0.6.0 → 0.7.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 (250) hide show
  1. package/.agents/skills/dsh-tui-dogfood/SKILL.md +83 -0
  2. package/.agents/skills/dsh-tui-dogfood/references/home-state.md +78 -0
  3. package/.agents/skills/dsh-tui-dogfood/scripts/clone-links.mjs +133 -0
  4. package/.agents/skills/dsh-tui-dogfood/scripts/run-plugin-from-worktree.sh +417 -0
  5. package/.agents/skills/dsh-tui-update-models/SKILL.md +121 -0
  6. package/.agents/skills/dsh-tui-update-models/references/model-wiring.md +162 -0
  7. package/.agents/skills/dsh-tui-update-models/scripts/dump-model-catalog.mjs +178 -0
  8. package/README.md +99 -5
  9. package/lib/agent/present.d.ts.map +1 -1
  10. package/lib/agent/present.js +2 -1
  11. package/lib/agent/present.js.map +1 -1
  12. package/lib/cards/composition.d.ts +68 -0
  13. package/lib/cards/composition.d.ts.map +1 -0
  14. package/lib/cards/composition.js +117 -0
  15. package/lib/cards/composition.js.map +1 -0
  16. package/lib/cards/presenter.d.ts +23 -0
  17. package/lib/cards/presenter.d.ts.map +1 -0
  18. package/lib/cards/presenter.js +394 -0
  19. package/lib/cards/presenter.js.map +1 -0
  20. package/lib/cards/preview.d.ts +42 -0
  21. package/lib/cards/preview.d.ts.map +1 -0
  22. package/lib/cards/preview.js +51 -0
  23. package/lib/cards/preview.js.map +1 -0
  24. package/lib/cards.d.ts +12 -120
  25. package/lib/cards.d.ts.map +1 -1
  26. package/lib/cards.js +4 -556
  27. package/lib/cards.js.map +1 -1
  28. package/lib/compat/section.d.ts +29 -0
  29. package/lib/compat/section.d.ts.map +1 -0
  30. package/lib/compat/section.js +82 -0
  31. package/lib/compat/section.js.map +1 -0
  32. package/lib/config.d.ts +27 -2
  33. package/lib/config.d.ts.map +1 -1
  34. package/lib/config.js +61 -1
  35. package/lib/config.js.map +1 -1
  36. package/lib/contracts.d.ts +28 -0
  37. package/lib/contracts.d.ts.map +1 -1
  38. package/lib/fold-cursor.d.ts +8 -0
  39. package/lib/fold-cursor.d.ts.map +1 -1
  40. package/lib/fold-cursor.js +18 -0
  41. package/lib/fold-cursor.js.map +1 -1
  42. package/lib/gates/question-card.d.ts +77 -0
  43. package/lib/gates/question-card.d.ts.map +1 -0
  44. package/lib/gates/question-card.js +113 -0
  45. package/lib/gates/question-card.js.map +1 -0
  46. package/lib/gates/questions.d.ts +127 -0
  47. package/lib/gates/questions.d.ts.map +1 -0
  48. package/lib/gates/questions.js +418 -0
  49. package/lib/gates/questions.js.map +1 -0
  50. package/lib/gates.d.ts +1 -113
  51. package/lib/gates.d.ts.map +1 -1
  52. package/lib/gates.js +1 -484
  53. package/lib/gates.js.map +1 -1
  54. package/lib/index.d.ts +1 -0
  55. package/lib/index.d.ts.map +1 -1
  56. package/lib/index.js +343 -2602
  57. package/lib/index.js.map +1 -1
  58. package/lib/input/action-catalog.d.ts +74 -0
  59. package/lib/input/action-catalog.d.ts.map +1 -0
  60. package/lib/input/action-catalog.js +137 -0
  61. package/lib/input/action-catalog.js.map +1 -0
  62. package/lib/input/actions.d.ts +5 -81
  63. package/lib/input/actions.d.ts.map +1 -1
  64. package/lib/input/actions.js +4 -625
  65. package/lib/input/actions.js.map +1 -1
  66. package/lib/input/completion.d.ts +1 -1
  67. package/lib/input/completion.d.ts.map +1 -1
  68. package/lib/input/completion.js +2 -1
  69. package/lib/input/completion.js.map +1 -1
  70. package/lib/input/file-index.d.ts +40 -0
  71. package/lib/input/file-index.d.ts.map +1 -0
  72. package/lib/input/file-index.js +141 -0
  73. package/lib/input/file-index.js.map +1 -0
  74. package/lib/input/file-search.d.ts +1 -38
  75. package/lib/input/file-search.d.ts.map +1 -1
  76. package/lib/input/file-search.js +1 -487
  77. package/lib/input/file-search.js.map +1 -1
  78. package/lib/input/key-press.d.ts +57 -0
  79. package/lib/input/key-press.d.ts.map +1 -0
  80. package/lib/input/key-press.js +218 -0
  81. package/lib/input/key-press.js.map +1 -0
  82. package/lib/input/keymap-conflicts.d.ts +59 -0
  83. package/lib/input/keymap-conflicts.d.ts.map +1 -0
  84. package/lib/input/keymap-conflicts.js +292 -0
  85. package/lib/input/keymap-conflicts.js.map +1 -0
  86. package/lib/input/keymap-settings.js +1 -1
  87. package/lib/input/keymap-settings.js.map +1 -1
  88. package/lib/input/keymap.d.ts.map +1 -1
  89. package/lib/input/keymap.js +3 -1
  90. package/lib/input/keymap.js.map +1 -1
  91. package/lib/input/workspace-files.d.ts +10 -0
  92. package/lib/input/workspace-files.d.ts.map +1 -0
  93. package/lib/input/workspace-files.js +359 -0
  94. package/lib/input/workspace-files.js.map +1 -0
  95. package/lib/install-skills.d.ts +20 -0
  96. package/lib/install-skills.d.ts.map +1 -0
  97. package/lib/install-skills.js +198 -0
  98. package/lib/install-skills.js.map +1 -0
  99. package/lib/keys-command.d.ts +2 -1
  100. package/lib/keys-command.d.ts.map +1 -1
  101. package/lib/keys-command.js +2 -1
  102. package/lib/keys-command.js.map +1 -1
  103. package/lib/model-list.d.ts +37 -0
  104. package/lib/model-list.d.ts.map +1 -0
  105. package/lib/model-list.js +60 -0
  106. package/lib/model-list.js.map +1 -0
  107. package/lib/startup.d.ts +8 -0
  108. package/lib/startup.d.ts.map +1 -1
  109. package/lib/startup.js +120 -24
  110. package/lib/startup.js.map +1 -1
  111. package/lib/subagents.d.ts +7 -3
  112. package/lib/subagents.d.ts.map +1 -1
  113. package/lib/subagents.js +28 -4
  114. package/lib/subagents.js.map +1 -1
  115. package/lib/surface/appearance-preferences.d.ts +26 -0
  116. package/lib/surface/appearance-preferences.d.ts.map +1 -0
  117. package/lib/surface/appearance-preferences.js +139 -0
  118. package/lib/surface/appearance-preferences.js.map +1 -0
  119. package/lib/surface/appearance.d.ts +87 -0
  120. package/lib/surface/appearance.d.ts.map +1 -0
  121. package/lib/surface/appearance.js +353 -0
  122. package/lib/surface/appearance.js.map +1 -0
  123. package/lib/surface/background-work.d.ts +49 -0
  124. package/lib/surface/background-work.d.ts.map +1 -0
  125. package/lib/surface/background-work.js +146 -0
  126. package/lib/surface/background-work.js.map +1 -0
  127. package/lib/surface/commands.d.ts +80 -0
  128. package/lib/surface/commands.d.ts.map +1 -0
  129. package/lib/surface/commands.js +364 -0
  130. package/lib/surface/commands.js.map +1 -0
  131. package/lib/surface/modal-input.d.ts +58 -0
  132. package/lib/surface/modal-input.d.ts.map +1 -0
  133. package/lib/surface/modal-input.js +237 -0
  134. package/lib/surface/modal-input.js.map +1 -0
  135. package/lib/surface/model-choice.d.ts +54 -0
  136. package/lib/surface/model-choice.d.ts.map +1 -0
  137. package/lib/surface/model-choice.js +325 -0
  138. package/lib/surface/model-choice.js.map +1 -0
  139. package/lib/surface/preset-choice.d.ts +78 -0
  140. package/lib/surface/preset-choice.d.ts.map +1 -0
  141. package/lib/surface/preset-choice.js +163 -0
  142. package/lib/surface/preset-choice.js.map +1 -0
  143. package/lib/surface/prompt-input.d.ts +97 -0
  144. package/lib/surface/prompt-input.d.ts.map +1 -0
  145. package/lib/surface/prompt-input.js +215 -0
  146. package/lib/surface/prompt-input.js.map +1 -0
  147. package/lib/surface/prompt-memory.d.ts +76 -0
  148. package/lib/surface/prompt-memory.d.ts.map +1 -0
  149. package/lib/surface/prompt-memory.js +167 -0
  150. package/lib/surface/prompt-memory.js.map +1 -0
  151. package/lib/surface/session-lifecycle.d.ts +120 -0
  152. package/lib/surface/session-lifecycle.d.ts.map +1 -0
  153. package/lib/surface/session-lifecycle.js +321 -0
  154. package/lib/surface/session-lifecycle.js.map +1 -0
  155. package/lib/surface/session-picker.d.ts +39 -0
  156. package/lib/surface/session-picker.d.ts.map +1 -0
  157. package/lib/surface/session-picker.js +107 -0
  158. package/lib/surface/session-picker.js.map +1 -0
  159. package/lib/surface/session-view.d.ts +86 -0
  160. package/lib/surface/session-view.d.ts.map +1 -0
  161. package/lib/surface/session-view.js +215 -0
  162. package/lib/surface/session-view.js.map +1 -0
  163. package/lib/surface/staged-turns.d.ts +81 -0
  164. package/lib/surface/staged-turns.d.ts.map +1 -0
  165. package/lib/surface/staged-turns.js +206 -0
  166. package/lib/surface/staged-turns.js.map +1 -0
  167. package/lib/surface/terminal-lifecycle.d.ts +76 -0
  168. package/lib/surface/terminal-lifecycle.d.ts.map +1 -0
  169. package/lib/surface/terminal-lifecycle.js +222 -0
  170. package/lib/surface/terminal-lifecycle.js.map +1 -0
  171. package/lib/terminal-text/scan.d.ts +44 -0
  172. package/lib/terminal-text/scan.d.ts.map +1 -0
  173. package/lib/terminal-text/scan.js +195 -0
  174. package/lib/terminal-text/scan.js.map +1 -0
  175. package/lib/terminal-text/sgr.d.ts +32 -0
  176. package/lib/terminal-text/sgr.d.ts.map +1 -0
  177. package/lib/terminal-text/sgr.js +203 -0
  178. package/lib/terminal-text/sgr.js.map +1 -0
  179. package/lib/terminal-text.d.ts +1 -1
  180. package/lib/terminal-text.d.ts.map +1 -1
  181. package/lib/terminal-text.js +2 -379
  182. package/lib/terminal-text.js.map +1 -1
  183. package/lib/theme-command.js +2 -1
  184. package/lib/theme-command.js.map +1 -1
  185. package/lib/theme-defaults.d.ts +64 -0
  186. package/lib/theme-defaults.d.ts.map +1 -0
  187. package/lib/theme-defaults.js +248 -0
  188. package/lib/theme-defaults.js.map +1 -0
  189. package/lib/theme-resolver.d.ts +36 -0
  190. package/lib/theme-resolver.d.ts.map +1 -0
  191. package/lib/theme-resolver.js +112 -0
  192. package/lib/theme-resolver.js.map +1 -0
  193. package/lib/theme-schema.d.ts.map +1 -1
  194. package/lib/theme-schema.js +3 -2
  195. package/lib/theme-schema.js.map +1 -1
  196. package/lib/theme-settings.d.ts +5 -7
  197. package/lib/theme-settings.d.ts.map +1 -1
  198. package/lib/theme-settings.js +27 -19
  199. package/lib/theme-settings.js.map +1 -1
  200. package/lib/theme-tokens.d.ts +0 -89
  201. package/lib/theme-tokens.d.ts.map +1 -1
  202. package/lib/theme-tokens.js +0 -356
  203. package/lib/theme-tokens.js.map +1 -1
  204. package/lib/theme.d.ts +1 -1
  205. package/lib/theme.d.ts.map +1 -1
  206. package/lib/theme.js +2 -1
  207. package/lib/theme.js.map +1 -1
  208. package/lib/tool-display.d.ts.map +1 -1
  209. package/lib/tool-display.js +2 -1
  210. package/lib/tool-display.js.map +1 -1
  211. package/lib/transcript/message-content.d.ts +21 -0
  212. package/lib/transcript/message-content.d.ts.map +1 -0
  213. package/lib/transcript/message-content.js +61 -0
  214. package/lib/transcript/message-content.js.map +1 -0
  215. package/lib/transcript/tool-calls.d.ts +106 -0
  216. package/lib/transcript/tool-calls.d.ts.map +1 -0
  217. package/lib/transcript/tool-calls.js +254 -0
  218. package/lib/transcript/tool-calls.js.map +1 -0
  219. package/lib/transcript.d.ts +14 -55
  220. package/lib/transcript.d.ts.map +1 -1
  221. package/lib/transcript.js +31 -253
  222. package/lib/transcript.js.map +1 -1
  223. package/lib/ui/dock.d.ts +14 -2
  224. package/lib/ui/dock.d.ts.map +1 -1
  225. package/lib/ui/dock.js +52 -10
  226. package/lib/ui/dock.js.map +1 -1
  227. package/lib/ui/editor.d.ts.map +1 -1
  228. package/lib/ui/editor.js +2 -1
  229. package/lib/ui/editor.js.map +1 -1
  230. package/lib/ui/keymap-picker.d.ts +2 -1
  231. package/lib/ui/keymap-picker.d.ts.map +1 -1
  232. package/lib/ui/keymap-picker.js +1 -0
  233. package/lib/ui/keymap-picker.js.map +1 -1
  234. package/lib/ui/view/gate-card.d.ts +21 -0
  235. package/lib/ui/view/gate-card.d.ts.map +1 -0
  236. package/lib/ui/view/gate-card.js +104 -0
  237. package/lib/ui/view/gate-card.js.map +1 -0
  238. package/lib/ui/view/tool-card.d.ts +138 -0
  239. package/lib/ui/view/tool-card.d.ts.map +1 -0
  240. package/lib/ui/view/tool-card.js +413 -0
  241. package/lib/ui/view/tool-card.js.map +1 -0
  242. package/lib/ui/view/transcript-message.d.ts +62 -0
  243. package/lib/ui/view/transcript-message.d.ts.map +1 -0
  244. package/lib/ui/view/transcript-message.js +158 -0
  245. package/lib/ui/view/transcript-message.js.map +1 -0
  246. package/lib/ui/view.d.ts +80 -220
  247. package/lib/ui/view.d.ts.map +1 -1
  248. package/lib/ui/view.js +81 -675
  249. package/lib/ui/view.js.map +1 -1
  250. package/package.json +3 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/surface/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { ProcessTerminal } from '@earendil-works/pi-tui';
2
+ import type { Context } from '@deepseek-ai/cordis';
3
+ import type { SessionId } from '@deepseek-ai/dsh-session';
4
+ import { type GateCard } from '../gates.ts';
5
+ import type { HerdrReporter } from '../herdr/reporter.ts';
6
+ import type { Keymap } from '../input/actions.ts';
7
+ import type { TuiTheme } from '../theme.ts';
8
+ import type { WarningSafeTui } from '../terminal/warning-screen.ts';
9
+ import type { GateInputBar } from '../ui/gate-input.ts';
10
+ import type { PickerAction, PickerCard } from '../ui/picker.ts';
11
+ import type { PromptBar } from '../ui/prompt.ts';
12
+ /** What the surface needs of a list to drive it, wherever that list is drawn. */
13
+ export interface Picker {
14
+ handleKey(data: string): PickerAction | undefined;
15
+ /** The row window the caller can afford, or the shipped window when it names none. */
16
+ card(window?: number): PickerCard;
17
+ setNote(text: string | undefined): void;
18
+ }
19
+ /**
20
+ * What the modal owner needs from the surface that composes it.
21
+ *
22
+ * Every one of these is a live read or an operation on another owner: the
23
+ * keyboard and the screen are the only things this module takes for itself.
24
+ */
25
+ export interface ModalInputPorts {
26
+ readonly herdr: HerdrReporter;
27
+ readonly editor: GateInputBar;
28
+ readonly tui: WarningSafeTui;
29
+ readonly terminal: ProcessTerminal;
30
+ readonly theme: TuiTheme;
31
+ readonly keymap: () => Keymap;
32
+ readonly promptBar: PromptBar;
33
+ /** Rebuild the prompt's own menu once a borrowed bar is given back. */
34
+ readonly refreshCompletion: () => void;
35
+ readonly activeSession: () => SessionId;
36
+ }
37
+ /** The reads, operations and request listeners the composing surface routes here. */
38
+ export interface ModalInput {
39
+ /** The card a pending gate draws, or undefined when no gate is open. */
40
+ readonly gateCard: () => GateCard | undefined;
41
+ /** The card a pending picker draws in the transcript, when it draws one there. */
42
+ readonly pickerCard: () => PickerCard | undefined;
43
+ readonly openPicker: (picker: Picker, vet?: (id: string) => Promise<string | undefined>, placement?: 'inline' | 'popup') => Promise<string | undefined>;
44
+ /** Drive an open gate or picker with one press; false hands the press back. */
45
+ readonly handleKey: (data: string) => boolean;
46
+ /** The gate and question waterfalls, in the order the surface answers them. */
47
+ readonly requestListeners: () => readonly (() => void)[];
48
+ }
49
+ /**
50
+ * The one modal interaction a terminal can be in: a gate or a picker.
51
+ *
52
+ * Both take the keyboard and give it back the same way, and both can be
53
+ * cancelled by something other than a press (an aborted request, a settled
54
+ * list), so the focus, submission flag, blocked Herdr row and popup lifetime
55
+ * belong to one owner rather than to every feature that opens a list.
56
+ */
57
+ export declare function createModalInput(ctx: Context, ports: ModalInputPorts): ModalInput;
58
+ //# sourceMappingURL=modal-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-input.d.ts","sourceRoot":"","sources":["../../src/surface/modal-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAOhD,iFAAiF;AACjF,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;IACjD,sFAAsF;IACtF,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CACxC;AA0BD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAA;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,SAAS,CAAA;CACxC;AAED,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAA;IAC7C,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,MAAM,UAAU,GAAG,SAAS,CAAA;IACjD,QAAQ,CAAC,UAAU,EAAE,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,EACjD,SAAS,CAAC,EAAE,QAAQ,GAAG,OAAO,KAC3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAA;CACzD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,GAAG,UAAU,CAkOjF"}
@@ -0,0 +1,237 @@
1
+ import { ApprovalGate } from "../gates.js";
2
+ import { QuestionGate, toGateQuestions } from "../gates/questions.js";
3
+ import { PickerPopup, POPUP_MAX_HEIGHT, popupWidth } from "../ui/picker-card.js";
4
+ /**
5
+ * The one modal interaction a terminal can be in: a gate or a picker.
6
+ *
7
+ * Both take the keyboard and give it back the same way, and both can be
8
+ * cancelled by something other than a press (an aborted request, a settled
9
+ * list), so the focus, submission flag, blocked Herdr row and popup lifetime
10
+ * belong to one owner rather than to every feature that opens a list.
11
+ */
12
+ export function createModalInput(ctx, ports) {
13
+ let pending;
14
+ let pendingPicker;
15
+ /** A pick being vetted owns the list, not the keyboard: filtering stays live while its verdict is read. */
16
+ let vetting = false;
17
+ const openGate = (next) => {
18
+ pending = next;
19
+ // The card's own title names the decision, which is what a reader glancing
20
+ // at a wall of panes needs in order to know which one to open.
21
+ ports.herdr.block(next.gate.card().title);
22
+ // A gate owns the keyboard: the editor must not collect the decision keys.
23
+ ports.editor.disableSubmit = true;
24
+ ports.tui.setFocus(null);
25
+ // A question is answered in this editor, which the gate draws under the row
26
+ // being answered, so the hardware cursor belongs to it while it is borrowed.
27
+ // It is set after the focus is cleared, which unmarks the component it left.
28
+ ports.editor.focused = next.kind === 'question';
29
+ ports.tui.requestRender();
30
+ };
31
+ const closeGate = () => {
32
+ pending = undefined;
33
+ ports.herdr.unblock();
34
+ ports.editor.disableSubmit = false;
35
+ // The question is answered or skipped, so the reader gets their prompt back
36
+ // in the bar they left it in, with the menu the prompt bar offered.
37
+ ports.promptBar.giveBack();
38
+ ports.refreshCompletion();
39
+ ports.tui.setFocus(ports.editor);
40
+ ports.tui.requestRender();
41
+ };
42
+ /** Give the keyboard back to the editor and answer whoever opened the picker. */
43
+ const settlePicker = (id) => {
44
+ const settle = pendingPicker?.settle;
45
+ // The screen goes back before the keyboard does: a box left behind a settled
46
+ // list would sit over the transcript until something else repainted.
47
+ pendingPicker?.release?.();
48
+ pendingPicker = undefined;
49
+ ports.herdr.unblock();
50
+ ports.editor.disableSubmit = false;
51
+ ports.tui.setFocus(ports.editor);
52
+ settle?.(id);
53
+ ports.tui.requestRender();
54
+ };
55
+ /**
56
+ * Take the keyboard for a picker and answer with the id it settled on.
57
+ *
58
+ * Where the list is drawn is the caller's decision, because it is a decision
59
+ * about the reader's attention. A list that is the destination — a session to
60
+ * open, a model to switch to — joins the transcript and is read with it. A
61
+ * list that is a reference for the work in front of the reader is drawn over
62
+ * that work instead, so looking something up does not cost them their place.
63
+ * The keyboard is owned the same way either way.
64
+ */
65
+ const openPicker = (picker, vet, placement = 'inline') => new Promise(resolve => {
66
+ const overlay = placement === 'popup'
67
+ ? ports.tui.showOverlay(new PickerPopup(rows => picker.card(rows), () => ports.terminal.rows, ports.theme), {
68
+ width: popupWidth(ports.terminal.columns),
69
+ maxHeight: POPUP_MAX_HEIGHT,
70
+ anchor: 'center',
71
+ margin: 1,
72
+ // The surface's own listener reads every press before a focused
73
+ // component does, so the box needs no focus to be driven; taking it
74
+ // would only move focus away from where the reader left it.
75
+ nonCapturing: true,
76
+ })
77
+ : undefined;
78
+ pendingPicker = {
79
+ picker,
80
+ settle: resolve,
81
+ vet,
82
+ card: overlay === undefined ? () => picker.card() : undefined,
83
+ release: overlay === undefined ? undefined : () => overlay.hide(),
84
+ };
85
+ // A picker owns the keyboard exactly as a gate does: nothing moves until
86
+ // the reader chooses, so it is the same kind of wait.
87
+ ports.herdr.block(picker.card().title);
88
+ ports.editor.disableSubmit = true;
89
+ ports.tui.setFocus(null);
90
+ ports.tui.requestRender();
91
+ });
92
+ /**
93
+ * Read one press while a modal interaction owns the keyboard.
94
+ *
95
+ * The gate and picker branches keep their original priority: a key arrives as
96
+ * a press and a release once the terminal reports key events, and the caller
97
+ * drops the release for the focused component, so this only ever sees the
98
+ * press the surface is meant to act on.
99
+ */
100
+ const handleKey = (data) => {
101
+ if (pending !== undefined) {
102
+ if (pending.kind === 'approval') {
103
+ const outcome = pending.gate.handleKey(data);
104
+ if (outcome === undefined)
105
+ ports.tui.requestRender();
106
+ else {
107
+ pending.settle(outcome);
108
+ closeGate();
109
+ }
110
+ }
111
+ else {
112
+ const answers = pending.gate.handleKey(data);
113
+ if (answers === undefined)
114
+ ports.tui.requestRender();
115
+ else {
116
+ pending.settle(answers);
117
+ closeGate();
118
+ }
119
+ }
120
+ return true;
121
+ }
122
+ if (pendingPicker !== undefined) {
123
+ const action = pendingPicker.picker.handleKey(data);
124
+ if (action === undefined) {
125
+ ports.tui.requestRender();
126
+ return true;
127
+ }
128
+ if (vetting) {
129
+ // A refusal check must not take the keyboard with it: the reader keeps
130
+ // filtering and can still leave, while a second pick waits for the
131
+ // first verdict rather than racing it.
132
+ if (action.kind === 'cancel')
133
+ settlePicker(undefined);
134
+ return true;
135
+ }
136
+ if (action.kind === 'cancel') {
137
+ settlePicker(undefined);
138
+ return true;
139
+ }
140
+ const vet = pendingPicker.vet;
141
+ if (vet === undefined) {
142
+ settlePicker(action.id);
143
+ return true;
144
+ }
145
+ vetting = true;
146
+ void (async () => {
147
+ let reason;
148
+ try {
149
+ reason = await vet(action.id);
150
+ }
151
+ finally {
152
+ // A check that fails must not take the keyboard with it.
153
+ vetting = false;
154
+ }
155
+ if (pendingPicker === undefined)
156
+ return;
157
+ if (reason === undefined) {
158
+ settlePicker(action.id);
159
+ return;
160
+ }
161
+ pendingPicker.picker.setNote(reason);
162
+ ports.tui.requestRender();
163
+ })();
164
+ return true;
165
+ }
166
+ return false;
167
+ };
168
+ return {
169
+ gateCard: () => pending?.gate.card(),
170
+ pickerCard: () => pendingPicker?.card?.(),
171
+ openPicker,
172
+ handleKey,
173
+ requestListeners: () => [
174
+ // Answering these two waterfalls is what makes a terminal surface usable at
175
+ // all: without an answerer every gated tool fails closed, and the model's
176
+ // questions never reach the human.
177
+ ctx.on('approval/request', (request, next) => {
178
+ if (request.agent.id !== ports.activeSession())
179
+ return next();
180
+ return new Promise(resolve => {
181
+ const gate = new ApprovalGate(request.toolName, request.reason, ports.keymap);
182
+ request.signal?.addEventListener('abort', () => {
183
+ gate.cancel();
184
+ if (pending?.gate === gate)
185
+ closeGate();
186
+ resolve('cancelled');
187
+ }, { once: true });
188
+ openGate({ kind: 'approval', gate, settle: resolve });
189
+ });
190
+ }),
191
+ ctx.on('user-questions/request', (request, next) => {
192
+ const agentId = request.agent?.id;
193
+ if (agentId !== undefined && agentId !== ports.activeSession())
194
+ return next();
195
+ const questions = toGateQuestions(request);
196
+ if (questions.length === 0)
197
+ return next();
198
+ return new Promise(resolve => {
199
+ const gate = ports.promptBar.borrow(() => {
200
+ // The bar is an answer's for as long as the gate holds it, so the menu
201
+ // it once offered commands through is replaced before a key can reach it.
202
+ const built = new QuestionGate(questions, ports.editor, ports.keymap);
203
+ ports.refreshCompletion();
204
+ return built;
205
+ });
206
+ // The seam takes mutable selection arrays and an optional custom field, so
207
+ // the read-only gate answer is copied into that exact shape here.
208
+ const settle = (answers) => {
209
+ request.signal?.removeEventListener('abort', onAbort);
210
+ resolve({
211
+ answers: answers.map(answer => ({
212
+ id: answer.id,
213
+ selected: [...answer.selected],
214
+ ...(answer.custom === undefined ? {} : { custom: answer.custom }),
215
+ })),
216
+ });
217
+ };
218
+ // A question whose caller is gone has no reader, so the gate must release
219
+ // the keyboard instead of collecting an answer the aborted call discards.
220
+ const onAbort = () => {
221
+ gate.cancel();
222
+ if (pending?.gate === gate)
223
+ closeGate();
224
+ settle([]);
225
+ };
226
+ openGate({ kind: 'question', gate, settle });
227
+ request.signal?.addEventListener('abort', onAbort, { once: true });
228
+ // A signal that aborted before the listener existed never emits, so the
229
+ // state has to be read once after subscribing.
230
+ if (request.signal?.aborted === true)
231
+ onAbort();
232
+ });
233
+ }),
234
+ ],
235
+ };
236
+ }
237
+ //# sourceMappingURL=modal-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-input.js","sourceRoot":"","sources":["../../src/surface/modal-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import { type ModelChoice as ChosenRoute } from '../agent/model.ts';
3
+ import type { Keymap } from '../input/actions.ts';
4
+ import type { StatusFacts } from '../ui/status.ts';
5
+ import type { Picker } from './modal-input.ts';
6
+ /**
7
+ * What the route owner needs from the surface that composes it.
8
+ *
9
+ * The facts are settings-backed and read at call time: the composition default
10
+ * this owner adopts before the first turn, and reports when the reader named no
11
+ * route, exists only once the settings document has been read. The keys move
12
+ * with a settings edit, so they are read per press, and the screen, the notice
13
+ * and the keyboard lifetime belong to the surface that owns them.
14
+ */
15
+ export interface ModelChoicePorts {
16
+ readonly statusFacts: () => StatusFacts;
17
+ readonly keymap: () => Keymap;
18
+ /** Take the keyboard for a list and answer with the pick id it settled on. */
19
+ readonly openPicker: (picker: Picker) => Promise<string | undefined>;
20
+ readonly notice: (message: string) => void;
21
+ readonly render: () => void;
22
+ }
23
+ /** The reads and operations the composing surface routes to the route owner. */
24
+ export interface ModelChoice {
25
+ /** The route the next step would use, which is what the status line states. */
26
+ readonly current: () => ChosenRoute | undefined;
27
+ /**
28
+ * Compose the switch into an agent's own scope, where its waterfalls dispatch.
29
+ *
30
+ * The scope arrives as an argument because it belongs to the agent being
31
+ * opened: the surface has no handle to it until that agent has started, and
32
+ * the route has to be in force from its first step.
33
+ */
34
+ readonly setup: (agentCtx: Context) => void;
35
+ /** Put the deployment default in force, unless the reader already named a route. */
36
+ readonly adoptDefault: () => void;
37
+ /** Show the route in force, or switch to another one. */
38
+ readonly runModelCommand: (argument: string) => void;
39
+ /** Offer the levels the route in force advertises. */
40
+ readonly openEffortPicker: () => void;
41
+ }
42
+ /**
43
+ * Which model and reasoning effort this session runs with, and the two pickers
44
+ * that change them.
45
+ *
46
+ * The switch and the catalog are one owner because a choice only means
47
+ * something against the directory it was read from: the rows of the model list
48
+ * stream in as each provider's adapter answers, and the levels belong to the
49
+ * exact route. The route in force is resolved against the status facts as much
50
+ * as against the switch, because a session that has chosen nothing runs the
51
+ * settings-backed default the footer states.
52
+ */
53
+ export declare function createModelChoice(ctx: Context, ports: ModelChoicePorts): ModelChoice;
54
+ //# sourceMappingURL=model-choice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-choice.d.ts","sourceRoot":"","sources":["../../src/surface/model-choice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAOL,KAAK,WAAW,IAAI,WAAW,EAGhC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAM9C;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,WAAW,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACpE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAC5B;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IAC/C;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAA;IACjC,yDAAyD;IACzD,QAAQ,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,sDAAsD;IACtD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAA;CACtC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAqTpF"}