aicodeman 1.35.0 → 1.41.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 +33 -7
- package/dist/attachment-registry.d.ts +6 -0
- package/dist/attachment-registry.d.ts.map +1 -1
- package/dist/attachment-registry.js +9 -3
- package/dist/attachment-registry.js.map +1 -1
- package/dist/cli-agent.d.ts +225 -0
- package/dist/cli-agent.d.ts.map +1 -0
- package/dist/cli-agent.js +767 -0
- package/dist/cli-agent.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -32
- package/dist/cli.js.map +1 -1
- package/dist/codeman-credentials.d.ts +27 -0
- package/dist/codeman-credentials.d.ts.map +1 -0
- package/dist/codeman-credentials.js +66 -0
- package/dist/codeman-credentials.js.map +1 -0
- package/dist/config/cli-registry/patterns.d.ts +6 -0
- package/dist/config/cli-registry/patterns.d.ts.map +1 -1
- package/dist/config/cli-registry/patterns.js +13 -0
- package/dist/config/cli-registry/patterns.js.map +1 -1
- package/dist/config/cli-registry/schema.d.ts +15 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +63 -2
- 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 +180 -7
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +105 -7
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/deepseek-route-config.d.ts +110 -0
- package/dist/deepseek-route-config.d.ts.map +1 -0
- package/dist/deepseek-route-config.js +477 -0
- package/dist/deepseek-route-config.js.map +1 -0
- package/dist/git-clone.d.ts.map +1 -1
- package/dist/git-clone.js +4 -0
- package/dist/git-clone.js.map +1 -1
- package/dist/git-workspace-status.d.ts +31 -5
- package/dist/git-workspace-status.d.ts.map +1 -1
- package/dist/git-workspace-status.js +49 -29
- package/dist/git-workspace-status.js.map +1 -1
- package/dist/image-watcher.d.ts.map +1 -1
- package/dist/image-watcher.js +6 -2
- package/dist/image-watcher.js.map +1 -1
- package/dist/mcp-sync-targets.d.ts +34 -0
- package/dist/mcp-sync-targets.d.ts.map +1 -0
- package/dist/mcp-sync-targets.js +55 -0
- package/dist/mcp-sync-targets.js.map +1 -0
- package/dist/mcp-sync.d.ts +2 -1
- package/dist/mcp-sync.d.ts.map +1 -1
- package/dist/mcp-sync.js +62 -1
- package/dist/mcp-sync.js.map +1 -1
- package/dist/model-config-resolvers.d.ts +29 -0
- package/dist/model-config-resolvers.d.ts.map +1 -0
- package/dist/model-config-resolvers.js +34 -0
- package/dist/model-config-resolvers.js.map +1 -0
- package/dist/session-display-model.d.ts +110 -0
- package/dist/session-display-model.d.ts.map +1 -0
- package/dist/session-display-model.js +154 -0
- package/dist/session-display-model.js.map +1 -0
- package/dist/session.d.ts +145 -8
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +290 -39
- package/dist/session.js.map +1 -1
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +29 -6
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/templates/case-template.md +2 -0
- package/dist/tmux-manager.d.ts +5 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +47 -22
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tui/tui-client.d.ts +3 -17
- package/dist/tui/tui-client.d.ts.map +1 -1
- package/dist/tui/tui-client.js +3 -44
- package/dist/tui/tui-client.js.map +1 -1
- package/dist/types/session.d.ts +28 -1
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/types/tools.d.ts +1 -1
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/deepseek-cli-resolver.d.ts +8 -0
- package/dist/utils/deepseek-cli-resolver.d.ts.map +1 -1
- package/dist/utils/deepseek-cli-resolver.js +18 -2
- package/dist/utils/deepseek-cli-resolver.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/process-exit-wait.d.ts +40 -0
- package/dist/utils/process-exit-wait.d.ts.map +1 -0
- package/dist/utils/process-exit-wait.js +68 -0
- package/dist/utils/process-exit-wait.js.map +1 -0
- package/dist/web/launch-defaults.d.ts +22 -0
- package/dist/web/launch-defaults.d.ts.map +1 -0
- package/dist/web/launch-defaults.js +46 -0
- package/dist/web/launch-defaults.js.map +1 -0
- package/dist/web/paste-image-gc.d.ts +46 -6
- package/dist/web/paste-image-gc.d.ts.map +1 -1
- package/dist/web/paste-image-gc.js +106 -32
- package/dist/web/paste-image-gc.js.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.6f8552e1.js +43 -0
- package/dist/web/public/app.6f8552e1.js.br +0 -0
- package/dist/web/public/app.6f8552e1.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/{constants.d95fade9.js → constants.bc9c1f63.js} +1276 -127
- package/dist/web/public/constants.bc9c1f63.js.br +0 -0
- package/dist/web/public/constants.bc9c1f63.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js +491 -43
- package/dist/web/public/entrance-animations.js.br +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/git-status-ui.js +55 -9
- package/dist/web/public/git-status-ui.js.br +0 -0
- package/dist/web/public/git-status-ui.js.gz +0 -0
- package/dist/web/public/home-sessions.js +13 -9
- package/dist/web/public/home-sessions.js.br +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.a9840ea2.js +2 -0
- package/dist/web/public/i18n.a9840ea2.js.br +0 -0
- package/dist/web/public/i18n.a9840ea2.js.gz +0 -0
- package/dist/web/public/{image-input.a216cf9e.js → image-input.e00471c6.js} +21 -9
- package/dist/web/public/image-input.e00471c6.js.br +0 -0
- package/dist/web/public/image-input.e00471c6.js.gz +0 -0
- package/dist/web/public/index.html +250 -59
- 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.c1e7c7b7.js.gz +0 -0
- package/dist/web/public/{mobile-handlers.23a85db1.js → mobile-handlers.0ef9c311.js} +20 -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-ime-preview.2dbaf262.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.111b187d.css +1 -0
- package/dist/web/public/mobile.111b187d.css.br +0 -0
- package/dist/web/public/mobile.111b187d.css.gz +0 -0
- package/dist/web/public/{notification-manager.50bb87d8.js → notification-manager.feb82c04.js} +19 -2
- package/dist/web/public/notification-manager.feb82c04.js.br +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.6a5898d9.js → panels-ui.71846fcb.js} +4 -4
- package/dist/web/public/panels-ui.71846fcb.js.br +0 -0
- package/dist/web/public/panels-ui.71846fcb.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.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
- package/dist/web/public/session-lineage.js +229 -86
- package/dist/web/public/session-lineage.js.br +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/session-ui.f731602c.js +100 -0
- package/dist/web/public/session-ui.f731602c.js.br +0 -0
- package/dist/web/public/session-ui.f731602c.js.gz +0 -0
- package/dist/web/public/settings-ui.4e33390f.js +97 -0
- package/dist/web/public/settings-ui.4e33390f.js.br +0 -0
- package/dist/web/public/settings-ui.4e33390f.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview-worker.js +290 -0
- package/dist/web/public/spreadsheet-preview-worker.js.br +0 -0
- package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview.af82fa2f.js +555 -0
- package/dist/web/public/spreadsheet-preview.af82fa2f.js.br +0 -0
- package/dist/web/public/spreadsheet-preview.af82fa2f.js.gz +0 -0
- package/dist/web/public/spreadsheet-xlsx-core.js +1006 -0
- package/dist/web/public/spreadsheet-xlsx-core.js.br +0 -0
- package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
- package/dist/web/public/styles.81a72906.css +1 -0
- package/dist/web/public/styles.81a72906.css.br +0 -0
- package/dist/web/public/styles.81a72906.css.gz +0 -0
- package/dist/web/public/{subagent-windows.e6ca799f.js → subagent-windows.07277a58.js} +7 -5
- package/dist/web/public/subagent-windows.07277a58.js.br +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.065fcba4.js.gz +0 -0
- package/dist/web/public/{tab-rail-resize.94cd59f0.js → tab-rail-resize.a5867793.js} +1 -1
- package/dist/web/public/tab-rail-resize.a5867793.js.br +0 -0
- package/dist/web/public/{tab-rail-resize.94cd59f0.js.gz → tab-rail-resize.a5867793.js.gz} +0 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js +1 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.br +0 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
- package/dist/web/public/terminal-split.js +146 -649
- package/dist/web/public/terminal-split.js.br +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-tile.js +1688 -0
- 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.b7267005.js +2 -0
- package/dist/web/public/terminal-ui.b7267005.js.br +0 -0
- package/dist/web/public/terminal-ui.b7267005.js.gz +0 -0
- package/dist/web/public/tile-grid.js +2895 -0
- 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 +9 -6
- package/dist/web/public/ultracode-windows.js.br +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 +44 -0
- package/dist/web/public/vendor/exceljs.min.js.br +0 -0
- package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
- package/dist/web/public/vendor/fflate.min.js +1 -0
- package/dist/web/public/vendor/fflate.min.js.br +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 +4 -0
- package/dist/web/public/vendor/xterm-zerolag-input.0b69623c.js.br +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.c4b51eb6.js → voice-input.2342c37b.js} +64 -10
- package/dist/web/public/voice-input.2342c37b.js.br +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 +9 -1
- package/dist/web/public/webview-tabs.js.br +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/routes/cli-registry-routes.d.ts +23 -4
- package/dist/web/routes/cli-registry-routes.d.ts.map +1 -1
- package/dist/web/routes/cli-registry-routes.js +95 -8
- package/dist/web/routes/cli-registry-routes.js.map +1 -1
- package/dist/web/routes/file-routes.d.ts +7 -0
- package/dist/web/routes/file-routes.d.ts.map +1 -1
- package/dist/web/routes/file-routes.js +34 -4
- package/dist/web/routes/file-routes.js.map +1 -1
- package/dist/web/routes/git-status-routes.d.ts.map +1 -1
- package/dist/web/routes/git-status-routes.js +33 -6
- package/dist/web/routes/git-status-routes.js.map +1 -1
- package/dist/web/routes/mcp-sync-routes.d.ts +7 -2
- package/dist/web/routes/mcp-sync-routes.d.ts.map +1 -1
- package/dist/web/routes/mcp-sync-routes.js +10 -3
- package/dist/web/routes/mcp-sync-routes.js.map +1 -1
- package/dist/web/routes/reboot-restore-routes.js +1 -1
- package/dist/web/routes/reboot-restore-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +18 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +154 -69
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/status-telemetry-routes.d.ts +3 -0
- package/dist/web/routes/status-telemetry-routes.d.ts.map +1 -1
- package/dist/web/routes/status-telemetry-routes.js +12 -0
- package/dist/web/routes/status-telemetry-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +13 -0
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +30 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +43 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +6 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +47 -21
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-listener-wiring.d.ts +1 -0
- package/dist/web/session-listener-wiring.d.ts.map +1 -1
- package/dist/web/session-listener-wiring.js +11 -0
- package/dist/web/session-listener-wiring.js.map +1 -1
- package/package.json +6 -4
- package/scripts/postinstall.js +16 -0
- package/skills/codeman/SKILL.md +6 -0
- package/README.zh-CN.md +0 -1139
- package/dist/web/public/app.b9516c7b.js +0 -43
- package/dist/web/public/app.b9516c7b.js.br +0 -0
- package/dist/web/public/app.b9516c7b.js.gz +0 -0
- package/dist/web/public/constants.d95fade9.js.br +0 -0
- package/dist/web/public/constants.d95fade9.js.gz +0 -0
- package/dist/web/public/i18n.52f5b7cc.js +0 -1
- package/dist/web/public/i18n.52f5b7cc.js.br +0 -0
- package/dist/web/public/i18n.52f5b7cc.js.gz +0 -0
- package/dist/web/public/image-input.a216cf9e.js.br +0 -0
- package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
- package/dist/web/public/mobile-handlers.23a85db1.js.br +0 -0
- package/dist/web/public/mobile-handlers.23a85db1.js.gz +0 -0
- package/dist/web/public/mobile.1aa4952d.css +0 -1
- package/dist/web/public/mobile.1aa4952d.css.br +0 -0
- package/dist/web/public/mobile.1aa4952d.css.gz +0 -0
- package/dist/web/public/notification-manager.50bb87d8.js.br +0 -0
- package/dist/web/public/notification-manager.50bb87d8.js.gz +0 -0
- package/dist/web/public/panels-ui.6a5898d9.js.br +0 -0
- package/dist/web/public/panels-ui.6a5898d9.js.gz +0 -0
- package/dist/web/public/session-ui.6bddf916.js +0 -89
- package/dist/web/public/session-ui.6bddf916.js.br +0 -0
- package/dist/web/public/session-ui.6bddf916.js.gz +0 -0
- package/dist/web/public/settings-ui.6e798b7b.js +0 -97
- package/dist/web/public/settings-ui.6e798b7b.js.br +0 -0
- package/dist/web/public/settings-ui.6e798b7b.js.gz +0 -0
- package/dist/web/public/styles.2d175c60.css +0 -1
- package/dist/web/public/styles.2d175c60.css.br +0 -0
- package/dist/web/public/styles.2d175c60.css.gz +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.br +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.94cd59f0.js.br +0 -0
- package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js +0 -1
- package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.br +0 -0
- package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
- package/dist/web/public/terminal-ui.a4535311.js +0 -2
- package/dist/web/public/terminal-ui.a4535311.js.br +0 -0
- package/dist/web/public/terminal-ui.a4535311.js.gz +0 -0
- package/dist/web/public/upload.html +0 -155
- package/dist/web/public/upload.html.br +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js +0 -4
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.br +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.bbb5f84c.js.gz +0 -0
- package/dist/web/public/voice-input.c4b51eb6.js.br +0 -0
- package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
|
@@ -239,7 +239,7 @@ export function registerRebootRestoreRoutes(app, ctx) {
|
|
|
239
239
|
// count this session's historical tokens into the lifetime totals, demote
|
|
240
240
|
// a pinned record to `stopped` (which this pass reads as an intentional
|
|
241
241
|
// kill, making the session permanently unrestorable) and delete the
|
|
242
|
-
// workspace's `.
|
|
242
|
+
// workspace's `.codeman-uploads`. This undoes only the construction.
|
|
243
243
|
await ctx
|
|
244
244
|
.discardPartiallyBuiltSession(entry.sessionId)
|
|
245
245
|
.catch((discardErr) => console.error(`[reboot-restore] discarding a failed rebuild failed: ${getErrorMessage(discardErr)}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reboot-restore-routes.js","sourceRoot":"","sources":["../../../src/web/routes/reboot-restore-routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reboot-restore-routes.js","sourceRoot":"","sources":["../../../src/web/routes/reboot-restore-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,24 @@ import { type SessionMode, type CodexConfig, type GeminiConfig, type Antigravity
|
|
|
8
8
|
import { RemoteWakeRegistry } from '../../remote-wake.js';
|
|
9
9
|
import { clampEnvOverridesForOwner } from '../../session-env-clamp.js';
|
|
10
10
|
import type { SessionPort, EventPort, ConfigPort, InfraPort, AuthPort, TabLayoutPort } from '../ports/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* The replay half of the strip parity triangle: what `_handleTerminalOutput` (session.ts)
|
|
13
|
+
* removes from the live stream, removed again from a stored buffer before it is replayed,
|
|
14
|
+
* because a buffer recorded before the live-side strip existed (or by an older server)
|
|
15
|
+
* still carries the sequences, and one replayed enable is enough to re-park xterm.
|
|
16
|
+
*
|
|
17
|
+
* - `strip-full` (claude/codex/gemini): alt-screen toggles, `3J` and mouse DECSETs.
|
|
18
|
+
* xterm obeys the toggles by switching to its scrollback-less alt buffer and wiping
|
|
19
|
+
* saved lines, so history disappeared on tab switch.
|
|
20
|
+
* - `strip-mux-and-mouse` (opencode, tmux-backed): alt-screen toggles and mouse DECSETs.
|
|
21
|
+
* A replayed tracking enable parks xterm in report mode, where a drag goes to the CLI
|
|
22
|
+
* instead of selecting text (and Ctrl+C without a selection is opencode's app_exit).
|
|
23
|
+
* `3J` stays: a TUI is not a `clear` consumer.
|
|
24
|
+
* - every other mode, tmux-backed: tmux's own client smcup only (#205).
|
|
25
|
+
*
|
|
26
|
+
* Exported so the parity with the live strip is a test (claude-scrollback-strip.test.ts).
|
|
27
|
+
*/
|
|
28
|
+
export declare function stripReplayBuffer(buffer: string, mode: SessionMode, usesMux: boolean): string;
|
|
11
29
|
/**
|
|
12
30
|
* Strip redundant Ink spinner/status-bar redraw frames from the terminal buffer.
|
|
13
31
|
* Ink (Claude Code's TUI) uses absolute cursor positioning (CSI n d = VPA) to animate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAS7D,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/session-routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAS7D,OAAO,EAOL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAqDxB,OAAO,EACL,kBAAkB,EAKnB,MAAM,sBAAsB,CAAC;AAwB9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAqCvE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA8EhH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAY7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0C1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAmCvE;AAwDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAiBhF;AAGD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAoED;;;;;;;GAOG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,CAAC,EAAE,YAAY,EAC3B,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,QAAQ,CAAC,EAAE,QAAQ,EACnB,UAAU,CAAC,EAAE,UAAU,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC;IACT,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,YAAY,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;CAC5C,CAAC,CAiBD;AAED,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,kCAA4B,CAAC;AA8LpE,2FAA2F;AAC3F,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AA2ED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,GAAG,SAAS,GAC/B,SAAS,GAAG,SAAS,CAYvB;AAoCD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa;AAChF,oFAAoF;AACpF,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAO,GAChD,kBAAkB,CA24IpB"}
|
|
@@ -11,7 +11,7 @@ import fs from 'node:fs/promises';
|
|
|
11
11
|
import { randomBytes, randomUUID } from 'node:crypto';
|
|
12
12
|
import { performance } from 'node:perf_hooks';
|
|
13
13
|
import { ApiErrorCode, createErrorResponse, getErrorMessage, } from '../../types.js';
|
|
14
|
-
import { Session, cliTakesSessionModel, isAltScreenStripMode, isExternalCliMode, isMuxAltScreenOnlyStripMode, } from '../../session.js';
|
|
14
|
+
import { Session, cliTakesSessionModel, isAltScreenStripMode, isExternalCliMode, isMuxAltScreenOnlyStripMode, isMuxMouseStripMode, } from '../../session.js';
|
|
15
15
|
import { SseEvent } from '../sse-events.js';
|
|
16
16
|
import { webviewCapabilities } from '../../webview-capabilities.js';
|
|
17
17
|
import { CreateSessionSchema, SessionNameSchema, SessionColorSchema, RunPromptSchema, SessionInputWithLimitSchema, ResizeSchema, AutoClearSchema, AutoCompactSchema, AutoResumeSchema, PinSessionSchema, ImageWatcherSchema, FlickerFilterSchema, QuickRunSchema, QuickStartSchema, InteractiveStartSchema, SessionOrderUpdateSchema, SessionWaitQuerySchema, SessionWaitOutputQuerySchema, CustomModelSelectionSchema, } from '../schemas.js';
|
|
@@ -30,6 +30,7 @@ import { canUsernameRunPrivilegedCommands, resolveClaudeModeForUsername } from '
|
|
|
30
30
|
import { clampEnvOverridesForOwner } from '../../session-env-clamp.js';
|
|
31
31
|
import { enabledClis, getCli } from '../../config/cli-registry/registry.js';
|
|
32
32
|
import { resolveCliLaunchError } from '../../utils/cli-launcher.js';
|
|
33
|
+
import { applyLaunchDefaults } from '../launch-defaults.js';
|
|
33
34
|
import { legacyConfigForMode } from '../../session-cli-registry-bridge.js';
|
|
34
35
|
import { isMultiUserMode } from '../../config/multiuser.js';
|
|
35
36
|
import { AUTH_COOKIE_NAME } from '../middleware/auth.js';
|
|
@@ -54,6 +55,7 @@ import { scanCodexSessionsHistory, codexThreadBySessionId } from '../../codex-tr
|
|
|
54
55
|
import { getLastTranscriptResponse, isExternalCliTranscriptMode, parseExternalCliTranscript, selectLastAnsweredTurn, } from '../response-viewer-transcript.js';
|
|
55
56
|
import { readDeepSeekLastResponse } from '../../deepseek-transcript.js';
|
|
56
57
|
import { appendClaudeCustomTitle } from '../../claude-session-title.js';
|
|
58
|
+
import { UPLOADS_DIR } from '../paste-image-gc.js';
|
|
57
59
|
// Path to linked-cases registry (same file used by case-routes resolveCasePath)
|
|
58
60
|
const LINKED_CASES_FILE = dataPath('linked-cases.json');
|
|
59
61
|
const CODEMAN_CONFIG_DIR = getDataDir();
|
|
@@ -88,6 +90,37 @@ const ERASE_SCROLLBACK_PATTERN = /\x1b\[3J/g;
|
|
|
88
90
|
// strip existed can still carry them; strip on replay for parity.
|
|
89
91
|
// eslint-disable-next-line no-control-regex
|
|
90
92
|
const MOUSE_TRACKING_PATTERN = /\x1b\[\?(?:1000|1001|1002|1003|1005|1006|1007)[hl]/g;
|
|
93
|
+
/**
|
|
94
|
+
* The replay half of the strip parity triangle: what `_handleTerminalOutput` (session.ts)
|
|
95
|
+
* removes from the live stream, removed again from a stored buffer before it is replayed,
|
|
96
|
+
* because a buffer recorded before the live-side strip existed (or by an older server)
|
|
97
|
+
* still carries the sequences, and one replayed enable is enough to re-park xterm.
|
|
98
|
+
*
|
|
99
|
+
* - `strip-full` (claude/codex/gemini): alt-screen toggles, `3J` and mouse DECSETs.
|
|
100
|
+
* xterm obeys the toggles by switching to its scrollback-less alt buffer and wiping
|
|
101
|
+
* saved lines, so history disappeared on tab switch.
|
|
102
|
+
* - `strip-mux-and-mouse` (opencode, tmux-backed): alt-screen toggles and mouse DECSETs.
|
|
103
|
+
* A replayed tracking enable parks xterm in report mode, where a drag goes to the CLI
|
|
104
|
+
* instead of selecting text (and Ctrl+C without a selection is opencode's app_exit).
|
|
105
|
+
* `3J` stays: a TUI is not a `clear` consumer.
|
|
106
|
+
* - every other mode, tmux-backed: tmux's own client smcup only (#205).
|
|
107
|
+
*
|
|
108
|
+
* Exported so the parity with the live strip is a test (claude-scrollback-strip.test.ts).
|
|
109
|
+
*/
|
|
110
|
+
export function stripReplayBuffer(buffer, mode, usesMux) {
|
|
111
|
+
if (isAltScreenStripMode(mode)) {
|
|
112
|
+
return buffer
|
|
113
|
+
.replace(ALT_SCREEN_TOGGLE_PATTERN, '')
|
|
114
|
+
.replace(ERASE_SCROLLBACK_PATTERN, '')
|
|
115
|
+
.replace(MOUSE_TRACKING_PATTERN, '');
|
|
116
|
+
}
|
|
117
|
+
if (isMuxMouseStripMode(mode, usesMux)) {
|
|
118
|
+
return buffer.replace(ALT_SCREEN_TOGGLE_PATTERN, '').replace(MOUSE_TRACKING_PATTERN, '');
|
|
119
|
+
}
|
|
120
|
+
if (isMuxAltScreenOnlyStripMode(mode, usesMux))
|
|
121
|
+
return buffer.replace(ALT_SCREEN_TOGGLE_PATTERN, '');
|
|
122
|
+
return buffer;
|
|
123
|
+
}
|
|
91
124
|
/**
|
|
92
125
|
* Strip redundant Ink spinner/status-bar redraw frames from the terminal buffer.
|
|
93
126
|
* Ink (Claude Code's TUI) uses absolute cursor positioning (CSI n d = VPA) to animate
|
|
@@ -190,6 +223,58 @@ export function imageMagicMatchesExt(data, ext) {
|
|
|
190
223
|
return false;
|
|
191
224
|
}
|
|
192
225
|
}
|
|
226
|
+
/**
|
|
227
|
+
* Create or re-verify `{workingDir}/.codeman-uploads` for a prompt upload, or
|
|
228
|
+
* null when something other than a regular directory sits there. An agent or
|
|
229
|
+
* postinstall script could plant `.codeman-uploads -> ~/.ssh/` and redirect
|
|
230
|
+
* future writes outside workingDir: lstat (not stat) sees the symlink itself,
|
|
231
|
+
* and mkdir without `recursive` does not follow one for the leaf either;
|
|
232
|
+
* O_EXCL|O_NOFOLLOW on the file open makes the write itself symlink-safe.
|
|
233
|
+
* The folder ignores itself: a `.gitignore` of `*`, written once with O_EXCL,
|
|
234
|
+
* so the user's repository never sees uploads, their own ignore file is never
|
|
235
|
+
* touched, and a file already there is theirs and stays as it is.
|
|
236
|
+
*/
|
|
237
|
+
async function ensureUploadDir(workingDir) {
|
|
238
|
+
// workingDir is guaranteed to exist (live session).
|
|
239
|
+
const uploadDir = join(workingDir, UPLOADS_DIR);
|
|
240
|
+
try {
|
|
241
|
+
const dirStat = await fs.lstat(uploadDir);
|
|
242
|
+
if (dirStat.isSymbolicLink() || !dirStat.isDirectory())
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
if (err.code !== 'ENOENT')
|
|
247
|
+
throw err;
|
|
248
|
+
try {
|
|
249
|
+
await fs.mkdir(uploadDir);
|
|
250
|
+
}
|
|
251
|
+
catch (mkErr) {
|
|
252
|
+
// Concurrent uploads (a batch of photos) race to create the dir — the
|
|
253
|
+
// losers get EEXIST. Treat an already-present REAL directory as success,
|
|
254
|
+
// but re-verify it isn't a symlink a racing actor planted.
|
|
255
|
+
if (mkErr.code !== 'EEXIST')
|
|
256
|
+
throw mkErr;
|
|
257
|
+
const raceStat = await fs.lstat(uploadDir);
|
|
258
|
+
if (raceStat.isSymbolicLink() || !raceStat.isDirectory())
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const ignoreFile = join(uploadDir, '.gitignore');
|
|
263
|
+
try {
|
|
264
|
+
// 'wx' = O_CREAT|O_EXCL, which also fails on a symlink at the path.
|
|
265
|
+
await fs.writeFile(ignoreFile, '*\n', { flag: 'wx' });
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
if (err.code === 'EEXIST')
|
|
269
|
+
return uploadDir;
|
|
270
|
+
// The create can succeed before the write fails (ENOSPC): an empty ignore
|
|
271
|
+
// file would read as the user's on the next upload, so take it back; its own
|
|
272
|
+
// failure must not replace the cause.
|
|
273
|
+
await fs.rm(ignoreFile, { force: true }).catch(() => { });
|
|
274
|
+
throw err;
|
|
275
|
+
}
|
|
276
|
+
return uploadDir;
|
|
277
|
+
}
|
|
193
278
|
// Per-(IP, sessionId) token bucket for paste-image. 30 requests/minute.
|
|
194
279
|
// Bucket map entries are pruned when they drift > 1h stale to bound memory
|
|
195
280
|
// against a flood of unique IP keys.
|
|
@@ -593,6 +678,20 @@ export function resolveOmpConfigForCreate(mode, workingDir, ompConfig) {
|
|
|
593
678
|
}
|
|
594
679
|
return resolvedId ? { ...ompConfig, resumeSessionId: resolvedId } : ompConfig;
|
|
595
680
|
}
|
|
681
|
+
/**
|
|
682
|
+
* The tmux history lines a full capture may read (`capture-pane -S -<n>`): the
|
|
683
|
+
* optional `lines` query parameter, an integer of at least 1, never more than
|
|
684
|
+
* the configured history limit; absent or malformed, the limit itself, as
|
|
685
|
+
* before. A grid tile sends its own scrollback size: its xterm keeps no more
|
|
686
|
+
* than that, while a capture of the whole history (tens of thousands of lines,
|
|
687
|
+
* cut to `tail` only afterwards) is synchronous work on this event loop.
|
|
688
|
+
*/
|
|
689
|
+
function captureHistoryLines(raw, historyLimit) {
|
|
690
|
+
if (typeof raw !== 'string' || !/^\d{1,9}$/.test(raw))
|
|
691
|
+
return historyLimit;
|
|
692
|
+
const lines = Number(raw);
|
|
693
|
+
return lines >= 1 ? Math.min(lines, historyLimit) : historyLimit;
|
|
694
|
+
}
|
|
596
695
|
/**
|
|
597
696
|
* `RemoteHost` → the wake registry's host shape. They differ in one field name only
|
|
598
697
|
* (`id` in host config vs `hostId` on a session's `remote`), but the rename is load-
|
|
@@ -880,6 +979,10 @@ options = {}) {
|
|
|
880
979
|
const globalNice = await ctx.getGlobalNiceConfig();
|
|
881
980
|
const modelConfig = await ctx.getModelConfig();
|
|
882
981
|
const mode = body.mode || 'claude';
|
|
982
|
+
// Synced App Settings launch defaults (capabilities.launchDefaults, codex's model and
|
|
983
|
+
// effort today) fill the CLI's own config object where the caller left it unset.
|
|
984
|
+
// Local launches only: a remote attach runs whatever the remote pane already runs.
|
|
985
|
+
const launchBody = remote ? body : await applyLaunchDefaults(mode, body);
|
|
883
986
|
// Where a model override comes from is a capability, and the three answers are
|
|
884
987
|
// genuinely different mechanisms:
|
|
885
988
|
// 'flag' — the CLI takes --model, so read the value the caller sent
|
|
@@ -893,7 +996,7 @@ options = {}) {
|
|
|
893
996
|
// (docs/deepseek-integration.md). Both get nothing.
|
|
894
997
|
const modelSource = getCli(mode)?.capabilities.model;
|
|
895
998
|
const model = modelSource?.source === 'flag'
|
|
896
|
-
? legacyConfigForMode(mode,
|
|
999
|
+
? legacyConfigForMode(mode, launchBody)?.[modelSource.param ?? 'model']
|
|
897
1000
|
: modelSource?.source === 'claude-settings-file'
|
|
898
1001
|
? body.model || modelConfig?.defaultModel || undefined
|
|
899
1002
|
: undefined;
|
|
@@ -901,7 +1004,7 @@ options = {}) {
|
|
|
901
1004
|
// Section 6.3: force non-granted users to a classifier-guarded mode.
|
|
902
1005
|
const effectiveClaudeMode = await resolveClaudeModeForUsername(claudeModeConfig.claudeMode, owner);
|
|
903
1006
|
// Section 6.3: clamp Codex/Gemini/Antigravity bypass switches for a non-granted owner (no-op single-user/granted).
|
|
904
|
-
const { codexConfig: gatedCodexConfig, geminiConfig: gatedGeminiConfig, antigravityConfig: gatedAntigravityConfig, piConfig: gatedPiConfig, grokConfig: gatedGrokConfig, deepSeekConfig: gatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner,
|
|
1007
|
+
const { codexConfig: gatedCodexConfig, geminiConfig: gatedGeminiConfig, antigravityConfig: gatedAntigravityConfig, piConfig: gatedPiConfig, grokConfig: gatedGrokConfig, deepSeekConfig: gatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner, launchBody.codexConfig, launchBody.geminiConfig, launchBody.antigravityConfig, launchBody.piConfig, launchBody.grokConfig, launchBody.deepSeekConfig);
|
|
905
1008
|
const terminalHistoryConfig = await ctx.getTerminalHistoryConfig();
|
|
906
1009
|
const session = new Session({
|
|
907
1010
|
workingDir,
|
|
@@ -913,14 +1016,14 @@ options = {}) {
|
|
|
913
1016
|
model,
|
|
914
1017
|
claudeMode: effectiveClaudeMode,
|
|
915
1018
|
allowedTools: claudeModeConfig.allowedTools,
|
|
916
|
-
openCodeConfig: mode === 'opencode' ?
|
|
1019
|
+
openCodeConfig: mode === 'opencode' ? launchBody.openCodeConfig : undefined,
|
|
917
1020
|
codexConfig: mode === 'codex' ? gatedCodexConfig : undefined,
|
|
918
1021
|
geminiConfig: mode === 'gemini' ? gatedGeminiConfig : undefined,
|
|
919
1022
|
antigravityConfig: mode === 'antigravity' ? gatedAntigravityConfig : undefined,
|
|
920
1023
|
piConfig: mode === 'pi' ? gatedPiConfig : undefined,
|
|
921
1024
|
grokConfig: mode === 'grok' ? gatedGrokConfig : undefined,
|
|
922
1025
|
deepSeekConfig: mode === 'deepseek' ? gatedDeepSeekConfig : undefined,
|
|
923
|
-
ompConfig: resolveOmpConfigForCreate(mode, workingDir,
|
|
1026
|
+
ompConfig: resolveOmpConfigForCreate(mode, workingDir, launchBody.ompConfig),
|
|
924
1027
|
resumeSessionId: validatedResumeId,
|
|
925
1028
|
envOverrides: await clampEnvOverridesForOwner(owner, body.envOverrides),
|
|
926
1029
|
effort: body.effort,
|
|
@@ -2594,8 +2697,14 @@ options = {}) {
|
|
|
2594
2697
|
// single reason: `capturedGeometry` comes BACK on it, and the response has
|
|
2595
2698
|
// to tell the client what size the frame it is about to render was built
|
|
2596
2699
|
// for. See PaneCaptureOptions.capturedGeometry.
|
|
2700
|
+
// `lines` bounds only the history a FULL capture reads; the visible-frame
|
|
2701
|
+
// path reads no history and is untouched by it.
|
|
2597
2702
|
const captureOpts = isFullReload
|
|
2598
|
-
? {
|
|
2703
|
+
? {
|
|
2704
|
+
fullHistory: true,
|
|
2705
|
+
historyLimitLines: captureHistoryLines(query.lines, tmuxHistoryLimit),
|
|
2706
|
+
maxCaptureBytes: terminalBufferMaxBytes,
|
|
2707
|
+
}
|
|
2599
2708
|
: {};
|
|
2600
2709
|
const liveMuxBuffer = muxName && typeof ctx.mux.captureActivePaneBuffer === 'function'
|
|
2601
2710
|
? ctx.mux.captureActivePaneBuffer(muxName, captureOpts)
|
|
@@ -2667,22 +2776,9 @@ options = {}) {
|
|
|
2667
2776
|
let strippedBuffer = isFullCapture || getCli(session.mode)?.capabilities.stripInkBloat === false
|
|
2668
2777
|
? rawBuffer
|
|
2669
2778
|
: stripInkRedrawBloat(rawBuffer);
|
|
2670
|
-
//
|
|
2671
|
-
//
|
|
2672
|
-
|
|
2673
|
-
// switch. Same gate as the live-stream strip in session.ts.
|
|
2674
|
-
if (isAltScreenStripMode(session.mode)) {
|
|
2675
|
-
strippedBuffer = strippedBuffer
|
|
2676
|
-
.replace(ALT_SCREEN_TOGGLE_PATTERN, '')
|
|
2677
|
-
.replace(ERASE_SCROLLBACK_PATTERN, '')
|
|
2678
|
-
.replace(MOUSE_TRACKING_PATTERN, '');
|
|
2679
|
-
}
|
|
2680
|
-
else if (isMuxAltScreenOnlyStripMode(session.mode, session.usesMux)) {
|
|
2681
|
-
// tmux-backed shell/opencode/antigravity: drop tmux's own client smcup only.
|
|
2682
|
-
// A byte buffer recorded before the live-side strip existed can still carry
|
|
2683
|
-
// it, and one replayed `\x1b[?1049h` re-parks xterm in the alt buffer (#205).
|
|
2684
|
-
strippedBuffer = strippedBuffer.replace(ALT_SCREEN_TOGGLE_PATTERN, '');
|
|
2685
|
-
}
|
|
2779
|
+
// Same strip as the live stream (session.ts), so a buffer recorded before the
|
|
2780
|
+
// live-side strip existed cannot re-park xterm on replay. See stripReplayBuffer.
|
|
2781
|
+
strippedBuffer = stripReplayBuffer(strippedBuffer, session.mode, session.usesMux);
|
|
2686
2782
|
if (tailBytes > 0 && strippedBuffer.length > tailBytes) {
|
|
2687
2783
|
// Fast path: tail from the end, skip expensive banner search on full 2MB buffer.
|
|
2688
2784
|
// Banner is near the top and gets discarded by tail anyway.
|
|
@@ -3295,28 +3391,37 @@ options = {}) {
|
|
|
3295
3391
|
// Apply global Nice priority config and model config from settings
|
|
3296
3392
|
const niceConfig = await ctx.getGlobalNiceConfig();
|
|
3297
3393
|
const qsModelConfig = await ctx.getModelConfig();
|
|
3394
|
+
// Synced App Settings launch defaults, as on the create path: local launches only, so
|
|
3395
|
+
// never a remote or Docker case, and never a custom model endpoint launch.
|
|
3396
|
+
const qsRequestConfigs = {
|
|
3397
|
+
openCodeConfig,
|
|
3398
|
+
codexConfig,
|
|
3399
|
+
geminiConfig,
|
|
3400
|
+
antigravityConfig,
|
|
3401
|
+
piConfig,
|
|
3402
|
+
grokConfig,
|
|
3403
|
+
deepSeekConfig,
|
|
3404
|
+
ompConfig,
|
|
3405
|
+
};
|
|
3406
|
+
const qsLaunchConfigs = remote || docker ? qsRequestConfigs : await applyLaunchDefaults(mode, qsRequestConfigs, !!customModel);
|
|
3407
|
+
// ⚠️ The model is read from a bag WITHOUT ompConfig, as it always was here: quick-start
|
|
3408
|
+
// has never taken omp's session model from ompConfig (the create path does). Kept as
|
|
3409
|
+
// found rather than changed in passing.
|
|
3410
|
+
const { ompConfig: qsLaunchOmpConfig, ...qsModelConfigs } = qsLaunchConfigs;
|
|
3298
3411
|
// See the create path for why this is a capability rather than a mode ladder.
|
|
3299
3412
|
const qsModelSource = getCli(mode)?.capabilities.model;
|
|
3300
3413
|
const qsModel = qsModelSource?.source === 'flag'
|
|
3301
|
-
? legacyConfigForMode(mode,
|
|
3302
|
-
openCodeConfig,
|
|
3303
|
-
codexConfig,
|
|
3304
|
-
geminiConfig,
|
|
3305
|
-
antigravityConfig,
|
|
3306
|
-
piConfig,
|
|
3307
|
-
grokConfig,
|
|
3308
|
-
deepSeekConfig,
|
|
3309
|
-
})?.[qsModelSource.param ?? 'model']
|
|
3414
|
+
? legacyConfigForMode(mode, qsModelConfigs)?.[qsModelSource.param ?? 'model']
|
|
3310
3415
|
: qsModelSource?.source === 'claude-settings-file'
|
|
3311
3416
|
? qsModelConfig?.defaultModel || undefined
|
|
3312
3417
|
: undefined;
|
|
3313
3418
|
const qsClaudeModeConfig = await ctx.getClaudeModeConfig();
|
|
3314
3419
|
const qsEffectiveClaudeMode = await resolveClaudeModeForUsername(qsClaudeModeConfig.claudeMode, owner);
|
|
3315
3420
|
// Section 6.3: clamp Codex/Gemini/Antigravity bypass switches for a non-granted owner (no-op single-user/granted).
|
|
3316
|
-
const { codexConfig: qsGatedCodexConfig, geminiConfig: qsGatedGeminiConfig, antigravityConfig: qsGatedAntigravityConfig, piConfig: qsGatedPiConfig, grokConfig: qsGatedGrokConfig, deepSeekConfig: qsGatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig);
|
|
3421
|
+
const { codexConfig: qsGatedCodexConfig, geminiConfig: qsGatedGeminiConfig, antigravityConfig: qsGatedAntigravityConfig, piConfig: qsGatedPiConfig, grokConfig: qsGatedGrokConfig, deepSeekConfig: qsGatedDeepSeekConfig, } = await _clampExternalCliBypassForOwner(owner, qsLaunchConfigs.codexConfig, qsLaunchConfigs.geminiConfig, qsLaunchConfigs.antigravityConfig, qsLaunchConfigs.piConfig, qsLaunchConfigs.grokConfig, qsLaunchConfigs.deepSeekConfig);
|
|
3317
3422
|
const qsTerminalHistoryConfig = await ctx.getTerminalHistoryConfig();
|
|
3318
3423
|
const qsGatedEnvOverrides = await clampEnvOverridesForOwner(owner, envOverrides);
|
|
3319
|
-
const qsResolvedOmpConfig = resolveOmpConfigForCreate(mode, resolvedCasePath,
|
|
3424
|
+
const qsResolvedOmpConfig = resolveOmpConfigForCreate(mode, resolvedCasePath, qsLaunchOmpConfig);
|
|
3320
3425
|
// Custom Model Endpoint Profiles, applied AT CREATE TIME (docs/custom-model-endpoints-plan.md)
|
|
3321
3426
|
// rather than via the dedicated restart-in-place route (POST /api/sessions/:id/custom-
|
|
3322
3427
|
// model, still what an ALREADY-RUNNING session uses to switch later): computing the
|
|
@@ -3442,7 +3547,7 @@ options = {}) {
|
|
|
3442
3547
|
claudeMode: qsEffectiveClaudeMode,
|
|
3443
3548
|
allowedTools: qsClaudeModeConfig.allowedTools,
|
|
3444
3549
|
owner,
|
|
3445
|
-
openCodeConfig: mode === 'opencode' ? openCodeConfig : undefined,
|
|
3550
|
+
openCodeConfig: mode === 'opencode' ? qsLaunchConfigs.openCodeConfig : undefined,
|
|
3446
3551
|
codexConfig: mode === 'codex' ? qsGatedCodexConfig : undefined,
|
|
3447
3552
|
geminiConfig: mode === 'gemini' ? qsGatedGeminiConfig : undefined,
|
|
3448
3553
|
antigravityConfig: mode === 'antigravity' ? qsGatedAntigravityConfig : undefined,
|
|
@@ -4505,6 +4610,16 @@ options = {}) {
|
|
|
4505
4610
|
return createErrorResponse(ApiErrorCode.INVALID_INPUT, 'Rate limit exceeded (30 uploads/min per session)');
|
|
4506
4611
|
}
|
|
4507
4612
|
const session = findSessionOrFail(ctx, id, req);
|
|
4613
|
+
// The file lands on THIS host under the session's working directory, which
|
|
4614
|
+
// for a remote (SSH) session is the remote path: the agent there could never
|
|
4615
|
+
// read it, and the write would land in a same-named local directory or fail.
|
|
4616
|
+
// An owned Docker case is fine, its workspace is bind-mounted at the same
|
|
4617
|
+
// absolute path; an adopted container (owned: false) mounts nothing, so its
|
|
4618
|
+
// agent reads the file only if the container exposes that host path.
|
|
4619
|
+
if (session.remote) {
|
|
4620
|
+
reply.code(400);
|
|
4621
|
+
return createErrorResponse(ApiErrorCode.INVALID_INPUT, 'Prompt uploads are not supported for remote (SSH) sessions');
|
|
4622
|
+
}
|
|
4508
4623
|
if (!req.isMultipart()) {
|
|
4509
4624
|
reply.code(400);
|
|
4510
4625
|
return createErrorResponse(ApiErrorCode.INVALID_INPUT, 'Expected multipart/form-data');
|
|
@@ -4594,41 +4709,11 @@ options = {}) {
|
|
|
4594
4709
|
reply.code(415);
|
|
4595
4710
|
return createErrorResponse(ApiErrorCode.INVALID_INPUT, `Image bytes do not match declared type ${ext}`);
|
|
4596
4711
|
}
|
|
4597
|
-
//
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
// O_EXCL|O_NOFOLLOW on the file open so the write itself is symlink-safe.
|
|
4603
|
-
const imageDir = join(session.workingDir, '.claude-images');
|
|
4604
|
-
try {
|
|
4605
|
-
const dirStat = await fs.lstat(imageDir);
|
|
4606
|
-
if (dirStat.isSymbolicLink() || !dirStat.isDirectory()) {
|
|
4607
|
-
reply.code(403);
|
|
4608
|
-
return createErrorResponse(ApiErrorCode.INVALID_INPUT, '.claude-images is not a regular directory');
|
|
4609
|
-
}
|
|
4610
|
-
}
|
|
4611
|
-
catch (err) {
|
|
4612
|
-
if (err.code !== 'ENOENT')
|
|
4613
|
-
throw err;
|
|
4614
|
-
// Non-recursive mkdir: does not follow symlinks for the leaf.
|
|
4615
|
-
// session.workingDir is guaranteed to exist (live session).
|
|
4616
|
-
try {
|
|
4617
|
-
await fs.mkdir(imageDir);
|
|
4618
|
-
}
|
|
4619
|
-
catch (mkErr) {
|
|
4620
|
-
// Concurrent uploads (a batch of photos) race to create .claude-images —
|
|
4621
|
-
// the losers get EEXIST. Treat an already-present REAL directory as
|
|
4622
|
-
// success, but re-verify it isn't a symlink a racing actor planted
|
|
4623
|
-
// (preserve the symlink-safety guarantee above).
|
|
4624
|
-
if (mkErr.code !== 'EEXIST')
|
|
4625
|
-
throw mkErr;
|
|
4626
|
-
const raceStat = await fs.lstat(imageDir);
|
|
4627
|
-
if (raceStat.isSymbolicLink() || !raceStat.isDirectory()) {
|
|
4628
|
-
reply.code(403);
|
|
4629
|
-
return createErrorResponse(ApiErrorCode.INVALID_INPUT, '.claude-images is not a regular directory');
|
|
4630
|
-
}
|
|
4631
|
-
}
|
|
4712
|
+
// {workingDir}/.codeman-uploads/, see ensureUploadDir.
|
|
4713
|
+
const imageDir = await ensureUploadDir(session.workingDir);
|
|
4714
|
+
if (!imageDir) {
|
|
4715
|
+
reply.code(403);
|
|
4716
|
+
return createErrorResponse(ApiErrorCode.INVALID_INPUT, `${UPLOADS_DIR} is not a regular directory`);
|
|
4632
4717
|
}
|
|
4633
4718
|
// Date.now() collides on same-ms uploads from two tabs (last-write wins
|
|
4634
4719
|
// silently). Append 8 hex chars so concurrent pastes get distinct names.
|