aicodeman 1.2.1 → 1.3.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 (232) hide show
  1. package/README.md +264 -90
  2. package/dist/attachment-magic.d.ts +13 -0
  3. package/dist/attachment-magic.d.ts.map +1 -1
  4. package/dist/attachment-magic.js +47 -0
  5. package/dist/attachment-magic.js.map +1 -1
  6. package/dist/attachment-registry.d.ts.map +1 -1
  7. package/dist/attachment-registry.js +13 -2
  8. package/dist/attachment-registry.js.map +1 -1
  9. package/dist/config/buffer-limits.d.ts +2 -3
  10. package/dist/config/buffer-limits.d.ts.map +1 -1
  11. package/dist/config/buffer-limits.js +5 -5
  12. package/dist/config/buffer-limits.js.map +1 -1
  13. package/dist/config/map-limits.d.ts +11 -0
  14. package/dist/config/map-limits.d.ts.map +1 -1
  15. package/dist/config/map-limits.js +11 -0
  16. package/dist/config/map-limits.js.map +1 -1
  17. package/dist/config/server-timing.d.ts +6 -0
  18. package/dist/config/server-timing.d.ts.map +1 -1
  19. package/dist/config/server-timing.js +9 -0
  20. package/dist/config/server-timing.js.map +1 -1
  21. package/dist/config/terminal-history.d.ts +30 -0
  22. package/dist/config/terminal-history.d.ts.map +1 -0
  23. package/dist/config/terminal-history.js +43 -0
  24. package/dist/config/terminal-history.js.map +1 -0
  25. package/dist/cron/cron-input.d.ts +30 -0
  26. package/dist/cron/cron-input.d.ts.map +1 -0
  27. package/dist/cron/cron-input.js +7 -0
  28. package/dist/cron/cron-input.js.map +1 -0
  29. package/dist/cron/cron-service.d.ts +92 -0
  30. package/dist/cron/cron-service.d.ts.map +1 -0
  31. package/dist/cron/cron-service.js +606 -0
  32. package/dist/cron/cron-service.js.map +1 -0
  33. package/dist/cron/cron-time.d.ts +29 -0
  34. package/dist/cron/cron-time.d.ts.map +1 -0
  35. package/dist/cron/cron-time.js +87 -0
  36. package/dist/cron/cron-time.js.map +1 -0
  37. package/dist/document-thumbnailer.d.ts +1 -1
  38. package/dist/document-thumbnailer.d.ts.map +1 -1
  39. package/dist/document-thumbnailer.js +11 -2
  40. package/dist/document-thumbnailer.js.map +1 -1
  41. package/dist/generated-artifact-attachments.d.ts +26 -0
  42. package/dist/generated-artifact-attachments.d.ts.map +1 -0
  43. package/dist/generated-artifact-attachments.js +61 -0
  44. package/dist/generated-artifact-attachments.js.map +1 -0
  45. package/dist/index.js +11 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/mux-interface.d.ts +37 -5
  48. package/dist/mux-interface.d.ts.map +1 -1
  49. package/dist/remote-hosts.d.ts +66 -0
  50. package/dist/remote-hosts.d.ts.map +1 -0
  51. package/dist/remote-hosts.js +198 -0
  52. package/dist/remote-hosts.js.map +1 -0
  53. package/dist/services/unified-session-service.d.ts +115 -0
  54. package/dist/services/unified-session-service.d.ts.map +1 -0
  55. package/dist/services/unified-session-service.js +173 -0
  56. package/dist/services/unified-session-service.js.map +1 -0
  57. package/dist/session-cli-builder.d.ts +3 -1
  58. package/dist/session-cli-builder.d.ts.map +1 -1
  59. package/dist/session-cli-builder.js +26 -7
  60. package/dist/session-cli-builder.js.map +1 -1
  61. package/dist/session-pty-exit-breaker.d.ts +66 -0
  62. package/dist/session-pty-exit-breaker.d.ts.map +1 -0
  63. package/dist/session-pty-exit-breaker.js +77 -0
  64. package/dist/session-pty-exit-breaker.js.map +1 -0
  65. package/dist/session.d.ts +27 -1
  66. package/dist/session.d.ts.map +1 -1
  67. package/dist/session.js +102 -11
  68. package/dist/session.js.map +1 -1
  69. package/dist/state-store.d.ts +14 -0
  70. package/dist/state-store.d.ts.map +1 -1
  71. package/dist/state-store.js +49 -0
  72. package/dist/state-store.js.map +1 -1
  73. package/dist/tmux-manager.d.ts +100 -8
  74. package/dist/tmux-manager.d.ts.map +1 -1
  75. package/dist/tmux-manager.js +249 -26
  76. package/dist/tmux-manager.js.map +1 -1
  77. package/dist/types/api.d.ts +11 -0
  78. package/dist/types/api.d.ts.map +1 -1
  79. package/dist/types/api.js.map +1 -1
  80. package/dist/types/app-state.d.ts +5 -0
  81. package/dist/types/app-state.d.ts.map +1 -1
  82. package/dist/types/app-state.js.map +1 -1
  83. package/dist/types/cron.d.ts +88 -0
  84. package/dist/types/cron.d.ts.map +1 -0
  85. package/dist/types/cron.js +13 -0
  86. package/dist/types/cron.js.map +1 -0
  87. package/dist/types/session.d.ts +57 -0
  88. package/dist/types/session.d.ts.map +1 -1
  89. package/dist/types/session.js.map +1 -1
  90. package/dist/web/heic-jpeg-converter.d.ts +24 -0
  91. package/dist/web/heic-jpeg-converter.d.ts.map +1 -0
  92. package/dist/web/heic-jpeg-converter.js +76 -0
  93. package/dist/web/heic-jpeg-converter.js.map +1 -0
  94. package/dist/web/heic-jpeg-worker.d.ts +44 -0
  95. package/dist/web/heic-jpeg-worker.d.ts.map +1 -0
  96. package/dist/web/heic-jpeg-worker.js +78 -0
  97. package/dist/web/heic-jpeg-worker.js.map +1 -0
  98. package/dist/web/ports/config-port.d.ts +2 -0
  99. package/dist/web/ports/config-port.d.ts.map +1 -1
  100. package/dist/web/ports/cron-port.d.ts +9 -0
  101. package/dist/web/ports/cron-port.d.ts.map +1 -0
  102. package/dist/web/ports/cron-port.js +6 -0
  103. package/dist/web/ports/cron-port.js.map +1 -0
  104. package/dist/web/ports/index.d.ts +1 -0
  105. package/dist/web/ports/index.d.ts.map +1 -1
  106. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  107. package/dist/web/public/app.b0534652.js +38 -0
  108. package/dist/web/public/app.b0534652.js.br +0 -0
  109. package/dist/web/public/app.b0534652.js.gz +0 -0
  110. package/dist/web/public/{constants.1c779517.js → constants.5b18ed64.js} +65 -0
  111. package/dist/web/public/constants.5b18ed64.js.br +0 -0
  112. package/dist/web/public/constants.5b18ed64.js.gz +0 -0
  113. package/dist/web/public/cron-ui.js +328 -0
  114. package/dist/web/public/cron-ui.js.br +0 -0
  115. package/dist/web/public/cron-ui.js.gz +0 -0
  116. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  117. package/dist/web/public/index.html +296 -25
  118. package/dist/web/public/index.html.br +0 -0
  119. package/dist/web/public/index.html.gz +0 -0
  120. package/dist/web/public/input-cjk.63794d0b.js +1 -0
  121. package/dist/web/public/input-cjk.63794d0b.js.br +0 -0
  122. package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
  123. package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
  124. package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
  125. package/dist/web/public/mobile.0644e3ac.css +1 -0
  126. package/dist/web/public/mobile.0644e3ac.css.br +0 -0
  127. package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
  128. package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
  129. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  130. package/dist/web/public/{panels-ui.772e92c9.js → panels-ui.ca03853f.js} +25 -17
  131. package/dist/web/public/panels-ui.ca03853f.js.br +0 -0
  132. package/dist/web/public/panels-ui.ca03853f.js.gz +0 -0
  133. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  134. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  135. package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
  136. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  137. package/dist/web/public/session-ui.b51814ef.js +49 -0
  138. package/dist/web/public/session-ui.b51814ef.js.br +0 -0
  139. package/dist/web/public/session-ui.b51814ef.js.gz +0 -0
  140. package/dist/web/public/settings-ui.6c67c125.js +67 -0
  141. package/dist/web/public/settings-ui.6c67c125.js.br +0 -0
  142. package/dist/web/public/settings-ui.6c67c125.js.gz +0 -0
  143. package/dist/web/public/styles.e1ba7849.css +1 -0
  144. package/dist/web/public/styles.e1ba7849.css.br +0 -0
  145. package/dist/web/public/styles.e1ba7849.css.gz +0 -0
  146. package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
  147. package/dist/web/public/sw.js.gz +0 -0
  148. package/dist/web/public/terminal-ui.dbf141fa.js +3 -0
  149. package/dist/web/public/terminal-ui.dbf141fa.js.br +0 -0
  150. package/dist/web/public/terminal-ui.dbf141fa.js.gz +0 -0
  151. package/dist/web/public/ultracode-panel.js.gz +0 -0
  152. package/dist/web/public/ultracode-windows.js.gz +0 -0
  153. package/dist/web/public/upload.html.gz +0 -0
  154. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  155. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  156. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  157. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  158. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  159. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  160. package/dist/web/public/vendor/xterm-zerolag-input.137ad9f0.js.gz +0 -0
  161. package/dist/web/public/vendor/xterm.css.gz +0 -0
  162. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  163. package/dist/web/public/voice-input.085e9e73.js.gz +0 -0
  164. package/dist/web/routes/case-routes.d.ts.map +1 -1
  165. package/dist/web/routes/case-routes.js +115 -1
  166. package/dist/web/routes/case-routes.js.map +1 -1
  167. package/dist/web/routes/cron-routes.d.ts +11 -0
  168. package/dist/web/routes/cron-routes.d.ts.map +1 -0
  169. package/dist/web/routes/cron-routes.js +70 -0
  170. package/dist/web/routes/cron-routes.js.map +1 -0
  171. package/dist/web/routes/index.d.ts +1 -0
  172. package/dist/web/routes/index.d.ts.map +1 -1
  173. package/dist/web/routes/index.js +1 -0
  174. package/dist/web/routes/index.js.map +1 -1
  175. package/dist/web/routes/respawn-routes.d.ts.map +1 -1
  176. package/dist/web/routes/respawn-routes.js +3 -0
  177. package/dist/web/routes/respawn-routes.js.map +1 -1
  178. package/dist/web/routes/session-routes.d.ts.map +1 -1
  179. package/dist/web/routes/session-routes.js +614 -68
  180. package/dist/web/routes/session-routes.js.map +1 -1
  181. package/dist/web/routes/system-routes.d.ts.map +1 -1
  182. package/dist/web/routes/system-routes.js +5 -0
  183. package/dist/web/routes/system-routes.js.map +1 -1
  184. package/dist/web/routes/ws-routes.d.ts.map +1 -1
  185. package/dist/web/routes/ws-routes.js +56 -17
  186. package/dist/web/routes/ws-routes.js.map +1 -1
  187. package/dist/web/schemas.d.ts +117 -0
  188. package/dist/web/schemas.d.ts.map +1 -1
  189. package/dist/web/schemas.js +168 -1
  190. package/dist/web/schemas.js.map +1 -1
  191. package/dist/web/server.d.ts +9 -2
  192. package/dist/web/server.d.ts.map +1 -1
  193. package/dist/web/server.js +82 -13
  194. package/dist/web/server.js.map +1 -1
  195. package/dist/web/session-listener-wiring.d.ts +5 -1
  196. package/dist/web/session-listener-wiring.d.ts.map +1 -1
  197. package/dist/web/session-listener-wiring.js +23 -1
  198. package/dist/web/session-listener-wiring.js.map +1 -1
  199. package/dist/web/sse-events.d.ts +15 -0
  200. package/dist/web/sse-events.d.ts.map +1 -1
  201. package/dist/web/sse-events.js +17 -0
  202. package/dist/web/sse-events.js.map +1 -1
  203. package/dist/web/ws-connection-registry.d.ts +77 -0
  204. package/dist/web/ws-connection-registry.d.ts.map +1 -0
  205. package/dist/web/ws-connection-registry.js +99 -0
  206. package/dist/web/ws-connection-registry.js.map +1 -0
  207. package/package.json +3 -1
  208. package/dist/web/public/app.a8d73c32.js +0 -38
  209. package/dist/web/public/app.a8d73c32.js.br +0 -0
  210. package/dist/web/public/app.a8d73c32.js.gz +0 -0
  211. package/dist/web/public/constants.1c779517.js.br +0 -0
  212. package/dist/web/public/constants.1c779517.js.gz +0 -0
  213. package/dist/web/public/input-cjk.4e950e0a.js +0 -1
  214. package/dist/web/public/input-cjk.4e950e0a.js.br +0 -0
  215. package/dist/web/public/input-cjk.4e950e0a.js.gz +0 -0
  216. package/dist/web/public/mobile.8a9aff7a.css +0 -1
  217. package/dist/web/public/mobile.8a9aff7a.css.br +0 -0
  218. package/dist/web/public/mobile.8a9aff7a.css.gz +0 -0
  219. package/dist/web/public/panels-ui.772e92c9.js.br +0 -0
  220. package/dist/web/public/panels-ui.772e92c9.js.gz +0 -0
  221. package/dist/web/public/session-ui.da3e53f2.js +0 -36
  222. package/dist/web/public/session-ui.da3e53f2.js.br +0 -0
  223. package/dist/web/public/session-ui.da3e53f2.js.gz +0 -0
  224. package/dist/web/public/settings-ui.38feb956.js +0 -61
  225. package/dist/web/public/settings-ui.38feb956.js.br +0 -0
  226. package/dist/web/public/settings-ui.38feb956.js.gz +0 -0
  227. package/dist/web/public/styles.1b3e6147.css +0 -1
  228. package/dist/web/public/styles.1b3e6147.css.br +0 -0
  229. package/dist/web/public/styles.1b3e6147.css.gz +0 -0
  230. package/dist/web/public/terminal-ui.865f21f6.js +0 -3
  231. package/dist/web/public/terminal-ui.865f21f6.js.br +0 -0
  232. package/dist/web/public/terminal-ui.865f21f6.js.gz +0 -0
