@cluesmith/codev 3.3.2 → 3.3.4
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/dashboard-dist/assets/{index-D3XaKpZW.js → index-DZf6pNPE.js} +41 -41
- package/dashboard-dist/assets/index-DZf6pNPE.js.map +1 -0
- package/dashboard-dist/assets/index-DnYLy5C_.css +32 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/cli.d.ts.map +1 -1
- package/dist/agent-farm/cli.js +48 -0
- package/dist/agent-farm/cli.js.map +1 -1
- package/dist/agent-farm/commands/ide.d.ts +20 -0
- package/dist/agent-farm/commands/ide.d.ts.map +1 -0
- package/dist/agent-farm/commands/ide.js +138 -0
- package/dist/agent-farm/commands/ide.js.map +1 -0
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
- package/dist/agent-farm/commands/inbox.js +79 -10
- package/dist/agent-farm/commands/inbox.js.map +1 -1
- package/dist/agent-farm/commands/interrupt.d.ts +4 -1
- package/dist/agent-farm/commands/interrupt.d.ts.map +1 -1
- package/dist/agent-farm/commands/interrupt.js +6 -3
- package/dist/agent-farm/commands/interrupt.js.map +1 -1
- package/dist/agent-farm/commands/reset.d.ts +4 -1
- package/dist/agent-farm/commands/reset.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset.js +6 -3
- package/dist/agent-farm/commands/reset.js.map +1 -1
- package/dist/agent-farm/commands/send.d.ts +28 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +79 -6
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.d.ts.map +1 -1
- package/dist/agent-farm/commands/spawn-worktree.js +16 -7
- package/dist/agent-farm/commands/spawn-worktree.js.map +1 -1
- package/dist/agent-farm/commands/tower.d.ts +21 -9
- package/dist/agent-farm/commands/tower.d.ts.map +1 -1
- package/dist/agent-farm/commands/tower.js +90 -30
- package/dist/agent-farm/commands/tower.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts +3 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +8 -443
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/mailbox.d.ts +47 -7
- package/dist/agent-farm/db/mailbox.d.ts.map +1 -1
- package/dist/agent-farm/db/mailbox.js +56 -12
- package/dist/agent-farm/db/mailbox.js.map +1 -1
- package/dist/agent-farm/db/migrations.d.ts +57 -0
- package/dist/agent-farm/db/migrations.d.ts.map +1 -0
- package/dist/agent-farm/db/migrations.js +530 -0
- package/dist/agent-farm/db/migrations.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +1 -0
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/tower-owner.d.ts +168 -0
- package/dist/agent-farm/db/tower-owner.d.ts.map +1 -0
- package/dist/agent-farm/db/tower-owner.js +369 -0
- package/dist/agent-farm/db/tower-owner.js.map +1 -0
- package/dist/agent-farm/db/types.d.ts +47 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/ide-record.d.ts +65 -0
- package/dist/agent-farm/lib/ide-record.d.ts.map +1 -0
- package/dist/agent-farm/lib/ide-record.js +118 -0
- package/dist/agent-farm/lib/ide-record.js.map +1 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts +22 -0
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +96 -19
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/cron-delivery.d.ts +7 -1
- package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/cron-delivery.js +2 -1
- package/dist/agent-farm/servers/cron-delivery.js.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.d.ts +44 -2
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.js +79 -6
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
- package/dist/agent-farm/servers/ide-forward.d.ts +62 -0
- package/dist/agent-farm/servers/ide-forward.d.ts.map +1 -0
- package/dist/agent-farm/servers/ide-forward.js +274 -0
- package/dist/agent-farm/servers/ide-forward.js.map +1 -0
- package/dist/agent-farm/servers/ide-server.d.ts +68 -0
- package/dist/agent-farm/servers/ide-server.d.ts.map +1 -0
- package/dist/agent-farm/servers/ide-server.js +281 -0
- package/dist/agent-farm/servers/ide-server.js.map +1 -0
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +296 -12
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.js +566 -69
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +66 -19
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.js +204 -37
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
- package/dist/agent-farm/servers/message-write.d.ts +138 -11
- package/dist/agent-farm/servers/message-write.d.ts.map +1 -1
- package/dist/agent-farm/servers/message-write.js +144 -35
- package/dist/agent-farm/servers/message-write.js.map +1 -1
- package/dist/agent-farm/servers/overview.d.ts +28 -12
- package/dist/agent-farm/servers/overview.d.ts.map +1 -1
- package/dist/agent-farm/servers/overview.js +130 -79
- package/dist/agent-farm/servers/overview.js.map +1 -1
- package/dist/agent-farm/servers/render-gate.d.ts +77 -1
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
- package/dist/agent-farm/servers/render-gate.js +174 -25
- package/dist/agent-farm/servers/render-gate.js.map +1 -1
- package/dist/agent-farm/servers/session-submit.d.ts +7 -4
- package/dist/agent-farm/servers/session-submit.d.ts.map +1 -1
- package/dist/agent-farm/servers/session-submit.js +7 -4
- package/dist/agent-farm/servers/session-submit.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +7 -3
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +17 -10
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +32 -0
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +186 -26
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +79 -9
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +21 -0
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +106 -13
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +35 -0
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +39 -0
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +26 -2
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/utils/message-format.d.ts +78 -2
- package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.js +107 -11
- package/dist/agent-farm/utils/message-format.js.map +1 -1
- package/dist/agent-farm/utils/port.d.ts +22 -0
- package/dist/agent-farm/utils/port.d.ts.map +1 -0
- package/dist/agent-farm/utils/port.js +35 -0
- package/dist/agent-farm/utils/port.js.map +1 -0
- package/dist/agent-farm/utils/server-utils.d.ts +26 -0
- package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
- package/dist/agent-farm/utils/server-utils.js +36 -0
- package/dist/agent-farm/utils/server-utils.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/consult/index.d.ts.map +1 -1
- package/dist/commands/consult/index.js +61 -1
- package/dist/commands/consult/index.js.map +1 -1
- package/dist/commands/consult/tree-tripwire.d.ts +177 -0
- package/dist/commands/consult/tree-tripwire.d.ts.map +1 -0
- package/dist/commands/consult/tree-tripwire.js +356 -0
- package/dist/commands/consult/tree-tripwire.js.map +1 -0
- package/dist/commands/doctor.d.ts +69 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +165 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-image.d.ts +25 -1
- package/dist/commands/generate-image.d.ts.map +1 -1
- package/dist/commands/generate-image.js +410 -2
- package/dist/commands/generate-image.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +18 -2
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/lib/agent-env.d.ts +86 -0
- package/dist/lib/agent-env.d.ts.map +1 -0
- package/dist/lib/agent-env.js +126 -0
- package/dist/lib/agent-env.js.map +1 -0
- package/dist/lib/forge-contracts.d.ts +76 -5
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/forge-rate-limit.d.ts +45 -0
- package/dist/lib/forge-rate-limit.d.ts.map +1 -0
- package/dist/lib/forge-rate-limit.js +89 -0
- package/dist/lib/forge-rate-limit.js.map +1 -0
- package/dist/lib/forge.d.ts +29 -1
- package/dist/lib/forge.d.ts.map +1 -1
- package/dist/lib/forge.js +96 -21
- package/dist/lib/forge.js.map +1 -1
- package/dist/lib/github.d.ts +13 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +58 -15
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/test-env.d.ts +17 -0
- package/dist/lib/test-env.d.ts.map +1 -1
- package/dist/lib/test-env.js +20 -0
- package/dist/lib/test-env.js.map +1 -1
- package/dist/terminal/pty-manager.d.ts +10 -1
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +38 -9
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +174 -8
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +299 -25
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/session-manager.d.ts +23 -2
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +115 -36
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-screen.d.ts +34 -5
- package/dist/terminal/session-screen.d.ts.map +1 -1
- package/dist/terminal/session-screen.js +52 -6
- package/dist/terminal/session-screen.js.map +1 -1
- package/dist/terminal/shellper-client.d.ts +73 -0
- package/dist/terminal/shellper-client.d.ts.map +1 -1
- package/dist/terminal/shellper-client.js +151 -0
- package/dist/terminal/shellper-client.js.map +1 -1
- package/dist/terminal/shellper-main.js +20 -3
- package/dist/terminal/shellper-main.js.map +1 -1
- package/dist/terminal/shellper-process.d.ts +2 -0
- package/dist/terminal/shellper-process.d.ts.map +1 -1
- package/dist/terminal/shellper-process.js +17 -1
- package/dist/terminal/shellper-process.js.map +1 -1
- package/dist/terminal/shellper-protocol.d.ts +28 -0
- package/dist/terminal/shellper-protocol.d.ts.map +1 -1
- package/dist/terminal/shellper-protocol.js.map +1 -1
- package/dist/terminal/terminal-replies.d.ts +102 -0
- package/dist/terminal/terminal-replies.d.ts.map +1 -0
- package/dist/terminal/terminal-replies.js +181 -0
- package/dist/terminal/terminal-replies.js.map +1 -0
- package/package.json +4 -4
- package/scripts/forge/gitea/_lib.sh +214 -0
- package/scripts/forge/gitea/issue-comment.sh +8 -1
- package/scripts/forge/gitea/issue-view.sh +95 -4
- package/scripts/forge/gitea/pr-create.sh +155 -0
- package/scripts/forge/gitea/pr-exists.sh +32 -4
- package/scripts/forge/gitea/pr-list.sh +40 -31
- package/scripts/forge/gitea/pr-view.sh +65 -4
- package/scripts/forge/gitea/recently-merged.sh +91 -21
- package/scripts/forge/gitea/user-identity.sh +30 -1
- package/scripts/forge/github/issue-view.sh +5 -2
- package/scripts/forge/github/pr-create.sh +47 -0
- package/scripts/forge/github/pr-list.sh +6 -2
- package/scripts/forge/github/pr-search.sh +6 -2
- package/scripts/forge/gitlab/issue-search.sh +1 -0
- package/scripts/forge/gitlab/issue-view.sh +24 -4
- package/scripts/forge/gitlab/pr-create.sh +53 -0
- package/scripts/forge/gitlab/pr-search.sh +37 -2
- package/scripts/forge/linear/auth-status.sh +1 -0
- package/scripts/forge/linear/issue-comment.sh +1 -0
- package/scripts/forge/linear/issue-list.sh +1 -0
- package/scripts/forge/linear/issue-search.sh +1 -0
- package/scripts/forge/linear/issue-view.sh +14 -2
- package/scripts/forge/linear/recently-closed.sh +1 -0
- package/scripts/forge/linear/user-identity.sh +1 -0
- package/skeleton/.claude/skills/generate-image/SKILL.md +39 -1
- package/skeleton/.codex/skills/generate-image/SKILL.md +39 -1
- package/skeleton/protocols/air/prompts/pr.md +6 -1
- package/skeleton/protocols/aspir/prompts/review.md +6 -1
- package/skeleton/protocols/bugfix/prompts/pr.md +6 -1
- package/skeleton/protocols/bugfix/protocol.md +2 -1
- package/skeleton/protocols/maintain/prompts/review.md +6 -1
- package/skeleton/protocols/pir/prompts/review.md +10 -7
- package/skeleton/protocols/spir/prompts/review.md +6 -1
- package/skeleton/resources/commands/agent-farm.md +28 -3
- package/skeleton/roles/consultant.md +32 -0
- package/skeleton/templates/AGENTS.md +1 -1
- package/skeleton/templates/CLAUDE.md +1 -1
- package/templates/tower.html +16 -1
- package/dashboard-dist/assets/index-BZRTEMtH.css +0 -32
- package/dashboard-dist/assets/index-D3XaKpZW.js.map +0 -1
|
@@ -13,20 +13,22 @@ import { homedir } from 'node:os';
|
|
|
13
13
|
import { fileURLToPath } from 'node:url';
|
|
14
14
|
import { Command } from 'commander';
|
|
15
15
|
import { WebSocketServer } from 'ws';
|
|
16
|
-
import { SessionManager } from '../../terminal/session-manager.js';
|
|
17
|
-
import { startRateLimitCleanup } from './tower-utils.js';
|
|
16
|
+
import { SessionManager, ORPHAN_SWEEP_TIMEOUT_MS } from '../../terminal/session-manager.js';
|
|
17
|
+
import { startRateLimitCleanup, persistableCommand, logSessionIdentity } from './tower-utils.js';
|
|
18
18
|
import { sweepShellperHusks, resolveHuskGraceMs } from './shellper-husk-sweep.js';
|
|
19
19
|
import { sweepSessionLogs, measureSessionLogs, resolveLogRetentionDays, resolveLogSweepIntervalMs, formatBytes, MS_PER_DAY, } from './session-log-sweep.js';
|
|
20
20
|
import { initTunnel, shutdownTunnel, } from './tower-tunnel.js';
|
|
21
21
|
import { initCron, shutdownCron } from './tower-cron.js';
|
|
22
|
+
import { reconcileIdeServer } from './ide-server.js';
|
|
22
23
|
import { initInstances, shutdownInstances, registerKnownWorkspace, getKnownWorkspacePaths, getInstances, } from './tower-instances.js';
|
|
23
|
-
import { initTerminals, shutdownTerminals, getWorkspaceTerminals, getTerminalManager, getWorkspaceTerminalsEntry, saveTerminalSession, deleteTerminalSession, deleteWorkspaceTerminalSessions, deleteFileTabsForWorkspace, getTerminalsForWorkspace, reconcileTerminalSessions, } from './tower-terminals.js';
|
|
24
|
+
import { initTerminals, shutdownTerminals, getWorkspaceTerminals, getTerminalManager, getWorkspaceTerminalsEntry, saveTerminalSession, updateTerminalCommand, getTerminalSessionById, deleteTerminalSession, deleteWorkspaceTerminalSessions, deleteFileTabsForWorkspace, getTerminalsForWorkspace, reconcileTerminalSessions, } from './tower-terminals.js';
|
|
24
25
|
import { setupUpgradeHandler, } from './tower-websocket.js';
|
|
25
26
|
import { handleRequest, deliverCronMessage } from './tower-routes.js';
|
|
26
27
|
import { startMailboxDrainer, stopMailboxDrainer, setMailboxBroadcaster } from './mailbox-wiring.js';
|
|
27
28
|
import { shutdownDelayedSends } from './delayed-send.js';
|
|
28
29
|
import { setCodevConfigNotifier, stopAllCodevConfigWatchers } from './codev-config-watcher.js';
|
|
29
30
|
import { getGlobalDb } from '../db/index.js';
|
|
31
|
+
import { claimGlobalDbOwnership, defaultLockFile, ownershipConflictMessage, releaseTowerOwnerIfMine, } from '../db/tower-owner.js';
|
|
30
32
|
import { runBootConsolidation } from '../db/consolidate.js';
|
|
31
33
|
import { DEFAULT_TOWER_PORT, AGENT_FARM_DIR } from '../lib/tower-client.js';
|
|
32
34
|
import { validateHost, getExpectedKey, selectWsSubprotocol } from '../utils/server-utils.js';
|
|
@@ -72,6 +74,10 @@ const bridgeMode = process.env.BRIDGE_MODE === '1';
|
|
|
72
74
|
const bindHost = bridgeMode
|
|
73
75
|
? validateHost(process.env.BRIDGE_TOWER_HOST || '127.0.0.1')
|
|
74
76
|
: '127.0.0.1';
|
|
77
|
+
// Issue #1629: the owner lock file for this global.db (its `.tower-owner` sibling;
|
|
78
|
+
// the suffix avoids SQLite's own auxiliary/dotfile-VFS names). Resolved once so the
|
|
79
|
+
// boot guard and the graceful-shutdown release use the same path.
|
|
80
|
+
const towerLockFile = defaultLockFile();
|
|
75
81
|
// Request authentication (advisory GHSA-xvjp-7748-v88v): ensure the shared local
|
|
76
82
|
// key exists at boot so HTTP/WS enforcement has an expected value to compare
|
|
77
83
|
// against. getExpectedKey() issues the key if missing (Tower owns generation)
|
|
@@ -167,6 +173,16 @@ async function gracefulShutdown(signal) {
|
|
|
167
173
|
shutdownInstances();
|
|
168
174
|
// 8. Tear down terminal module (Spec 0105 Phase 4) — shuts down terminal manager
|
|
169
175
|
shutdownTerminals();
|
|
176
|
+
// 9. Issue #1629: release our global.db owner lock so the next start sees an
|
|
177
|
+
// unowned DB. Best-effort and pid-scoped (never removes a lock we don't own);
|
|
178
|
+
// a hard kill skips this, but the boot liveness check self-clears a dead
|
|
179
|
+
// owner's lock anyway.
|
|
180
|
+
try {
|
|
181
|
+
releaseTowerOwnerIfMine(towerLockFile, process.pid);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
log('WARN', `Failed to release global.db owner lock: ${err.message}`);
|
|
185
|
+
}
|
|
170
186
|
log('INFO', 'Graceful shutdown complete');
|
|
171
187
|
process.exit(0);
|
|
172
188
|
}
|
|
@@ -424,6 +440,26 @@ server.listen(port, bindHost, () => {
|
|
|
424
440
|
* the readiness gate above until it calls markBootComplete().
|
|
425
441
|
*/
|
|
426
442
|
async function bootSequence() {
|
|
443
|
+
// Issue #1629: global.db owner lock. The port bind above is a SAME-PORT mutex
|
|
444
|
+
// only — a second Tower on a DIFFERENT port can still open this global.db (the
|
|
445
|
+
// #1515 incident: an AGENT_FARM_DIR typo pointed a test Tower at production).
|
|
446
|
+
// Its reconcile would then hijack every live shellper and delete the rows. So
|
|
447
|
+
// BEFORE anything touches the shared DB rows, sockets, or shellper processes
|
|
448
|
+
// (consolidation, reconcile, killOrphanedShellpers), claim ownership via an
|
|
449
|
+
// exclusive lock file next to global.db — and refuse loudly if a live Tower
|
|
450
|
+
// already owns this DB.
|
|
451
|
+
const ownership = await claimGlobalDbOwnership({
|
|
452
|
+
lockFile: towerLockFile,
|
|
453
|
+
pid: process.pid,
|
|
454
|
+
port,
|
|
455
|
+
dbDir: AGENT_FARM_DIR,
|
|
456
|
+
bindHost,
|
|
457
|
+
});
|
|
458
|
+
if (!ownership.ok) {
|
|
459
|
+
log('ERROR', ownershipConflictMessage(ownership.conflict, AGENT_FARM_DIR));
|
|
460
|
+
process.exit(1);
|
|
461
|
+
}
|
|
462
|
+
log('INFO', `Claimed global.db ownership (pid ${process.pid}, port ${port}) at ${AGENT_FARM_DIR}`);
|
|
427
463
|
// Initialize shellper session manager for persistent terminals
|
|
428
464
|
const socketDir = process.env.SHELLPER_SOCKET_DIR || path.join(homedir(), '.codev', 'run');
|
|
429
465
|
const shellperScript = path.join(__dirname, '..', '..', 'terminal', 'shellper-main.js');
|
|
@@ -469,6 +505,19 @@ async function bootSequence() {
|
|
|
469
505
|
pid = info.pid;
|
|
470
506
|
}
|
|
471
507
|
ptySession.attachShellper(client, Buffer.alloc(0), pid, ptySession.shellperSessionId ?? sessionId);
|
|
508
|
+
// PIR #1475: this is the one attach site with no row rewrite behind it, and
|
|
509
|
+
// the client is a FRESH connection — its WELCOME carries the shellper's
|
|
510
|
+
// current argv, which may differ from what the row holds (a relaunch swapped
|
|
511
|
+
// it, or the row was healed from config). Write it back so the fallback SSOT
|
|
512
|
+
// converges instead of drifting. No-ops when unchanged.
|
|
513
|
+
// Read the row BEFORE the write below, so `row=` reports what the reconnect
|
|
514
|
+
// actually found rather than what it left behind. This is the site the log
|
|
515
|
+
// was built for — the one place a fresh WELCOME can disagree with the row —
|
|
516
|
+
// so a hardcoded `row=null` here would misreport exactly the case worth
|
|
517
|
+
// seeing.
|
|
518
|
+
const rowBefore = getTerminalSessionById(ptySession.id)?.command ?? null;
|
|
519
|
+
logSessionIdentity(log, 'session-reconnected', ptySession.id, ptySession, rowBefore);
|
|
520
|
+
updateTerminalCommand(ptySession.id, persistableCommand(ptySession));
|
|
472
521
|
log('INFO', `Shellper session ${sessionId} re-attached to terminal ${ptySession.id}`);
|
|
473
522
|
});
|
|
474
523
|
const staleCleaned = await shellperManager.cleanupStaleSockets();
|
|
@@ -572,13 +621,29 @@ async function bootSequence() {
|
|
|
572
621
|
// model causes the first client to be replaced, corrupting the session
|
|
573
622
|
// and deleting the architect terminal's socket file (Bugfix #274).
|
|
574
623
|
await reconcileTerminalSessions();
|
|
575
|
-
// Bugfix #341: Kill orphaned shellper processes not in active sessions.
|
|
576
|
-
//
|
|
577
|
-
//
|
|
578
|
-
//
|
|
624
|
+
// Bugfix #341: Kill orphaned shellper processes not in active sessions. Must
|
|
625
|
+
// run AFTER reconciliation so reconnected sessions are in the active map and
|
|
626
|
+
// won't be killed. Catches shellpers from crashed tests or previous Tower
|
|
627
|
+
// instances that lost their socket files.
|
|
628
|
+
//
|
|
629
|
+
// Issue #1685: this sweep used to be unbounded and silent on the zero-orphan
|
|
630
|
+
// path, so on a flooded/wedged process table its `ps` scan + per-orphan socket
|
|
631
|
+
// probes stalled here for minutes, tripping the launcher's 30s startup timeout
|
|
632
|
+
// with no trace in the log. It is now time-bounded (killOrphanedShellpers
|
|
633
|
+
// abandons past ORPHAN_SWEEP_TIMEOUT_MS, well under the 30s launcher timeout
|
|
634
|
+
// and the 20s BOOT_READY_TIMEOUT_MS) and logs its entry + duration. It is kept
|
|
635
|
+
// BEFORE markBootComplete() deliberately: an un-aged sweep must not run once
|
|
636
|
+
// requests are served, or it could reap a just-spawned session whose shellper
|
|
637
|
+
// is already in `ps` but not yet registered/socket-listening.
|
|
638
|
+
const orphanSweepStartMs = Date.now();
|
|
639
|
+
log('INFO', 'Sweeping for orphaned shellpers…');
|
|
579
640
|
const orphansKilled = await shellperManager.killOrphanedShellpers();
|
|
580
|
-
|
|
581
|
-
|
|
641
|
+
const orphanSweepMs = Date.now() - orphanSweepStartMs;
|
|
642
|
+
if (orphansKilled < 0) {
|
|
643
|
+
log('WARN', `Orphan sweep abandoned after ${orphanSweepMs}ms (exceeded ${ORPHAN_SWEEP_TIMEOUT_MS}ms budget); remaining orphans left for the next startup`);
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
log('INFO', `Orphan sweep done in ${orphanSweepMs}ms (${orphansKilled} killed)`);
|
|
582
647
|
}
|
|
583
648
|
// Issue #1261 test hook: widen the pre-wiring window to a known duration so
|
|
584
649
|
// the startup race is deterministic instead of a function of this machine's
|
|
@@ -627,6 +692,11 @@ async function bootSequence() {
|
|
|
627
692
|
// shellper (1h grace by default), so a session created by an incoming
|
|
628
693
|
// request while the sweep runs can never match it.
|
|
629
694
|
await runHuskSweep();
|
|
695
|
+
// Issue #1668: reconcile the IDE server across a Tower restart — adopt a live
|
|
696
|
+
// one (no orphan) or respawn a recorded-but-dead one. Post-readiness and
|
|
697
|
+
// NOT awaited: a respawn's readiness wait must never delay the rest of boot,
|
|
698
|
+
// and a failure here never affects Tower itself.
|
|
699
|
+
reconcileIdeServer(log).catch((err) => log('ERROR', `IDE server reconcile failed: ${err.message}`));
|
|
630
700
|
// Issue #1238: PTY session log retention. Session logs are per-session files
|
|
631
701
|
// in ~/.agent-farm/logs that nothing ever deleted, so they accreted forever
|
|
632
702
|
// (19 GB / 29,728 files on an audited machine). Sweep aged-out logs at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tower-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-server.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,WAAW,EACX,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EACV,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAC/B,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,mDAAmD;AACnD,MAAM,wBAAwB,GAAG,qBAAqB,EAAE,CAAC;AAEzD,oDAAoD;AACpD,IAAI,eAAe,GAA0B,IAAI,CAAC;AAClD,IAAI,uBAAuB,GAA0B,IAAI,CAAC;AAC1D,IAAI,yBAAyB,GAA0B,IAAI,CAAC;AAC5D,IAAI,8BAA8B,GAA0B,IAAI,CAAC;AACjE,IAAI,uBAAuB,GAA0B,IAAI,CAAC;AAE1D,2EAA2E;AAC3E,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,yBAAyB;AACzB,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAE5C,iCAAiC;AACjC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,oEAAoE,CAAC;KACjF,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;KAClE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AAEjC,+EAA+E;AAC/E,6EAA6E;AAC7E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3C,qEAAqE;AACrE,mFAAmF;AACnF,2EAA2E;AAC3E,yFAAyF;AACzF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC;AACnD,MAAM,QAAQ,GAAG,UAAU;IACzB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,WAAW,CAAC;IAC5D,CAAC,CAAC,WAAW,CAAC;AAEhB,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,oEAAoE;AACpE,+EAA+E;AAC/E,8EAA8E;AAC9E,iCAAiC;AACjC,MAAM,iBAAiB,GAAG,cAAc,EAAE,CAAC;AAE3C,kBAAkB;AAClB,SAAS,GAAG,CAAC,KAAgC,EAAE,OAAe;IAC5D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,SAAS,MAAM,KAAK,KAAK,OAAO,EAAE,CAAC;IAEvD,wBAAwB;IACxB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,OAAO,EAAE,uBAAuB,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChG,GAAG,CAAC,OAAO,EAAE,wBAAwB,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,kDAAkD;AAClD,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,GAAG,CAAC,MAAM,EAAE,YAAY,MAAM,iCAAiC,CAAC,CAAC;IAEjE,oCAAoC;IACpC,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,qCAAqC;IACrC,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAC7C,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,oEAAoE;IACpE,+EAA+E;IAC/E,+EAA+E;IAC/E,8DAA8D;IAC9D,iFAAiF;IACjF,wEAAwE;IACxE,IAAI,eAAe,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,EAAE,yEAAyE,CAAC,CAAC;IACzF,CAAC;IAED,2EAA2E;IAC3E,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACxC,IAAI,uBAAuB;QAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,yBAAyB;QAAE,aAAa,CAAC,yBAAyB,CAAC,CAAC;IACxE,IAAI,8BAA8B;QAAE,aAAa,CAAC,8BAA8B,CAAC,CAAC;IAClF,IAAI,uBAAuB;QAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACpE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEpC,kFAAkF;IAClF,+EAA+E;IAC/E,6EAA6E;IAC7E,8EAA8E;IAC9E,gFAAgF;IAChF,iFAAiF;IACjF,mBAAmB;IACnB,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;IAC9C,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,MAAM,EAAE,WAAW,cAAc,yDAAyD,CAAC,CAAC;IAClG,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,kBAAkB,EAAE,CAAC;IAErB,oCAAoC;IACpC,YAAY,EAAE,CAAC;IAEf,+DAA+D;IAC/D,cAAc,EAAE,CAAC;IAEjB,+DAA+D;IAC/D,0BAA0B,EAAE,CAAC;IAE7B,mDAAmD;IACnD,iBAAiB,EAAE,CAAC;IAEpB,iFAAiF;IACjF,iBAAiB,EAAE,CAAC;IAEpB,GAAG,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,mCAAmC;AACnC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AAEzD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;IAC5C,GAAG,CAAC,OAAO,EAAE,iBAAiB,OAAO,0CAA0C,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,GAAG,CAAC,MAAM,EAAE,iCAAiC,IAAI,EAAE,CAAC,CAAC;AAErD,iEAAiE;AACjE,MAAM,UAAU,GAAgB,EAAE,CAAC;AACnC,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAE9B,2DAA2D;AAC3D,SAAS,oBAAoB,CAAC,OAAiB;IAC7C,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,YAA+E;IAC5G,MAAM,EAAE,GAAG,EAAE,qBAAqB,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC;IAE/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,uEAAuE;AACvE,mEAAmE;AACnE,6EAA6E;AAC7E,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,iBAAiB;AACzD,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAI,kCAAkC;AAC3E,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;IAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,yEAAyE;QACzE,oEAAoE;QACpE,mEAAmE;QACnE,MAAM,MAAM,GAAG,mBAAmB,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAC9B,oBAAoB,CAAC,KAAK,EAAE,CAAC;AAE7B;;;GAGG;AACH,SAAS,gBAAgB;IACvB,2DAA2D;IAC3D,iEAAiE;IACjE,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qBAAqB;AACrB,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;AAExC,kEAAkE;AAClE,IAAI,WAAW,GAA2B,IAAI,CAAC;AAE/C,8DAA8D;AAC9D,6EAA6E;AAC7E,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC9E,MAAM,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC5D,IAAI,iBAAiB,EAAE,CAAC;IACtB,GAAG,CAAC,MAAM,EAAE,6BAA6B,kBAAkB,EAAE,CAAC,CAAC;AACjE,CAAC;KAAM,CAAC;IACN,GAAG,CAAC,MAAM,EAAE,gEAAgE,CAAC,CAAC;AAChF,CAAC;AAED,+EAA+E;AAC/E,+DAA+D;AAC/D,+EAA+E;AAE/E,MAAM,QAAQ,GAAiB;IAC7B,GAAG;IACH,IAAI;IACJ,OAAO;IACP,SAAS;IACT,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB,EAAE,GAAG,EAAE,CAAC,eAAe;IACzC,qBAAqB;IACrB,YAAY,EAAE,CAAC,MAAiB,EAAE,EAAE;QAClC,oEAAoE;QACpE,oEAAoE;QACpE,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,eAAe,GAAG,GAAG,CAAC;QAC5B,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,EAAE,oBAAoB,eAAe,wBAAwB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,8DAA8D;QAC9D,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,qBAAqB,GAAG,CAAC,CAAC,GAAG,qBAAqB,CAAC;QACtG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,eAAe,EAAE,CAAC,EAAU,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,0EAA0E;AAC1E,uEAAuE;AACvE,yEAAyE;AACzE,8EAA8E;AAC9E,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;AAE9C,qFAAqF;AACrF,uFAAuF;AACvF,iFAAiF;AACjF,mFAAmF;AACnF,uFAAuF;AACvF,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;AAE7C,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAC/E,EAAE;AACF,oEAAoE;AACpE,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;AAC/E,6CAA6C;AAE7C,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACnC,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,MAAM,WAAW,GAAsB,EAAE,CAAC;AAE1C,2EAA2E;AAC3E,SAAS,gBAAgB;IACvB,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,MAAM,EAAE,uCAAuC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,yBAAyB,CAAC,CAAC;IAC1G,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;AACzD,CAAC;AAED,uFAAuF;AACvF,SAAS,gBAAgB,CAAC,SAAiB;IACzC,IAAI,YAAY;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAClD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,EAAE,gCAAgC,qBAAqB,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;YACrH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QACD,kDAAkD;QAClD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa;YAAE,OAAO;IACjD,CAAC;IACD,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;IACjC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,GAAG,CAAC,OAAO,EAAE,+KAA+K,CAAC,CAAC;YAC9L,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,kDAAkD,QAAQ,6LAA6L,CAAC,CAAC;IACvQ,CAAC;SAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9B,GAAG,CAAC,MAAM,EAAE,2HAA2H,CAAC,CAAC;IAC3I,CAAC;IACD,4EAA4E;IAC5E,MAAM,WAAW,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpE,GAAG,CAAC,MAAM,EAAE,oCAAoC,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC;IAEvE,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,2BAA2B;QAC3B,GAAG,CAAC,OAAO,EAAE,+BAAgC,GAAa,CAAC,OAAO,KAAM,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;GAIG;AACH,KAAK,UAAU,YAAY;IACzB,+DAA+D;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACxF,eAAe,GAAG,IAAI,cAAc,CAAC;QACnC,SAAS;QACT,cAAc;QACd,cAAc,EAAE,OAAO,CAAC,QAAQ;QAChC,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;KAC1C,CAAC,CAAC;IAEH,yEAAyE;IACzE,uEAAuE;IACvE,8DAA8D;IAC9D,eAAe,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,SAAiB,EAAE,GAAU,EAAE,EAAE;QACpE,GAAG,CAAC,OAAO,EAAE,oBAAoB,SAAS,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,6CAA6C;IAC7C,eAAe,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE;QAC1E,GAAG,CAAC,OAAO,EAAE,oBAAoB,SAAS,aAAa,MAAM,EAAE,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,EAAE,oBAAoB,SAAS,2DAA2D,CAAC,CAAC;YACtG,OAAO;QACT,CAAC;QACD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,4EAA4E;IAC5E,qEAAqE;IACrE,2EAA2E;IAC3E,qDAAqD;IACrD,eAAe,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,SAAiB,EAAE,MAAmE,EAAE,EAAE;QACnI,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,EAAE,oBAAoB,SAAS,qDAAqD,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,eAAgB,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC;QACD,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,iBAAiB,IAAI,SAAS,CAAC,CAAC;QACnG,GAAG,CAAC,MAAM,EAAE,oBAAoB,SAAS,4BAA4B,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,mBAAmB,EAAE,CAAC;IACjE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,MAAM,EAAE,cAAc,YAAY,2BAA2B,CAAC,CAAC;IACrE,CAAC;IAED,uFAAuF;IACvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACrH,uBAAuB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAgB,CAAC,mBAAmB,EAAE,CAAC;YAC7D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,GAAG,CAAC,MAAM,EAAE,6BAA6B,OAAO,2BAA2B,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,EAAE,qCAAsC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAEtB,wEAAwE;IACxE,sEAAsE;IACtE,2EAA2E;IAC3E,yEAAyE;IACzE,6EAA6E;IAC7E,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,SAAS,EAAE,EAAE,CAAC,CAAC;IACzG,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,EAC7E,IAAI,CACL,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,IAAmB,EAAE;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACtC,SAAS;gBACT,EAAE,EAAE,WAAW,EAAE;gBACjB,OAAO,EAAE,WAAW;gBACpB,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;aACvC,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,EAAE,sBAAsB,MAAM,CAAC,KAAK,mBAAmB,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,EAAE,sBAAuB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC;IACF,yBAAyB,GAAG,WAAW,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAE3E,GAAG,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;IAEpD,2DAA2D;IAC3D,aAAa,CAAC;QACZ,GAAG;QACH,eAAe;QACf,sBAAsB;QACtB,sBAAsB;KACvB,CAAC,CAAC;IAEH,sEAAsE;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,gCAAgC;IAChC,8BAA8B,GAAG,WAAW,CAAC,GAAG,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAClC,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,CAAC,YAAY,GAAG,QAAQ;oBAAE,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC;gBACzD,IAAI,CAAC,CAAC,YAAY,IAAI,kBAAkB,EAAE,CAAC;oBACzC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,4BAA4B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBACtK,CAAC;YACH,CAAC;YACD,GAAG,CAAC,MAAM,EAAE,6BAA6B,QAAQ,CAAC,MAAM,4BAA4B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,EAAE,oCAAqC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACjC,8BAA8B,CAAC,KAAK,EAAE,CAAC;IAEvC,4EAA4E;IAC5E,0EAA0E;IAC1E,+BAA+B;IAC/B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEzB,2EAA2E;IAC3E,6EAA6E;IAC7E,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClF,GAAG,CAAC,MAAM,EAAE,oCAAoC,KAAK,gBAAgB,aAAa,CAAC,UAAU,sCAAsC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QAChK,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,OAAO,EAAE,kCAAmC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,2DAA2D;IAC3D,+DAA+D;IAC/D,6EAA6E;IAC7E,yEAAyE;IACzE,oEAAoE;IACpE,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,yBAAyB,EAAE,CAAC;IAElC,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,qBAAqB,EAAE,CAAC;IACpE,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,MAAM,EAAE,UAAU,aAAa,gCAAgC,CAAC,CAAC;IACvE,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,EAAE,yBAAyB,WAAW,2CAA2C,CAAC,CAAC;QAC7F,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,2DAA2D;IAC3D,qEAAqE;IACrE,EAAE;IACF,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,aAAa,CAAC;QACZ,GAAG;QACH,kBAAkB,EAAE,qBAAqB,EAAE;QAC3C,kBAAkB;QAClB,eAAe;QACf,0BAA0B;QAC1B,mBAAmB;QACnB,qBAAqB;QACrB,+BAA+B;QAC/B,0BAA0B;QAC1B,wBAAwB;KACzB,CAAC,CAAC;IAEH,iEAAiE;IACjE,yFAAyF;IACzF,6EAA6E;IAC7E,QAAQ,CAAC;QACP,GAAG;QACH,sBAAsB;QACtB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC;KACnE,CAAC,CAAC;IAEH,yEAAyE;IACzE,2EAA2E;IAC3E,gEAAgE;IAChE,gBAAgB,EAAE,CAAC;IAEnB,qEAAqE;IACrE,gEAAgE;IAChE,qEAAqE;IACrE,qEAAqE;IACrE,sEAAsE;IACtE,mDAAmD;IACnD,MAAM,YAAY,EAAE,CAAC;IAErB,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,8EAA8E;IAC9E,8EAA8E;IAC9E,iEAAiE;IACjE,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,GAAS,EAAE;QACpC,IAAI,CAAC;YACH,gBAAgB,CAAC;gBACf,MAAM,EAAE,aAAa;gBACrB,WAAW,EAAE,gBAAgB,GAAG,UAAU;gBAC1C,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC;IACF,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,EAAE,kEAAkE,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,kBAAkB,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACpD,GAAG,CACD,MAAM,EACN,iBAAiB,SAAS,CAAC,KAAK,aAAa,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;YAC5E,cAAc,gBAAgB,IAAI,CACnC,CAAC;QACF,uBAAuB,GAAG,WAAW,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACvF,uBAAuB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,kEAAkE;IAClE,2EAA2E;IAC3E,yEAAyE;IACzE,2CAA2C;IAC3C,MAAM,UAAU,CACd,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,eAAe,EAAE,kBAAkB,EAAE,EAAE,EACjG,EAAE,YAAY,EAAE,CACjB,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,uEAAuE;AACvE,+EAA+E;AAC/E,8EAA8E;AAC9E,uDAAuD;AACvD,WAAW,GAAG,IAAI,eAAe,CAAC;IAChC,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,CAAC,SAAsB,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;CAC5E,CAAC,CAAC;AAEH,+EAA+E;AAC/E,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"tower-server.js","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,6 +104,27 @@ export declare function saveTerminalSession(terminalId: string, workspacePath: s
|
|
|
104
104
|
* Update the label of a terminal session in SQLite (Spec 468).
|
|
105
105
|
*/
|
|
106
106
|
export declare function updateTerminalLabel(terminalId: string, label: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Update the launch command of a terminal session in SQLite (PIR #1475).
|
|
109
|
+
*
|
|
110
|
+
* For attach sites that are NOT followed by a row rewrite — currently just the
|
|
111
|
+
* in-place `session-reconnected` re-attach in `tower-server.ts`, where a freshly
|
|
112
|
+
* connected client can bring a changed identity to an existing `PtySession` with
|
|
113
|
+
* no save behind it. Sites that already re-save the row (the two reconcile paths)
|
|
114
|
+
* must pass the hydrated value into `saveTerminalSession` instead: they DELETE and
|
|
115
|
+
* re-INSERT the row, which would silently wipe an UPDATE written at attach time.
|
|
116
|
+
*
|
|
117
|
+
* No-ops when the value is unchanged, so a steady-state Tower writes at most once
|
|
118
|
+
* per session.
|
|
119
|
+
*
|
|
120
|
+
* Never DOWNGRADES a known row to NULL. `null` here means "this attach produced no
|
|
121
|
+
* identity" — a legacy shellper, or a WELCOME whose payload failed validation — and
|
|
122
|
+
* that is an absence of news, not news that the recorded command is wrong. Writing
|
|
123
|
+
* it through would erase a good row and, worse, hand the Spec 1313 self-heal a
|
|
124
|
+
* NULL it would then re-heal from config, converting a rejected frame into a
|
|
125
|
+
* silent identity change. Only a stated identity may rewrite the row.
|
|
126
|
+
*/
|
|
127
|
+
export declare function updateTerminalCommand(terminalId: string, command: string | null): void;
|
|
107
128
|
/**
|
|
108
129
|
* Get a terminal session row by its primary key (Spec 468).
|
|
109
130
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tower-terminals.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-terminals.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"tower-terminals.d.ts","sourceRoot":"","sources":["../../../src/agent-farm/servers/tower-terminals.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import fs from 'node:fs';
|
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { AGENT_FARM_DIR, encodeWorkspacePath } from '../lib/tower-client.js';
|
|
11
11
|
import { loadConfig } from '../../lib/config.js';
|
|
12
|
+
import { sanitizeAgentEnv } from '../../lib/agent-env.js';
|
|
12
13
|
import { getGlobalDb } from '../db/index.js';
|
|
13
14
|
import { saveFileTab as saveFileTabToDb, deleteFileTab as deleteFileTabFromDb, deleteFileTabsForWorkspace as deleteFileTabsForWorkspaceFromDb, deleteFileTabsByPathPrefix as deleteFileTabsByPathPrefixFromDb, loadFileTabsForWorkspace as loadFileTabsFromDb, } from '../utils/file-tabs.js';
|
|
14
15
|
import { TerminalManager, DEFAULT_DISK_LOG_MAX_BYTES } from '../../terminal/index.js';
|
|
@@ -40,7 +41,7 @@ function extractShellperSessionId(socketPath) {
|
|
|
40
41
|
const match = path.basename(socketPath).match(/^shellper-(.+)\.sock$/);
|
|
41
42
|
return match ? match[1] : null;
|
|
42
43
|
}
|
|
43
|
-
import { normalizeWorkspacePath, buildArchitectReconnectRestartOptions } from './tower-utils.js';
|
|
44
|
+
import { normalizeWorkspacePath, buildArchitectReconnectRestartOptions, persistableCommand, logSessionIdentity, } from './tower-utils.js';
|
|
44
45
|
import { setArchitectByName } from '../state.js';
|
|
45
46
|
import { isIntentionallyStopping } from './tower-instances.js';
|
|
46
47
|
// ============================================================================
|
|
@@ -269,6 +270,41 @@ export function updateTerminalLabel(terminalId, label) {
|
|
|
269
270
|
_deps?.log('WARN', `Failed to update terminal label: ${err.message}`);
|
|
270
271
|
}
|
|
271
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Update the launch command of a terminal session in SQLite (PIR #1475).
|
|
275
|
+
*
|
|
276
|
+
* For attach sites that are NOT followed by a row rewrite — currently just the
|
|
277
|
+
* in-place `session-reconnected` re-attach in `tower-server.ts`, where a freshly
|
|
278
|
+
* connected client can bring a changed identity to an existing `PtySession` with
|
|
279
|
+
* no save behind it. Sites that already re-save the row (the two reconcile paths)
|
|
280
|
+
* must pass the hydrated value into `saveTerminalSession` instead: they DELETE and
|
|
281
|
+
* re-INSERT the row, which would silently wipe an UPDATE written at attach time.
|
|
282
|
+
*
|
|
283
|
+
* No-ops when the value is unchanged, so a steady-state Tower writes at most once
|
|
284
|
+
* per session.
|
|
285
|
+
*
|
|
286
|
+
* Never DOWNGRADES a known row to NULL. `null` here means "this attach produced no
|
|
287
|
+
* identity" — a legacy shellper, or a WELCOME whose payload failed validation — and
|
|
288
|
+
* that is an absence of news, not news that the recorded command is wrong. Writing
|
|
289
|
+
* it through would erase a good row and, worse, hand the Spec 1313 self-heal a
|
|
290
|
+
* NULL it would then re-heal from config, converting a rejected frame into a
|
|
291
|
+
* silent identity change. Only a stated identity may rewrite the row.
|
|
292
|
+
*/
|
|
293
|
+
export function updateTerminalCommand(terminalId, command) {
|
|
294
|
+
if (command === null)
|
|
295
|
+
return;
|
|
296
|
+
try {
|
|
297
|
+
const db = getGlobalDb();
|
|
298
|
+
const row = db.prepare('SELECT command FROM terminal_sessions WHERE id = ?').get(terminalId);
|
|
299
|
+
if (!row || row.command === command)
|
|
300
|
+
return;
|
|
301
|
+
db.prepare('UPDATE terminal_sessions SET command = ? WHERE id = ?').run(command, terminalId);
|
|
302
|
+
_deps?.log('INFO', `Terminal ${terminalId} identity updated: ${row.command ?? 'null'} -> ${command ?? 'null'}`);
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
_deps?.log('WARN', `Failed to update terminal command: ${err.message}`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
272
308
|
/**
|
|
273
309
|
* Get a terminal session row by its primary key (Spec 468).
|
|
274
310
|
*/
|
|
@@ -531,6 +567,10 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
531
567
|
let orphanReconnected = 0;
|
|
532
568
|
let killed = 0;
|
|
533
569
|
let cleaned = 0;
|
|
570
|
+
// Bugfix #1686: rows kept because reconnect failed but death was not proven
|
|
571
|
+
// (the shellper pid is still alive). Counted so a reconcile that only
|
|
572
|
+
// preserved rows does not misreport "No terminal sessions to reconcile".
|
|
573
|
+
let unconfirmed = 0;
|
|
534
574
|
// Track matched session IDs across all phases
|
|
535
575
|
const matchedSessionIds = new Set();
|
|
536
576
|
// ---- Phase 1: Shellper reconnection ----
|
|
@@ -604,8 +644,7 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
604
644
|
catch { /* use default */ }
|
|
605
645
|
}
|
|
606
646
|
const cmdParts = architectCmd.split(/\s+/);
|
|
607
|
-
const cleanEnv =
|
|
608
|
-
delete cleanEnv['CLAUDECODE'];
|
|
647
|
+
const cleanEnv = sanitizeAgentEnv(process.env);
|
|
609
648
|
// Spec 786 Phase 2: preserve architect identity across shellper auto-
|
|
610
649
|
// restart. Without this, the new claude process would inherit Tower's
|
|
611
650
|
// CODEV_ARCHITECT_NAME (or none), and builders spawned by a restarted
|
|
@@ -671,8 +710,13 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
671
710
|
// Process probe results sequentially (shared state mutations)
|
|
672
711
|
for (const { dbSession, client, replayData, restartOptions } of probeResults) {
|
|
673
712
|
if (!client) {
|
|
674
|
-
|
|
675
|
-
|
|
713
|
+
// Bugfix #1686: reconnect returning null does NOT prove death (it also
|
|
714
|
+
// covers a connect refused by another Tower client, or a transient
|
|
715
|
+
// socket/fd hiccup). Death is confirmed in the Phase 2 sweep, which keeps
|
|
716
|
+
// a row whose pid is still alive — so this log defers the verdict rather
|
|
717
|
+
// than asserting "dead" up front.
|
|
718
|
+
_deps.log('INFO', `Shellper session ${dbSession.id} reconnect failed — deferring to Phase 2 sweep for death confirmation`);
|
|
719
|
+
continue; // Phase 2 confirms death before any cleanup
|
|
676
720
|
}
|
|
677
721
|
const workspacePath = dbSession.workspace_path;
|
|
678
722
|
const sessionCwd = dbSession.cwd ?? workspacePath;
|
|
@@ -690,9 +734,12 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
690
734
|
// column existed → `command` NULL): restartOptions.command is cmdParts[0] from
|
|
691
735
|
// the CURRENT config, so an upgraded architect resolves on the first restart
|
|
692
736
|
// rather than staying broken until it is manually relaunched.
|
|
737
|
+
// PIR #1475: this remains the SEED — the fallback the session reports until
|
|
738
|
+
// (and unless) the attached shellper states its own identity via WELCOME.
|
|
739
|
+
const identitySeed = dbSession.command ?? restartOptions?.command ?? null;
|
|
693
740
|
const session = manager.createSessionRaw({
|
|
694
741
|
label, cwd: sessionCwd, id: dbSession.id,
|
|
695
|
-
command:
|
|
742
|
+
command: identitySeed ?? undefined,
|
|
696
743
|
});
|
|
697
744
|
const ptySession = manager.getSession(session.id);
|
|
698
745
|
if (ptySession) {
|
|
@@ -738,8 +785,14 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
738
785
|
}
|
|
739
786
|
// Refresh the SQLite row. The id is preserved (#991), so this re-saves the
|
|
740
787
|
// session under the same terminal id with its refreshed shellper info.
|
|
788
|
+
// PIR #1475: persist the identity the session now reports — the shellper's
|
|
789
|
+
// own WELCOME statement when it made one, else the seed above (persisted
|
|
790
|
+
// command, then the legacy heal). This is the site's ONE persist mechanism:
|
|
791
|
+
// the row is deleted and re-inserted here, so an update written back at
|
|
792
|
+
// attach time would be wiped.
|
|
793
|
+
logSessionIdentity(_deps.log, 'reconcile-adopt', session.id, ptySession, dbSession.command);
|
|
741
794
|
db.prepare('DELETE FROM terminal_sessions WHERE id = ?').run(dbSession.id);
|
|
742
|
-
saveTerminalSession(session.id, workspacePath, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, sessionCwd,
|
|
795
|
+
saveTerminalSession(session.id, workspacePath, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, sessionCwd, ptySession ? persistableCommand(ptySession) : identitySeed);
|
|
743
796
|
_deps.registerKnownWorkspace(workspacePath);
|
|
744
797
|
// Clean up on exit (only fires for permanent death when restartOnExit is set)
|
|
745
798
|
if (ptySession) {
|
|
@@ -779,6 +832,26 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
779
832
|
const existing = manager.getSession(session.id);
|
|
780
833
|
if (existing && existing.status !== 'exited')
|
|
781
834
|
continue;
|
|
835
|
+
// Bugfix #1686: a shellper-backed row reaches here when Phase 1 failed to
|
|
836
|
+
// reconnect to it. But reconnectSession() returns null for transient reasons
|
|
837
|
+
// too — a socket connect refused because another Tower client already owns
|
|
838
|
+
// the shellper (one-client-per-shellper), or a boot-time socket/fd hiccup —
|
|
839
|
+
// not just for a genuinely dead process. Treating that failure as death and
|
|
840
|
+
// SIGTERMing the still-live pid is what destroyed 53 live sessions in the
|
|
841
|
+
// #1629 incident. Destroy only what is proven dead, and the sole proof of
|
|
842
|
+
// death is the pid being down: a live shellper pid is never signaled and its
|
|
843
|
+
// row is never deleted here, regardless of socket-file state (a transiently
|
|
844
|
+
// absent socket is the same transient-failure class and must not kill a live
|
|
845
|
+
// agent). The row is left in place (WARN) and retried on a later
|
|
846
|
+
// reconcile/adoption pass; a pid-dead row still deletes below as before.
|
|
847
|
+
if (session.shellper_socket) {
|
|
848
|
+
const shellperAlive = session.shellper_pid != null && processExists(session.shellper_pid);
|
|
849
|
+
if (shellperAlive) {
|
|
850
|
+
_deps.log('WARN', `Shellper session ${session.id} failed to reconnect but pid ${session.shellper_pid} is alive — leaving row untouched (a live pid is never signaled), retried next reconcile/adoption pass (${session.type} for ${path.basename(session.workspace_path)})`);
|
|
851
|
+
unconfirmed++;
|
|
852
|
+
continue;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
782
855
|
// Stale row — kill orphaned process if any, then delete
|
|
783
856
|
if (session.pid && processExists(session.pid)) {
|
|
784
857
|
_deps.log('INFO', `Killing orphaned process: PID ${session.pid} (${session.type} for ${path.basename(session.workspace_path)})`);
|
|
@@ -792,8 +865,8 @@ async function _reconcileTerminalSessionsInner() {
|
|
|
792
865
|
cleaned++;
|
|
793
866
|
}
|
|
794
867
|
const total = shellperReconnected + orphanReconnected;
|
|
795
|
-
if (total > 0 || killed > 0 || cleaned > 0) {
|
|
796
|
-
_deps.log('INFO', `Reconciliation complete: ${shellperReconnected} shellper, ${orphanReconnected} orphan, ${killed} killed, ${cleaned} stale rows cleaned`);
|
|
868
|
+
if (total > 0 || killed > 0 || cleaned > 0 || unconfirmed > 0) {
|
|
869
|
+
_deps.log('INFO', `Reconciliation complete: ${shellperReconnected} shellper, ${orphanReconnected} orphan, ${killed} killed, ${cleaned} stale rows cleaned, ${unconfirmed} unconfirmed (kept)`);
|
|
797
870
|
}
|
|
798
871
|
else {
|
|
799
872
|
_deps.log('INFO', 'No terminal sessions to reconcile');
|
|
@@ -856,8 +929,7 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
|
|
|
856
929
|
catch { /* use default */ }
|
|
857
930
|
}
|
|
858
931
|
const cmdParts = architectCmd.split(/\s+/);
|
|
859
|
-
const cleanEnv =
|
|
860
|
-
delete cleanEnv['CLAUDECODE'];
|
|
932
|
+
const cleanEnv = sanitizeAgentEnv(process.env);
|
|
861
933
|
// Spec 786 Phase 2: preserve architect identity across shellper auto-
|
|
862
934
|
// restart (see matching block in reconcileTerminalSessionsInner above).
|
|
863
935
|
const architectName = dbSession.role_id || 'main';
|
|
@@ -890,9 +962,12 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
|
|
|
890
962
|
// identity across the reconnect — clients holding `/ws/terminal/<id>`
|
|
891
963
|
// stay valid. Use stored cwd (worktree path for builders) instead of
|
|
892
964
|
// workspace_path (Bugfix #506).
|
|
965
|
+
// PIR #1475: the seed, superseded by the shellper's WELCOME identity
|
|
966
|
+
// once attached (see the startup reconcile path above).
|
|
967
|
+
const identitySeed = dbSession.command ?? restartOptions?.command ?? null;
|
|
893
968
|
const newSession = manager.createSessionRaw({
|
|
894
969
|
label, cwd: dbSession.cwd ?? dbSession.workspace_path, id: dbSession.id,
|
|
895
|
-
command:
|
|
970
|
+
command: identitySeed ?? undefined, // Spec 1313: restore/heal identity (see reconcile path)
|
|
896
971
|
});
|
|
897
972
|
const ptySession = manager.getSession(newSession.id);
|
|
898
973
|
if (ptySession) {
|
|
@@ -936,8 +1011,9 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
|
|
|
936
1011
|
});
|
|
937
1012
|
}
|
|
938
1013
|
// Refresh the SQLite row under the same (preserved) id.
|
|
1014
|
+
logSessionIdentity(_deps.log, 'reconnect-onthefly', newSession.id, ptySession, dbSession.command);
|
|
939
1015
|
deleteTerminalSession(dbSession.id);
|
|
940
|
-
saveTerminalSession(newSession.id, dbSession.workspace_path, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, dbSession.cwd,
|
|
1016
|
+
saveTerminalSession(newSession.id, dbSession.workspace_path, dbSession.type, dbSession.role_id, dbSession.shellper_pid, dbSession.shellper_socket, dbSession.shellper_pid, dbSession.shellper_start_time, dbSession.label, dbSession.cwd, ptySession ? persistableCommand(ptySession) : identitySeed);
|
|
941
1017
|
dbSession.id = newSession.id;
|
|
942
1018
|
session = manager.getSession(newSession.id);
|
|
943
1019
|
_deps.log('INFO', `On-the-fly reconnect succeeded for ${newSession.id} (id preserved)`);
|
|
@@ -948,6 +1024,23 @@ export async function getTerminalsForWorkspace(workspacePath, proxyUrl) {
|
|
|
948
1024
|
}
|
|
949
1025
|
}
|
|
950
1026
|
if (!session) {
|
|
1027
|
+
// Bugfix #1686: the same guard as reconcile Phase 2, applied to this
|
|
1028
|
+
// sibling delete site. The on-the-fly reconnect above returns null for
|
|
1029
|
+
// transient reasons too (socket connect refused because another Tower
|
|
1030
|
+
// client owns the shellper, or a boot-time socket/fd hiccup), not just
|
|
1031
|
+
// for a dead process. Dropping the row on that failure alone is how a row
|
|
1032
|
+
// the Phase 2 guard just preserved would be deleted by the first
|
|
1033
|
+
// /api/state or /api/overview read whose reconnect fails again — making
|
|
1034
|
+
// Phase 2's "retried next reconcile/adoption pass" promise false. Destroy
|
|
1035
|
+
// only what is proven dead: a live shellper pid is never deleted here,
|
|
1036
|
+
// regardless of socket-file state; the row is kept for a later pass.
|
|
1037
|
+
if (dbSession.shellper_socket) {
|
|
1038
|
+
const shellperAlive = dbSession.shellper_pid != null && processExists(dbSession.shellper_pid);
|
|
1039
|
+
if (shellperAlive) {
|
|
1040
|
+
_deps?.log('WARN', `On-the-fly reconnect for ${dbSession.id} failed but pid ${dbSession.shellper_pid} is alive — leaving row untouched (a live pid is never signaled), retried next reconcile/adoption pass (${dbSession.type})`);
|
|
1041
|
+
continue;
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
951
1044
|
// Stale row, nothing to reconnect — clean up
|
|
952
1045
|
deleteTerminalSession(dbSession.id);
|
|
953
1046
|
continue;
|