aicodeman 1.47.0 → 1.48.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 (264) hide show
  1. package/README.md +3 -0
  2. package/dist/cli-notify.d.ts +34 -0
  3. package/dist/cli-notify.d.ts.map +1 -0
  4. package/dist/cli-notify.js +100 -0
  5. package/dist/cli-notify.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +16 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/cli-registry/patterns.d.ts +1 -1
  10. package/dist/config/cli-registry/patterns.d.ts.map +1 -1
  11. package/dist/config/cli-registry/patterns.js +4 -0
  12. package/dist/config/cli-registry/patterns.js.map +1 -1
  13. package/dist/config/cli-registry/schema.d.ts +6 -0
  14. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  15. package/dist/config/cli-registry/schema.js +62 -2
  16. package/dist/config/cli-registry/schema.js.map +1 -1
  17. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  18. package/dist/config/cli-registry/stock.js +43 -26
  19. package/dist/config/cli-registry/stock.js.map +1 -1
  20. package/dist/config/cli-registry/types.d.ts +47 -17
  21. package/dist/config/cli-registry/types.d.ts.map +1 -1
  22. package/dist/config/path-probe.d.ts +6 -0
  23. package/dist/config/path-probe.d.ts.map +1 -1
  24. package/dist/config/path-probe.js +6 -0
  25. package/dist/config/path-probe.js.map +1 -1
  26. package/dist/config-backup.d.ts +1 -1
  27. package/dist/config-backup.d.ts.map +1 -1
  28. package/dist/config-backup.js +2 -0
  29. package/dist/config-backup.js.map +1 -1
  30. package/dist/custom-model-hosts.d.ts +32 -8
  31. package/dist/custom-model-hosts.d.ts.map +1 -1
  32. package/dist/custom-model-hosts.js +10 -0
  33. package/dist/custom-model-hosts.js.map +1 -1
  34. package/dist/custom-model-injection-apply.d.ts +19 -5
  35. package/dist/custom-model-injection-apply.d.ts.map +1 -1
  36. package/dist/custom-model-injection-apply.js +88 -8
  37. package/dist/custom-model-injection-apply.js.map +1 -1
  38. package/dist/custom-model-injection.d.ts +6 -0
  39. package/dist/custom-model-injection.d.ts.map +1 -1
  40. package/dist/custom-model-injection.js +92 -10
  41. package/dist/custom-model-injection.js.map +1 -1
  42. package/dist/discord-bridge.d.ts +338 -0
  43. package/dist/discord-bridge.d.ts.map +1 -0
  44. package/dist/discord-bridge.js +1256 -0
  45. package/dist/discord-bridge.js.map +1 -0
  46. package/dist/edit-history-local-source.d.ts +83 -0
  47. package/dist/edit-history-local-source.d.ts.map +1 -0
  48. package/dist/edit-history-local-source.js +198 -0
  49. package/dist/edit-history-local-source.js.map +1 -0
  50. package/dist/edit-history-parse.d.ts +114 -0
  51. package/dist/edit-history-parse.d.ts.map +1 -0
  52. package/dist/edit-history-parse.js +312 -0
  53. package/dist/edit-history-parse.js.map +1 -0
  54. package/dist/edit-history-store.d.ts +209 -0
  55. package/dist/edit-history-store.d.ts.map +1 -0
  56. package/dist/edit-history-store.js +599 -0
  57. package/dist/edit-history-store.js.map +1 -0
  58. package/dist/git-clone.d.ts +6 -1
  59. package/dist/git-clone.d.ts.map +1 -1
  60. package/dist/git-clone.js +79 -14
  61. package/dist/git-clone.js.map +1 -1
  62. package/dist/image-watcher.js +4 -4
  63. package/dist/image-watcher.js.map +1 -1
  64. package/dist/mux-interface.d.ts +10 -1
  65. package/dist/mux-interface.d.ts.map +1 -1
  66. package/dist/session-cli-registry-bridge.d.ts.map +1 -1
  67. package/dist/session-cli-registry-bridge.js +4 -0
  68. package/dist/session-cli-registry-bridge.js.map +1 -1
  69. package/dist/session.d.ts +70 -3
  70. package/dist/session.d.ts.map +1 -1
  71. package/dist/session.js +147 -4
  72. package/dist/session.js.map +1 -1
  73. package/dist/tmux-manager.d.ts +40 -0
  74. package/dist/tmux-manager.d.ts.map +1 -1
  75. package/dist/tmux-manager.js +62 -0
  76. package/dist/tmux-manager.js.map +1 -1
  77. package/dist/types/discord.d.ts +55 -0
  78. package/dist/types/discord.d.ts.map +1 -0
  79. package/dist/types/discord.js +18 -0
  80. package/dist/types/discord.js.map +1 -0
  81. package/dist/types/index.d.ts +2 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/dist/types/index.js +2 -0
  84. package/dist/types/index.js.map +1 -1
  85. package/dist/types/session.d.ts +13 -0
  86. package/dist/types/session.d.ts.map +1 -1
  87. package/dist/types/session.js.map +1 -1
  88. package/dist/web/case-path.d.ts +2 -0
  89. package/dist/web/case-path.d.ts.map +1 -1
  90. package/dist/web/case-path.js +3 -3
  91. package/dist/web/case-path.js.map +1 -1
  92. package/dist/web/edit-history-sync.d.ts +158 -0
  93. package/dist/web/edit-history-sync.d.ts.map +1 -0
  94. package/dist/web/edit-history-sync.js +445 -0
  95. package/dist/web/edit-history-sync.js.map +1 -0
  96. package/dist/web/paste-image-gc.d.ts +6 -0
  97. package/dist/web/paste-image-gc.d.ts.map +1 -1
  98. package/dist/web/paste-image-gc.js +6 -0
  99. package/dist/web/paste-image-gc.js.map +1 -1
  100. package/dist/web/ports/session-port.d.ts +13 -0
  101. package/dist/web/ports/session-port.d.ts.map +1 -1
  102. package/dist/web/public/admin-ui.js.gz +0 -0
  103. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  104. package/dist/web/public/{app.fe8a6b4c.js → app.963b5ba8.js} +6 -6
  105. package/dist/web/public/app.963b5ba8.js.br +0 -0
  106. package/dist/web/public/app.963b5ba8.js.gz +0 -0
  107. package/dist/web/public/approvals-ui.js.gz +0 -0
  108. package/dist/web/public/{constants.affcdde6.js → constants.782170e1.js} +114 -25
  109. package/dist/web/public/constants.782170e1.js.br +0 -0
  110. package/dist/web/public/constants.782170e1.js.gz +0 -0
  111. package/dist/web/public/cron-ui.js.gz +0 -0
  112. package/dist/web/public/edit-history-ui.js +630 -0
  113. package/dist/web/public/edit-history-ui.js.br +0 -0
  114. package/dist/web/public/edit-history-ui.js.gz +0 -0
  115. package/dist/web/public/entrance-animations.js.gz +0 -0
  116. package/dist/web/public/git-status-ui.js.gz +0 -0
  117. package/dist/web/public/header-divider.eb2d2463.js.gz +0 -0
  118. package/dist/web/public/home-sessions.js.gz +0 -0
  119. package/dist/web/public/host-wake-ui.js.gz +0 -0
  120. package/dist/web/public/i18n.33f930d7.js +2 -0
  121. package/dist/web/public/i18n.33f930d7.js.br +0 -0
  122. package/dist/web/public/i18n.33f930d7.js.gz +0 -0
  123. package/dist/web/public/image-input.a5d0f8f3.js.gz +0 -0
  124. package/dist/web/public/index.html +160 -14
  125. package/dist/web/public/index.html.br +0 -0
  126. package/dist/web/public/index.html.gz +0 -0
  127. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  128. package/dist/web/public/{keyboard-accessory.ff64fafc.js → keyboard-accessory.d4ec5957.js} +72 -1
  129. package/dist/web/public/keyboard-accessory.d4ec5957.js.br +0 -0
  130. package/dist/web/public/keyboard-accessory.d4ec5957.js.gz +0 -0
  131. package/dist/web/public/mobile-handlers.f7c3f692.js.gz +0 -0
  132. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  133. package/dist/web/public/mobile-overview.js.gz +0 -0
  134. package/dist/web/public/mobile.5ef2ce85.css +1 -0
  135. package/dist/web/public/mobile.5ef2ce85.css.br +0 -0
  136. package/dist/web/public/mobile.5ef2ce85.css.gz +0 -0
  137. package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
  138. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  139. package/dist/web/public/{panels-ui.4a56ee63.js → panels-ui.b100727d.js} +2 -2
  140. package/dist/web/public/panels-ui.b100727d.js.br +0 -0
  141. package/dist/web/public/{panels-ui.4a56ee63.js.gz → panels-ui.b100727d.js.gz} +0 -0
  142. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  143. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  144. package/dist/web/public/readmymind-ui.js.gz +0 -0
  145. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  146. package/dist/web/public/{respawn-ui.d7adcf6a.js → respawn-ui.304ba0d4.js} +1 -1
  147. package/dist/web/public/respawn-ui.304ba0d4.js.br +0 -0
  148. package/dist/web/public/respawn-ui.304ba0d4.js.gz +0 -0
  149. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  150. package/dist/web/public/security-notices.json +1 -21
  151. package/dist/web/public/session-lineage.js.gz +0 -0
  152. package/dist/web/public/{session-ui.426fb671.js → session-ui.5ac82f2c.js} +30 -30
  153. package/dist/web/public/session-ui.5ac82f2c.js.br +0 -0
  154. package/dist/web/public/session-ui.5ac82f2c.js.gz +0 -0
  155. package/dist/web/public/settings-ui.d1d4fb99.js +106 -0
  156. package/dist/web/public/settings-ui.d1d4fb99.js.br +0 -0
  157. package/dist/web/public/settings-ui.d1d4fb99.js.gz +0 -0
  158. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  159. package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
  160. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  161. package/dist/web/public/styles.77dc538f.css +1 -0
  162. package/dist/web/public/styles.77dc538f.css.br +0 -0
  163. package/dist/web/public/styles.77dc538f.css.gz +0 -0
  164. package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
  165. package/dist/web/public/sw.js +2 -2
  166. package/dist/web/public/sw.js.br +0 -0
  167. package/dist/web/public/sw.js.gz +0 -0
  168. package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
  169. package/dist/web/public/tab-rail-resize.b5cdceaf.js.gz +0 -0
  170. package/dist/web/public/terminal-keycode229-recovery.98843069.js.gz +0 -0
  171. package/dist/web/public/terminal-split.js.gz +0 -0
  172. package/dist/web/public/terminal-tile.js.gz +0 -0
  173. package/dist/web/public/{terminal-ui.7e787829.js → terminal-ui.d7c75ce8.js} +3 -3
  174. package/dist/web/public/terminal-ui.d7c75ce8.js.br +0 -0
  175. package/dist/web/public/terminal-ui.d7c75ce8.js.gz +0 -0
  176. package/dist/web/public/tile-grid.js.gz +0 -0
  177. package/dist/web/public/ultracode-panel.js.gz +0 -0
  178. package/dist/web/public/ultracode-windows.js.gz +0 -0
  179. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  180. package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
  181. package/dist/web/public/vendor/fflate.min.js.gz +0 -0
  182. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  183. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  184. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  185. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  186. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  187. package/dist/web/public/vendor/xterm-predictive-echo.276b11d9.js.gz +0 -0
  188. package/dist/web/public/vendor/xterm-zerolag-input.1be42307.js.gz +0 -0
  189. package/dist/web/public/vendor/xterm.css.gz +0 -0
  190. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  191. package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
  192. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  193. package/dist/web/public/webview-tabs.js.gz +0 -0
  194. package/dist/web/public/whats-new.json +9 -8
  195. package/dist/web/routes/case-routes.d.ts.map +1 -1
  196. package/dist/web/routes/case-routes.js +104 -8
  197. package/dist/web/routes/case-routes.js.map +1 -1
  198. package/dist/web/routes/config-backup-routes.d.ts +5 -1
  199. package/dist/web/routes/config-backup-routes.d.ts.map +1 -1
  200. package/dist/web/routes/config-backup-routes.js +4 -1
  201. package/dist/web/routes/config-backup-routes.js.map +1 -1
  202. package/dist/web/routes/custom-model-routes.d.ts +7 -2
  203. package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
  204. package/dist/web/routes/custom-model-routes.js +51 -6
  205. package/dist/web/routes/custom-model-routes.js.map +1 -1
  206. package/dist/web/routes/discord-routes.d.ts +25 -0
  207. package/dist/web/routes/discord-routes.d.ts.map +1 -0
  208. package/dist/web/routes/discord-routes.js +206 -0
  209. package/dist/web/routes/discord-routes.js.map +1 -0
  210. package/dist/web/routes/edit-history-routes.d.ts +43 -0
  211. package/dist/web/routes/edit-history-routes.d.ts.map +1 -0
  212. package/dist/web/routes/edit-history-routes.js +106 -0
  213. package/dist/web/routes/edit-history-routes.js.map +1 -0
  214. package/dist/web/routes/file-routes.d.ts.map +1 -1
  215. package/dist/web/routes/file-routes.js +62 -2
  216. package/dist/web/routes/file-routes.js.map +1 -1
  217. package/dist/web/routes/index.d.ts +2 -0
  218. package/dist/web/routes/index.d.ts.map +1 -1
  219. package/dist/web/routes/index.js +2 -0
  220. package/dist/web/routes/index.js.map +1 -1
  221. package/dist/web/routes/session-routes.d.ts +17 -0
  222. package/dist/web/routes/session-routes.d.ts.map +1 -1
  223. package/dist/web/routes/session-routes.js +87 -37
  224. package/dist/web/routes/session-routes.js.map +1 -1
  225. package/dist/web/routes/system-routes.d.ts.map +1 -1
  226. package/dist/web/routes/system-routes.js +1 -0
  227. package/dist/web/routes/system-routes.js.map +1 -1
  228. package/dist/web/schemas.d.ts +68 -1
  229. package/dist/web/schemas.d.ts.map +1 -1
  230. package/dist/web/schemas.js +77 -1
  231. package/dist/web/schemas.js.map +1 -1
  232. package/dist/web/sensitive-path.d.ts.map +1 -1
  233. package/dist/web/sensitive-path.js +15 -0
  234. package/dist/web/sensitive-path.js.map +1 -1
  235. package/dist/web/server.d.ts +43 -0
  236. package/dist/web/server.d.ts.map +1 -1
  237. package/dist/web/server.js +219 -11
  238. package/dist/web/server.js.map +1 -1
  239. package/package.json +1 -1
  240. package/dist/web/public/app.fe8a6b4c.js.br +0 -0
  241. package/dist/web/public/app.fe8a6b4c.js.gz +0 -0
  242. package/dist/web/public/constants.affcdde6.js.br +0 -0
  243. package/dist/web/public/constants.affcdde6.js.gz +0 -0
  244. package/dist/web/public/i18n.a618ef4e.js +0 -2
  245. package/dist/web/public/i18n.a618ef4e.js.br +0 -0
  246. package/dist/web/public/i18n.a618ef4e.js.gz +0 -0
  247. package/dist/web/public/keyboard-accessory.ff64fafc.js.br +0 -0
  248. package/dist/web/public/keyboard-accessory.ff64fafc.js.gz +0 -0
  249. package/dist/web/public/mobile.1bbd2d67.css +0 -1
  250. package/dist/web/public/mobile.1bbd2d67.css.br +0 -0
  251. package/dist/web/public/mobile.1bbd2d67.css.gz +0 -0
  252. package/dist/web/public/panels-ui.4a56ee63.js.br +0 -0
  253. package/dist/web/public/respawn-ui.d7adcf6a.js.br +0 -0
  254. package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
  255. package/dist/web/public/session-ui.426fb671.js.br +0 -0
  256. package/dist/web/public/session-ui.426fb671.js.gz +0 -0
  257. package/dist/web/public/settings-ui.a191154e.js +0 -106
  258. package/dist/web/public/settings-ui.a191154e.js.br +0 -0
  259. package/dist/web/public/settings-ui.a191154e.js.gz +0 -0
  260. package/dist/web/public/styles.4f0c67a0.css +0 -1
  261. package/dist/web/public/styles.4f0c67a0.css.br +0 -0
  262. package/dist/web/public/styles.4f0c67a0.css.gz +0 -0
  263. package/dist/web/public/terminal-ui.7e787829.js.br +0 -0
  264. package/dist/web/public/terminal-ui.7e787829.js.gz +0 -0
