aicodeman 1.43.0 → 1.44.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 (304) hide show
  1. package/README.md +3 -2
  2. package/dist/cli-agent.d.ts +3 -3
  3. package/dist/cli-agent.d.ts.map +1 -1
  4. package/dist/cli-agent.js +8 -6
  5. package/dist/cli-agent.js.map +1 -1
  6. package/dist/config/cli-registry/stock.d.ts.map +1 -1
  7. package/dist/config/cli-registry/stock.js +8 -3
  8. package/dist/config/cli-registry/stock.js.map +1 -1
  9. package/dist/config/cli-registry/types.d.ts +2 -2
  10. package/dist/config/map-limits.d.ts +13 -1
  11. package/dist/config/map-limits.d.ts.map +1 -1
  12. package/dist/config/map-limits.js +28 -1
  13. package/dist/config/map-limits.js.map +1 -1
  14. package/dist/config-backup.d.ts +279 -0
  15. package/dist/config-backup.d.ts.map +1 -0
  16. package/dist/config-backup.js +794 -0
  17. package/dist/config-backup.js.map +1 -0
  18. package/dist/cron/cron-service.d.ts +5 -5
  19. package/dist/cron/cron-service.js +6 -6
  20. package/dist/cron/cron-service.js.map +1 -1
  21. package/dist/custom-model-hosts.d.ts +16 -0
  22. package/dist/custom-model-hosts.d.ts.map +1 -1
  23. package/dist/custom-model-hosts.js.map +1 -1
  24. package/dist/hooks-config.d.ts +15 -0
  25. package/dist/hooks-config.d.ts.map +1 -1
  26. package/dist/hooks-config.js +35 -0
  27. package/dist/hooks-config.js.map +1 -1
  28. package/dist/intent-store.d.ts +2 -0
  29. package/dist/intent-store.d.ts.map +1 -1
  30. package/dist/intent-store.js +9 -0
  31. package/dist/intent-store.js.map +1 -1
  32. package/dist/mux-interface.d.ts +21 -4
  33. package/dist/mux-interface.d.ts.map +1 -1
  34. package/dist/prompt-cache-keepwarm.d.ts +193 -0
  35. package/dist/prompt-cache-keepwarm.d.ts.map +1 -0
  36. package/dist/prompt-cache-keepwarm.js +359 -0
  37. package/dist/prompt-cache-keepwarm.js.map +1 -0
  38. package/dist/respawn-controller.d.ts.map +1 -1
  39. package/dist/respawn-controller.js +6 -5
  40. package/dist/respawn-controller.js.map +1 -1
  41. package/dist/session-auto-ops.d.ts.map +1 -1
  42. package/dist/session-auto-ops.js +6 -1
  43. package/dist/session-auto-ops.js.map +1 -1
  44. package/dist/session-cli-registry-bridge.d.ts +13 -0
  45. package/dist/session-cli-registry-bridge.d.ts.map +1 -1
  46. package/dist/session-cli-registry-bridge.js +20 -3
  47. package/dist/session-cli-registry-bridge.js.map +1 -1
  48. package/dist/session-submit-verifier.d.ts +19 -0
  49. package/dist/session-submit-verifier.d.ts.map +1 -1
  50. package/dist/session-submit-verifier.js +88 -0
  51. package/dist/session-submit-verifier.js.map +1 -1
  52. package/dist/session.d.ts +61 -5
  53. package/dist/session.d.ts.map +1 -1
  54. package/dist/session.js +112 -7
  55. package/dist/session.js.map +1 -1
  56. package/dist/state-store.d.ts +10 -0
  57. package/dist/state-store.d.ts.map +1 -1
  58. package/dist/state-store.js +35 -0
  59. package/dist/state-store.js.map +1 -1
  60. package/dist/tab-layout-service.d.ts +33 -0
  61. package/dist/tab-layout-service.d.ts.map +1 -1
  62. package/dist/tab-layout-service.js +75 -3
  63. package/dist/tab-layout-service.js.map +1 -1
  64. package/dist/tmux-manager.d.ts +50 -8
  65. package/dist/tmux-manager.d.ts.map +1 -1
  66. package/dist/tmux-manager.js +146 -30
  67. package/dist/tmux-manager.js.map +1 -1
  68. package/dist/tmux-prefix-table.d.ts +54 -0
  69. package/dist/tmux-prefix-table.d.ts.map +1 -0
  70. package/dist/tmux-prefix-table.js +137 -0
  71. package/dist/tmux-prefix-table.js.map +1 -0
  72. package/dist/tui/tui-app.d.ts +9 -1
  73. package/dist/tui/tui-app.d.ts.map +1 -1
  74. package/dist/tui/tui-app.js +21 -8
  75. package/dist/tui/tui-app.js.map +1 -1
  76. package/dist/tui/tui-client.d.ts +3 -2
  77. package/dist/tui/tui-client.d.ts.map +1 -1
  78. package/dist/tui/tui-client.js +3 -2
  79. package/dist/tui/tui-client.js.map +1 -1
  80. package/dist/types/app-state.d.ts +6 -0
  81. package/dist/types/app-state.d.ts.map +1 -1
  82. package/dist/types/app-state.js.map +1 -1
  83. package/dist/types/session.d.ts +40 -1
  84. package/dist/types/session.d.ts.map +1 -1
  85. package/dist/types/session.js.map +1 -1
  86. package/dist/usage-telemetry.d.ts +15 -0
  87. package/dist/usage-telemetry.d.ts.map +1 -1
  88. package/dist/usage-telemetry.js +45 -2
  89. package/dist/usage-telemetry.js.map +1 -1
  90. package/dist/utils/copilot-plan-usage.d.ts +46 -0
  91. package/dist/utils/copilot-plan-usage.d.ts.map +1 -0
  92. package/dist/utils/copilot-plan-usage.js +95 -0
  93. package/dist/utils/copilot-plan-usage.js.map +1 -0
  94. package/dist/utils/index.d.ts +2 -0
  95. package/dist/utils/index.d.ts.map +1 -1
  96. package/dist/utils/index.js +2 -0
  97. package/dist/utils/index.js.map +1 -1
  98. package/dist/utils/single-line.d.ts +22 -0
  99. package/dist/utils/single-line.d.ts.map +1 -0
  100. package/dist/utils/single-line.js +30 -0
  101. package/dist/utils/single-line.js.map +1 -0
  102. package/dist/web/approval-inbox.d.ts +6 -0
  103. package/dist/web/approval-inbox.d.ts.map +1 -1
  104. package/dist/web/approval-inbox.js +2 -2
  105. package/dist/web/approval-inbox.js.map +1 -1
  106. package/dist/web/plan-usage-latest.d.ts +2 -1
  107. package/dist/web/plan-usage-latest.d.ts.map +1 -1
  108. package/dist/web/plan-usage-latest.js +12 -2
  109. package/dist/web/plan-usage-latest.js.map +1 -1
  110. package/dist/web/ports/index.d.ts +1 -0
  111. package/dist/web/ports/index.d.ts.map +1 -1
  112. package/dist/web/ports/keep-warm-port.d.ts +9 -0
  113. package/dist/web/ports/keep-warm-port.d.ts.map +1 -0
  114. package/dist/web/ports/keep-warm-port.js +6 -0
  115. package/dist/web/ports/keep-warm-port.js.map +1 -0
  116. package/dist/web/ports/session-port.d.ts +3 -1
  117. package/dist/web/ports/session-port.d.ts.map +1 -1
  118. package/dist/web/public/admin-ui.js.gz +0 -0
  119. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  120. package/dist/web/public/app.9314ee60.js +43 -0
  121. package/dist/web/public/app.9314ee60.js.br +0 -0
  122. package/dist/web/public/app.9314ee60.js.gz +0 -0
  123. package/dist/web/public/approvals-ui.js.gz +0 -0
  124. package/dist/web/public/{constants.e5e588db.js → constants.4866ecc3.js} +49 -1
  125. package/dist/web/public/constants.4866ecc3.js.br +0 -0
  126. package/dist/web/public/constants.4866ecc3.js.gz +0 -0
  127. package/dist/web/public/cron-ui.js.gz +0 -0
  128. package/dist/web/public/entrance-animations.js.gz +0 -0
  129. package/dist/web/public/git-status-ui.js.gz +0 -0
  130. package/dist/web/public/home-sessions.js.gz +0 -0
  131. package/dist/web/public/host-wake-ui.js.gz +0 -0
  132. package/dist/web/public/i18n.22ca902b.js +2 -0
  133. package/dist/web/public/i18n.22ca902b.js.br +0 -0
  134. package/dist/web/public/i18n.22ca902b.js.gz +0 -0
  135. package/dist/web/public/image-input.941386e7.js.gz +0 -0
  136. package/dist/web/public/index.html +99 -14
  137. package/dist/web/public/index.html.br +0 -0
  138. package/dist/web/public/index.html.gz +0 -0
  139. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  140. package/dist/web/public/{keyboard-accessory.c283e827.js → keyboard-accessory.4e8b20ac.js} +23 -5
  141. package/dist/web/public/keyboard-accessory.4e8b20ac.js.br +0 -0
  142. package/dist/web/public/keyboard-accessory.4e8b20ac.js.gz +0 -0
  143. package/dist/web/public/{mobile-handlers.0ef9c311.js → mobile-handlers.44adaa07.js} +48 -16
  144. package/dist/web/public/mobile-handlers.44adaa07.js.br +0 -0
  145. package/dist/web/public/mobile-handlers.44adaa07.js.gz +0 -0
  146. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  147. package/dist/web/public/mobile-overview.js.gz +0 -0
  148. package/dist/web/public/mobile.12fb18de.css +1 -0
  149. package/dist/web/public/mobile.12fb18de.css.br +0 -0
  150. package/dist/web/public/mobile.12fb18de.css.gz +0 -0
  151. package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
  152. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  153. package/dist/web/public/{panels-ui.b7bfb9da.js → panels-ui.cbb24ba1.js} +65 -65
  154. package/dist/web/public/panels-ui.cbb24ba1.js.br +0 -0
  155. package/dist/web/public/panels-ui.cbb24ba1.js.gz +0 -0
  156. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  157. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  158. package/dist/web/public/readmymind-ui.js.gz +0 -0
  159. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  160. package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
  161. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  162. package/dist/web/public/session-lineage.js.gz +0 -0
  163. package/dist/web/public/{session-ui.be076c88.js → session-ui.9c1f009b.js} +7 -3
  164. package/dist/web/public/session-ui.9c1f009b.js.br +0 -0
  165. package/dist/web/public/session-ui.9c1f009b.js.gz +0 -0
  166. package/dist/web/public/settings-ui.fea9ddae.js +106 -0
  167. package/dist/web/public/settings-ui.fea9ddae.js.br +0 -0
  168. package/dist/web/public/settings-ui.fea9ddae.js.gz +0 -0
  169. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  170. package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
  171. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  172. package/dist/web/public/styles.e096fcd6.css +1 -0
  173. package/dist/web/public/styles.e096fcd6.css.br +0 -0
  174. package/dist/web/public/styles.e096fcd6.css.gz +0 -0
  175. package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
  176. package/dist/web/public/sw.js +2 -2
  177. package/dist/web/public/sw.js.br +0 -0
  178. package/dist/web/public/sw.js.gz +0 -0
  179. package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
  180. package/dist/web/public/tab-rail-resize.7157e0bd.js.gz +0 -0
  181. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
  182. package/dist/web/public/terminal-split.js.gz +0 -0
  183. package/dist/web/public/terminal-tile.js +41 -22
  184. package/dist/web/public/terminal-tile.js.br +0 -0
  185. package/dist/web/public/terminal-tile.js.gz +0 -0
  186. package/dist/web/public/terminal-ui.68dbd352.js +2 -0
  187. package/dist/web/public/terminal-ui.68dbd352.js.br +0 -0
  188. package/dist/web/public/terminal-ui.68dbd352.js.gz +0 -0
  189. package/dist/web/public/tile-grid.js.gz +0 -0
  190. package/dist/web/public/ultracode-panel.js.gz +0 -0
  191. package/dist/web/public/ultracode-windows.js.gz +0 -0
  192. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  193. package/dist/web/public/vendor/exceljs.min.js.gz +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.0b69623c.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.2342c37b.js.gz +0 -0
  205. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  206. package/dist/web/public/webview-tabs.js.gz +0 -0
  207. package/dist/web/public/whats-new.json +9 -9
  208. package/dist/web/routes/admin-routes.d.ts +2 -1
  209. package/dist/web/routes/admin-routes.d.ts.map +1 -1
  210. package/dist/web/routes/admin-routes.js +3 -0
  211. package/dist/web/routes/admin-routes.js.map +1 -1
  212. package/dist/web/routes/case-routes.d.ts +2 -2
  213. package/dist/web/routes/case-routes.d.ts.map +1 -1
  214. package/dist/web/routes/case-routes.js +81 -3
  215. package/dist/web/routes/case-routes.js.map +1 -1
  216. package/dist/web/routes/config-backup-routes.d.ts +54 -0
  217. package/dist/web/routes/config-backup-routes.d.ts.map +1 -0
  218. package/dist/web/routes/config-backup-routes.js +268 -0
  219. package/dist/web/routes/config-backup-routes.js.map +1 -0
  220. package/dist/web/routes/custom-model-routes.d.ts +17 -1
  221. package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
  222. package/dist/web/routes/custom-model-routes.js +118 -13
  223. package/dist/web/routes/custom-model-routes.js.map +1 -1
  224. package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
  225. package/dist/web/routes/hook-event-routes.js +26 -5
  226. package/dist/web/routes/hook-event-routes.js.map +1 -1
  227. package/dist/web/routes/index.d.ts +1 -0
  228. package/dist/web/routes/index.d.ts.map +1 -1
  229. package/dist/web/routes/index.js +1 -0
  230. package/dist/web/routes/index.js.map +1 -1
  231. package/dist/web/routes/ralph-routes.js +2 -2
  232. package/dist/web/routes/ralph-routes.js.map +1 -1
  233. package/dist/web/routes/reboot-restore-routes.d.ts.map +1 -1
  234. package/dist/web/routes/reboot-restore-routes.js +2 -0
  235. package/dist/web/routes/reboot-restore-routes.js.map +1 -1
  236. package/dist/web/routes/session-routes.d.ts +2 -2
  237. package/dist/web/routes/session-routes.d.ts.map +1 -1
  238. package/dist/web/routes/session-routes.js +86 -15
  239. package/dist/web/routes/session-routes.js.map +1 -1
  240. package/dist/web/routes/status-telemetry-routes.d.ts +2 -2
  241. package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
  242. package/dist/web/routes/status-telemetry-routes.js +8 -4
  243. package/dist/web/routes/status-telemetry-routes.js.map +1 -1
  244. package/dist/web/routes/system-routes.d.ts +2 -2
  245. package/dist/web/routes/system-routes.d.ts.map +1 -1
  246. package/dist/web/routes/system-routes.js +7 -0
  247. package/dist/web/routes/system-routes.js.map +1 -1
  248. package/dist/web/routes/webview-routes.d.ts.map +1 -1
  249. package/dist/web/routes/webview-routes.js +1 -0
  250. package/dist/web/routes/webview-routes.js.map +1 -1
  251. package/dist/web/schemas.d.ts +19 -0
  252. package/dist/web/schemas.d.ts.map +1 -1
  253. package/dist/web/schemas.js +31 -2
  254. package/dist/web/schemas.js.map +1 -1
  255. package/dist/web/server.d.ts +12 -2
  256. package/dist/web/server.d.ts.map +1 -1
  257. package/dist/web/server.js +116 -5
  258. package/dist/web/server.js.map +1 -1
  259. package/dist/web/session-listener-wiring.d.ts +6 -0
  260. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  261. package/dist/web/session-listener-wiring.js +10 -3
  262. package/dist/web/session-listener-wiring.js.map +1 -1
  263. package/dist/web/sse-events.d.ts +5 -2
  264. package/dist/web/sse-events.d.ts.map +1 -1
  265. package/dist/web/sse-events.js +5 -2
  266. package/dist/web/sse-events.js.map +1 -1
  267. package/dist/web/webview-proxy.d.ts +8 -3
  268. package/dist/web/webview-proxy.d.ts.map +1 -1
  269. package/dist/web/webview-proxy.js +23 -5
  270. package/dist/web/webview-proxy.js.map +1 -1
  271. package/package.json +1 -1
  272. package/skills/codeman/SKILL.md +20 -9
  273. package/skills/codeman/preamble.sh +12 -2
  274. package/skills/codeman/reference/endpoints.md +8 -7
  275. package/skills/codeman/reference/recipes.md +1 -1
  276. package/skills/codeman/reference/verbs.md +21 -13
  277. package/dist/web/public/app.ae50029a.js +0 -43
  278. package/dist/web/public/app.ae50029a.js.br +0 -0
  279. package/dist/web/public/app.ae50029a.js.gz +0 -0
  280. package/dist/web/public/constants.e5e588db.js.br +0 -0
  281. package/dist/web/public/constants.e5e588db.js.gz +0 -0
  282. package/dist/web/public/i18n.8f291f06.js +0 -2
  283. package/dist/web/public/i18n.8f291f06.js.br +0 -0
  284. package/dist/web/public/i18n.8f291f06.js.gz +0 -0
  285. package/dist/web/public/keyboard-accessory.c283e827.js.br +0 -0
  286. package/dist/web/public/keyboard-accessory.c283e827.js.gz +0 -0
  287. package/dist/web/public/mobile-handlers.0ef9c311.js.br +0 -0
  288. package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
  289. package/dist/web/public/mobile.13514863.css +0 -1
  290. package/dist/web/public/mobile.13514863.css.br +0 -0
  291. package/dist/web/public/mobile.13514863.css.gz +0 -0
  292. package/dist/web/public/panels-ui.b7bfb9da.js.br +0 -0
  293. package/dist/web/public/panels-ui.b7bfb9da.js.gz +0 -0
  294. package/dist/web/public/session-ui.be076c88.js.br +0 -0
  295. package/dist/web/public/session-ui.be076c88.js.gz +0 -0
  296. package/dist/web/public/settings-ui.fc4cc50a.js +0 -97
  297. package/dist/web/public/settings-ui.fc4cc50a.js.br +0 -0
  298. package/dist/web/public/settings-ui.fc4cc50a.js.gz +0 -0
  299. package/dist/web/public/styles.dcfa907f.css +0 -1
  300. package/dist/web/public/styles.dcfa907f.css.br +0 -0
  301. package/dist/web/public/styles.dcfa907f.css.gz +0 -0
  302. package/dist/web/public/terminal-ui.ae01a7d1.js +0 -2
  303. package/dist/web/public/terminal-ui.ae01a7d1.js.br +0 -0
  304. package/dist/web/public/terminal-ui.ae01a7d1.js.gz +0 -0
