@claudexor/event-log 4.8.2 → 5.0.2

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, redactSecrets } 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,130 +190,112 @@ 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: redactEventValue(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,
145
199
  task_id: this.taskId,
146
200
  ...(this.threadId ? { thread_id: this.threadId } : {}),
147
201
  type,
148
- payload: redactEventValue(payload),
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 redacted 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: redactEventValue(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
@@ -350,7 +385,7 @@ export function appendRunEvent(path, runId, taskId, type, payload = {}) {
350
385
  run_id: runId,
351
386
  task_id: taskId,
352
387
  type,
353
- payload: redactEventValue(payload),
388
+ payload: payload,
354
389
  });
355
390
  appendLine(path, JSON.stringify(event));
356
391
  return event;
@@ -372,118 +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
- function redactEventValue(value) {
477
- if (typeof value === "string")
478
- return redactSecrets(value);
479
- if (Array.isArray(value))
480
- return value.map(redactEventValue);
481
- if (!value || typeof value !== "object")
482
- return value;
483
- const out = {};
484
- for (const [key, child] of Object.entries(value)) {
485
- out[key] = redactEventValue(child);
486
- }
487
- return out;
488
- }
489
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,10 +1,25 @@
1
1
  import type { RunEvent } from "@claudexor/schema";
2
2
  export declare const RETAINED_OUTPUT_PATH = "final/retained-output.md";
3
+ /** What a caller already passes on, so the projection does not repeat it. */
4
+ interface CarriedOutput {
5
+ /** Carried text (a final answer, a checkpoint): a block wholly within it is omitted. */
6
+ text?: string;
7
+ /** The native try (attempt, process session) whose answer is carried. Its answer is
8
+ * 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
+ represented?: {
13
+ attempt: string;
14
+ session: string;
15
+ };
16
+ }
3
17
  /** Evidence projection only: never chooses an answer, validates a verdict or starts work. */
4
- export declare function retainedOutput(events: Iterable<RunEvent>, malformed?: number, onlyAdditional?: boolean): string | null;
18
+ export declare function retainedOutput(events: Iterable<RunEvent>, malformed?: number, onlyAdditional?: boolean, carried?: CarriedOutput): string | null;
5
19
  /** Publish a derived artifact atomically; a failed write never announces a partial file. */
6
20
  export declare function writeRetainedOutput(runDir: string, source: {
7
21
  events: RunEvent[];
8
22
  malformed: number;
9
23
  }, onlyAdditional?: boolean): string | null;
24
+ export {};
10
25
  //# sourceMappingURL=retained-output.d.ts.map
@@ -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;AAmB/D,6FAA6F;AAC7F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,SAAS,SAAI,EACb,cAAc,UAAQ,GACrB,MAAM,GAAG,IAAI,CAsGf;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,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,10 +1,10 @@
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 { redactSecrets, writeText } from "@claudexor/util";
4
+ import { writeText } from "@claudexor/util";
5
5
  export const RETAINED_OUTPUT_PATH = "final/retained-output.md";
6
6
  /** Evidence projection only: never chooses an answer, validates a verdict or starts work. */
7
- export function retainedOutput(events, malformed = 0, onlyAdditional = false) {
7
+ export function retainedOutput(events, malformed = 0, onlyAdditional = false, carried = {}) {
8
8
  const sources = new Map();
9
9
  const captured = new Map();
10
10
  for (const event of events) {
@@ -42,11 +42,21 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false) {
42
42
  continue;
43
43
  }
44
44
  const text = p["text"];
45
- if (typeof text !== "string" || text.length === 0)
46
- continue;
47
- const seq = event.seq ?? 0;
48
45
  const delta = payload?.["delta"] === true;
49
46
  const final = p["final"] === true;
47
+ // AnswerAssembly accepts a typed final that is no fragment or snapshot and has
48
+ // display text or machine truth; the last one accepted is the answer.
49
+ const accepted = final &&
50
+ !delta &&
51
+ payload?.["buffered"] !== true &&
52
+ ((typeof text === "string" && text.trim() !== "") ||
53
+ typeof payload?.["work_report_envelope"] === "string");
54
+ if (typeof text !== "string" || text.length === 0) {
55
+ if (accepted)
56
+ source.answer = null;
57
+ continue;
58
+ }
59
+ const seq = event.seq ?? 0;
50
60
  const last = source.blocks.at(-1);
51
61
  if (delta && source.openDelta && last) {
52
62
  last.text += text;
@@ -65,6 +75,8 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false) {
65
75
  }
66
76
  source.openDelta = delta;
67
77
  source.pendingFlush = payload?.["buffered"] === true;
78
+ if (accepted)
79
+ source.answer = text.trim() ? source.blocks.at(-1) : null;
68
80
  }
69
81
  const observed = [...sources.values()]
70
82
  .flatMap((source) => source.blocks)
@@ -72,7 +84,20 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false) {
72
84
  if (onlyAdditional && !malformed && !captured.size && observed.length === 1 && observed[0].final)
73
85
  return null;
74
86
  const sections = [...sources.values()].flatMap((source) => {
75
- const blocks = source.blocks.filter((block) => block.text.trim().length > 0);
87
+ const represented = carried.represented?.attempt === source.attempt &&
88
+ carried.represented.session === source.session;
89
+ const answer = represented ? source.answer : undefined;
90
+ const blocks = source.blocks.filter((block) => {
91
+ const text = block.text.trim();
92
+ if (!text || carried.text?.includes(text))
93
+ return false;
94
+ if (!represented)
95
+ return true;
96
+ // No accepted final: the joined narration is the answer.
97
+ if (answer === undefined)
98
+ return false;
99
+ return answer === null || (block !== answer && !answer.text.trim().includes(text));
100
+ });
76
101
  if (!blocks.length)
77
102
  return [];
78
103
  return [
@@ -91,7 +116,7 @@ export function retainedOutput(events, malformed = 0, onlyAdditional = false) {
91
116
  }
92
117
  if (!sections.length)
93
118
  return null;
94
- return redactSecrets("# Retained output\n\n" +
119
+ return ("# Retained output\n\n" +
95
120
  "> Recorded assistant text, not a completion verdict. The run outcome and checks remain authoritative.\n" +
96
121
  (malformed
97
122
  ? `\n> Source log has ${malformed} unreadable record(s); this is incomplete evidence.\n`
@@ -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": "4.8.2",
3
+ "version": "5.0.2",
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": "4.8.2",
20
- "@claudexor/util": "4.8.2"
19
+ "@claudexor/util": "5.0.2",
20
+ "@claudexor/schema": "5.0.2"
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",