@@ -9,9 +9,9 @@
9
9
  * see docs/custom-model-endpoints-plan.md and the "dynamic to support
10
10
  * cli-registry changes" requirement it was written against.
11
11
  */
12
- import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, symlinkSync } from 'node:fs';
12
+ import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, writeFileSync, rmSync, symlinkSync } from 'node:fs';
13
13
  import { homedir, platform } from 'node:os';
14
- import { join, dirname } from 'node:path';
14
+ import { join, dirname, isAbsolute } from 'node:path';
15
15
  import { dataPath } from './config/instance.js';
16
16
  import { buildCustomModelInjection, } from './custom-model-injection.js';
17
17
  /** Where a session's isolated `configDir`-kind files live: never the user's real CLI config path. */
@@ -22,24 +22,98 @@ export function customModelConfigDir(sessionId) {
22
22
  * Writes a `ConfigDirInjection`'s files under `baseDir` and returns the full
23
23
  * envOverrides object a caller should merge into the session/process env
24
24
  * (the dir-redirect var plus any `extraEnv` the config file references by
25
- * name). Never touches anything outside `baseDir` — the caller is
26
- * responsible for choosing an isolated directory (never the user's real
27
- * `~/.codex`, `~/.pi`, etc.).
25
+ * name). The generated files stay under `baseDir`, but a recipe that declares
26
+ * `linkFromRealHome` additionally links (and, for missing directory targets,
27
+ * creates) entries in the CLI's REAL home: the caller is still responsible
28
+ * for choosing an isolated `baseDir` (never the user's real `~/.codex`,
29
+ * `~/.pi`, etc.), it is just no longer the only directory touched.
28
30
  *
