@claudexor/event-log 3.1.1 → 3.2.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.
- package/dist/index.d.ts +53 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +240 -20
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import type { RunEvent, RunEventType } from "@claudexor/schema";
|
|
2
|
+
export type TerminalRunEventType = Extract<RunEventType, "run.completed" | "run.failed" | "run.blocked">;
|
|
3
|
+
export interface PreparedTerminalEvent {
|
|
4
|
+
type: TerminalRunEventType;
|
|
5
|
+
payload: Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* Publish the prepared receipt's canonical commit marker after the durable
|
|
8
|
+
* journal accepts the terminal, but before file-tail/live observers can see
|
|
9
|
+
* the per-run terminal event.
|
|
10
|
+
*/
|
|
11
|
+
commit?: () => void;
|
|
12
|
+
/**
|
|
13
|
+
* Undo preparation/commit side effects when no durable journal authority was
|
|
14
|
+
* established. The callback must be idempotent.
|
|
15
|
+
*/
|
|
16
|
+
rollback?: () => void;
|
|
17
|
+
}
|
|
2
18
|
/**
|
|
3
19
|
* Append-only JSONL event log for a single run. Terminal output and human
|
|
4
20
|
* summaries are projections; this file is the canonical event stream.
|
|
@@ -14,43 +30,67 @@ export declare class EventLog {
|
|
|
14
30
|
private readonly runId;
|
|
15
31
|
private readonly taskId;
|
|
16
32
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* event authority; failure must fail the run instead of silently creating
|
|
21
|
-
* a gap in restart replay.
|
|
33
|
+
* Durable in-process authority. Non-terminal events reach it after their
|
|
34
|
+
* per-run append; terminal events reach it first so crash recovery can
|
|
35
|
+
* reconstruct the canonical receipt and per-run tail from the journal.
|
|
22
36
|
*/
|
|
23
|
-
private readonly
|
|
37
|
+
private readonly onPersist?;
|
|
24
38
|
/**
|
|
25
39
|
* Thread this run is a turn of, when any. Stamped on every event so the
|
|
26
40
|
* global event multiplex can route live progress to a chat surface without
|
|
27
41
|
* a reverse job lookup.
|
|
28
42
|
*/
|
|
29
43
|
private readonly threadId?;
|
|
44
|
+
/** Best-effort live observer, invoked only after terminal finalization. */
|
|
45
|
+
private readonly onPublish?;
|
|
30
46
|
private nextSeq;
|
|
47
|
+
private deferTerminalEvents;
|
|
48
|
+
private deferredTerminal;
|
|
49
|
+
private terminalCommittedFlag;
|
|
50
|
+
private terminalCommitInProgress;
|
|
51
|
+
private terminalWriterPoisoned;
|
|
52
|
+
private beforeTerminal?;
|
|
31
53
|
constructor(path: string, runId: string, taskId: string,
|
|
32
54
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* event authority; failure must fail the run instead of silently creating
|
|
37
|
-
* a gap in restart replay.
|
|
55
|
+
* Durable in-process authority. Non-terminal events reach it after their
|
|
56
|
+
* per-run append; terminal events reach it first so crash recovery can
|
|
57
|
+
* reconstruct the canonical receipt and per-run tail from the journal.
|
|
38
58
|
*/
|
|
39
|
-
|
|
59
|
+
onPersist?: ((event: RunEvent) => void) | undefined,
|
|
40
60
|
/**
|
|
41
61
|
* Thread this run is a turn of, when any. Stamped on every event so the
|
|
42
62
|
* global event multiplex can route live progress to a chat surface without
|
|
43
63
|
* a reverse job lookup.
|
|
44
64
|
*/
|
|
45
|
-
threadId?: string | undefined
|
|
65
|
+
threadId?: string | undefined,
|
|
66
|
+
/** Best-effort live observer, invoked only after terminal finalization. */
|
|
67
|
+
onPublish?: ((event: RunEvent) => void) | undefined);
|
|
46
68
|
/**
|
|
47
69
|
* Unregister this log as the live writer for its path. Out-of-band
|
|
48
70
|
* appenders fall back to file-tail stamping afterwards, which is safe once
|
|
49
71
|
* the owning run is terminal (nobody else holds an in-memory counter).
|
|
50
72
|
*/
|
|
51
73
|
dispose(): void;
|
|
74
|
+
/** Hold the one terminal event while a Delegate parent drains children.
|
|
75
|
+
* Non-terminal events (notably aggregate budget.cash) continue to append and
|
|
76
|
+
* therefore remain ordered before the eventual final event. */
|
|
77
|
+
deferTerminal(): void;
|
|
78
|
+
clearDeferredTerminal(): void;
|
|
79
|
+
flushDeferredTerminal(): RunEvent | null;
|
|
80
|
+
/**
|
|
81
|
+
* Register the engine's once-only terminal preparation hook. It builds the
|
|
82
|
+
* canonical receipt in memory before the durable authority accepts the
|
|
83
|
+
* terminal; commit runs afterward and before file-tail/live observers.
|
|
84
|
+
*/
|
|
85
|
+
setBeforeTerminal(hook: (type: TerminalRunEventType, payload: Record<string, unknown>) => PreparedTerminalEvent | void): void;
|
|
86
|
+
/** Whether this writer has durably committed its exactly-once terminal. */
|
|
87
|
+
terminalCommitted(): boolean;
|
|
52
88
|
/** Append a typed run event. Validates against the schema before writing. */
|
|
53
89
|
emit(type: RunEventType, payload?: Record<string, unknown>): RunEvent;
|
|
90
|
+
private poisonAfterDurableCommit;
|
|
91
|
+
/** @internal Release a poisoned live owner once journal recovery repairs its tail. */
|
|
92
|
+
releaseRecoveredTerminalFence(): boolean;
|
|
93
|
+
private rollbackTerminal;
|
|
54
94
|
/** Read and parse all events (skipping malformed lines, which are surfaced separately). */
|
|
55
95
|
readAll(): {
|
|
56
96
|
events: RunEvent[];
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,MAAM,oBAAoB,GAAG,OAAO,CACxC,YAAY,EACZ,eAAe,GAAG,YAAY,GAAG,aAAa,CAC/C,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IAajB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IA5B7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,gBAAgB,CAAyE;IACjG,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,cAAc,CAAC,CAGW;IAElC,YACmB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAC/B;;;;OAIG;IACc,SAAS,CAAC,GAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,aAAA;IACtD;;;;OAIG;IACc,QAAQ,CAAC,EAAE,MAAM,YAAA;IAClC,2EAA2E;IAC1D,SAAS,CAAC,GAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,aAAA,EAUvD;IAED;;;;OAIG;IACH,OAAO,IAAI,IAAI,CAEd;IAED;;mEAE+D;IAC/D,aAAa,IAAI,IAAI,CAEpB;IAED,qBAAqB,IAAI,IAAI,CAE5B;IAED,qBAAqB,IAAI,QAAQ,GAAG,IAAI,CAKvC;IAED;;;;OAIG;IACH,iBAAiB,CACf,IAAI,EAAE,CACJ,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,qBAAqB,GAAG,IAAI,GAChC,IAAI,CAEN;IAED,2EAA2E;IAC3E,iBAAiB,IAAI,OAAO,CAE3B;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,QAAQ,CA6GxE;IAED,OAAO,CAAC,wBAAwB;IAuBhC,sFAAsF;IACtF,6BAA6B,IAAI,OAAO,CAKvC;IAED,OAAO,CAAC,gBAAgB;IAmCxB,2FAA2F;IAC3F,OAAO,IAAI;QAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAenD;CACF;AAUD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,QAAQ,CAiBV;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBlD"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RunEvent as RunEventSchema } from "@claudexor/schema";
|
|
2
|
+
import { existsSync, statSync, truncateSync, unlinkSync } from "node:fs";
|
|
2
3
|
import { appendLine, nowIso, readTextSafe, redactSecrets } from "@claudexor/util";
|
|
3
4
|
/**
|
|
4
5
|
* Append-only JSONL event log for a single run. Terminal output and human
|
|
@@ -14,31 +15,45 @@ export class EventLog {
|
|
|
14
15
|
path;
|
|
15
16
|
runId;
|
|
16
17
|
taskId;
|
|
17
|
-
|
|
18
|
+
onPersist;
|
|
18
19
|
threadId;
|
|
20
|
+
onPublish;
|
|
19
21
|
nextSeq;
|
|
22
|
+
deferTerminalEvents = false;
|
|
23
|
+
deferredTerminal = null;
|
|
24
|
+
terminalCommittedFlag = false;
|
|
25
|
+
terminalCommitInProgress = false;
|
|
26
|
+
terminalWriterPoisoned = false;
|
|
27
|
+
beforeTerminal;
|
|
20
28
|
constructor(path, runId, taskId,
|
|
21
29
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* event authority; failure must fail the run instead of silently creating
|
|
26
|
-
* a gap in restart replay.
|
|
30
|
+
* Durable in-process authority. Non-terminal events reach it after their
|
|
31
|
+
* per-run append; terminal events reach it first so crash recovery can
|
|
32
|
+
* reconstruct the canonical receipt and per-run tail from the journal.
|
|
27
33
|
*/
|
|
28
|
-
|
|
34
|
+
onPersist,
|
|
29
35
|
/**
|
|
30
36
|
* Thread this run is a turn of, when any. Stamped on every event so the
|
|
31
37
|
* global event multiplex can route live progress to a chat surface without
|
|
32
38
|
* a reverse job lookup.
|
|
33
39
|
*/
|
|
34
|
-
threadId
|
|
40
|
+
threadId,
|
|
41
|
+
/** Best-effort live observer, invoked only after terminal finalization. */
|
|
42
|
+
onPublish) {
|
|
35
43
|
this.path = path;
|
|
36
44
|
this.runId = runId;
|
|
37
45
|
this.taskId = taskId;
|
|
38
|
-
this.
|
|
46
|
+
this.onPersist = onPersist;
|
|
39
47
|
this.threadId = threadId;
|
|
48
|
+
this.onPublish = onPublish;
|
|
40
49
|
this.nextSeq = lastSeqInFile(path) + 1;
|
|
41
|
-
|
|
50
|
+
this.terminalCommittedFlag = terminalEventInFile(path);
|
|
51
|
+
if (!this.terminalCommittedFlag) {
|
|
52
|
+
if (activeEventLogs.has(path)) {
|
|
53
|
+
throw new Error("an active EventLog already owns this event path");
|
|
54
|
+
}
|
|
55
|
+
activeEventLogs.set(path, this);
|
|
56
|
+
}
|
|
42
57
|
}
|
|
43
58
|
/**
|
|
44
59
|
* Unregister this log as the live writer for its path. Out-of-band
|
|
@@ -49,10 +64,63 @@ export class EventLog {
|
|
|
49
64
|
if (activeEventLogs.get(this.path) === this)
|
|
50
65
|
activeEventLogs.delete(this.path);
|
|
51
66
|
}
|
|
67
|
+
/** Hold the one terminal event while a Delegate parent drains children.
|
|
68
|
+
* Non-terminal events (notably aggregate budget.cash) continue to append and
|
|
69
|
+
* therefore remain ordered before the eventual final event. */
|
|
70
|
+
deferTerminal() {
|
|
71
|
+
this.deferTerminalEvents = true;
|
|
72
|
+
}
|
|
73
|
+
clearDeferredTerminal() {
|
|
74
|
+
this.deferredTerminal = null;
|
|
75
|
+
}
|
|
76
|
+
flushDeferredTerminal() {
|
|
77
|
+
const pending = this.deferredTerminal;
|
|
78
|
+
this.deferredTerminal = null;
|
|
79
|
+
this.deferTerminalEvents = false;
|
|
80
|
+
return pending ? this.emit(pending.type, pending.payload) : null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Register the engine's once-only terminal preparation hook. It builds the
|
|
84
|
+
* canonical receipt in memory before the durable authority accepts the
|
|
85
|
+
* terminal; commit runs afterward and before file-tail/live observers.
|
|
86
|
+
*/
|
|
87
|
+
setBeforeTerminal(hook) {
|
|
88
|
+
this.beforeTerminal = hook;
|
|
89
|
+
}
|
|
90
|
+
/** Whether this writer has durably committed its exactly-once terminal. */
|
|
91
|
+
terminalCommitted() {
|
|
92
|
+
return this.terminalCommittedFlag;
|
|
93
|
+
}
|
|
52
94
|
/** Append a typed run event. Validates against the schema before writing. */
|
|
53
95
|
emit(type, payload = {}) {
|
|
54
|
-
|
|
55
|
-
|
|
96
|
+
if (this.terminalCommittedFlag) {
|
|
97
|
+
throw new Error("run terminal event is already committed");
|
|
98
|
+
}
|
|
99
|
+
if (this.terminalWriterPoisoned) {
|
|
100
|
+
throw new Error("run terminal writer is poisoned after an incomplete rollback");
|
|
101
|
+
}
|
|
102
|
+
if (this.terminalCommitInProgress) {
|
|
103
|
+
throw new Error("run terminal event commit is already in progress");
|
|
104
|
+
}
|
|
105
|
+
const terminalType = type === "run.completed" || type === "run.failed" || type === "run.blocked" ? type : null;
|
|
106
|
+
const terminal = terminalType !== null;
|
|
107
|
+
if (this.deferTerminalEvents && terminal) {
|
|
108
|
+
if (this.deferredTerminal)
|
|
109
|
+
throw new Error("run terminal event was emitted more than once");
|
|
110
|
+
this.deferredTerminal = { type, payload };
|
|
111
|
+
return RunEventSchema.parse({
|
|
112
|
+
seq: this.nextSeq,
|
|
113
|
+
ts: nowIso(),
|
|
114
|
+
run_id: this.runId,
|
|
115
|
+
task_id: this.taskId,
|
|
116
|
+
...(this.threadId ? { thread_id: this.threadId } : {}),
|
|
117
|
+
type,
|
|
118
|
+
payload: redactEventValue(payload),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
let prepared = undefined;
|
|
122
|
+
let event = RunEventSchema.parse({
|
|
123
|
+
seq: this.nextSeq,
|
|
56
124
|
ts: nowIso(),
|
|
57
125
|
run_id: this.runId,
|
|
58
126
|
task_id: this.taskId,
|
|
@@ -60,16 +128,142 @@ export class EventLog {
|
|
|
60
128
|
type,
|
|
61
129
|
payload: redactEventValue(payload),
|
|
62
130
|
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
131
|
+
// Snapshot before terminal preparation: the hook may materialize sibling
|
|
132
|
+
// artifacts, but the event file rollback boundary is the pre-hook state.
|
|
133
|
+
const previousBytes = existsSync(this.path) ? statSync(this.path).size : null;
|
|
134
|
+
if (terminal) {
|
|
135
|
+
// Fence every re-entrant emit before the preparation hook, append, and
|
|
136
|
+
// durable sink form one terminal commit. The fence is released only by
|
|
137
|
+
// a complete rollback or after the terminal fully commits.
|
|
138
|
+
this.terminalCommitInProgress = true;
|
|
139
|
+
// Validate the exact redacted event before terminal preparation can
|
|
140
|
+
// materialize a receipt for it. Keep the hook registered until the event
|
|
141
|
+
// itself is durable so an append failure can retry the entire commit.
|
|
142
|
+
try {
|
|
143
|
+
prepared = this.beforeTerminal?.(terminalType, event.payload);
|
|
144
|
+
// Terminal preparation may canonicalize facts after consulting immutable
|
|
145
|
+
// artifacts. Commit the corresponding event type and payload as one
|
|
146
|
+
// validated unit so the receipt, durable event, and live publication
|
|
147
|
+
// cannot disagree.
|
|
148
|
+
event = RunEventSchema.parse(prepared
|
|
149
|
+
? {
|
|
150
|
+
...event,
|
|
151
|
+
type: prepared.type,
|
|
152
|
+
payload: redactEventValue(prepared.payload),
|
|
153
|
+
}
|
|
154
|
+
: event);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
this.rollbackTerminal(previousBytes, prepared, error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (terminal) {
|
|
161
|
+
let durableAuthorityCommitted = false;
|
|
162
|
+
try {
|
|
163
|
+
this.onPersist?.(event);
|
|
164
|
+
durableAuthorityCommitted = this.onPersist !== undefined;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.rollbackTerminal(previousBytes, prepared, error);
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
prepared?.commit?.();
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
if (durableAuthorityCommitted)
|
|
174
|
+
this.poisonAfterDurableCommit(error);
|
|
175
|
+
this.rollbackTerminal(previousBytes, prepared, error);
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
appendLine(this.path, JSON.stringify(event));
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (durableAuthorityCommitted)
|
|
182
|
+
this.poisonAfterDurableCommit(error);
|
|
183
|
+
this.rollbackTerminal(previousBytes, prepared, error);
|
|
184
|
+
}
|
|
185
|
+
this.nextSeq += 1;
|
|
186
|
+
// The durable journal, canonical prepared receipt, and per-run event are
|
|
187
|
+
// now one committed terminal unit. Only now may observers see it.
|
|
188
|
+
this.terminalCommittedFlag = true;
|
|
189
|
+
this.terminalCommitInProgress = false;
|
|
190
|
+
this.beforeTerminal = undefined;
|
|
70
191
|
this.dispose();
|
|
192
|
+
try {
|
|
193
|
+
this.onPublish?.(event);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
/* durable replay remains authoritative */
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
appendLine(this.path, JSON.stringify(event));
|
|
201
|
+
this.nextSeq += 1;
|
|
202
|
+
this.onPersist?.(event);
|
|
203
|
+
try {
|
|
204
|
+
this.onPublish?.(event);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
/* best-effort live observer */
|
|
208
|
+
}
|
|
209
|
+
}
|
|
71
210
|
return event;
|
|
72
211
|
}
|
|
212
|
+
poisonAfterDurableCommit(originalError) {
|
|
213
|
+
this.terminalWriterPoisoned = true;
|
|
214
|
+
this.terminalCommitInProgress = false;
|
|
215
|
+
this.beforeTerminal = undefined;
|
|
216
|
+
// CommandStore repairs the per-run tail synchronously from the accepted
|
|
217
|
+
// journal terminal. Release the strong live-writer reference once that
|
|
218
|
+
// repair becomes visible; appendRunEvent also performs this check inline.
|
|
219
|
+
setImmediate(() => {
|
|
220
|
+
this.releaseRecoveredTerminalFence();
|
|
221
|
+
}).unref?.();
|
|
222
|
+
throw Object.assign(new AggregateError([originalError], "durable terminal authority committed but local finalization failed; restart required"), {
|
|
223
|
+
code: "terminal_recovery_required",
|
|
224
|
+
status: 503,
|
|
225
|
+
retryable: false,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/** @internal Release a poisoned live owner once journal recovery repairs its tail. */
|
|
229
|
+
releaseRecoveredTerminalFence() {
|
|
230
|
+
if (!this.terminalWriterPoisoned || !terminalEventInFile(this.path))
|
|
231
|
+
return false;
|
|
232
|
+
this.terminalCommittedFlag = true;
|
|
233
|
+
this.dispose();
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
rollbackTerminal(previousBytes, prepared, originalError) {
|
|
237
|
+
const rollbackErrors = [];
|
|
238
|
+
try {
|
|
239
|
+
if (previousBytes === null) {
|
|
240
|
+
if (existsSync(this.path))
|
|
241
|
+
unlinkSync(this.path);
|
|
242
|
+
}
|
|
243
|
+
else if (existsSync(this.path) && statSync(this.path).size !== previousBytes) {
|
|
244
|
+
truncateSync(this.path, previousBytes);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
rollbackErrors.push(error);
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
prepared?.rollback?.();
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
rollbackErrors.push(error);
|
|
255
|
+
}
|
|
256
|
+
if (rollbackErrors.length > 0) {
|
|
257
|
+
// A partial rollback means neither retry nor an out-of-band append can
|
|
258
|
+
// safely infer the terminal boundary. Keep this live writer registered
|
|
259
|
+
// as an explicit poison fence until the owning process fails closed.
|
|
260
|
+
this.terminalWriterPoisoned = true;
|
|
261
|
+
this.terminalCommitInProgress = false;
|
|
262
|
+
throw new AggregateError([originalError, ...rollbackErrors], "terminal event commit failed and rollback was incomplete");
|
|
263
|
+
}
|
|
264
|
+
this.terminalCommitInProgress = false;
|
|
265
|
+
throw originalError;
|
|
266
|
+
}
|
|
73
267
|
/** Read and parse all events (skipping malformed lines, which are surfaced separately). */
|
|
74
268
|
readAll() {
|
|
75
269
|
const text = readTextSafe(this.path);
|
|
@@ -106,8 +300,12 @@ const activeEventLogs = new Map();
|
|
|
106
300
|
*/
|
|
107
301
|
export function appendRunEvent(path, runId, taskId, type, payload = {}) {
|
|
108
302
|
const live = activeEventLogs.get(path);
|
|
109
|
-
if (live)
|
|
303
|
+
if (live && !live.releaseRecoveredTerminalFence())
|
|
110
304
|
return live.emit(type, payload);
|
|
305
|
+
const terminal = type === "run.completed" || type === "run.failed" || type === "run.blocked";
|
|
306
|
+
if (terminal && terminalEventInFile(path)) {
|
|
307
|
+
throw new Error("run terminal event is already committed");
|
|
308
|
+
}
|
|
111
309
|
const event = RunEventSchema.parse({
|
|
112
310
|
seq: lastSeqInFile(path) + 1,
|
|
113
311
|
ts: nowIso(),
|
|
@@ -148,6 +346,28 @@ export function lastSeqInFile(path) {
|
|
|
148
346
|
}
|
|
149
347
|
return last;
|
|
150
348
|
}
|
|
349
|
+
function terminalEventInFile(path) {
|
|
350
|
+
const text = readTextSafe(path);
|
|
351
|
+
if (text === null)
|
|
352
|
+
return false;
|
|
353
|
+
for (const line of text.split("\n")) {
|
|
354
|
+
const trimmed = line.trim();
|
|
355
|
+
if (!trimmed)
|
|
356
|
+
continue;
|
|
357
|
+
try {
|
|
358
|
+
const event = RunEventSchema.parse(JSON.parse(trimmed));
|
|
359
|
+
if (event.type === "run.completed" ||
|
|
360
|
+
event.type === "run.failed" ||
|
|
361
|
+
event.type === "run.blocked") {
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
/* malformed evidence cannot establish a terminal fence */
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
151
371
|
function redactEventValue(value) {
|
|
152
372
|
if (typeof value === "string")
|
|
153
373
|
return redactSecrets(value);
|
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": "@claudexor/event-log",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.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/
|
|
20
|
-
"@claudexor/
|
|
19
|
+
"@claudexor/util": "3.2.0",
|
|
20
|
+
"@claudexor/schema": "3.2.0"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|