@@ -113,7 +113,7 @@ Every JSON response: `{"success":true,"data":…}` or
113
113
  | `UNAUTHORIZED` | 401 | auth required or failed (send `-u user:password`). ⚠️ The 401 body is plain text, NOT this envelope, see [Auth and credentials](#auth-and-credentials) |
114
114
  | `FORBIDDEN` | 403 | authenticated but not permitted: an admin-only route in multi-user mode, a `workingDir`/case path outside your own workspace, or a shell session without the can-bypass-permissions grant. ⚠️ **Not** what an ownership miss on a session returns: a session you do not own answers 404 `NOT_FOUND`, identically to one that does not exist (deliberate, it leaks no existence) |
115
115
  | `NOT_FOUND` | 404 | no such session, or one this caller does not own. Also quick-start's answer for an unknown remote or docker host |
116
- | `SESSION_BUSY` | 409 | on a **wait**: this session's waiter cap (16, combined signal+output) is full. On **quick-start**: a session cap is full, so clean up before starting more. Two different caps can raise it: the global 50 (`MAX_CONCURRENT_SESSIONS`), and in multi-user mode the per-user cap, which defaults to half of that, **25** (`maxSessionsPerUser()`, `config/multiuser.ts:59-63`). The message tells you which |
116
+ | `SESSION_BUSY` | 409 | on a **wait**: this session's waiter cap (16, combined signal+output) is full. On **quick-start**: a session cap is full, so clean up before starting more. Two different caps can raise it: the global cap, 50 by default (`MAX_CONCURRENT_SESSIONS`, env `CODEMAN_MAX_SESSIONS`, 1 to 462), and in multi-user mode the per-user cap, which defaults to half the global cap, **25** by default (`maxSessionsPerUser()`, `config/multiuser.ts:59-63`). The message tells you which |
117
117
  | `CONFLICT` / `ALREADY_EXISTS` | 409 | conflicts with current state |
118
118
  | `OPERATION_FAILED` | 422 | well-formed but could not be completed |
119
119
  | `RATE_LIMITED` | 429 | per-owner or process-wide waiter pool is full; back off, switching sessions will not help |
@@ -367,7 +367,7 @@ name is in front" rather than "nothing is installed". `shell` has no CLI to prob
367
367
  is absent, `jq -r` prints the literal string `null`, and every later call then targets
368
368
  `/api/v1/sessions/null`, burning the full readiness budget and reporting jq noise
369
369
  instead of the real cause. The failure codes here are `SESSION_BUSY` (a **session** cap:
370
- the global 50, or the per-user 25 in multi-user mode, never the waiter cap),
370
+ the global cap (50 by default), or the per-user cap (25 by default) in multi-user mode, never the waiter cap),
371
371
  `NOT_FOUND` (an unknown remote host or docker host named by the case), `FORBIDDEN`,