29
31
  * pi and omp embed the API key literally in the file, so the tree is written
30
32
  * 0700/0600 like every other secret-bearing file under `~/.codeman`; the chmod
31
33
  * covers a re-apply onto a file that already exists (`mode` only applies at
32
34
  * creation).
33
35
  */
34
- export function applyConfigDirInjection(baseDir, injection) {
36
+ export function applyConfigDirInjection(baseDir, injection,
37
+ /**
38
+ * The value this SESSION's own env overrides set for `injection.dirEnvVar`, when it
39
+ * set one: a user who relocated the CLI's real home (an allowlisted key like
40
+ * DSH_HOME) must have their state linked from THAT directory, not the server's.
41
+ */
42
+ sessionHomeOverride) {
35
43
  for (const file of injection.files) {
36
44
  const filePath = join(baseDir, file.relPath);
37
45
  mkdirSync(dirname(filePath), { recursive: true, mode: 0o700 });
38
46
  writeFileSync(filePath, file.content, { encoding: 'utf8', mode: 0o600 });
39
47
  chmodSync(filePath, 0o600);
40
48
  }
49
+ linkRealHomeEntries(baseDir, injection, sessionHomeOverride);
41
50
  return { [injection.dirEnvVar]: baseDir, ...injection.extraEnv };
42
51
  }
52
+ /**
53
+ * Symlinks the registry recipe's `linkFromRealHome` entries out of the CLI's real home
54
+ * into the otherwise-isolated `baseDir`, so redirecting `dirEnvVar` moves only the
55
+ * generated config file and not the state that has to survive the session (deepseek:
56
+ * the `sessions` transcript root `removeConfigDir` would otherwise delete, the `profiles`
57
+ * bundles the patch composes over, and `settings.yaml`). Declared per entry in stock.ts:
58
+ * this consumer is recipe-driven and names no CLI itself.
59
+ *
60
+ * Home resolution: the session's own override first (unless it IS `baseDir`, a re-apply
61
+ * onto a session already holding a previous injection's value must not self-link), then
62
+ * the server's environment, then the recipe's `realHomeFallback`. Only ABSOLUTE values
63
+ * are considered: a set-but-relative `DSH_HOME`-style home resolves against the CLI's
64
+ * cwd, and joining it here would mkdir/symlink under the SERVER's working directory and
65
+ * leave relative links that dangle. No home resolvable =
66
+ * no links, same best-effort posture as `linkSharedProjectsDir()`.
67
+ */
68
+ function linkRealHomeEntries(baseDir, injection, sessionHomeOverride) {
69
+ const names = injection.linkFromRealHome;
70
+ if (!names || names.length === 0)
71
+ return;
72
+ const absoluteOnly = (value) => value && isAbsolute(value) ? value : undefined;
73
+ const fromSession = sessionHomeOverride?.trim();
74
+ const realHome = absoluteOnly(fromSession && fromSession !== baseDir ? fromSession : undefined) ||
75
+ absoluteOnly(process.env[injection.dirEnvVar]?.trim()) ||
76
+ (injection.realHomeFallback ? join(homedir(), injection.realHomeFallback) : undefined);
77
+ if (!realHome)
78
+ return;
79
+ const dirs = new Set(injection.linkFromRealHomeDirs ?? []);
80
+ for (const name of names) {
81
+ linkRealHomeEntry(join(realHome, name), join(baseDir, name), dirs.has(name));
82
+ }
83
+ }
84
+ function linkRealHomeEntry(target, link, isDir) {
85
+ // lstat, never existsSync: existsSync is false for a DANGLING link, and recovery
86
+ // re-applies on every restart, so the second pass would try to recreate the link and
87
+ // throw EEXIST. lstat answers for real entries, good links and dangling links alike.
88
+ try {
89
+ if (lstatSync(link))
90
+ return; // already linked (idempotent re-apply) or a real dir wrote one
91
+ }
92
+ catch {
93
+ // ENOENT: nothing is here yet, the only state in which a link gets created
94
+ }
95
+ if (!existsSync(target)) {
96
+ if (!isDir)
97
+ return; // missing FILE target: skip, never plant a dangling file link
98
+ // Missing DIRECTORY target: a dangling directory link is not inert, since the CLI's own
99
+ // recursive mkdir THROUGH it fails ENOENT on every turn (dsh writing under
100
+ // `$DSH_HOME/sessions` on a fresh/relocated home). Create it first, 0700, exactly
101
+ // what dsh itself does on a first turn.
102
+ try {
103
+ mkdirSync(target, { recursive: true, mode: 0o700 });
104
+ }
105
+ catch {
106
+ return; // e.g. the target's parent refuses writes: no link rather than a dangling one
107
+ }
108
+ }
109
+ try {
110
+ symlinkSync(target, link, platform() === 'win32' ? 'junction' : 'dir');
111
+ }
112
+ catch {
113
+ // best-effort only: a platform that refuses symlinks keeps the documented
114
+ // side effect for this session rather than failing the whole apply over it
115
+ }
116
+ }
43
117
  /**
44
118
  * Real, shared Claude config directory Codeman's own host process runs under — honors
45
119
  * `CLAUDE_CONFIG_DIR` the same way `claude-credentials.ts`'s `claudeCredentialsPath()`
@@ -223,7 +297,13 @@ contextLength,
223
297
  * trust-dialog seed, and only when provided (boot recovery, which has no reason to
224
298
  * re-answer a dialog that already fired once, omits it rather than re-deriving it).
225
299
  */
226
- workingDir) {
300
+ workingDir,
301
+ /**
302
+ * Reads one env var from the SESSION's own env overrides (single-key on purpose: the
303
+ * map carries credentials). Only the `configDir` kind uses it, to resolve the CLI's real
304
+ * home for `linkFromRealHome` from the session's value before the server's.
305
+ */
306
+ sessionEnvLookup) {
227
307
  const injection = buildCustomModelInjection(entry, endpoint, modelId, contextLength);
228
308
  if (injection.kind === 'unsupported')
229
309
  return undefined;
@@ -257,7 +337,7 @@ workingDir) {
257
337
  };
