@integrity-labs/agt-cli 0.28.1140 → 0.28.1142
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/bin/agt.js +35 -7
- package/dist/bin/agt.js.map +1 -1
- package/dist/{chunk-DRAZDG3U.js → chunk-J2PUVUK6.js} +4 -4
- package/dist/{chunk-DYFE224A.js → chunk-JM47BARM.js} +7 -1
- package/dist/chunk-JM47BARM.js.map +1 -0
- package/dist/{chunk-7U4VSBOE.js → chunk-ZJFS74H5.js} +2 -2
- package/dist/{claude-pair-runtime-BOTE3DRW.js → claude-pair-runtime-A3OWKP3K.js} +2 -2
- package/dist/lib/manager-worker.js +65 -30
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +6 -0
- package/dist/mcp/index.js +103 -25
- package/dist/mcp/origami.js +6 -0
- package/dist/mcp/slack-channel.js +6 -0
- package/dist/mcp/telegram-channel.js +6 -0
- package/dist/{persistent-session-6O66QEI4.js → persistent-session-VNJDG3VN.js} +3 -3
- package/dist/{responsiveness-probe-WGD3NDWG.js → responsiveness-probe-ABQGETFV.js} +3 -3
- package/dist/{session-auth-dead-6N2AEFKX.js → session-auth-dead-DVE6OGRT.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-DYFE224A.js.map +0 -1
- /package/dist/{chunk-DRAZDG3U.js.map → chunk-J2PUVUK6.js.map} +0 -0
- /package/dist/{chunk-7U4VSBOE.js.map → chunk-ZJFS74H5.js.map} +0 -0
- /package/dist/{claude-pair-runtime-BOTE3DRW.js.map → claude-pair-runtime-A3OWKP3K.js.map} +0 -0
- /package/dist/{persistent-session-6O66QEI4.js.map → persistent-session-VNJDG3VN.js.map} +0 -0
- /package/dist/{responsiveness-probe-WGD3NDWG.js.map → responsiveness-probe-ABQGETFV.js.map} +0 -0
- /package/dist/{session-auth-dead-6N2AEFKX.js.map → session-auth-dead-DVE6OGRT.js.map} +0 -0
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
rotateDailySession,
|
|
25
25
|
sessionFileExists,
|
|
26
26
|
todayLocalIso
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-JM47BARM.js";
|
|
28
28
|
import {
|
|
29
29
|
classifyUnanswerablePane,
|
|
30
30
|
findUsageLimitResetHint,
|
|
@@ -6114,4 +6114,4 @@ export {
|
|
|
6114
6114
|
stopAllSessionsAndWait,
|
|
6115
6115
|
getProjectDir
|
|
6116
6116
|
};
|
|
6117
|
-
//# sourceMappingURL=chunk-
|
|
6117
|
+
//# sourceMappingURL=chunk-ZJFS74H5.js.map
|
|
@@ -269,7 +269,7 @@ async function spawnPairSession(session) {
|
|
|
269
269
|
return { ok: true };
|
|
270
270
|
} catch {
|
|
271
271
|
}
|
|
272
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
272
|
+
const { resolveClaudeBinary } = await import("./persistent-session-VNJDG3VN.js");
|
|
273
273
|
const claudeBin = resolveClaudeBinary();
|
|
274
274
|
const pairEnv = {
|
|
275
275
|
...process.env,
|
|
@@ -739,4 +739,4 @@ export {
|
|
|
739
739
|
startClaudePair,
|
|
740
740
|
submitClaudePairCode
|
|
741
741
|
};
|
|
742
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
742
|
+
//# sourceMappingURL=claude-pair-runtime-A3OWKP3K.js.map
|
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
setConfigHash,
|
|
77
77
|
shellGuard,
|
|
78
78
|
tripClass
|
|
79
|
-
} from "../chunk-
|
|
79
|
+
} from "../chunk-J2PUVUK6.js";
|
|
80
80
|
import {
|
|
81
81
|
getProjectDir as getProjectDir2,
|
|
82
82
|
getReadyTasks,
|
|
@@ -163,7 +163,7 @@ import {
|
|
|
163
163
|
webFetchBaselineValue,
|
|
164
164
|
webFetchRestartNeeded,
|
|
165
165
|
writeEgressAllowlist
|
|
166
|
-
} from "../chunk-
|
|
166
|
+
} from "../chunk-ZJFS74H5.js";
|
|
167
167
|
import {
|
|
168
168
|
ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
|
|
169
169
|
AnchorSessionClient,
|
|
@@ -274,7 +274,7 @@ import {
|
|
|
274
274
|
subagentActivityAgeSeconds,
|
|
275
275
|
sumTranscriptUsageInWindow,
|
|
276
276
|
transcriptActivityAgeSeconds
|
|
277
|
-
} from "../chunk-
|
|
277
|
+
} from "../chunk-JM47BARM.js";
|
|
278
278
|
import {
|
|
279
279
|
classifyUnanswerablePane,
|
|
280
280
|
focusedConfirmDialogBlock,
|
|
@@ -343,6 +343,8 @@ var HostNodeConvergence = class {
|
|
|
343
343
|
}
|
|
344
344
|
converged = /* @__PURE__ */ new Set();
|
|
345
345
|
abandoned = /* @__PURE__ */ new Set();
|
|
346
|
+
/** Pins this platform cannot install at all; see {@link recordUnsupported}. */
|
|
347
|
+
unsupported = /* @__PURE__ */ new Set();
|
|
346
348
|
failures = /* @__PURE__ */ new Map();
|
|
347
349
|
retryAfter = /* @__PURE__ */ new Map();
|
|
348
350
|
/**
|
|
@@ -383,6 +385,7 @@ var HostNodeConvergence = class {
|
|
|
383
385
|
this.lastDesired = pin;
|
|
384
386
|
this.converged.clear();
|
|
385
387
|
this.abandoned.clear();
|
|
388
|
+
this.unsupported.clear();
|
|
386
389
|
this.failures.clear();
|
|
387
390
|
this.retryAfter.clear();
|
|
388
391
|
}
|
|
@@ -393,6 +396,7 @@ var HostNodeConvergence = class {
|
|
|
393
396
|
stateOf(pin, now = Date.now()) {
|
|
394
397
|
if (this.converged.has(pin)) return "converged";
|
|
395
398
|
if (this.abandoned.has(pin)) return "abandoned";
|
|
399
|
+
if (this.unsupported.has(pin)) return "unsupported";
|
|
396
400
|
if ((this.retryAfter.get(pin) ?? 0) > now) return "cooling";
|
|
397
401
|
return "ready";
|
|
398
402
|
}
|
|
@@ -447,6 +451,20 @@ var HostNodeConvergence = class {
|
|
|
447
451
|
this.failures.delete(pin);
|
|
448
452
|
this.retryAfter.delete(pin);
|
|
449
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* The pin cannot be installed on this platform (no `dnf`). Terminal, so it
|
|
456
|
+
* stops further attempts exactly as success does — hammering an impossible
|
|
457
|
+
* install every poll is worse than stopping — but it reports as itself.
|
|
458
|
+
*
|
|
459
|
+
* Carries the same staleness guard as {@link recordSuccess}: a late call for
|
|
460
|
+
* a superseded pin must not write a conclusion about the pin now wanted.
|
|
461
|
+
*/
|
|
462
|
+
recordUnsupported(pin) {
|
|
463
|
+
if (this.lastDesired !== null && pin !== this.lastDesired) return;
|
|
464
|
+
this.unsupported.add(pin);
|
|
465
|
+
this.failures.delete(pin);
|
|
466
|
+
this.retryAfter.delete(pin);
|
|
467
|
+
}
|
|
450
468
|
/**
|
|
451
469
|
* An attempt failed. Returns the resulting state so the caller can log the
|
|
452
470
|
* right thing: 'cooling' means it will retry, 'abandoned' means it will not.
|
|
@@ -500,12 +518,32 @@ function normalizeReportedNodeVersion(raw) {
|
|
|
500
518
|
return HOST_NODE_PIN_VERSION_RE.test(v) ? v : null;
|
|
501
519
|
}
|
|
502
520
|
function parsePathNodeVersion(stdout) {
|
|
503
|
-
const m = /^v?(\d+\.\d+\.\d+)
|
|
521
|
+
const m = /^v?(\d+\.\d+\.\d+)$/.exec(stdout.trim());
|
|
504
522
|
return m ? normalizeReportedNodeVersion(m[1]) : null;
|
|
505
523
|
}
|
|
506
524
|
function parseRpmNodeVersion(stdout) {
|
|
507
525
|
return normalizeReportedNodeVersion(stdout.trim());
|
|
508
526
|
}
|
|
527
|
+
var RPM_NODE_QUERY_ARGV = ["-q", "--qf", "%{VERSION}", "nodejs"];
|
|
528
|
+
var PATH_NODE_QUERY_ARGV = ["--version"];
|
|
529
|
+
async function probeOrNull(probe) {
|
|
530
|
+
try {
|
|
531
|
+
return await probe();
|
|
532
|
+
} catch {
|
|
533
|
+
return null;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
async function probeHostNode(run) {
|
|
537
|
+
const pathVersion = await probeOrNull(async () => {
|
|
538
|
+
const probe = await run("node", [...PATH_NODE_QUERY_ARGV]);
|
|
539
|
+
return probe.code === 0 ? parsePathNodeVersion(probe.stdout) : null;
|
|
540
|
+
});
|
|
541
|
+
const rpmVersion = await probeOrNull(async () => {
|
|
542
|
+
const rpm = await run("rpm", [...RPM_NODE_QUERY_ARGV]);
|
|
543
|
+
return rpm.code === 0 ? parseRpmNodeVersion(rpm.stdout) : null;
|
|
544
|
+
});
|
|
545
|
+
return { pathVersion, rpmVersion };
|
|
546
|
+
}
|
|
509
547
|
function heartbeatHostNodeFields(observation, pin, pinState) {
|
|
510
548
|
if (!observation) return {};
|
|
511
549
|
return {
|
|
@@ -8456,7 +8494,7 @@ function isKanbanHybridDryRun() {
|
|
|
8456
8494
|
}
|
|
8457
8495
|
var HYBRID_ACTIONABLE_STATUSES = new Set(KANBAN_NUDGE_ACTIONABLE_STATUSES);
|
|
8458
8496
|
function isHybridActionable(item) {
|
|
8459
|
-
return HYBRID_ACTIONABLE_STATUSES.has(item.status) && item.source_type !== "scheduled_task" && item.assignee_type !== "human";
|
|
8497
|
+
return HYBRID_ACTIONABLE_STATUSES.has(item.status) && item.source_type !== "scheduled_task" && item.assignee_type !== "human" && item.owed_reply_on_own_card !== false;
|
|
8460
8498
|
}
|
|
8461
8499
|
function resolveHybridNudgeAction(stale, allowedCount, suppressedCount) {
|
|
8462
8500
|
if (stale) return "skip-stale";
|
|
@@ -14690,7 +14728,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
|
|
|
14690
14728
|
var dayRolloverInboundHold = /* @__PURE__ */ new Map();
|
|
14691
14729
|
var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
|
|
14692
14730
|
async function channelInboundActivityAgeSecondsFor(codeName) {
|
|
14693
|
-
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-
|
|
14731
|
+
const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-ABQGETFV.js");
|
|
14694
14732
|
const newest = newestPendingInboundActivityMtimeMs(dirname11(paneLogPath(codeName)));
|
|
14695
14733
|
if (newest === null) return null;
|
|
14696
14734
|
return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
|
|
@@ -15448,7 +15486,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
15448
15486
|
var lastVersionCheckAt = 0;
|
|
15449
15487
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
15450
15488
|
var lastResponsivenessProbeAt = 0;
|
|
15451
|
-
var agtCliVersion = true ? "0.28.
|
|
15489
|
+
var agtCliVersion = true ? "0.28.1142" : "dev";
|
|
15452
15490
|
function resolveBrewPath(execFileSync3) {
|
|
15453
15491
|
try {
|
|
15454
15492
|
const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -15633,22 +15671,18 @@ async function diskNodeVersion() {
|
|
|
15633
15671
|
}
|
|
15634
15672
|
var hostNodeObservation = null;
|
|
15635
15673
|
var hostNodeObservedAt = 0;
|
|
15636
|
-
|
|
15637
|
-
|
|
15638
|
-
|
|
15639
|
-
|
|
15640
|
-
return null;
|
|
15674
|
+
function invalidateHostNodeObservation(pathVersion) {
|
|
15675
|
+
hostNodeObservedAt = 0;
|
|
15676
|
+
if (pathVersion !== void 0 && hostNodeObservation) {
|
|
15677
|
+
hostNodeObservation = { ...hostNodeObservation, pathVersion };
|
|
15641
15678
|
}
|
|
15642
15679
|
}
|
|
15643
15680
|
async function refreshHostNodeObservation(now = Date.now()) {
|
|
15644
15681
|
if (!shouldReprobeHostNode(hostNodeObservedAt, now)) return;
|
|
15645
15682
|
hostNodeObservedAt = now;
|
|
15646
|
-
|
|
15647
|
-
|
|
15648
|
-
|
|
15649
|
-
return rpm.code === 0 ? parseRpmNodeVersion(rpm.stdout) : null;
|
|
15650
|
-
});
|
|
15651
|
-
hostNodeObservation = { pathVersion, rpmVersion };
|
|
15683
|
+
hostNodeObservation = await probeHostNode(
|
|
15684
|
+
(cmd, args) => runAsync(cmd, args, { timeout: 15e3 })
|
|
15685
|
+
);
|
|
15652
15686
|
}
|
|
15653
15687
|
async function ensureHostNodeVersion(rawPin) {
|
|
15654
15688
|
const pin = normalizeHostNodePinVersion(rawPin);
|
|
@@ -15678,7 +15712,7 @@ async function ensureHostNodeVersion(rawPin) {
|
|
|
15678
15712
|
hostNodeNoDnfLogged = true;
|
|
15679
15713
|
log(`[host-node] 'dnf' not found - cannot converge host Node onto ${pin} on this platform (leaving ${current ?? "unknown"} in place)`);
|
|
15680
15714
|
}
|
|
15681
|
-
hostNodeConvergence.
|
|
15715
|
+
hostNodeConvergence.recordUnsupported(pin);
|
|
15682
15716
|
return;
|
|
15683
15717
|
}
|
|
15684
15718
|
const asRoot = typeof process.getuid === "function" && process.getuid() === 0;
|
|
@@ -15699,6 +15733,7 @@ async function ensureHostNodeVersion(rawPin) {
|
|
|
15699
15733
|
}
|
|
15700
15734
|
log(`[host-node] host Node is now ${pin} on disk. Running processes keep the previous binary until they restart - this does NOT restart the manager (ENG-11617).`);
|
|
15701
15735
|
hostNodeConvergence.recordSuccess(pin);
|
|
15736
|
+
invalidateHostNodeObservation(after);
|
|
15702
15737
|
} catch (err) {
|
|
15703
15738
|
recordHostNodeFailure(pin, `install attempt threw: ${isolationImageErrDetail(err)}`);
|
|
15704
15739
|
} finally {
|
|
@@ -17171,7 +17206,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
17171
17206
|
if (codeNames.length === 0) return;
|
|
17172
17207
|
void (async () => {
|
|
17173
17208
|
try {
|
|
17174
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17209
|
+
const { collectDiagnostics } = await import("../persistent-session-VNJDG3VN.js");
|
|
17175
17210
|
await api.post("/host/heartbeat", {
|
|
17176
17211
|
host_id: hostId,
|
|
17177
17212
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -17313,7 +17348,7 @@ async function pollCycleInner() {
|
|
|
17313
17348
|
}
|
|
17314
17349
|
try {
|
|
17315
17350
|
const { detectHostSecurity } = await import("../host-security-KQYYZZVW.js");
|
|
17316
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
17351
|
+
const { collectDiagnostics } = await import("../persistent-session-VNJDG3VN.js");
|
|
17317
17352
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
17318
17353
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor) : void 0;
|
|
17319
17354
|
let tailscaleHostname;
|
|
@@ -17534,7 +17569,7 @@ async function pollCycleInner() {
|
|
|
17534
17569
|
collectPanelessActivityProbes,
|
|
17535
17570
|
getResponsivenessIntervalMs,
|
|
17536
17571
|
occupancyQualificationClassifications
|
|
17537
|
-
} = await import("../responsiveness-probe-
|
|
17572
|
+
} = await import("../responsiveness-probe-ABQGETFV.js");
|
|
17538
17573
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
17539
17574
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
17540
17575
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -17651,7 +17686,7 @@ async function pollCycleInner() {
|
|
|
17651
17686
|
collectResponsivenessProbes,
|
|
17652
17687
|
livePendingInboundOldestAgeSeconds,
|
|
17653
17688
|
parkPendingInbound
|
|
17654
|
-
} = await import("../responsiveness-probe-
|
|
17689
|
+
} = await import("../responsiveness-probe-ABQGETFV.js");
|
|
17655
17690
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-M6AFZWNU.js");
|
|
17656
17691
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
17657
17692
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -17937,7 +17972,7 @@ async function pollCycleInner() {
|
|
|
17937
17972
|
}
|
|
17938
17973
|
}
|
|
17939
17974
|
);
|
|
17940
|
-
const { parkPendingInbound } = await import("../responsiveness-probe-
|
|
17975
|
+
const { parkPendingInbound } = await import("../responsiveness-probe-ABQGETFV.js");
|
|
17941
17976
|
const { parked, deadLettered } = parkPendingInbound(codeName, new Date(fatalNowMs));
|
|
17942
17977
|
paneFatalStreak.delete(codeName);
|
|
17943
17978
|
paneFatalRestarts.set(codeName, [...history, fatalNowMs]);
|
|
@@ -17968,7 +18003,7 @@ async function pollCycleInner() {
|
|
|
17968
18003
|
TRANSCRIPT_MOUNT_ESCALATION_REFRESH_MS,
|
|
17969
18004
|
bindSourceEscalations
|
|
17970
18005
|
} = await import("../transcript-mount-health-OHE6IVJV.js");
|
|
17971
|
-
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-
|
|
18006
|
+
const { transcriptBindSourcesFor, ensureTranscriptBindSources } = await import("../persistent-session-VNJDG3VN.js");
|
|
17972
18007
|
const mountConfig = resolveTranscriptMountConfig();
|
|
17973
18008
|
const liveAgents = agentState.persistentSessionAgents;
|
|
17974
18009
|
for (const tracked of [
|
|
@@ -18133,7 +18168,7 @@ async function pollCycleInner() {
|
|
|
18133
18168
|
}
|
|
18134
18169
|
try {
|
|
18135
18170
|
const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-VR5QGP3J.js");
|
|
18136
|
-
const { probeSessionAuth } = await import("../session-auth-dead-
|
|
18171
|
+
const { probeSessionAuth } = await import("../session-auth-dead-DVE6OGRT.js");
|
|
18137
18172
|
const observations = [];
|
|
18138
18173
|
const pendingCacheCommits = [];
|
|
18139
18174
|
const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
|
|
@@ -22731,7 +22766,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
22731
22766
|
try {
|
|
22732
22767
|
const freshId = rotateSessionForWedge(codeName);
|
|
22733
22768
|
consecutiveWedgeCycles.delete(codeName);
|
|
22734
|
-
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-
|
|
22769
|
+
const { parkPendingInbound: parkForRestart } = await import("../responsiveness-probe-ABQGETFV.js");
|
|
22735
22770
|
const { parked, deadLettered } = parkForRestart(codeName, /* @__PURE__ */ new Date());
|
|
22736
22771
|
const parkNote = parked > 0 ? `, ${parked} inbound parked` : "";
|
|
22737
22772
|
const deadNote = deadLettered > 0 ? `, ${deadLettered} undeliverable dead-lettered` : "";
|
|
@@ -22774,7 +22809,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
22774
22809
|
void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
|
|
22775
22810
|
void (async () => {
|
|
22776
22811
|
try {
|
|
22777
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
22812
|
+
const { collectDiagnostics } = await import("../persistent-session-VNJDG3VN.js");
|
|
22778
22813
|
await api.post("/host/heartbeat", {
|
|
22779
22814
|
host_id: hostId,
|
|
22780
22815
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -22825,7 +22860,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
22825
22860
|
}
|
|
22826
22861
|
try {
|
|
22827
22862
|
const hostId = await getHostId();
|
|
22828
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
22863
|
+
const { collectDiagnostics } = await import("../persistent-session-VNJDG3VN.js");
|
|
22829
22864
|
await api.post("/host/heartbeat", {
|
|
22830
22865
|
host_id: hostId,
|
|
22831
22866
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor, forwardedToolsFor, runtimeVersionFor)
|
|
@@ -23498,7 +23533,7 @@ async function processClaudePairSessions(agents) {
|
|
|
23498
23533
|
// cannot take it for itself — by the time it runs, the write it is looking
|
|
23499
23534
|
// for may already have happened.
|
|
23500
23535
|
snapshotPairConfig
|
|
23501
|
-
} = await import("../claude-pair-runtime-
|
|
23536
|
+
} = await import("../claude-pair-runtime-A3OWKP3K.js");
|
|
23502
23537
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
23503
23538
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
23504
23539
|
const killed = await killPairSession(pairTmuxSession(pairId));
|