372
372
  `CONFLICT`, `OPERATION_FAILED` and `INVALID_INPUT`. None of them are retryable in a
373
373
  loop.
@@ -401,7 +401,7 @@ differences that break copied code:
401
401
  `POST /api/v1/sessions/:id/interactive` (claude and the other agent CLIs) or
402
402
  `POST /api/v1/sessions/:id/shell` (shell mode) to actually start the worker.
403
403
  - Its capacity failure is **`OPERATION_FAILED` (422)**, not quick-start's
404
- `SESSION_BUSY` (409), from the same global-50 / per-user-25 caps
404
+ `SESSION_BUSY` (409), from the same global / per-user caps (50 / 25 by default)
405
405
  (`sessionCapacityMessage()` in `route-helpers.ts`).
406
406
 
407
407
  ⚠️ `POST .../interactive` accepts `{"clearBreaker":true}`, which resets the **PTY-exit
@@ -420,8 +420,9 @@ callers send no body at all.
420
420
  **or Enter is never sent**: the text is typed onto the worker's prompt and sits
421
421
  there unsubmitted. This is [symptom 1](#1-deliveredtrue-then-every-wait-times-out),
422
422
  the number-one silent failure.
423
- - `input` must be single-line (newlines are stripped). To send a bare Enter (confirm
424
- a dialog), send `{"input":"\r"}`.
423
+ - With `useMux`, newlines in `input` are kept: the text goes in as one bracketed paste
424
+ and the `\r` submits all lines (without `useMux`, multi-line input is written straight
425
+ into the pane). To send a bare Enter (confirm a dialog), send `{"input":"\r"}`.
425
426
  - `input` is capped at **65536** characters. ⚠️ **Two caps disagree and the smaller one
426
427
  is the real one**: the Zod schema allows 100000 (`schemas.ts:1035`), so a 65537-to-100000
427
428
  character body passes validation and *then* 400s at the route against
@@ -796,8 +797,8 @@ response echoes.
796
797
  | `match` string | 1–200 characters, literal only | 400; `regex=` is rejected outright |
797
798
  | `from=buffer` scan window | 256 KB tail of the terminal buffer | a marker older than that tail is invisible even with `from=buffer` |
798
799
  | wait-output snippet context | 80 characters either side | `wait.snippet` is bounded, not the whole line |
799
- | sessions, process-wide | 50 (`MAX_CONCURRENT_SESSIONS`) | 409 `SESSION_BUSY` on quick-start |
800
- | sessions, per user | 25 in multi-user mode (half the global cap) | the same 409, with a different message |
800
+ | sessions, process-wide | 50 by default (`MAX_CONCURRENT_SESSIONS`, env `CODEMAN_MAX_SESSIONS`, 1 to 462) | 409 `SESSION_BUSY` on quick-start |
801
+ | sessions, per user | half the global cap (25 by default) in multi-user mode | the same 409, with a different message |
801
802
  | SSE clients, process-wide | 100 (`MAX_SSE_CLIENTS`) | plain-text `503 Too many SSE connections`; shared with every browser tab |
802
803
  | active bash tools tracked | 20 per session | oldest entries drop off `active-tools` |
803
804
  | auth failures per IP | 10, decaying over 15 min | plain-text 429 with `Retry-After`; locks out the login path, so never loop a bad credential |
@@ -21,7 +21,7 @@ by sourcing the preamble file the §0 bootstrap wrote, and checking its version
21
21
 
22
22
  ```bash
23
23
  . "${XDG_CACHE_HOME:-$HOME/.cache}/codeman-agent-$CODEMAN_SESSION_ID.sh" 2>/dev/null
24
- [ "${CODEMAN_PREAMBLE:-}" = 1.42.0 ] || { echo "preamble missing or stale; re-run the §0 bootstrap"; exit 1; }
24
+ [ "${CODEMAN_PREAMBLE:-}" = 1.44.0 ] || { echo "preamble missing or stale; re-run the §0 bootstrap"; exit 1; }
25
25
  ```
26
26
 
27
27
  Do **not** re-paste the preamble body into each call. Sourcing it is what retires the
@@ -101,8 +101,9 @@ Differences from `quick-start` worth knowing before you debug one:
101
101
  - hitting the session cap here is `OPERATION_FAILED`, where `quick-start` returns
102
102
  `SESSION_BUSY` for the identical condition.
103
103
 
104
- `quick-start` failure codes are `SESSION_BUSY` (the global 50-session cap, or the
105
- per-user cap of 25 in multi-user mode), `FORBIDDEN`, `CONFLICT`, `NOT_FOUND` (a
104
+ `quick-start` failure codes are `SESSION_BUSY` (the global session cap, 50 by default via
105
+ `CODEMAN_MAX_SESSIONS`, or the per-user cap in multi-user mode, half the global cap,
106
+ 25 by default), `FORBIDDEN`, `CONFLICT`, `NOT_FOUND` (a
106
107
  remote or docker host named by the case no longer exists), `OPERATION_FAILED` and
107
108
  `INVALID_INPUT`. **None of them are retryable in a loop.** Always branch on
108
109
  `.success` before reading `.data.sessionId`: on failure the field is absent, `jq -r`
@@ -303,10 +304,16 @@ duplicate resend costs nothing.
303
304
  Codeman types the text and sends Enter **only when the input contains a carriage
304
305
  return**; without it your command sits unsubmitted on the worker's prompt and
305
306
  everything downstream times out. No response field catches this: `delivered:true`
306
- means "written to the pane", **not** "submitted". Newlines are stripped, so input is
307
- single-line by construction. Build the body with `jq -n` for any prompt you did not
308
- author as a literal, because the inline `-d '{"input":"'"$P"'\r"}'` pattern breaks on
309
- the first double quote, backslash or `$` in a real prompt:
307
+ means "written to the pane", **not** "submitted". With `useMux`, newlines are kept: the
308
+ text goes in as one paste, and the `\r` submits all of it. **`sendwait` sends one line,
309
+ though:** its Enter loop and the server's submit check cannot reliably recognise a
310
+ multi-line paste, so a multi-line prompt to a freshly spawned worker could sit unsent in
311
+ Claude Code's Enter-ignore window. `sendwait` therefore joins the lines with a space,
312
+ which loses their layout; put long multi-line content in a file
313
+ ([§5.9](#59-big-input-via-the-workspace)). Build the body with `jq -n`
314
+ for any prompt you did not author as a literal, because the inline
315
+ `-d '{"input":"'"$P"'\r"}'` pattern breaks on the first double quote, backslash or `$`
316
+ in a real prompt:
310
317
 
311
318
  ```bash
312
319
  BODY=$(jq -n --arg p "$PROMPT" '{input:($p+"\r"),useMux:true,clientId:"agent-1",seq:1,wait:true,waitTimeout:60000}')
@@ -587,9 +594,10 @@ allowlist in §4.
587
594
 
588
595
  ### 5.9 Big input via the workspace
589
596
 
590
- The composer is a single line capped at 65536 characters with newlines stripped, which
591
- makes it a bad channel for a spec, a diff or a file list. The workspace is the good
592
- one, and for a local or docker case you are on the same filesystem as the worker.
597
+ The composer is capped at 65536 characters, and a multi-line paste cannot be confirmed
598
+ as submitted, which makes it a bad channel for a spec, a diff or a file list. The
599
+ workspace is the good one, and for a local or docker case you are on the same
600
+ filesystem as the worker.
593
601
 
594
602
  1. Write `TASK.md` into the worker's workspace with your own file tools. The path is
595
603
  `.data.casePath` from `quick-start`, or the `workingDir` you passed to
@@ -599,10 +607,10 @@ one, and for a local or docker case you are on the same filesystem as the worker
599
607
  3. Wait on `DONE_<token>` with `wait-output` ([§5.5](#55-markers-for-hook-less-workers)),
600
608
  then read `RESULT.json` back with your own tools.
601
609
 
602
- This sidesteps the byte cap, the newline stripping and the quoting hazards in one
603
- move, and it makes the marker **split by construction**: the token lives in the file,
604
- never in the line you type, so the echo of your own keystrokes cannot match it. The
605
- worker also gets to re-read the task instead of holding it in one echoed line.
610
+ This sidesteps the byte cap, the unconfirmed multi-line paste and the quoting hazards
611
+ in one move, and it makes the marker **split by construction**: the token lives in the
612
+ file, never in the line you type, so the echo of your own keystrokes cannot match it.
613
+ The worker also gets to re-read the task instead of holding it in one echoed line.
606
614
 
607
615
  ⚠️ Two places it does not work: a **remote-SSH case** runs on another host whose
608
616
  filesystem you cannot see, and any worker **currently editing** the directory you are