aicodeman 1.42.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 (350) hide show
  1. package/README.md +13 -12
  2. package/dist/claude-session-title.d.ts +6 -4
  3. package/dist/claude-session-title.d.ts.map +1 -1
  4. package/dist/claude-session-title.js +6 -4
  5. package/dist/claude-session-title.js.map +1 -1
  6. package/dist/cli-agent.d.ts +3 -3
  7. package/dist/cli-agent.d.ts.map +1 -1
  8. package/dist/cli-agent.js +8 -6
  9. package/dist/cli-agent.js.map +1 -1
  10. package/dist/config/cli-registry/patterns.d.ts +1 -1
  11. package/dist/config/cli-registry/patterns.d.ts.map +1 -1
  12. package/dist/config/cli-registry/patterns.js +3 -0
  13. package/dist/config/cli-registry/patterns.js.map +1 -1
  14. package/dist/config/cli-registry/schema.d.ts +1 -0
  15. package/dist/config/cli-registry/schema.d.ts.map +1 -1
  16. package/dist/config/cli-registry/schema.js +5 -3
  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 +263 -4
  20. package/dist/config/cli-registry/stock.js.map +1 -1
  21. package/dist/config/cli-registry/types.d.ts +13 -5
  22. package/dist/config/cli-registry/types.d.ts.map +1 -1
  23. package/dist/config/map-limits.d.ts +13 -1
  24. package/dist/config/map-limits.d.ts.map +1 -1
  25. package/dist/config/map-limits.js +28 -1
  26. package/dist/config/map-limits.js.map +1 -1
  27. package/dist/config-backup.d.ts +279 -0
  28. package/dist/config-backup.d.ts.map +1 -0
  29. package/dist/config-backup.js +794 -0
  30. package/dist/config-backup.js.map +1 -0
  31. package/dist/cron/cron-service.d.ts +5 -5
  32. package/dist/cron/cron-service.js +6 -6
  33. package/dist/cron/cron-service.js.map +1 -1
  34. package/dist/custom-model-hosts.d.ts +16 -0
  35. package/dist/custom-model-hosts.d.ts.map +1 -1
  36. package/dist/custom-model-hosts.js.map +1 -1
  37. package/dist/hooks-config.d.ts +24 -0
  38. package/dist/hooks-config.d.ts.map +1 -1
  39. package/dist/hooks-config.js +47 -0
  40. package/dist/hooks-config.js.map +1 -1
  41. package/dist/intent-store.d.ts +2 -0
  42. package/dist/intent-store.d.ts.map +1 -1
  43. package/dist/intent-store.js +9 -0
  44. package/dist/intent-store.js.map +1 -1
  45. package/dist/mcp-sync-targets.d.ts +6 -3
  46. package/dist/mcp-sync-targets.d.ts.map +1 -1
  47. package/dist/mcp-sync-targets.js +6 -3
  48. package/dist/mcp-sync-targets.js.map +1 -1
  49. package/dist/mux-interface.d.ts +28 -7
  50. package/dist/mux-interface.d.ts.map +1 -1
  51. package/dist/prompt-cache-keepwarm.d.ts +193 -0
  52. package/dist/prompt-cache-keepwarm.d.ts.map +1 -0
  53. package/dist/prompt-cache-keepwarm.js +359 -0
  54. package/dist/prompt-cache-keepwarm.js.map +1 -0
  55. package/dist/respawn-controller.d.ts.map +1 -1
  56. package/dist/respawn-controller.js +6 -5
  57. package/dist/respawn-controller.js.map +1 -1
  58. package/dist/session-auto-ops.d.ts.map +1 -1
  59. package/dist/session-auto-ops.js +6 -1
  60. package/dist/session-auto-ops.js.map +1 -1
  61. package/dist/session-cli-registry-bridge.d.ts +15 -1
  62. package/dist/session-cli-registry-bridge.d.ts.map +1 -1
  63. package/dist/session-cli-registry-bridge.js +20 -3
  64. package/dist/session-cli-registry-bridge.js.map +1 -1
  65. package/dist/session-submit-verifier.d.ts +19 -0
  66. package/dist/session-submit-verifier.d.ts.map +1 -1
  67. package/dist/session-submit-verifier.js +88 -0
  68. package/dist/session-submit-verifier.js.map +1 -1
  69. package/dist/session.d.ts +83 -12
  70. package/dist/session.d.ts.map +1 -1
  71. package/dist/session.js +150 -16
  72. package/dist/session.js.map +1 -1
  73. package/dist/state-store.d.ts +10 -0
  74. package/dist/state-store.d.ts.map +1 -1
  75. package/dist/state-store.js +35 -0
  76. package/dist/state-store.js.map +1 -1
  77. package/dist/tab-layout-service.d.ts +33 -0
  78. package/dist/tab-layout-service.d.ts.map +1 -1
  79. package/dist/tab-layout-service.js +75 -3
  80. package/dist/tab-layout-service.js.map +1 -1
  81. package/dist/tmux-manager.d.ts +52 -9
  82. package/dist/tmux-manager.d.ts.map +1 -1
  83. package/dist/tmux-manager.js +148 -30
  84. package/dist/tmux-manager.js.map +1 -1
  85. package/dist/tmux-prefix-table.d.ts +54 -0
  86. package/dist/tmux-prefix-table.d.ts.map +1 -0
  87. package/dist/tmux-prefix-table.js +137 -0
  88. package/dist/tmux-prefix-table.js.map +1 -0
  89. package/dist/tui/tui-app.d.ts +9 -1
  90. package/dist/tui/tui-app.d.ts.map +1 -1
  91. package/dist/tui/tui-app.js +21 -8
  92. package/dist/tui/tui-app.js.map +1 -1
  93. package/dist/tui/tui-client.d.ts +3 -2
  94. package/dist/tui/tui-client.d.ts.map +1 -1
  95. package/dist/tui/tui-client.js +3 -2
  96. package/dist/tui/tui-client.js.map +1 -1
  97. package/dist/types/app-state.d.ts +6 -0
  98. package/dist/types/app-state.d.ts.map +1 -1
  99. package/dist/types/app-state.js.map +1 -1
  100. package/dist/types/session.d.ts +72 -5
  101. package/dist/types/session.d.ts.map +1 -1
  102. package/dist/types/session.js +2 -1
  103. package/dist/types/session.js.map +1 -1
  104. package/dist/usage-telemetry.d.ts +15 -0
  105. package/dist/usage-telemetry.d.ts.map +1 -1
  106. package/dist/usage-telemetry.js +45 -2
  107. package/dist/usage-telemetry.js.map +1 -1
  108. package/dist/utils/cli-installed-probes.d.ts +1 -1
  109. package/dist/utils/cli-installed-probes.d.ts.map +1 -1
  110. package/dist/utils/cli-installed-probes.js +4 -2
  111. package/dist/utils/cli-installed-probes.js.map +1 -1
  112. package/dist/utils/copilot-cli-resolver.d.ts +48 -0
  113. package/dist/utils/copilot-cli-resolver.d.ts.map +1 -0
  114. package/dist/utils/copilot-cli-resolver.js +112 -0
  115. package/dist/utils/copilot-cli-resolver.js.map +1 -0
  116. package/dist/utils/copilot-plan-usage.d.ts +46 -0
  117. package/dist/utils/copilot-plan-usage.d.ts.map +1 -0
  118. package/dist/utils/copilot-plan-usage.js +95 -0
  119. package/dist/utils/copilot-plan-usage.js.map +1 -0
  120. package/dist/utils/index.d.ts +3 -0
  121. package/dist/utils/index.d.ts.map +1 -1
  122. package/dist/utils/index.js +3 -0
  123. package/dist/utils/index.js.map +1 -1
  124. package/dist/utils/single-line.d.ts +22 -0
  125. package/dist/utils/single-line.d.ts.map +1 -0
  126. package/dist/utils/single-line.js +30 -0
  127. package/dist/utils/single-line.js.map +1 -0
  128. package/dist/web/approval-inbox.d.ts +6 -0
  129. package/dist/web/approval-inbox.d.ts.map +1 -1
  130. package/dist/web/approval-inbox.js +2 -2
  131. package/dist/web/approval-inbox.js.map +1 -1
  132. package/dist/web/case-path.d.ts +4 -2
  133. package/dist/web/case-path.d.ts.map +1 -1
  134. package/dist/web/case-path.js +13 -4
  135. package/dist/web/case-path.js.map +1 -1
  136. package/dist/web/plan-usage-latest.d.ts +2 -1
  137. package/dist/web/plan-usage-latest.d.ts.map +1 -1
  138. package/dist/web/plan-usage-latest.js +12 -2
  139. package/dist/web/plan-usage-latest.js.map +1 -1
  140. package/dist/web/ports/index.d.ts +1 -0
  141. package/dist/web/ports/index.d.ts.map +1 -1
  142. package/dist/web/ports/keep-warm-port.d.ts +9 -0
  143. package/dist/web/ports/keep-warm-port.d.ts.map +1 -0
  144. package/dist/web/ports/keep-warm-port.js +6 -0
  145. package/dist/web/ports/keep-warm-port.js.map +1 -0
  146. package/dist/web/ports/session-port.d.ts +3 -1
  147. package/dist/web/ports/session-port.d.ts.map +1 -1
  148. package/dist/web/public/admin-ui.js.gz +0 -0
  149. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  150. package/dist/web/public/app.9314ee60.js +43 -0
  151. package/dist/web/public/app.9314ee60.js.br +0 -0
  152. package/dist/web/public/app.9314ee60.js.gz +0 -0
  153. package/dist/web/public/approvals-ui.js.gz +0 -0
  154. package/dist/web/public/{constants.12b0c247.js → constants.4866ecc3.js} +205 -3
  155. package/dist/web/public/constants.4866ecc3.js.br +0 -0
  156. package/dist/web/public/constants.4866ecc3.js.gz +0 -0
  157. package/dist/web/public/cron-ui.js.gz +0 -0
  158. package/dist/web/public/entrance-animations.js.gz +0 -0
  159. package/dist/web/public/git-status-ui.js.gz +0 -0
  160. package/dist/web/public/home-sessions.js.gz +0 -0
  161. package/dist/web/public/host-wake-ui.js.gz +0 -0
  162. package/dist/web/public/i18n.22ca902b.js +2 -0
  163. package/dist/web/public/i18n.22ca902b.js.br +0 -0
  164. package/dist/web/public/i18n.22ca902b.js.gz +0 -0
  165. package/dist/web/public/{image-input.fcdcb46c.js → image-input.941386e7.js} +24 -14
  166. package/dist/web/public/image-input.941386e7.js.br +0 -0
  167. package/dist/web/public/image-input.941386e7.js.gz +0 -0
  168. package/dist/web/public/index.html +110 -16
  169. package/dist/web/public/index.html.br +0 -0
  170. package/dist/web/public/index.html.gz +0 -0
  171. package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
  172. package/dist/web/public/{keyboard-accessory.b42f539b.js → keyboard-accessory.4e8b20ac.js} +51 -22
  173. package/dist/web/public/keyboard-accessory.4e8b20ac.js.br +0 -0
  174. package/dist/web/public/keyboard-accessory.4e8b20ac.js.gz +0 -0
  175. package/dist/web/public/{mobile-handlers.0ef9c311.js → mobile-handlers.44adaa07.js} +48 -16
  176. package/dist/web/public/mobile-handlers.44adaa07.js.br +0 -0
  177. package/dist/web/public/mobile-handlers.44adaa07.js.gz +0 -0
  178. package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
  179. package/dist/web/public/mobile-overview.js +1 -0
  180. package/dist/web/public/mobile-overview.js.br +0 -0
  181. package/dist/web/public/mobile-overview.js.gz +0 -0
  182. package/dist/web/public/mobile.12fb18de.css +1 -0
  183. package/dist/web/public/mobile.12fb18de.css.br +0 -0
  184. package/dist/web/public/mobile.12fb18de.css.gz +0 -0
  185. package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
  186. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  187. package/dist/web/public/{panels-ui.73ec0137.js → panels-ui.cbb24ba1.js} +66 -66
  188. package/dist/web/public/panels-ui.cbb24ba1.js.br +0 -0
  189. package/dist/web/public/panels-ui.cbb24ba1.js.gz +0 -0
  190. package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
  191. package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
  192. package/dist/web/public/readmymind-ui.js.gz +0 -0
  193. package/dist/web/public/reboot-restore-ui.js.gz +0 -0
  194. package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
  195. package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
  196. package/dist/web/public/security-notices.json +21 -0
  197. package/dist/web/public/session-lineage.js.gz +0 -0
  198. package/dist/web/public/{session-ui.d52ff6aa.js → session-ui.9c1f009b.js} +8 -4
  199. package/dist/web/public/session-ui.9c1f009b.js.br +0 -0
  200. package/dist/web/public/session-ui.9c1f009b.js.gz +0 -0
  201. package/dist/web/public/settings-ui.fea9ddae.js +106 -0
  202. package/dist/web/public/settings-ui.fea9ddae.js.br +0 -0
  203. package/dist/web/public/settings-ui.fea9ddae.js.gz +0 -0
  204. package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
  205. package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
  206. package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
  207. package/dist/web/public/styles.e096fcd6.css +1 -0
  208. package/dist/web/public/styles.e096fcd6.css.br +0 -0
  209. package/dist/web/public/styles.e096fcd6.css.gz +0 -0
  210. package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
  211. package/dist/web/public/sw.js +2 -2
  212. package/dist/web/public/sw.js.br +0 -0
  213. package/dist/web/public/sw.js.gz +0 -0
  214. package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
  215. package/dist/web/public/tab-rail-resize.7157e0bd.js.gz +0 -0
  216. package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
  217. package/dist/web/public/terminal-split.js.gz +0 -0
  218. package/dist/web/public/terminal-tile.js +41 -22
  219. package/dist/web/public/terminal-tile.js.br +0 -0
  220. package/dist/web/public/terminal-tile.js.gz +0 -0
  221. package/dist/web/public/terminal-ui.68dbd352.js +2 -0
  222. package/dist/web/public/terminal-ui.68dbd352.js.br +0 -0
  223. package/dist/web/public/terminal-ui.68dbd352.js.gz +0 -0
  224. package/dist/web/public/tile-grid.js +3 -6
  225. package/dist/web/public/tile-grid.js.br +0 -0
  226. package/dist/web/public/tile-grid.js.gz +0 -0
  227. package/dist/web/public/ultracode-panel.js.gz +0 -0
  228. package/dist/web/public/ultracode-windows.js.gz +0 -0
  229. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  230. package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
  231. package/dist/web/public/vendor/fflate.min.js.gz +0 -0
  232. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  233. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  234. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  235. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  236. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  237. package/dist/web/public/vendor/xterm-predictive-echo.ae5e3d5d.js.gz +0 -0
  238. package/dist/web/public/vendor/xterm-zerolag-input.0b69623c.js.gz +0 -0
  239. package/dist/web/public/vendor/xterm.css.gz +0 -0
  240. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  241. package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
  242. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  243. package/dist/web/public/webview-tabs.js.gz +0 -0
  244. package/dist/web/public/whats-new.json +9 -9
  245. package/dist/web/response-viewer-transcript.d.ts +6 -0
  246. package/dist/web/response-viewer-transcript.d.ts.map +1 -1
  247. package/dist/web/response-viewer-transcript.js +134 -1
  248. package/dist/web/response-viewer-transcript.js.map +1 -1
  249. package/dist/web/routes/admin-routes.d.ts +2 -1
  250. package/dist/web/routes/admin-routes.d.ts.map +1 -1
  251. package/dist/web/routes/admin-routes.js +3 -0
  252. package/dist/web/routes/admin-routes.js.map +1 -1
  253. package/dist/web/routes/case-routes.d.ts +2 -2
  254. package/dist/web/routes/case-routes.d.ts.map +1 -1
  255. package/dist/web/routes/case-routes.js +81 -3
  256. package/dist/web/routes/case-routes.js.map +1 -1
  257. package/dist/web/routes/config-backup-routes.d.ts +54 -0
  258. package/dist/web/routes/config-backup-routes.d.ts.map +1 -0
  259. package/dist/web/routes/config-backup-routes.js +268 -0
  260. package/dist/web/routes/config-backup-routes.js.map +1 -0
  261. package/dist/web/routes/custom-model-routes.d.ts +17 -1
  262. package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
  263. package/dist/web/routes/custom-model-routes.js +118 -13
  264. package/dist/web/routes/custom-model-routes.js.map +1 -1
  265. package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
  266. package/dist/web/routes/hook-event-routes.js +26 -5
  267. package/dist/web/routes/hook-event-routes.js.map +1 -1
  268. package/dist/web/routes/index.d.ts +1 -0
  269. package/dist/web/routes/index.d.ts.map +1 -1
  270. package/dist/web/routes/index.js +1 -0
  271. package/dist/web/routes/index.js.map +1 -1
  272. package/dist/web/routes/mcp-sync-routes.d.ts +4 -4
  273. package/dist/web/routes/mcp-sync-routes.js +4 -4
  274. package/dist/web/routes/ralph-routes.js +2 -2
  275. package/dist/web/routes/ralph-routes.js.map +1 -1
  276. package/dist/web/routes/reboot-restore-routes.d.ts.map +1 -1
  277. package/dist/web/routes/reboot-restore-routes.js +2 -0
  278. package/dist/web/routes/reboot-restore-routes.js.map +1 -1
  279. package/dist/web/routes/session-routes.d.ts +14 -4
  280. package/dist/web/routes/session-routes.d.ts.map +1 -1
  281. package/dist/web/routes/session-routes.js +131 -30
  282. package/dist/web/routes/session-routes.js.map +1 -1
  283. package/dist/web/routes/status-telemetry-routes.d.ts +2 -2
  284. package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
  285. package/dist/web/routes/status-telemetry-routes.js +8 -4
  286. package/dist/web/routes/status-telemetry-routes.js.map +1 -1
  287. package/dist/web/routes/system-routes.d.ts +2 -2
  288. package/dist/web/routes/system-routes.d.ts.map +1 -1
  289. package/dist/web/routes/system-routes.js +18 -0
  290. package/dist/web/routes/system-routes.js.map +1 -1
  291. package/dist/web/routes/webview-routes.d.ts.map +1 -1
  292. package/dist/web/routes/webview-routes.js +1 -0
  293. package/dist/web/routes/webview-routes.js.map +1 -1
  294. package/dist/web/schemas.d.ts +32 -0
  295. package/dist/web/schemas.d.ts.map +1 -1
  296. package/dist/web/schemas.js +64 -4
  297. package/dist/web/schemas.js.map +1 -1
  298. package/dist/web/server.d.ts +12 -2
  299. package/dist/web/server.d.ts.map +1 -1
  300. package/dist/web/server.js +127 -6
  301. package/dist/web/server.js.map +1 -1
  302. package/dist/web/session-listener-wiring.d.ts +6 -0
  303. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  304. package/dist/web/session-listener-wiring.js +10 -3
  305. package/dist/web/session-listener-wiring.js.map +1 -1
  306. package/dist/web/sse-events.d.ts +5 -2
  307. package/dist/web/sse-events.d.ts.map +1 -1
  308. package/dist/web/sse-events.js +5 -2
  309. package/dist/web/sse-events.js.map +1 -1
  310. package/dist/web/webview-proxy.d.ts +8 -3
  311. package/dist/web/webview-proxy.d.ts.map +1 -1
  312. package/dist/web/webview-proxy.js +23 -5
  313. package/dist/web/webview-proxy.js.map +1 -1
  314. package/package.json +1 -1
  315. package/skills/codeman/SKILL.md +23 -11
  316. package/skills/codeman/preamble.sh +12 -2
  317. package/skills/codeman/reference/endpoints.md +16 -15
  318. package/skills/codeman/reference/messaging.md +5 -5
  319. package/skills/codeman/reference/recipes.md +2 -2
  320. package/skills/codeman/reference/verbs.md +25 -17
  321. package/dist/web/public/app.f04bb2a5.js +0 -43
  322. package/dist/web/public/app.f04bb2a5.js.br +0 -0
  323. package/dist/web/public/app.f04bb2a5.js.gz +0 -0
  324. package/dist/web/public/constants.12b0c247.js.br +0 -0
  325. package/dist/web/public/constants.12b0c247.js.gz +0 -0
  326. package/dist/web/public/i18n.06659676.js +0 -2
  327. package/dist/web/public/i18n.06659676.js.br +0 -0
  328. package/dist/web/public/i18n.06659676.js.gz +0 -0
  329. package/dist/web/public/image-input.fcdcb46c.js.br +0 -0
  330. package/dist/web/public/image-input.fcdcb46c.js.gz +0 -0
  331. package/dist/web/public/keyboard-accessory.b42f539b.js.br +0 -0
  332. package/dist/web/public/keyboard-accessory.b42f539b.js.gz +0 -0
  333. package/dist/web/public/mobile-handlers.0ef9c311.js.br +0 -0
  334. package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
  335. package/dist/web/public/mobile.2dff1580.css +0 -1
  336. package/dist/web/public/mobile.2dff1580.css.br +0 -0
  337. package/dist/web/public/mobile.2dff1580.css.gz +0 -0
  338. package/dist/web/public/panels-ui.73ec0137.js.br +0 -0
  339. package/dist/web/public/panels-ui.73ec0137.js.gz +0 -0
  340. package/dist/web/public/session-ui.d52ff6aa.js.br +0 -0
  341. package/dist/web/public/session-ui.d52ff6aa.js.gz +0 -0
  342. package/dist/web/public/settings-ui.3a22bd2a.js +0 -97
  343. package/dist/web/public/settings-ui.3a22bd2a.js.br +0 -0
  344. package/dist/web/public/settings-ui.3a22bd2a.js.gz +0 -0
  345. package/dist/web/public/styles.ba6a9b84.css +0 -1
  346. package/dist/web/public/styles.ba6a9b84.css.br +0 -0
  347. package/dist/web/public/styles.ba6a9b84.css.gz +0 -0
  348. package/dist/web/public/terminal-ui.0a7ccc29.js +0 -2
  349. package/dist/web/public/terminal-ui.0a7ccc29.js.br +0 -0
  350. package/dist/web/public/terminal-ui.0a7ccc29.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 |
