aicodeman 1.35.0 → 1.40.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 (246) hide show
  1. package/README.md +8 -0
  2. package/README.zh-CN.md +8 -0
  3. package/dist/attachment-registry.d.ts +6 -0
  4. package/dist/attachment-registry.d.ts.map +1 -1
  5. package/dist/attachment-registry.js +9 -3
  6. package/dist/attachment-registry.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +2 -2
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config/cli-registry/patterns.d.ts +6 -0
  11. package/dist/config/cli-registry/patterns.d.ts.map +1 -1
  12. package/dist/config/cli-registry/patterns.js +13 -0
  13. package/dist/config/cli-registry/patterns.js.map +1 -1
  14. package/dist/config/cli-registry/schema.d.ts +13 -0
  15. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  16. package/dist/config/cli-registry/schema.js +60 -2
  17. package/dist/config/cli-registry/schema.js.map +1 -1
  18. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  19. package/dist/config/cli-registry/stock.js +175 -7
  20. package/dist/config/cli-registry/stock.js.map +1 -1
  21. package/dist/config/cli-registry/types.d.ts +93 -6
  22. package/dist/config/cli-registry/types.d.ts.map +1 -1
  23. package/dist/deepseek-route-config.d.ts +110 -0
  24. package/dist/deepseek-route-config.d.ts.map +1 -0
  25. package/dist/deepseek-route-config.js +477 -0
  26. package/dist/deepseek-route-config.js.map +1 -0
  27. package/dist/git-workspace-status.d.ts +31 -5
  28. package/dist/git-workspace-status.d.ts.map +1 -1
  29. package/dist/git-workspace-status.js +49 -29
  30. package/dist/git-workspace-status.js.map +1 -1
  31. package/dist/model-config-resolvers.d.ts +29 -0
  32. package/dist/model-config-resolvers.d.ts.map +1 -0
  33. package/dist/model-config-resolvers.js +34 -0
  34. package/dist/model-config-resolvers.js.map +1 -0
  35. package/dist/session-display-model.d.ts +110 -0
  36. package/dist/session-display-model.d.ts.map +1 -0
  37. package/dist/session-display-model.js +154 -0
  38. package/dist/session-display-model.js.map +1 -0
  39. package/dist/session.d.ts +145 -8
  40. package/dist/session.d.ts.map +1 -1
  41. package/dist/session.js +280 -35
  42. package/dist/session.js.map +1 -1
  43. package/dist/types/session.d.ts +28 -1
  44. package/dist/types/session.d.ts.map +1 -1
  45. package/dist/types/session.js.map +1 -1
  46. package/dist/types/tools.d.ts +1 -1
  47. package/dist/types/tools.d.ts.map +1 -1
  48. package/dist/utils/deepseek-cli-resolver.d.ts +8 -0
  49. package/dist/utils/deepseek-cli-resolver.d.ts.map +1 -1
  50. package/dist/utils/deepseek-cli-resolver.js +18 -2
  51. package/dist/utils/deepseek-cli-resolver.js.map +1 -1
  52. package/dist/web/launch-defaults.d.ts +22 -0
  53. package/dist/web/launch-defaults.d.ts.map +1 -0
  54. package/dist/web/launch-defaults.js +46 -0
  55. package/dist/web/launch-defaults.js.map +1 -0
  56. package/dist/web/public/admin-ui.js.gz +0 -0
  57. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  58. package/dist/web/public/app.abadc970.js +43 -0
  59. package/dist/web/public/app.abadc970.js.br +0 -0
  60. package/dist/web/public/app.abadc970.js.gz +0 -0
  61. package/dist/web/public/approvals-ui.js.gz +0 -0
  62. package/dist/web/public/{constants.d95fade9.js → constants.c0f8f9de.js} +1009 -127
  63. package/dist/web/public/constants.c0f8f9de.js.br +0 -0
  64. package/dist/web/public/constants.c0f8f9de.js.gz +0 -0
  65. package/dist/web/public/cron-ui.js.gz +0 -0
  66. package/dist/web/public/entrance-animations.js +1 -0
  67. package/dist/web/public/entrance-animations.js.br +0 -0
  68. package/dist/web/public/entrance-animations.js.gz +0 -0
  69. package/dist/web/public/git-status-ui.js +55 -9
  70. package/dist/web/public/git-status-ui.js.br +0 -0
  71. package/dist/web/public/git-status-ui.js.gz +0 -0
  72. package/dist/web/public/home-sessions.js +12 -9
  73. package/dist/web/public/home-sessions.js.br +0 -0
  74. package/dist/web/public/home-sessions.js.gz +0 -0
  75. package/dist/web/public/host-wake-ui.js.gz +0 -0
  76. package/dist/web/public/i18n.a31747a9.js +2 -0
  77. package/dist/web/public/i18n.a31747a9.js.br +0 -0
  78. package/dist/web/public/i18n.a31747a9.js.gz +0 -0
  79. package/dist/web/public/{image-input.a216cf9e.js → image-input.898a538b.js} +18 -8
  80. package/dist/web/public/image-input.898a538b.js.br +0 -0
  81. package/dist/web/public/image-input.898a538b.js.gz +0 -0
  82. package/dist/web/public/index.html +133 -37
  83. package/dist/web/public/index.html.br +0 -0
  84. package/dist/web/public/index.html.gz +0 -0
  85. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  86. package/dist/web/public/keyboard-accessory.c1e7c7b7.js.gz +0 -0
  87. package/dist/web/public/{mobile-handlers.23a85db1.js → mobile-handlers.0ef9c311.js} +20 -0
  88. package/dist/web/public/mobile-handlers.0ef9c311.js.br +0 -0
  89. package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
  90. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  91. package/dist/web/public/mobile-overview.js.gz +0 -0
  92. package/dist/web/public/mobile.111b187d.css +1 -0
  93. package/dist/web/public/mobile.111b187d.css.br +0 -0
  94. package/dist/web/public/mobile.111b187d.css.gz +0 -0
  95. package/dist/web/public/notification-manager.50bb87d8.js.gz +0 -0
  96. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  97. package/dist/web/public/{panels-ui.6a5898d9.js → panels-ui.4735dfc2.js} +4 -4
  98. package/dist/web/public/panels-ui.4735dfc2.js.br +0 -0
  99. package/dist/web/public/{panels-ui.6a5898d9.js.gz → panels-ui.4735dfc2.js.gz} +0 -0
  100. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  101. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  102. package/dist/web/public/readmymind-ui.js.gz +0 -0
  103. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  104. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  105. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  106. package/dist/web/public/session-lineage.js +229 -86
  107. package/dist/web/public/session-lineage.js.br +0 -0
  108. package/dist/web/public/session-lineage.js.gz +0 -0
  109. package/dist/web/public/session-ui.f731602c.js +100 -0
  110. package/dist/web/public/session-ui.f731602c.js.br +0 -0
  111. package/dist/web/public/session-ui.f731602c.js.gz +0 -0
  112. package/dist/web/public/settings-ui.a97ab16f.js +97 -0
  113. package/dist/web/public/settings-ui.a97ab16f.js.br +0 -0
  114. package/dist/web/public/settings-ui.a97ab16f.js.gz +0 -0
  115. package/dist/web/public/spreadsheet-preview-worker.js +290 -0
  116. package/dist/web/public/spreadsheet-preview-worker.js.br +0 -0
  117. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  118. package/dist/web/public/spreadsheet-preview.af82fa2f.js +555 -0
  119. package/dist/web/public/spreadsheet-preview.af82fa2f.js.br +0 -0
  120. package/dist/web/public/spreadsheet-preview.af82fa2f.js.gz +0 -0
  121. package/dist/web/public/spreadsheet-xlsx-core.js +1006 -0
  122. package/dist/web/public/spreadsheet-xlsx-core.js.br +0 -0
  123. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  124. package/dist/web/public/styles.8ee12666.css +1 -0
  125. package/dist/web/public/styles.8ee12666.css.br +0 -0
  126. package/dist/web/public/styles.8ee12666.css.gz +0 -0
  127. package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
  128. package/dist/web/public/sw.js +2 -2
  129. package/dist/web/public/sw.js.br +0 -0
  130. package/dist/web/public/sw.js.gz +0 -0
  131. package/dist/web/public/tab-layout-browser.065fcba4.js.gz +0 -0
  132. package/dist/web/public/{tab-rail-resize.94cd59f0.js → tab-rail-resize.a5867793.js} +1 -1
  133. package/dist/web/public/tab-rail-resize.a5867793.js.br +0 -0
  134. package/dist/web/public/{tab-rail-resize.94cd59f0.js.gz → tab-rail-resize.a5867793.js.gz} +0 -0
  135. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js +1 -0
  136. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.br +0 -0
  137. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
  138. package/dist/web/public/terminal-split.js +146 -649
  139. package/dist/web/public/terminal-split.js.br +0 -0
  140. package/dist/web/public/terminal-split.js.gz +0 -0
  141. package/dist/web/public/terminal-tile.js +1611 -0
  142. package/dist/web/public/terminal-tile.js.br +0 -0
  143. package/dist/web/public/terminal-tile.js.gz +0 -0
  144. package/dist/web/public/terminal-ui.5059b30e.js +2 -0
  145. package/dist/web/public/terminal-ui.5059b30e.js.br +0 -0
  146. package/dist/web/public/terminal-ui.5059b30e.js.gz +0 -0
  147. package/dist/web/public/tile-grid.js +2684 -0
  148. package/dist/web/public/tile-grid.js.br +0 -0
  149. package/dist/web/public/tile-grid.js.gz +0 -0
  150. package/dist/web/public/ultracode-panel.js.gz +0 -0
  151. package/dist/web/public/ultracode-windows.js.gz +0 -0
  152. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  153. package/dist/web/public/vendor/exceljs.min.js +44 -0
  154. package/dist/web/public/vendor/exceljs.min.js.br +0 -0
  155. package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
  156. package/dist/web/public/vendor/fflate.min.js +1 -0
  157. package/dist/web/public/vendor/fflate.min.js.br +0 -0
  158. package/dist/web/public/vendor/fflate.min.js.gz +0 -0
  159. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  160. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  161. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  162. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  163. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  164. package/dist/web/public/vendor/xterm-predictive-echo.ae5e3d5d.js.gz +0 -0
  165. package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.gz +0 -0
  166. package/dist/web/public/vendor/xterm.css.gz +0 -0
  167. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  168. package/dist/web/public/{voice-input.c4b51eb6.js → voice-input.2342c37b.js} +64 -10
  169. package/dist/web/public/voice-input.2342c37b.js.br +0 -0
  170. package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
  171. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  172. package/dist/web/public/webview-tabs.js +9 -1
  173. package/dist/web/public/webview-tabs.js.br +0 -0
  174. package/dist/web/public/webview-tabs.js.gz +0 -0
  175. package/dist/web/routes/cli-registry-routes.d.ts.map +1 -1
  176. package/dist/web/routes/cli-registry-routes.js +3 -1
  177. package/dist/web/routes/cli-registry-routes.js.map +1 -1
  178. package/dist/web/routes/file-routes.d.ts +7 -0
  179. package/dist/web/routes/file-routes.d.ts.map +1 -1
  180. package/dist/web/routes/file-routes.js +34 -4
  181. package/dist/web/routes/file-routes.js.map +1 -1
  182. package/dist/web/routes/git-status-routes.d.ts.map +1 -1
  183. package/dist/web/routes/git-status-routes.js +33 -6
  184. package/dist/web/routes/git-status-routes.js.map +1 -1
  185. package/dist/web/routes/session-routes.d.ts +18 -0
  186. package/dist/web/routes/session-routes.d.ts.map +1 -1
  187. package/dist/web/routes/session-routes.js +86 -34
  188. package/dist/web/routes/session-routes.js.map +1 -1
  189. package/dist/web/routes/status-telemetry-routes.d.ts +3 -0
  190. package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
  191. package/dist/web/routes/status-telemetry-routes.js +12 -0
  192. package/dist/web/routes/status-telemetry-routes.js.map +1 -1
  193. package/dist/web/routes/system-routes.d.ts.map +1 -1
  194. package/dist/web/routes/system-routes.js +13 -0
  195. package/dist/web/routes/system-routes.js.map +1 -1
  196. package/dist/web/schemas.d.ts +27 -0
  197. package/dist/web/schemas.d.ts.map +1 -1
  198. package/dist/web/schemas.js +34 -0
  199. package/dist/web/schemas.js.map +1 -1
  200. package/dist/web/server.d.ts +5 -0
  201. package/dist/web/server.d.ts.map +1 -1
  202. package/dist/web/server.js +32 -11
  203. package/dist/web/server.js.map +1 -1
  204. package/dist/web/session-listener-wiring.d.ts +1 -0
  205. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  206. package/dist/web/session-listener-wiring.js +11 -0
  207. package/dist/web/session-listener-wiring.js.map +1 -1
  208. package/package.json +3 -1
  209. package/scripts/postinstall.js +16 -0
  210. package/dist/web/public/app.b9516c7b.js +0 -43
  211. package/dist/web/public/app.b9516c7b.js.br +0 -0
  212. package/dist/web/public/app.b9516c7b.js.gz +0 -0
  213. package/dist/web/public/constants.d95fade9.js.br +0 -0
  214. package/dist/web/public/constants.d95fade9.js.gz +0 -0
  215. package/dist/web/public/i18n.52f5b7cc.js +0 -1
  216. package/dist/web/public/i18n.52f5b7cc.js.br +0 -0
  217. package/dist/web/public/i18n.52f5b7cc.js.gz +0 -0
  218. package/dist/web/public/image-input.a216cf9e.js.br +0 -0
  219. package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
  220. package/dist/web/public/mobile-handlers.23a85db1.js.br +0 -0
  221. package/dist/web/public/mobile-handlers.23a85db1.js.gz +0 -0
  222. package/dist/web/public/mobile.1aa4952d.css +0 -1
  223. package/dist/web/public/mobile.1aa4952d.css.br +0 -0
  224. package/dist/web/public/mobile.1aa4952d.css.gz +0 -0
  225. package/dist/web/public/panels-ui.6a5898d9.js.br +0 -0
  226. package/dist/web/public/session-ui.6bddf916.js +0 -89
  227. package/dist/web/public/session-ui.6bddf916.js.br +0 -0
  228. package/dist/web/public/session-ui.6bddf916.js.gz +0 -0
  229. package/dist/web/public/settings-ui.6e798b7b.js +0 -97
  230. package/dist/web/public/settings-ui.6e798b7b.js.br +0 -0
  231. package/dist/web/public/settings-ui.6e798b7b.js.gz +0 -0
  232. package/dist/web/public/styles.2d175c60.css +0 -1
  233. package/dist/web/public/styles.2d175c60.css.br +0 -0
  234. package/dist/web/public/styles.2d175c60.css.gz +0 -0
  235. package/dist/web/public/tab-rail-resize.94cd59f0.js.br +0 -0
  236. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js +0 -1
  237. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.br +0 -0
  238. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
  239. package/dist/web/public/terminal-ui.a4535311.js +0 -2
  240. package/dist/web/public/terminal-ui.a4535311.js.br +0 -0
  241. package/dist/web/public/terminal-ui.a4535311.js.gz +0 -0
  242. package/dist/web/public/upload.html +0 -155
  243. package/dist/web/public/upload.html.br +0 -0
  244. package/dist/web/public/upload.html.gz +0 -0
  245. package/dist/web/public/voice-input.c4b51eb6.js.br +0 -0
  246. package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
