aicodeman 1.34.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 (299) hide show
  1. package/README.md +11 -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/config/dependency-registry.d.ts +7 -0
  24. package/dist/config/dependency-registry.d.ts.map +1 -1
  25. package/dist/config/dependency-registry.js +15 -0
  26. package/dist/config/dependency-registry.js.map +1 -1
  27. package/dist/config/path-probe.d.ts +37 -0
  28. package/dist/config/path-probe.d.ts.map +1 -0
  29. package/dist/config/path-probe.js +43 -0
  30. package/dist/config/path-probe.js.map +1 -0
  31. package/dist/deepseek-route-config.d.ts +110 -0
  32. package/dist/deepseek-route-config.d.ts.map +1 -0
  33. package/dist/deepseek-route-config.js +477 -0
  34. package/dist/deepseek-route-config.js.map +1 -0
  35. package/dist/git-workspace-status.d.ts +246 -0
  36. package/dist/git-workspace-status.d.ts.map +1 -0
  37. package/dist/git-workspace-status.js +626 -0
  38. package/dist/git-workspace-status.js.map +1 -0
  39. package/dist/hooks-config.d.ts.map +1 -1
  40. package/dist/hooks-config.js +83 -13
  41. package/dist/hooks-config.js.map +1 -1
  42. package/dist/model-config-resolvers.d.ts +29 -0
  43. package/dist/model-config-resolvers.d.ts.map +1 -0
  44. package/dist/model-config-resolvers.js +34 -0
  45. package/dist/model-config-resolvers.js.map +1 -0
  46. package/dist/session-display-model.d.ts +110 -0
  47. package/dist/session-display-model.d.ts.map +1 -0
  48. package/dist/session-display-model.js +154 -0
  49. package/dist/session-display-model.js.map +1 -0
  50. package/dist/session.d.ts +145 -8
  51. package/dist/session.d.ts.map +1 -1
  52. package/dist/session.js +280 -35
  53. package/dist/session.js.map +1 -1
  54. package/dist/types/api.d.ts +7 -0
  55. package/dist/types/api.d.ts.map +1 -1
  56. package/dist/types/api.js.map +1 -1
  57. package/dist/types/session.d.ts +28 -1
  58. package/dist/types/session.d.ts.map +1 -1
  59. package/dist/types/session.js.map +1 -1
  60. package/dist/types/tools.d.ts +1 -1
  61. package/dist/types/tools.d.ts.map +1 -1
  62. package/dist/utils/bounded-path-probe.d.ts +99 -0
  63. package/dist/utils/bounded-path-probe.d.ts.map +1 -0
  64. package/dist/utils/bounded-path-probe.js +228 -0
  65. package/dist/utils/bounded-path-probe.js.map +1 -0
  66. package/dist/utils/cli-executable-resolver.d.ts +2 -0
  67. package/dist/utils/cli-executable-resolver.d.ts.map +1 -1
  68. package/dist/utils/cli-executable-resolver.js +2 -1
  69. package/dist/utils/cli-executable-resolver.js.map +1 -1
  70. package/dist/utils/deepseek-cli-resolver.d.ts +8 -0
  71. package/dist/utils/deepseek-cli-resolver.d.ts.map +1 -1
  72. package/dist/utils/deepseek-cli-resolver.js +18 -2
  73. package/dist/utils/deepseek-cli-resolver.js.map +1 -1
  74. package/dist/utils/dependency-checker.d.ts +2 -0
  75. package/dist/utils/dependency-checker.d.ts.map +1 -1
  76. package/dist/utils/dependency-checker.js +37 -9
  77. package/dist/utils/dependency-checker.js.map +1 -1
  78. package/dist/utils/index.d.ts +2 -0
  79. package/dist/utils/index.d.ts.map +1 -1
  80. package/dist/utils/index.js +1 -0
  81. package/dist/utils/index.js.map +1 -1
  82. package/dist/web/case-path.d.ts +58 -0
  83. package/dist/web/case-path.d.ts.map +1 -0
  84. package/dist/web/case-path.js +182 -0
  85. package/dist/web/case-path.js.map +1 -0
  86. package/dist/web/launch-defaults.d.ts +22 -0
  87. package/dist/web/launch-defaults.d.ts.map +1 -0
  88. package/dist/web/launch-defaults.js +46 -0
  89. package/dist/web/launch-defaults.js.map +1 -0
  90. package/dist/web/public/admin-ui.js.gz +0 -0
  91. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  92. package/dist/web/public/app.abadc970.js +43 -0
  93. package/dist/web/public/app.abadc970.js.br +0 -0
  94. package/dist/web/public/app.abadc970.js.gz +0 -0
  95. package/dist/web/public/approvals-ui.js.gz +0 -0
  96. package/dist/web/public/{constants.d95fade9.js → constants.c0f8f9de.js} +1009 -127
  97. package/dist/web/public/constants.c0f8f9de.js.br +0 -0
  98. package/dist/web/public/constants.c0f8f9de.js.gz +0 -0
  99. package/dist/web/public/cron-ui.js.gz +0 -0
  100. package/dist/web/public/entrance-animations.js +1 -0
  101. package/dist/web/public/entrance-animations.js.br +0 -0
  102. package/dist/web/public/entrance-animations.js.gz +0 -0
  103. package/dist/web/public/git-status-ui.js +719 -0
  104. package/dist/web/public/git-status-ui.js.br +0 -0
  105. package/dist/web/public/git-status-ui.js.gz +0 -0
  106. package/dist/web/public/home-sessions.js +12 -9
  107. package/dist/web/public/home-sessions.js.br +0 -0
  108. package/dist/web/public/home-sessions.js.gz +0 -0
  109. package/dist/web/public/host-wake-ui.js.gz +0 -0
  110. package/dist/web/public/i18n.a31747a9.js +2 -0
  111. package/dist/web/public/i18n.a31747a9.js.br +0 -0
  112. package/dist/web/public/i18n.a31747a9.js.gz +0 -0
  113. package/dist/web/public/{image-input.a216cf9e.js → image-input.898a538b.js} +18 -8
  114. package/dist/web/public/image-input.898a538b.js.br +0 -0
  115. package/dist/web/public/image-input.898a538b.js.gz +0 -0
  116. package/dist/web/public/index.html +205 -42
  117. package/dist/web/public/index.html.br +0 -0
  118. package/dist/web/public/index.html.gz +0 -0
  119. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  120. package/dist/web/public/keyboard-accessory.c1e7c7b7.js.gz +0 -0
  121. package/dist/web/public/{mobile-handlers.23a85db1.js → mobile-handlers.0ef9c311.js} +20 -0
  122. package/dist/web/public/mobile-handlers.0ef9c311.js.br +0 -0
  123. package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
  124. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  125. package/dist/web/public/mobile-overview.js.gz +0 -0
  126. package/dist/web/public/mobile.111b187d.css +1 -0
  127. package/dist/web/public/mobile.111b187d.css.br +0 -0
  128. package/dist/web/public/mobile.111b187d.css.gz +0 -0
  129. package/dist/web/public/notification-manager.50bb87d8.js.gz +0 -0
  130. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  131. package/dist/web/public/{panels-ui.6a5898d9.js → panels-ui.4735dfc2.js} +4 -4
  132. package/dist/web/public/panels-ui.4735dfc2.js.br +0 -0
  133. package/dist/web/public/{panels-ui.6a5898d9.js.gz → panels-ui.4735dfc2.js.gz} +0 -0
  134. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  135. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  136. package/dist/web/public/readmymind-ui.js.gz +0 -0
  137. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  138. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  139. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  140. package/dist/web/public/session-lineage.js +229 -86
  141. package/dist/web/public/session-lineage.js.br +0 -0
  142. package/dist/web/public/session-lineage.js.gz +0 -0
  143. package/dist/web/public/session-ui.f731602c.js +100 -0
  144. package/dist/web/public/session-ui.f731602c.js.br +0 -0
  145. package/dist/web/public/session-ui.f731602c.js.gz +0 -0
  146. package/dist/web/public/settings-ui.a97ab16f.js +97 -0
  147. package/dist/web/public/settings-ui.a97ab16f.js.br +0 -0
  148. package/dist/web/public/settings-ui.a97ab16f.js.gz +0 -0
  149. package/dist/web/public/spreadsheet-preview-worker.js +290 -0
  150. package/dist/web/public/spreadsheet-preview-worker.js.br +0 -0
  151. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  152. package/dist/web/public/spreadsheet-preview.af82fa2f.js +555 -0
  153. package/dist/web/public/spreadsheet-preview.af82fa2f.js.br +0 -0
  154. package/dist/web/public/spreadsheet-preview.af82fa2f.js.gz +0 -0
  155. package/dist/web/public/spreadsheet-xlsx-core.js +1006 -0
  156. package/dist/web/public/spreadsheet-xlsx-core.js.br +0 -0
  157. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  158. package/dist/web/public/styles.8ee12666.css +1 -0
  159. package/dist/web/public/styles.8ee12666.css.br +0 -0
  160. package/dist/web/public/styles.8ee12666.css.gz +0 -0
  161. package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
  162. package/dist/web/public/sw.js +2 -2
  163. package/dist/web/public/sw.js.br +0 -0
  164. package/dist/web/public/sw.js.gz +0 -0
  165. package/dist/web/public/tab-layout-browser.065fcba4.js +1 -0
  166. package/dist/web/public/tab-layout-browser.065fcba4.js.br +0 -0
  167. package/dist/web/public/tab-layout-browser.065fcba4.js.gz +0 -0
  168. package/dist/web/public/{tab-rail-resize.dcdc5772.js → tab-rail-resize.a5867793.js} +1 -1
  169. package/dist/web/public/tab-rail-resize.a5867793.js.br +0 -0
  170. package/dist/web/public/tab-rail-resize.a5867793.js.gz +0 -0
  171. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js +1 -0
  172. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.br +0 -0
  173. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
  174. package/dist/web/public/terminal-split.js +146 -649
  175. package/dist/web/public/terminal-split.js.br +0 -0
  176. package/dist/web/public/terminal-split.js.gz +0 -0
  177. package/dist/web/public/terminal-tile.js +1611 -0
  178. package/dist/web/public/terminal-tile.js.br +0 -0
  179. package/dist/web/public/terminal-tile.js.gz +0 -0
  180. package/dist/web/public/terminal-ui.5059b30e.js +2 -0
  181. package/dist/web/public/terminal-ui.5059b30e.js.br +0 -0
  182. package/dist/web/public/terminal-ui.5059b30e.js.gz +0 -0
  183. package/dist/web/public/tile-grid.js +2684 -0
  184. package/dist/web/public/tile-grid.js.br +0 -0
  185. package/dist/web/public/tile-grid.js.gz +0 -0
  186. package/dist/web/public/ultracode-panel.js.gz +0 -0
  187. package/dist/web/public/ultracode-windows.js.gz +0 -0
  188. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  189. package/dist/web/public/vendor/exceljs.min.js +44 -0
  190. package/dist/web/public/vendor/exceljs.min.js.br +0 -0
  191. package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
  192. package/dist/web/public/vendor/fflate.min.js +1 -0
  193. package/dist/web/public/vendor/fflate.min.js.br +0 -0
  194. package/dist/web/public/vendor/fflate.min.js.gz +0 -0
  195. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  196. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  197. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  198. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  199. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  200. package/dist/web/public/vendor/xterm-predictive-echo.ae5e3d5d.js.gz +0 -0
  201. package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.gz +0 -0
  202. package/dist/web/public/vendor/xterm.css.gz +0 -0
  203. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  204. package/dist/web/public/{voice-input.c4b51eb6.js → voice-input.2342c37b.js} +64 -10
  205. package/dist/web/public/voice-input.2342c37b.js.br +0 -0
  206. package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
  207. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  208. package/dist/web/public/webview-tabs.js +9 -1
  209. package/dist/web/public/webview-tabs.js.br +0 -0
  210. package/dist/web/public/webview-tabs.js.gz +0 -0
  211. package/dist/web/routes/case-routes.d.ts.map +1 -1
  212. package/dist/web/routes/case-routes.js +136 -18
  213. package/dist/web/routes/case-routes.js.map +1 -1
  214. package/dist/web/routes/cli-registry-routes.d.ts.map +1 -1
  215. package/dist/web/routes/cli-registry-routes.js +3 -1
  216. package/dist/web/routes/cli-registry-routes.js.map +1 -1
  217. package/dist/web/routes/doctor-routes.d.ts +23 -0
  218. package/dist/web/routes/doctor-routes.d.ts.map +1 -0
  219. package/dist/web/routes/doctor-routes.js +83 -0
  220. package/dist/web/routes/doctor-routes.js.map +1 -0
  221. package/dist/web/routes/file-routes.d.ts +7 -0
  222. package/dist/web/routes/file-routes.d.ts.map +1 -1
  223. package/dist/web/routes/file-routes.js +34 -4
  224. package/dist/web/routes/file-routes.js.map +1 -1
  225. package/dist/web/routes/git-status-routes.d.ts +16 -0
  226. package/dist/web/routes/git-status-routes.d.ts.map +1 -0
  227. package/dist/web/routes/git-status-routes.js +98 -0
  228. package/dist/web/routes/git-status-routes.js.map +1 -0
  229. package/dist/web/routes/index.d.ts +2 -0
  230. package/dist/web/routes/index.d.ts.map +1 -1
  231. package/dist/web/routes/index.js +2 -0
  232. package/dist/web/routes/index.js.map +1 -1
  233. package/dist/web/routes/session-routes.d.ts +18 -0
  234. package/dist/web/routes/session-routes.d.ts.map +1 -1
  235. package/dist/web/routes/session-routes.js +106 -42
  236. package/dist/web/routes/session-routes.js.map +1 -1
  237. package/dist/web/routes/status-telemetry-routes.d.ts +3 -0
  238. package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
  239. package/dist/web/routes/status-telemetry-routes.js +12 -0
  240. package/dist/web/routes/status-telemetry-routes.js.map +1 -1
  241. package/dist/web/routes/system-routes.d.ts.map +1 -1
  242. package/dist/web/routes/system-routes.js +13 -0
  243. package/dist/web/routes/system-routes.js.map +1 -1
  244. package/dist/web/schemas.d.ts +28 -0
  245. package/dist/web/schemas.d.ts.map +1 -1
  246. package/dist/web/schemas.js +41 -0
  247. package/dist/web/schemas.js.map +1 -1
  248. package/dist/web/server.d.ts +5 -0
  249. package/dist/web/server.d.ts.map +1 -1
  250. package/dist/web/server.js +35 -12
  251. package/dist/web/server.js.map +1 -1
  252. package/dist/web/session-listener-wiring.d.ts +1 -0
  253. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  254. package/dist/web/session-listener-wiring.js +11 -0
  255. package/dist/web/session-listener-wiring.js.map +1 -1
  256. package/package.json +3 -1
  257. package/scripts/postinstall.js +16 -0
  258. package/skills/codeman/reference/verbs.md +3 -0
  259. package/dist/web/public/app.cf0db8ce.js +0 -43
  260. package/dist/web/public/app.cf0db8ce.js.br +0 -0
  261. package/dist/web/public/app.cf0db8ce.js.gz +0 -0
  262. package/dist/web/public/constants.d95fade9.js.br +0 -0
  263. package/dist/web/public/constants.d95fade9.js.gz +0 -0
  264. package/dist/web/public/i18n.398b8331.js +0 -1
  265. package/dist/web/public/i18n.398b8331.js.br +0 -0
  266. package/dist/web/public/i18n.398b8331.js.gz +0 -0
  267. package/dist/web/public/image-input.a216cf9e.js.br +0 -0
  268. package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
  269. package/dist/web/public/mobile-handlers.23a85db1.js.br +0 -0
  270. package/dist/web/public/mobile-handlers.23a85db1.js.gz +0 -0
  271. package/dist/web/public/mobile.1aa4952d.css +0 -1
  272. package/dist/web/public/mobile.1aa4952d.css.br +0 -0
  273. package/dist/web/public/mobile.1aa4952d.css.gz +0 -0
  274. package/dist/web/public/panels-ui.6a5898d9.js.br +0 -0
  275. package/dist/web/public/session-ui.bf66c13b.js +0 -89
  276. package/dist/web/public/session-ui.bf66c13b.js.br +0 -0
  277. package/dist/web/public/session-ui.bf66c13b.js.gz +0 -0
  278. package/dist/web/public/settings-ui.331d3b1d.js +0 -97
  279. package/dist/web/public/settings-ui.331d3b1d.js.br +0 -0
  280. package/dist/web/public/settings-ui.331d3b1d.js.gz +0 -0
  281. package/dist/web/public/styles.8c485d26.css +0 -1
  282. package/dist/web/public/styles.8c485d26.css.br +0 -0
  283. package/dist/web/public/styles.8c485d26.css.gz +0 -0
  284. package/dist/web/public/tab-layout-browser.4e0ed50c.js +0 -1
  285. package/dist/web/public/tab-layout-browser.4e0ed50c.js.br +0 -0
  286. package/dist/web/public/tab-layout-browser.4e0ed50c.js.gz +0 -0
  287. package/dist/web/public/tab-rail-resize.dcdc5772.js.br +0 -0
  288. package/dist/web/public/tab-rail-resize.dcdc5772.js.gz +0 -0
  289. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js +0 -1
  290. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.br +0 -0
  291. package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
  292. package/dist/web/public/terminal-ui.a4535311.js +0 -2
  293. package/dist/web/public/terminal-ui.a4535311.js.br +0 -0
  294. package/dist/web/public/terminal-ui.a4535311.js.gz +0 -0
  295. package/dist/web/public/upload.html +0 -155
  296. package/dist/web/public/upload.html.br +0 -0
  297. package/dist/web/public/upload.html.gz +0 -0
  298. package/dist/web/public/voice-input.c4b51eb6.js.br +0 -0
  299. 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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"}