258
338
  }
259
339
  const configDir = customModelConfigDir(sessionId);
260
- const envOverrides = applyConfigDirInjection(configDir, injection);
340
+ const envOverrides = applyConfigDirInjection(configDir, injection, sessionEnvLookup?.(injection.dirEnvVar));
261
341
  return { envOverrides, envKeys: Object.keys(envOverrides), configDir, launchModel: injection.launchModel };
262
342
  }
263
343
  //# sourceMappingURL=custom-model-injection-apply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-model-injection-apply.js","sourceRoot":"","sources":["../src/custom-model-injection-apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-model-injection-apply.js","sourceRoot":"","sources":["../src/custom-model-injection-apply.ts"],"names":[],"mappings":"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"}
@@ -89,6 +89,12 @@ export interface ConfigDirInjection {
89
89
  * `customModelInjection.launchModel` template, never hand-built per CLI.
90
90
  */
91
91
  launchModel?: string;
92
+ /** Carried from the registry recipe, see `cli-registry/types.ts` `linkFromRealHome`. */
93
+ linkFromRealHome?: string[];
94
+ /** Carried from the registry recipe, see `cli-registry/types.ts` `linkFromRealHomeDirs`. */
95
+ linkFromRealHomeDirs?: string[];
96
+ /** Carried from the registry recipe, see `cli-registry/types.ts` `realHomeFallback`. */
97
+ realHomeFallback?: string;
92
98
  }