@@ -113,6 +113,15 @@ export interface CliVariant {
113
113
  }
114
114
  /** The newline chord a CLI's composer reads as "insert a line break" (see `CliCapabilities.newline`). */
115
115
  export type NewlineSequence = 'line-feed' | 'esc-enter';
116
+ /** The config readers `capabilities.modelDetect.configResolver` may name (src/model-config-resolvers.ts). */
117
+ export type ModelConfigResolverName = 'deepseek-route';
118
+ /**
119
+ * The synced App Settings keys `capabilities.launchDefaults` may name (src/web/launch-defaults.ts).
120
+ * A closed list rather than any settings key, so a clis.json override cannot feed an
121
+ * arbitrary setting onto a command line; each name must also be a `SettingsUpdateSchema`
122
+ * key, which the resolver's typing enforces.
123
+ */
124
+ export type LaunchDefaultSettingKey = 'codexModel' | 'codexReasoningEffort';
116
125
  /** The MCP config dialects `src/mcp-sync.ts` has an adapter for. */
117
126
  export type McpConfigFormat = 'claude-json' | 'gemini-json' | 'codex-toml' | 'opencode-json' | 'antigravity-json';
118
127
  export interface CliLaunch {
@@ -382,8 +391,8 @@ export interface CliCapabilities {
382
391
  /**
383
392
  * How many rows at the FOOT of the screen that row can appear in, counting non-blank
384
393
  * rows only. Claude writes its chip on the last row and keeps the default; Codex pins
385
- * its own above the composer, which puts it third from the bottom, so it declares
386
- * more. Keep each number as small as that CLI's layout allows: every extra row is
394
+ * its own above the composer, which puts it third or fourth from the bottom (its hint
395
+ * row comes and goes), so it declares more. Keep each number as small as that CLI's layout allows: every extra row is
387
396
  * another row an agent might be able to write, and the label is what silences an
388
397
  * alert. See `watchingLabel()` in `session-activity.ts`.
389
398
  */
@@ -456,11 +465,40 @@ export interface CliCapabilities {
456
465
  */
457
466
  transcript: 'claude-jsonl' | 'codex-rollout' | 'deepseek-zstd' | 'omp-jsonl' | 'none';
458
467
  /**
459
- * 'strip-full' — alt-screen + erase-scrollback + mouse DECSETs stripped (Ink TUIs).
460
- * 'strip-mux-only' — only tmux's own attach-time smcup (the safe default).
461
- * 'preserve' — leave everything (a direct-PTY shell running vim/less/htop).
468
+ * What the server strips from this CLI's output stream before the browser sees it.
469
+ * The value encodes three independent choices (predicates in session.ts):
470
+ *
471
+ * | value | alt-screen toggles | `3J` (erase scrollback) | mouse DECSETs |
472
+ * |-----------------------|---------------------|-------------------------|---------------------|
473
+ * | `strip-full` | stripped | stripped | stripped |
474
+ * | `strip-mux-and-mouse` | stripped under tmux | kept | stripped under tmux |
475
+ * | `strip-mux-only` | stripped under tmux | kept | kept |
476
+ * | `preserve` | stripped under tmux | kept | kept |
477
+ *
478
+ * `strip-full` is `isAltScreenStripMode`; `strip-mux-and-mouse` is `isMuxMouseStripMode`;
479
+ * every other value takes `isMuxAltScreenOnlyStripMode`, so at runtime `preserve` and
480
+ * `strip-mux-only` are the same row — `preserve` only says what such a CLI's pane
481
+ * holds (terminal-owned scrollback: a shell, pi), not a different strip.
482
+ *
483
+ * - alt-screen: the tmux CLIENT emits `smcup` as its first bytes at attach, parking
484
+ * xterm in the scrollback-less alternate buffer; a pane program's own toggles never
485
+ * reach the client (tmux repaints instead). "Under tmux" means `useMux`: on a
486
+ * direct-PTY fallback the `?1049h` is the program's own and must stay.
487
+ * - `3J`: a user's `clear` is a deliberate scrollback wipe; only an Ink TUI's
488
+ * redraw-driven `3J` (strip-full) is noise.
489
+ * - mouse DECSETs: stripping them keeps a drag a local selection instead of a report
490
+ * to the TUI. The browser then hand-encodes clicks (`_sendSyntheticSgrTap`), gated
491
+ * on the `cliMouseTracking` the server records as it strips. Kept where a program's
492
+ * own mouse support must work in the pane (htop/vim in a shell).
493
+ *
494
+ * Stock CLIs: `strip-full` = claude, codex, gemini (Ink TUIs); `strip-mux-and-mouse` =
495
+ * opencode (a full-screen TUI that enables tracking itself); `strip-mux-only` =
496
+ * antigravity, grok, deepseek, omp; `preserve` = shell, pi.
497
+ *
498
+ * A fourth combination is the point to split this into flags; three is still cheaper
499
+ * as an enum.
462
500
  */
463
- altScreen: 'strip-full' | 'strip-mux-only' | 'preserve';
501
+ altScreen: 'strip-full' | 'strip-mux-only' | 'strip-mux-and-mouse' | 'preserve';
464
502
  echo: {
465
503
  policy: 'buffer' | 'predict' | 'off';
466
504
  /** How the local-echo overlay locates the composer row. */
@@ -496,6 +534,55 @@ export interface CliCapabilities {
496
534
  source: 'flag' | 'claude-settings-file' | 'none';
497
535
  param?: string;
498
536
  };
537
+ /**
538
+ * Where this CLI draws the model it is running, so a session header can name it
539
+ * (`SessionState.displayModel`, src/session-display-model.ts).
540
+ *
541
+ * `screenLine` is the source of a regex with exactly ONE capture group, the model. It
542
+ * runs over the last `screenLines` non-blank rows of the pane capture the idle/working
543
+ * probe already takes (rows joined with `\n`, so a pattern may span them), which costs no
544
+ * extra tmux call and re-reads the footer at every turn transition, so an in-session
545
+ * `/model` switch is followed.
546
+ *
547
+ * ⚠ The rows are pane text and the agent writes most of a pane, so a pattern must anchor
548
+ * on chrome only this CLI draws (the row under its own composer, an effort word in its
549
+ * own footer format), never on a shape the agent could print in its transcript. Measured
550
+ * on a live pane per CLI; absent means the CLI's screen is never read for a model and
551
+ * the session shows its launch model, if any.
552
+ *
553
+ * `configResolver` names a reader (src/model-config-resolvers.ts) that resolves the
554
+ * model the CLI's own config pins, the way that CLI resolves it for the session, for
555
+ * while the screen names none (its status line switched off, or not drawn yet). Read
556
+ * once per pane start, attach or relaunch, bounded and read-only; the screen still
557
+ * wins whenever it names a model. A NAMED reader, like a launcher profile, so the
558
+ * per-CLI behaviour stays data here and code in one module.
559
+ */
560
+ modelDetect?: {
561
+ screenLine?: string;
562
+ screenLines?: number;
563
+ /**
564
+ * Words the `screenLine` field can show when it is NOT the model (a footer whose model
565
+ * field is switched off shows the next field there), compared lower-cased. A field
566
+ * equal to the session's own working-directory basename is never the model either,
567
+ * for every CLI; that rule is the shared reader's, not data.
568
+ */
569
+ rejectWords?: string[];
570
+ configResolver?: ModelConfigResolverName;
571
+ };
572
+ /**
573
+ * Synced App Settings that seed this CLI's launch params when the caller left them unset,
574
+ * keyed by LAUNCH PARAM name (`{ model: 'codexModel' }`), never the legacy wire name; the
575
+ * resolver translates through `launch.legacyConfigAliases` like every other `param`.
576
+ *
577
+ * Filled into the entry's `launch.legacyConfigField` object at create time by
578
+ * `applyLaunchDefaults()` (src/web/launch-defaults.ts), which re-validates each value
579
+ * with `SettingsUpdateSchema` and never overwrites a value the caller sent. Which
580
+ * launches get it is the CALLER's decision (local ones only: never remote, Docker or a
581
+ * custom model endpoint). `schema.ts` refuses an undeclared param, and an entry without
582
+ * a `legacyConfigField`, whose params would otherwise be read off the request body itself.
583
+ * Absent = no launch defaults.
584
+ */
585
+ launchDefaults?: Record<string, LaunchDefaultSettingKey>;
499
586
  /**
500
587
  * Params a non-granted multi-user owner may not set freely, and what they are forced to.
501
588
  * Data-driven so a CUSTOM CLI's bypass flag is clampable exactly like codex's.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/cli-registry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/cli-registry/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @fileoverview The model a DeepSeek Harness (`dsh`) session's TUI is configured to
3
+ * use, read from its route config, for a session header whose screen names no model
4
+ * yet (the status bar's model field switched off, or not drawn yet). See
5
+ * `SessionState.displayModel` (src/session-display-model.ts): the screen still wins
6
+ * whenever it names a model, since it is what the running TUI actually uses.
7
+ *
8
+ * ## How dsh-TUI resolves its route (dsh 0.1.1-rc.2, dsh-TUI 0.10.0-beta.1)
9
+ *
10
+ * A profile is a stack of loader patch layers over an empty root, in this order
11
+ * (`@deepseek-ai/dsh` profile-boot): every bundle's patch layer, the profile's own
12
+ * `$DSH_HOME/profiles/<profile>/cordis.patch.yml`, the home-level
13
+ * `$DSH_HOME/cordis.patch.yml` (it outranks the profile layer), then `--patch`
14
+ * overlays (Codeman passes none). A patch targets a row by `id`; one whose `name`
15
+ * does not match the row's is skipped; every other key REPLACES the row's field
16
+ * whole (`applyEntryPatches`), so the last layer carrying `config` for the `dsh-tui`
17
+ * row defines all of it.
18
+ *
19
+ * dsh-TUI then takes its model route from that config only when it names BOTH
20
+ * `provider` and `model` (`lib/types/modelRoute.js`, issue #67). Anything less is
21
+ * dropped whole and the TUI falls back to the persisted `/model` choice, then to its
22
+ * own default: neither is in the config, so neither is answered here. The bundle's
23
+ * own row pins `provider: deepseek-official` alone, by design, so only the two user
24
+ * layers can pin a route; the bundle layers are not read (they resolve through the dsh
25
+ * installation, outside the dsh home). `settings.yaml`'s `agent-default-model` is the
26
+ * HEADLESS default, not the TUI's, and is never read.
27
+ *
28
+ * ## Answer nothing rather than a guess
29
+ *
30
+ * Every doubt answers null: a profile that does not compose dsh-TUI, a half-pinned
31
+ * route, a layer that cannot be read (unreadable, a symlink out of the dsh home, too
32
+ * big, a mount that does not answer), and a file this reader does not fully
33
+ * understand. The YAML reader below is deliberately narrow (the repo carries no YAML
34
+ * dependency): a top-level block sequence of patch items, plain keys, single-line
35
+ * plain or quoted string scalars for the values it needs, and null for anything else
36
+ * that could change the answer (an anchor, alias or tag such as `!!js` on such a value,
37
+ * a merge key, a multi-line scalar, flow or block-scalar config, duplicate keys, a
38
+ * scalar YAML would type as a number, boolean or null, a second document, a nested
39
+ * row redefining dsh-TUI).
40
+ *
41
+ * ## Never block, never write, never leak
42
+ *
43
+ * Every path is probed with the bounded `probePathKind()` before it is touched, read
44
+ * asynchronously with a size cap, and must resolve (realpath) inside the dsh home.
45
+ * Nothing is written. Only the model id leaves this module: never the provider, a
46
+ * base URL, a key or any other config value.
47
+ *
48
+ * Tests: `test/deepseek-route-config.test.ts`.
49
+ *
50
+ * @module deepseek-route-config
51
+ */
52
+ /** The dsh-TUI bundle a profile must compose for its route to be read here. */
53
+ export declare const DSH_TUI_PACKAGE = "@deepseek-harness-tui/dsh-tui";
54
+ /** The loader row dsh-TUI's own config lives on. */
55
+ export declare const DSH_TUI_ROW_ID = "dsh-tui";
56
+ /** Largest file read: a patch layer is a few dozen lines. */
57
+ export declare const MAX_ROUTE_FILE_BYTES: number;
58
+ /** What one patch item does to the dsh-TUI row. */
59
+ export interface DshTuiRowPatch {
60
+ /** `name` on the patch; a mismatch makes dsh skip it. */
61
+ name?: string;
62
+ /** `disabled` on the patch, when present. */
63
+ disabled?: boolean;
64
+ /**
65
+ * `config` on the patch, when present: the provider and model it names (absent when
66
+ * it does not name one), or `{}` for a config that is empty or not a mapping.
67
+ */
68
+ config?: {
69
+ provider?: string;
70
+ model?: string;
71
+ };
72
+ }
73
+ /**
74
+ * What a cordis patch-list file (a top-level YAML array of loader patches) does to the
75
+ * dsh-TUI row, in order. An empty list when the file does not touch it. Null when the
76
+ * file is beyond this reader's subset, or when it could re-insert the row.
77
+ *
78
+ * @param text the file's content
79
+ */
80
+ export declare function parseDshTuiPatches(text: string): DshTuiRowPatch[] | null;
81
+ /**
82
+ * The model dsh-TUI's route config pins, given what the user layers do to its row in
83
+ * application order (profile layer first, then the home layer). Null unless the last
84
+ * `config` that applies names both a provider and a model, and the row is not
85
+ * disabled. Pure.
86
+ *
87
+ * @param layers each layer's patches for the row, or null for a layer that could not be read
88
+ */
89
+ export declare function resolveDshTuiRouteModel(layers: Array<DshTuiRowPatch[] | null>): string | null;
90
+ /**
91
+ * The dsh home a session runs against: its own `DSH_HOME` (already clamped for a
92
+ * non-granted owner), else the server's, else `~/.dsh`, as the `dsh` wrapper's
93
+ * `${DSH_HOME:-...}` resolves it. Null for a relative value, which names no place.
94
+ */
95
+ export declare function effectiveDshHome(env: (key: string) => string | undefined): string | null;
96
+ /** What the reader needs to know about one session. */
97
+ export interface DeepSeekRouteContext {
98
+ /** The session's `deepSeekConfig.profile`, if any. */
99
+ profile?: unknown;
100
+ /** The session's dsh home (see {@link effectiveDshHome}). */
101
+ home: string | null;
102
+ /** The server's own dsh home, which names the default profile (as the launch does). */
103
+ serverHome: string | null;
104
+ }
105
+ /**
106
+ * The model the session's dsh-TUI route config pins, or null when it pins none or the
107
+ * answer is in any doubt. Read-only and bounded; see the module comment.
108
+ */
109
+ export declare function readDeepSeekRouteModel(ctx: DeepSeekRouteContext): Promise<string | null>;
110
+ //# sourceMappingURL=deepseek-route-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek-route-config.d.ts","sourceRoot":"","sources":["../src/deepseek-route-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAaH,+EAA+E;AAC/E,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAC/D,oDAAoD;AACpD,eAAO,MAAM,cAAc,YAAY,CAAC;AACxC,6DAA6D;AAC7D,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAM9C,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AA0JD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,IAAI,CAoFxE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAa7F;AAyBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIxF;AAgCD,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uFAAuF;IACvF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8B9F"}