@@ -237,7 +237,7 @@ minutes, never retry the credential.
237
237
  flushed slightly *after* the `stop` hook fires, so a read taken the instant the wait
238
238
  returns is too early (verified live: empty on the first call, full prose seconds later).
239
239
  It is also `""` before the worker's first completed turn, and permanently `""` for
240
- `shell`, `opencode`, `gemini`, `antigravity`, `pi`, `grok` and `omp`, which write no transcript at
240
+ `shell`, `opencode`, `gemini`, `antigravity`, `pi`, `grok`, `omp` and `copilot`, which write no transcript at
241
241
  all. `deepseek` is NOT one of those — it is read from `$DSH_HOME/sessions/**` and lags
242
242
  for the same reason claude does (the harness finalizes the assistant message just after
243
243
  it reports `idle`), so poll it the same way.
@@ -341,7 +341,7 @@ ESC=$(printf '\033')
341
341
 
342
342
  `POST /api/v1/quick-start` body (all optional):
343
343
  `{"caseName":"worker-1","mode":"claude","sessionName":"auth-worker","effort":"high"}`
344
- , `mode` ∈ `claude|shell|opencode|codex|gemini|antigravity|pi|grok|deepseek|omp`; response is
344
+ , `mode` ∈ `claude|shell|opencode|codex|gemini|antigravity|pi|grok|deepseek|omp|copilot`; response is
345
345
  `.data.{sessionId, caseName, casePath}`. Creates the case directory (a real directory
346
346
  on the user's disk) if missing, do not retry it in a loop, and remember the name.
347
347
 
@@ -356,9 +356,9 @@ a soft default the worker can change with `/advisor`. Remote and docker cases re
356
356
  `OPERATION_FAILED`; it never falls back to claude. Probe first whenever you did not pick
357
357
  the mode yourself: `GET /api/v1/claude/status`, `GET /api/v1/opencode/status`,
358
358
  `GET /api/v1/codex/status`, `GET /api/v1/gemini/status`, `GET /api/v1/antigravity/status`, `GET /api/v1/grok/status`, `GET /api/v1/deepseek/status`,
359
- `GET /api/v1/pi/status` and `GET /api/v1/omp/status` each return `.data.{available, path}` (no session needed).
360
- Pi's, grok's and OMP's also carry `.data.version`, because `pi` is a short generic name,
361
- `grok` is a name with npm squatters, and `omp` is a similarly short name, so an unrelated
359
+ `GET /api/v1/pi/status`, `GET /api/v1/omp/status` and `GET /api/v1/copilot/status` each return `.data.{available, path}` (no session needed).
360
+ Pi's, grok's, OMP's and Copilot's also carry `.data.version`, because `pi` is a short generic name,
361
+ `grok` is a name with npm squatters, and `omp` is a similarly short name, and `copilot` is a generic one, so an unrelated
362
362
  binary on `$PATH` can shadow any of them: the resolver rejects one whose `--version` is
363
363
  not version-shaped, so `available:false` there can mean "a different program of the same
364
364
  name is in front" rather than "nothing is installed". `shell` has no CLI to probe.
@@ -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
@@ -486,7 +487,7 @@ Quirks that will bite you:
486
487
  - ⚠️ **`active-tools` proves presence, never absence.** It is fed by the BashToolParser,
487
488
  which reads Claude's rendered `● Bash(…)` lines, and `_processExpensiveParsers`
488
489
  returns early for every external CLI mode (`session.ts:~2225`), so it is permanently
489
- `[]` on `opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`. ⚠️ **`shell` is NOT one of those**
490
+ `[]` on `opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`/`copilot`. ⚠️ **`shell` is NOT one of those**
490
491
  (`isExternalCliMode`, `session.ts:176-187`, lists only those seven), so the parser does
491
492
  run on a shell worker, and `TEXT_COMMAND_PATTERN` (`bash-tool-parser.ts:89`) matches
492
493
  bare `tail|cat|head|less|grep|watch|multitail <path>` lines with no `● Bash(` wrapper:
@@ -634,8 +635,8 @@ Three bounded long-polls. Shared semantics:
634
635
  |--------|---------|---------------|
635
636
  | `idle` | output stabilized + prompt detected, heuristic, can flap mid-turn | every mode |
636
637
  | `working` | session started producing output | every mode |
637
- | `stop` | Claude Code `stop` hook, the definitive end-of-turn | `claude` only |
638
- | `blocked` | `permission_prompt` / `elicitation_dialog` hook, the worker needs an answer | `claude`; also `codex`, whose approval, question and trust dialogs Codeman reads off its screen (answer them in the terminal, never through the inbox) |
638
+ | `stop` | Claude Code `stop` hook, the definitive end-of-turn | `claude`; also `deepseek`, whose harness reports its own end of turn while its status bridge is on |
639
+ | `blocked` | `permission_prompt` / `elicitation_dialog` hook, the worker needs an answer | `claude`; also `deepseek` (its harness reports its dialogs, same condition), and `codex`, whose approval, question and trust dialogs Codeman reads off its screen (answer both in the terminal, never through the inbox) |
639
640
  | `exit` | PTY exited or session deleted | every mode |
640
641
 
641
642
  ⚠️ **`claude` mode is necessary for `stop`/`blocked`, not sufficient. The real
@@ -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 |
@@ -56,7 +56,7 @@ own head: the worker enforcing the cap is the one who has to be told about it.
56
56
  | synchronize on end of turn | HTTP `wait until=stop` (fires for message-initiated turns too, verified live) |
57
57
  | liveness / death check | HTTP `wait?until=exit` |
58
58
  | interrupt a running turn (break-glass) | HTTP input, a bare `\x1b` with no `\r` |
59
- | non-claude modes (`shell`/`opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`) | HTTP only (no other CLI has messaging) |
59
+ | non-claude modes (`shell`/`opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`/`copilot`) | HTTP only (no other CLI has messaging) |
60
60
  | delete | HTTP, via SKILL.md's `delete_session` guard |
61
61
 
62
62
  ## Availability: probe, never assume
@@ -105,11 +105,11 @@ CLI is 2.1.224+ (`buildNameCliArgs`, `session-cli-builder.ts:97-101`, wired in a
105
105
  the worker's messages arrive tagged `from-name="<that name>"`; a derived-name worker's
106
106
  messages carry no `from-name`). Name your workers: a quick-start WITHOUT
107
107
  `sessionName` leaves the Codeman name empty, so there is nothing to pass and the
108
- peer name stays derived. ⚠️ Give them a DESCRIPTIVE name: only a name the user chose
109
- is pinned (`Session.cliPinnedName`), because `--name` is also the conversation's
108
+ peer name stays derived. ⚠️ Give them a DESCRIPTIVE name: by default only a name the user chose
109
+ is pinned (`Session.cliPinnedName`; the opt-in `pinCliSessionName` setting pins every tab name, and a rename then holds only until the next turn), because `--name` is also the conversation's
110
110
  `/resume` title and terminal title and suppresses Claude's own generated title. A
111
111
  placeholder-shaped name (`w9-msgtest`, anything matching `isGeneratedSessionName`)
112
- and an auto name are NOT passed, so such a worker's peer name is derived; use
112
+ and an auto name are NOT passed (with `pinCliSessionName` off, the default), so such a worker's peer name is derived; use
113
113
  `msgtest-worker` rather than `w9-msgtest`. The flag is fail-closed (older/unknown CLI omits it, because an
114
114
  unknown flag aborts startup and would kill every spawn) and allowlist-sanitized (a name of
115
115
  only unsafe characters is dropped), and the docker/remote builders never see it at all
@@ -352,7 +352,7 @@ Without a break-glass, a pair with a bad brief is a token bonfire with no off sw
352
352
 
353
353
  ### Mixed fleets: the pairing matrix
354
354
 
355
- Non-claude workers (`shell`, `opencode`, `codex`, `gemini`, `antigravity`, `pi`, `grok`, `deepseek`, `omp`) cannot be peers
355
+ Non-claude workers (`shell`, `opencode`, `codex`, `gemini`, `antigravity`, `pi`, `grok`, `deepseek`, `omp`, `copilot`) cannot be peers
356
356
  at all; no other CLI has this feature. Their tasks route over HTTP, and you never mention
357
357
  messaging in their briefs. The claude half of the fleet can use messaging among itself,
358
358
  subject to the namespace rule: **messaging works between two sessions that share one
@@ -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
@@ -188,7 +188,7 @@ for _ in $(seq 1 10); do
188
188
  done
189
189
  printf '%s\n' "$TXT"
190
190
  # (.data is {text,timestamp}; text is also "" before the first completed turn and
191
- # always "" for shell/opencode/gemini/antigravity/pi/grok/omp, which have no transcript, use
191
+ # always "" for shell/opencode/gemini/antigravity/pi/grok/omp/copilot, which have no transcript, use
192
192
  # the terminal tail there, and here only to diagnose an unsubmitted prompt.)
193
193
 
194
194
  # 6. clean up: exact id, own list only, through the fail-closed preamble helper
@@ -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}')
@@ -376,7 +383,7 @@ recovered by submitting it with `{"input":"\r"}`.
376
383
  only when the workspace actually has them, see [§5.1](#51-where-to-spawn)) **and for
377
384
  `deepseek`** — the one external CLI that reports its own lifecycle, so its `stop` is a
378
385
  real end-of-turn signal rather than a guess. On
379
- `shell`/`opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`omp`, requesting them explicitly is a
386
+ `shell`/`opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`omp`/`copilot`, requesting them explicitly is a
380
387
  400 (except `blocked` on `codex`, which Codeman reads off its screen when an approval,
381
388
  question or trust dialog is up; a wait for it answers at once if one already is), and
382
389
  lifecycle transitions there are coarse (a short shell command may emit **no**
@@ -430,7 +437,7 @@ from the transcript file, which is flushed slightly *after* the `stop` hook fire
430
437
  single read taken the instant send-and-wait returns comes back `""` even though the
431
438
  turn finished (verified live: empty on the first call, full text seconds later). `text`
432
439
  is also `""` before the worker's first completed turn, and always `""` for modes with
433
- no transcript (`shell`, `opencode`, `gemini`, `antigravity`, `pi`, `grok`, `omp`; the first four
440
+ no transcript (`shell`, `opencode`, `gemini`, `antigravity`, `pi`, `grok`, `omp`, `copilot`; the first four
434
441
  verified live, pi from the same source path), which is
435
442
  why the loop above is bounded rather than open-ended. A dsh worker lags too, for its own
436
443
  reason: the harness finalizes the assistant message just after it reports `idle`. Fall back to the terminal buffer
@@ -516,7 +523,7 @@ turn), and both better than diffing terminal samples:
516
523
  ```
517
524
 
518
525
  ⚠️ `active-tools` is parsed out of Claude's own output format, so it is **empty for
519
- `opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`** (those parsers are skipped wholesale) and
526
+ `opencode`/`codex`/`gemini`/`antigravity`/`pi`/`grok`/`deepseek`/`omp`/`copilot`** (those parsers are skipped wholesale) and
520
527
  in practice empty for `shell`. Source-verified, not measured live.
521
528
 
522
529
  Only if neither helps: sample `terminal?tail=` twice a few seconds apart. A changing
@@ -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
@@ -699,7 +707,7 @@ The shape, each step verified live (probes, failure modes and safety detail in
699
707
  column; the row's `name [ref]` is the address. On Codeman 1.16+ with claude
700
708
  2.1.224+ a worker's peer name is its Codeman session name, so pass a DESCRIPTIVE
701
709
  `sessionName` in quick-start to pick it (a `w<N>-` placeholder-shaped name is not
702
- pinned, so it lists derived); older setups list a name derived from the case folder.
710
+ pinned by default, so it lists derived); older setups list a name derived from the case folder.
703
711
  No row = messaging is off for that worker (it is feature-flagged even on matching
704
712
  CLI versions, observed live): fall back to the HTTP recipes without complaint.
705
713
  3. `SendMessage` the task; first contact must use the `name [ref]` form copied from