@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.
- package/dist/event-file.d.ts +20 -0
- package/dist/event-file.d.ts.map +1 -0
- package/dist/event-file.js +126 -0
- package/dist/event-file.js.map +1 -0
- package/dist/index.d.ts +33 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +162 -228
- package/dist/index.js.map +1 -1
- package/dist/retained-output.d.ts +10 -5
- package/dist/retained-output.d.ts.map +1 -1
- package/dist/retained-output.js +126 -24
- package/dist/retained-output.js.map +1 -1
- package/package.json +3 -3
|
@@ -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
|
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,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,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAK9E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE/D,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,8EAA8E;IAC9E,SAAS,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;uEAEuE;AACvE,MAAM,MAAM,uBAAuB,GAAG,CACpC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,YAAY,GAAG,IAAI,KAC3B;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtE;;2BAE2B;AAC3B,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,YAAY,GAAG,IAAI,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;AASnB;;;;;;;;;GASG;AACH,qBAAa,QAAQ;IAkBjB,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;IAjC7B,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,mBAAmB,CAAC,CAA0B;IACtD,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,gFAAgF;IAChF,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAyE;IAC/F,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,mFAAmF;IACnF,uBAAuB,IAAI;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI,CAEzF;IAED;;;;OAIG;IACH,iBAAiB,CACf,IAAI,EAAE,CACJ,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,qBAAqB,GAAG,IAAI,EACjC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GACrF,IAAI,CAGN;IAED,2EAA2E;IAC3E,iBAAiB,IAAI,OAAO,CAE3B;IAED,sBAAsB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAE1D;IAED;qDACiD;IACjD,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAElD;IAED,iFAAiF;IACjF,OAAO,IAAI,MAAM,CAEhB;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,OAAO,UAAO,GAAG,QAAQ,CAwBxF;IAED;;;;;;;;;;OAUG;IACG,YAAY,CAChB,IAAI,EAAE,oBAAoB,EAC1B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,OAAO,UAAO,GACb,OAAO,CAAC,QAAQ,CAAC,CAgBnB;IAED;gEAC4D;IACtD,sBAAsB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAOvD;IAED,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,SAAS;IAIjB;4EACwE;IACxE,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,cAAc;IAqDtB,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,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { RunEvent as RunEventSchema } from "@claudexor/schema";
|
|
2
|
-
import {
|
|
3
|
-
import { appendLine, nowIso
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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 =
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
192
|
-
|
|
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
|
-
|
|
226
|
-
this.onPublish?.(event);
|
|
269
|
+
prepared?.commit?.();
|
|
227
270
|
}
|
|
228
|
-
catch {
|
|
229
|
-
|
|
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
|
-
|
|
238
|
-
this.onPublish?.(event);
|
|
277
|
+
appendLine(this.path, JSON.stringify(event));
|
|
239
278
|
}
|
|
240
|
-
catch {
|
|
241
|
-
|
|
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":"AACA,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiCjG;;;;;;;;;GASG;AACH,MAAM,OAAO,QAAQ;IAeA,IAAI;IACJ,KAAK;IACL,MAAM;IAMN,SAAS;IAMT,QAAQ;IAER,SAAS;IA9BpB,OAAO,CAAS;IAChB,mBAAmB,GAAG,KAAK,CAAC;IAC5B,gBAAgB,GAAoE,IAAI,CAAC;IACzF,qBAAqB,GAAG,KAAK,CAAC;IAC9B,wBAAwB,GAAG,KAAK,CAAC;IACjC,sBAAsB,GAAG,KAAK,CAAC;IAC/B,mBAAmB,CAA2B;IAC9C,aAAa,CAA0E;IACvF,cAAc,CAGY;IAElC,YACmB,IAAY,EACZ,KAAa,EACb,MAAc;IAC/B;;;;OAIG;IACc,SAAqC;IACtD;;;;OAIG;IACc,QAAiB;IAClC,2EAA2E;IAC1D,SAAqC;oBAhBrC,IAAI;qBACJ,KAAK;sBACL,MAAM;yBAMN,SAAS;wBAMT,QAAQ;yBAER,SAAS;QAE1B,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO;QACL,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IAED;;mEAE+D;IAC/D,aAAa;QACX,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED,mFAAmF;IACnF,uBAAuB;QACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAED,qBAAqB;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CACf,IAGiC,EACjC,aAAsF;QAEtF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,2EAA2E;IAC3E,iBAAiB;QACf,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,sBAAsB,CAAC,IAA6B;QAClD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED,iFAAiF;IACjF,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC,IAAkB,EAAE,OAAO,GAA4B,EAAE,EAAE,OAAO,GAAG,IAAI;QAC5E,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,YAAY,GAChB,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,MAAM,QAAQ,GAAG,YAAY,KAAK,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,mBAAmB,IAAI,QAAQ,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC5F,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,OAAO,cAAc,CAAC,KAAK,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,OAAO;gBACjB,EAAE,EAAE,MAAM,EAAE;gBACZ,MAAM,EAAE,IAAI,CAAC,KAAK;gBAClB,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,IAAI;gBACJ,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QACD,4EAA4E;QAC5E,uEAAuE;QACvE,IAAI,YAAY;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,QAAQ,GAAiC,SAAS,CAAC;QACvD,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,EAAE,EAAE,MAAM,EAAE;YACZ,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI;YACJ,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACb,uEAAuE;YACvE,uEAAuE;YACvE,2DAA2D;YAC3D,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACrC,2DAA2D;YAC3D,yEAAyE;YACzE,sEAAsE;YACtE,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC9D,yEAAyE;gBACzE,oEAAoE;gBACpE,qEAAqE;gBACrE,mBAAmB;gBACnB,KAAK,GAAG,cAAc,CAAC,KAAK,CAC1B,QAAQ;oBACN,CAAC,CAAC;wBACE,GAAG,KAAK;wBACR,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;qBAC1B;oBACH,CAAC,CAAC,KAAK,CACV,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,IAAI,SAA8C,CAAC;gBACnD,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC;gBAC3E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;oBAAE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACN,IAAI,yBAAyB,GAAG,KAAK,CAAC;gBACtC,IAAI,CAAC;oBACH,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;oBACxB,yBAAyB,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;gBAC3D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,CAAC;oBACH,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;gBACvB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,yBAAyB;wBAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;oBACpE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,CAAC;oBACH,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,yBAAyB;wBAAE,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;oBACpE,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,yEAAyE;YACzE,kEAAkE;YAClE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;YAC5C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,OAAO;oBAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,wBAAwB,CAAC,aAAsB;QACrD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,wEAAwE;QACxE,uEAAuE;QACvE,0EAA0E;QAC1E,YAAY,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,cAAc,CAChB,CAAC,aAAa,CAAC,EACf,sFAAsF,CACvF,EACD;YACE,IAAI,EAAE,4BAA4B;YAClC,MAAM,EAAE,GAAG;YACX,SAAS,EAAE,KAAK;SACjB,CACF,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,6BAA6B;QAC3B,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAClF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CACtB,aAA4B,EAC5B,QAAsC,EACtC,aAAsB;QAEtB,MAAM,cAAc,GAAc,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC/E,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC;YACH,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,uEAAuE;YACvE,uEAAuE;YACvE,qEAAqE;YACrE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;YACtC,MAAM,IAAI,cAAc,CACtB,CAAC,aAAa,EAAE,GAAG,cAAc,CAAC,EAClC,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,MAAM,aAAa,CAAC;IACtB,CAAC;IAED,2FAA2F;IAC3F,OAAO;QACL,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACF;AAED,yFAAyF;AACzF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACvD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,KAAa,EACb,MAAc,EACd,IAAkB,EAClB,OAAO,GAA4B,EAAE;IAErC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,CAAC;IAC7F,IAAI,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B,EAAE,EAAE,MAAM,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,MAAM;QACf,IAAI;QACJ,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,oFAAoF;AACpF,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,mBAAmB,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC1C,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxD,SAAS,CAAC;YACR,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,gEAAgE;YAChE,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC1B,GAAG,GAAG,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC,GAAG,CAAC;QACxD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;YACxD,MAAM,GAAG,GACP,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YACtF,IAAI,GAAG,GAAG,IAAI;gBAAE,IAAI,GAAG,GAAG,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,MAAM,GAAG,IAAI;gBAAE,IAAI,GAAG,MAAM,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,IACE,KAAK,CAAC,IAAI,KAAK,eAAe;gBAC9B,KAAK,CAAC,IAAI,KAAK,YAAY;gBAC3B,KAAK,CAAC,IAAI,KAAK,aAAa,EAC5B,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import type
|
|
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
|
-
/**
|
|
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
|
|
10
|
-
*
|
|
11
|
-
*
|
|
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,
|
|
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"}
|
package/dist/retained-output.js
CHANGED
|
@@ -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 {
|
|
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
|
|
60
|
-
|
|
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() ?
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
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
|
|
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
|
|
20
|
-
"@claudexor/util": "5.0
|
|
19
|
+
"@claudexor/schema": "5.1.0",
|
|
20
|
+
"@claudexor/util": "5.1.0"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|