agenthub-multiagent-mcp 1.15.0 → 1.15.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.
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Session Journal — crash-safe, fire-and-forget event log for real-time
3
+ * session durability without polluting the sealed `.mv2` brain.
4
+ *
5
+ * Location: `~/.claude/brains/journal/<sanitized-agent-id>.jsonl`
6
+ *
7
+ * Design goals:
8
+ * 1. **Zero LLM token cost** — filesystem-only, no network per event.
9
+ * 2. **Zero measurable perf impact** — async `appendFile`, fire-and-forget,
10
+ * never awaited by the hot path. ~50–200μs per write on SSDs.
11
+ * 3. **Bounded power-cut loss** — no explicit fsync (fsync would add 2–10ms
12
+ * per event). Worst-case loss is OS write-buffer depth, typically <5s on
13
+ * Windows NTFS. Accept that; `.mv2` summary at session close is the
14
+ * durable record.
15
+ * 4. **Clean `.mv2`** — journals are summarized into a single `.mv2` frame
16
+ * on session end. `.mv2` BM25 search quality stays high.
17
+ * 5. **Recoverable** — if Claude Code crashes or power dies mid-session, the
18
+ * JSONL survives (up to the OS flush boundary). On next startup we
19
+ * summarize it into `.mv2` and archive.
20
+ *
21
+ * Event schema:
22
+ * { "t": "2026-04-23T...", "e": "tool", "n": "save_decision",
23
+ * "s": "ok", "p": { ...truncated args... } }
24
+ */
25
+ export interface JournalEvent {
26
+ t: string;
27
+ e: "tool" | "session_start" | "session_end" | "error";
28
+ n?: string;
29
+ s?: "ok" | "err";
30
+ p?: unknown;
31
+ }
32
+ export declare function getJournalPath(agentId: string): string;
33
+ /**
34
+ * Is this tool call worth journaling? Keep the allowlist in sync with the
35
+ * set of tools that represent real work worth recovering on crash.
36
+ */
37
+ export declare function shouldJournal(toolName: string): boolean;
38
+ /**
39
+ * Fire-and-forget append. Never throws, never awaits on the hot path.
40
+ * Returns void synchronously; I/O runs on the event-loop tail, serialized
41
+ * per-path to avoid Windows file-sharing violations.
42
+ */
43
+ export declare function logEvent(agentId: string, event: JournalEvent): void;
44
+ /**
45
+ * Test helper: await all pending writes for an agent. Not used in production.
46
+ * Exported so unit tests can assert against fully-flushed state without polling.
47
+ */
48
+ export declare function flushPending(agentId: string): Promise<void>;
49
+ /**
50
+ * Test helper: reset internal state. Not used in production.
51
+ */
52
+ export declare function _resetForTest(): void;
53
+ /** Convenience: log a tool call event. */
54
+ export declare function logTool(agentId: string, toolName: string, args: unknown, ok: boolean): void;
55
+ /** Returns true if a journal file exists for this agent. */
56
+ export declare function hasJournal(agentId: string): Promise<boolean>;
57
+ /** Read all events from the journal. Returns [] if missing/corrupt. */
58
+ export declare function readEvents(agentId: string): Promise<JournalEvent[]>;
59
+ /**
60
+ * Rename the journal to an archived path so a fresh session starts clean.
61
+ * Returns the archive path, or null if no journal existed.
62
+ */
63
+ export declare function archive(agentId: string): Promise<string | null>;
64
+ /**
65
+ * List agents that have an active (non-archived) journal file. Used on
66
+ * startup to recover journals from crashed prior sessions.
67
+ */
68
+ export declare function listAgentsWithJournal(): string[];
69
+ /**
70
+ * Summarize a list of journal events into a single text block suitable for
71
+ * a `.mv2` frame body. Deterministic ordering, compact format.
72
+ */
73
+ export declare function summarizeEvents(events: JournalEvent[]): {
74
+ summary: string;
75
+ content: string;
76
+ };
77
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/brain/journal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA6CH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC;IACtD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IACjB,CAAC,CAAC,EAAE,OAAO,CAAC;CACb;AAUD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAsBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAWD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAkBnE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,0CAA0C;AAC1C,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,OAAO,GACV,IAAI,CASN;AAED,4DAA4D;AAC5D,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED,uEAAuE;AACvE,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBzE;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBrE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAUhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CA+BA"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Session Journal — crash-safe, fire-and-forget event log for real-time
3
+ * session durability without polluting the sealed `.mv2` brain.
4
+ *
5
+ * Location: `~/.claude/brains/journal/<sanitized-agent-id>.jsonl`
6
+ *
7
+ * Design goals:
8
+ * 1. **Zero LLM token cost** — filesystem-only, no network per event.
9
+ * 2. **Zero measurable perf impact** — async `appendFile`, fire-and-forget,
10
+ * never awaited by the hot path. ~50–200μs per write on SSDs.
11
+ * 3. **Bounded power-cut loss** — no explicit fsync (fsync would add 2–10ms
12
+ * per event). Worst-case loss is OS write-buffer depth, typically <5s on
13
+ * Windows NTFS. Accept that; `.mv2` summary at session close is the
14
+ * durable record.
15
+ * 4. **Clean `.mv2`** — journals are summarized into a single `.mv2` frame
16
+ * on session end. `.mv2` BM25 search quality stays high.
17
+ * 5. **Recoverable** — if Claude Code crashes or power dies mid-session, the
18
+ * JSONL survives (up to the OS flush boundary). On next startup we
19
+ * summarize it into `.mv2` and archive.
20
+ *
21
+ * Event schema:
22
+ * { "t": "2026-04-23T...", "e": "tool", "n": "save_decision",
23
+ * "s": "ok", "p": { ...truncated args... } }
24
+ */
25
+ import { appendFile, mkdir, readFile, rename, stat, unlink } from "fs/promises";
26
+ import { existsSync, readdirSync } from "fs";
27
+ import { join } from "path";
28
+ import { homedir } from "os";
29
+ const JOURNAL_DIR_NAME = "journal";
30
+ const MAX_PAYLOAD_CHARS = 500;
31
+ /**
32
+ * Tools worth journaling. Everything else (heartbeats, reads, list/get,
33
+ * searches) is pure noise and is skipped to keep journals tight.
34
+ */
35
+ const JOURNALED_TOOLS = new Set([
36
+ "save_decision",
37
+ "save_note",
38
+ "save_codebase_insight",
39
+ "save_blocker",
40
+ "clear_blocker",
41
+ "agent_start_work",
42
+ "agent_complete_task",
43
+ "agent_report_blocked",
44
+ "agent_report_failure",
45
+ "accept_task",
46
+ "decline_task",
47
+ "claim_ticket_task",
48
+ "create_task",
49
+ "update_ticket",
50
+ "add_comment",
51
+ "submit_plan",
52
+ "submit_code_review",
53
+ "reach_checkpoint",
54
+ "send_message",
55
+ "broadcast",
56
+ "send_to_channel",
57
+ "reply",
58
+ "brain_write_knowledge",
59
+ "openspec_publish",
60
+ "create_epic",
61
+ "create_story",
62
+ "sync_context",
63
+ "session_close_report",
64
+ ]);
65
+ function sanitizeAgentId(agentId) {
66
+ return agentId.replace(/[^a-zA-Z0-9_-]/g, "_");
67
+ }
68
+ function getJournalDir() {
69
+ return join(homedir(), ".claude", "brains", JOURNAL_DIR_NAME);
70
+ }
71
+ export function getJournalPath(agentId) {
72
+ return join(getJournalDir(), `${sanitizeAgentId(agentId)}.jsonl`);
73
+ }
74
+ async function ensureJournalDir() {
75
+ await mkdir(getJournalDir(), { recursive: true });
76
+ }
77
+ /**
78
+ * Truncate an arbitrary JS value to a compact JSON-safe payload.
79
+ * Keeps the journal bounded per event — an accidental 10MB `content` field
80
+ * won't balloon the file.
81
+ */
82
+ function truncatePayload(payload) {
83
+ if (payload === undefined || payload === null)
84
+ return payload;
85
+ try {
86
+ const json = JSON.stringify(payload);
87
+ if (json.length <= MAX_PAYLOAD_CHARS)
88
+ return payload;
89
+ return { _truncated: true, preview: json.slice(0, MAX_PAYLOAD_CHARS) };
90
+ }
91
+ catch {
92
+ return { _truncated: true, preview: String(payload).slice(0, MAX_PAYLOAD_CHARS) };
93
+ }
94
+ }
95
+ /**
96
+ * Is this tool call worth journaling? Keep the allowlist in sync with the
97
+ * set of tools that represent real work worth recovering on crash.
98
+ */
99
+ export function shouldJournal(toolName) {
100
+ return JOURNALED_TOOLS.has(toolName);
101
+ }
102
+ /**
103
+ * Per-path serialized write queue. Multiple concurrent appendFile calls against
104
+ * the same path on Windows can trip EBUSY / ERROR_SHARING_VIOLATION because
105
+ * each call opens its own handle. Chaining via a per-path promise serializes
106
+ * writes without blocking the caller — the caller still returns synchronously.
107
+ */
108
+ const writeQueues = new Map();
109
+ let dirEnsured = false;
110
+ /**
111
+ * Fire-and-forget append. Never throws, never awaits on the hot path.
112
+ * Returns void synchronously; I/O runs on the event-loop tail, serialized
113
+ * per-path to avoid Windows file-sharing violations.
114
+ */
115
+ export function logEvent(agentId, event) {
116
+ if (!agentId)
117
+ return;
118
+ const path = getJournalPath(agentId);
119
+ const line = JSON.stringify(event) + "\n";
120
+ const prev = writeQueues.get(path) ?? Promise.resolve();
121
+ const next = prev
122
+ .then(async () => {
123
+ if (!dirEnsured) {
124
+ await ensureJournalDir();
125
+ dirEnsured = true;
126
+ }
127
+ await appendFile(path, line, { encoding: "utf8" });
128
+ })
129
+ .catch(() => {
130
+ // Best-effort. Journal is a crash-safety net, not a correctness dependency.
131
+ });
132
+ writeQueues.set(path, next);
133
+ }
134
+ /**
135
+ * Test helper: await all pending writes for an agent. Not used in production.
136
+ * Exported so unit tests can assert against fully-flushed state without polling.
137
+ */
138
+ export async function flushPending(agentId) {
139
+ const path = getJournalPath(agentId);
140
+ const pending = writeQueues.get(path);
141
+ if (pending)
142
+ await pending;
143
+ }
144
+ /**
145
+ * Test helper: reset internal state. Not used in production.
146
+ */
147
+ export function _resetForTest() {
148
+ writeQueues.clear();
149
+ dirEnsured = false;
150
+ }
151
+ /** Convenience: log a tool call event. */
152
+ export function logTool(agentId, toolName, args, ok) {
153
+ if (!shouldJournal(toolName))
154
+ return;
155
+ logEvent(agentId, {
156
+ t: new Date().toISOString(),
157
+ e: "tool",
158
+ n: toolName,
159
+ s: ok ? "ok" : "err",
160
+ p: truncatePayload(args),
161
+ });
162
+ }
163
+ /** Returns true if a journal file exists for this agent. */
164
+ export async function hasJournal(agentId) {
165
+ try {
166
+ await stat(getJournalPath(agentId));
167
+ return true;
168
+ }
169
+ catch {
170
+ return false;
171
+ }
172
+ }
173
+ /** Read all events from the journal. Returns [] if missing/corrupt. */
174
+ export async function readEvents(agentId) {
175
+ const path = getJournalPath(agentId);
176
+ let raw;
177
+ try {
178
+ raw = await readFile(path, "utf8");
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ const events = [];
184
+ for (const line of raw.split("\n")) {
185
+ const trimmed = line.trim();
186
+ if (!trimmed)
187
+ continue;
188
+ try {
189
+ events.push(JSON.parse(trimmed));
190
+ }
191
+ catch {
192
+ // Skip malformed lines (e.g. a torn write at the tail from a power cut).
193
+ }
194
+ }
195
+ return events;
196
+ }
197
+ /**
198
+ * Rename the journal to an archived path so a fresh session starts clean.
199
+ * Returns the archive path, or null if no journal existed.
200
+ */
201
+ export async function archive(agentId) {
202
+ const path = getJournalPath(agentId);
203
+ if (!existsSync(path))
204
+ return null;
205
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
206
+ const dest = `${path}.archived.${stamp}`;
207
+ try {
208
+ await rename(path, dest);
209
+ return dest;
210
+ }
211
+ catch {
212
+ // If rename fails (e.g. locked on Windows), fall back to delete.
213
+ try {
214
+ await unlink(path);
215
+ }
216
+ catch {
217
+ // Swallow — worst case, next session re-summarizes the same content (idempotent enough).
218
+ }
219
+ return null;
220
+ }
221
+ }
222
+ /**
223
+ * List agents that have an active (non-archived) journal file. Used on
224
+ * startup to recover journals from crashed prior sessions.
225
+ */
226
+ export function listAgentsWithJournal() {
227
+ const dir = getJournalDir();
228
+ if (!existsSync(dir))
229
+ return [];
230
+ const result = [];
231
+ for (const file of readdirSync(dir)) {
232
+ if (!file.endsWith(".jsonl"))
233
+ continue;
234
+ if (file.includes(".archived."))
235
+ continue;
236
+ result.push(file.slice(0, -".jsonl".length));
237
+ }
238
+ return result;
239
+ }
240
+ /**
241
+ * Summarize a list of journal events into a single text block suitable for
242
+ * a `.mv2` frame body. Deterministic ordering, compact format.
243
+ */
244
+ export function summarizeEvents(events) {
245
+ if (events.length === 0) {
246
+ return { summary: "empty journal", content: "" };
247
+ }
248
+ const counts = new Map();
249
+ for (const ev of events) {
250
+ if (ev.e !== "tool" || !ev.n)
251
+ continue;
252
+ counts.set(ev.n, (counts.get(ev.n) ?? 0) + 1);
253
+ }
254
+ const topTools = [...counts.entries()]
255
+ .sort((a, b) => b[1] - a[1])
256
+ .slice(0, 5)
257
+ .map(([n, c]) => `${n}×${c}`)
258
+ .join(", ");
259
+ const first = events[0];
260
+ const last = events[events.length - 1];
261
+ const summary = `journal: ${events.length} events — ${topTools}`;
262
+ const content = [
263
+ `start=${first.t}`,
264
+ `end=${last.t}`,
265
+ `events=${events.length}`,
266
+ `tools=${topTools}`,
267
+ "",
268
+ ...events.map((ev) => {
269
+ const base = `${ev.t} ${ev.e}${ev.n ? " " + ev.n : ""}${ev.s ? " " + ev.s : ""}`;
270
+ const payload = ev.p !== undefined ? " " + JSON.stringify(ev.p) : "";
271
+ return base + payload;
272
+ }),
273
+ ].join("\n");
274
+ return { summary, content };
275
+ }
276
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/brain/journal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for the crash-safe session journal.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=journal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.test.d.ts","sourceRoot":"","sources":["../../src/brain/journal.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Unit tests for the crash-safe session journal.
3
+ */
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { mkdtempSync, rmSync, writeFileSync, existsSync, mkdirSync, readFileSync, readdirSync } from "fs";
6
+ import { tmpdir } from "os";
7
+ import { join } from "path";
8
+ let tempHome;
9
+ vi.mock("os", async () => {
10
+ const actual = await vi.importActual("os");
11
+ return {
12
+ ...actual,
13
+ homedir: () => process.env.__TEST_HOME__ ?? actual.homedir(),
14
+ };
15
+ });
16
+ async function importJournal() {
17
+ return await import("./journal.js");
18
+ }
19
+ describe("journal", () => {
20
+ beforeEach(async () => {
21
+ tempHome = mkdtempSync(join(tmpdir(), "journal-test-"));
22
+ process.env.__TEST_HOME__ = tempHome;
23
+ vi.resetModules();
24
+ const j = await importJournal();
25
+ j._resetForTest();
26
+ });
27
+ afterEach(() => {
28
+ rmSync(tempHome, { recursive: true, force: true });
29
+ delete process.env.__TEST_HOME__;
30
+ });
31
+ it("shouldJournal accepts allowlisted tools and rejects noise", async () => {
32
+ const j = await importJournal();
33
+ expect(j.shouldJournal("save_decision")).toBe(true);
34
+ expect(j.shouldJournal("agent_complete_task")).toBe(true);
35
+ expect(j.shouldJournal("heartbeat")).toBe(false);
36
+ expect(j.shouldJournal("check_inbox")).toBe(false);
37
+ expect(j.shouldJournal("list_agents")).toBe(false);
38
+ expect(j.shouldJournal("brain_search")).toBe(false);
39
+ });
40
+ it("logTool writes a JSONL line to the journal file", async () => {
41
+ const j = await importJournal();
42
+ j.logTool("agent-x", "save_decision", { what: "use bun", why: "speed" }, true);
43
+ // Fire-and-forget — give the event loop a tick to flush.
44
+ await j.flushPending("agent-x");
45
+ const path = j.getJournalPath("agent-x");
46
+ expect(existsSync(path)).toBe(true);
47
+ const raw = readFileSync(path, "utf8").trim();
48
+ const parsed = JSON.parse(raw);
49
+ expect(parsed.e).toBe("tool");
50
+ expect(parsed.n).toBe("save_decision");
51
+ expect(parsed.s).toBe("ok");
52
+ expect(parsed.p).toEqual({ what: "use bun", why: "speed" });
53
+ expect(typeof parsed.t).toBe("string");
54
+ });
55
+ it("logTool skips non-allowlisted tools silently", async () => {
56
+ const j = await importJournal();
57
+ j.logTool("agent-x", "heartbeat", {}, true);
58
+ await j.flushPending("agent-x");
59
+ expect(await j.hasJournal("agent-x")).toBe(false);
60
+ });
61
+ it("logTool truncates oversized payloads", async () => {
62
+ const j = await importJournal();
63
+ const huge = "x".repeat(5000);
64
+ j.logTool("agent-x", "save_note", { body: huge }, true);
65
+ await j.flushPending("agent-x");
66
+ const events = await j.readEvents("agent-x");
67
+ expect(events).toHaveLength(1);
68
+ const payload = events[0].p;
69
+ expect(payload._truncated).toBe(true);
70
+ expect(payload.preview.length).toBeLessThanOrEqual(500);
71
+ });
72
+ it("readEvents tolerates torn final line from a power-cut scenario", async () => {
73
+ const j = await importJournal();
74
+ const dir = join(tempHome, ".claude", "brains", "journal");
75
+ mkdirSync(dir, { recursive: true });
76
+ const path = j.getJournalPath("agent-x");
77
+ const good = JSON.stringify({ t: "2026-04-23T00:00:00Z", e: "tool", n: "save_decision", s: "ok" });
78
+ // Second line is truncated mid-JSON — simulates a power-cut append.
79
+ writeFileSync(path, good + "\n" + '{"t":"2026-04-23T00:00:01Z","e":"tool","n":"save_no', "utf8");
80
+ const events = await j.readEvents("agent-x");
81
+ expect(events).toHaveLength(1);
82
+ expect(events[0].n).toBe("save_decision");
83
+ });
84
+ it("archive renames the journal so the next session starts clean", async () => {
85
+ const j = await importJournal();
86
+ j.logTool("agent-x", "save_decision", { a: 1 }, true);
87
+ await j.flushPending("agent-x");
88
+ expect(await j.hasJournal("agent-x")).toBe(true);
89
+ const dest = await j.archive("agent-x");
90
+ expect(dest).not.toBeNull();
91
+ expect(existsSync(dest)).toBe(true);
92
+ expect(await j.hasJournal("agent-x")).toBe(false);
93
+ });
94
+ it("listAgentsWithJournal returns active journals and excludes archives", async () => {
95
+ const j = await importJournal();
96
+ j.logTool("agent-a", "save_decision", {}, true);
97
+ j.logTool("agent-b", "save_note", {}, true);
98
+ await j.flushPending("agent-a");
99
+ await j.flushPending("agent-b");
100
+ await j.archive("agent-b");
101
+ const active = j.listAgentsWithJournal();
102
+ expect(active).toContain("agent-a");
103
+ expect(active).not.toContain("agent-b");
104
+ });
105
+ it("summarizeEvents produces counts and deterministic content", async () => {
106
+ const j = await importJournal();
107
+ const events = [
108
+ { t: "2026-04-23T00:00:00Z", e: "tool", n: "save_decision", s: "ok" },
109
+ { t: "2026-04-23T00:00:01Z", e: "tool", n: "save_decision", s: "ok" },
110
+ { t: "2026-04-23T00:00:02Z", e: "tool", n: "save_note", s: "ok" },
111
+ ];
112
+ const { summary, content } = j.summarizeEvents(events);
113
+ expect(summary).toContain("3 events");
114
+ expect(summary).toContain("save_decision×2");
115
+ expect(summary).toContain("save_note×1");
116
+ expect(content).toContain("start=2026-04-23T00:00:00Z");
117
+ expect(content).toContain("end=2026-04-23T00:00:02Z");
118
+ expect(content).toContain("events=3");
119
+ });
120
+ it("summarizeEvents handles empty input without throwing", async () => {
121
+ const j = await importJournal();
122
+ const { summary, content } = j.summarizeEvents([]);
123
+ expect(summary).toBe("empty journal");
124
+ expect(content).toBe("");
125
+ });
126
+ it("serializes 5000 concurrent appends without dropping events (Windows sharing-violation regression)", async () => {
127
+ const j = await importJournal();
128
+ const N = 5000;
129
+ const start = Date.now();
130
+ for (let i = 0; i < N; i++) {
131
+ j.logTool("stress-agent", "save_decision", { i }, true);
132
+ }
133
+ const syncMs = Date.now() - start;
134
+ await j.flushPending("stress-agent");
135
+ const events = await j.readEvents("stress-agent");
136
+ expect(events).toHaveLength(N);
137
+ // Synchronous call cost must stay negligible. 5000 × <0.5ms = <2.5s.
138
+ expect(syncMs).toBeLessThan(2500);
139
+ }, 30_000);
140
+ it("sanitizes agent ids with unsafe characters in the filename", async () => {
141
+ const j = await importJournal();
142
+ j.logTool("agent/../../etc/passwd", "save_decision", {}, true);
143
+ await j.flushPending("agent/../../etc/passwd");
144
+ const dir = join(tempHome, ".claude", "brains", "journal");
145
+ const files = readdirSync(dir);
146
+ expect(files).toHaveLength(1);
147
+ expect(files[0]).not.toContain("/");
148
+ expect(files[0]).not.toContain("..");
149
+ });
150
+ });
151
+ //# sourceMappingURL=journal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.test.js","sourceRoot":"","sources":["../../src/brain/journal.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,IAAI,QAAgB,CAAC;AAErB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;IACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAsB,IAAI,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,EAAE;KAC7D,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,aAAa;IAC1B,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC;QACrC,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/E,yDAAyD;QACzD,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAA+C,CAAC;QAC1E,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnG,oEAAoE;QACpE,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,qDAAqD,EAAE,MAAM,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,UAAU,CAAC,IAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG;YACb,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAe,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAa,EAAE;YACvF,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAe,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,IAAa,EAAE;YACvF,EAAE,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAe,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAa,EAAE;SACpF,CAAC;QACF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mGAAmG,EAAE,KAAK,IAAI,EAAE;QACjH,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAClC,MAAM,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEX,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,CAAC,GAAG,MAAM,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -30,10 +30,37 @@ interface BrainCaptureData {
30
30
  */
31
31
  export declare function captureOnTaskComplete(client: ApiClient, data: BrainCaptureData): Promise<void>;
32
32
  /**
33
- * Capture a brain session summary on disconnect.
34
- * Called from the agent_disconnect handler.
33
+ * Flush the current session to both the org brain (server-side `brain_sessions`
34
+ * row) and the local `.mv2` file. Does NOT delete the agent from the registry.
35
+ *
36
+ * Safe to call from process-exit signal handlers (SIGINT/SIGTERM) — the agent
37
+ * stays registered so the next Claude Code start can reconnect to the same
38
+ * agent_id. Idempotent; calling twice in quick succession produces two session
39
+ * rows but that's acceptable (cheap, no data loss).
40
+ */
41
+ export declare function flushSessionToBrain(client: ApiClient, agentId: string, project?: string): Promise<void>;
42
+ /**
43
+ * Capture a brain session summary on explicit agent_disconnect.
44
+ * Thin wrapper over flushSessionToBrain — the tool handler performs the
45
+ * actual registry delete separately.
35
46
  */
36
47
  export declare function captureOnDisconnect(client: ApiClient, agentId: string, project?: string): Promise<void>;
48
+ /**
49
+ * Recover journals left behind by crashed/power-cut sessions. For each orphaned
50
+ * journal file under `~/.claude/brains/journal/`, summarize the events into a
51
+ * single `.mv2` frame and archive the journal.
52
+ *
53
+ * Called on MCP server startup (before the new agent's session starts), so the
54
+ * prior session's work makes it into the searchable brain even if the previous
55
+ * process never got a chance to run its shutdown handler.
56
+ *
57
+ * Skips `excludeAgentId` (the currently-registering agent) when provided — its
58
+ * own journal will be summarized at session close, not at startup.
59
+ */
60
+ export declare function recoverOrphanedJournals(excludeAgentId?: string): Promise<{
61
+ recovered: number;
62
+ failed: number;
63
+ }>;
37
64
  /**
38
65
  * Extract decisions from the local context store.
39
66
  * Reads the decisions saved via save_decision tool during this session.
@@ -1 +1 @@
1
- {"version":3,"file":"brainCapture.d.ts","sourceRoot":"","sources":["../../src/hooks/brainCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAUtC"}
1
+ {"version":3,"file":"brainCapture.d.ts","sourceRoot":"","sources":["../../src/hooks/brainCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Ff;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAyEf;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BhD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAUtC"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import * as sessionState from "./sessionState.js";
10
10
  import { getBrain } from "../brain/backend.js";
11
+ import * as journal from "../brain/journal.js";
11
12
  /**
12
13
  * Capture a brain session summary on task completion.
13
14
  * Called from the agent_complete_task handler after successful completion.
@@ -101,10 +102,15 @@ export async function captureOnTaskComplete(client, data) {
101
102
  }
102
103
  }
103
104
  /**
104
- * Capture a brain session summary on disconnect.
105
- * Called from the agent_disconnect handler.
105
+ * Flush the current session to both the org brain (server-side `brain_sessions`
106
+ * row) and the local `.mv2` file. Does NOT delete the agent from the registry.
107
+ *
108
+ * Safe to call from process-exit signal handlers (SIGINT/SIGTERM) — the agent
109
+ * stays registered so the next Claude Code start can reconnect to the same
110
+ * agent_id. Idempotent; calling twice in quick succession produces two session
111
+ * rows but that's acceptable (cheap, no data loss).
106
112
  */
107
- export async function captureOnDisconnect(client, agentId, project) {
113
+ export async function flushSessionToBrain(client, agentId, project) {
108
114
  try {
109
115
  const session = sessionState.getSession(agentId);
110
116
  if (!session)
@@ -140,21 +146,97 @@ export async function captureOnDisconnect(client, agentId, project) {
140
146
  files_changed: "[]",
141
147
  summary_text: summaryText,
142
148
  });
143
- // §3.3 — Auto-append to local brain on disconnect
149
+ // §3.3 — Auto-append to local brain on disconnect.
150
+ // Prefer the journal-summarized content if a journal exists (richer than
151
+ // the session-state summary); fall back to the summary text otherwise.
144
152
  try {
153
+ let mvSummary = summaryText;
154
+ let mvContent = summaryText;
155
+ try {
156
+ const events = await journal.readEvents(agentId);
157
+ if (events.length > 0) {
158
+ const sum = journal.summarizeEvents(events);
159
+ mvSummary = `${summaryText} | ${sum.summary}`;
160
+ mvContent = sum.content;
161
+ }
162
+ }
163
+ catch {
164
+ /* journal read is best-effort */
165
+ }
145
166
  await getBrain().appendSession(agentId, {
146
- summary: summaryText,
147
- content: summaryText,
167
+ summary: mvSummary,
168
+ content: mvContent,
148
169
  });
149
170
  }
150
171
  catch {
151
172
  // Local brain is best-effort
152
173
  }
174
+ // Archive the journal so the next session starts with a clean slate.
175
+ try {
176
+ await journal.archive(agentId);
177
+ }
178
+ catch {
179
+ /* best-effort */
180
+ }
153
181
  }
154
182
  catch {
155
183
  // Best-effort
156
- process.stderr.write(`[brain] Failed to capture disconnect session for ${agentId}\n`);
184
+ process.stderr.write(`[brain] Failed to flush session for ${agentId}\n`);
185
+ }
186
+ }
187
+ /**
188
+ * Capture a brain session summary on explicit agent_disconnect.
189
+ * Thin wrapper over flushSessionToBrain — the tool handler performs the
190
+ * actual registry delete separately.
191
+ */
192
+ export async function captureOnDisconnect(client, agentId, project) {
193
+ return flushSessionToBrain(client, agentId, project);
194
+ }
195
+ /**
196
+ * Recover journals left behind by crashed/power-cut sessions. For each orphaned
197
+ * journal file under `~/.claude/brains/journal/`, summarize the events into a
198
+ * single `.mv2` frame and archive the journal.
199
+ *
200
+ * Called on MCP server startup (before the new agent's session starts), so the
201
+ * prior session's work makes it into the searchable brain even if the previous
202
+ * process never got a chance to run its shutdown handler.
203
+ *
204
+ * Skips `excludeAgentId` (the currently-registering agent) when provided — its
205
+ * own journal will be summarized at session close, not at startup.
206
+ */
207
+ export async function recoverOrphanedJournals(excludeAgentId) {
208
+ let recovered = 0;
209
+ let failed = 0;
210
+ let agents;
211
+ try {
212
+ agents = journal.listAgentsWithJournal();
213
+ }
214
+ catch {
215
+ return { recovered: 0, failed: 0 };
216
+ }
217
+ for (const agentId of agents) {
218
+ if (excludeAgentId && agentId === excludeAgentId)
219
+ continue;
220
+ try {
221
+ const events = await journal.readEvents(agentId);
222
+ if (events.length === 0) {
223
+ await journal.archive(agentId);
224
+ continue;
225
+ }
226
+ const { summary, content } = journal.summarizeEvents(events);
227
+ await getBrain().appendSession(agentId, {
228
+ summary: `[recovered] ${summary}`,
229
+ content,
230
+ });
231
+ await journal.archive(agentId);
232
+ recovered++;
233
+ }
234
+ catch {
235
+ failed++;
236
+ // Leave the journal in place so a future startup can retry.
237
+ }
157
238
  }
239
+ return { recovered, failed };
158
240
  }
159
241
  /**
160
242
  * Extract decisions from the local context store.
@@ -1 +1 @@
1
- {"version":3,"file":"brainCapture.js","sourceRoot":"","sources":["../../src/hooks/brainCapture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brainCapture.js","sourceRoot":"","sources":["../../src/hooks/brainCapture.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,6 +7,8 @@ import { registerTools, handleToolCall } from "./tools/index.js";
7
7
  import { HeartbeatManager } from "./heartbeat.js";
8
8
  import { WebSocketClient } from "./websocket.js";
9
9
  import { hookManager } from "./hooks/index.js";
10
+ import * as brainCapture from "./hooks/brainCapture.js";
11
+ import * as journal from "./brain/journal.js";
10
12
  import * as state from "./state.js";
11
13
  // Environment configuration
12
14
  const AGENTHUB_URL = process.env.AGENTHUB_URL || "https://agenthub.contetial.com";
@@ -105,6 +107,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
105
107
  const { name, arguments: args } = request.params;
106
108
  // A2A: Track tool call activity for enriched heartbeats
107
109
  heartbeat.activityTracker.recordToolCall(name, args);
110
+ let toolOk = true;
108
111
  try {
109
112
  const result = await handleToolCall(name, args || {}, client, {
110
113
  getCurrentAgentId: () => currentAgentId,
@@ -171,6 +174,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
171
174
  }
172
175
  // Build response text
173
176
  const resultText = JSON.stringify(result, null, 2) + reminderMessage + pushedMessageText + pollReminderText;
177
+ // Crash-safe journal append (fire-and-forget; zero LLM tokens, ~50–200μs).
178
+ // Only allowlisted tools are journaled — heartbeats/reads are skipped.
179
+ if (currentAgentId)
180
+ journal.logTool(currentAgentId, name, args, toolOk);
174
181
  return {
175
182
  content: [
176
183
  {
@@ -181,7 +188,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
181
188
  };
182
189
  }
183
190
  catch (error) {
191
+ toolOk = false;
184
192
  const message = error instanceof Error ? error.message : String(error);
193
+ if (currentAgentId)
194
+ journal.logTool(currentAgentId, name, args, toolOk);
185
195
  return {
186
196
  content: [
187
197
  {
@@ -193,16 +203,41 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
193
203
  };
194
204
  }
195
205
  });
196
- // Graceful shutdown
197
- process.on("SIGINT", () => {
206
+ // Graceful shutdown — flushes the current session to the local `.mv2` brain
207
+ // and the server `brain_sessions` table before exit. The agent stays registered
208
+ // (unlike `agent_disconnect`, which deletes it), so the next Claude Code start
209
+ // reconnects to the same agent_id.
210
+ let shuttingDown = false;
211
+ async function gracefulShutdown(signal) {
212
+ if (shuttingDown)
213
+ return;
214
+ shuttingDown = true;
198
215
  heartbeat.stop();
199
- wsClient.close();
216
+ if (currentAgentId) {
217
+ const flush = brainCapture
218
+ .flushSessionToBrain(client, currentAgentId)
219
+ .catch(() => {
220
+ /* best-effort — never block shutdown */
221
+ });
222
+ // Hard 2s cap so a slow/offline server can't hang process exit.
223
+ await Promise.race([
224
+ flush,
225
+ new Promise((resolve) => setTimeout(resolve, 2000)),
226
+ ]);
227
+ }
228
+ try {
229
+ wsClient.close();
230
+ }
231
+ catch {
232
+ /* ignore */
233
+ }
200
234
  process.exit(0);
