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.
- package/README.md +13 -12
- package/dist/claude-session-title.d.ts +6 -4
- package/dist/claude-session-title.d.ts.map +1 -1
- package/dist/claude-session-title.js +6 -4
- package/dist/claude-session-title.js.map +1 -1
- package/dist/cli-agent.d.ts +3 -3
- package/dist/cli-agent.d.ts.map +1 -1
- package/dist/cli-agent.js +8 -6
- package/dist/cli-agent.js.map +1 -1
- package/dist/config/cli-registry/patterns.d.ts +1 -1
- package/dist/config/cli-registry/patterns.d.ts.map +1 -1
- package/dist/config/cli-registry/patterns.js +3 -0
- package/dist/config/cli-registry/patterns.js.map +1 -1
- package/dist/config/cli-registry/schema.d.ts +1 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +5 -3
- package/dist/config/cli-registry/schema.js.map +1 -1
- package/dist/config/cli-registry/stock.d.ts.map +1 -1
- package/dist/config/cli-registry/stock.js +263 -4
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +13 -5
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/config/map-limits.d.ts +13 -1
- package/dist/config/map-limits.d.ts.map +1 -1
- package/dist/config/map-limits.js +28 -1
- package/dist/config/map-limits.js.map +1 -1
- package/dist/config-backup.d.ts +279 -0
- package/dist/config-backup.d.ts.map +1 -0
- package/dist/config-backup.js +794 -0
- package/dist/config-backup.js.map +1 -0
- package/dist/cron/cron-service.d.ts +5 -5
- package/dist/cron/cron-service.js +6 -6
- package/dist/cron/cron-service.js.map +1 -1
- package/dist/custom-model-hosts.d.ts +16 -0
- package/dist/custom-model-hosts.d.ts.map +1 -1
- package/dist/custom-model-hosts.js.map +1 -1
- package/dist/hooks-config.d.ts +24 -0
- package/dist/hooks-config.d.ts.map +1 -1
- package/dist/hooks-config.js +47 -0
- package/dist/hooks-config.js.map +1 -1
- package/dist/intent-store.d.ts +2 -0
- package/dist/intent-store.d.ts.map +1 -1
- package/dist/intent-store.js +9 -0
- package/dist/intent-store.js.map +1 -1
- package/dist/mcp-sync-targets.d.ts +6 -3
- package/dist/mcp-sync-targets.d.ts.map +1 -1
- package/dist/mcp-sync-targets.js +6 -3
- package/dist/mcp-sync-targets.js.map +1 -1
- package/dist/mux-interface.d.ts +28 -7
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/prompt-cache-keepwarm.d.ts +193 -0
- package/dist/prompt-cache-keepwarm.d.ts.map +1 -0
- package/dist/prompt-cache-keepwarm.js +359 -0
- package/dist/prompt-cache-keepwarm.js.map +1 -0
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +6 -5
- package/dist/respawn-controller.js.map +1 -1
- package/dist/session-auto-ops.d.ts.map +1 -1
- package/dist/session-auto-ops.js +6 -1
- package/dist/session-auto-ops.js.map +1 -1
- package/dist/session-cli-registry-bridge.d.ts +15 -1
- package/dist/session-cli-registry-bridge.d.ts.map +1 -1
- package/dist/session-cli-registry-bridge.js +20 -3
- package/dist/session-cli-registry-bridge.js.map +1 -1
- package/dist/session-submit-verifier.d.ts +19 -0
- package/dist/session-submit-verifier.d.ts.map +1 -1
- package/dist/session-submit-verifier.js +88 -0
- package/dist/session-submit-verifier.js.map +1 -1
- package/dist/session.d.ts +83 -12
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +150 -16
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +10 -0
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +35 -0
- package/dist/state-store.js.map +1 -1
- package/dist/tab-layout-service.d.ts +33 -0
- package/dist/tab-layout-service.d.ts.map +1 -1
- package/dist/tab-layout-service.js +75 -3
- package/dist/tab-layout-service.js.map +1 -1
- package/dist/tmux-manager.d.ts +52 -9
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +148 -30
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-prefix-table.d.ts +54 -0
- package/dist/tmux-prefix-table.d.ts.map +1 -0
- package/dist/tmux-prefix-table.js +137 -0
- package/dist/tmux-prefix-table.js.map +1 -0
- package/dist/tui/tui-app.d.ts +9 -1
- package/dist/tui/tui-app.d.ts.map +1 -1
- package/dist/tui/tui-app.js +21 -8
- package/dist/tui/tui-app.js.map +1 -1
- package/dist/tui/tui-client.d.ts +3 -2
- package/dist/tui/tui-client.d.ts.map +1 -1
- package/dist/tui/tui-client.js +3 -2
- package/dist/tui/tui-client.js.map +1 -1
- package/dist/types/app-state.d.ts +6 -0
- package/dist/types/app-state.d.ts.map +1 -1
- package/dist/types/app-state.js.map +1 -1
- package/dist/types/session.d.ts +72 -5
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +2 -1
- package/dist/types/session.js.map +1 -1
- package/dist/usage-telemetry.d.ts +15 -0
- package/dist/usage-telemetry.d.ts.map +1 -1
- package/dist/usage-telemetry.js +45 -2
- package/dist/usage-telemetry.js.map +1 -1
- package/dist/utils/cli-installed-probes.d.ts +1 -1
- package/dist/utils/cli-installed-probes.d.ts.map +1 -1
- package/dist/utils/cli-installed-probes.js +4 -2
- package/dist/utils/cli-installed-probes.js.map +1 -1
- package/dist/utils/copilot-cli-resolver.d.ts +48 -0
- package/dist/utils/copilot-cli-resolver.d.ts.map +1 -0
- package/dist/utils/copilot-cli-resolver.js +112 -0
- package/dist/utils/copilot-cli-resolver.js.map +1 -0
- package/dist/utils/copilot-plan-usage.d.ts +46 -0
- package/dist/utils/copilot-plan-usage.d.ts.map +1 -0
- package/dist/utils/copilot-plan-usage.js +95 -0
- package/dist/utils/copilot-plan-usage.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/single-line.d.ts +22 -0
- package/dist/utils/single-line.d.ts.map +1 -0
- package/dist/utils/single-line.js +30 -0
- package/dist/utils/single-line.js.map +1 -0
- package/dist/web/approval-inbox.d.ts +6 -0
- package/dist/web/approval-inbox.d.ts.map +1 -1
- package/dist/web/approval-inbox.js +2 -2
- package/dist/web/approval-inbox.js.map +1 -1
- package/dist/web/case-path.d.ts +4 -2
- package/dist/web/case-path.d.ts.map +1 -1
- package/dist/web/case-path.js +13 -4
- package/dist/web/case-path.js.map +1 -1
- package/dist/web/plan-usage-latest.d.ts +2 -1
- package/dist/web/plan-usage-latest.d.ts.map +1 -1
- package/dist/web/plan-usage-latest.js +12 -2
- package/dist/web/plan-usage-latest.js.map +1 -1
- package/dist/web/ports/index.d.ts +1 -0
- package/dist/web/ports/index.d.ts.map +1 -1
- package/dist/web/ports/keep-warm-port.d.ts +9 -0
- package/dist/web/ports/keep-warm-port.d.ts.map +1 -0
- package/dist/web/ports/keep-warm-port.js +6 -0
- package/dist/web/ports/keep-warm-port.js.map +1 -0
- package/dist/web/ports/session-port.d.ts +3 -1
- package/dist/web/ports/session-port.d.ts.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/app.9314ee60.js +43 -0
- package/dist/web/public/app.9314ee60.js.br +0 -0
- package/dist/web/public/app.9314ee60.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/{constants.12b0c247.js → constants.4866ecc3.js} +205 -3
- package/dist/web/public/constants.4866ecc3.js.br +0 -0
- package/dist/web/public/constants.4866ecc3.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/git-status-ui.js.gz +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/host-wake-ui.js.gz +0 -0
- package/dist/web/public/i18n.22ca902b.js +2 -0
- package/dist/web/public/i18n.22ca902b.js.br +0 -0
- package/dist/web/public/i18n.22ca902b.js.gz +0 -0
- package/dist/web/public/{image-input.fcdcb46c.js → image-input.941386e7.js} +24 -14
- package/dist/web/public/image-input.941386e7.js.br +0 -0
- package/dist/web/public/image-input.941386e7.js.gz +0 -0
- package/dist/web/public/index.html +110 -16
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
- package/dist/web/public/{keyboard-accessory.b42f539b.js → keyboard-accessory.4e8b20ac.js} +51 -22
- package/dist/web/public/keyboard-accessory.4e8b20ac.js.br +0 -0
- package/dist/web/public/keyboard-accessory.4e8b20ac.js.gz +0 -0
- package/dist/web/public/{mobile-handlers.0ef9c311.js → mobile-handlers.44adaa07.js} +48 -16
- package/dist/web/public/mobile-handlers.44adaa07.js.br +0 -0
- package/dist/web/public/mobile-handlers.44adaa07.js.gz +0 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
- package/dist/web/public/mobile-overview.js +1 -0
- package/dist/web/public/mobile-overview.js.br +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.12fb18de.css +1 -0
- package/dist/web/public/mobile.12fb18de.css.br +0 -0
- package/dist/web/public/mobile.12fb18de.css.gz +0 -0
- package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.73ec0137.js → panels-ui.cbb24ba1.js} +66 -66
- package/dist/web/public/panels-ui.cbb24ba1.js.br +0 -0
- package/dist/web/public/panels-ui.cbb24ba1.js.gz +0 -0
- package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
- package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/reboot-restore-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
- package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
- package/dist/web/public/security-notices.json +21 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/{session-ui.d52ff6aa.js → session-ui.9c1f009b.js} +8 -4
- package/dist/web/public/session-ui.9c1f009b.js.br +0 -0
- package/dist/web/public/session-ui.9c1f009b.js.gz +0 -0
- package/dist/web/public/settings-ui.fea9ddae.js +106 -0
- package/dist/web/public/settings-ui.fea9ddae.js.br +0 -0
- package/dist/web/public/settings-ui.fea9ddae.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
- package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
- package/dist/web/public/styles.e096fcd6.css +1 -0
- package/dist/web/public/styles.e096fcd6.css.br +0 -0
- package/dist/web/public/styles.e096fcd6.css.gz +0 -0
- package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
- package/dist/web/public/sw.js +2 -2
- package/dist/web/public/sw.js.br +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.7157e0bd.js.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-tile.js +41 -22
- package/dist/web/public/terminal-tile.js.br +0 -0
- package/dist/web/public/terminal-tile.js.gz +0 -0
- package/dist/web/public/terminal-ui.68dbd352.js +2 -0
- package/dist/web/public/terminal-ui.68dbd352.js.br +0 -0
- package/dist/web/public/terminal-ui.68dbd352.js.gz +0 -0
- package/dist/web/public/tile-grid.js +3 -6
- package/dist/web/public/tile-grid.js.br +0 -0
- package/dist/web/public/tile-grid.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
- package/dist/web/public/vendor/fflate.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-predictive-echo.ae5e3d5d.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.0b69623c.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/public/whats-new.json +9 -9
- package/dist/web/response-viewer-transcript.d.ts +6 -0
- package/dist/web/response-viewer-transcript.d.ts.map +1 -1
- package/dist/web/response-viewer-transcript.js +134 -1
- package/dist/web/response-viewer-transcript.js.map +1 -1
- package/dist/web/routes/admin-routes.d.ts +2 -1
- package/dist/web/routes/admin-routes.d.ts.map +1 -1
- package/dist/web/routes/admin-routes.js +3 -0
- package/dist/web/routes/admin-routes.js.map +1 -1
- package/dist/web/routes/case-routes.d.ts +2 -2
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +81 -3
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/config-backup-routes.d.ts +54 -0
- package/dist/web/routes/config-backup-routes.d.ts.map +1 -0
- package/dist/web/routes/config-backup-routes.js +268 -0
- package/dist/web/routes/config-backup-routes.js.map +1 -0
- package/dist/web/routes/custom-model-routes.d.ts +17 -1
- package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
- package/dist/web/routes/custom-model-routes.js +118 -13
- package/dist/web/routes/custom-model-routes.js.map +1 -1
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
- package/dist/web/routes/hook-event-routes.js +26 -5
- package/dist/web/routes/hook-event-routes.js.map +1 -1
- package/dist/web/routes/index.d.ts +1 -0
- package/dist/web/routes/index.d.ts.map +1 -1
- package/dist/web/routes/index.js +1 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/mcp-sync-routes.d.ts +4 -4
- package/dist/web/routes/mcp-sync-routes.js +4 -4
- package/dist/web/routes/ralph-routes.js +2 -2
- package/dist/web/routes/ralph-routes.js.map +1 -1
- package/dist/web/routes/reboot-restore-routes.d.ts.map +1 -1
- package/dist/web/routes/reboot-restore-routes.js +2 -0
- package/dist/web/routes/reboot-restore-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +14 -4
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +131 -30
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/status-telemetry-routes.d.ts +2 -2
- package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
- package/dist/web/routes/status-telemetry-routes.js +8 -4
- package/dist/web/routes/status-telemetry-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts +2 -2
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +18 -0
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/routes/webview-routes.d.ts.map +1 -1
- package/dist/web/routes/webview-routes.js +1 -0
- package/dist/web/routes/webview-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +32 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +64 -4
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +12 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +127 -6
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-listener-wiring.d.ts +6 -0
- package/dist/web/session-listener-wiring.d.ts.map +1 -1
- package/dist/web/session-listener-wiring.js +10 -3
- package/dist/web/session-listener-wiring.js.map +1 -1
- package/dist/web/sse-events.d.ts +5 -2
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +5 -2
- package/dist/web/sse-events.js.map +1 -1
- package/dist/web/webview-proxy.d.ts +8 -3
- package/dist/web/webview-proxy.d.ts.map +1 -1
- package/dist/web/webview-proxy.js +23 -5
- package/dist/web/webview-proxy.js.map +1 -1
- package/package.json +1 -1
- package/skills/codeman/SKILL.md +23 -11
- package/skills/codeman/preamble.sh +12 -2
- package/skills/codeman/reference/endpoints.md +16 -15
- package/skills/codeman/reference/messaging.md +5 -5
- package/skills/codeman/reference/recipes.md +2 -2
- package/skills/codeman/reference/verbs.md +25 -17
- package/dist/web/public/app.f04bb2a5.js +0 -43
- package/dist/web/public/app.f04bb2a5.js.br +0 -0
- package/dist/web/public/app.f04bb2a5.js.gz +0 -0
- package/dist/web/public/constants.12b0c247.js.br +0 -0
- package/dist/web/public/constants.12b0c247.js.gz +0 -0
- package/dist/web/public/i18n.06659676.js +0 -2
- package/dist/web/public/i18n.06659676.js.br +0 -0
- package/dist/web/public/i18n.06659676.js.gz +0 -0
- package/dist/web/public/image-input.fcdcb46c.js.br +0 -0
- package/dist/web/public/image-input.fcdcb46c.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.b42f539b.js.br +0 -0
- package/dist/web/public/keyboard-accessory.b42f539b.js.gz +0 -0
- package/dist/web/public/mobile-handlers.0ef9c311.js.br +0 -0
- package/dist/web/public/mobile-handlers.0ef9c311.js.gz +0 -0
- package/dist/web/public/mobile.2dff1580.css +0 -1
- package/dist/web/public/mobile.2dff1580.css.br +0 -0
- package/dist/web/public/mobile.2dff1580.css.gz +0 -0
- package/dist/web/public/panels-ui.73ec0137.js.br +0 -0
- package/dist/web/public/panels-ui.73ec0137.js.gz +0 -0
- package/dist/web/public/session-ui.d52ff6aa.js.br +0 -0
- package/dist/web/public/session-ui.d52ff6aa.js.gz +0 -0
- package/dist/web/public/settings-ui.3a22bd2a.js +0 -97
- package/dist/web/public/settings-ui.3a22bd2a.js.br +0 -0
- package/dist/web/public/settings-ui.3a22bd2a.js.gz +0 -0
- package/dist/web/public/styles.ba6a9b84.css +0 -1
- package/dist/web/public/styles.ba6a9b84.css.br +0 -0
- package/dist/web/public/styles.ba6a9b84.css.gz +0 -0
- package/dist/web/public/terminal-ui.0a7ccc29.js +0 -2
- package/dist/web/public/terminal-ui.0a7ccc29.js.br +0 -0
- 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
|
|
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 `
|
|
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/
|
|
360
|
-
Pi's, grok's and
|
|
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
|
|
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`
|
|
424
|
-
|
|
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`
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
105
|
-
per-user cap
|
|
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".
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
|
591
|
-
makes it a bad channel for a spec, a diff or a file list. The
|
|
592
|
-
one, and for a local or docker case you are on the same
|
|
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
|
|
603
|
-
move, and it makes the marker **split by construction**: the token lives in the
|
|
604
|
-
never in the line you type, so the echo of your own keystrokes cannot match it.
|
|
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
|