aicodeman 0.3.6 → 0.3.7
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/dist/ai-checker-base.d.ts.map +1 -1
- package/dist/ai-checker-base.js +2 -2
- package/dist/ai-checker-base.js.map +1 -1
- package/dist/ai-idle-checker.d.ts.map +1 -1
- package/dist/ai-idle-checker.js +5 -5
- package/dist/ai-idle-checker.js.map +1 -1
- package/dist/ai-plan-checker.d.ts.map +1 -1
- package/dist/ai-plan-checker.js +5 -5
- package/dist/ai-plan-checker.js.map +1 -1
- package/dist/config/ai-defaults.d.ts +20 -4
- package/dist/config/ai-defaults.d.ts.map +1 -1
- package/dist/config/ai-defaults.js +32 -4
- package/dist/config/ai-defaults.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/file-stream-manager.d.ts.map +1 -1
- package/dist/file-stream-manager.js +3 -2
- package/dist/file-stream-manager.js.map +1 -1
- package/dist/ralph-config.d.ts.map +1 -1
- package/dist/ralph-config.js +3 -4
- package/dist/ralph-config.js.map +1 -1
- package/dist/ralph-stall-detector.d.ts.map +1 -1
- package/dist/ralph-stall-detector.js +2 -1
- package/dist/ralph-stall-detector.js.map +1 -1
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +17 -22
- package/dist/ralph-tracker.js.map +1 -1
- package/dist/respawn-controller.d.ts.map +1 -1
- package/dist/respawn-controller.js +5 -5
- package/dist/respawn-controller.js.map +1 -1
- package/dist/run-summary.d.ts.map +1 -1
- package/dist/run-summary.js +2 -1
- package/dist/run-summary.js.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +3 -6
- package/dist/session.js.map +1 -1
- package/dist/subagent-watcher.d.ts.map +1 -1
- package/dist/subagent-watcher.js +2 -1
- package/dist/subagent-watcher.js.map +1 -1
- package/dist/task-tracker.d.ts.map +1 -1
- package/dist/task-tracker.js +2 -1
- package/dist/task-tracker.js.map +1 -1
- package/dist/types/plan.d.ts +2 -4
- package/dist/types/plan.d.ts.map +1 -1
- package/dist/types/plan.js +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/regex-patterns.d.ts +5 -0
- package/dist/utils/regex-patterns.d.ts.map +1 -1
- package/dist/utils/regex-patterns.js +11 -0
- package/dist/utils/regex-patterns.js.map +1 -1
- package/dist/utils/token-validation.d.ts +1 -27
- package/dist/utils/token-validation.d.ts.map +1 -1
- package/dist/utils/token-validation.js +1 -47
- package/dist/utils/token-validation.js.map +1 -1
- package/dist/web/public/api-client.js.gz +0 -0
- package/dist/web/public/app.js +26 -26
- package/dist/web/public/app.js.br +0 -0
- package/dist/web/public/app.js.gz +0 -0
- package/dist/web/public/constants.js +2 -2
- package/dist/web/public/constants.js.br +0 -0
- package/dist/web/public/constants.js.gz +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/keyboard-accessory.js.gz +0 -0
- package/dist/web/public/mobile-handlers.js.gz +0 -0
- package/dist/web/public/mobile.css.gz +0 -0
- package/dist/web/public/notification-manager.js.gz +0 -0
- package/dist/web/public/ralph-wizard.js.gz +0 -0
- package/dist/web/public/styles.css.gz +0 -0
- package/dist/web/public/subagent-windows.js +118 -18
- package/dist/web/public/subagent-windows.js.br +0 -0
- package/dist/web/public/subagent-windows.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.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.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.js.gz +0 -0
- package/dist/web/routes/respawn-routes.d.ts.map +1 -1
- package/dist/web/routes/respawn-routes.js +5 -5
- package/dist/web/routes/respawn-routes.js.map +1 -1
- package/dist/web/server.d.ts +10 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +66 -14
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
@@ -52,8 +52,8 @@ const TITLE_FLASH_INTERVAL_MS = 1500; // Title flash rate
|
|
|
52
52
|
const BROWSER_NOTIF_RATE_LIMIT_MS = 3000; // Rate limit for browser notifications
|
|
53
53
|
const AUTO_CLOSE_NOTIFICATION_MS = 8000; // Auto-close browser notifications
|
|
54
54
|
const THROTTLE_DELAY_MS = 100; // General UI throttle delay
|
|
55
|
-
const TERMINAL_CHUNK_SIZE = 32 * 1024; // 32KB chunks for terminal
|
|
56
|
-
const TERMINAL_TAIL_SIZE =
|
|
55
|
+
const TERMINAL_CHUNK_SIZE = 32 * 1024; // 32KB chunks for terminal buffer loading
|
|
56
|
+
const TERMINAL_TAIL_SIZE = 128 * 1024; // 128KB tail for initial load
|
|
57
57
|
const SYNC_WAIT_TIMEOUT_MS = 50; // Wait timeout for terminal sync
|
|
58
58
|
const STATS_POLLING_INTERVAL_MS = 2000; // System stats polling
|
|
59
59
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -121,7 +121,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
121
121
|
if (!windowData.minimized) {
|
|
122
122
|
openWindows.push({
|
|
123
123
|
agentId,
|
|
124
|
-
position: windowData.position || null
|
|
124
|
+
position: windowData.position || null,
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
}
|
|
@@ -163,8 +163,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
163
163
|
// Use the PERSISTENT parent map (THE source of truth)
|
|
164
164
|
// Fall back to saved sessionId only if it exists in current sessions
|
|
165
165
|
const parentFromMap = this.subagentParentMap.get(agentId);
|
|
166
|
-
const correctSessionId = parentFromMap ||
|
|
167
|
-
(this.sessions.has(savedSessionId) ? savedSessionId : null);
|
|
166
|
+
const correctSessionId = parentFromMap || (this.sessions.has(savedSessionId) ? savedSessionId : null);
|
|
168
167
|
|
|
169
168
|
if (correctSessionId) {
|
|
170
169
|
// Ensure the parent map has this association
|
|
@@ -184,7 +183,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
184
183
|
// Restore open windows (for recent, non-completed agents only)
|
|
185
184
|
const now = Date.now();
|
|
186
185
|
const maxAgeMs = 10 * 60 * 1000; // 10 minutes - don't restore windows for old agents
|
|
187
|
-
for (const { agentId, position } of
|
|
186
|
+
for (const { agentId, position } of states.open || []) {
|
|
188
187
|
const agent = this.subagents.get(agentId);
|
|
189
188
|
// Only restore window if agent exists, is recent, and is still active/idle
|
|
190
189
|
const agentAge = agent?.startedAt ? now - agent.startedAt : Infinity;
|
|
@@ -458,6 +457,83 @@ Object.assign(CodemanApp.prototype, {
|
|
|
458
457
|
}
|
|
459
458
|
},
|
|
460
459
|
|
|
460
|
+
// ═══════════════════════════════════════════════════════════════
|
|
461
|
+
// Lazy Terminal Lifecycle
|
|
462
|
+
// ═══════════════════════════════════════════════════════════════
|
|
463
|
+
//
|
|
464
|
+
// Teammate terminal windows use xterm.js Terminal instances that consume
|
|
465
|
+
// ~75KB of DOM memory each. With 50 agents minimized, that's ~3.75MB of
|
|
466
|
+
// invisible terminals. To avoid this, we dispose the Terminal when a
|
|
467
|
+
// window is minimized and lazily re-create it when restored.
|
|
468
|
+
//
|
|
469
|
+
// Flow:
|
|
470
|
+
// minimize → _disposeTeammateTerminalForMinimize() → sets _lazyTerminal flag
|
|
471
|
+
// restore → _restoreTeammateTerminalFromLazy() → re-creates Terminal
|
|
472
|
+
// create (hidden/minimized) → skip initTeammateTerminal, set _lazyTerminal
|
|
473
|
+
//
|
|
474
|
+
// The tmux pane buffer is re-fetched from the API on restore. Regular
|
|
475
|
+
// (non-teammate) subagent windows use activity HTML and are unaffected
|
|
476
|
+
// by this optimization.
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Dispose a teammate terminal when its window is minimized.
|
|
480
|
+
* Saves pane metadata so the terminal can be re-created on restore.
|
|
481
|
+
* No-op if the window has no teammate terminal.
|
|
482
|
+
*/
|
|
483
|
+
_disposeTeammateTerminalForMinimize(agentId) {
|
|
484
|
+
const termData = this.teammateTerminals.get(agentId);
|
|
485
|
+
if (!termData) return; // Not a teammate terminal window
|
|
486
|
+
|
|
487
|
+
const windowData = this.subagentWindows.get(agentId);
|
|
488
|
+
|
|
489
|
+
// Save pane metadata needed to re-create the terminal on restore
|
|
490
|
+
if (windowData) {
|
|
491
|
+
windowData._lazyTerminal = true;
|
|
492
|
+
windowData._lazyPaneTarget = termData.paneTarget;
|
|
493
|
+
windowData._lazySessionId = termData.sessionId;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Dispose the resize observer
|
|
497
|
+
if (termData.resizeObserver) {
|
|
498
|
+
termData.resizeObserver.disconnect();
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Dispose the xterm.js Terminal instance (frees DOM nodes and internal buffers)
|
|
502
|
+
if (termData.terminal) {
|
|
503
|
+
try {
|
|
504
|
+
termData.terminal.dispose();
|
|
505
|
+
} catch {}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Remove from teammateTerminals map so renderSubagentWindowContent won't skip this window
|
|
509
|
+
// (the activity HTML can serve as a lightweight placeholder while minimized)
|
|
510
|
+
this.teammateTerminals.delete(agentId);
|
|
511
|
+
},
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Re-create a teammate terminal when its window is restored from minimized state.
|
|
515
|
+
* Fetches the current pane buffer from the API (tmux is the source of truth).
|
|
516
|
+
* No-op if the window doesn't have the _lazyTerminal flag.
|
|
517
|
+
*/
|
|
518
|
+
_restoreTeammateTerminalFromLazy(agentId) {
|
|
519
|
+
const windowData = this.subagentWindows.get(agentId);
|
|
520
|
+
if (!windowData || !windowData._lazyTerminal) return;
|
|
521
|
+
|
|
522
|
+
const paneTarget = windowData._lazyPaneTarget;
|
|
523
|
+
const sessionId = windowData._lazySessionId;
|
|
524
|
+
|
|
525
|
+
// Clear lazy state
|
|
526
|
+
windowData._lazyTerminal = false;
|
|
527
|
+
windowData._lazyPaneTarget = null;
|
|
528
|
+
windowData._lazySessionId = null;
|
|
529
|
+
|
|
530
|
+
if (!paneTarget || !sessionId) return;
|
|
531
|
+
|
|
532
|
+
// Re-create the terminal using the same initTeammateTerminal flow
|
|
533
|
+
const paneInfo = { paneTarget, sessionId };
|
|
534
|
+
this.initTeammateTerminal(agentId, paneInfo, windowData.element);
|
|
535
|
+
},
|
|
536
|
+
|
|
461
537
|
// ═══════════════════════════════════════════════════════════════
|
|
462
538
|
// Subagent Floating Windows
|
|
463
539
|
// ═══════════════════════════════════════════════════════════════
|
|
@@ -495,7 +571,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
495
571
|
// Only open windows for agents that belong to a Codeman-managed session tab.
|
|
496
572
|
// Agents from external Claude sessions (not tracked by Codeman) should not pop up.
|
|
497
573
|
if (agent.sessionId) {
|
|
498
|
-
const hasMatchingTab = Array.from(this.sessions.values()).some(s => s.claudeSessionId === agent.sessionId);
|
|
574
|
+
const hasMatchingTab = Array.from(this.sessions.values()).some((s) => s.claudeSessionId === agent.sessionId);
|
|
499
575
|
if (!hasMatchingTab) return;
|
|
500
576
|
}
|
|
501
577
|
|
|
@@ -600,9 +676,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
600
676
|
}
|
|
601
677
|
|
|
602
678
|
// Get parent TAB element for spawn animation
|
|
603
|
-
const parentTab = parentSessionId
|
|
604
|
-
? document.querySelector(`.session-tab[data-id="${parentSessionId}"]`)
|
|
605
|
-
: null;
|
|
679
|
+
const parentTab = parentSessionId ? document.querySelector(`.session-tab[data-id="${parentSessionId}"]`) : null;
|
|
606
680
|
|
|
607
681
|
// Create window element
|
|
608
682
|
const win = document.createElement('div');
|
|
@@ -611,17 +685,19 @@ Object.assign(CodemanApp.prototype, {
|
|
|
611
685
|
win.style.zIndex = ++this.subagentWindowZIndex;
|
|
612
686
|
|
|
613
687
|
// Build parent header if we have parent info
|
|
614
|
-
const parentHeader =
|
|
615
|
-
|
|
688
|
+
const parentHeader =
|
|
689
|
+
parentSessionId && parentSessionName
|
|
690
|
+
? `<div class="subagent-window-parent" data-parent-session="${parentSessionId}">
|
|
616
691
|
<span class="parent-label">from</span>
|
|
617
692
|
<span class="parent-name" onclick="app.selectSession('${escapeHtml(parentSessionId)}')">${escapeHtml(parentSessionName)}</span>
|
|
618
693
|
</div>`
|
|
619
|
-
|
|
694
|
+
: '';
|
|
620
695
|
|
|
621
696
|
const teammateInfo = this.getTeammateInfo(agent);
|
|
622
|
-
const windowTitle = teammateInfo ? teammateInfo.name :
|
|
697
|
+
const windowTitle = teammateInfo ? teammateInfo.name : agent.description || agentId.substring(0, 7);
|
|
623
698
|
const maxTitleLen = isMobile ? 30 : 50;
|
|
624
|
-
const truncatedTitle =
|
|
699
|
+
const truncatedTitle =
|
|
700
|
+
windowTitle.length > maxTitleLen ? windowTitle.substring(0, maxTitleLen) + '...' : windowTitle;
|
|
625
701
|
const modelBadge = agent.modelShort
|
|
626
702
|
? `<span class="subagent-model-badge ${agent.modelShort}">${agent.modelShort}</span>`
|
|
627
703
|
: '';
|
|
@@ -695,7 +771,18 @@ Object.assign(CodemanApp.prototype, {
|
|
|
695
771
|
// Render content — check if this teammate has a tmux pane
|
|
696
772
|
const paneInfo = teammateInfo ? this.teammatePanesByName.get(teammateInfo.name) : null;
|
|
697
773
|
if (paneInfo) {
|
|
698
|
-
|
|
774
|
+
if (shouldHide) {
|
|
775
|
+
// Window starts hidden — defer terminal creation until visible (lazy init).
|
|
776
|
+
// Saves ~75KB of DOM memory per hidden teammate terminal window.
|
|
777
|
+
const windowEntry = this.subagentWindows.get(agentId);
|
|
778
|
+
if (windowEntry) {
|
|
779
|
+
windowEntry._lazyTerminal = true;
|
|
780
|
+
windowEntry._lazyPaneTarget = paneInfo.paneTarget;
|
|
781
|
+
windowEntry._lazySessionId = paneInfo.sessionId;
|
|
782
|
+
}
|
|
783
|
+
} else {
|
|
784
|
+
this.initTeammateTerminal(agentId, paneInfo, win);
|
|
785
|
+
}
|
|
699
786
|
} else {
|
|
700
787
|
this.renderSubagentWindowContent(agentId);
|
|
701
788
|
}
|
|
@@ -755,6 +842,10 @@ Object.assign(CodemanApp.prototype, {
|
|
|
755
842
|
this.setAgentParentSessionId(agentId, parentSessionId);
|
|
756
843
|
}
|
|
757
844
|
|
|
845
|
+
// Dispose teammate terminal on minimize to free DOM/memory (~75KB per instance).
|
|
846
|
+
// The terminal will be lazily re-created on restore via initTeammateTerminal().
|
|
847
|
+
this._disposeTeammateTerminalForMinimize(agentId);
|
|
848
|
+
|
|
758
849
|
// Always minimize to tab
|
|
759
850
|
windowData.element.style.display = 'none';
|
|
760
851
|
windowData.minimized = true;
|
|
@@ -829,7 +920,9 @@ Object.assign(CodemanApp.prototype, {
|
|
|
829
920
|
for (const [, termData] of this.teammateTerminals) {
|
|
830
921
|
if (termData.resizeObserver) termData.resizeObserver.disconnect();
|
|
831
922
|
if (termData.terminal) {
|
|
832
|
-
try {
|
|
923
|
+
try {
|
|
924
|
+
termData.terminal.dispose();
|
|
925
|
+
} catch {}
|
|
833
926
|
}
|
|
834
927
|
}
|
|
835
928
|
this.teammateTerminals.clear();
|
|
@@ -959,6 +1052,13 @@ Object.assign(CodemanApp.prototype, {
|
|
|
959
1052
|
windowData.hidden = false;
|
|
960
1053
|
}
|
|
961
1054
|
windowData.minimized = false;
|
|
1055
|
+
|
|
1056
|
+
// Lazily re-create teammate terminal if it was disposed on minimize.
|
|
1057
|
+
// Only re-create when the window is actually becoming visible.
|
|
1058
|
+
if (shouldShow && windowData._lazyTerminal) {
|
|
1059
|
+
this._restoreTeammateTerminalFromLazy(agentId);
|
|
1060
|
+
}
|
|
1061
|
+
|
|
962
1062
|
this.updateConnectionLines();
|
|
963
1063
|
// Restack all visible mobile windows so restored ones don't overlap
|
|
964
1064
|
this.relayoutMobileSubagentWindows();
|
|
@@ -1067,7 +1167,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
1067
1167
|
if (!dropdown || dropdown.classList.contains('open')) return;
|
|
1068
1168
|
|
|
1069
1169
|
// Close other dropdowns first
|
|
1070
|
-
document.querySelectorAll('.subagent-dropdown.open').forEach(d => {
|
|
1170
|
+
document.querySelectorAll('.subagent-dropdown.open').forEach((d) => {
|
|
1071
1171
|
d.classList.remove('open', 'pinned');
|
|
1072
1172
|
if (d.parentElement === document.body && d._originalParent) {
|
|
1073
1173
|
d._originalParent.appendChild(d);
|
|
@@ -1089,8 +1189,8 @@ Object.assign(CodemanApp.prototype, {
|
|
|
1089
1189
|
// Schedule hide after delay (allows moving mouse to dropdown)
|
|
1090
1190
|
scheduleHideSubagentDropdown(badgeEl) {
|
|
1091
1191
|
this._subagentHideTimeout = setTimeout(() => {
|
|
1092
|
-
const dropdown =
|
|
1093
|
-
|
|
1192
|
+
const dropdown =
|
|
1193
|
+
badgeEl?.querySelector?.('.subagent-dropdown') || document.querySelector('.subagent-dropdown.open');
|
|
1094
1194
|
if (dropdown && !dropdown.classList.contains('pinned')) {
|
|
1095
1195
|
dropdown.classList.remove('open');
|
|
1096
1196
|
if (dropdown._originalParent) {
|
|
Binary file
|
|
Binary file
|
package/dist/web/public/sw.js.gz
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"respawn-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/respawn-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"respawn-routes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/respawn-routes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM1C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqBpG,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAClE,IAAI,CAuTN"}
|
|
@@ -8,7 +8,7 @@ import { RespawnConfigSchema, InteractiveRespawnSchema, RespawnEnableSchema } fr
|
|
|
8
8
|
import { SseEvent } from '../sse-events.js';
|
|
9
9
|
import { findSessionOrFail, autoConfigureRalph } from '../route-helpers.js';
|
|
10
10
|
import { getLifecycleLog } from '../../session-lifecycle-log.js';
|
|
11
|
-
import { AI_CHECK_MODEL, AI_IDLE_CHECK_MAX_CONTEXT, AI_PLAN_CHECK_MAX_CONTEXT } from '../../config/ai-defaults.js';
|
|
11
|
+
import { AI_CHECK_MODEL, AI_IDLE_CHECK_MAX_CONTEXT, AI_PLAN_CHECK_MAX_CONTEXT, AI_IDLE_CHECK_TIMEOUT_MS, AI_IDLE_CHECK_COOLDOWN_MS, AI_PLAN_CHECK_TIMEOUT_MS, AI_PLAN_CHECK_COOLDOWN_MS, } from '../../config/ai-defaults.js';
|
|
12
12
|
/** No-op EventPort used to suppress broadcasts during pre-start ralph configuration. */
|
|
13
13
|
const noopEventPort = {
|
|
14
14
|
broadcast: () => { },
|
|
@@ -147,13 +147,13 @@ export function registerRespawnRoutes(app, ctx) {
|
|
|
147
147
|
aiIdleCheckEnabled: config.aiIdleCheckEnabled ?? currentConfig?.aiIdleCheckEnabled ?? true,
|
|
148
148
|
aiIdleCheckModel: config.aiIdleCheckModel ?? currentConfig?.aiIdleCheckModel ?? AI_CHECK_MODEL,
|
|
149
149
|
aiIdleCheckMaxContext: config.aiIdleCheckMaxContext ?? currentConfig?.aiIdleCheckMaxContext ?? AI_IDLE_CHECK_MAX_CONTEXT,
|
|
150
|
-
aiIdleCheckTimeoutMs: config.aiIdleCheckTimeoutMs ?? currentConfig?.aiIdleCheckTimeoutMs ??
|
|
151
|
-
aiIdleCheckCooldownMs: config.aiIdleCheckCooldownMs ?? currentConfig?.aiIdleCheckCooldownMs ??
|
|
150
|
+
aiIdleCheckTimeoutMs: config.aiIdleCheckTimeoutMs ?? currentConfig?.aiIdleCheckTimeoutMs ?? AI_IDLE_CHECK_TIMEOUT_MS,
|
|
151
|
+
aiIdleCheckCooldownMs: config.aiIdleCheckCooldownMs ?? currentConfig?.aiIdleCheckCooldownMs ?? AI_IDLE_CHECK_COOLDOWN_MS,
|
|
152
152
|
aiPlanCheckEnabled: config.aiPlanCheckEnabled ?? currentConfig?.aiPlanCheckEnabled ?? true,
|
|
153
153
|
aiPlanCheckModel: config.aiPlanCheckModel ?? currentConfig?.aiPlanCheckModel ?? AI_CHECK_MODEL,
|
|
154
154
|
aiPlanCheckMaxContext: config.aiPlanCheckMaxContext ?? currentConfig?.aiPlanCheckMaxContext ?? AI_PLAN_CHECK_MAX_CONTEXT,
|
|
155
|
-
aiPlanCheckTimeoutMs: config.aiPlanCheckTimeoutMs ?? currentConfig?.aiPlanCheckTimeoutMs ??
|
|
156
|
-
aiPlanCheckCooldownMs: config.aiPlanCheckCooldownMs ?? currentConfig?.aiPlanCheckCooldownMs ??
|
|
155
|
+
aiPlanCheckTimeoutMs: config.aiPlanCheckTimeoutMs ?? currentConfig?.aiPlanCheckTimeoutMs ?? AI_PLAN_CHECK_TIMEOUT_MS,
|
|
156
|
+
aiPlanCheckCooldownMs: config.aiPlanCheckCooldownMs ?? currentConfig?.aiPlanCheckCooldownMs ?? AI_PLAN_CHECK_COOLDOWN_MS,
|
|
157
157
|
durationMinutes: currentConfig?.durationMinutes,
|
|
158
158
|
};
|
|
159
159
|
ctx.mux.updateRespawnConfig(id, merged);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"respawn-routes.js","sourceRoot":"","sources":["../../../src/web/routes/respawn-routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"respawn-routes.js","sourceRoot":"","sources":["../../../src/web/routes/respawn-routes.ts"],"names":[],"mappings":"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"}
|
package/dist/web/server.d.ts
CHANGED
|
@@ -36,6 +36,11 @@ export declare class WebServer extends EventEmitter {
|
|
|
36
36
|
private transcriptWatchers;
|
|
37
37
|
private sessionListenerRefs;
|
|
38
38
|
private scheduledRuns;
|
|
39
|
+
/**
|
|
40
|
+
* SSE clients mapped to their session subscription filter.
|
|
41
|
+
* Value is a Set of session IDs the client wants events for,
|
|
42
|
+
* or `null` meaning "receive all events" (backwards-compatible default).
|
|
43
|
+
*/
|
|
39
44
|
private sseClients;
|
|
40
45
|
/** Clients with backpressure — skip writes until 'drain' fires */
|
|
41
46
|
private backpressuredClients;
|
|
@@ -176,6 +181,11 @@ export declare class WebServer extends EventEmitter {
|
|
|
176
181
|
private sendSSE;
|
|
177
182
|
private sendSSEPreformatted;
|
|
178
183
|
private broadcast;
|
|
184
|
+
/**
|
|
185
|
+
* Extract the session ID from an event's data payload for subscription filtering.
|
|
186
|
+
* Returns the sessionId string if the event is session-scoped, or null for global events.
|
|
187
|
+
*/
|
|
188
|
+
private extractSessionId;
|
|
179
189
|
private batchTerminalData;
|
|
180
190
|
/** Flush a single session's batched terminal data */
|
|
181
191
|
private flushSessionTerminalBatch;
|
package/dist/web/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAYH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
|
package/dist/web/server.js
CHANGED
|
@@ -64,7 +64,7 @@ import { SseEvent } from './sse-events.js';
|
|
|
64
64
|
import { registerAuthMiddleware, registerSecurityHeaders } from './middleware/auth.js';
|
|
65
65
|
import { registerPushRoutes, registerTeamRoutes, registerMuxRoutes, registerFileRoutes, registerScheduledRoutes, registerHookEventRoutes, registerSystemRoutes, registerCaseRoutes, registerSessionRoutes, registerRespawnRoutes, registerRalphRoutes, registerPlanRoutes, } from './routes/index.js';
|
|
66
66
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
67
|
-
import { TERMINAL_BATCH_INTERVAL, TASK_UPDATE_BATCH_INTERVAL, STATE_UPDATE_DEBOUNCE_INTERVAL, SESSIONS_LIST_CACHE_TTL, SCHEDULED_CLEANUP_INTERVAL, SCHEDULED_RUN_MAX_AGE, SSE_HEARTBEAT_INTERVAL, SSE_PADDING_SIZE, SESSION_LIMIT_WAIT_MS, ITERATION_PAUSE_MS, BATCH_FLUSH_THRESHOLD, STATS_COLLECTION_INTERVAL_MS, } from '../config/server-timing.js';
|
|
67
|
+
import { TERMINAL_BATCH_INTERVAL, TASK_UPDATE_BATCH_INTERVAL, STATE_UPDATE_DEBOUNCE_INTERVAL, SESSIONS_LIST_CACHE_TTL, SCHEDULED_CLEANUP_INTERVAL, SCHEDULED_RUN_MAX_AGE, SSE_HEARTBEAT_INTERVAL, SSE_PADDING_SIZE, SESSION_LIMIT_WAIT_MS, ITERATION_PAUSE_MS, BATCH_FLUSH_THRESHOLD, STATS_COLLECTION_INTERVAL_MS, INACTIVITY_TIMEOUT_MS, } from '../config/server-timing.js';
|
|
68
68
|
// DEC mode 2026 - Synchronized Output
|
|
69
69
|
// When terminal supports this, it buffers all output between start/end markers
|
|
70
70
|
// and renders atomically, eliminating partial-frame flicker from Ink redraws.
|
|
@@ -113,7 +113,12 @@ export class WebServer extends EventEmitter {
|
|
|
113
113
|
// Store session listener references for explicit cleanup (prevents memory leaks)
|
|
114
114
|
sessionListenerRefs = new Map();
|
|
115
115
|
scheduledRuns = new Map();
|
|
116
|
-
|
|
116
|
+
/**
|
|
117
|
+
* SSE clients mapped to their session subscription filter.
|
|
118
|
+
* Value is a Set of session IDs the client wants events for,
|
|
119
|
+
* or `null` meaning "receive all events" (backwards-compatible default).
|
|
120
|
+
*/
|
|
121
|
+
sseClients = new Map();
|
|
117
122
|
/** Clients with backpressure — skip writes until 'drain' fires */
|
|
118
123
|
backpressuredClients = new Set();
|
|
119
124
|
store = getStore();
|
|
@@ -128,7 +133,7 @@ export class WebServer extends EventEmitter {
|
|
|
128
133
|
// Adaptive batching: track rapid events to extend batch window (per-session)
|
|
129
134
|
// StaleExpirationMap auto-cleans entries for sessions that stop generating output
|
|
130
135
|
lastTerminalEventTime = new StaleExpirationMap({
|
|
131
|
-
ttlMs:
|
|
136
|
+
ttlMs: INACTIVITY_TIMEOUT_MS, // 5 minutes - auto-expire stale session timing data
|
|
132
137
|
refreshOnGet: false, // Don't refresh on reads, only on explicit sets
|
|
133
138
|
});
|
|
134
139
|
// Centralized cleanup for standalone timers (intervals + resettable timeouts)
|
|
@@ -453,13 +458,27 @@ export class WebServer extends EventEmitter {
|
|
|
453
458
|
reply.code(503).send('Too many SSE connections');
|
|
454
459
|
return;
|
|
455
460
|
}
|
|
461
|
+
// Parse optional session subscription filter from query parameter.
|
|
462
|
+
// /api/events?sessions=id1,id2 — client only receives events for those sessions.
|
|
463
|
+
// /api/events (no param) — client receives all events (backwards-compatible).
|
|
464
|
+
const query = req.query;
|
|
465
|
+
let sessionFilter = null;
|
|
466
|
+
if (query.sessions) {
|
|
467
|
+
const ids = query.sessions
|
|
468
|
+
.split(',')
|
|
469
|
+
.map((s) => s.trim())
|
|
470
|
+
.filter(Boolean);
|
|
471
|
+
if (ids.length > 0) {
|
|
472
|
+
sessionFilter = new Set(ids);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
456
475
|
reply.raw.writeHead(200, {
|
|
457
476
|
'Content-Type': 'text/event-stream',
|
|
458
477
|
'Cache-Control': 'no-cache',
|
|
459
478
|
Connection: 'keep-alive',
|
|
460
479
|
'X-Accel-Buffering': 'no', // Disable nginx buffering
|
|
461
480
|
});
|
|
462
|
-
this.sseClients.
|
|
481
|
+
this.sseClients.set(reply, sessionFilter);
|
|
463
482
|
// Send initial state
|
|
464
483
|
// Use light state for SSE init to avoid sending 2MB+ terminal buffers
|
|
465
484
|
// Buffers are fetched on-demand when switching tabs
|
|
@@ -1644,7 +1663,8 @@ export class WebServer extends EventEmitter {
|
|
|
1644
1663
|
// Client may have missed terminal data during backpressure.
|
|
1645
1664
|
// Tell it to reload the active session's buffer to recover.
|
|
1646
1665
|
try {
|
|
1647
|
-
|
|
1666
|
+
const drainPadding = this._isTunnelActive ? SSE_PADDING : '';
|
|
1667
|
+
reply.raw.write(`event: ${SseEvent.SessionNeedsRefresh}\ndata: {}\n\n${drainPadding}`);
|
|
1648
1668
|
}
|
|
1649
1669
|
catch {
|
|
1650
1670
|
/* client gone */
|
|
@@ -1671,9 +1691,12 @@ export class WebServer extends EventEmitter {
|
|
|
1671
1691
|
this.cachedSessionsList = null;
|
|
1672
1692
|
}
|
|
1673
1693
|
// Performance optimization: serialize JSON once for all clients.
|
|
1674
|
-
// Only append Cloudflare tunnel padding
|
|
1675
|
-
//
|
|
1676
|
-
|
|
1694
|
+
// Only append Cloudflare tunnel padding for latency-sensitive events —
|
|
1695
|
+
// Recovery events need immediate proxy flush; low-frequency metadata events
|
|
1696
|
+
// (session:created, ralph:*, respawn:*, etc.) don't need padding.
|
|
1697
|
+
// Note: session:terminal has its own padding in flushSessionTerminalBatch().
|
|
1698
|
+
const needsPadding = this._isTunnelActive && event === SseEvent.SessionNeedsRefresh;
|
|
1699
|
+
const padding = needsPadding ? SSE_PADDING : '';
|
|
1677
1700
|
let message;
|
|
1678
1701
|
try {
|
|
1679
1702
|
message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n` + padding;
|
|
@@ -1683,10 +1706,33 @@ export class WebServer extends EventEmitter {
|
|
|
1683
1706
|
console.error(`[Server] Failed to serialize SSE event "${event}":`, err);
|
|
1684
1707
|
return;
|
|
1685
1708
|
}
|
|
1686
|
-
|
|
1709
|
+
// Extract sessionId from event data for subscription filtering.
|
|
1710
|
+
const eventSessionId = this.extractSessionId(event, data);
|
|
1711
|
+
for (const [client, filter] of this.sseClients) {
|
|
1712
|
+
// No filter (null) = receive everything. Otherwise, skip if event is
|
|
1713
|
+
// session-scoped and the session isn't in the client's subscription set.
|
|
1714
|
+
if (filter && eventSessionId && !filter.has(eventSessionId))
|
|
1715
|
+
continue;
|
|
1687
1716
|
this.sendSSEPreformatted(client, message);
|
|
1688
1717
|
}
|
|
1689
1718
|
}
|
|
1719
|
+
/**
|
|
1720
|
+
* Extract the session ID from an event's data payload for subscription filtering.
|
|
1721
|
+
* Returns the sessionId string if the event is session-scoped, or null for global events.
|
|
1722
|
+
*/
|
|
1723
|
+
extractSessionId(event, data) {
|
|
1724
|
+
if (data == null || typeof data !== 'object')
|
|
1725
|
+
return null;
|
|
1726
|
+
const record = data;
|
|
1727
|
+
// Most session-scoped events use `sessionId`
|
|
1728
|
+
if (typeof record.sessionId === 'string')
|
|
1729
|
+
return record.sessionId;
|
|
1730
|
+
// Session lifecycle events (session:*) use `id` from the session state object
|
|
1731
|
+
if (typeof record.id === 'string' && event.startsWith('session:'))
|
|
1732
|
+
return record.id;
|
|
1733
|
+
// No session ID found — treat as global event (sent to all clients)
|
|
1734
|
+
return null;
|
|
1735
|
+
}
|
|
1690
1736
|
// Batch terminal data for better performance (60fps)
|
|
1691
1737
|
// Uses per-session timers with adaptive intervals to prevent thundering herd:
|
|
1692
1738
|
// each session flushes independently rather than all sessions flushing in one burst.
|
|
@@ -1759,8 +1805,14 @@ export class WebServer extends EventEmitter {
|
|
|
1759
1805
|
// Fast path: build SSE message directly without JSON.stringify on wrapper object.
|
|
1760
1806
|
// Only the terminal data string needs escaping; sessionId is a UUID (safe to template).
|
|
1761
1807
|
const escapedData = JSON.stringify(syncData);
|
|
1762
|
-
|
|
1763
|
-
|
|
1808
|
+
// Append tunnel padding for immediate Cloudflare proxy flush —
|
|
1809
|
+
// terminal data is high-frequency and latency-sensitive.
|
|
1810
|
+
const padding = this._isTunnelActive ? SSE_PADDING : '';
|
|
1811
|
+
const message = `event: session:terminal\ndata: {"id":"${sessionId}","data":${escapedData}}\n\n` + padding;
|
|
1812
|
+
for (const [client, filter] of this.sseClients) {
|
|
1813
|
+
// Skip clients that have a session filter and aren't subscribed to this session
|
|
1814
|
+
if (filter && !filter.has(sessionId))
|
|
1815
|
+
continue;
|
|
1764
1816
|
this.sendSSEPreformatted(client, message);
|
|
1765
1817
|
}
|
|
1766
1818
|
}
|
|
@@ -1909,7 +1961,7 @@ export class WebServer extends EventEmitter {
|
|
|
1909
1961
|
*/
|
|
1910
1962
|
cleanupDeadSSEClients() {
|
|
1911
1963
|
const deadClients = [];
|
|
1912
|
-
for (const client of this.sseClients) {
|
|
1964
|
+
for (const [client] of this.sseClients) {
|
|
1913
1965
|
try {
|
|
1914
1966
|
// Check if the underlying socket is still writable
|
|
1915
1967
|
const socket = client.raw.socket;
|
|
@@ -1991,7 +2043,7 @@ export class WebServer extends EventEmitter {
|
|
|
1991
2043
|
// Start token recording timer (every 5 minutes for long-running sessions)
|
|
1992
2044
|
this.cleanup.setInterval(() => {
|
|
1993
2045
|
this.recordPeriodicTokenUsage();
|
|
1994
|
-
},
|
|
2046
|
+
}, INACTIVITY_TIMEOUT_MS, { description: 'periodic token recording' });
|
|
1995
2047
|
// Start subagent watcher for Claude Code background agent visibility (if enabled)
|
|
1996
2048
|
if (await this.isSubagentTrackingEnabled()) {
|
|
1997
2049
|
subagentWatcher.start();
|
|
@@ -2247,7 +2299,7 @@ export class WebServer extends EventEmitter {
|
|
|
2247
2299
|
// Dispose all managed timers (intervals + resettable timeouts)
|
|
2248
2300
|
this.cleanup.dispose();
|
|
2249
2301
|
// Gracefully close all SSE connections before clearing
|
|
2250
|
-
for (const client of this.sseClients) {
|
|
2302
|
+
for (const [client] of this.sseClients) {
|
|
2251
2303
|
try {
|
|
2252
2304
|
// Send a final event to notify clients of shutdown
|
|
2253
2305
|
this.sendSSE(client, 'server:shutdown', { reason: 'Server stopping' });
|