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.
- package/README.md +264 -90
- package/dist/attachment-magic.d.ts +13 -0
- package/dist/attachment-magic.d.ts.map +1 -1
- package/dist/attachment-magic.js +47 -0
- package/dist/attachment-magic.js.map +1 -1
- package/dist/attachment-registry.d.ts.map +1 -1
- package/dist/attachment-registry.js +13 -2
- package/dist/attachment-registry.js.map +1 -1
- package/dist/config/buffer-limits.d.ts +2 -3
- package/dist/config/buffer-limits.d.ts.map +1 -1
- package/dist/config/buffer-limits.js +5 -5
- package/dist/config/buffer-limits.js.map +1 -1
- package/dist/config/map-limits.d.ts +11 -0
- package/dist/config/map-limits.d.ts.map +1 -1
- package/dist/config/map-limits.js +11 -0
- package/dist/config/map-limits.js.map +1 -1
- package/dist/config/server-timing.d.ts +6 -0
- package/dist/config/server-timing.d.ts.map +1 -1
- package/dist/config/server-timing.js +9 -0
- package/dist/config/server-timing.js.map +1 -1
- package/dist/config/terminal-history.d.ts +30 -0
- package/dist/config/terminal-history.d.ts.map +1 -0
- package/dist/config/terminal-history.js +43 -0
- package/dist/config/terminal-history.js.map +1 -0
- package/dist/cron/cron-input.d.ts +30 -0
- package/dist/cron/cron-input.d.ts.map +1 -0
- package/dist/cron/cron-input.js +7 -0
- package/dist/cron/cron-input.js.map +1 -0
- package/dist/cron/cron-service.d.ts +92 -0
- package/dist/cron/cron-service.d.ts.map +1 -0
- package/dist/cron/cron-service.js +606 -0
- package/dist/cron/cron-service.js.map +1 -0
- package/dist/cron/cron-time.d.ts +29 -0
- package/dist/cron/cron-time.d.ts.map +1 -0
- package/dist/cron/cron-time.js +87 -0
- package/dist/cron/cron-time.js.map +1 -0
- package/dist/document-thumbnailer.d.ts +1 -1
- package/dist/document-thumbnailer.d.ts.map +1 -1
- package/dist/document-thumbnailer.js +11 -2
- package/dist/document-thumbnailer.js.map +1 -1
- package/dist/generated-artifact-attachments.d.ts +26 -0
- package/dist/generated-artifact-attachments.d.ts.map +1 -0
- package/dist/generated-artifact-attachments.js +61 -0
- package/dist/generated-artifact-attachments.js.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/mux-interface.d.ts +37 -5
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/remote-hosts.d.ts +66 -0
- package/dist/remote-hosts.d.ts.map +1 -0
- package/dist/remote-hosts.js +198 -0
- package/dist/remote-hosts.js.map +1 -0
- package/dist/services/unified-session-service.d.ts +115 -0
- package/dist/services/unified-session-service.d.ts.map +1 -0
- package/dist/services/unified-session-service.js +173 -0
- package/dist/services/unified-session-service.js.map +1 -0
- package/dist/session-cli-builder.d.ts +3 -1
- package/dist/session-cli-builder.d.ts.map +1 -1
- package/dist/session-cli-builder.js +26 -7
- package/dist/session-cli-builder.js.map +1 -1
- package/dist/session-pty-exit-breaker.d.ts +66 -0
- package/dist/session-pty-exit-breaker.d.ts.map +1 -0
- package/dist/session-pty-exit-breaker.js +77 -0
- package/dist/session-pty-exit-breaker.js.map +1 -0
- package/dist/session.d.ts +27 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +102 -11
- package/dist/session.js.map +1 -1
- package/dist/state-store.d.ts +14 -0
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js +49 -0
- package/dist/state-store.js.map +1 -1
- package/dist/tmux-manager.d.ts +100 -8
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +249 -26
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/api.d.ts +11 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js.map +1 -1
- package/dist/types/app-state.d.ts +5 -0
- package/dist/types/app-state.d.ts.map +1 -1
- package/dist/types/app-state.js.map +1 -1
- package/dist/types/cron.d.ts +88 -0
- package/dist/types/cron.d.ts.map +1 -0
- package/dist/types/cron.js +13 -0
- package/dist/types/cron.js.map +1 -0
- package/dist/types/session.d.ts +57 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/web/heic-jpeg-converter.d.ts +24 -0
- package/dist/web/heic-jpeg-converter.d.ts.map +1 -0
- package/dist/web/heic-jpeg-converter.js +76 -0
- package/dist/web/heic-jpeg-converter.js.map +1 -0
- package/dist/web/heic-jpeg-worker.d.ts +44 -0
- package/dist/web/heic-jpeg-worker.d.ts.map +1 -0
- package/dist/web/heic-jpeg-worker.js +78 -0
- package/dist/web/heic-jpeg-worker.js.map +1 -0
- package/dist/web/ports/config-port.d.ts +2 -0
- package/dist/web/ports/config-port.d.ts.map +1 -1
- package/dist/web/ports/cron-port.d.ts +9 -0
- package/dist/web/ports/cron-port.d.ts.map +1 -0
- package/dist/web/ports/cron-port.js +6 -0
- package/dist/web/ports/cron-port.js.map +1 -0
- package/dist/web/ports/index.d.ts +1 -0
- package/dist/web/ports/index.d.ts.map +1 -1
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/app.b0534652.js +38 -0
- package/dist/web/public/app.b0534652.js.br +0 -0
- package/dist/web/public/app.b0534652.js.gz +0 -0
- package/dist/web/public/{constants.1c779517.js → constants.5b18ed64.js} +65 -0
- package/dist/web/public/constants.5b18ed64.js.br +0 -0
- package/dist/web/public/constants.5b18ed64.js.gz +0 -0
- package/dist/web/public/cron-ui.js +328 -0
- package/dist/web/public/cron-ui.js.br +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +296 -25
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.63794d0b.js +1 -0
- package/dist/web/public/input-cjk.63794d0b.js.br +0 -0
- package/dist/web/public/input-cjk.63794d0b.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.3f91acef.js.gz +0 -0
- package/dist/web/public/mobile-handlers.b5a667ef.js.gz +0 -0
- package/dist/web/public/mobile.0644e3ac.css +1 -0
- package/dist/web/public/mobile.0644e3ac.css.br +0 -0
- package/dist/web/public/mobile.0644e3ac.css.gz +0 -0
- package/dist/web/public/notification-manager.ca9dc40d.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.772e92c9.js → panels-ui.ca03853f.js} +25 -17
- package/dist/web/public/panels-ui.ca03853f.js.br +0 -0
- package/dist/web/public/panels-ui.ca03853f.js.gz +0 -0
- package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
- package/dist/web/public/respawn-ui.2d249da9.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-ui.b51814ef.js +49 -0
- package/dist/web/public/session-ui.b51814ef.js.br +0 -0
- package/dist/web/public/session-ui.b51814ef.js.gz +0 -0
- package/dist/web/public/settings-ui.6c67c125.js +67 -0
- package/dist/web/public/settings-ui.6c67c125.js.br +0 -0
- package/dist/web/public/settings-ui.6c67c125.js.gz +0 -0
- package/dist/web/public/styles.e1ba7849.css +1 -0
- package/dist/web/public/styles.e1ba7849.css.br +0 -0
- package/dist/web/public/styles.e1ba7849.css.gz +0 -0
- package/dist/web/public/subagent-windows.69b60c35.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/terminal-ui.dbf141fa.js +3 -0
- package/dist/web/public/terminal-ui.dbf141fa.js.br +0 -0
- package/dist/web/public/terminal-ui.dbf141fa.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/upload.html.gz +0 -0
- package/dist/web/public/vendor/dompurify.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-zerolag-input.137ad9f0.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.085e9e73.js.gz +0 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +115 -1
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/cron-routes.d.ts +11 -0
- package/dist/web/routes/cron-routes.d.ts.map +1 -0
- package/dist/web/routes/cron-routes.js +70 -0
- package/dist/web/routes/cron-routes.js.map +1 -0
- 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/respawn-routes.d.ts.map +1 -1
- package/dist/web/routes/respawn-routes.js +3 -0
- package/dist/web/routes/respawn-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +614 -68
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +5 -0
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/routes/ws-routes.d.ts.map +1 -1
- package/dist/web/routes/ws-routes.js +56 -17
- package/dist/web/routes/ws-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +117 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +168 -1
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +9 -2
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +82 -13
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-listener-wiring.d.ts +5 -1
- package/dist/web/session-listener-wiring.d.ts.map +1 -1
- package/dist/web/session-listener-wiring.js +23 -1
- package/dist/web/session-listener-wiring.js.map +1 -1
- package/dist/web/sse-events.d.ts +15 -0
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +17 -0
- package/dist/web/sse-events.js.map +1 -1
- package/dist/web/ws-connection-registry.d.ts +77 -0
- package/dist/web/ws-connection-registry.d.ts.map +1 -0
- package/dist/web/ws-connection-registry.js +99 -0
- package/dist/web/ws-connection-registry.js.map +1 -0
- package/package.json +3 -1
- package/dist/web/public/app.a8d73c32.js +0 -38
- package/dist/web/public/app.a8d73c32.js.br +0 -0
- package/dist/web/public/app.a8d73c32.js.gz +0 -0
- package/dist/web/public/constants.1c779517.js.br +0 -0
- package/dist/web/public/constants.1c779517.js.gz +0 -0
- package/dist/web/public/input-cjk.4e950e0a.js +0 -1
- package/dist/web/public/input-cjk.4e950e0a.js.br +0 -0
- package/dist/web/public/input-cjk.4e950e0a.js.gz +0 -0
- package/dist/web/public/mobile.8a9aff7a.css +0 -1
- package/dist/web/public/mobile.8a9aff7a.css.br +0 -0
- package/dist/web/public/mobile.8a9aff7a.css.gz +0 -0
- package/dist/web/public/panels-ui.772e92c9.js.br +0 -0
- package/dist/web/public/panels-ui.772e92c9.js.gz +0 -0
- package/dist/web/public/session-ui.da3e53f2.js +0 -36
- package/dist/web/public/session-ui.da3e53f2.js.br +0 -0
- package/dist/web/public/session-ui.da3e53f2.js.gz +0 -0
- package/dist/web/public/settings-ui.38feb956.js +0 -61
- package/dist/web/public/settings-ui.38feb956.js.br +0 -0
- package/dist/web/public/settings-ui.38feb956.js.gz +0 -0
- package/dist/web/public/styles.1b3e6147.css +0 -1
- package/dist/web/public/styles.1b3e6147.css.br +0 -0
- package/dist/web/public/styles.1b3e6147.css.gz +0 -0
- package/dist/web/public/terminal-ui.865f21f6.js +0 -3
- package/dist/web/public/terminal-ui.865f21f6.js.br +0 -0
- package/dist/web/public/terminal-ui.865f21f6.js.gz +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Circuit breaker bounding repeated non-zero interactive-PTY exits (COD-118).
|
|
3
|
+
*
|
|
4
|
+
* Defense-in-depth after COD-115: if the interactive PTY exits non-zero repeatedly,
|
|
5
|
+
* external recovery/reconnect paths recreate it indefinitely (COD-115 observed 114
|
|
6
|
+
* `exited with code: 1` events + orphan sessions). This breaker tracks recent
|
|
7
|
+
* non-zero exits within a sliding window and "trips" once they exceed a threshold,
|
|
8
|
+
* so the Session can refuse to respawn and surface an error state instead of looping.
|
|
9
|
+
*
|
|
10
|
+
* Design notes:
|
|
11
|
+
* - PURE + dependency-free. Time is INJECTED (`nowMs` passed to `recordExit`); the
|
|
12
|
+
* breaker never calls `Date.now()` itself, so trip/window logic is deterministically
|
|
13
|
+
* unit-testable with no real timers.
|
|
14
|
+
* - A clean (exit code 0) exit resets the counter — a session that exited normally is
|
|
15
|
+
* not on a crash-loop. (It does NOT clear an already-tripped breaker; only an explicit
|
|
16
|
+
* `reset()` — e.g. a user-initiated restart — does that.)
|
|
17
|
+
* - Once tripped, stays tripped until `reset()`.
|
|
18
|
+
*
|
|
19
|
+
* @consumedby session (instantiates one per session; records exits in the interactive
|
|
20
|
+
* PTY `onExit` handler; gates `startInteractive()` when tripped; `reset()` on restart)
|
|
21
|
+
* @module session-pty-exit-breaker
|
|
22
|
+
*/
|
|
23
|
+
/** Non-zero interactive-PTY exits within the window required to trip the breaker. */
|
|
24
|
+
export declare const DEFAULT_BREAKER_THRESHOLD = 5;
|
|
25
|
+
/** Sliding window (ms) over which non-zero exits accumulate toward the threshold. */
|
|
26
|
+
export declare const DEFAULT_BREAKER_WINDOW_MS = 10000;
|
|
27
|
+
export interface InteractivePtyExitBreakerOptions {
|
|
28
|
+
/** Trip after this many non-zero exits within `windowMs` (default 5). */
|
|
29
|
+
threshold?: number;
|
|
30
|
+
/** Sliding window length in ms (default 10_000). */
|
|
31
|
+
windowMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface RecordExitResult {
|
|
34
|
+
/** True once the breaker has tripped (stays true until `reset()`). */
|
|
35
|
+
tripped: boolean;
|
|
36
|
+
/** Number of non-zero exits currently inside the window. */
|
|
37
|
+
count: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Sliding-window counter that trips on rapid repeated non-zero exits.
|
|
41
|
+
*
|
|
42
|
+
* 5 within 10s safely clears normal usage (a single exit, an intentional restart)
|
|
43
|
+
* while tripping fast on a real loop — COD-115 saw 114 exits, far above 5.
|
|
44
|
+
*/
|
|
45
|
+
export declare class InteractivePtyExitBreaker {
|
|
46
|
+
private readonly _threshold;
|
|
47
|
+
private readonly _windowMs;
|
|
48
|
+
/** Timestamps (ms, injected) of recent non-zero exits, oldest first. */
|
|
49
|
+
private _exitTimes;
|
|
50
|
+
private _tripped;
|
|
51
|
+
constructor(opts?: InteractivePtyExitBreakerOptions);
|
|
52
|
+
/** Whether the breaker has tripped (respawn should be blocked). */
|
|
53
|
+
get tripped(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Record a PTY exit. A zero (clean) exit resets the non-zero counter; a non-zero
|
|
56
|
+
* exit is added to the window, stale entries are evicted, and the breaker trips
|
|
57
|
+
* once the in-window count reaches the threshold.
|
|
58
|
+
*
|
|
59
|
+
* @param exitCode the PTY exit code (0 = clean)
|
|
60
|
+
* @param nowMs injected current time in ms (never read from a real clock)
|
|
61
|
+
*/
|
|
62
|
+
recordExit(exitCode: number, nowMs: number): RecordExitResult;
|
|
63
|
+
/** Clear the tripped state and the non-zero counter (e.g. on intentional restart). */
|
|
64
|
+
reset(): void;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=session-pty-exit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-pty-exit-breaker.d.ts","sourceRoot":"","sources":["../src/session-pty-exit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,MAAM,WAAW,gCAAgC;IAC/C,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,wEAAwE;IACxE,OAAO,CAAC,UAAU,CAAgB;IAElC,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,GAAE,gCAAqC;IAKvD,mEAAmE;IACnE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB;IAoB7D,sFAAsF;IACtF,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Circuit breaker bounding repeated non-zero interactive-PTY exits (COD-118).
|
|
3
|
+
*
|
|
4
|
+
* Defense-in-depth after COD-115: if the interactive PTY exits non-zero repeatedly,
|
|
5
|
+
* external recovery/reconnect paths recreate it indefinitely (COD-115 observed 114
|
|
6
|
+
* `exited with code: 1` events + orphan sessions). This breaker tracks recent
|
|
7
|
+
* non-zero exits within a sliding window and "trips" once they exceed a threshold,
|
|
8
|
+
* so the Session can refuse to respawn and surface an error state instead of looping.
|
|
9
|
+
*
|
|
10
|
+
* Design notes:
|
|
11
|
+
* - PURE + dependency-free. Time is INJECTED (`nowMs` passed to `recordExit`); the
|
|
12
|
+
* breaker never calls `Date.now()` itself, so trip/window logic is deterministically
|
|
13
|
+
* unit-testable with no real timers.
|
|
14
|
+
* - A clean (exit code 0) exit resets the counter — a session that exited normally is
|
|
15
|
+
* not on a crash-loop. (It does NOT clear an already-tripped breaker; only an explicit
|
|
16
|
+
* `reset()` — e.g. a user-initiated restart — does that.)
|
|
17
|
+
* - Once tripped, stays tripped until `reset()`.
|
|
18
|
+
*
|
|
19
|
+
* @consumedby session (instantiates one per session; records exits in the interactive
|
|
20
|
+
* PTY `onExit` handler; gates `startInteractive()` when tripped; `reset()` on restart)
|
|
21
|
+
* @module session-pty-exit-breaker
|
|
22
|
+
*/
|
|
23
|
+
/** Non-zero interactive-PTY exits within the window required to trip the breaker. */
|
|
24
|
+
export const DEFAULT_BREAKER_THRESHOLD = 5;
|
|
25
|
+
/** Sliding window (ms) over which non-zero exits accumulate toward the threshold. */
|
|
26
|
+
export const DEFAULT_BREAKER_WINDOW_MS = 10_000;
|
|
27
|
+
/**
|
|
28
|
+
* Sliding-window counter that trips on rapid repeated non-zero exits.
|
|
29
|
+
*
|
|
30
|
+
* 5 within 10s safely clears normal usage (a single exit, an intentional restart)
|
|
31
|
+
* while tripping fast on a real loop — COD-115 saw 114 exits, far above 5.
|
|
32
|
+
*/
|
|
33
|
+
export class InteractivePtyExitBreaker {
|
|
34
|
+
_threshold;
|
|
35
|
+
_windowMs;
|
|
36
|
+
/** Timestamps (ms, injected) of recent non-zero exits, oldest first. */
|
|
37
|
+
_exitTimes = [];
|
|
38
|
+
_tripped = false;
|
|
39
|
+
constructor(opts = {}) {
|
|
40
|
+
this._threshold = opts.threshold ?? DEFAULT_BREAKER_THRESHOLD;
|
|
41
|
+
this._windowMs = opts.windowMs ?? DEFAULT_BREAKER_WINDOW_MS;
|
|
42
|
+
}
|
|
43
|
+
/** Whether the breaker has tripped (respawn should be blocked). */
|
|
44
|
+
get tripped() {
|
|
45
|
+
return this._tripped;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Record a PTY exit. A zero (clean) exit resets the non-zero counter; a non-zero
|
|
49
|
+
* exit is added to the window, stale entries are evicted, and the breaker trips
|
|
50
|
+
* once the in-window count reaches the threshold.
|
|
51
|
+
*
|
|
52
|
+
* @param exitCode the PTY exit code (0 = clean)
|
|
53
|
+
* @param nowMs injected current time in ms (never read from a real clock)
|
|
54
|
+
*/
|
|
55
|
+
recordExit(exitCode, nowMs) {
|
|
56
|
+
if (exitCode === 0) {
|
|
57
|
+
// Clean exit: a normal stop, not a crash-loop. Clear accumulated non-zero
|
|
58
|
+
// exits. Does NOT un-trip an already-tripped breaker (only reset() does).
|
|
59
|
+
this._exitTimes = [];
|
|
60
|
+
return { tripped: this._tripped, count: 0 };
|
|
61
|
+
}
|
|
62
|
+
// Evict exits strictly older than the window, then record this one.
|
|
63
|
+
const cutoff = nowMs - this._windowMs;
|
|
64
|
+
this._exitTimes = this._exitTimes.filter((t) => t > cutoff);
|
|
65
|
+
this._exitTimes.push(nowMs);
|
|
66
|
+
if (this._exitTimes.length >= this._threshold) {
|
|
67
|
+
this._tripped = true;
|
|
68
|
+
}
|
|
69
|
+
return { tripped: this._tripped, count: this._exitTimes.length };
|
|
70
|
+
}
|
|
71
|
+
/** Clear the tripped state and the non-zero counter (e.g. on intentional restart). */
|
|
72
|
+
reset() {
|
|
73
|
+
this._exitTimes = [];
|
|
74
|
+
this._tripped = false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=session-pty-exit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-pty-exit-breaker.js","sourceRoot":"","sources":["../src/session-pty-exit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAgBhD;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IACnB,UAAU,CAAS;IACnB,SAAS,CAAS;IAEnC,wEAAwE;IAChE,UAAU,GAAa,EAAE,CAAC;IAE1B,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAAyC,EAAE;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,yBAAyB,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,yBAAyB,CAAC;IAC9D,CAAC;IAED,mEAAmE;IACnE,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,QAAgB,EAAE,KAAa;QACxC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,0EAA0E;YAC1E,0EAA0E;YAC1E,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IACnE,CAAC;IAED,sFAAsF;IACtF,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;CACF"}
|
package/dist/session.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* @module session
|
|
29
29
|
*/
|
|
30
30
|
import { EventEmitter } from 'node:events';
|
|
31
|
-
import { SessionState, SessionStatus, SessionConfig, RalphTrackerState, RalphTodoItem, ActiveBashTool, NiceConfig, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig } from './types.js';
|
|
31
|
+
import { SessionState, SessionStatus, SessionConfig, RalphTrackerState, RalphTodoItem, ActiveBashTool, NiceConfig, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig, type SessionRemote } from './types.js';
|
|
32
32
|
import type { TerminalMultiplexer, MuxSession } from './mux-interface.js';
|
|
33
33
|
import { TaskTracker, type BackgroundTask } from './task-tracker.js';
|
|
34
34
|
import { RalphTracker } from './ralph-tracker.js';
|
|
@@ -69,6 +69,7 @@ export declare function queryTmuxWindowSize(muxName: string, socket: string): {
|
|
|
69
69
|
cols: number;
|
|
70
70
|
rows: number;
|
|
71
71
|
};
|
|
72
|
+
export declare function resolveMuxAttachCwd(workingDir: string, remote?: SessionRemote): string;
|
|
72
73
|
/**
|
|
73
74
|
* Represents a JSON message from Claude CLI's stream-json output format.
|
|
74
75
|
* Messages are newline-delimited JSON objects parsed from PTY output.
|
|
@@ -146,6 +147,8 @@ export declare class Session extends EventEmitter {
|
|
|
146
147
|
private _pid;
|
|
147
148
|
private _status;
|
|
148
149
|
private _currentTaskId;
|
|
150
|
+
private readonly _ptyExitBreaker;
|
|
151
|
+
private _respawnBlocked;
|
|
149
152
|
private _terminalBuffer;
|
|
150
153
|
private _textOutput;
|
|
151
154
|
private _errorBuffer;
|
|
@@ -197,6 +200,8 @@ export declare class Session extends EventEmitter {
|
|
|
197
200
|
private _resumeSessionId;
|
|
198
201
|
private _envOverrides;
|
|
199
202
|
private _effort;
|
|
203
|
+
private readonly _tmuxHistoryLimit;
|
|
204
|
+
private readonly _remote?;
|
|
200
205
|
private _color;
|
|
201
206
|
private _taskTrackerHandlers;
|
|
202
207
|
private _ralphHandlers;
|
|
@@ -235,8 +240,12 @@ export declare class Session extends EventEmitter {
|
|
|
235
240
|
envOverrides?: Record<string, string>;
|
|
236
241
|
/** Claude CLI effort level (soft default via --settings, switchable in-session via /effort) */
|
|
237
242
|
effort?: EffortLevel;
|
|
243
|
+
/** tmux history-limit (scrollback lines) for this session's pane. */
|
|
244
|
+
tmuxHistoryLimit?: number;
|
|
238
245
|
/** Restored per-session attachment history. May include server-private external paths. */
|
|
239
246
|
attachmentHistory?: SessionAttachmentHistoryItem[];
|
|
247
|
+
/** Remote execution metadata for sessions launched through SSH inside local tmux. */
|
|
248
|
+
remote?: SessionRemote;
|
|
240
249
|
});
|
|
241
250
|
get status(): SessionStatus;
|
|
242
251
|
get currentTaskId(): string | null;
|
|
@@ -404,6 +413,7 @@ export declare class Session extends EventEmitter {
|
|
|
404
413
|
pid: number | null;
|
|
405
414
|
status: SessionStatus;
|
|
406
415
|
workingDir: string;
|
|
416
|
+
remote?: SessionRemote;
|
|
407
417
|
currentTaskId: string | null;
|
|
408
418
|
createdAt: number;
|
|
409
419
|
lastActivityAt: number;
|
|
@@ -440,6 +450,7 @@ export declare class Session extends EventEmitter {
|
|
|
440
450
|
resumeSessionId?: string;
|
|
441
451
|
effort?: EffortLevel;
|
|
442
452
|
attachmentHistory?: SessionAttachmentHistoryItem[];
|
|
453
|
+
respawnBlocked?: boolean;
|
|
443
454
|
};
|
|
444
455
|
/**
|
|
445
456
|
* Lightweight detailed state that excludes heavy buffers (textOutput, terminalBuffer).
|
|
@@ -494,6 +505,7 @@ export declare class Session extends EventEmitter {
|
|
|
494
505
|
pid: number | null;
|
|
495
506
|
status: SessionStatus;
|
|
496
507
|
workingDir: string;
|
|
508
|
+
remote?: SessionRemote;
|
|
497
509
|
currentTaskId: string | null;
|
|
498
510
|
createdAt: number;
|
|
499
511
|
lastActivityAt: number;
|
|
@@ -530,6 +542,7 @@ export declare class Session extends EventEmitter {
|
|
|
530
542
|
resumeSessionId?: string;
|
|
531
543
|
effort?: EffortLevel;
|
|
532
544
|
attachmentHistory?: SessionAttachmentHistoryItem[];
|
|
545
|
+
respawnBlocked?: boolean;
|
|
533
546
|
};
|
|
534
547
|
/**
|
|
535
548
|
* Starts an interactive Claude CLI session with full terminal support.
|
|
@@ -551,6 +564,16 @@ export declare class Session extends EventEmitter {
|
|
|
551
564
|
private _setupOrAttachMuxSession;
|
|
552
565
|
private _handleTerminalOutput;
|
|
553
566
|
startInteractive(): Promise<void>;
|
|
567
|
+
/**
|
|
568
|
+
* Clear the interactive-PTY exit circuit breaker (COD-118).
|
|
569
|
+
*
|
|
570
|
+
* Called on an EXPLICIT, user-initiated (re)start so an intentional restart is
|
|
571
|
+
* never blocked by a prior crash-loop trip. Automatic recovery/reconnect paths
|
|
572
|
+
* must NOT call this — that's the whole point of the breaker.
|
|
573
|
+
*/
|
|
574
|
+
resetRespawnBreaker(): void;
|
|
575
|
+
/** Whether the interactive-PTY exit circuit breaker is currently tripped (COD-118). */
|
|
576
|
+
get respawnBlocked(): boolean;
|
|
554
577
|
/**
|
|
555
578
|
* Process expensive parsers (ANSI strip, Ralph, bash tool, token, CLI info, task descriptions).
|
|
556
579
|
* Called on a throttled schedule (every EXPENSIVE_PROCESS_INTERVAL_MS) instead of on every
|
|
@@ -655,6 +678,9 @@ export declare class Session extends EventEmitter {
|
|
|
655
678
|
* ```
|
|
656
679
|
*/
|
|
657
680
|
write(data: string): void;
|
|
681
|
+
private _codexLastSubmitAt;
|
|
682
|
+
get codexLastSubmitAt(): number;
|
|
683
|
+
private _trackCodexSubmit;
|
|
658
684
|
/**
|
|
659
685
|
* Per-client highest-applied input sequence, for exactly-once input delivery.
|
|
660
686
|
* Keyed by the web client's stable `clientId`. Bounded so many devices over a
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/session.js
CHANGED
|
@@ -37,12 +37,14 @@ import { RalphTracker } from './ralph-tracker.js';
|
|
|
37
37
|
import { BashToolParser } from './bash-tool-parser.js';
|
|
38
38
|
import { BufferAccumulator, ANSI_ESCAPE_PATTERN_FULL, TOKEN_PATTERN, SPINNER_PATTERN, MAX_SESSION_TOKENS, execPattern, } from './utils/index.js';
|
|
39
39
|
import { MAX_TERMINAL_BUFFER_SIZE, TRIM_TERMINAL_TO as TERMINAL_BUFFER_TRIM_SIZE, MAX_TEXT_OUTPUT_SIZE, TRIM_TEXT_TO as TEXT_OUTPUT_TRIM_SIZE, MAX_MESSAGES, MAX_LINE_BUFFER_SIZE, } from './config/buffer-limits.js';
|
|
40
|
+
import { DEFAULT_TMUX_HISTORY_LIMIT } from './config/terminal-history.js';
|
|
40
41
|
import { EXEC_TIMEOUT_MS } from './config/exec-timeout.js';
|
|
41
42
|
import { buildInteractiveArgs, buildPromptArgs, buildClaudeEnv, buildMuxAttachEnv, buildShellEnv, } from './session-cli-builder.js';
|
|
42
43
|
import { SessionAutoOps } from './session-auto-ops.js';
|
|
43
44
|
import { detectUsageLimitPause } from './usage-limit-patterns.js';
|
|
44
45
|
import { SessionTaskCache } from './session-task-cache.js';
|
|
45
|
-
import {
|
|
46
|
+
import { InteractivePtyExitBreaker } from './session-pty-exit-breaker.js';
|
|
47
|
+
import { parseTerminalAttachmentRequests } from './attachment-magic.js';
|
|
46
48
|
import { sanitizeAttachmentHistory, upsertAttachmentHistory as upsertAttachmentHistoryList, } from './session-attachment-history.js';
|
|
47
49
|
/** Line buffer flush interval (100ms) - forces processing of partial lines */
|
|
48
50
|
const LINE_BUFFER_FLUSH_INTERVAL = 100;
|
|
@@ -141,6 +143,9 @@ export function queryTmuxWindowSize(muxName, socket) {
|
|
|
141
143
|
}
|
|
142
144
|
return { cols: DEFAULT_PTY_COLS, rows: DEFAULT_PTY_ROWS };
|
|
143
145
|
}
|
|
146
|
+
export function resolveMuxAttachCwd(workingDir, remote) {
|
|
147
|
+
return remote ? '/tmp' : workingDir;
|
|
148
|
+
}
|
|
144
149
|
/**
|
|
145
150
|
* Event signatures emitted by the Session class.
|
|
146
151
|
* Subscribe using `session.on('eventName', handler)`.
|
|
@@ -188,6 +193,12 @@ export class Session extends EventEmitter {
|
|
|
188
193
|
_pid = null;
|
|
189
194
|
_status = 'idle';
|
|
190
195
|
_currentTaskId = null;
|
|
196
|
+
// COD-118: bound repeated non-zero interactive-PTY exits. Recorded in the
|
|
197
|
+
// interactive PTY onExit handler; when it trips, the session flips to 'error'
|
|
198
|
+
// and startInteractive() refuses to respawn until an explicit user restart
|
|
199
|
+
// calls resetRespawnBreaker(). Defense-in-depth over the COD-115 crash-loop.
|
|
200
|
+
_ptyExitBreaker = new InteractivePtyExitBreaker();
|
|
201
|
+
_respawnBlocked = false;
|
|
191
202
|
// Use BufferAccumulator for hot-path buffers to reduce GC pressure
|
|
192
203
|
_terminalBuffer = new BufferAccumulator(MAX_TERMINAL_BUFFER_SIZE, TERMINAL_BUFFER_TRIM_SIZE);
|
|
193
204
|
_textOutput = new BufferAccumulator(MAX_TEXT_OUTPUT_SIZE, TEXT_OUTPUT_TRIM_SIZE);
|
|
@@ -265,6 +276,10 @@ export class Session extends EventEmitter {
|
|
|
265
276
|
// user can still switch in-session via /effort (incl. ultracode). Never carried as
|
|
266
277
|
// the CLAUDE_CODE_EFFORT_LEVEL env var, which would hard-lock the session.
|
|
267
278
|
_effort;
|
|
279
|
+
// tmux history-limit (scrollback lines) applied to this session's pane.
|
|
280
|
+
_tmuxHistoryLimit;
|
|
281
|
+
// Remote execution metadata, present when this session runs over SSH through local tmux.
|
|
282
|
+
_remote;
|
|
268
283
|
// Session color for visual differentiation
|
|
269
284
|
_color = 'default';
|
|
270
285
|
// Store handler references for cleanup (prevents memory leaks)
|
|
@@ -341,6 +356,8 @@ export class Session extends EventEmitter {
|
|
|
341
356
|
if (config.effort && isEffortLevel(config.effort)) {
|
|
342
357
|
this._effort = config.effort;
|
|
343
358
|
}
|
|
359
|
+
this._tmuxHistoryLimit = config.tmuxHistoryLimit ?? DEFAULT_TMUX_HISTORY_LIMIT;
|
|
360
|
+
this._remote = config.remote;
|
|
344
361
|
if (config.attachmentHistory && config.attachmentHistory.length > 0) {
|
|
345
362
|
this.restoreAttachmentHistory(config.attachmentHistory);
|
|
346
363
|
}
|
|
@@ -724,6 +741,7 @@ export class Session extends EventEmitter {
|
|
|
724
741
|
pid: this.pid,
|
|
725
742
|
status: this._status,
|
|
726
743
|
workingDir: this.workingDir,
|
|
744
|
+
remote: this._remote,
|
|
727
745
|
currentTaskId: this._currentTaskId,
|
|
728
746
|
createdAt: this.createdAt,
|
|
729
747
|
lastActivityAt: this._lastActivityAt,
|
|
@@ -758,6 +776,11 @@ export class Session extends EventEmitter {
|
|
|
758
776
|
geminiConfig: this._geminiConfig,
|
|
759
777
|
resumeSessionId: this._resumeSessionId,
|
|
760
778
|
effort: this._effort,
|
|
779
|
+
// COD-118: runtime-only — surfaced so the frontend can require explicit user
|
|
780
|
+
// intent before restarting a crash-looped session. Deliberately NOT restored
|
|
781
|
+
// by the constructor: a Codeman restart starts with a fresh breaker so boot
|
|
782
|
+
// recovery can re-attach.
|
|
783
|
+
respawnBlocked: this._respawnBlocked || undefined,
|
|
761
784
|
attachmentHistory: this.attachmentHistory.length > 0 ? this.attachmentHistory : undefined,
|
|
762
785
|
// envOverrides intentionally NOT on the public SessionState type — they must not
|
|
763
786
|
// leak into SSE / GET /api/sessions broadcasts (schema allows OPENCODE_*, which
|
|
@@ -900,8 +923,10 @@ export class Session extends EventEmitter {
|
|
|
900
923
|
name: 'xterm-256color',
|
|
901
924
|
cols: ptyCols,
|
|
902
925
|
rows: ptyRows,
|
|
903
|
-
cwd: this.workingDir,
|
|
904
|
-
|
|
926
|
+
cwd: resolveMuxAttachCwd(this.workingDir, this._remote),
|
|
927
|
+
// COD-75: codex/gemini get COLORTERM=truecolor — mirrors buildEnvExports()
|
|
928
|
+
// in tmux-manager.ts so the attach client and the tmux session agree.
|
|
929
|
+
env: buildMuxAttachEnv(this.mode === 'codex' || this.mode === 'gemini'),
|
|
905
930
|
});
|
|
906
931
|
}
|
|
907
932
|
catch (spawnErr) {
|
|
@@ -958,20 +983,28 @@ export class Session extends EventEmitter {
|
|
|
958
983
|
// eslint-disable-next-line no-control-regex
|
|
959
984
|
.replace(/\x1b\[\?(?:1000|1001|1002|1003|1005|1006|1007)[hl]/g, '');
|
|
960
985
|
}
|
|
961
|
-
// Scan terminal output for `codeman://attach
|
|
962
|
-
//
|
|
963
|
-
//
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
986
|
+
// Scan terminal output for attachment requests. `codeman://attach?...` is an
|
|
987
|
+
// explicit magic link (all modes); Codex generated images report
|
|
988
|
+
// `Saved to: file://...` — that scanner (and its relaxed trust policy) is
|
|
989
|
+
// only enabled for codex-mode sessions. The web server applies the trust
|
|
990
|
+
// boundary for each request source.
|
|
991
|
+
const attachmentRequests = parseTerminalAttachmentRequests(data, { codexArtifacts: this.mode === 'codex' });
|
|
992
|
+
for (const request of attachmentRequests) {
|
|
993
|
+
const seenKey = `${request.source}:${request.path}`;
|
|
994
|
+
if (this._attachmentMagicSeen.has(seenKey))
|
|
967
995
|
continue;
|
|
968
|
-
this._attachmentMagicSeen.add(
|
|
996
|
+
this._attachmentMagicSeen.add(seenKey);
|
|
969
997
|
if (this._attachmentMagicSeen.size > 200) {
|
|
970
998
|
const oldest = this._attachmentMagicSeen.values().next().value;
|
|
971
999
|
if (oldest)
|
|
972
1000
|
this._attachmentMagicSeen.delete(oldest);
|
|
973
1001
|
}
|
|
974
|
-
this.emit('attachmentRequested', {
|
|
1002
|
+
this.emit('attachmentRequested', {
|
|
1003
|
+
sessionId: this.id,
|
|
1004
|
+
path: request.path,
|
|
1005
|
+
source: request.source,
|
|
1006
|
+
timestamp: Date.now(),
|
|
1007
|
+
});
|
|
975
1008
|
}
|
|
976
1009
|
// BufferAccumulator handles auto-trimming when max size exceeded
|
|
977
1010
|
this._terminalBuffer.append(data);
|
|
@@ -983,6 +1016,13 @@ export class Session extends EventEmitter {
|
|
|
983
1016
|
if (this.ptyProcess) {
|
|
984
1017
|
throw new Error('Session already has a running process');
|
|
985
1018
|
}
|
|
1019
|
+
// COD-118: if the PTY exit breaker has tripped (repeated non-zero exits in a
|
|
1020
|
+
// short window), refuse to respawn. This is the uniform choke point that stops
|
|
1021
|
+
// automatic recovery/reconnect callers from re-creating a crash-looping PTY.
|
|
1022
|
+
// An explicit user restart clears it via resetRespawnBreaker().
|
|
1023
|
+
if (this._respawnBlocked) {
|
|
1024
|
+
throw new Error('Respawn blocked: interactive PTY exited non-zero too many times in a short window (circuit breaker tripped). Restart the session to clear it.');
|
|
1025
|
+
}
|
|
986
1026
|
this._resetBuffers();
|
|
987
1027
|
const modeLabel = getModeLabel(this.mode);
|
|
988
1028
|
console.log(`[Session] Starting interactive ${modeLabel} session` + (this._useMux ? ` (with ${this._mux.backend})` : ''));
|
|
@@ -1004,6 +1044,8 @@ export class Session extends EventEmitter {
|
|
|
1004
1044
|
resumeSessionId: this._resumeSessionId,
|
|
1005
1045
|
envOverrides: this._envOverrides,
|
|
1006
1046
|
effort: this._effort,
|
|
1047
|
+
historyLimit: this._tmuxHistoryLimit,
|
|
1048
|
+
remote: this._remote,
|
|
1007
1049
|
},
|
|
1008
1050
|
createSessionOptions: {
|
|
1009
1051
|
sessionId: this.id,
|
|
@@ -1020,6 +1062,8 @@ export class Session extends EventEmitter {
|
|
|
1020
1062
|
resumeSessionId: this._resumeSessionId,
|
|
1021
1063
|
envOverrides: this._envOverrides,
|
|
1022
1064
|
effort: this._effort,
|
|
1065
|
+
historyLimit: this._tmuxHistoryLimit,
|
|
1066
|
+
remote: this._remote,
|
|
1023
1067
|
},
|
|
1024
1068
|
spawnErrLabel: 'mux attachment',
|
|
1025
1069
|
});
|
|
@@ -1213,6 +1257,9 @@ export class Session extends EventEmitter {
|
|
|
1213
1257
|
});
|
|
1214
1258
|
this.ptyProcess.onExit(({ exitCode }) => {
|
|
1215
1259
|
console.log('[Session] Interactive PTY exited with code:', exitCode);
|
|
1260
|
+
// COD-118: record the exit in the circuit breaker BEFORE status bookkeeping.
|
|
1261
|
+
// A clean (0) exit resets the counter; rapid non-zero repeats trip it.
|
|
1262
|
+
const breakerResult = this._ptyExitBreaker.recordExit(exitCode, Date.now());
|
|
1216
1263
|
this.ptyProcess = null;
|
|
1217
1264
|
this._pid = null;
|
|
1218
1265
|
this._status = 'idle';
|
|
@@ -1240,9 +1287,33 @@ export class Session extends EventEmitter {
|
|
|
1240
1287
|
if (this._muxSession && this._mux) {
|
|
1241
1288
|
this._mux.setAttached(this.id, false);
|
|
1242
1289
|
}
|
|
1290
|
+
// COD-118: if the breaker tripped, surface an error state and block the NEXT
|
|
1291
|
+
// respawn so recovery/reconnect callers stop looping. Still emit 'exit' below
|
|
1292
|
+
// for normal cleanup. Cleared by an explicit user restart (resetRespawnBreaker()).
|
|
1293
|
+
if (breakerResult.tripped && !this._respawnBlocked) {
|
|
1294
|
+
this._respawnBlocked = true;
|
|
1295
|
+
this._status = 'error';
|
|
1296
|
+
console.error(`[Session] PTY exit circuit breaker tripped for ${this.id} (${breakerResult.count} non-zero exits within window); blocking respawn.`);
|
|
1297
|
+
this.emit('respawnBreakerTripped', { count: breakerResult.count });
|
|
1298
|
+
}
|
|
1243
1299
|
this.emit('exit', exitCode);
|
|
1244
1300
|
});
|
|
1245
1301
|
}
|
|
1302
|
+
/**
|
|
1303
|
+
* Clear the interactive-PTY exit circuit breaker (COD-118).
|
|
1304
|
+
*
|
|
1305
|
+
* Called on an EXPLICIT, user-initiated (re)start so an intentional restart is
|
|
1306
|
+
* never blocked by a prior crash-loop trip. Automatic recovery/reconnect paths
|
|
1307
|
+
* must NOT call this — that's the whole point of the breaker.
|
|
1308
|
+
*/
|
|
1309
|
+
resetRespawnBreaker() {
|
|
1310
|
+
this._ptyExitBreaker.reset();
|
|
1311
|
+
this._respawnBlocked = false;
|
|
1312
|
+
}
|
|
1313
|
+
/** Whether the interactive-PTY exit circuit breaker is currently tripped (COD-118). */
|
|
1314
|
+
get respawnBlocked() {
|
|
1315
|
+
return this._respawnBlocked;
|
|
1316
|
+
}
|
|
1246
1317
|
/**
|
|
1247
1318
|
* Process expensive parsers (ANSI strip, Ralph, bash tool, token, CLI info, task descriptions).
|
|
1248
1319
|
* Called on a throttled schedule (every EXPENSIVE_PROCESS_INTERVAL_MS) instead of on every
|
|
@@ -1337,6 +1408,8 @@ export class Session extends EventEmitter {
|
|
|
1337
1408
|
mode: 'shell',
|
|
1338
1409
|
niceConfig: this._niceConfig,
|
|
1339
1410
|
envOverrides: this._envOverrides,
|
|
1411
|
+
historyLimit: this._tmuxHistoryLimit,
|
|
1412
|
+
remote: this._remote,
|
|
1340
1413
|
},
|
|
1341
1414
|
createSessionOptions: {
|
|
1342
1415
|
sessionId: this.id,
|
|
@@ -1345,6 +1418,8 @@ export class Session extends EventEmitter {
|
|
|
1345
1418
|
name: this._name,
|
|
1346
1419
|
niceConfig: this._niceConfig,
|
|
1347
1420
|
envOverrides: this._envOverrides,
|
|
1421
|
+
historyLimit: this._tmuxHistoryLimit,
|
|
1422
|
+
remote: this._remote,
|
|
1348
1423
|
},
|
|
1349
1424
|
spawnErrLabel: 'shell mux attachment',
|
|
1350
1425
|
});
|
|
@@ -1875,10 +1950,25 @@ export class Session extends EventEmitter {
|
|
|
1875
1950
|
* ```
|
|
1876
1951
|
*/
|
|
1877
1952
|
write(data) {
|
|
1953
|
+
this._trackCodexSubmit(data);
|
|
1878
1954
|
if (this.ptyProcess) {
|
|
1879
1955
|
this.ptyProcess.write(data);
|
|
1880
1956
|
}
|
|
1881
1957
|
}
|
|
1958
|
+
// ── Codex thread tracking ─────────────────────────────────────────────
|
|
1959
|
+
// When a codex pane last submitted a message (Enter). The response-viewer
|
|
1960
|
+
// correlates this against ~/.codex/history.jsonl entry timestamps to find
|
|
1961
|
+
// the thread the pane is ACTUALLY on — the only signal that survives
|
|
1962
|
+
// /resume, /new and /fork typed inside the codex TUI itself.
|
|
1963
|
+
_codexLastSubmitAt = 0;
|
|
1964
|
+
get codexLastSubmitAt() {
|
|
1965
|
+
return this._codexLastSubmitAt;
|
|
1966
|
+
}
|
|
1967
|
+
_trackCodexSubmit(data) {
|
|
1968
|
+
if (this.mode === 'codex' && (data.includes('\r') || data.includes('\n'))) {
|
|
1969
|
+
this._codexLastSubmitAt = Date.now();
|
|
1970
|
+
}
|
|
1971
|
+
}
|
|
1882
1972
|
/**
|
|
1883
1973
|
* Per-client highest-applied input sequence, for exactly-once input delivery.
|
|
1884
1974
|
* Keyed by the web client's stable `clientId`. Bounded so many devices over a
|
|
@@ -1933,6 +2023,7 @@ export class Session extends EventEmitter {
|
|
|
1933
2023
|
* ```
|
|
1934
2024
|
*/
|
|
1935
2025
|
async writeViaMux(data) {
|
|
2026
|
+
this._trackCodexSubmit(data);
|
|
1936
2027
|
if (this._mux && this._muxSession) {
|
|
1937
2028
|
return this._mux.sendInput(this.id, data);
|
|
1938
2029
|
}
|