@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
|
@@ -15,9 +15,12 @@
|
|
|
15
15
|
* build, Task 2's `response_kind` heuristic (empty text + tool_calls > 0 →
|
|
16
16
|
* `tool_only`) is the fallback.
|
|
17
17
|
*/
|
|
18
|
-
import { readFileSync, openSync, readSync, fstatSync, closeSync } from 'fs';
|
|
18
|
+
import { readFileSync, openSync, readSync, fstatSync, closeSync, existsSync, readdirSync } from 'fs';
|
|
19
|
+
import { homedir } from 'os';
|
|
20
|
+
import { join } from 'path';
|
|
19
21
|
import { debug } from '../logger.js';
|
|
20
22
|
import { isClaudeInterruptRecord } from '../claude-interrupt-marker.js';
|
|
23
|
+
import { lastAssistantTextFromTranscript } from '../session-transcript-timeline.js';
|
|
21
24
|
/**
|
|
22
25
|
* Parse the last user→assistant turn from a Claude Code transcript JSONL.
|
|
23
26
|
*
|
|
@@ -116,7 +119,10 @@ export function readModelFromTranscript(transcriptPath) {
|
|
|
116
119
|
try {
|
|
117
120
|
const rec = JSON.parse(line);
|
|
118
121
|
const model = rec?.message?.model;
|
|
119
|
-
|
|
122
|
+
// `<synthetic>` is what Claude Code stamps on the client-authored abort
|
|
123
|
+
// notice ("You've hit your session limit…"); it names no model, and
|
|
124
|
+
// 18 of one week's runs carried it as their identity.
|
|
125
|
+
if (rec?.message?.role === 'assistant' && typeof model === 'string' && model && !model.startsWith('<')) {
|
|
120
126
|
return model;
|
|
121
127
|
}
|
|
122
128
|
}
|
|
@@ -310,4 +316,74 @@ function extractAssistantBlocks(content) {
|
|
|
310
316
|
}
|
|
311
317
|
return { text: parts.join('\n'), toolUses };
|
|
312
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Where Claude Code keeps a session's transcript, found by id rather than
|
|
321
|
+
* carried on a hook. Claude names the project directory after the working
|
|
322
|
+
* directory with every non-alphanumeric character replaced by `-`
|
|
323
|
+
* (`/Users/x/github/foo` → `-Users-x-github-foo`); that guess is tried first
|
|
324
|
+
* and a scan of every project directory covers a session whose cwd is not
|
|
325
|
+
* recorded (or was recorded differently). Null when no file exists — never
|
|
326
|
+
* a guessed path, since the callers read it as evidence.
|
|
327
|
+
*/
|
|
328
|
+
export function locateClaudeTranscript(sessionId, projectPath, projectsRoot = join(homedir(), '.claude', 'projects')) {
|
|
329
|
+
if (!/^[0-9a-f-]{36}$/i.test(sessionId))
|
|
330
|
+
return null;
|
|
331
|
+
const file = `${sessionId}.jsonl`;
|
|
332
|
+
if (projectPath) {
|
|
333
|
+
const guess = join(projectsRoot, projectPath.replace(/[^a-zA-Z0-9]/g, '-'), file);
|
|
334
|
+
if (existsSync(guess))
|
|
335
|
+
return guess;
|
|
336
|
+
}
|
|
337
|
+
let dirs;
|
|
338
|
+
try {
|
|
339
|
+
dirs = readdirSync(projectsRoot);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
for (const dir of dirs) {
|
|
345
|
+
const candidate = join(projectsRoot, dir, file);
|
|
346
|
+
if (existsSync(candidate))
|
|
347
|
+
return candidate;
|
|
348
|
+
}
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Did the Claude turn that opened at or after `sinceMs` END, per the transcript?
|
|
353
|
+
*
|
|
354
|
+
* Answers the question `rehydrateOpenRuns` has for a turn it found open in the
|
|
355
|
+
* store: the daemon that would have taken its Stop is gone, and the transcript
|
|
356
|
+
* is the only record left of whether that Stop was ever owed. Null when the
|
|
357
|
+
* transcript is missing, unreadable, or its tail is still mid-turn (an
|
|
358
|
+
* assistant `tool_use` or a `user` tool_result) — the session may be alive and
|
|
359
|
+
* the turn genuinely open, so nothing is claimed. Measured before it was
|
|
360
|
+
* written (2026-09-03): two worker sessions whose final `end_turn` landed 75
|
|
361
|
+
* minutes before a restart were adopted with their turn open and stayed open
|
|
362
|
+
* for 17 hours, because the adopted run counted as live to the reaper and no
|
|
363
|
+
* hook was ever coming.
|
|
364
|
+
*/
|
|
365
|
+
export function claudeTurnCompletionSince(sessionId, projectPath, sinceMs, projectsRoot) {
|
|
366
|
+
const path = locateClaudeTranscript(sessionId, projectPath, projectsRoot);
|
|
367
|
+
if (!path)
|
|
368
|
+
return null;
|
|
369
|
+
const probe = readTurnEndProbe(path);
|
|
370
|
+
if (!probe || probe.timestampMs == null || probe.timestampMs < sinceMs)
|
|
371
|
+
return null;
|
|
372
|
+
if (probe.interrupted)
|
|
373
|
+
return { endedAt: probe.timestampMs, source: 'interrupted', text: '' };
|
|
374
|
+
if (probe.role !== 'assistant')
|
|
375
|
+
return null;
|
|
376
|
+
if (probe.stopReason === CLIENT_ABORT_STOP_REASON)
|
|
377
|
+
return { endedAt: probe.timestampMs, source: 'aborted', text: '' };
|
|
378
|
+
if (probe.stopReason !== 'end_turn')
|
|
379
|
+
return null;
|
|
380
|
+
let text = '';
|
|
381
|
+
try {
|
|
382
|
+
text = lastAssistantTextFromTranscript(path);
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
text = '';
|
|
386
|
+
}
|
|
387
|
+
return { endedAt: probe.timestampMs, source: 'synthetic_stop', text };
|
|
388
|
+
}
|
|
313
389
|
//# sourceMappingURL=claude-transcript-reader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-transcript-reader.js","sourceRoot":"","sources":["../../src/apme/claude-transcript-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-transcript-reader.js","sourceRoot":"","sources":["../../src/apme/claude-transcript-reader.ts"],"names":[],"mappings":"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"}
|
package/dist/apme/collector.d.ts
CHANGED
|
@@ -16,7 +16,9 @@ import type { SessionEntry } from '../session-registry.js';
|
|
|
16
16
|
import type { ApmeStore } from './store.js';
|
|
17
17
|
import type { AgentType, TelemetrySpan, ApmeSampleEventRow, TurnEndSource } from '@agentdeck/shared';
|
|
18
18
|
import type { ApmeHwSampler } from './hw-sampler.js';
|
|
19
|
-
import { type OpenTurnEvidence } from './claude-transcript-reader.js';
|
|
19
|
+
import { type OpenTurnEvidence, type ClaudeTurnCompletion } from './claude-transcript-reader.js';
|
|
20
|
+
import { type CodexTurnCompletion } from '../codex-rollout-response.js';
|
|
21
|
+
import type { SubagentSampleEvent } from '../subagent-timeline.js';
|
|
20
22
|
export interface OpenRunInput {
|
|
21
23
|
sessionId: string;
|
|
22
24
|
agentType: AgentType;
|
|
@@ -69,6 +71,10 @@ export type OnTaskOpened = (args: {
|
|
|
69
71
|
projectName: string | null;
|
|
70
72
|
taskIndex: number;
|
|
71
73
|
startedAt: number;
|
|
74
|
+
/** Display title derived from the task's first user prompt
|
|
75
|
+
* (`deriveTaskTitle` SSOT), or null when the prompt yields nothing
|
|
76
|
+
* meaningful — consumers keep their `Task N` fallback on null. */
|
|
77
|
+
title: string | null;
|
|
72
78
|
}) => void;
|
|
73
79
|
/** Callback fired when the agent declares its todos done mid-task (the
|
|
74
80
|
* TodoWrite-all-completed soft hint). Non-segmenting — the task stays open —
|
|
@@ -92,6 +98,16 @@ export declare class ApmeCollector {
|
|
|
92
98
|
* client abort, or never having run at all. Injectable for tests; the
|
|
93
99
|
* default reads the Claude transcript tail once for all three. */
|
|
94
100
|
private readonly openTurnProbe;
|
|
101
|
+
/** Injectable for tests only — production call sites take the default. */
|
|
102
|
+
private readonly idleGapMs;
|
|
103
|
+
/** Whether a Codex turn open at startup completed per its rollout — see
|
|
104
|
+
* `rehydrateOpenRuns`. Injectable for tests; the default reads the
|
|
105
|
+
* rollout tail under `~/.codex/sessions`. */
|
|
106
|
+
private readonly codexCompletionProbe;
|
|
107
|
+
/** Whether a Claude turn open at startup ended per its transcript — the
|
|
108
|
+
* Claude half of the same question. Injectable for tests; the default
|
|
109
|
+
* locates the transcript under `~/.claude/projects` by session id. */
|
|
110
|
+
private readonly claudeCompletionProbe;
|
|
95
111
|
private readonly sessionToRun;
|
|
96
112
|
private readonly sessionToAgentType;
|
|
97
113
|
private readonly sessionToTurn;
|
|
@@ -121,11 +137,65 @@ export declare class ApmeCollector {
|
|
|
121
137
|
/** Last milestone key (`taskId:turnIndex`) per session — a turn can carry
|
|
122
138
|
* several all-completed TodoWrite calls; surface only the first. */
|
|
123
139
|
private readonly sessionToLastMilestone;
|
|
140
|
+
/** Per-session idle-gap timers — armed in `closeTurn`, cleared on the next
|
|
141
|
+
* turn open / task close. See `AGENT_IDLE_GAP_MS` for the measurement the
|
|
142
|
+
* constant rests on. */
|
|
143
|
+
private readonly sessionToIdleGapTimer;
|
|
144
|
+
/** Sessions whose run was re-adopted from the store at startup — lets a
|
|
145
|
+
* newer open run for the same session replace the older one during the
|
|
146
|
+
* same rehydrate pass without touching runs opened live since. */
|
|
147
|
+
private readonly rehydratedSessions;
|
|
124
148
|
constructor(store: ApmeStore, hwSampler?: ApmeHwSampler | undefined,
|
|
125
149
|
/** What the transcript proves about a turn open since a timestamp — cancel,
|
|
126
150
|
* client abort, or never having run at all. Injectable for tests; the
|
|
127
151
|
* default reads the Claude transcript tail once for all three. */
|
|
128
|
-
openTurnProbe?: (transcriptPath: string, sinceMs: number) => OpenTurnEvidence | null
|
|
152
|
+
openTurnProbe?: (transcriptPath: string, sinceMs: number) => OpenTurnEvidence | null,
|
|
153
|
+
/** Injectable for tests only — production call sites take the default. */
|
|
154
|
+
idleGapMs?: number,
|
|
155
|
+
/** Whether a Codex turn open at startup completed per its rollout — see
|
|
156
|
+
* `rehydrateOpenRuns`. Injectable for tests; the default reads the
|
|
157
|
+
* rollout tail under `~/.codex/sessions`. */
|
|
158
|
+
codexCompletionProbe?: (sessionId: string, sinceMs: number) => CodexTurnCompletion | null,
|
|
159
|
+
/** Whether a Claude turn open at startup ended per its transcript — the
|
|
160
|
+
* Claude half of the same question. Injectable for tests; the default
|
|
161
|
+
* locates the transcript under `~/.claude/projects` by session id. */
|
|
162
|
+
claudeCompletionProbe?: (sessionId: string, projectPath: string | null, sinceMs: number) => ClaudeTurnCompletion | null);
|
|
163
|
+
/** Re-adopt every run the store still holds open, so the daemon that just
|
|
164
|
+
* started continues them instead of stranding them.
|
|
165
|
+
*
|
|
166
|
+
* The collector's whole state is in-memory maps, and a daemon restart drops
|
|
167
|
+
* all of it while the sessions it was observing carry on. Before this, the
|
|
168
|
+
* next hook from such a session found no run, opened a fresh one, and the
|
|
169
|
+
* old one sat open until the abandoned-run reaper closed it two hours
|
|
170
|
+
* later — its task `orphaned`, its open turn's tool counters at zero, and
|
|
171
|
+
* the Stop that did arrive discarded for want of a turn to close. Measured
|
|
172
|
+
* over 5.5 days (2026-09-03) on a dev machine that restarted the daemon 40
|
|
173
|
+
* times: 60 of the 68 tasks the reaper closed straddled a restart, and the
|
|
174
|
+
* idle-gap boundary that had just been added could not fire for any of
|
|
175
|
+
* them, since its timer lived in the process that died.
|
|
176
|
+
*
|
|
177
|
+
* Per open run, in store order: the session→run edge is restored; the open
|
|
178
|
+
* task (if any) is rebuilt with its real turn span and first prompt; an
|
|
179
|
+
* open turn is rebuilt with its counters recovered from the trajectory it
|
|
180
|
+
* wrote; and when there is no open turn but a closed one, the idle-gap
|
|
181
|
+
* timer is armed for whatever remains of the gap — zero if it already
|
|
182
|
+
* elapsed during the downtime, which closes the task on the next tick as
|
|
183
|
+
* the `idle_gap` it always was. A Codex turn still open is checked once
|
|
184
|
+
* against its rollout: a `task_complete` newer than the turn is the Stop
|
|
185
|
+
* this daemon never received, and closes it as `synthetic_stop` with the
|
|
186
|
+
* reply the rollout recorded.
|
|
187
|
+
*
|
|
188
|
+
* Two runs open under one session id (an older defect's residue) resolve
|
|
189
|
+
* to the newest; the rest stay for the reaper. Must run before the first
|
|
190
|
+
* hook is served, and only in the process that owns the hook port — a
|
|
191
|
+
* session bridge adopting the daemon's runs would steal them. */
|
|
192
|
+
rehydrateOpenRuns(now?: number): {
|
|
193
|
+
runs: number;
|
|
194
|
+
tasks: number;
|
|
195
|
+
turns: number;
|
|
196
|
+
armed: number;
|
|
197
|
+
recovered: number;
|
|
198
|
+
};
|
|
129
199
|
/** Start a new run and return its id. Safe to call if store disabled (returns ''). */
|
|
130
200
|
openRun(input: OpenRunInput): string;
|
|
131
201
|
/** Record a hook event as a step + manage turn lifecycle.
|
|
@@ -191,7 +261,7 @@ export declare class ApmeCollector {
|
|
|
191
261
|
* model turn and owes exactly one Stop, which closes the LAST of them.
|
|
192
262
|
* A displaced row with no assistant record behind it at all is that
|
|
193
263
|
* artifact, not a lost hook. */
|
|
194
|
-
private
|
|
264
|
+
private resolveDisplacedTurn;
|
|
195
265
|
/** Close the current turn for a session (called on Stop, new prompt, or
|
|
196
266
|
* session end). `source` records which of those it was — see
|
|
197
267
|
* `TurnEndSource`. */
|
|
@@ -223,6 +293,11 @@ export declare class ApmeCollector {
|
|
|
223
293
|
* when a task proves itself "real" (second turn, or TodoWrite plan).
|
|
224
294
|
* Mirrors ApmeCollector.swift `emitDeferredTaskStartIfNeeded`. */
|
|
225
295
|
private emitDeferredTaskStartIfNeeded;
|
|
296
|
+
/** Arm the per-session idle-gap timer. Called from `closeTurn` — the turn
|
|
297
|
+
* just finished, so the gap being measured is genuine idle time, never the
|
|
298
|
+
* agent's own working time. Re-arming replaces any previous timer. */
|
|
299
|
+
private armIdleGapTimer;
|
|
300
|
+
private clearIdleGapTimer;
|
|
226
301
|
/** Public wrapper for closeTask. Used by the manual-boundary CLI /
|
|
227
302
|
* HTTP route + the macOS detail-pane button — lets the user declare
|
|
228
303
|
* "this task is done" without `/clear` (which would also split the
|
|
@@ -244,6 +319,12 @@ export declare class ApmeCollector {
|
|
|
244
319
|
* whose user simply stepped away mid-turn, and the row would then be closed
|
|
245
320
|
* underneath the collector that is still writing to it. */
|
|
246
321
|
isLiveRun(runId: string): boolean;
|
|
322
|
+
/** Drop every in-memory edge to `runId` after the reaper closed it in the
|
|
323
|
+
* store, so a hook that arrives later opens a fresh run instead of writing
|
|
324
|
+
* turns into a row that is already finalised. */
|
|
325
|
+
releaseRun(runId: string): void;
|
|
326
|
+
/** The session spoke: an adopted run is now owned for real. */
|
|
327
|
+
private heard;
|
|
247
328
|
/** Agent type established for a session at `openRun` (survives closeRun so a
|
|
248
329
|
* late-attributed timeline row still resolves its brand). This is the single
|
|
249
330
|
* authoritative agentType source the timeline attributor backfills from, so
|
|
@@ -263,6 +344,48 @@ export declare class ApmeCollector {
|
|
|
263
344
|
* only when a row was actually inserted (not a dup), so the timeline
|
|
264
345
|
* projection never double-emits. */
|
|
265
346
|
private appendSampleEvent;
|
|
347
|
+
/** Persist a child-agent lifecycle event on its parent task. Child hooks are
|
|
348
|
+
* deliberately consumed before ordinary APME ingestion so they cannot
|
|
349
|
+
* mutate parent state or controls; SubagentTimelineTracker explicitly
|
|
350
|
+
* hands just this observation-safe evidence back to the collector.
|
|
351
|
+
*
|
|
352
|
+
* This is the producer for SampleModelConfig.subagents. The richer event
|
|
353
|
+
* also powers the judge rollup and Graph node without promoting a child to
|
|
354
|
+
* a separately steerable session. Returns false when no parent task is
|
|
355
|
+
* active, which is honest: there is no task edge to guess. */
|
|
356
|
+
noteSubagentLifecycle(sessionId: string, event: SubagentSampleEvent): boolean;
|
|
357
|
+
/** Persist a free-form annotation on the session's active task (a task-list
|
|
358
|
+
* item checked off, a team event without a child identity). Returns false
|
|
359
|
+
* when no task is open — there is nothing honest to attach it to. */
|
|
360
|
+
noteInfo(sessionId: string, event: {
|
|
361
|
+
label: string;
|
|
362
|
+
detail?: string | null;
|
|
363
|
+
ts?: number;
|
|
364
|
+
}): boolean;
|
|
365
|
+
/** Persist a cross-session coordination observation (`RelationEvent`) on
|
|
366
|
+
* the session's active task. Like child lifecycle, this is evidence for the
|
|
367
|
+
* work board and the collaboration lens, never a steerable session or a
|
|
368
|
+
* parent link guessed from project membership: the producer
|
|
369
|
+
* (`CoordinationTracker`) only calls this with what a process table, a
|
|
370
|
+
* SendMessage tool call or a cross-session envelope actually said. */
|
|
371
|
+
noteRelation(sessionId: string, event: {
|
|
372
|
+
relation: 'spawned' | 'messaged' | 'waiting_on';
|
|
373
|
+
direction: 'in' | 'out';
|
|
374
|
+
phase: 'open' | 'closed';
|
|
375
|
+
peerSessionId?: string | null;
|
|
376
|
+
peerName?: string | null;
|
|
377
|
+
evidence: string;
|
|
378
|
+
detail?: string | null;
|
|
379
|
+
ts?: number;
|
|
380
|
+
/** Identity the dedup key is built on — the peer pid / session / message
|
|
381
|
+
* hash — so a re-scan does not append the same open relation twice. */
|
|
382
|
+
key: string;
|
|
383
|
+
}): boolean;
|
|
384
|
+
/** Merge instead of replacing the sample identity header. Model updates can
|
|
385
|
+
* arrive after subagent starts (and vice versa); overwriting model_config
|
|
386
|
+
* here was why a future subagents producer would have appeared to work and
|
|
387
|
+
* then silently vanished on the next usage/model hook. */
|
|
388
|
+
private mergedTaskModelConfig;
|
|
266
389
|
/** Reverse-lookup sessionId for a runId (best-effort; only the live map). */
|
|
267
390
|
private runToSessionId;
|
|
268
391
|
/** Store Claude's response text on the current turn.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/apme/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/apme/collector.ts"],"names":[],"mappings":"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"}
|