@claudexor/event-log 5.0.1 → 5.1.0

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,20 @@
1
+ import type { RunEvent } from "@claudexor/schema";
2
+ /** Shared reader for live terminal preparation and selected interrupted-run recovery. */
3
+ export declare function readRunEvents(path: string): {
4
+ events: RunEvent[];
5
+ malformed: number;
6
+ };
7
+ /**
8
+ * Highest `seq` already present in an events.jsonl file (0 for missing/empty).
9
+ * Legacy lines without seq count by position so a continued log never reuses
10
+ * a line number an SSE replayer may have already served as a fallback id.
11
+ *
12
+ * Seqs only grow within a log (its writer is the one owner and continues from
13
+ * the tail when reopened), so the last line carries the highest one. When the
14
+ * last 64 KiB hold that whole line and it carries a numeric seq, the tail
15
+ * answers; a legacy or torn last line (valued by its position), a last line
16
+ * longer than the window, or a read failure takes the full scan.
17
+ */
18
+ export declare function lastSeqInFile(path: string): number;
19
+ export declare function terminalEventInFile(path: string): boolean;
20
+ //# sourceMappingURL=event-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-file.d.ts","sourceRoot":"","sources":["../src/event-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOlD,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAerF;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAsDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBzD"}
@@ -0,0 +1,126 @@
1
+ import { RunEvent as RunEventSchema } from "@claudexor/schema";
2
+ import { closeSync, fstatSync, openSync, readSync } from "node:fs";
3
+ import { readTextSafe } from "@claudexor/util";
4
+ /* Readers of a run's events.jsonl file: no live writer state is consulted. */
5
+ /** Shared reader for live terminal preparation and selected interrupted-run recovery. */
6
+ export function readRunEvents(path) {
7
+ const text = readTextSafe(path);
8
+ if (text === null)
9
+ return { events: [], malformed: 0 };
10
+ const events = [];
11
+ let malformed = 0;
12
+ for (const line of text.split("\n")) {
13
+ const trimmed = line.trim();
14
+ if (!trimmed)
15
+ continue;
16
+ try {
17
+ events.push(RunEventSchema.parse(JSON.parse(trimmed)));
18
+ }
19
+ catch {
20
+ malformed += 1;
21
+ }
22
+ }
23
+ return { events, malformed };
24
+ }
25
+ /** How much of a log's end `lastSeqInFile` reads before it scans the whole file. */
26
+ const LAST_SEQ_TAIL_BYTES = 64 * 1024;
27
+ /**
28
+ * Highest `seq` already present in an events.jsonl file (0 for missing/empty).
29
+ * Legacy lines without seq count by position so a continued log never reuses
30
+ * a line number an SSE replayer may have already served as a fallback id.
31
+ *
32
+ * Seqs only grow within a log (its writer is the one owner and continues from
33
+ * the tail when reopened), so the last line carries the highest one. When the
34
+ * last 64 KiB hold that whole line and it carries a numeric seq, the tail
35
+ * answers; a legacy or torn last line (valued by its position), a last line
36
+ * longer than the window, or a read failure takes the full scan.
37
+ */
38
+ export function lastSeqInFile(path) {
39
+ try {
40
+ return lastSeqFromTail(path) ?? lastSeqByScan(path);
41
+ }
42
+ catch {
43
+ return lastSeqByScan(path);
44
+ }
45
+ }
46
+ /** The last non-blank line's numeric seq, or null when only a scan can tell. */
47
+ function lastSeqFromTail(path) {
48
+ const fd = openSync(path, "r");
49
+ try {
50
+ const size = fstatSync(fd).size;
51
+ const start = Math.max(0, size - LAST_SEQ_TAIL_BYTES);
52
+ const window = Buffer.alloc(size - start);
53
+ let end = readSync(fd, window, 0, window.length, start);
54
+ for (;;) {
55
+ const newline = end > 0 ? window.lastIndexOf(0x0a, end - 1) : -1;
56
+ // Without a newline in the window the line may begin before it.
57
+ if (newline < 0 && start > 0)
58
+ return null;
59
+ const line = window.toString("utf8", newline + 1, end).trim();
60
+ if (line)
61
+ return finiteSeq(line);
62
+ if (newline < 0)
63
+ return 0;
64
+ end = newline;
65
+ }
66
+ }
67
+ finally {
68
+ closeSync(fd);
69
+ }
70
+ }
71
+ function finiteSeq(line) {
72
+ try {
73
+ const seq = JSON.parse(line).seq;
74
+ return typeof seq === "number" && Number.isFinite(seq) ? seq : null;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ function lastSeqByScan(path) {
81
+ const text = readTextSafe(path);
82
+ if (text === null)
83
+ return 0;
84
+ let last = 0;
85
+ let lineNo = 0;
86
+ for (const line of text.split("\n")) {
87
+ const trimmed = line.trim();
88
+ if (!trimmed)
89
+ continue;
90
+ lineNo += 1;
91
+ try {
92
+ const parsed = JSON.parse(trimmed);
93
+ const seq = typeof parsed.seq === "number" && Number.isFinite(parsed.seq) ? parsed.seq : lineNo;
94
+ if (seq > last)
95
+ last = seq;
96
+ }
97
+ catch {
98
+ if (lineNo > last)
99
+ last = lineNo;
100
+ }
101
+ }
102
+ return last;
103
+ }
104
+ export function terminalEventInFile(path) {
105
+ const text = readTextSafe(path);
106
+ if (text === null)
107
+ return false;
108
+ for (const line of text.split("\n")) {
109
+ const trimmed = line.trim();
110
+ if (!trimmed)
111
+ continue;
112
+ try {
113
+ const event = RunEventSchema.parse(JSON.parse(trimmed));
114
+ if (event.type === "run.completed" ||
115
+ event.type === "run.failed" ||
116
+ event.type === "run.blocked") {
117
+ return true;
118
+ }
119
+ }
120
+ catch {
121
+ /* malformed evidence cannot establish a terminal fence */
122
+ }
123
+ }
124
+ return false;
125
+ }
126
+ //# sourceMappingURL=event-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-file.js","sourceRoot":"","sources":["../src/event-file.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { RunEvent, RunEventType, RunTelemetry } from "@claudexor/schema";
2
2
  export { RETAINED_OUTPUT_PATH, retainedOutput, writeRetainedOutput } from "./retained-output.js";
3
+ export { lastSeqInFile, readRunEvents } from "./event-file.js";
3
4
  export type TerminalRunEventType = Extract<RunEventType, "run.completed" | "run.failed" | "run.blocked">;
4
5
  export interface PreparedTerminalEvent {
5
6
  type: TerminalRunEventType;
@@ -27,6 +28,10 @@ export type TerminalPersistenceHook = (event: RunEvent, telemetry: RunTelemetry
27
28
  state: "pending";
28
29
  error: unknown;
29
30
  };
31
+ /** Writes a prepared terminal's durable bytes off the request thread before
32
+ * its synchronous commit, which then adopts them; anything not staged the
33
+ * commit writes itself. */
34
+ export type TerminalStagingHook = (event: RunEvent, telemetry: RunTelemetry | null) => Promise<void>;
30
35
  /**
31
36
  * Append-only JSONL event log for a single run. Terminal output and human
32
37
  * summaries are projections; this file is the canonical event stream.
@@ -62,6 +67,9 @@ export declare class EventLog {
62
67
  private terminalCommitInProgress;
63
68
  private terminalWriterPoisoned;
64
69
  private terminalPersistence?;
70
+ private terminalStaging?;
71
+ /** A prepared terminal's bytes are being staged; ordinary events may append. */
72
+ private terminalStaged;
65
73
  private prepareOutput?;
66
74
  private beforeTerminal?;
67
75
  constructor(path: string, runId: string, taskId: string,
@@ -95,7 +103,6 @@ export declare class EventLog {
95
103
  type: RunEventType;
96
104
  payload: Record<string, unknown>;
97
105
  } | null;
98
- flushDeferredTerminal(): RunEvent | null;
99
106
  /**
100
107
  * Register the engine's once-only terminal preparation hook. It builds the
101
108
  * canonical receipt in memory before the durable authority accepts the
@@ -105,10 +112,35 @@ export declare class EventLog {
105
112
  /** Whether this writer has durably committed its exactly-once terminal. */
106
113
  terminalCommitted(): boolean;
107
114
  setTerminalPersistence(hook: TerminalPersistenceHook): void;
115
+ /** Stage a terminal's durable bytes off the request thread before its commit
116
+ * (`emitTerminal`, `commitDeferredTerminal`). */
117
+ setTerminalStaging(hook: TerminalStagingHook): void;
108
118
  /** Highest seq this writer has appended: its in-memory counter, no file read. */
109
119
  lastSeq(): number;
110
120
  /** Append a typed run event. Validates against the schema before writing. */
111
121
  emit(type: RunEventType, payload?: Record<string, unknown>, publish?: boolean): RunEvent;
122
+ /**
123
+ * The terminal commit with its durable bytes staged first. The terminal is
124
+ * prepared synchronously (canonical type, receipt and outcome frozen), the
125
+ * staging hook writes its bytes off the request thread, and the unchanged
126
+ * synchronous commit adopts them. While staging awaits, another terminal is
127
+ * refused as in progress and an ordinary event (an audit, a live-message
128
+ * receipt) appends before the terminal, which then takes the next seq and
129
+ * keeps the time its verdict was prepared. A staging failure leaves the
130
+ * writes to the commit. Without a hook, or while terminals are held, this is
131
+ * `emit`, committed before this function first yields.
132
+ */
133
+ emitTerminal(type: TerminalRunEventType, payload?: Record<string, unknown>, publish?: boolean): Promise<RunEvent>;
134
+ /** Commit the terminal held by `deferTerminal()` through `emitTerminal`, so
135
+ * its bytes are staged first when a staging hook is set. */
136
+ commitDeferredTerminal(): Promise<RunEvent | null>;
137
+ private assertEmittable;
138
+ private stamp;
139
+ private fileBytes;
140
+ /** Freeze a terminal: its derived output, event and receipt. The fence stays
141
+ * up until the commit; a failed preparation rolls back and rethrows. */
142
+ private prepareTerminal;
143
+ private commitTerminal;
112
144
  private poisonAfterDurableCommit;
113
145
  /** @internal Release a poisoned live owner once journal recovery repairs its tail. */
114
146
  releaseRecoveredTerminalFence(): boolean;
@@ -119,11 +151,6 @@ export declare class EventLog {
119
151
  malformed: number;
120
152
  };
121
153
  }
122
- /** Shared reader for live terminal preparation and selected interrupted-run recovery. */
123
- export declare function readRunEvents(path: string): {
124
- events: RunEvent[];
125
- malformed: number;
126
- };
127
154
  /**
128
155
  * Append an out-of-band event (e.g. a control-api audit record) into a run's
129
156
  * canonical log WITHOUT corrupting the seq space: routes through the live
@@ -143,16 +170,4 @@ export declare function liveRunEventSeq(path: string): number | null;
143
170
  * to that seq); any other log answers from its file through `lastSeqInFile`.
144
171
  */
145
172
  export declare function lastRunEventSeq(path: string): number;
146
- /**
147
- * Highest `seq` already present in an events.jsonl file (0 for missing/empty).
148
- * Legacy lines without seq count by position so a continued log never reuses
149
- * a line number an SSE replayer may have already served as a fallback id.
150
- *
151
- * Seqs only grow within a log (its writer is the one owner and continues from
152
- * the tail when reopened), so the last line carries the highest one. When the
153
- * last 64 KiB hold that whole line and it carries a numeric seq, the tail
154
- * answers; a legacy or torn last line (valued by its position), a last line
155
- * longer than the window, or a read failure takes the full scan.
156
- */
157
- export declare function lastSeqInFile(path: string): number;
158
173
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { RunEvent as RunEventSchema } from "@claudexor/schema";
2
- import { closeSync, existsSync, fstatSync, openSync, readSync, statSync, truncateSync, unlinkSync, } from "node:fs";
3
- import { appendLine, nowIso, readTextSafe } from "@claudexor/util";
2
+ import { existsSync, statSync, truncateSync, unlinkSync } from "node:fs";
3
+ import { appendLine, nowIso } from "@claudexor/util";
4
+ import { lastSeqInFile, readRunEvents, terminalEventInFile } from "./event-file.js";
4
5
  export { RETAINED_OUTPUT_PATH, retainedOutput, writeRetainedOutput } from "./retained-output.js";
6
+ export { lastSeqInFile, readRunEvents } from "./event-file.js";
5
7
  /**
6
8
  * Append-only JSONL event log for a single run. Terminal output and human
7
9
  * summaries are projections; this file is the canonical event stream.
@@ -26,6 +28,9 @@ export class EventLog {
26
28
  terminalCommitInProgress = false;
27
29
  terminalWriterPoisoned = false;
28
30
  terminalPersistence;
31
+ terminalStaging;
32
+ /** A prepared terminal's bytes are being staged; ordinary events may append. */
33
+ terminalStaged = false;
29
34
  prepareOutput;
30
35
  beforeTerminal;
31
36
  constructor(path, runId, taskId,
@@ -80,12 +85,6 @@ export class EventLog {
80
85
  deferredTerminalPending() {
81
86
  return this.deferredTerminal ? { ...this.deferredTerminal } : null;
82
87
  }
83
- flushDeferredTerminal() {
84
- const pending = this.deferredTerminal;
85
- this.deferredTerminal = null;
86
- this.deferTerminalEvents = false;
87
- return pending ? this.emit(pending.type, pending.payload) : null;
88
- }
89
88
  /**
90
89
  * Register the engine's once-only terminal preparation hook. It builds the
91
90
  * canonical receipt in memory before the durable authority accepts the
@@ -102,12 +101,86 @@ export class EventLog {
102
101
  setTerminalPersistence(hook) {
103
102
  this.terminalPersistence = hook;
104
103
  }
104
+ /** Stage a terminal's durable bytes off the request thread before its commit
105
+ * (`emitTerminal`, `commitDeferredTerminal`). */
106
+ setTerminalStaging(hook) {
107
+ this.terminalStaging = hook;
108
+ }
105
109
  /** Highest seq this writer has appended: its in-memory counter, no file read. */
106
110
  lastSeq() {
107
111
  return this.nextSeq - 1;
108
112
  }
109
113
  /** Append a typed run event. Validates against the schema before writing. */
110
114
  emit(type, payload = {}, publish = true) {
115
+ this.assertEmittable();
116
+ const terminalType = type === "run.completed" || type === "run.failed" || type === "run.blocked" ? type : null;
117
+ if (terminalType && this.terminalStaged) {
118
+ throw new Error("run terminal event commit is already in progress");
119
+ }
120
+ if (this.deferTerminalEvents && terminalType) {
121
+ if (this.deferredTerminal)
122
+ throw new Error("run terminal event was emitted more than once");
123
+ this.deferredTerminal = { type, payload };
124
+ return this.stamp(type, payload);
125
+ }
126
+ if (terminalType)
127
+ return this.commitTerminal(this.prepareTerminal(terminalType, payload), publish);
128
+ const event = this.stamp(type, payload);
129
+ appendLine(this.path, JSON.stringify(event));
130
+ this.nextSeq += 1;
131
+ this.onPersist?.(event);
132
+ try {
133
+ if (publish)
134
+ this.onPublish?.(event);
135
+ }
136
+ catch {
137
+ /* best-effort live observer */
138
+ }
139
+ return event;
140
+ }
141
+ /**
142
+ * The terminal commit with its durable bytes staged first. The terminal is
143
+ * prepared synchronously (canonical type, receipt and outcome frozen), the
144
+ * staging hook writes its bytes off the request thread, and the unchanged
145
+ * synchronous commit adopts them. While staging awaits, another terminal is
146
+ * refused as in progress and an ordinary event (an audit, a live-message
147
+ * receipt) appends before the terminal, which then takes the next seq and
148
+ * keeps the time its verdict was prepared. A staging failure leaves the
149
+ * writes to the commit. Without a hook, or while terminals are held, this is
150
+ * `emit`, committed before this function first yields.
151
+ */
152
+ async emitTerminal(type, payload = {}, publish = true) {
153
+ const stage = this.terminalStaging;
154
+ if (!stage || this.deferTerminalEvents)
155
+ return this.emit(type, payload, publish);
156
+ this.assertEmittable();
157
+ if (this.terminalStaged)
158
+ throw new Error("run terminal event commit is already in progress");
159
+ const terminal = this.prepareTerminal(type, payload);
160
+ this.terminalCommitInProgress = false;
161
+ this.terminalStaged = true;
162
+ try {
163
+ await stage(terminal.event, terminal.prepared?.telemetry ?? null);
164
+ }
165
+ catch {
166
+ // Whatever was not staged, the synchronous commit writes itself.
167
+ }
168
+ finally {
169
+ this.terminalStaged = false;
170
+ }
171
+ return this.commitTerminal(terminal, publish);
172
+ }
173
+ /** Commit the terminal held by `deferTerminal()` through `emitTerminal`, so
174
+ * its bytes are staged first when a staging hook is set. */
175
+ async commitDeferredTerminal() {
176
+ const pending = this.deferredTerminal;
177
+ this.deferredTerminal = null;
178
+ this.deferTerminalEvents = false;
179
+ return pending
180
+ ? this.emitTerminal(pending.type, pending.payload)
181
+ : null;
182
+ }
183
+ assertEmittable() {
111
184
  if (this.terminalCommittedFlag) {
112
185
  throw new Error("run terminal event is already committed");
113
186
  }
@@ -117,28 +190,9 @@ export class EventLog {
117
190
  if (this.terminalCommitInProgress) {
118
191
  throw new Error("run terminal event commit is already in progress");
119
192
  }
120
- const terminalType = type === "run.completed" || type === "run.failed" || type === "run.blocked" ? type : null;
121
- const terminal = terminalType !== null;
122
- if (this.deferTerminalEvents && terminal) {
123
- if (this.deferredTerminal)
124
- throw new Error("run terminal event was emitted more than once");
125
- this.deferredTerminal = { type, payload };
126
- return RunEventSchema.parse({
127
- seq: this.nextSeq,
128
- ts: nowIso(),
129
- run_id: this.runId,
130
- task_id: this.taskId,
131
- ...(this.threadId ? { thread_id: this.threadId } : {}),
132
- type,
133
- payload: payload,
134
- });
135
- }
136
- // Derived output may announce its file before the terminal sequence/receipt
137
- // is frozen. Deferred terminals reach this only when they are flushed.
138
- if (terminalType)
139
- this.prepareOutput?.(terminalType, payload);
140
- let prepared = undefined;
141
- let event = RunEventSchema.parse({
193
+ }
194
+ stamp(type, payload) {
195
+ return RunEventSchema.parse({
142
196
  seq: this.nextSeq,
143
197
  ts: nowIso(),
144
198
  run_id: this.runId,
@@ -147,100 +201,101 @@ export class EventLog {
147
201
  type,
148
202
  payload: payload,
149
203
  });
204
+ }
205
+ fileBytes() {
206
+ return existsSync(this.path) ? statSync(this.path).size : null;
207
+ }
208
+ /** Freeze a terminal: its derived output, event and receipt. The fence stays
209
+ * up until the commit; a failed preparation rolls back and rethrows. */
210
+ prepareTerminal(terminalType, payload) {
211
+ // Derived output may announce its file before the terminal sequence/receipt
212
+ // is frozen. Deferred terminals reach this only when they are flushed.
213
+ this.prepareOutput?.(terminalType, payload);
214
+ let prepared = undefined;
215
+ let event = this.stamp(terminalType, payload);
150
216
  // Snapshot before terminal preparation: the hook may materialize sibling
151
217
  // artifacts, but the event file rollback boundary is the pre-hook state.
152
- const previousBytes = existsSync(this.path) ? statSync(this.path).size : null;
153
- if (terminal) {
154
- // Fence every re-entrant emit before the preparation hook, append, and
155
- // durable sink form one terminal commit. The fence is released only by
156
- // a complete rollback or after the terminal fully commits.
157
- this.terminalCommitInProgress = true;
158
- // Validate the exact event before terminal preparation can
159
- // materialize a receipt for it. Keep the hook registered until the event
160
- // itself is durable so an append failure can retry the entire commit.
218
+ const previousBytes = this.fileBytes();
219
+ // Fence every re-entrant emit before the preparation hook, append, and
220
+ // durable sink form one terminal commit. The fence is released only by
221
+ // a complete rollback or after the terminal fully commits.
222
+ this.terminalCommitInProgress = true;
223
+ // Validate the exact event before terminal preparation can
224
+ // materialize a receipt for it. Keep the hook registered until the event
225
+ // itself is durable so an append failure can retry the entire commit.
226
+ try {
227
+ prepared = this.beforeTerminal?.(terminalType, event.payload);
228
+ // Terminal preparation may canonicalize facts after consulting immutable
229
+ // artifacts. Commit the corresponding event type and payload as one
230
+ // validated unit so the receipt, durable event, and live publication
231
+ // cannot disagree.
232
+ event = RunEventSchema.parse(prepared ? { ...event, type: prepared.type, payload: prepared.payload } : event);
233
+ }
234
+ catch (error) {
235
+ this.rollbackTerminal(previousBytes, prepared, error);
236
+ }
237
+ return { event, prepared, previousBytes };
238
+ }
239
+ commitTerminal(terminal, publish) {
240
+ const { prepared } = terminal;
241
+ // Ordinary events appended while staging awaited precede the terminal.
242
+ const moved = terminal.event.seq !== this.nextSeq;
243
+ const event = moved
244
+ ? RunEventSchema.parse({ ...terminal.event, seq: this.nextSeq })
245
+ : terminal.event;
246
+ const previousBytes = moved ? this.fileBytes() : terminal.previousBytes;
247
+ this.terminalCommitInProgress = true;
248
+ if (this.terminalPersistence) {
249
+ let persisted;
161
250
  try {
162
- prepared = this.beforeTerminal?.(terminalType, event.payload);
163
- // Terminal preparation may canonicalize facts after consulting immutable
164
- // artifacts. Commit the corresponding event type and payload as one
165
- // validated unit so the receipt, durable event, and live publication
166
- // cannot disagree.
167
- event = RunEventSchema.parse(prepared
168
- ? {
169
- ...event,
170
- type: prepared.type,
171
- payload: prepared.payload,
172
- }
173
- : event);
251
+ persisted = this.terminalPersistence(event, prepared?.telemetry ?? null);
174
252
  }
175
253
  catch (error) {
176
254
  this.rollbackTerminal(previousBytes, prepared, error);
177
255
  }
256
+ if (persisted.state === "pending")
257
+ this.poisonAfterDurableCommit(persisted.error);
178
258
  }
179
- if (terminal) {
180
- if (this.terminalPersistence) {
181
- let persisted;
182
- try {
183
- persisted = this.terminalPersistence(event, prepared?.telemetry ?? null);
184
- }
185
- catch (error) {
186
- this.rollbackTerminal(previousBytes, prepared, error);
187
- }
188
- if (persisted.state === "pending")
189
- this.poisonAfterDurableCommit(persisted.error);
259
+ else {
260
+ let durableAuthorityCommitted = false;
261
+ try {
262
+ this.onPersist?.(event);
263
+ durableAuthorityCommitted = this.onPersist !== undefined;
190
264
  }
191
- else {
192
- let durableAuthorityCommitted = false;
193
- try {
194
- this.onPersist?.(event);
195
- durableAuthorityCommitted = this.onPersist !== undefined;
196
- }
197
- catch (error) {
198
- this.rollbackTerminal(previousBytes, prepared, error);
199
- }
200
- try {
201
- prepared?.commit?.();
202
- }
203
- catch (error) {
204
- if (durableAuthorityCommitted)
205
- this.poisonAfterDurableCommit(error);
206
- this.rollbackTerminal(previousBytes, prepared, error);
207
- }
208
- try {
209
- appendLine(this.path, JSON.stringify(event));
210
- }
211
- catch (error) {
212
- if (durableAuthorityCommitted)
213
- this.poisonAfterDurableCommit(error);
214
- this.rollbackTerminal(previousBytes, prepared, error);
215
- }
265
+ catch (error) {
266
+ this.rollbackTerminal(previousBytes, prepared, error);
216
267
  }
217
- this.nextSeq += 1;
218
- // The durable journal, canonical prepared receipt, and per-run event are
219
- // now one committed terminal unit. Only now may observers see it.
220
- this.terminalCommittedFlag = true;
221
- this.terminalCommitInProgress = false;
222
- this.beforeTerminal = undefined;
223
- this.dispose();
224
268
  try {
225
- if (publish)
226
- this.onPublish?.(event);
269
+ prepared?.commit?.();
227
270
  }
228
- catch {
229
- /* durable replay remains authoritative */
271
+ catch (error) {
272
+ if (durableAuthorityCommitted)
273
+ this.poisonAfterDurableCommit(error);
274
+ this.rollbackTerminal(previousBytes, prepared, error);
230
275
  }
231
- }
232
- else {
233
- appendLine(this.path, JSON.stringify(event));
234
- this.nextSeq += 1;
235
- this.onPersist?.(event);
236
276
  try {
237
- if (publish)
238
- this.onPublish?.(event);
277
+ appendLine(this.path, JSON.stringify(event));
239
278
  }
240
- catch {
241
- /* best-effort live observer */
279
+ catch (error) {
280
+ if (durableAuthorityCommitted)
281
+ this.poisonAfterDurableCommit(error);
282
+ this.rollbackTerminal(previousBytes, prepared, error);
242
283
  }
243
284
  }
285
+ this.nextSeq += 1;
286
+ // The durable journal, canonical prepared receipt, and per-run event are
287
+ // now one committed terminal unit. Only now may observers see it.
288
+ this.terminalCommittedFlag = true;
289
+ this.terminalCommitInProgress = false;
290
+ this.beforeTerminal = undefined;
291
+ this.dispose();
292
+ try {
293
+ if (publish)
294
+ this.onPublish?.(event);
295
+ }
296
+ catch {
297
+ /* durable replay remains authoritative */
298
+ }
244
299
  return event;
245
300
  }
246
301
  poisonAfterDurableCommit(originalError) {
@@ -303,26 +358,6 @@ export class EventLog {
303
358
  return readRunEvents(this.path);
304
359
  }
305
360
  }
306
- /** Shared reader for live terminal preparation and selected interrupted-run recovery. */
307
- export function readRunEvents(path) {
308
- const text = readTextSafe(path);
309
- if (text === null)
310
- return { events: [], malformed: 0 };
311
- const events = [];
312
- let malformed = 0;
313
- for (const line of text.split("\n")) {
314
- const trimmed = line.trim();
315
- if (!trimmed)
316
- continue;
317
- try {
318
- events.push(RunEventSchema.parse(JSON.parse(trimmed)));
319
- }
320
- catch {
321
- malformed += 1;
322
- }
323
- }
324
- return { events, malformed };
325
- }
326
361
  /**
327
362
  * Live writers by events.jsonl path (one daemon process hosts the
328
363
  * orchestrator AND the control API). While a run is active its EventLog owns
@@ -372,105 +407,4 @@ export function lastRunEventSeq(path) {
372
407
  const live = activeEventLogs.get(path);
373
408
  return live && !live.releaseRecoveredTerminalFence() ? live.lastSeq() : lastSeqInFile(path);
374
409
  }
375
- /** How much of a log's end `lastSeqInFile` reads before it scans the whole file. */
376
- const LAST_SEQ_TAIL_BYTES = 64 * 1024;
377
- /**
378
- * Highest `seq` already present in an events.jsonl file (0 for missing/empty).
379
- * Legacy lines without seq count by position so a continued log never reuses
380
- * a line number an SSE replayer may have already served as a fallback id.
381
- *
382
- * Seqs only grow within a log (its writer is the one owner and continues from
383
- * the tail when reopened), so the last line carries the highest one. When the
384
- * last 64 KiB hold that whole line and it carries a numeric seq, the tail
385
- * answers; a legacy or torn last line (valued by its position), a last line
386
- * longer than the window, or a read failure takes the full scan.
387
- */
388
- export function lastSeqInFile(path) {
389
- try {
390
- return lastSeqFromTail(path) ?? lastSeqByScan(path);
391
- }
392
- catch {
393
- return lastSeqByScan(path);
394
- }
395
- }
396
- /** The last non-blank line's numeric seq, or null when only a scan can tell. */
397
- function lastSeqFromTail(path) {
398
- const fd = openSync(path, "r");
399
- try {
400
- const size = fstatSync(fd).size;
401
- const start = Math.max(0, size - LAST_SEQ_TAIL_BYTES);
402
- const window = Buffer.alloc(size - start);
403
- let end = readSync(fd, window, 0, window.length, start);
404
- for (;;) {
405
- const newline = end > 0 ? window.lastIndexOf(0x0a, end - 1) : -1;
406
- // Without a newline in the window the line may begin before it.
407
- if (newline < 0 && start > 0)
408
- return null;
409
- const line = window.toString("utf8", newline + 1, end).trim();
410
- if (line)
411
- return finiteSeq(line);
412
- if (newline < 0)
413
- return 0;
414
- end = newline;
415
- }
416
- }
417
- finally {
418
- closeSync(fd);
419
- }
420
- }
421
- function finiteSeq(line) {
422
- try {
423
- const seq = JSON.parse(line).seq;
424
- return typeof seq === "number" && Number.isFinite(seq) ? seq : null;
425
- }
426
- catch {
427
- return null;
428
- }
429
- }
430
- function lastSeqByScan(path) {
431
- const text = readTextSafe(path);
432
- if (text === null)
433
- return 0;
434
- let last = 0;
435
- let lineNo = 0;
436
- for (const line of text.split("\n")) {
437
- const trimmed = line.trim();
438
- if (!trimmed)
439
- continue;
440
- lineNo += 1;
441
- try {
442
- const parsed = JSON.parse(trimmed);
443
- const seq = typeof parsed.seq === "number" && Number.isFinite(parsed.seq) ? parsed.seq : lineNo;
444
- if (seq > last)
445
- last = seq;
446
- }
447
- catch {
448
- if (lineNo > last)
449
- last = lineNo;
450
- }
451
- }
452
- return last;
453
- }
454
- function terminalEventInFile(path) {
455
- const text = readTextSafe(path);
456
- if (text === null)
457
- return false;
458
- for (const line of text.split("\n")) {
459
- const trimmed = line.trim();
460
- if (!trimmed)
461
- continue;
462
- try {
463
- const event = RunEventSchema.parse(JSON.parse(trimmed));
464
- if (event.type === "run.completed" ||
465
- event.type === "run.failed" ||
466
- event.type === "run.blocked") {
467
- return true;
468
- }
469
- }
470
- catch {
471
- /* malformed evidence cannot establish a terminal fence */
472
- }
473
- }
474
- return false;
475
- }
476
410
  //# sourceMappingURL=index.js.map
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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"}
@@ -1,14 +1,19 @@
1
- import type { RunEvent } from "@claudexor/schema";
1
+ import { type RunEvent } from "@claudexor/schema";
2
2
  export declare const RETAINED_OUTPUT_PATH = "final/retained-output.md";
3
3
  /** What a caller already passes on, so the projection does not repeat it. */
4
4
  interface CarriedOutput {
5
- /** Carried text (a final answer, a checkpoint): a block wholly within it is omitted. */
5
+ /**
6
+ * @deprecated Accepted so earlier callers still compile, and ignored: carried
7
+ * prose identifies no recorded event, so it never removes a block (#568).
8
+ */
6
9
  text?: string;
7
10
  /** The native try (attempt, process session) whose answer is carried. Its answer is
8
11
  * the LAST typed final AnswerAssembly accepts (a later native turn's final wins),
9
- * so only that final and the blocks it repeats are omitted; its earlier finals and
10
- * other narration stay. Without an accepted final its joined narration is the
11
- * answer and the whole try is omitted. */
12
+ * so only that final's own block is omitted: its keyed fragments (with the run a
13
+ * joined frame names), its exact adjacent delta, flush and complete forms, and the
14
+ * streamed blocks it exactly repeats. Its earlier finals and other narration stay,
15
+ * whatever their text. Without an accepted final its joined narration is the answer
16
+ * and the whole try is omitted. Text never decides what is represented. */
12
17
  represented?: {
13
18
  attempt: string;
14
19
  session: string;
@@ -1 +1 @@
1
- {"version":3,"file":"retained-output.d.ts","sourceRoot":"","sources":["../src/retained-output.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAsB/D,6EAA6E;AAC7E,UAAU,aAAa;IACrB,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;8CAI0C;IAC1C,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,SAAS,SAAI,EACb,cAAc,UAAQ,EACtB,OAAO,GAAE,aAAkB,GAC1B,MAAM,GAAG,IAAI,CA6Hf;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;IAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACjD,cAAc,UAAQ,GACrB,MAAM,GAAG,IAAI,CAYf"}
1
+ {"version":3,"file":"retained-output.d.ts","sourceRoot":"","sources":["../src/retained-output.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGjE,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAqC/D,6EAA6E;AAC7E,UAAU,aAAa;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;+EAM2E;IAC3E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,SAAS,SAAI,EACb,cAAc,UAAQ,EACtB,OAAO,GAAE,aAAkB,GAC1B,MAAM,GAAG,IAAI,CAqHf;AA8HD,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;IAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACjD,cAAc,UAAQ,GACrB,MAAM,GAAG,IAAI,CAYf"}
@@ -1,7 +1,8 @@
1
1
  import { dirname, join } from "node:path";
2
2
  import { renameSync, rmSync } from "node:fs";
3
3
  import { randomUUID } from "node:crypto";
4
- import { writeText } from "@claudexor/util";
4
+ import { HarnessSpeech } from "@claudexor/schema";
5
+ import { StreamEcho, writeText } from "@claudexor/util";
5
6
  export const RETAINED_OUTPUT_PATH = "final/retained-output.md";
6
7
  /** Evidence projection only: never chooses an answer, validates a verdict or starts work. */
7
8
  export function retainedOutput(events, malformed = 0, onlyAdditional = false, carried = {}) {
@@ -31,14 +32,18 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false, ca
31
32
  harness,
32
33
  session,
33
34
  blocks: [],
35
+ keyed: new Map(),
34
36
  openDelta: false,
35
37
  pendingFlush: false,
38
+ echo: new StreamEcho(),
39
+ fragments: [],
36
40
  };
37
41
  sources.set(key, source);
38
42
  const payload = p["payload"];
39
43
  if (p["type"] !== "message" || payload?.["auth_switched"] === true) {
40
44
  source.openDelta = false;
41
45
  source.pendingFlush = false;
46
+ source.echo.interrupt();
42
47
  continue;
43
48
  }
44
49
  const text = p["text"];
@@ -56,27 +61,12 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false, ca
56
61
  source.answer = null;
57
62
  continue;
58
63
  }
59
- const seq = event.seq ?? 0;
60
- const last = source.blocks.at(-1);
61
- if (delta && source.openDelta && last) {
62
- last.text += text;
63
- last.last = seq;
64
- }
65
- else if (!delta &&
66
- last?.text === text &&
67
- (source.openDelta || source.pendingFlush || final || payload?.["buffered"] === true)) {
68
- // Exact adjacent delta/flush/final repetition, never a semantic or substring match.
69
- last.last = seq;
70
- last.delta = false;
71
- last.final ||= final;
72
- }
73
- else {
74
- source.blocks.push({ text, first: seq, last: seq, delta, final });
75
- }
64
+ const block = textBlock(source, event.seq ?? 0, text, delta, final, p["speech"], payload);
65
+ source.current = block;
76
66
  source.openDelta = delta;
77
67
  source.pendingFlush = payload?.["buffered"] === true;
78
68
  if (accepted)
79
- source.answer = text.trim() ? source.blocks.at(-1) : null;
69
+ source.answer = text.trim() ? block : null;
80
70
  }
81
71
  const observed = [...sources.values()]
82
72
  .flatMap((source) => source.blocks)
@@ -88,17 +78,19 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false, ca
88
78
  carried.represented.session === source.session;
89
79
  const answer = represented ? source.answer : undefined;
90
80
  const blocks = source.blocks.filter((block) => {
91
- const text = block.text.trim();
92
- if (!text || carried.text?.includes(text))
93
- return false;
94
81
  if (!represented)
95
82
  return true;
96
83
  // No accepted final: the joined narration is the answer.
97
84
  if (answer === undefined)
98
85
  return false;
99
- return answer === null || (block !== answer && !answer.text.trim().includes(text));
86
+ // Only the carried final's own block and the streamed blocks it exactly
87
+ // repeats are represented: equal or contained text elsewhere (another turn,
88
+ // a short "OK" inside "NOT OK") is its own evidence.
89
+ return block !== answer && !answer?.forms?.includes(block);
100
90
  });
101
- if (!blocks.length)
91
+ // A section needs visible text; a whitespace-only block (a separator fragment
92
+ // between tool calls) stays exact inside one.
93
+ if (!blocks.some((block) => block.text.trim()))
102
94
  return [];
103
95
  return [
104
96
  `## Attempt ${source.attempt} · ${source.harness}\n\nSession: \`${source.session}\`\n\n` +
@@ -125,6 +117,116 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false, ca
125
117
  sections.join("\n\n---\n\n") +
126
118
  "\n");
127
119
  }
120
+ /**
121
+ * The block one text event belongs to. A keyed event (`speech`, typed only) is
122
+ * its key's block wherever that block began: fragments extend it verbatim until
123
+ * the harness's complete text replaces them, and another key is another block
124
+ * even for equal words. An unkeyed event has no identity of its own: it
125
+ * continues only the block the last text event reached, and only in the shapes
126
+ * one speech takes on the wire (an open unkeyed delta run, or an exact
127
+ * repetition of text just streamed or flushed, or of that block by a typed
128
+ * final), or completes the keyed run its adapter names (`joinedRun`). A block
129
+ * that holds a typed final is closed, since what follows is another native
130
+ * turn. An unkeyed complete message that exactly repeats this stream's unkeyed
131
+ * fragments across tool calls (`StreamEcho`: an Antigravity result repeating
132
+ * its whole turn, an ACP final the text after its last tool) adds no block: its
133
+ * text stays in the streamed blocks it names. Anything else is a separate
134
+ * segment.
135
+ */
136
+ function textBlock(source, seq, text, delta, final, rawSpeech, payload) {
137
+ const speech = HarnessSpeech.safeParse(rawSpeech).data;
138
+ if (speech && speech.op !== "abandoned") {
139
+ // Keyed text is linked by its key, never by the unkeyed echo's words.
140
+ source.echo.reset();
141
+ source.fragments = [];
142
+ const known = source.keyed.get(speech.key);
143
+ if (!known) {
144
+ const block = {
145
+ text,
146
+ first: seq,
147
+ last: seq,
148
+ delta: speech.op === "fragment",
149
+ final,
150
+ key: speech.key,
151
+ complete: speech.op === "complete",
152
+ };
153
+ source.blocks.push(block);
154
+ source.keyed.set(speech.key, block);
155
+ return block;
156
+ }
157
+ if (speech.op === "complete") {
158
+ known.text = text;
159
+ known.complete = true;
160
+ known.delta = false;
161
+ }
162
+ else if (!known.complete)
163
+ known.text += text;
164
+ known.last = seq;
165
+ known.final ||= final;
166
+ return known;
167
+ }
168
+ const current = source.current;
169
+ if (delta) {
170
+ const continues = source.echo.fragment(text);
171
+ let block = current;
172
+ if (continues && block) {
173
+ block.text += text;
174
+ block.last = seq;
175
+ }
176
+ else {
177
+ block = { text, first: seq, last: seq, delta, final };
178
+ source.blocks.push(block);
179
+ }
180
+ source.fragments.push(block);
181
+ return block;
182
+ }
183
+ const buffered = payload?.["buffered"] === true;
184
+ const repeated = source.echo.complete(text, { buffered, final });
185
+ const repeats = typeof repeated === "number" ? [...new Set(source.fragments.slice(repeated))] : [];
186
+ source.fragments = [];
187
+ const joined = joinedRun(source, seq, text, final, payload);
188
+ if (joined)
189
+ return joined;
190
+ if (current &&
191
+ !current.final &&
192
+ current.text === text &&
193
+ (source.openDelta || source.pendingFlush || final || buffered)) {
194
+ // Exact adjacent delta/flush/final repetition, never a semantic or substring match.
195
+ current.last = seq;
196
+ current.delta = false;
197
+ current.final ||= final;
198
+ return current;
199
+ }
200
+ if (repeated !== null)
201
+ return { text, first: seq, last: seq, delta, final, forms: repeats };
202
+ const block = { text, first: seq, last: seq, delta, final };
203
+ source.blocks.push(block);
204
+ return block;
205
+ }
206
+ /**
207
+ * A frame whose adapter names the keyed run it joins (`payload.joined_speech_keys`,
208
+ * Claude's `text_runs_joined` frame) is that run's complete form only when the
209
+ * named blocks are this source's last blocks in that order, none complete or
210
+ * final, and its text is exactly theirs joined. They become one block; on any
211
+ * other shape every block stays as recorded and the frame is its own segment.
212
+ */
213
+ function joinedRun(source, seq, text, final, payload) {
214
+ const keys = payload?.["joined_speech_keys"];
215
+ if (!Array.isArray(keys) || keys.length === 0)
216
+ return undefined;
217
+ const run = source.blocks.slice(-keys.length);
218
+ if (run.length !== keys.length ||
219
+ run.some((block, i) => block.key !== keys[i] || block.complete || block.final) ||
220
+ run.map((block) => block.text).join("") !== text) {
221
+ return undefined;
222
+ }
223
+ const [block, ...rest] = run;
224
+ source.blocks.length -= rest.length;
225
+ for (const other of rest)
226
+ source.keyed.set(other.key, block);
227
+ Object.assign(block, { text, last: seq, delta: false, complete: true, final });
228
+ return block;
229
+ }
128
230
  /** Publish a derived artifact atomically; a failed write never announces a partial file. */
129
231
  export function writeRetainedOutput(runDir, source, onlyAdditional = false) {
130
232
  const text = retainedOutput(source.events, source.malformed, onlyAdditional);
@@ -1 +1 @@
1
- {"version":3,"file":"retained-output.js","sourceRoot":"","sources":["../src/retained-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retained-output.js","sourceRoot":"","sources":["../src/retained-output.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudexor/event-log",
3
- "version": "5.0.1",
3
+ "version": "5.1.0",
4
4
  "license": "MIT",
5
5
  "description": "Append-only JSONL run-event log (a projection-friendly evidence ledger).",
6
6
  "type": "module",
@@ -16,8 +16,8 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@claudexor/schema": "5.0.1",
20
- "@claudexor/util": "5.0.1"
19
+ "@claudexor/schema": "5.1.0",
20
+ "@claudexor/util": "5.1.0"
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",