93
99
  export interface UnsupportedInjection {
94
100
  kind: 'unsupported';
@@ -1 +1 @@
1
- {"version":3,"file":"custom-model-injection.d.ts","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,0BAA0B,CAAA;KAAE,CAAC;IACzE,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAIlG,yHAAyH;AACzH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EACrC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM;AACf,uFAAuF;AACvF,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CAsC5B;AAmCD;6FAC6F;AAC7F,eAAO,MAAM,sBAAsB,mBAAmB,CAAC"}
1
+ {"version":3,"file":"custom-model-injection.d.ts","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,0BAA0B,CAAA;KAAE,CAAC;IACzE,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAIlG,yHAAyH;AACzH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EACrC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM;AACf,uFAAuF;AACvF,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CA8C5B;AAkED;6FAC6F;AAC7F,eAAO,MAAM,sBAAsB,mBAAmB,CAAC"}
@@ -69,12 +69,20 @@ contextLength) {
69
69
  return result;
70
70
  }
71
71
  case 'configContentEnv': {
72
- const content = renderConfigContent(cap.template, endpoint, modelId, apiKey);
72
+ const content = renderConfigContent(cap.template, endpoint, modelId, apiKey, contextLength);
73
73
  return withLaunchModel({ kind: 'env', envOverrides: { [cap.envVar]: content } }, cap.launchModel, modelId);
74
74
  }