@@ -30,6 +30,7 @@
30
30
  */
31
31
  import { MAX_INPUT_LENGTH } from '../../config/terminal-limits.js';
32
32
  import { isAllowedRequestHost, isAllowedRequestOrigin } from '../network-auth-policy.js';
33
+ import { WsConnectionRegistry } from '../ws-connection-registry.js';
33
34
  /** Micro-batch interval for terminal output (ms). Short enough for low latency,
34
35
  * long enough to group Ink's rapid cursor-up redraw sequences into single frames. */
35
36
  const WS_BATCH_INTERVAL_MS = 8;
@@ -48,8 +49,14 @@ const DEC_2026_START = '\x1b[?2026h';
48
49
  const DEC_2026_END = '\x1b[?2026l';
49
50
  /** Max concurrent WS connections per session. Prevents listener/bandwidth multiplication. */
50
51
  const MAX_WS_PER_SESSION = 5;
51
- /** Track active WS connections per session for connection limiting. */
52
- const sessionWsCount = new Map();
52
+ /**
53
+ * Track live WS connections per session, keyed by clientId (COD-137).
54
+ * Replaces a bare counter that over-counted across the async-close gap on
55
+ * reconnect (spurious 4008). A same-`cid` reconnect supersedes its own socket
56
+ * (reclaims the slot) instead of consuming a new one; cid-less upgrades are
57
+ * admitted anonymously up to the cap. See ws-connection-registry.ts.
58
+ */
59
+ const sessionWsRegistry = new WsConnectionRegistry(MAX_WS_PER_SESSION);
53
60
  export function registerWsRoutes(app, ctx, getHostPolicy) {
54
61
  app.get('/ws/sessions/:id/terminal', { websocket: true }, (socket, req) => {
55
62
  // Reject cross-site WebSocket hijacking (CSWSH) and DNS-rebinding before doing
@@ -68,15 +75,40 @@ export function registerWsRoutes(app, ctx, getHostPolicy) {
68
75
  socket.close(4004, 'Session not found');
69
76
  return;
70
77
  }
71
- // Enforce per-session connection limit
72
- const currentCount = sessionWsCount.get(id) ?? 0;
73
- if (currentCount >= MAX_WS_PER_SESSION) {
78
+ // Structured transport logging — surfaces WS open/close/timeout churn so the
79
+ // tunnel-flap behavior (COD-134) is observable in the server logs. Fastify is
80
+ // configured logger:false, so we log via console ( journald under systemd).
81
+ // Enforce per-session connection limit, scoped by clientId. A same-cid
82
+ // reconnect reclaims its own slot (registry evicts the stale socket), so a
83
+ // drop+reconnect burst can no longer over-count across the async-close gap
84
+ // and trip a spurious 4008. cid-less upgrades are admitted anonymously.
85
+ const cid = typeof req.query?.cid === 'string' && req.query.cid.length > 0 ? req.query.cid : null;
86
+ const { admitted, evictedSocket } = sessionWsRegistry.register(id, cid, socket);
87
+ if (!admitted) {
88
+ console.warn('[ws] terminal rejected: too many connections', {
89
+ sessionId: id,
90
+ wsCount: sessionWsRegistry.liveCount(id),
91
+ });
74
92
  socket.close(4008, 'Too many connections');
75
93
  return;
76
94
  }
77
- sessionWsCount.set(id, currentCount + 1);
78
- // Swallow socket errors cleanup happens in 'close'
79
- socket.on('error', () => { });
95
+ if (evictedSocket) {
96
+ // Same client reconnected; retire the stale socket so it doesn't linger.
97
+ console.info('[ws] terminal superseded by reconnect', { sessionId: id });
98
+ try {
99
+ evictedSocket.close(4010, 'Superseded by reconnect');
100
+ }
101
+ catch {
102
+ /* socket may already be closing */
103
+ }
104
+ }
105
+ console.info('[ws] terminal open', { sessionId: id, wsCount: sessionWsRegistry.liveCount(id) });
106
+ // Eagerly free the slot on error/terminate — don't wait for the async
107
+ // 'close' (idempotent with the 'close' handler below). This is what kills
108
+ // the reconnect over-count: the slot is released the instant the socket dies.
109
+ socket.on('error', () => {
110
+ sessionWsRegistry.unregister(id, socket);
111
+ });
80
112
  // Per-connection micro-batch state
81
113
  let batchChunks = [];
82
114
  let batchSize = 0;
@@ -203,10 +235,14 @@ export function registerWsRoutes(app, ctx, getHostPolicy) {
203
235
  return;
204
236
  socket.ping();
205
237
  pongTimeout = setTimeout(() => {
238
+ console.warn('[ws] terminal ping timeout — terminating', { sessionId: id });
239
+ // Free the slot eagerly — terminate()'s 'close' may lag, and a client
240
+ // reconnecting after a stale-connection drop must not be over-counted.
241
+ sessionWsRegistry.unregister(id, socket);
206
242
  socket.terminate();
207
243
  }, WS_PONG_TIMEOUT_MS);
208
244
  }, WS_PING_INTERVAL_MS);
209
- socket.on('close', () => {
245
+ socket.on('close', (code, reason) => {
210
246
  clearInterval(pingInterval);
211
247
  if (pongTimeout)
212
248
  clearTimeout(pongTimeout);
@@ -218,14 +254,17 @@ export function registerWsRoutes(app, ctx, getHostPolicy) {
218
254
  session.off('needsRefresh', onNeedsRefresh);
219
255
  session.off('exit', onSessionExit);
220
256
  session.releaseDesktopSizing(sizingToken);
221
- // Decrement per-session connection count
222
- const count = sessionWsCount.get(id) ?? 1;
223
- if (count <= 1) {
224
- sessionWsCount.delete(id);
225
- }
226
- else {
227
- sessionWsCount.set(id, count - 1);
228
- }
257
+ // Release this socket's slot. Idempotent and identity-matched: if this
258
+ // socket was already superseded (a same-cid reconnect took its slot) or
259
+ // eagerly unregistered on terminate/error, this is a no-op and the
260
+ // reconnected socket keeps the slot.
261
+ sessionWsRegistry.unregister(id, socket);
262
+ console.info('[ws] terminal close', {
263
+ sessionId: id,
264
+ code,
265
+ reason: String(reason),
266
+ wsCount: sessionWsRegistry.liveCount(id),
267
+ });
229
268
  });
230
269
  });
231
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ws-routes.js","sourceRoot":"","sources":["../../../src/web/routes/ws-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ws-routes.js","sourceRoot":"","sources":["../../../src/web/routes/ws-routes.ts"],"names":[],"mappings":"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"}
@@ -113,6 +113,29 @@ export declare const CreateCaseSchema: z.ZodObject<{
113
113
  name: z.ZodString;
114
114
  description: z.ZodOptional<z.ZodString>;
115
115
  }, z.core.$strip>;
116
+ export declare const RemoteHostSchema: z.ZodObject<{
117
+ id: z.ZodString;
118
+ label: z.ZodString;
119
+ host: z.ZodString;
120
+ username: z.ZodString;
121
+ port: z.ZodOptional<z.ZodNumber>;
122
+ identityFile: z.ZodOptional<z.ZodString>;
123
+ socksProxy: z.ZodOptional<z.ZodString>;
124
+ jumpHost: z.ZodOptional<z.ZodString>;
125
+ extraSshOptions: z.ZodOptional<z.ZodArray<z.ZodString>>;
126
+ commands: z.ZodOptional<z.ZodObject<{
127
+ shell: z.ZodOptional<z.ZodString>;
128
+ claude: z.ZodOptional<z.ZodString>;
129
+ opencode: z.ZodOptional<z.ZodString>;
130
+ codex: z.ZodOptional<z.ZodString>;
131
+ gemini: z.ZodOptional<z.ZodString>;
132
+ }, z.core.$strict>>;
133
+ }, z.core.$strip>;
134
+ export declare const RemoteCaseLinkSchema: z.ZodObject<{
135
+ name: z.ZodString;
136
+ hostId: z.ZodString;
137
+ remotePath: z.ZodString;
138
+ }, z.core.$strip>;
116
139
  /**
117
140
  * Schema for POST /api/quick-start
118
141
  * Creates case (if needed) and starts interactive session.
@@ -282,6 +305,10 @@ export declare const SettingsUpdateSchema: z.ZodObject<{
282
305
  claudeMode: z.ZodOptional<z.ZodString>;
283
306
  allowedTools: z.ZodOptional<z.ZodString>;
284
307
  codexDangerouslyBypassApprovals: z.ZodOptional<z.ZodBoolean>;
308
+ terminalScrollbackLines: z.ZodOptional<z.ZodNumber>;
309
+ tmuxHistoryLimit: z.ZodOptional<z.ZodNumber>;
310
+ terminalBufferMaxBytes: z.ZodOptional<z.ZodNumber>;
311
+ terminalBufferTrimBytes: z.ZodOptional<z.ZodNumber>;
285
312
  nice: z.ZodOptional<z.ZodObject<{
286
313
  enabled: z.ZodOptional<z.ZodBoolean>;
287
314
  niceValue: z.ZodOptional<z.ZodNumber>;
@@ -452,6 +479,92 @@ export declare const ScheduledRunSchema: z.ZodObject<{
452
479
  workingDir: z.ZodOptional<z.ZodString>;
453
480
  durationMinutes: z.ZodOptional<z.ZodNumber>;
454
481
  }, z.core.$strip>;
482
+ /** POST /api/cron/jobs — full job definition. */
483
+ export declare const CronJobSchema: z.ZodObject<{
484
+ name: z.ZodString;
485
+ agentType: z.ZodEnum<{
486
+ claude: "claude";
487
+ shell: "shell";
488
+ opencode: "opencode";
489
+ codex: "codex";
490
+ gemini: "gemini";
491
+ }>;
492
+ workingDir: z.ZodString;
493
+ launchCommand: z.ZodOptional<z.ZodString>;
494
+ promptMode: z.ZodEnum<{
495
+ inline_text: "inline_text";
496
+ prompt_file_path: "prompt_file_path";
497
+ }>;
498
+ promptText: z.ZodOptional<z.ZodString>;
499
+ promptFilePath: z.ZodOptional<z.ZodString>;
500
+ inputMode: z.ZodEnum<{
501
+ paste: "paste";
502
+ typed: "typed";
503
+ }>;
504
+ scheduleType: z.ZodEnum<{
505
+ interval: "interval";
506
+ once: "once";
507
+ daily: "daily";
508
+ weekly: "weekly";
509
+ }>;
510
+ runAt: z.ZodOptional<z.ZodNumber>;
511
+ intervalMinutes: z.ZodOptional<z.ZodNumber>;
512
+ dailyTime: z.ZodOptional<z.ZodString>;
513
+ weeklyDays: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
514
+ weeklyTime: z.ZodOptional<z.ZodString>;
515
+ enabled: z.ZodBoolean;
516
+ notes: z.ZodOptional<z.ZodString>;
517
+ concurrencyPolicy: z.ZodEnum<{
518
+ warn_only: "warn_only";
519
+ skip_if_same_agent_running: "skip_if_same_agent_running";
520
+ }>;
521
+ autoClosePreviousSession: z.ZodOptional<z.ZodBoolean>;
522
+ }, z.core.$strip>;
523
+ /** PUT /api/cron/jobs/:id — partial update. */
524
+ export declare const CronJobUpdateSchema: z.ZodObject<{
525
+ name: z.ZodOptional<z.ZodString>;
526
+ agentType: z.ZodOptional<z.ZodEnum<{
527
+ claude: "claude";
528
+ shell: "shell";
529
+ opencode: "opencode";
530
+ codex: "codex";
531
+ gemini: "gemini";
532
+ }>>;
533
+ workingDir: z.ZodOptional<z.ZodString>;
534
+ launchCommand: z.ZodOptional<z.ZodOptional<z.ZodString>>;
535
+ promptMode: z.ZodOptional<z.ZodEnum<{
536
+ inline_text: "inline_text";
537
+ prompt_file_path: "prompt_file_path";
538
+ }>>;
539
+ promptText: z.ZodOptional<z.ZodOptional<z.ZodString>>;
540
+ promptFilePath: z.ZodOptional<z.ZodOptional<z.ZodString>>;
541
+ inputMode: z.ZodOptional<z.ZodEnum<{
542
+ paste: "paste";
543
+ typed: "typed";
544
+ }>>;
545
+ scheduleType: z.ZodOptional<z.ZodEnum<{
546
+ interval: "interval";
547
+ once: "once";
548
+ daily: "daily";
549
+ weekly: "weekly";
550
+ }>>;
551
+ runAt: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
552
+ intervalMinutes: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
553
+ dailyTime: z.ZodOptional<z.ZodOptional<z.ZodString>>;
554
+ weeklyDays: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodNumber>>>;
555
+ weeklyTime: z.ZodOptional<z.ZodOptional<z.ZodString>>;
556
+ enabled: z.ZodOptional<z.ZodBoolean>;
557
+ notes: z.ZodOptional<z.ZodOptional<z.ZodString>>;
558
+ concurrencyPolicy: z.ZodOptional<z.ZodEnum<{
559
+ warn_only: "warn_only";
560
+ skip_if_same_agent_running: "skip_if_same_agent_running";
561
+ }>>;
562
+ autoClosePreviousSession: z.ZodOptional<z.ZodOptional<z.ZodBoolean>>;
563
+ }, z.core.$strip>;
564
+ /** PUT /api/cron/jobs/:id/enabled */
565
+ export declare const CronJobEnabledSchema: z.ZodObject<{
566
+ enabled: z.ZodBoolean;
567
+ }, z.core.$strip>;
455
568
  /** POST /api/cases/link */
456
569
  export declare const LinkCaseSchema: z.ZodObject<{
457
570
  name: z.ZodString;
@@ -526,6 +639,10 @@ export declare const SubagentWindowStatesSchema: z.ZodObject<{
526
639
  }, z.core.$loose>;
527
640
  /** PUT /api/subagent-parents */
528
641
  export declare const SubagentParentMapSchema: z.ZodRecord<z.ZodString, z.ZodString>;
642
+ /** POST /api/sessions/:id/interactive */
643
+ export declare const InteractiveStartSchema: z.ZodObject<{
644
+ clearBreaker: z.ZodOptional<z.ZodBoolean>;
645
+ }, z.core.$strip>;
529
646
  /** POST /api/sessions/:id/interactive-respawn */
530
647
  export declare const InteractiveRespawnSchema: z.ZodObject<{
531
648
  respawnConfig: z.ZodOptional<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/web/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/web/schemas.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { z } from 'zod';
10
10
  import { SAFE_PATH_PATTERN, isSafePushEndpoint } from '../utils/index.js';
11
+ import { MAX_TERMINAL_BUFFER_BYTES, MAX_TERMINAL_SCROLLBACK_LINES, MIN_TERMINAL_BUFFER_BYTES, MIN_TERMINAL_SCROLLBACK_LINES, } from '../config/terminal-history.js';
11
12
  // ========== Path Validation ==========
12
13
  /** Validate a path string: no shell metacharacters, no traversal, must be absolute */
13
14
  export function isValidWorkingDir(p) {
@@ -238,6 +239,84 @@ export const CreateCaseSchema = z.object({
238
239
  .regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format. Use only letters, numbers, hyphens, underscores.'),
239
240
  description: z.string().max(1000).optional(),
240
241
  });
242
+ const RemoteCommandOverridesSchema = z
243
+ .object({
244
+ shell: z.string().min(1).max(300).optional(),
245
+ claude: z.string().min(1).max(300).optional(),
246
+ opencode: z.string().min(1).max(300).optional(),
247
+ codex: z.string().min(1).max(300).optional(),
248
+ gemini: z.string().min(1).max(300).optional(),
249
+ })
250
+ .strict()
251
+ .optional();
252
+ // COD-107 — advanced SSH connection options. These ultimately exec as shell
253
+ // (ProxyCommand etc.), but are OPERATOR-entered host config (never attacker- or
254
+ // terminal-output-influenced), so we validate as defense-in-depth, not as the
255
+ // security boundary. Reject newline/NUL/backtick/`$(` shell-injection vectors.
256
+ const NO_SHELL_INJECTION = /^[^\n\r\0`]*$/;
257
+ const noCommandSubstitution = (s) => !s.includes('$(');
258
+ // `remotePath`/`identityFile` are shell-escaped, then the whole launch command is
259
+ // embedded via `JSON.stringify(...)` inside `bash -c "..."` (tmux-manager). That
260
+ // outer DOUBLE-quote layer re-exposes `$(...)`, backticks, and `$VAR` even though
261
+ // the inner value is single-quoted — so a `$(cmd)` in the path would run LOCALLY at
262
+ // launch. Reject `$` and backtick (and newline/CR/NUL) entirely at the boundary.
263
+ const NO_SHELL_META = /^[^\n\r\0`$]*$/;
264
+ export const RemoteHostSchema = z.object({
265
+ id: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'Invalid remote host id'),
266
+ label: z.string().min(1).max(100),
267
+ host: z
268
+ .string()
269
+ .min(1)
270
+ .max(255)
271
+ .regex(/^[a-zA-Z0-9._:-]+$/, 'Invalid SSH host'),
272
+ username: z
273
+ .string()
274
+ .min(1)
275
+ .max(100)
276
+ .regex(/^[a-zA-Z0-9._-]+$/, 'Invalid SSH username'),
277
+ port: z.number().int().min(1).max(65535).optional(),
278
+ // Identity (private-key) file PATH only — never key bytes. Reject shell
279
+ // metacharacters ($, backtick) that survive into the `bash -c` launch layer.
280
+ identityFile: z.string().min(1).max(4096).regex(NO_SHELL_META, 'Invalid identity file path').optional(),
281
+ // SOCKS5 proxy as host:port (e.g. 127.0.0.1:1080).
282
+ socksProxy: z
283
+ .string()
284
+ .regex(/^[\w.-]+:\d{1,5}$/, 'SOCKS proxy must be host:port')
285
+ .optional(),
286
+ // SSH jump host: a comma-separated chain of [user@]host[:port] hops. Structural
287
+ // ALLOWLIST (not an open denylist) — only chars valid in user/host/port/IPv6,
288
+ // so no shell metacharacter (;, |, &, space, $, quotes, …) can appear. The value
289
+ // is also shellescaped at command-build time (buildSshConnectionArgs); this is the
290
+ // belt to that suspenders.
291
+ jumpHost: z
292
+ .string()
293
+ .min(1)
294
+ .max(255)
295
+ .regex(/^(?:[A-Za-z0-9._-]+@)?[A-Za-z0-9.:[\]-]+(?::\d{1,5})?(?:,(?:[A-Za-z0-9._-]+@)?[A-Za-z0-9.:[\]-]+(?::\d{1,5})?)*$/, 'Jump host must be [user@]host[:port] (comma-separated for multiple hops)')
296
+ .optional(),
297
+ // Arbitrary extra -o KEY=VALUE options (escape hatch); each must be KEY=VALUE.
298
+ extraSshOptions: z
299
+ .array(z
300
+ .string()
301
+ .min(3)
302
+ .max(1024)
303
+ .regex(/^[A-Za-z][A-Za-z0-9]*=.+$/, 'Extra SSH option must be KEY=VALUE')
304
+ .regex(NO_SHELL_INJECTION, 'Invalid characters in SSH option')
305
+ .refine(noCommandSubstitution, 'Invalid characters in SSH option'))
306
+ .max(32)
307
+ .optional(),
308
+ commands: RemoteCommandOverridesSchema,
309
+ });
310
+ export const RemoteCaseLinkSchema = z.object({
311
+ name: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format'),
312
+ hostId: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'Invalid remote host id'),
313
+ remotePath: z
314
+ .string()
315
+ .min(1)
316
+ .max(2000)
317
+ .regex(/^\//, 'Remote path must be absolute')
318
+ .regex(NO_SHELL_META, 'Invalid characters in remote path'),
319
+ });
241
320
  // ========== Quick Start ==========
242
321
  /**
243
322
  * Schema for POST /api/quick-start
@@ -377,6 +456,16 @@ export const SettingsUpdateSchema = z
377
456
  allowedTools: z.string().max(2000).optional(),
378
457
  // Codex CLI settings
379
458
  codexDangerouslyBypassApprovals: z.boolean().optional(),
459
+ // Terminal history and retention
460
+ terminalScrollbackLines: z
461
+ .number()
462
+ .int()
463
+ .min(MIN_TERMINAL_SCROLLBACK_LINES)
464
+ .max(MAX_TERMINAL_SCROLLBACK_LINES)
465
+ .optional(),
466
+ tmuxHistoryLimit: z.number().int().min(MIN_TERMINAL_SCROLLBACK_LINES).max(MAX_TERMINAL_SCROLLBACK_LINES).optional(),
467
+ terminalBufferMaxBytes: z.number().int().min(MIN_TERMINAL_BUFFER_BYTES).max(MAX_TERMINAL_BUFFER_BYTES).optional(),
468
+ terminalBufferTrimBytes: z.number().int().min(MIN_TERMINAL_BUFFER_BYTES).max(MAX_TERMINAL_BUFFER_BYTES).optional(),
380
469
  // CPU priority
381
470
  nice: z
382
471
  .object({
@@ -443,7 +532,18 @@ export const SettingsUpdateSchema = z
443
532
  .max(20)
444
533
  .optional(),
445
534
  })
446
- .strict();
535
+ .strict()
536
+ .superRefine((settings, ctx) => {
537
+ if (settings.terminalBufferMaxBytes !== undefined &&
538
+ settings.terminalBufferTrimBytes !== undefined &&
539
+ settings.terminalBufferTrimBytes > settings.terminalBufferMaxBytes) {
540
+ ctx.addIssue({
541
+ code: z.ZodIssueCode.custom,
542
+ path: ['terminalBufferTrimBytes'],
543
+ message: 'terminalBufferTrimBytes must be less than or equal to terminalBufferMaxBytes',
544
+ });
545
+ }
546
+ });
447
547
  /**
448
548
  * Schema for POST /api/sessions/:id/input with length limit
449
549
  */
@@ -522,6 +622,64 @@ export const ScheduledRunSchema = z.object({
522
622
  workingDir: safePathSchema.optional(),
523
623
  durationMinutes: z.number().int().min(1).max(14400).optional(),
524
624
  });
625
+ // ========== Cron Jobs ==========
626
+ /** 'HH:MM' 24-hour time. */
627
+ const hhmmSchema = z.string().regex(/^([01]?\d|2[0-3]):[0-5]\d$/, 'Time must be HH:MM (24-hour)');
628
+ /** Prompt delivery is single-line only (writeViaMux/Ink constraint) — reject newlines outright. */
629
+ const noNewlines = (v) => !/[\r\n]/.test(v);
630
+ /** Shared field shape for creating/updating a scheduled job. */
631
+ const CronJobBaseSchema = z.object({
632
+ name: z.string().min(1).max(200),
633
+ agentType: z.enum(['claude', 'shell', 'opencode', 'codex', 'gemini']),
634
+ workingDir: safePathSchema,
635
+ launchCommand: z.string().max(2000).refine(noNewlines, 'launchCommand must be a single line').optional(),
636
+ promptMode: z.enum(['inline_text', 'prompt_file_path']),
637
+ promptText: z
638
+ .string()
639
+ .max(100000)
640
+ .refine(noNewlines, 'promptText must be a single line (multi-line prompts are not supported)')
641
+ .optional(),
642
+ promptFilePath: safePathSchema.optional(),
643
+ inputMode: z.enum(['paste', 'typed']),
644
+ scheduleType: z.enum(['once', 'interval', 'daily', 'weekly']),
645
+ runAt: z.number().int().positive().optional(),
646
+ intervalMinutes: z.number().int().min(1).max(525600).optional(),
647
+ dailyTime: hhmmSchema.optional(),
648
+ weeklyDays: z.array(z.number().int().min(0).max(6)).min(1).max(7).optional(),
649
+ weeklyTime: hhmmSchema.optional(),
650
+ enabled: z.boolean(),
651
+ notes: z.string().max(2000).optional(),
652
+ concurrencyPolicy: z.enum(['warn_only', 'skip_if_same_agent_running']),
653
+ autoClosePreviousSession: z.boolean().optional(),
654
+ });
655
+ /** Cross-field validation: required fields depend on promptMode + scheduleType. */
656
+ function refineCronJob(val, ctx) {
657
+ const add = (message, path) => ctx.addIssue({ code: 'custom', message, path: [path] });
658
+ if (val.promptMode === 'inline_text' && !val.promptText) {
659
+ add('promptText is required when promptMode is inline_text', 'promptText');
660
+ }
661
+ if (val.promptMode === 'prompt_file_path' && !val.promptFilePath) {
662
+ add('promptFilePath is required when promptMode is prompt_file_path', 'promptFilePath');
663
+ }
664
+ if (val.scheduleType === 'once' && val.runAt === undefined) {
665
+ add('runAt is required for a one-time schedule', 'runAt');
666
+ }
667
+ if (val.scheduleType === 'interval' && val.intervalMinutes === undefined) {
668
+ add('intervalMinutes is required for an interval schedule', 'intervalMinutes');
669
+ }
670
+ if (val.scheduleType === 'daily' && !val.dailyTime) {
671
+ add('dailyTime is required for a daily schedule', 'dailyTime');
672
+ }
673
+ if (val.scheduleType === 'weekly' && (!val.weeklyTime || !val.weeklyDays?.length)) {
674
+ add('weeklyDays and weeklyTime are required for a weekly schedule', 'weeklyTime');
675
+ }
676
+ }
677
+ /** POST /api/cron/jobs — full job definition. */
678
+ export const CronJobSchema = CronJobBaseSchema.superRefine(refineCronJob);
679
+ /** PUT /api/cron/jobs/:id — partial update. */
680
+ export const CronJobUpdateSchema = CronJobBaseSchema.partial();
681
+ /** PUT /api/cron/jobs/:id/enabled */
682
+ export const CronJobEnabledSchema = z.object({ enabled: z.boolean() });
525
683
  /** POST /api/cases/link */
526
684
  export const LinkCaseSchema = z.object({
527
685
  name: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format'),
@@ -580,6 +738,15 @@ export const SubagentWindowStatesSchema = z
580
738
  .passthrough();
581
739
  /** PUT /api/subagent-parents */
582
740
  export const SubagentParentMapSchema = z.record(z.string(), z.string());
741
+ /** POST /api/sessions/:id/interactive */
742
+ export const InteractiveStartSchema = z.object({
743
+ /**
744
+ * COD-118: explicit user-initiated restart — clears a tripped PTY-exit circuit
745
+ * breaker before starting. Automatic reconnect/re-attach callers (e.g. the
746
+ * frontend's selectSession auto-attach) must NOT send this flag.
747
+ */
748
+ clearBreaker: z.boolean().optional(),
749
+ });
583
750
  /** POST /api/sessions/:id/interactive-respawn */
584
751
  export const InteractiveRespawnSchema = z.object({
585
752
  respawnConfig: RespawnConfigSchema.optional(),