235
+ }
236
+ process.on("SIGINT", () => {
237
+ void gracefulShutdown("SIGINT");
201
238
  });
202
239
  process.on("SIGTERM", () => {
203
- heartbeat.stop();
204
- wsClient.close();
205
- process.exit(0);
240
+ void gracefulShutdown("SIGTERM");
206
241
  });
207
242
  // Start server
208
243
  async function main() {
@@ -225,6 +260,20 @@ async function main() {
225
260
  console.error(`[skills] auto-install crashed: ${e instanceof Error ? e.message : e}`);
226
261
  }
227
262
  }
263
+ // Recover session journals left behind by crashed/power-cut prior sessions.
264
+ // Summarizes each orphaned JSONL into a single .mv2 frame and archives it,
265
+ // so no work is lost even if the previous process never ran SIGTERM.
266
+ // Excludes the current agent — its journal will be summarized at session close.
267
+ try {
268
+ const excludeId = AGENTHUB_AGENT_ID || currentAgentId;
269
+ const res = await brainCapture.recoverOrphanedJournals(excludeId);
270
+ if (res.recovered > 0 || res.failed > 0) {
271
+ console.error(`[brain/journal] recovered ${res.recovered} orphaned journal(s), ${res.failed} failed`);
272
+ }
273
+ }
274
+ catch (e) {
275
+ console.error(`[brain/journal] recovery crashed: ${e instanceof Error ? e.message : e}`);
276
+ }
228
277
  // One-shot JSONL → memvid brain migration for agents not yet converted.
229
278
  // Runs only when backend=memvid (default) and any stale .jsonl still exists.
230
279
  const brainBackend = (process.env.AGENTHUB_BRAIN_BACKEND ?? "memvid").toLowerCase();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agenthub-multiagent-mcp",
3
- "version": "1.15.0",
3
+ "version": "1.15.1",
4
4
  "description": "MCP server for AgentHub multi-agent communication",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",