75
75
  case 'configDir': {
76
- const { content, extraEnv } = renderConfigFile(cap.template, endpoint, modelId, apiKey);
77
- return withLaunchModel({ kind: 'configDir', dirEnvVar: cap.dirEnvVar, files: [{ relPath: cap.fileName, content }], extraEnv }, cap.launchModel, modelId);
76
+ const { content, extraEnv } = renderConfigFile(cap.template, endpoint, modelId, apiKey, contextLength);
77
+ return withLaunchModel({
78
+ kind: 'configDir',
79
+ dirEnvVar: cap.dirEnvVar,
80
+ files: [{ relPath: cap.fileName, content }],
81
+ extraEnv,
82
+ ...(cap.linkFromRealHome ? { linkFromRealHome: cap.linkFromRealHome } : {}),
83
+ ...(cap.linkFromRealHomeDirs ? { linkFromRealHomeDirs: cap.linkFromRealHomeDirs } : {}),
84
+ ...(cap.realHomeFallback ? { realHomeFallback: cap.realHomeFallback } : {}),
85
+ }, cap.launchModel, modelId);
78
86
  }
79
87
  case 'unsupported':
80
88
  return { kind: 'unsupported' };
@@ -86,28 +94,96 @@ function withLaunchModel(result, template, modelId) {
86
94
  return result;
87
95
  return { ...result, launchModel: template.split('{modelId}').join(modelId) };
88
96
  }