@@ -24,6 +24,13 @@ export interface PathResolver {
24
24
  * there and a false "installed" contradicts the run mode's own resolver.
25
25
  */
26
26
  requireVersionMatch?: boolean;
27
+ /**
28
+ * Absolute directories to probe (`<dir>/<bin>`) when `which` misses. A service (systemd,
29
+ * launchd) runs with a minimal PATH, so a CLI installed under `~/.local/bin` or an npm/nvm
30
+ * prefix is invisible to `which` while the run mode, which falls back to the registry's
31
+ * `discovery.searchDirs`, still finds it. Carries those dirs so the doctor agrees.
32
+ */
33
+ searchDirs?: string[];
27
34
  }
28
35
  /** Resolve a Windows-installed app reachable from win32 or WSL. */
29
36
  export interface WindowsSideResolver {
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-registry.d.ts","sourceRoot":"","sources":["../../src/config/dependency-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE;2CAC2C;AAC3C,eAAO,MAAM,eAAe,sCAAuC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAuFD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAoErD"}
1
+ {"version":3,"file":"dependency-registry.d.ts","sourceRoot":"","sources":["../../src/config/dependency-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE;2CAC2C;AAC3C,eAAO,MAAM,eAAe,sCAAuC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAwFD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAoErD"}
@@ -6,11 +6,25 @@
6
6
  *
7
7
  * @module config/dependency-registry
8
8
  */
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
9
11
  import { enabledClis } from './cli-registry/registry.js';
10
12
  import { compileVersionRegex } from './cli-registry/patterns.js';
11
13
  /** The valid `--category` filter values; single source of truth for the type, the CLI
12
14
  * help text, and CLI input validation. */
13
15
  export const TOOL_CATEGORIES = ['core', 'office', 'other'];
16
+ /**
17
+ * Expand a leading `~` (the only form registry `searchDirs` use). Twin of `expandHome()` in
18
+ * src/utils/cli-resolver.ts, copied rather than imported because importing it from config/
19
+ * would pull in the whole resolver chain; keep the two in step.
20
+ */
21
+ function expandSearchDir(dir) {
22
+ if (dir === '~')
23
+ return homedir();
24
+ if (dir.startsWith('~/'))
25
+ return join(homedir(), dir.slice(2));
26
+ return dir;
27
+ }
14
28
  const ALL = ['linux', 'darwin', 'wsl', 'win32'];
15
29
  /**
16
30
  * The doctor's ROW IDENTITY for a CLI, where it differs from the registry id.
@@ -84,6 +98,7 @@ function cliDependencyEntries() {
84
98
  // (pi, grok, dsh): a bare `which` hit there is not evidence of the right
85
99
  // program, so a version mismatch means MISSING rather than unknown-version.
86
100
  requireVersionMatch: version?.requireVersionMatch,
101
+ searchDirs: cli.discovery.searchDirs.map(expandSearchDir),
87
102
  },
88
103
  },
89
104
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-registry.js","sourceRoot":"","sources":["../../src/config/dependency-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependency-registry.js","sourceRoot":"","sources":["../../src/config/dependency-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @fileoverview Limits for the bounded path probe (`src/utils/bounded-path-probe.ts`).
3
+ *
4
+ * A linked case can live on a network mount, and a hard mount that went away makes
5
+ * `stat()` wait until the mount comes back. The probe gives up on such a path after
6
+ * `PATH_PROBE_TIMEOUT_MS` and answers "unknown", and it stops starting new probes
7
+ * once `MAX_STALLED_PATH_PROBES` timed-out stats are still holding libuv threadpool
8
+ * workers (the pool is shared by every `fs`, `dns.lookup` and `crypto` call in the
9
+ * process, and holds 4 workers unless `UV_THREADPOOL_SIZE` says otherwise).
10
+ *
11
+ * Both are env-overridable, in the same style as the other config modules. A slow
12
+ * but healthy mount (an sshfs that needs a couple of seconds on first touch) may want
13
+ * a longer timeout. The stall limits follow `UV_THREADPOOL_SIZE` on their own, so a
14
+ * server started with a larger pool gets a higher ceiling without further setup.
15
+ *
16
+ * @module config/path-probe
17
+ */
18
+ /** How long a caller waits for one path probe before the answer is "unknown". */
19
+ export declare const PATH_PROBE_TIMEOUT_MS: number;
20
+ /**
21
+ * Hard ceiling on timed-out probes left pending, for every caller, `pastCap` ones
22
+ * included: the threadpool size minus one, so a dead mount can never take the last
23
+ * worker. libuv sizes the pool from `UV_THREADPOOL_SIZE` (4 when unset). A pool of
24
+ * one cannot keep a worker free at all, so the ceiling never drops below one.
25
+ */
26
+ export declare const PATH_PROBE_STALL_CEILING: number;
27
+ /**
28
+ * Timed-out probes allowed to stay pending before new BULK probes are refused
29
+ * (answered "unknown" without a stat). This is a backstop, not the main defence: a
30
+ * stalled path on a network or FUSE mount already takes the rest of that mount out
31
+ * of probing (a stall anywhere else takes out only the stalled path), so the cap
32
+ * only engages once that many UNRELATED places have stopped answering. It defaults
33
+ * to one below {@link PATH_PROBE_STALL_CEILING} (2 with the default pool), leaving a
34
+ * slot a `pastCap` probe may still use, and is never allowed above the ceiling.
35
+ */
36
+ export declare const MAX_STALLED_PATH_PROBES: number;
37
+ //# sourceMappingURL=path-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-probe.d.ts","sourceRoot":"","sources":["../../src/config/path-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,QAA8D,CAAC;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAiE,CAAC;AAEvG;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,QAGnC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview Limits for the bounded path probe (`src/utils/bounded-path-probe.ts`).
3
+ *
4
+ * A linked case can live on a network mount, and a hard mount that went away makes
5
+ * `stat()` wait until the mount comes back. The probe gives up on such a path after
6
+ * `PATH_PROBE_TIMEOUT_MS` and answers "unknown", and it stops starting new probes
7
+ * once `MAX_STALLED_PATH_PROBES` timed-out stats are still holding libuv threadpool
8
+ * workers (the pool is shared by every `fs`, `dns.lookup` and `crypto` call in the
9
+ * process, and holds 4 workers unless `UV_THREADPOOL_SIZE` says otherwise).
10
+ *
11
+ * Both are env-overridable, in the same style as the other config modules. A slow
12
+ * but healthy mount (an sshfs that needs a couple of seconds on first touch) may want
13
+ * a longer timeout. The stall limits follow `UV_THREADPOOL_SIZE` on their own, so a
14
+ * server started with a larger pool gets a higher ceiling without further setup.
15
+ *
16
+ * @module config/path-probe
17
+ */
18
+ function envInt(name, fallback, min, max) {
19
+ const raw = parseInt(process.env[name] || '', 10);
20
+ if (!Number.isFinite(raw) || raw <= 0)
21
+ return fallback;
22
+ return Math.max(min, Math.min(max, raw));
23
+ }
24
+ /** How long a caller waits for one path probe before the answer is "unknown". */
25
+ export const PATH_PROBE_TIMEOUT_MS = envInt('CODEMAN_PATH_PROBE_TIMEOUT_MS', 1_500, 100, 60_000);
26
+ /**
27
+ * Hard ceiling on timed-out probes left pending, for every caller, `pastCap` ones
28
+ * included: the threadpool size minus one, so a dead mount can never take the last
29
+ * worker. libuv sizes the pool from `UV_THREADPOOL_SIZE` (4 when unset). A pool of
30
+ * one cannot keep a worker free at all, so the ceiling never drops below one.
31
+ */
32
+ export const PATH_PROBE_STALL_CEILING = Math.max(1, (Number(process.env.UV_THREADPOOL_SIZE) || 4) - 1);
33
+ /**
34
+ * Timed-out probes allowed to stay pending before new BULK probes are refused
35
+ * (answered "unknown" without a stat). This is a backstop, not the main defence: a
36
+ * stalled path on a network or FUSE mount already takes the rest of that mount out
37
+ * of probing (a stall anywhere else takes out only the stalled path), so the cap
38
+ * only engages once that many UNRELATED places have stopped answering. It defaults
39
+ * to one below {@link PATH_PROBE_STALL_CEILING} (2 with the default pool), leaving a
40
+ * slot a `pastCap` probe may still use, and is never allowed above the ceiling.
41
+ */
42
+ export const MAX_STALLED_PATH_PROBES = Math.min(PATH_PROBE_STALL_CEILING, envInt('CODEMAN_PATH_PROBE_MAX_STALLED', Math.max(1, PATH_PROBE_STALL_CEILING - 1), 1, 64));
43
+ //# sourceMappingURL=path-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-probe.js","sourceRoot":"","sources":["../../src/config/path-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,SAAS,MAAM,CAAC,IAAY,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,+BAA+B,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAEjG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvG;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAC7C,wBAAwB,EACxB,MAAM,CAAC,gCAAgC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3F,CAAC"}
@@ -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"}