@songsid/agend 2.1.10 → 2.1.11-beta.1
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/backend/antigravity.js +3 -2
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +7 -0
- package/dist/backend/claude-code.js +107 -3
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/cli-env-probe-worker.js +2 -10
- package/dist/backend/cli-env-probe-worker.js.map +1 -1
- package/dist/backend/cli-env-probe.d.ts +14 -0
- package/dist/backend/cli-env-probe.js +13 -0
- package/dist/backend/cli-env-probe.js.map +1 -0
- package/dist/backend/codex-metadata.d.ts +14 -0
- package/dist/backend/codex-metadata.js +70 -0
- package/dist/backend/codex-metadata.js.map +1 -0
- package/dist/backend/codex.d.ts +1 -2
- package/dist/backend/codex.js +112 -65
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/effort-metadata.d.ts +32 -0
- package/dist/backend/effort-metadata.js +21 -0
- package/dist/backend/effort-metadata.js.map +1 -0
- package/dist/backend/grok.js +3 -2
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +3 -0
- package/dist/backend/kiro.js +19 -4
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +3 -2
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/opencode.d.ts +31 -4
- package/dist/backend/opencode.js +66 -23
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +14 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.js +10 -2
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/cli.js +48 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +24 -0
- package/dist/daemon.js +109 -12
- package/dist/daemon.js.map +1 -1
- package/dist/doctor.d.ts +3 -1
- package/dist/doctor.js +11 -0
- package/dist/doctor.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -2
- package/dist/fleet-control-audit.d.ts +83 -0
- package/dist/fleet-control-audit.js +195 -0
- package/dist/fleet-control-audit.js.map +1 -0
- package/dist/fleet-manager.d.ts +45 -35
- package/dist/fleet-manager.js +327 -384
- package/dist/fleet-manager.js.map +1 -1
- package/dist/full-restart.js +2 -1
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +3 -2
- package/dist/host-memory.d.ts +16 -0
- package/dist/host-memory.js +32 -0
- package/dist/host-memory.js.map +1 -0
- package/dist/instance-lifecycle.js +4 -1
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/locale.js +62 -16
- package/dist/locale.js.map +1 -1
- package/dist/log-tail.d.ts +34 -0
- package/dist/log-tail.js +66 -0
- package/dist/log-tail.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.js +89 -1
- package/dist/logger.js.map +1 -1
- package/dist/login-controller.d.ts +1 -3
- package/dist/login-controller.js +2 -6
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +0 -8
- package/dist/login-flows.js +1 -11
- package/dist/login-flows.js.map +1 -1
- package/dist/login-manager.d.ts +5 -20
- package/dist/login-manager.js +0 -53
- package/dist/login-manager.js.map +1 -1
- package/dist/login-window-lock.d.ts +1 -1
- package/dist/login-window-lock.js +1 -1
- package/dist/memory-pressure.d.ts +41 -0
- package/dist/memory-pressure.js +117 -0
- package/dist/memory-pressure.js.map +1 -0
- package/dist/probe-worker-pool.d.ts +28 -0
- package/dist/probe-worker-pool.js +129 -0
- package/dist/probe-worker-pool.js.map +1 -0
- package/dist/resource-report.d.ts +31 -0
- package/dist/resource-report.js +209 -0
- package/dist/resource-report.js.map +1 -0
- package/dist/rollout-index.d.ts +66 -0
- package/dist/rollout-index.js +124 -0
- package/dist/rollout-index.js.map +1 -0
- package/dist/slash-authz.d.ts +50 -0
- package/dist/slash-authz.js +19 -0
- package/dist/slash-authz.js.map +1 -0
- package/dist/spawn-gate.d.ts +13 -1
- package/dist/spawn-gate.js +108 -39
- package/dist/spawn-gate.js.map +1 -1
- package/dist/storm-window.d.ts +42 -0
- package/dist/storm-window.js +84 -1
- package/dist/storm-window.js.map +1 -1
- package/dist/topic-commands.d.ts +29 -2
- package/dist/topic-commands.js +77 -21
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.d.ts +21 -4
- package/dist/transcript-sources.js +55 -41
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +5 -1
- package/dist/ui/settings.html +14 -13
- package/package.json +1 -1
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -673,6 +673,9 @@ export declare class Daemon extends EventEmitter {
|
|
|
673
673
|
* an immediate restart would destroy in-flight work. Cleared when the server
|
|
674
674
|
* turns up alive again (operator restarted, CLI reconnected) before we fire.
|
|
675
675
|
*/
|
|
676
|
+
/** Consecutive health ticks a failed `list-windows` may defer crash recovery before it counts as "gone" (#1127). */
|
|
677
|
+
private static readonly WINDOW_QUERY_FAILURE_TICKS;
|
|
678
|
+
private windowQueryFailureTicks;
|
|
676
679
|
private mcpRestartPending;
|
|
677
680
|
private mcpRestartStaleTimer;
|
|
678
681
|
/** In-flight replacement grace; also the guard against three triggers stacking. */
|
|
@@ -1764,6 +1767,27 @@ export declare class Daemon extends EventEmitter {
|
|
|
1764
1767
|
* last-chat.json so the reply target survives a restart (see start()).
|
|
1765
1768
|
*/
|
|
1766
1769
|
private updateLastChat;
|
|
1770
|
+
/**
|
|
1771
|
+
* How long a stop / pause / crash respawn / wake waits for a backend's session lookup before it
|
|
1772
|
+
* goes on with what it has (the cache or the persisted id). A missed checkpoint is retried at the
|
|
1773
|
+
* next idle observation — the same as when the lookup used to fail — and a clean stop must never
|
|
1774
|
+
* wait on a CLI listing for its whole 15 s timeout.
|
|
1775
|
+
*/
|
|
1776
|
+
static readonly SESSION_CHECKPOINT_BUDGET_MS = 5000;
|
|
1777
|
+
/** Idle observations ask a backend that needs a CLI lookup at most this often. */
|
|
1778
|
+
static readonly SESSION_CHECKPOINT_IDLE_THROTTLE_MS = 30000;
|
|
1779
|
+
private lastIdleSessionRefreshAt;
|
|
1780
|
+
/**
|
|
1781
|
+
* Persist the session id for a lifecycle transition. A backend that answers from a file (or not at
|
|
1782
|
+
* all) is saved at once, exactly as before. One that must ask a CLI (`refreshSessionId`, OpenCode)
|
|
1783
|
+
* is awaited — bounded — first, so the checkpoint is the CURRENT session, not a stale cache. The
|
|
1784
|
+
* lookup is the backend's own single-flight one: an idle observation already running it is joined,
|
|
1785
|
+
* not repeated. Never rejects.
|
|
1786
|
+
*/
|
|
1787
|
+
private checkpointSessionId;
|
|
1788
|
+
private refreshThenSave;
|
|
1789
|
+
/** The idle-observation checkpoint: persist what is known now, look again in the background at most every 30 s. */
|
|
1790
|
+
private checkpointSessionIdInBackground;
|
|
1767
1791
|
private saveSessionId;
|
|
1768
1792
|
private readContextPercentage;
|
|
1769
1793
|
/** Set a model override for next spawn (used by failover logic) */
|
package/dist/daemon.js
CHANGED
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
import { ensureInstanceDir } from "./private-dir.js";
|
|
5
5
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
6
6
|
import { EventEmitter } from "node:events";
|
|
7
|
-
import {
|
|
7
|
+
import { rotateLogIfNeededAsync } from "./logger.js";
|
|
8
8
|
import { coredumpFilterLaunchPrefix } from "./coredump-filter.js";
|
|
9
9
|
import { mcpServerState } from "./mcp-liveness.js";
|
|
10
10
|
import { clearPausedMarker, writePausedMarker } from "./pause-marker.js";
|
|
@@ -1234,6 +1234,9 @@ export class Daemon extends EventEmitter {
|
|
|
1234
1234
|
* an immediate restart would destroy in-flight work. Cleared when the server
|
|
1235
1235
|
* turns up alive again (operator restarted, CLI reconnected) before we fire.
|
|
1236
1236
|
*/
|
|
1237
|
+
/** Consecutive health ticks a failed `list-windows` may defer crash recovery before it counts as "gone" (#1127). */
|
|
1238
|
+
static WINDOW_QUERY_FAILURE_TICKS = 2;
|
|
1239
|
+
windowQueryFailureTicks = 0;
|
|
1237
1240
|
mcpRestartPending = false;
|
|
1238
1241
|
mcpRestartStaleTimer = null;
|
|
1239
1242
|
/** In-flight replacement grace; also the guard against three triggers stacking. */
|
|
@@ -1742,7 +1745,7 @@ export class Daemon extends EventEmitter {
|
|
|
1742
1745
|
if (savedId) {
|
|
1743
1746
|
const oldTmux = new TmuxManager(this.tmuxSessionName, savedId);
|
|
1744
1747
|
if (await oldTmux.isWindowAlive()) {
|
|
1745
|
-
this.
|
|
1748
|
+
await this.checkpointSessionId();
|
|
1746
1749
|
await oldTmux.killWindow();
|
|
1747
1750
|
this.logger.info({ savedId }, "Killed old tmux window for fresh start");
|
|
1748
1751
|
}
|
|
@@ -1771,7 +1774,7 @@ export class Daemon extends EventEmitter {
|
|
|
1771
1774
|
// we attach — pipe-pane uses `cat >>` on the same inode, so copytruncate
|
|
1772
1775
|
// keeps the writer attached after size resets.
|
|
1773
1776
|
const outputLog = join(this.instanceDir, "output.log");
|
|
1774
|
-
|
|
1777
|
+
await rotateLogIfNeededAsync(outputLog);
|
|
1775
1778
|
await this.tmux.pipeOutput(outputLog).catch(() => { });
|
|
1776
1779
|
// 4. Transcript monitor. claude-code is handled inside the monitor
|
|
1777
1780
|
// (statusline transcript); codex/kiro/opencode read their CLI's own
|
|
@@ -2302,10 +2305,15 @@ export class Daemon extends EventEmitter {
|
|
|
2302
2305
|
return;
|
|
2303
2306
|
}
|
|
2304
2307
|
if (paneStatus?.alive) {
|
|
2308
|
+
this.windowQueryFailureTicks = 0;
|
|
2309
|
+
this.stormWindow?.noteWindowAlive(this.name);
|
|
2305
2310
|
// Instance output.log is fed by tmux pipe-pane and was previously never
|
|
2306
2311
|
// rotated (only fleet.log / daemon.log were). Cap growth every tick.
|
|
2312
|
+
// Fire and forget, on purpose: the size check is one stat, the copy of a
|
|
2313
|
+
// 10–100 MiB log runs off the event loop, and this tick must not wait for
|
|
2314
|
+
// it (#1161) — scheduleNext() below is not delayed by a rotation.
|
|
2307
2315
|
if (!this.config.lightweight) {
|
|
2308
|
-
|
|
2316
|
+
void rotateLogIfNeededAsync(join(this.instanceDir, "output.log"));
|
|
2309
2317
|
}
|
|
2310
2318
|
scheduleNext();
|
|
2311
2319
|
return;
|
|
@@ -2320,6 +2328,8 @@ export class Daemon extends EventEmitter {
|
|
|
2320
2328
|
paneStatus = await this.tmux.getPaneStatus();
|
|
2321
2329
|
if (paneStatus?.alive) {
|
|
2322
2330
|
this.logger.debug(`[health] ${cliLabel} pane reported gone then alive on recheck — transient query failure, ignoring`);
|
|
2331
|
+
this.windowQueryFailureTicks = 0;
|
|
2332
|
+
this.stormWindow?.noteWindowAlive(this.name);
|
|
2323
2333
|
scheduleNext();
|
|
2324
2334
|
return;
|
|
2325
2335
|
}
|
|
@@ -2344,6 +2354,7 @@ export class Daemon extends EventEmitter {
|
|
|
2344
2354
|
// nullReason records *why* getPaneStatus returned null (for diagnosing
|
|
2345
2355
|
// whether this was a real window loss or a transient query failure).
|
|
2346
2356
|
let crashType = "window";
|
|
2357
|
+
let inWindowLossBurst = false;
|
|
2347
2358
|
let nullReason;
|
|
2348
2359
|
if (!paneStatus) {
|
|
2349
2360
|
const serverAlive = await TmuxManager.sessionExists(this.tmuxSessionName);
|
|
@@ -2377,6 +2388,7 @@ export class Daemon extends EventEmitter {
|
|
|
2377
2388
|
nullReason = "no_window";
|
|
2378
2389
|
try {
|
|
2379
2390
|
const windows = await TmuxManager.listWindows(this.tmuxSessionName);
|
|
2391
|
+
this.windowQueryFailureTicks = 0;
|
|
2380
2392
|
const currentWindowId = this.tmux.getWindowId();
|
|
2381
2393
|
if (windows.some(w => w.id === currentWindowId)) {
|
|
2382
2394
|
// The exact window still exists, so `list-panes` was the query
|
|
@@ -2390,9 +2402,27 @@ export class Daemon extends EventEmitter {
|
|
|
2390
2402
|
nullReason = "same_name_other_window";
|
|
2391
2403
|
}
|
|
2392
2404
|
catch {
|
|
2405
|
+
// A failed window query proves nothing: it used to read as "the
|
|
2406
|
+
// window is gone" and respawned a live CLI. Look again next tick,
|
|
2407
|
+
// and give up waiting only after WINDOW_QUERY_FAILURE_TICKS in a
|
|
2408
|
+
// row (tmux that cannot list windows for that long is unhealthy
|
|
2409
|
+
// enough that recovery is the better bet).
|
|
2410
|
+
if (++this.windowQueryFailureTicks <= Daemon.WINDOW_QUERY_FAILURE_TICKS) {
|
|
2411
|
+
this.logger.warn({ failures: this.windowQueryFailureTicks }, `${cliLabel} window list unavailable — deferring crash recovery`);
|
|
2412
|
+
scheduleNext();
|
|
2413
|
+
return;
|
|
2414
|
+
}
|
|
2393
2415
|
nullReason = "query_error";
|
|
2394
2416
|
}
|
|
2417
|
+
this.windowQueryFailureTicks = 0;
|
|
2395
2418
|
this.logger.warn({ exitCode, nullReason }, `${cliLabel} window not found (tmux server alive)`);
|
|
2419
|
+
// Several instances losing their windows together is ONE event on
|
|
2420
|
+
// the host or in tmux, not N crashes (#1127): the first ones to see
|
|
2421
|
+
// it respawn as usual; the one that makes it a burst opens the storm
|
|
2422
|
+
// window, which caps the recovery rate and folds the notices into
|
|
2423
|
+
// one. Later arrivals just join it.
|
|
2424
|
+
inWindowLossBurst = (this.stormWindow?.noteWindowLoss(this.name) ?? false)
|
|
2425
|
+
|| (this.stormWindow?.needsRecovery(this.name) ?? false);
|
|
2396
2426
|
}
|
|
2397
2427
|
}
|
|
2398
2428
|
else {
|
|
@@ -2466,7 +2496,7 @@ export class Daemon extends EventEmitter {
|
|
|
2466
2496
|
// independent CLI crash loops. StormWindow owns its escalation; do
|
|
2467
2497
|
// not let the same three server generations permanently trip every
|
|
2468
2498
|
// daemon's per-instance 3-in-5m breaker.
|
|
2469
|
-
if (crashType === "server") {
|
|
2499
|
+
if (crashType === "server" || inWindowLossBurst) {
|
|
2470
2500
|
this.crashTimestamps = [];
|
|
2471
2501
|
this.crashCount = 0;
|
|
2472
2502
|
}
|
|
@@ -2514,7 +2544,13 @@ export class Daemon extends EventEmitter {
|
|
|
2514
2544
|
this.logger.warn({ crashCount: this.crashCount, delay }, `${cliLabel} window died — respawning after backoff`);
|
|
2515
2545
|
await new Promise(r => setTimeout(r, delay));
|
|
2516
2546
|
try {
|
|
2517
|
-
this.
|
|
2547
|
+
await this.checkpointSessionId();
|
|
2548
|
+
// stop() / pause() may have landed while this tick sat in the backoff delay or in the
|
|
2549
|
+
// (bounded) session lookup. They only stop LATER ticks; this continuation is already
|
|
2550
|
+
// past that check and must not clear the process/window or respawn an instance that
|
|
2551
|
+
// was just stopped or paused (#1160 review).
|
|
2552
|
+
if (this.runtimeMonitorsFrozen || this.healthCheckPaused)
|
|
2553
|
+
return;
|
|
2518
2554
|
this.transcriptMonitor?.resetOffset();
|
|
2519
2555
|
// Kill orphan MCP server from the crashed CLI session.
|
|
2520
2556
|
// MCP server writes its PID to channel.mcp.pid on startup.
|
|
@@ -2558,8 +2594,17 @@ export class Daemon extends EventEmitter {
|
|
|
2558
2594
|
this.emit("crash_respawn", this.name);
|
|
2559
2595
|
// Emit the per-instance audit event while the storm is still active
|
|
2560
2596
|
// so its chat notification is suppressed into the fleet summary.
|
|
2561
|
-
|
|
2597
|
+
// Also the instances that lost their window a moment BEFORE the burst
|
|
2598
|
+
// was recognised: they respawned as ordinary crashes but are part of
|
|
2599
|
+
// the incident now, and the window cannot close without them.
|
|
2600
|
+
if (crashType === "server" || inWindowLossBurst || this.stormWindow?.needsRecovery(this.name)) {
|
|
2562
2601
|
this.stormWindow?.markRecovered(this.name);
|
|
2602
|
+
}
|
|
2603
|
+
else {
|
|
2604
|
+
// Not (yet) part of a storm: keep the evidence, in case the next
|
|
2605
|
+
// window loss makes this one a member whose recovery is already done.
|
|
2606
|
+
this.stormWindow?.noteWindowRecovered(this.name);
|
|
2607
|
+
}
|
|
2563
2608
|
}
|
|
2564
2609
|
catch (err) {
|
|
2565
2610
|
if (this.stopOnUnsupportedCliRespawn(err)) {
|
|
@@ -3402,8 +3447,9 @@ export class Daemon extends EventEmitter {
|
|
|
3402
3447
|
// Quit CLI FIRST — this kills MCP server child processes cleanly.
|
|
3403
3448
|
// IPC must stay open during quit so MCP servers receive the shutdown message.
|
|
3404
3449
|
if (this.tmux) {
|
|
3405
|
-
|
|
3450
|
+
// Paused before the (bounded) checkpoint wait, so a health tick cannot run in that gap.
|
|
3406
3451
|
this.healthCheckPaused = true;
|
|
3452
|
+
await this.checkpointSessionId();
|
|
3407
3453
|
let killed = false;
|
|
3408
3454
|
const windowId = this.tmux.getWindowId();
|
|
3409
3455
|
const kiroReady = windowId ? await this.drainBusyKiroForStop(windowId) : true;
|
|
@@ -3581,7 +3627,7 @@ export class Daemon extends EventEmitter {
|
|
|
3581
3627
|
this.freezeRuntimeMonitors();
|
|
3582
3628
|
const transition = (async () => {
|
|
3583
3629
|
try {
|
|
3584
|
-
this.
|
|
3630
|
+
await this.checkpointSessionId();
|
|
3585
3631
|
await this.sendQuitSequence(pauseReason, "pause", { watchRelaunch: true });
|
|
3586
3632
|
let exited = false;
|
|
3587
3633
|
for (let i = 0; i < 15; i++) {
|
|
@@ -3759,8 +3805,10 @@ export class Daemon extends EventEmitter {
|
|
|
3759
3805
|
// fleet is SIGKILLed or the host reboots.
|
|
3760
3806
|
// Idle observations are safe checkpoints; the 60s safety sweep also gives
|
|
3761
3807
|
// us a bounded retry if session creation produced no visible state edge.
|
|
3808
|
+
// The discovery behind it is a CLI listing: it runs in the background (single-flight, at most
|
|
3809
|
+
// once per SESSION_CHECKPOINT_IDLE_THROTTLE_MS), never on this synchronous path (#1160).
|
|
3762
3810
|
if (snapshot.state === "idle" && this.backend?.binaryName === "opencode") {
|
|
3763
|
-
this.
|
|
3811
|
+
this.checkpointSessionIdInBackground();
|
|
3764
3812
|
}
|
|
3765
3813
|
// Only a transition back to idle completes pending work. Repeated idle
|
|
3766
3814
|
// observations between enqueue and paste must not clear a newer inbound.
|
|
@@ -8032,7 +8080,7 @@ export class Daemon extends EventEmitter {
|
|
|
8032
8080
|
if (!claimed)
|
|
8033
8081
|
return;
|
|
8034
8082
|
try {
|
|
8035
|
-
this.saveSessionId();
|
|
8083
|
+
this.saveSessionId(); // the muse switch: a backend with no CLI lookup, nothing to wait for
|
|
8036
8084
|
const ready = await this.trySpawn(true, this.wakeBudgetMs(30_000));
|
|
8037
8085
|
this.transcriptMonitor?.resetOffset();
|
|
8038
8086
|
if (ready)
|
|
@@ -8251,7 +8299,7 @@ export class Daemon extends EventEmitter {
|
|
|
8251
8299
|
});
|
|
8252
8300
|
if (reuseWindow && !this.config.lightweight) {
|
|
8253
8301
|
const outputLog = join(this.instanceDir, "output.log");
|
|
8254
|
-
|
|
8302
|
+
await rotateLogIfNeededAsync(outputLog);
|
|
8255
8303
|
await this.tmux.pipeOutput(outputLog).catch(err => {
|
|
8256
8304
|
this.logger.warn({ err }, "Failed to restore pipe-pane after wake");
|
|
8257
8305
|
});
|
|
@@ -8592,6 +8640,55 @@ export class Daemon extends EventEmitter {
|
|
|
8592
8640
|
}
|
|
8593
8641
|
catch { /* best effort */ }
|
|
8594
8642
|
}
|
|
8643
|
+
/**
|
|
8644
|
+
* How long a stop / pause / crash respawn / wake waits for a backend's session lookup before it
|
|
8645
|
+
* goes on with what it has (the cache or the persisted id). A missed checkpoint is retried at the
|
|
8646
|
+
* next idle observation — the same as when the lookup used to fail — and a clean stop must never
|
|
8647
|
+
* wait on a CLI listing for its whole 15 s timeout.
|
|
8648
|
+
*/
|
|
8649
|
+
static SESSION_CHECKPOINT_BUDGET_MS = 5_000;
|
|
8650
|
+
/** Idle observations ask a backend that needs a CLI lookup at most this often. */
|
|
8651
|
+
static SESSION_CHECKPOINT_IDLE_THROTTLE_MS = 30_000;
|
|
8652
|
+
lastIdleSessionRefreshAt = Number.NEGATIVE_INFINITY;
|
|
8653
|
+
/**
|
|
8654
|
+
* Persist the session id for a lifecycle transition. A backend that answers from a file (or not at
|
|
8655
|
+
* all) is saved at once, exactly as before. One that must ask a CLI (`refreshSessionId`, OpenCode)
|
|
8656
|
+
* is awaited — bounded — first, so the checkpoint is the CURRENT session, not a stale cache. The
|
|
8657
|
+
* lookup is the backend's own single-flight one: an idle observation already running it is joined,
|
|
8658
|
+
* not repeated. Never rejects.
|
|
8659
|
+
*/
|
|
8660
|
+
checkpointSessionId() {
|
|
8661
|
+
const refresh = this.backend?.refreshSessionId;
|
|
8662
|
+
if (this.skipResume || !refresh) {
|
|
8663
|
+
this.saveSessionId();
|
|
8664
|
+
return;
|
|
8665
|
+
}
|
|
8666
|
+
return this.refreshThenSave(refresh.call(this.backend), Daemon.SESSION_CHECKPOINT_BUDGET_MS);
|
|
8667
|
+
}
|
|
8668
|
+
async refreshThenSave(lookup, budgetMs) {
|
|
8669
|
+
let timer;
|
|
8670
|
+
const budget = new Promise(resolve => { timer = setTimeout(resolve, budgetMs); timer.unref?.(); });
|
|
8671
|
+
try {
|
|
8672
|
+
await Promise.race([lookup.then(() => undefined, () => undefined), budget]);
|
|
8673
|
+
}
|
|
8674
|
+
finally {
|
|
8675
|
+
if (timer)
|
|
8676
|
+
clearTimeout(timer);
|
|
8677
|
+
}
|
|
8678
|
+
this.saveSessionId();
|
|
8679
|
+
}
|
|
8680
|
+
/** The idle-observation checkpoint: persist what is known now, look again in the background at most every 30 s. */
|
|
8681
|
+
checkpointSessionIdInBackground() {
|
|
8682
|
+
this.saveSessionId();
|
|
8683
|
+
const refresh = this.backend?.refreshSessionId;
|
|
8684
|
+
if (this.skipResume || !refresh)
|
|
8685
|
+
return;
|
|
8686
|
+
const now = Date.now();
|
|
8687
|
+
if (now - this.lastIdleSessionRefreshAt < Daemon.SESSION_CHECKPOINT_IDLE_THROTTLE_MS)
|
|
8688
|
+
return;
|
|
8689
|
+
this.lastIdleSessionRefreshAt = now;
|
|
8690
|
+
void refresh.call(this.backend).then(() => this.saveSessionId(), () => { });
|
|
8691
|
+
}
|
|
8595
8692
|
saveSessionId() {
|
|
8596
8693
|
// When a resume failure has forced a fresh start, don't persist the stale id
|
|
8597
8694
|
// back from statusline.json — that would re-arm --continue and re-loop.
|