89
- function renderConfigContent(template, endpoint, modelId, apiKey) {
97
+ /**
98
+ * One quarter of the window is held back for the reply, capped at 8192 tokens (a small local
99
+ * model's window must not lose a disproportionate slice to the reservation). Returns undefined
100
+ * for an unknown or non-finite size: opencode then keeps its own default guess, which is the
101
+ * pre-fix behaviour; never invent a limit here.
102
+ */
103
+ function opencodeModelLimit(contextLength) {
104
+ if (contextLength === undefined || !Number.isFinite(contextLength))
105
+ return undefined;
106
+ const total = Math.trunc(contextLength);
107
+ if (total <= 0)
108
+ return undefined;
109
+ const output = Math.max(1, Math.min(8192, Math.floor(total / 4)));
110
+ // `limit.context` is the FULL window as far as opencode is concerned: it reserves for
111
+ // the reply itself, so the discovered total is passed through, never a shrunk figure.
112
+ return { context: total, output };
113
+ }
114
+ function renderConfigContent(template, endpoint, modelId, apiKey, contextLength) {
90
115
  switch (template) {
91
- case 'opencode-json':
116
+ case 'opencode-json': {
117
+ // `limit` carries the discovered context window (issue #749): without it opencode assumes
118
+ // a large default window for an unrecognized model id and eventually overflows a much
119
+ // smaller local server. `context` is the FULL window and opencode reserves for the reply
120
+ // inside it itself, so `opencodeModelLimit` passes the real total through and only
121
+ // `output` gets the capped reservation.
122
+ const limit = opencodeModelLimit(contextLength);
92
123
  return JSON.stringify({
93
124
  $schema: 'https://opencode.ai/config.json',
94
125
  provider: {
95
126
  custom: {
96
127
  options: { baseURL: withV1Suffix(endpoint.baseUrl), apiKey },
97
- models: { [modelId]: {} },
128
+ models: { [modelId]: limit ? { limit } : {} },
98
129
  },
99
130
  },
100
131
  model: `custom/${modelId}`,
101
132
  });
133
+ }
102
134
  }
103
135
  }
104
- const CODEX_API_KEY_ENV_VAR = 'CODEMAN_CUSTOM_MODEL_API_KEY';
136
+ /** The DEDICATED env var carrying a custom endpoint's API key for config-file recipes that
137
+ * reference keys by name (codex's `env_key`, deepseek's `apiKeyEnv`). Never a CLI-native
138
+ * name: dsh's own `llm-deepseek`/`web-search-deepseek` rows read `DEEPSEEK_API_KEY` too,
139
+ * so an in-session `/model` switch back to `deepseek-official` (or a profile with web
140
+ * search on) would otherwise send the custom endpoint's key to api.deepseek.com. Both
141
+ * entries list it in `privilegedEnvKeys` (stock.ts) like each other's redirect vars.
142
+ */
143
+ const CUSTOM_MODEL_API_KEY_ENV_VAR = 'CODEMAN_CUSTOM_MODEL_API_KEY';
105
144
  /** The `[model.<name>]` block name grok's config.toml uses for the injected model — also
106
145
  * what `-m <name>` in the standalone script's ONE_SHOT argv must reference to select it. */
107
146
  export const GROK_CUSTOM_MODEL_NAME = 'codeman-custom';
108
- function renderConfigFile(template, endpoint, modelId, apiKey) {
147
+ function renderConfigFile(template, endpoint, modelId, apiKey, contextLength) {
109
148
  const baseUrl = withV1Suffix(endpoint.baseUrl);
110
149
  switch (template) {
150
+ case 'deepseek-patch-json': {
151
+ const route = { provider: 'codeman-custom', model: modelId };
152
+ return {
153
+ content: JSON.stringify([
154
+ {
155
+ id: 'llm-pi-ai',
156
+ name: '@deepseek-ai/dsh-llm-pi-ai',
157
+ config: {
158
+ providers: {
159
+ 'codeman-custom': {
160
+ // By NAME only (never the literal key, see CUSTOM_MODEL_API_KEY_ENV_VAR).
161
+ apiKeyEnv: CUSTOM_MODEL_API_KEY_ENV_VAR,
162
+ api: 'openai-completions',
163
+ baseURL: baseUrl,
164
+ models: [
165
+ {
166
+ id: modelId,
167
+ name: modelId,
168
+ ...(contextLength !== undefined && Number.isFinite(contextLength) && contextLength > 0
169
+ ? {
170
+ contextWindow: Math.trunc(contextLength),
171
+ // A quarter of the window keeps the reply inside the prompt's share; 8192 caps it on a large window.
172
+ maxTokens: Math.max(1, Math.min(8192, Math.floor(contextLength / 4))),
173
+ }
174
+ : {}),
175
+ },
176
+ ],
177
+ },
178
+ },
179
+ },
180
+ },
181
+ { id: 'dsh-tui', name: '@deepseek-harness-tui/dsh-tui', config: route },
182
+ { id: 'agent-default-model', name: '@deepseek-ai/dsh-agent-default-model', config: route },
183
+ ], null, 2),
184
+ extraEnv: { [CUSTOM_MODEL_API_KEY_ENV_VAR]: apiKey },
185
+ };
186
+ }
111
187
  case 'codex-toml': {
112
188
  // Verified against real codex (>= Feb 2026): `model` is a top-level STRING, never
113
189
  // a `[model].default` table — codex rejects that with "invalid type: map, expected
@@ -126,15 +202,21 @@ function renderConfigFile(template, endpoint, modelId, apiKey) {
126
202
  const content = [
127
203
  `model = ${quoted(modelId)}`,
128
204
  `model_provider = "custom"`,
205
+ ...(contextLength !== undefined && Number.isFinite(contextLength) && contextLength > 0
206
+ ? [
207
+ `model_context_window = ${Math.trunc(contextLength)}`,
208
+ `model_auto_compact_token_limit = ${Math.max(1, Math.floor(contextLength * 0.75))}`,
209
+ ]
210
+ : []),
129
211
  '',
130
212
  '[model_providers.custom]',
131
213
  `name = "Custom Endpoint"`,
132
214
  `base_url = ${quoted(baseUrl)}`,
133
- `env_key = ${quoted(CODEX_API_KEY_ENV_VAR)}`,
215
+ `env_key = ${quoted(CUSTOM_MODEL_API_KEY_ENV_VAR)}`,
134
216
  `wire_api = "responses"`,
135
217
  '',
136
218
  ].join('\n');
137
- return { content, extraEnv: { [CODEX_API_KEY_ENV_VAR]: apiKey } };
219
+ return { content, extraEnv: { [CUSTOM_MODEL_API_KEY_ENV_VAR]: apiKey } };
138
220
  }
139
221
  case 'pi-models-json':
140
222
  // Verified against pi's OWN bundled docs (models.md): `models` is an ARRAY of
@@ -1 +1 @@
1
- {"version":3,"file":"custom-model-injection.js","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-model-injection.js","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"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"}