shadok-ai 0.15.39 → 0.15.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/channels.d.ts +18 -0
- package/dist/channels.js +1 -1
- package/dist/channels.js.map +1 -1
- package/dist/preprompt.d.ts +41 -0
- package/dist/preprompt.js +50 -0
- package/dist/preprompt.js.map +1 -1
- package/dist/server.js +134 -17
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/index.html +62 -24
package/README.md
CHANGED
|
@@ -249,6 +249,18 @@ Enter to skip; you can add it later from the web UI).
|
|
|
249
249
|
not a recomputation that would quietly show today's profile. Also on the ⋯
|
|
250
250
|
menu of each channel. It says plainly that it is shadok's half: Claude Code
|
|
251
251
|
adds its own context, which shadok never sees.
|
|
252
|
+
- **Reload-to-apply indicator** — an agent's context is fixed **at spawn**, so a
|
|
253
|
+
long-lived one can drift behind the cockpit: the pilot prompt or its guardrails
|
|
254
|
+
changed, a new skill was seeded, its injected auth token aged past a week
|
|
255
|
+
(so its own calls start failing silently), or Claude Code itself updated. The
|
|
256
|
+
cockpit detects this by **comparing what the running process actually got
|
|
257
|
+
against what a fresh spawn would give it** — a content comparison, not a
|
|
258
|
+
version number, so a release that changed nothing relevant raises nothing, and
|
|
259
|
+
a profile edit that bumped no version still does. A `↻` lights up on the agent
|
|
260
|
+
(hover for the reasons) and the **version menu** shows *Reload N agents to
|
|
261
|
+
apply changes*; a reload respawns each one in place, keeping its history.
|
|
262
|
+
Agents started before a given update stay on the old context until reloaded —
|
|
263
|
+
this is how you spot the ones still running it.
|
|
252
264
|
- **Phone layout** — the cockpit is a fixed chassis that never pans sideways,
|
|
253
265
|
sized on the *visual* viewport so the composer stays clear of the browser's
|
|
254
266
|
own bar and, when the keyboard opens, sits right above it (the instrument bar
|
package/dist/channels.d.ts
CHANGED
|
@@ -55,6 +55,24 @@ export interface Channel {
|
|
|
55
55
|
* this instance's admin sees who is driving what. Server-owned; absent for a
|
|
56
56
|
* locally-spawned agent. See `src/peers.ts`. */
|
|
57
57
|
createdByPeer?: string;
|
|
58
|
+
/** Fingerprint of what shadok injected into the RUNNING process at its last
|
|
59
|
+
* real spawn (a hash of the preprompt: role, guardrails, skills, secret
|
|
60
|
+
* names, permission mode, pilot prompt, ledger reflex). Compared to the
|
|
61
|
+
* current fingerprint to tell whether a long-lived agent is running a stale
|
|
62
|
+
* prompt/guardrails/skill set — the thing a server auto-update changes while
|
|
63
|
+
* a tmux agent survives it. `"legacy"` marks an agent adopted with no stored
|
|
64
|
+
* fingerprint, i.e. one that predates this field: it reads as stale until
|
|
65
|
+
* reloaded. Durable (on disk, survives restart) BECAUSE the in-memory
|
|
66
|
+
* snapshot is reset to "current" when a surviving pane is re-adopted, which
|
|
67
|
+
* would hide exactly the drift this detects. Server-owned, write-once per
|
|
68
|
+
* real spawn (never on adoption of an existing pane). See `stalenessReasons`. */
|
|
69
|
+
spawnFp?: string;
|
|
70
|
+
/** When that real spawn happened (ms). Lets the cockpit flag an agent whose
|
|
71
|
+
* injected auth cookie is past its one-week validity (invariant 33). */
|
|
72
|
+
spawnAt?: number;
|
|
73
|
+
/** The `claude` binary version at that real spawn, to flag an agent still on
|
|
74
|
+
* an older binary than the one now installed. Null when it couldn't be read. */
|
|
75
|
+
spawnClaudeVer?: string | null;
|
|
58
76
|
}
|
|
59
77
|
/**
|
|
60
78
|
* Should this channel be mirrored into Telegram?
|
package/dist/channels.js
CHANGED
|
@@ -20,7 +20,7 @@ export function isMirrored(c) {
|
|
|
20
20
|
* only resume its own agents" — which broke any multi-step remote exchange
|
|
21
21
|
* (the holder's first resume ran; the browser's next sync wiped the owner). Same
|
|
22
22
|
* loss as `profile`/`parent` before they were listed here. */
|
|
23
|
-
const SERVER_OWNED = ["cwd", "branch", "repo", "telegram", "profile", "model", "effort", "parent", "home", "createdByPeer"];
|
|
23
|
+
const SERVER_OWNED = ["cwd", "branch", "repo", "telegram", "profile", "model", "effort", "parent", "home", "createdByPeer", "spawnFp", "spawnAt", "spawnClaudeVer"];
|
|
24
24
|
/**
|
|
25
25
|
* Pure: is this channel the environment's home base — pinned and never closable?
|
|
26
26
|
*
|
package/dist/channels.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channels.js","sourceRoot":"","sources":["../src/channels.ts"],"names":[],"mappings":"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"}
|
package/dist/preprompt.d.ts
CHANGED
|
@@ -44,6 +44,47 @@ export interface PrepromptInput {
|
|
|
44
44
|
}
|
|
45
45
|
/** Pure: the sections to show, in reading order, skipping what is absent. */
|
|
46
46
|
export declare function prepromptParts(input: PrepromptInput): PrepromptPart[];
|
|
47
|
+
/**
|
|
48
|
+
* Pure: a stable fingerprint of a preprompt, so two of them can be compared
|
|
49
|
+
* cheaply and stored as one short string. Order-sensitive on purpose — a
|
|
50
|
+
* reordering IS a change the agent would see. Not cryptographic; it only needs
|
|
51
|
+
* to differ whenever any section's label/source/text differs.
|
|
52
|
+
*/
|
|
53
|
+
export declare function prepromptFingerprint(parts: PrepromptPart[]): string;
|
|
54
|
+
/** One reason a running agent is behind what a fresh spawn would give it. */
|
|
55
|
+
export interface StaleReason {
|
|
56
|
+
kind: "preprompt" | "auth" | "claude";
|
|
57
|
+
label: string;
|
|
58
|
+
}
|
|
59
|
+
/** Marker stored for an agent adopted with no recorded fingerprint — it
|
|
60
|
+
* predates the fingerprinting, so it is treated as stale until reloaded. */
|
|
61
|
+
export declare const LEGACY_FINGERPRINT = "legacy";
|
|
62
|
+
export interface StalenessInput {
|
|
63
|
+
/** The fingerprint recorded at the agent's last REAL spawn, or null when none
|
|
64
|
+
* was ever recorded (a brand-new agent before its first record). */
|
|
65
|
+
spawnFp: string | null;
|
|
66
|
+
/** The fingerprint a spawn right now would produce. */
|
|
67
|
+
currentFp: string;
|
|
68
|
+
/** Is a GUI password set? Only then is an auth cookie injected (invariant 33),
|
|
69
|
+
* so only then can it go stale. */
|
|
70
|
+
hasPassword: boolean;
|
|
71
|
+
/** When the agent was last really spawned (ms), or null when unknown. */
|
|
72
|
+
spawnedAt: number | null;
|
|
73
|
+
now: number;
|
|
74
|
+
/** The injected cookie's lifetime; past it, calls to the own server 401. */
|
|
75
|
+
authTtlMs: number;
|
|
76
|
+
spawnClaudeVersion: string | null;
|
|
77
|
+
currentClaudeVersion: string | null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Pure: why a running agent should be reloaded — empty when it is up to date.
|
|
81
|
+
*
|
|
82
|
+
* Version-INDEPENDENT by design (the fingerprint is content, not a number): a
|
|
83
|
+
* shadok release that doesn't touch the prompt/guardrails/skills raises nothing,
|
|
84
|
+
* and a profile edit that bumps no version still does. This is the detection the
|
|
85
|
+
* cockpit's reload indicator reads.
|
|
86
|
+
*/
|
|
87
|
+
export declare function stalenessReasons(i: StalenessInput): StaleReason[];
|
|
47
88
|
/**
|
|
48
89
|
* Pure: a skill's name and one-line description, from its SKILL.md frontmatter.
|
|
49
90
|
*
|
package/dist/preprompt.js
CHANGED
|
@@ -72,6 +72,56 @@ export function prepromptParts(input) {
|
|
|
72
72
|
}
|
|
73
73
|
return parts;
|
|
74
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Pure: a stable fingerprint of a preprompt, so two of them can be compared
|
|
77
|
+
* cheaply and stored as one short string. Order-sensitive on purpose — a
|
|
78
|
+
* reordering IS a change the agent would see. Not cryptographic; it only needs
|
|
79
|
+
* to differ whenever any section's label/source/text differs.
|
|
80
|
+
*/
|
|
81
|
+
export function prepromptFingerprint(parts) {
|
|
82
|
+
let h = 5381;
|
|
83
|
+
const s = parts.map((p) => `${p.label}\u0000${p.source}\u0000${p.text}`).join("\u0001");
|
|
84
|
+
for (let i = 0; i < s.length; i++)
|
|
85
|
+
h = ((h * 33) ^ s.charCodeAt(i)) >>> 0;
|
|
86
|
+
return h.toString(16);
|
|
87
|
+
}
|
|
88
|
+
/** Marker stored for an agent adopted with no recorded fingerprint — it
|
|
89
|
+
* predates the fingerprinting, so it is treated as stale until reloaded. */
|
|
90
|
+
export const LEGACY_FINGERPRINT = "legacy";
|
|
91
|
+
/**
|
|
92
|
+
* Pure: why a running agent should be reloaded — empty when it is up to date.
|
|
93
|
+
*
|
|
94
|
+
* Version-INDEPENDENT by design (the fingerprint is content, not a number): a
|
|
95
|
+
* shadok release that doesn't touch the prompt/guardrails/skills raises nothing,
|
|
96
|
+
* and a profile edit that bumps no version still does. This is the detection the
|
|
97
|
+
* cockpit's reload indicator reads.
|
|
98
|
+
*/
|
|
99
|
+
export function stalenessReasons(i) {
|
|
100
|
+
const out = [];
|
|
101
|
+
if (i.spawnFp !== null && i.spawnFp !== i.currentFp) {
|
|
102
|
+
out.push({
|
|
103
|
+
kind: "preprompt",
|
|
104
|
+
label: i.spawnFp === LEGACY_FINGERPRINT
|
|
105
|
+
? "started before this cockpit version — reload to refresh its prompt, guardrails and skills"
|
|
106
|
+
: "prompt, guardrails, skills or secrets changed since this agent started",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (i.hasPassword && i.spawnedAt !== null && i.now - i.spawnedAt > i.authTtlMs) {
|
|
110
|
+
out.push({
|
|
111
|
+
kind: "auth",
|
|
112
|
+
label: "auth token past its one-week validity — reload to refresh it (invariant 33)",
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (i.spawnClaudeVersion &&
|
|
116
|
+
i.currentClaudeVersion &&
|
|
117
|
+
i.spawnClaudeVersion !== i.currentClaudeVersion) {
|
|
118
|
+
out.push({
|
|
119
|
+
kind: "claude",
|
|
120
|
+
label: `Claude Code updated (${i.spawnClaudeVersion} → ${i.currentClaudeVersion}) — reload onto the new binary`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
75
125
|
/**
|
|
76
126
|
* Pure: a skill's name and one-line description, from its SKILL.md frontmatter.
|
|
77
127
|
*
|
package/dist/preprompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preprompt.js","sourceRoot":"","sources":["../src/preprompt.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"preprompt.js","sourceRoot":"","sources":["../src/preprompt.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomUUID, timingSafeEqual } from "node:crypto";
|
|
2
2
|
import { newRequest, askVerdict, approveVerdict, cancelVerdict, dueRequests, expire, upsertRequest, requestsFor, describeRequest, loadRequests, saveRequests, isOpen, REQUEST_TTL_MS } from "./admin-requests.js";
|
|
3
3
|
import { recordEvent, loadEvents, saveEvents, inboxFor, markSeen, notMeEffect, describeEvent } from "./security-events.js";
|
|
4
|
-
import { execFile, spawn as spawnChild } from "node:child_process";
|
|
4
|
+
import { execFile, execFileSync, spawn as spawnChild } from "node:child_process";
|
|
5
5
|
import fs from "node:fs";
|
|
6
6
|
import os from "node:os";
|
|
7
7
|
import http from "node:http";
|
|
@@ -19,7 +19,7 @@ import { extractLiveText } from "../public/live-text.js";
|
|
|
19
19
|
import { findTransientErrors, newTransientErrors, RETRY_DELAYS_MS } from "./retry.js";
|
|
20
20
|
import { backgroundTasks, screenShowsWork, moveToOption } from "./detect.js";
|
|
21
21
|
import { PtyPilot } from "./session.js";
|
|
22
|
-
import { ensureClaudeHome, ensureProjectTrusted, getDefaultModel, setDefaultModel, } from "./claude-home.js";
|
|
22
|
+
import { ensureClaudeHome, ensureProjectTrusted, getDefaultModel, setDefaultModel, parseClaudeVersion, } from "./claude-home.js";
|
|
23
23
|
import { authStatus, cancelLogin, startLogin, submitLoginCode } from "./claude-auth.js";
|
|
24
24
|
import { readTokenExpiry } from "./claude-creds.js";
|
|
25
25
|
import { starCount } from "./stars.js";
|
|
@@ -28,7 +28,7 @@ import { readGroundAt } from "./ground.js";
|
|
|
28
28
|
import { homeGreetingBrief } from "./greeting.js";
|
|
29
29
|
import { ensureSshIdentity } from "./ssh.js";
|
|
30
30
|
import { openBrowser } from "./open-browser.js";
|
|
31
|
-
import { parseSkillMeta, prepromptParts } from "./preprompt.js";
|
|
31
|
+
import { parseSkillMeta, prepromptParts, prepromptFingerprint, stalenessReasons, LEGACY_FINGERPRINT, } from "./preprompt.js";
|
|
32
32
|
import { ensureSpawnHelperExecutable } from "./node-pty-fix.js";
|
|
33
33
|
import { TmuxPilot, tmuxAvailable, tmuxHasSession, tmuxKillSession, tmuxPaneCwd } from "./tmux.js";
|
|
34
34
|
import { scanUsage, sessionFilePath, tailSession, clearTailPos, seedTailPos, isNothingToShow } from "./tail.js";
|
|
@@ -3063,6 +3063,52 @@ function installedCapabilities() {
|
|
|
3063
3063
|
}
|
|
3064
3064
|
return out;
|
|
3065
3065
|
}
|
|
3066
|
+
/**
|
|
3067
|
+
* The exact preprompt a spawn would produce RIGHT NOW for a given profile —
|
|
3068
|
+
* every input read from current state (the profile definition, the vault, the
|
|
3069
|
+
* permission mode, the pilot prompt, the seeded skills). The ONE builder, so
|
|
3070
|
+
* the snapshot captured at spawn and the one recomputed to detect drift are
|
|
3071
|
+
* byte-identical: a difference always means the agent's context actually
|
|
3072
|
+
* changed, never that two code paths spelled it differently.
|
|
3073
|
+
*/
|
|
3074
|
+
function buildPreprompt(profileName) {
|
|
3075
|
+
const profile = profileName ? getProfile(profileName) : undefined;
|
|
3076
|
+
const resolved = effectiveProfile(profile);
|
|
3077
|
+
return prepromptParts({
|
|
3078
|
+
profileName: profileName ?? null,
|
|
3079
|
+
role: resolved?.systemPrompt,
|
|
3080
|
+
model: resolved?.model,
|
|
3081
|
+
deny: resolved?.deny,
|
|
3082
|
+
allow: resolved?.allow,
|
|
3083
|
+
permissionMode,
|
|
3084
|
+
secretNames: Object.keys(secretsFor(profile?.secrets)),
|
|
3085
|
+
capabilities: installedCapabilities(),
|
|
3086
|
+
pilotPrompt: pilotPrompt() ?? undefined,
|
|
3087
|
+
ledgerReflex: ledgerEnabled ? ledgerReflex() : null,
|
|
3088
|
+
});
|
|
3089
|
+
}
|
|
3090
|
+
/**
|
|
3091
|
+
* The installed `claude` binary version, cached briefly. A real `claude
|
|
3092
|
+
* --version` spawn, so it is kept out of hot paths: captured once at spawn and
|
|
3093
|
+
* refreshed at most once a minute for the staleness sweep. Null when the probe
|
|
3094
|
+
* fails (e.g. the launcher is mid-rewrite, invariant 32) — treated as "unknown",
|
|
3095
|
+
* never as a change, so a transient failure never raises a false reload hint.
|
|
3096
|
+
*/
|
|
3097
|
+
let claudeVerCache = null;
|
|
3098
|
+
function currentClaudeVersion() {
|
|
3099
|
+
const now = Date.now();
|
|
3100
|
+
if (claudeVerCache && now - claudeVerCache.at < 60_000)
|
|
3101
|
+
return claudeVerCache.v;
|
|
3102
|
+
let v = null;
|
|
3103
|
+
try {
|
|
3104
|
+
v = parseClaudeVersion(execFileSync(claudeCommand(), ["--version"], { encoding: "utf8", timeout: 5000 }));
|
|
3105
|
+
}
|
|
3106
|
+
catch {
|
|
3107
|
+
v = null;
|
|
3108
|
+
}
|
|
3109
|
+
claudeVerCache = { at: now, v };
|
|
3110
|
+
return v;
|
|
3111
|
+
}
|
|
3066
3112
|
function makePilot(id, cwd, args, profileName, model, effort) {
|
|
3067
3113
|
// A worktree is a brand-new directory, so it carries a brand-new trust
|
|
3068
3114
|
// dialog. Seed it before the process exists, not after it is stuck on it.
|
|
@@ -3107,20 +3153,10 @@ function makePilot(id, cwd, args, profileName, model, effort) {
|
|
|
3107
3153
|
...(sp ? ["--append-system-prompt", sp] : []),
|
|
3108
3154
|
...(lr ? ["--append-system-prompt", lr] : []),
|
|
3109
3155
|
];
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
model: resolved?.model,
|
|
3115
|
-
deny: resolved?.deny,
|
|
3116
|
-
allow: resolved?.allow,
|
|
3117
|
-
permissionMode,
|
|
3118
|
-
// NAMES only: the values are in `env`, and never travel to a client.
|
|
3119
|
-
secretNames: Object.keys(secretEnv),
|
|
3120
|
-
capabilities: installedCapabilities(),
|
|
3121
|
-
pilotPrompt: sp ?? undefined,
|
|
3122
|
-
ledgerReflex: lr,
|
|
3123
|
-
}));
|
|
3156
|
+
// NAMES only: the values are in `env`, and never travel to a client. Built
|
|
3157
|
+
// through the shared `buildPreprompt`, so this spawn snapshot is comparable
|
|
3158
|
+
// byte-for-byte with the one the staleness check recomputes later.
|
|
3159
|
+
prepromptById.set(id, buildPreprompt(profileName));
|
|
3124
3160
|
// Spawn the binary `claudeCommand` resolved, not the bare name `claude`. They
|
|
3125
3161
|
// differ exactly when the npm launcher is the fallback placeholder: spawning
|
|
3126
3162
|
// by name would then run the 500-byte stub, which exits 1 on stderr and looks
|
|
@@ -3221,6 +3257,10 @@ async function restartSession(s) {
|
|
|
3221
3257
|
s.appliedProfile = s.profile; // the new process carries the desired profile
|
|
3222
3258
|
await attachPilot(s);
|
|
3223
3259
|
s.restarting = false;
|
|
3260
|
+
// A restart spawns a brand-new process, so its anchor is current: re-record
|
|
3261
|
+
// it (clearing `legacy`), which is what makes the reload indicator go dark.
|
|
3262
|
+
recordSpawnFingerprint(s);
|
|
3263
|
+
s.lastStaleSig = undefined;
|
|
3224
3264
|
// `lastTurnMs`, like the connect-path `ready`: the transient "working" above
|
|
3225
3265
|
// started the client's turn timer, and this "ready" is what stops it — without
|
|
3226
3266
|
// the last turn's duration to freeze onto, the counter kept ticking after the
|
|
@@ -3232,6 +3272,7 @@ async function restartSession(s) {
|
|
|
3232
3272
|
instanceKey: instanceKey(),
|
|
3233
3273
|
sessionId: s.id,
|
|
3234
3274
|
preprompt: prepromptById.get(s.id) ?? [],
|
|
3275
|
+
stale: sessionStaleness(s),
|
|
3235
3276
|
cwd: s.cwd,
|
|
3236
3277
|
branch: s.worktree?.branch ?? null,
|
|
3237
3278
|
lastTurnMs: s.lastTurnMs,
|
|
@@ -3266,7 +3307,66 @@ function profileMessage(s) {
|
|
|
3266
3307
|
function broadcastProfile(s) {
|
|
3267
3308
|
broadcast(s, profileMessage(s));
|
|
3268
3309
|
}
|
|
3310
|
+
// ── Reload indicator: is a running agent behind what a fresh spawn gives? ────
|
|
3311
|
+
//
|
|
3312
|
+
// The signal is version-INDEPENDENT (see `stalenessReasons`): it compares what
|
|
3313
|
+
// the RUNNING process actually received against what shadok injects now. The
|
|
3314
|
+
// anchor is DURABLE (the channel on disk, `spawnFp`/`spawnAt`/`spawnClaudeVer`)
|
|
3315
|
+
// because the in-memory `prepromptById` snapshot is reset to "current" whenever
|
|
3316
|
+
// a surviving tmux pane is re-adopted after a server restart — which is exactly
|
|
3317
|
+
// the moment a shadok auto-update changes the prompt under a live agent, so an
|
|
3318
|
+
// in-memory anchor would hide the very drift this detects.
|
|
3319
|
+
/** Record this agent's spawn fingerprint — but ONLY for a process we actually
|
|
3320
|
+
* spawned. An adopted pane is the OLD process: its stored fingerprint must be
|
|
3321
|
+
* left alone (or seeded as `legacy` the first time, so a pre-feature agent
|
|
3322
|
+
* reads as stale until reloaded). Called once after `attachPilot`. */
|
|
3323
|
+
function recordSpawnFingerprint(s) {
|
|
3324
|
+
const adopted = s.pilot instanceof TmuxPilot && s.pilot.attached;
|
|
3325
|
+
if (adopted) {
|
|
3326
|
+
const stored = loadChannels().find((c) => c.sessionId === s.id);
|
|
3327
|
+
if (stored && stored.spawnFp !== undefined)
|
|
3328
|
+
return; // old process, keep its anchor
|
|
3329
|
+
upsertChannel({ sessionId: s.id, spawnFp: LEGACY_FINGERPRINT, spawnAt: 0, spawnClaudeVer: null });
|
|
3330
|
+
return;
|
|
3331
|
+
}
|
|
3332
|
+
upsertChannel({
|
|
3333
|
+
sessionId: s.id,
|
|
3334
|
+
spawnFp: prepromptFingerprint(prepromptById.get(s.id) ?? []),
|
|
3335
|
+
spawnAt: Date.now(),
|
|
3336
|
+
spawnClaudeVer: currentClaudeVersion(),
|
|
3337
|
+
});
|
|
3338
|
+
}
|
|
3339
|
+
/** Why this agent should be reloaded, empty when up to date. Reads the durable
|
|
3340
|
+
* anchor off the channel (optionally pre-loaded by the sweep to avoid N reads). */
|
|
3341
|
+
function sessionStaleness(s, channels) {
|
|
3342
|
+
const ch = (channels ?? loadChannels()).find((c) => c.sessionId === s.id);
|
|
3343
|
+
if (!ch || ch.spawnFp === undefined)
|
|
3344
|
+
return []; // no anchor yet (brand-new, pre-first-record)
|
|
3345
|
+
return stalenessReasons({
|
|
3346
|
+
spawnFp: ch.spawnFp,
|
|
3347
|
+
currentFp: prepromptFingerprint(buildPreprompt(s.profile)),
|
|
3348
|
+
hasPassword: !!GUI_PASSWORD,
|
|
3349
|
+
spawnedAt: ch.spawnAt ?? null,
|
|
3350
|
+
now: Date.now(),
|
|
3351
|
+
authTtlMs: SESSION_TTL_MS,
|
|
3352
|
+
spawnClaudeVersion: ch.spawnClaudeVer ?? null,
|
|
3353
|
+
currentClaudeVersion: currentClaudeVersion(),
|
|
3354
|
+
});
|
|
3355
|
+
}
|
|
3356
|
+
function staleMessage(s, channels) {
|
|
3357
|
+
return { type: "stale", sessionId: s.id, reasons: sessionStaleness(s, channels) };
|
|
3358
|
+
}
|
|
3359
|
+
/** Broadcast the staleness reasons, but only when they changed. */
|
|
3360
|
+
function broadcastStaleness(s, channels) {
|
|
3361
|
+
const msg = staleMessage(s, channels);
|
|
3362
|
+
const sig = JSON.stringify(msg.reasons);
|
|
3363
|
+
if (sig === s.lastStaleSig)
|
|
3364
|
+
return;
|
|
3365
|
+
s.lastStaleSig = sig;
|
|
3366
|
+
broadcast(s, msg);
|
|
3367
|
+
}
|
|
3269
3368
|
function destroySession(s) {
|
|
3369
|
+
prepromptById.delete(s.id);
|
|
3270
3370
|
prepromptById.delete(s.id);
|
|
3271
3371
|
if (s.screenTimer)
|
|
3272
3372
|
clearInterval(s.screenTimer);
|
|
@@ -3444,6 +3544,10 @@ async function createSession(id, cwd, args, worktree = null, profile = null, mod
|
|
|
3444
3544
|
lastTurnMs: null,
|
|
3445
3545
|
};
|
|
3446
3546
|
await attachPilot(s);
|
|
3547
|
+
// Anchor what this process actually got, so the reload indicator can later
|
|
3548
|
+
// tell whether it drifted. No-op-safe for an adopted pane (keeps the old
|
|
3549
|
+
// anchor); seeds `legacy` the first time a pre-feature agent is adopted.
|
|
3550
|
+
recordSpawnFingerprint(s);
|
|
3447
3551
|
return s;
|
|
3448
3552
|
}
|
|
3449
3553
|
/**
|
|
@@ -4268,6 +4372,7 @@ wss.on("connection", (ws, req) => {
|
|
|
4268
4372
|
instanceKey: instanceKey(),
|
|
4269
4373
|
sessionId: id,
|
|
4270
4374
|
preprompt: prepromptById.get(id) ?? [],
|
|
4375
|
+
stale: sessionStaleness(session),
|
|
4271
4376
|
cwd: session.cwd,
|
|
4272
4377
|
lastTurnMs: session.lastTurnMs,
|
|
4273
4378
|
});
|
|
@@ -4367,6 +4472,7 @@ wss.on("connection", (ws, req) => {
|
|
|
4367
4472
|
instanceKey: instanceKey(),
|
|
4368
4473
|
sessionId: id,
|
|
4369
4474
|
preprompt: prepromptById.get(id) ?? [],
|
|
4475
|
+
stale: sessionStaleness(session),
|
|
4370
4476
|
cwd: effectiveCwd,
|
|
4371
4477
|
branch: worktree?.branch ?? null,
|
|
4372
4478
|
});
|
|
@@ -5168,6 +5274,17 @@ server.listen(port, HOST, () => {
|
|
|
5168
5274
|
primeCrons();
|
|
5169
5275
|
const cronTimer = setInterval(cronTick, 30_000);
|
|
5170
5276
|
cronTimer.unref();
|
|
5277
|
+
// Reload indicator: re-evaluate every live agent's staleness once a minute and
|
|
5278
|
+
// push it when it changed — this is how a profile edit, a newly-seeded skill or
|
|
5279
|
+
// a freshly-installed `claude` reaches an idle agent's tab without any traffic
|
|
5280
|
+
// on it. One `claude --version` per sweep at most (the version is cached).
|
|
5281
|
+
const staleTimer = setInterval(() => {
|
|
5282
|
+
const channels = loadChannels();
|
|
5283
|
+
for (const s of sessions.values())
|
|
5284
|
+
if (!s.pilot.hasExited)
|
|
5285
|
+
broadcastStaleness(s, channels);
|
|
5286
|
+
}, 60_000);
|
|
5287
|
+
staleTimer.unref();
|
|
5171
5288
|
// The lead agent, if this instance has none. Deferred a beat so it dials a
|
|
5172
5289
|
// server that is already accepting, and never awaited: a cockpit that starts
|
|
5173
5290
|
// without its lead agent is a far smaller problem than a boot that hangs.
|