@agentdeck/bridge 1.1.0 → 1.2.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/README.md +14 -6
- package/assets/fonts/NOTICE-PocketSansWorld.md +10 -0
- package/assets/fonts/OFL-PocketSansWorld.txt +93 -0
- package/assets/fonts/PocketSansWorld_12.cpfont +0 -0
- package/assets/fonts/pocket-sans-world.manifest.json +49 -0
- package/assets/learning/LICENSE-CC-BY-SA-4.0.txt +10 -0
- package/assets/learning/NOTICE.md +33 -0
- package/assets/learning/jp-n3-ko.manifest.json +27 -0
- package/assets/learning/jp-n3-ko.pdl +0 -0
- package/dist/agent-cli-diagnostics.d.ts +20 -0
- package/dist/agent-cli-diagnostics.d.ts.map +1 -0
- package/dist/agent-cli-diagnostics.js +100 -0
- package/dist/agent-cli-diagnostics.js.map +1 -0
- package/dist/apme/classifier.d.ts.map +1 -1
- package/dist/apme/classifier.js +18 -10
- package/dist/apme/classifier.js.map +1 -1
- package/dist/apme/claude-transcript-reader.d.ts +36 -0
- package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
- package/dist/apme/claude-transcript-reader.js +78 -2
- package/dist/apme/claude-transcript-reader.js.map +1 -1
- package/dist/apme/collector.d.ts +126 -3
- package/dist/apme/collector.d.ts.map +1 -1
- package/dist/apme/collector.js +450 -41
- package/dist/apme/collector.js.map +1 -1
- package/dist/apme/dashboard-html.d.ts.map +1 -1
- package/dist/apme/dashboard-html.js +278 -36
- package/dist/apme/dashboard-html.js.map +1 -1
- package/dist/apme/graph.d.ts +1 -1
- package/dist/apme/graph.d.ts.map +1 -1
- package/dist/apme/graph.js +51 -1
- package/dist/apme/graph.js.map +1 -1
- package/dist/apme/http.d.ts.map +1 -1
- package/dist/apme/http.js +37 -5
- package/dist/apme/http.js.map +1 -1
- package/dist/apme/index.d.ts +4 -0
- package/dist/apme/index.d.ts.map +1 -1
- package/dist/apme/index.js +19 -3
- package/dist/apme/index.js.map +1 -1
- package/dist/apme/runner.d.ts +90 -0
- package/dist/apme/runner.d.ts.map +1 -1
- package/dist/apme/runner.js +524 -48
- package/dist/apme/runner.js.map +1 -1
- package/dist/apme/sample-to-timeline.d.ts.map +1 -1
- package/dist/apme/sample-to-timeline.js +5 -0
- package/dist/apme/sample-to-timeline.js.map +1 -1
- package/dist/apme/settings.d.ts +8 -0
- package/dist/apme/settings.d.ts.map +1 -1
- package/dist/apme/settings.js +4 -0
- package/dist/apme/settings.js.map +1 -1
- package/dist/apme/store.d.ts +118 -9
- package/dist/apme/store.d.ts.map +1 -1
- package/dist/apme/store.js +342 -44
- package/dist/apme/store.js.map +1 -1
- package/dist/apme/task-gradeability.d.ts +82 -0
- package/dist/apme/task-gradeability.d.ts.map +1 -0
- package/dist/apme/task-gradeability.js +126 -0
- package/dist/apme/task-gradeability.js.map +1 -0
- package/dist/awaiting-overlay.d.ts +13 -26
- package/dist/awaiting-overlay.d.ts.map +1 -1
- package/dist/awaiting-overlay.js +7 -40
- package/dist/awaiting-overlay.js.map +1 -1
- package/dist/bridge-core.d.ts +15 -0
- package/dist/bridge-core.d.ts.map +1 -1
- package/dist/bridge-core.js +30 -4
- package/dist/bridge-core.js.map +1 -1
- package/dist/claude-permission-rules.d.ts +20 -32
- package/dist/claude-permission-rules.d.ts.map +1 -1
- package/dist/claude-permission-rules.js +19 -102
- package/dist/claude-permission-rules.js.map +1 -1
- package/dist/claude-usage-recovery.d.ts +54 -0
- package/dist/claude-usage-recovery.d.ts.map +1 -0
- package/dist/claude-usage-recovery.js +200 -0
- package/dist/claude-usage-recovery.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +81 -14
- package/dist/cli.js.map +1 -1
- package/dist/codex-rate-limits-live.d.ts +180 -10
- package/dist/codex-rate-limits-live.d.ts.map +1 -1
- package/dist/codex-rate-limits-live.js +475 -22
- package/dist/codex-rate-limits-live.js.map +1 -1
- package/dist/codex-rollout-response.d.ts +43 -0
- package/dist/codex-rollout-response.d.ts.map +1 -1
- package/dist/codex-rollout-response.js +67 -0
- package/dist/codex-rollout-response.js.map +1 -1
- package/dist/coordination-evidence.d.ts +150 -0
- package/dist/coordination-evidence.d.ts.map +1 -0
- package/dist/coordination-evidence.js +455 -0
- package/dist/coordination-evidence.js.map +1 -0
- package/dist/daemon-server.d.ts.map +1 -1
- package/dist/daemon-server.js +592 -35
- package/dist/daemon-server.js.map +1 -1
- package/dist/daemon-ws-client.d.ts +1 -0
- package/dist/daemon-ws-client.d.ts.map +1 -1
- package/dist/daemon-ws-client.js +25 -16
- package/dist/daemon-ws-client.js.map +1 -1
- package/dist/daemon.js +1 -1
- package/dist/deferred-reply-read.d.ts +24 -0
- package/dist/deferred-reply-read.d.ts.map +1 -0
- package/dist/deferred-reply-read.js +42 -0
- package/dist/deferred-reply-read.js.map +1 -0
- package/dist/esp32-serial.d.ts +15 -0
- package/dist/esp32-serial.d.ts.map +1 -1
- package/dist/esp32-serial.js +61 -2
- package/dist/esp32-serial.js.map +1 -1
- package/dist/font-pack.d.ts +15 -0
- package/dist/font-pack.d.ts.map +1 -0
- package/dist/font-pack.js +75 -0
- package/dist/font-pack.js.map +1 -0
- package/dist/glance-frame.d.ts.map +1 -1
- package/dist/glance-frame.js +2 -0
- package/dist/glance-frame.js.map +1 -1
- package/dist/hook-codex-sessions.d.ts +9 -0
- package/dist/hook-codex-sessions.d.ts.map +1 -1
- package/dist/hook-codex-sessions.js +35 -2
- package/dist/hook-codex-sessions.js.map +1 -1
- package/dist/hook-opencode-sessions.d.ts +62 -0
- package/dist/hook-opencode-sessions.d.ts.map +1 -0
- package/dist/hook-opencode-sessions.js +180 -0
- package/dist/hook-opencode-sessions.js.map +1 -0
- package/dist/hook-response-source.d.ts +40 -0
- package/dist/hook-response-source.d.ts.map +1 -0
- package/dist/hook-response-source.js +31 -0
- package/dist/hook-response-source.js.map +1 -0
- package/dist/http-auth-gate.d.ts.map +1 -1
- package/dist/http-auth-gate.js +9 -1
- package/dist/http-auth-gate.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/learning-pack.d.ts +24 -0
- package/dist/learning-pack.d.ts.map +1 -0
- package/dist/learning-pack.js +125 -0
- package/dist/learning-pack.js.map +1 -0
- package/dist/mdns.js +1 -1
- package/dist/mdns.js.map +1 -1
- package/dist/native-dependency-diagnostics.d.ts +29 -0
- package/dist/native-dependency-diagnostics.d.ts.map +1 -0
- package/dist/native-dependency-diagnostics.js +95 -0
- package/dist/native-dependency-diagnostics.js.map +1 -0
- package/dist/observed-steering.d.ts +4 -4
- package/dist/observed-steering.d.ts.map +1 -1
- package/dist/observed-steering.js +28 -32
- package/dist/observed-steering.js.map +1 -1
- package/dist/openclaw-gateway-stability.d.ts +94 -0
- package/dist/openclaw-gateway-stability.d.ts.map +1 -0
- package/dist/openclaw-gateway-stability.js +176 -0
- package/dist/openclaw-gateway-stability.js.map +1 -0
- package/dist/pairing-knocks.d.ts +80 -0
- package/dist/pairing-knocks.d.ts.map +1 -0
- package/dist/pairing-knocks.js +312 -0
- package/dist/pairing-knocks.js.map +1 -0
- package/dist/passive-observer.d.ts +5 -0
- package/dist/passive-observer.d.ts.map +1 -1
- package/dist/passive-observer.js +6 -0
- package/dist/passive-observer.js.map +1 -1
- package/dist/pixoo/micro-glyphs.d.ts +4 -0
- package/dist/pixoo/micro-glyphs.d.ts.map +1 -1
- package/dist/pixoo/micro-glyphs.js +29 -0
- package/dist/pixoo/micro-glyphs.js.map +1 -1
- package/dist/pixoo/pixoo-font.d.ts.map +1 -1
- package/dist/pixoo/pixoo-font.js +3 -1
- package/dist/pixoo/pixoo-font.js.map +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts +1 -1
- package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
- package/dist/pixoo/pixoo-renderer.js +17 -2
- package/dist/pixoo/pixoo-renderer.js.map +1 -1
- package/dist/pty-manager.d.ts +9 -0
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +63 -4
- package/dist/pty-manager.js.map +1 -1
- package/dist/relayed-usage.d.ts +30 -0
- package/dist/relayed-usage.d.ts.map +1 -1
- package/dist/relayed-usage.js +25 -2
- package/dist/relayed-usage.js.map +1 -1
- package/dist/review-runner.js +1 -1
- package/dist/subagent-timeline.d.ts +27 -0
- package/dist/subagent-timeline.d.ts.map +1 -1
- package/dist/subagent-timeline.js +52 -5
- package/dist/subagent-timeline.js.map +1 -1
- package/dist/surface-protocol.d.ts.map +1 -1
- package/dist/surface-protocol.js +2 -0
- package/dist/surface-protocol.js.map +1 -1
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +8 -1
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/usage-api.d.ts +3 -0
- package/dist/usage-api.d.ts.map +1 -1
- package/dist/usage-api.js +101 -36
- package/dist/usage-api.js.map +1 -1
- package/dist/usage-event.d.ts.map +1 -1
- package/dist/usage-event.js +2 -1
- package/dist/usage-event.js.map +1 -1
- package/dist/ws-server.d.ts +18 -0
- package/dist/ws-server.d.ts.map +1 -1
- package/dist/ws-server.js +40 -2
- package/dist/ws-server.js.map +1 -1
- package/package.json +6 -5
- package/src/timebox/sync_ble.py +35 -16
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-session coordination evidence.
|
|
3
|
+
*
|
|
4
|
+
* A harness divides work in more ways than `SubagentStart`. Measured on
|
|
5
|
+
* 2026-09-06 while a user asked why their epoch-of-tech creatures "looked
|
|
6
|
+
* idle": the parent had closed its turn ("waiting for the matrix"), six
|
|
7
|
+
* `claude -p --model glm-5.3` workers it launched from a background Bash had
|
|
8
|
+
* each become a separate observed session with no link back, twelve
|
|
9
|
+
* `SendMessage` calls had crossed between it and a sibling, and a 22-minute
|
|
10
|
+
* `run_bot_matrix.sh` it would be re-invoked by was still running under
|
|
11
|
+
* launchd with the parent's scratchpad path in its argv. Every surface showed
|
|
12
|
+
* `idle`, and the collaboration lens drew one Explore branch.
|
|
13
|
+
*
|
|
14
|
+
* Each of those facts is OBSERVABLE without guessing, and this module turns
|
|
15
|
+
* them into `RelationEvent`s plus a per-session `CoordinationSummary`:
|
|
16
|
+
*
|
|
17
|
+
* - `spawned` — a peer session whose process is a descendant of this
|
|
18
|
+
* session's process (`process_ancestry`), or the intent to spawn one
|
|
19
|
+
* seen on a Bash tool call (`bash_claude_p`) before the child exists.
|
|
20
|
+
* - `messaged` — the sender's `SendMessage` tool input (`send_message_tool`)
|
|
21
|
+
* and the receiver's `<cross-session-message from="uds:…/<pid>.sock"
|
|
22
|
+
* from-name="…">` envelope (`cross_session_message`). The sender pid in
|
|
23
|
+
* the envelope resolves to a session through the process table.
|
|
24
|
+
* - `waiting_on` — a process (not itself an agent session) whose argv names
|
|
25
|
+
* this session's scratchpad directory (`background_process`), i.e. a
|
|
26
|
+
* `run_in_background` job the harness will re-invoke the session for.
|
|
27
|
+
*
|
|
28
|
+
* What it deliberately does not do: link two sessions because they share a
|
|
29
|
+
* project, or read a "worker" out of prose. A relation whose peer cannot be
|
|
30
|
+
* resolved carries only the name/pid the evidence itself had.
|
|
31
|
+
*/
|
|
32
|
+
const ENVELOPE_RE = /<cross-session-message\b([^>]*)>/;
|
|
33
|
+
const ATTR_RE = /([a-z-]+)="([^"]*)"/g;
|
|
34
|
+
const UDS_PID_RE = /\/(\d+)\.sock\b/;
|
|
35
|
+
const MAX_DETAIL = 140;
|
|
36
|
+
function attrs(raw) {
|
|
37
|
+
const out = {};
|
|
38
|
+
for (const m of raw.matchAll(ATTR_RE))
|
|
39
|
+
out[m[1]] = m[2];
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function pidFromUds(value) {
|
|
43
|
+
if (!value)
|
|
44
|
+
return null;
|
|
45
|
+
const m = UDS_PID_RE.exec(value);
|
|
46
|
+
const pid = m ? Number(m[1]) : NaN;
|
|
47
|
+
return Number.isInteger(pid) && pid > 0 ? pid : null;
|
|
48
|
+
}
|
|
49
|
+
function clip(text, max = MAX_DETAIL) {
|
|
50
|
+
const flat = text.replace(/\s+/g, ' ').trim();
|
|
51
|
+
return flat.length > max ? `${flat.slice(0, max - 1).trim()}…` : flat;
|
|
52
|
+
}
|
|
53
|
+
/** Parse a received prompt for the cross-session envelope; null when the
|
|
54
|
+
* prompt is an ordinary user turn. */
|
|
55
|
+
export function parseCrossSessionEnvelope(prompt) {
|
|
56
|
+
if (typeof prompt !== 'string')
|
|
57
|
+
return null;
|
|
58
|
+
const m = ENVELOPE_RE.exec(prompt);
|
|
59
|
+
if (!m)
|
|
60
|
+
return null;
|
|
61
|
+
const a = attrs(m[1]);
|
|
62
|
+
const after = prompt.slice(m.index + m[0].length);
|
|
63
|
+
// The harness preamble ("This came from another Claude session — …") ends
|
|
64
|
+
// at the first blank line; the body is what the peer actually wrote.
|
|
65
|
+
const blank = after.search(/\n\s*\n/);
|
|
66
|
+
const body = blank >= 0 ? after.slice(blank) : after;
|
|
67
|
+
const closing = body.indexOf('</cross-session-message>');
|
|
68
|
+
return {
|
|
69
|
+
fromPid: pidFromUds(a.from),
|
|
70
|
+
fromName: a['from-name']?.trim() || null,
|
|
71
|
+
fromMode: a['from-mode']?.trim() || null,
|
|
72
|
+
body: clip(closing >= 0 ? body.slice(0, closing) : body),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** The `to` of a Claude Code `SendMessage` tool call: either a session name
|
|
76
|
+
* or a `uds:/…/<pid>.sock` address. */
|
|
77
|
+
export function parseSendMessageInput(input) {
|
|
78
|
+
if (!input || typeof input !== 'object')
|
|
79
|
+
return null;
|
|
80
|
+
const to = input.to;
|
|
81
|
+
if (typeof to !== 'string' || !to.trim())
|
|
82
|
+
return null;
|
|
83
|
+
const pid = pidFromUds(to);
|
|
84
|
+
const summaryRaw = input;
|
|
85
|
+
const summary = typeof summaryRaw.summary === 'string' && summaryRaw.summary.trim()
|
|
86
|
+
? clip(summaryRaw.summary)
|
|
87
|
+
: (typeof summaryRaw.message === 'string' && summaryRaw.message.trim() ? clip(summaryRaw.message, 96) : null);
|
|
88
|
+
return { peerName: pid ? null : to.trim(), peerPid: pid, summary };
|
|
89
|
+
}
|
|
90
|
+
/** A Bash command that launches a headless agent worker. Only the spellings
|
|
91
|
+
* we have measured: `claude -p` / `claude --print`. */
|
|
92
|
+
export function isAgentSpawnCommand(command) {
|
|
93
|
+
if (typeof command !== 'string')
|
|
94
|
+
return false;
|
|
95
|
+
return /(^|[\s;&|(])claude\s+(?:[^\n;&|]*\s)?(?:-p|--print)(?:\s|$)/.test(command);
|
|
96
|
+
}
|
|
97
|
+
/** The interactive/headless agent binaries a session runs as. Used to stop
|
|
98
|
+
* the hook-pid walk and to keep an agent's own descendants out of the
|
|
99
|
+
* background-job set. */
|
|
100
|
+
export function isAgentProcessCommand(command) {
|
|
101
|
+
const head = command.split(/\s+/).filter(Boolean).find((t) => !/^[A-Z_]+=/.test(t)) ?? '';
|
|
102
|
+
const base = head.split('/').pop() ?? '';
|
|
103
|
+
if (/^(claude|codex|opencode|kiro-cli)$/.test(base))
|
|
104
|
+
return true;
|
|
105
|
+
// `node …/cli.js` style launches name the agent in a later token.
|
|
106
|
+
return /(^|\/)(claude|codex|opencode)(\.js|\.mjs)?(\s|$)/.test(command.split(/\s+/).slice(0, 3).join(' '));
|
|
107
|
+
}
|
|
108
|
+
/** Scratchpad directory Claude Code hands a session (the `SP=` every
|
|
109
|
+
* background job in the measured transcript inherited). The session id is
|
|
110
|
+
* the last path segment before `/scratchpad`. */
|
|
111
|
+
export function commandNamesSession(command, sessionId) {
|
|
112
|
+
if (!sessionId || sessionId.length < 8)
|
|
113
|
+
return false;
|
|
114
|
+
return command.includes(`/${sessionId}/`) || command.endsWith(`/${sessionId}`);
|
|
115
|
+
}
|
|
116
|
+
export function commandLabel(command) {
|
|
117
|
+
// "bash -c bash tools/run_bot_matrix.sh /private/tmp/…" → "run_bot_matrix.sh".
|
|
118
|
+
// Conservative on purpose: the first live read produced "NO" and "\012" as
|
|
119
|
+
// labels for heredoc-driven shells, so a label must be a script/path token
|
|
120
|
+
// or a word of 3+ characters; anything else is just "process".
|
|
121
|
+
const raw = command.split(/\s+/).filter(Boolean);
|
|
122
|
+
const tokens = raw
|
|
123
|
+
// A `cd <dir>` target is where the job runs, not what it is.
|
|
124
|
+
.filter((t, i) => i === 0 || raw[i - 1] !== 'cd')
|
|
125
|
+
.filter((t) => !/^(bash|sh|zsh|-c|-lc|-l|-e|python3?|node|npx|pnpm|env|exec|nohup|timeout|cd|&&|;|\|\|)$/.test(t))
|
|
126
|
+
.filter((t) => !/^[A-Za-z_][A-Za-z0-9_]*=/.test(t) && !t.startsWith('-') && !t.includes('/private/tmp/'));
|
|
127
|
+
const script = tokens.find((t) => /\.(sh|py|mjs|cjs|js|ts|rb|pl|swift)$/.test(t));
|
|
128
|
+
const path = tokens.find((t) => t.includes('/') && !/^\d+$/.test(t));
|
|
129
|
+
const word = tokens.find((t) => /^[A-Za-z][A-Za-z0-9._-]{2,}$/.test(t));
|
|
130
|
+
const first = script ?? path ?? word;
|
|
131
|
+
if (!first)
|
|
132
|
+
return 'process';
|
|
133
|
+
const base = first.split('/').filter(Boolean).pop() ?? first;
|
|
134
|
+
return /^[A-Za-z0-9][A-Za-z0-9._-]{1,}$/.test(base) ? clip(base, 48) : 'process';
|
|
135
|
+
}
|
|
136
|
+
/** Walk the parent chain from `pid` (exclusive) up to `maxDepth` levels and
|
|
137
|
+
* return the first ancestor that is an observed peer session. */
|
|
138
|
+
export function findAncestorSession(processes, pid, peers, maxDepth = 8) {
|
|
139
|
+
const byPid = new Map(processes.map((p) => [p.pid, p]));
|
|
140
|
+
const peerByPid = new Map(peers.map((p) => [p.pid, p]));
|
|
141
|
+
let cur = byPid.get(pid);
|
|
142
|
+
for (let depth = 0; cur && depth < maxDepth; depth++) {
|
|
143
|
+
const ppid = cur.ppid;
|
|
144
|
+
if (!ppid || ppid <= 1)
|
|
145
|
+
return null;
|
|
146
|
+
const peer = peerByPid.get(ppid);
|
|
147
|
+
if (peer && peer.pid !== pid)
|
|
148
|
+
return peer;
|
|
149
|
+
cur = byPid.get(ppid);
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const MAX_COMMAND_CHARS = 4096;
|
|
154
|
+
/**
|
|
155
|
+
* Per-session reducer. Two inputs — hook facts (`noteMessageOut`,
|
|
156
|
+
* `noteMessageIn`, `noteToolCall`) and the periodic process table
|
|
157
|
+
* (`observe`) — and two outputs: `RelationObservation`s to persist on the
|
|
158
|
+
* session's APME task, and `summary()` for the `sessions_list` wire. The
|
|
159
|
+
* summary is kept here rather than derived from the rows it emits, for the
|
|
160
|
+
* same reason the subagent census is (the rows are lossy on purpose).
|
|
161
|
+
*/
|
|
162
|
+
export class CoordinationTracker {
|
|
163
|
+
now;
|
|
164
|
+
sessions = new Map();
|
|
165
|
+
/** Session names learned from envelopes: name → sender session id. */
|
|
166
|
+
nameToSession = new Map();
|
|
167
|
+
sessionToName = new Map();
|
|
168
|
+
/** Latest pid → session map from the observer, for uds resolution. */
|
|
169
|
+
pidToSession = new Map();
|
|
170
|
+
/** Session → agent pid learned from the hook header (`X-AgentDeck-Pid`),
|
|
171
|
+
* the path a sandboxed daemon has no file-based alternative to. */
|
|
172
|
+
hookPids = new Map();
|
|
173
|
+
constructor(now = Date.now) {
|
|
174
|
+
this.now = now;
|
|
175
|
+
}
|
|
176
|
+
entry(sessionId) {
|
|
177
|
+
let e = this.sessions.get(sessionId);
|
|
178
|
+
if (!e) {
|
|
179
|
+
e = { jobs: new Map(), spawned: new Map(), spawnIntents: 0, messagesIn: 0, messagesOut: 0 };
|
|
180
|
+
this.sessions.set(sessionId, e);
|
|
181
|
+
}
|
|
182
|
+
return e;
|
|
183
|
+
}
|
|
184
|
+
touch(e, peerName, ts) {
|
|
185
|
+
if (peerName)
|
|
186
|
+
e.lastPeerName = peerName;
|
|
187
|
+
e.lastRelationAt = ts;
|
|
188
|
+
}
|
|
189
|
+
/** A hook arrived with the posting shell's parent pid. The shell's parent
|
|
190
|
+
* is normally the agent process itself; if a wrapper sits in between, walk
|
|
191
|
+
* up to the nearest agent process so the registered pid is the one whose
|
|
192
|
+
* children are the session's workers. */
|
|
193
|
+
registerPid(sessionId, pid, processes = []) {
|
|
194
|
+
if (!Number.isInteger(pid) || pid <= 1)
|
|
195
|
+
return;
|
|
196
|
+
const byPid = new Map(processes.map((p) => [p.pid, p]));
|
|
197
|
+
let cur = byPid.get(pid);
|
|
198
|
+
let chosen = pid;
|
|
199
|
+
for (let depth = 0; cur && depth < 4 && !isAgentProcessCommand(cur.command); depth++) {
|
|
200
|
+
const parent = byPid.get(cur.ppid);
|
|
201
|
+
if (!parent || parent.pid <= 1)
|
|
202
|
+
break;
|
|
203
|
+
cur = parent;
|
|
204
|
+
if (isAgentProcessCommand(cur.command))
|
|
205
|
+
chosen = cur.pid;
|
|
206
|
+
}
|
|
207
|
+
this.hookPids.set(sessionId, chosen);
|
|
208
|
+
this.pidToSession.set(chosen, sessionId);
|
|
209
|
+
}
|
|
210
|
+
/** Observer peers plus hook-registered pids for sessions the observer did
|
|
211
|
+
* not resolve (a session whose `sessions/<pid>.json` is unreadable, or the
|
|
212
|
+
* whole roster on a daemon with no file access). The observer's pid wins
|
|
213
|
+
* when both exist. */
|
|
214
|
+
mergePeers(observed) {
|
|
215
|
+
const seen = new Set(observed.map((p) => p.sessionId));
|
|
216
|
+
const out = [...observed];
|
|
217
|
+
for (const [sessionId, pid] of this.hookPids) {
|
|
218
|
+
if (!seen.has(sessionId))
|
|
219
|
+
out.push({ sessionId, pid });
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
/** The receiver's side of a message: the prompt carried the envelope. */
|
|
224
|
+
noteMessageIn(sessionId, prompt) {
|
|
225
|
+
const env = parseCrossSessionEnvelope(prompt);
|
|
226
|
+
if (!env)
|
|
227
|
+
return null;
|
|
228
|
+
const ts = this.now();
|
|
229
|
+
const peerSessionId = env.fromPid != null ? this.pidToSession.get(env.fromPid) ?? null : null;
|
|
230
|
+
if (env.fromName && peerSessionId) {
|
|
231
|
+
this.nameToSession.set(env.fromName, peerSessionId);
|
|
232
|
+
this.sessionToName.set(peerSessionId, env.fromName);
|
|
233
|
+
}
|
|
234
|
+
const e = this.entry(sessionId);
|
|
235
|
+
e.messagesIn += 1;
|
|
236
|
+
this.touch(e, env.fromName, ts);
|
|
237
|
+
return {
|
|
238
|
+
sessionId,
|
|
239
|
+
relation: 'messaged',
|
|
240
|
+
direction: 'in',
|
|
241
|
+
phase: 'closed',
|
|
242
|
+
peerSessionId,
|
|
243
|
+
peerName: env.fromName,
|
|
244
|
+
evidence: 'cross_session_message',
|
|
245
|
+
detail: env.body || null,
|
|
246
|
+
ts,
|
|
247
|
+
key: `${env.fromPid ?? env.fromName ?? 'peer'}:${ts}`,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/** A tool call the session made: SendMessage → `messaged` out; a Bash that
|
|
251
|
+
* launches `claude -p` → a `spawned` intent (open, peer unknown yet). */
|
|
252
|
+
noteToolCall(sessionId, toolName, toolInput) {
|
|
253
|
+
if (toolName === 'SendMessage') {
|
|
254
|
+
const target = parseSendMessageInput(toolInput);
|
|
255
|
+
if (!target)
|
|
256
|
+
return null;
|
|
257
|
+
const ts = this.now();
|
|
258
|
+
const peerSessionId = target.peerPid != null
|
|
259
|
+
? this.pidToSession.get(target.peerPid) ?? null
|
|
260
|
+
: (target.peerName ? this.nameToSession.get(target.peerName) ?? null : null);
|
|
261
|
+
const peerName = target.peerName ?? (peerSessionId ? this.sessionToName.get(peerSessionId) ?? null : null);
|
|
262
|
+
const e = this.entry(sessionId);
|
|
263
|
+
e.messagesOut += 1;
|
|
264
|
+
this.touch(e, peerName, ts);
|
|
265
|
+
return {
|
|
266
|
+
sessionId,
|
|
267
|
+
relation: 'messaged',
|
|
268
|
+
direction: 'out',
|
|
269
|
+
phase: 'closed',
|
|
270
|
+
peerSessionId,
|
|
271
|
+
peerName,
|
|
272
|
+
evidence: 'send_message_tool',
|
|
273
|
+
detail: target.summary,
|
|
274
|
+
ts,
|
|
275
|
+
key: `${target.peerPid ?? target.peerName ?? 'peer'}:${ts}`,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
if (toolName === 'Bash') {
|
|
279
|
+
const command = toolInput?.command;
|
|
280
|
+
if (!isAgentSpawnCommand(command))
|
|
281
|
+
return null;
|
|
282
|
+
const ts = this.now();
|
|
283
|
+
const e = this.entry(sessionId);
|
|
284
|
+
e.spawnIntents += 1;
|
|
285
|
+
this.touch(e, null, ts);
|
|
286
|
+
return {
|
|
287
|
+
sessionId,
|
|
288
|
+
relation: 'spawned',
|
|
289
|
+
direction: 'out',
|
|
290
|
+
phase: 'open',
|
|
291
|
+
peerSessionId: null,
|
|
292
|
+
peerName: 'claude -p',
|
|
293
|
+
evidence: 'bash_claude_p',
|
|
294
|
+
detail: clip(String(command), 96),
|
|
295
|
+
ts,
|
|
296
|
+
key: `intent:${ts}`,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Reconcile against the process table. `peers` are the observed agent
|
|
303
|
+
* sessions with their pids (bare ids). Emits: `spawned` open on the parent
|
|
304
|
+
* when a peer's ancestry reaches another peer, `spawned` closed when such a
|
|
305
|
+
* child's process is gone, `waiting_on` open/closed for background jobs.
|
|
306
|
+
*/
|
|
307
|
+
observe(processes, peers) {
|
|
308
|
+
// An empty process table is "I could not look", never "everything ended".
|
|
309
|
+
// `collectProcessInfo` returns [] when `ps` fails or times out, and the
|
|
310
|
+
// sweeps below close every open child and every job they cannot find — so
|
|
311
|
+
// one failed scan would emit a `closed` relation for the whole machine and
|
|
312
|
+
// drop every census to zero. The next tick cannot undo it either: the
|
|
313
|
+
// sample's dedup key is `relation:direction:phase:key`, so the re-`open`
|
|
314
|
+
// is discarded as a duplicate of the one already stored and the trajectory
|
|
315
|
+
// stays closed while the live census says active. Same rule as the flash-id
|
|
316
|
+
// and lsof probes: three answers, and "unknown" makes no claim.
|
|
317
|
+
if (processes.length === 0)
|
|
318
|
+
return [];
|
|
319
|
+
const ts = this.now();
|
|
320
|
+
const out = [];
|
|
321
|
+
this.pidToSession = new Map(peers.map((p) => [p.pid, p.sessionId]));
|
|
322
|
+
for (const [sessionId, pid] of this.hookPids)
|
|
323
|
+
if (!this.pidToSession.has(pid))
|
|
324
|
+
this.pidToSession.set(pid, sessionId);
|
|
325
|
+
const peerPids = new Set(peers.map((p) => p.pid));
|
|
326
|
+
const alivePeerIds = new Set(peers.map((p) => p.sessionId));
|
|
327
|
+
const rows = processes.map((p) => ({ ...p, command: p.command.slice(0, MAX_COMMAND_CHARS) }));
|
|
328
|
+
// Spawned peers: ancestry.
|
|
329
|
+
for (const child of peers) {
|
|
330
|
+
const parent = findAncestorSession(rows, child.pid, peers);
|
|
331
|
+
if (!parent || parent.sessionId === child.sessionId)
|
|
332
|
+
continue;
|
|
333
|
+
const e = this.entry(parent.sessionId);
|
|
334
|
+
if (e.spawned.has(child.sessionId))
|
|
335
|
+
continue;
|
|
336
|
+
e.spawned.set(child.sessionId, true);
|
|
337
|
+
// A spawn intent that has now materialized is no longer pending.
|
|
338
|
+
if (e.spawnIntents > 0)
|
|
339
|
+
e.spawnIntents -= 1;
|
|
340
|
+
this.touch(e, null, ts);
|
|
341
|
+
out.push({
|
|
342
|
+
sessionId: parent.sessionId, relation: 'spawned', direction: 'out', phase: 'open',
|
|
343
|
+
peerSessionId: child.sessionId, peerName: null, evidence: 'process_ancestry',
|
|
344
|
+
detail: null, ts, key: child.sessionId,
|
|
345
|
+
});
|
|
346
|
+
out.push({
|
|
347
|
+
sessionId: child.sessionId, relation: 'spawned', direction: 'in', phase: 'open',
|
|
348
|
+
peerSessionId: parent.sessionId, peerName: null, evidence: 'process_ancestry',
|
|
349
|
+
detail: null, ts, key: parent.sessionId,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
// Spawned peers that ended.
|
|
353
|
+
for (const [parentId, e] of this.sessions) {
|
|
354
|
+
for (const [childId, alive] of e.spawned) {
|
|
355
|
+
if (alive && !alivePeerIds.has(childId)) {
|
|
356
|
+
e.spawned.set(childId, false);
|
|
357
|
+
this.touch(e, null, ts);
|
|
358
|
+
out.push({
|
|
359
|
+
sessionId: parentId, relation: 'spawned', direction: 'out', phase: 'closed',
|
|
360
|
+
peerSessionId: childId, peerName: null, evidence: 'process_ancestry',
|
|
361
|
+
detail: null, ts, key: childId,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
// Background jobs: argv names a session's scratchpad, and the process is
|
|
367
|
+
// neither an agent session itself nor a descendant of one (a `claude -p`
|
|
368
|
+
// worker inherits the parent's scratchpad path in its prompt).
|
|
369
|
+
for (const peer of peers) {
|
|
370
|
+
const e = this.sessions.get(peer.sessionId) ?? null;
|
|
371
|
+
const seen = new Set();
|
|
372
|
+
for (const proc of rows) {
|
|
373
|
+
if (proc.pid === peer.pid || peerPids.has(proc.pid))
|
|
374
|
+
continue;
|
|
375
|
+
if (!commandNamesSession(proc.command, peer.sessionId))
|
|
376
|
+
continue;
|
|
377
|
+
if (findAncestorSession(rows, proc.pid, peers))
|
|
378
|
+
continue;
|
|
379
|
+
// One job may be a `bash -c …` wrapping the same script — count the
|
|
380
|
+
// outermost only, so a job reads as one row rather than two.
|
|
381
|
+
const parentRow = rows.find((r) => r.pid === proc.ppid);
|
|
382
|
+
if (parentRow && commandNamesSession(parentRow.command, peer.sessionId) && !peerPids.has(parentRow.pid))
|
|
383
|
+
continue;
|
|
384
|
+
seen.add(proc.pid);
|
|
385
|
+
const entry = e ?? this.entry(peer.sessionId);
|
|
386
|
+
if (entry.jobs.has(proc.pid))
|
|
387
|
+
continue;
|
|
388
|
+
const label = commandLabel(proc.command);
|
|
389
|
+
entry.jobs.set(proc.pid, label);
|
|
390
|
+
this.touch(entry, null, ts);
|
|
391
|
+
out.push({
|
|
392
|
+
sessionId: peer.sessionId, relation: 'waiting_on', direction: 'out', phase: 'open',
|
|
393
|
+
peerSessionId: null, peerName: label, evidence: 'background_process',
|
|
394
|
+
detail: clip(proc.command, 96), ts, key: String(proc.pid),
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
if (!e)
|
|
398
|
+
continue;
|
|
399
|
+
for (const [pid, label] of e.jobs) {
|
|
400
|
+
if (seen.has(pid))
|
|
401
|
+
continue;
|
|
402
|
+
e.jobs.delete(pid);
|
|
403
|
+
this.touch(e, null, ts);
|
|
404
|
+
out.push({
|
|
405
|
+
sessionId: peer.sessionId, relation: 'waiting_on', direction: 'out', phase: 'closed',
|
|
406
|
+
peerSessionId: null, peerName: label, evidence: 'background_process',
|
|
407
|
+
detail: null, ts, key: String(pid),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return out;
|
|
412
|
+
}
|
|
413
|
+
/** The session ended: its jobs and children are no longer its concern. */
|
|
414
|
+
forget(sessionId) {
|
|
415
|
+
this.sessions.delete(sessionId);
|
|
416
|
+
const pid = this.hookPids.get(sessionId);
|
|
417
|
+
this.hookPids.delete(sessionId);
|
|
418
|
+
if (pid != null && this.pidToSession.get(pid) === sessionId)
|
|
419
|
+
this.pidToSession.delete(pid);
|
|
420
|
+
}
|
|
421
|
+
/** `null` when the session has never had a relation — the caller omits the
|
|
422
|
+
* wire field; once it has, zeros are emitted explicitly. */
|
|
423
|
+
summary(sessionId) {
|
|
424
|
+
const e = this.sessions.get(sessionId);
|
|
425
|
+
if (!e)
|
|
426
|
+
return null;
|
|
427
|
+
let spawnedActive = 0;
|
|
428
|
+
let spawnedCompleted = 0;
|
|
429
|
+
for (const alive of e.spawned.values()) {
|
|
430
|
+
if (alive)
|
|
431
|
+
spawnedActive += 1;
|
|
432
|
+
else
|
|
433
|
+
spawnedCompleted += 1;
|
|
434
|
+
}
|
|
435
|
+
return {
|
|
436
|
+
backgroundJobs: e.jobs.size,
|
|
437
|
+
spawnedActive: spawnedActive + e.spawnIntents,
|
|
438
|
+
spawnedCompleted,
|
|
439
|
+
messagesIn: e.messagesIn,
|
|
440
|
+
messagesOut: e.messagesOut,
|
|
441
|
+
...(e.lastPeerName ? { lastPeerName: e.lastPeerName } : {}),
|
|
442
|
+
...(e.lastRelationAt ? { lastRelationAt: e.lastRelationAt } : {}),
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
summaries() {
|
|
446
|
+
const out = new Map();
|
|
447
|
+
for (const id of this.sessions.keys()) {
|
|
448
|
+
const s = this.summary(id);
|
|
449
|
+
if (s)
|
|
450
|
+
out.set(id, s);
|
|
451
|
+
}
|
|
452
|
+
return out;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=coordination-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination-evidence.js","sourceRoot":"","sources":["../src/coordination-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-server.d.ts","sourceRoot":"","sources":["../src/daemon-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,UAAU,EAA8B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-server.d.ts","sourceRoot":"","sources":["../src/daemon-server.ts"],"names":[],"mappings":"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"}
|