@excitedjs/agent-runtime-codex 0.3.5-beta.167 → 1.0.0-beta.169
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/README.md +37 -1
- package/dist/events.d.ts +2 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +40 -42
- package/dist/events.js.map +1 -1
- package/dist/provider.d.ts +3 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +5 -3
- package/dist/provider.js.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +9 -1
- package/dist/rpc.js.map +1 -1
- package/dist/runtime.d.ts +14 -7
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +241 -80
- package/dist/runtime.js.map +1 -1
- package/dist/supervisor.d.ts +7 -0
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +99 -43
- package/dist/supervisor.js.map +1 -1
- package/dist/transcript/budget.d.ts +8 -0
- package/dist/transcript/budget.d.ts.map +1 -0
- package/dist/transcript/budget.js +9 -0
- package/dist/transcript/budget.js.map +1 -0
- package/dist/transcript/cursor.d.ts +23 -0
- package/dist/transcript/cursor.d.ts.map +1 -0
- package/dist/transcript/cursor.js +57 -0
- package/dist/transcript/cursor.js.map +1 -0
- package/dist/transcript/error.d.ts +9 -0
- package/dist/transcript/error.d.ts.map +1 -0
- package/dist/transcript/error.js +9 -0
- package/dist/transcript/error.js.map +1 -0
- package/dist/transcript/opened-file.d.ts +10 -0
- package/dist/transcript/opened-file.d.ts.map +1 -0
- package/dist/transcript/opened-file.js +61 -0
- package/dist/transcript/opened-file.js.map +1 -0
- package/dist/transcript/path.d.ts +28 -0
- package/dist/transcript/path.d.ts.map +1 -0
- package/dist/transcript/path.js +422 -0
- package/dist/transcript/path.js.map +1 -0
- package/dist/transcript/projection.d.ts +6 -0
- package/dist/transcript/projection.d.ts.map +1 -0
- package/dist/transcript/projection.js +170 -0
- package/dist/transcript/projection.js.map +1 -0
- package/dist/transcript/reader.d.ts +7 -0
- package/dist/transcript/reader.d.ts.map +1 -0
- package/dist/transcript/reader.js +401 -0
- package/dist/transcript/reader.js.map +1 -0
- package/dist/turn-manager.d.ts +12 -16
- package/dist/turn-manager.d.ts.map +1 -1
- package/dist/turn-manager.js +157 -151
- package/dist/turn-manager.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/supervisor.js
CHANGED
|
@@ -22,6 +22,9 @@ export class CodexProcess {
|
|
|
22
22
|
cwd;
|
|
23
23
|
supervisor = null;
|
|
24
24
|
_pid = null;
|
|
25
|
+
startTask = null;
|
|
26
|
+
reapTask = null;
|
|
27
|
+
reapRequested = false;
|
|
25
28
|
reaped = false;
|
|
26
29
|
exitHandlers = [];
|
|
27
30
|
constructor(opts) {
|
|
@@ -37,9 +40,21 @@ export class CodexProcess {
|
|
|
37
40
|
}
|
|
38
41
|
/** Spawn the daemon and resolve once its listen socket is bound. */
|
|
39
42
|
async start() {
|
|
40
|
-
if (this.supervisor !== null) {
|
|
43
|
+
if (this.supervisor !== null || this.startTask !== null) {
|
|
41
44
|
throw new Error('CodexProcess.start: already started');
|
|
42
45
|
}
|
|
46
|
+
this.assertStartAllowed();
|
|
47
|
+
const task = this.startProcess();
|
|
48
|
+
this.startTask = task;
|
|
49
|
+
try {
|
|
50
|
+
await task;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
if (this.startTask === task)
|
|
54
|
+
this.startTask = null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async startProcess() {
|
|
43
58
|
const binPath = this.opts.binPath ?? (process.env['CODEX_HOST_CODEX_BIN'] || 'codex');
|
|
44
59
|
const args = [
|
|
45
60
|
'app-server',
|
|
@@ -66,58 +81,91 @@ export class CodexProcess {
|
|
|
66
81
|
// so they cannot be garbage-collected — and thus closed out from under the
|
|
67
82
|
// child — between open and spawn. They are closed once the child owns the
|
|
68
83
|
// inherited fds, matching the previous openSync/closeSync timing.
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
const logHandles = [];
|
|
85
|
+
try {
|
|
86
|
+
const stdoutHandle = await open(this.opts.stdoutLogPath, 'a', 0o600);
|
|
87
|
+
logHandles.push(stdoutHandle);
|
|
88
|
+
const stderrHandle = await open(this.opts.stderrLogPath, 'a', 0o600);
|
|
89
|
+
logHandles.push(stderrHandle);
|
|
90
|
+
this.assertStartAllowed();
|
|
91
|
+
const supervisor = new SupervisedChild({
|
|
92
|
+
kind: 'spawn',
|
|
93
|
+
command: binPath,
|
|
94
|
+
args,
|
|
95
|
+
options: {
|
|
96
|
+
cwd: this.opts.cwd,
|
|
97
|
+
env: this.opts.env ?? process.env,
|
|
98
|
+
stdio: ['ignore', stdoutHandle.fd, stderrHandle.fd],
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
supervisor.onError(() => {
|
|
102
|
+
/* daemon-side error, can no longer affect this process */
|
|
103
|
+
});
|
|
104
|
+
supervisor.onExit((exit) => {
|
|
105
|
+
if (this.reapRequested || this.reaped)
|
|
106
|
+
return;
|
|
107
|
+
for (const handler of this.exitHandlers) {
|
|
108
|
+
try {
|
|
109
|
+
handler(exit);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
/* exit observers must not poison process event dispatch */
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// Publish termination authority before the spawn await. A concurrent
|
|
117
|
+
// reap waits for this start task and can never miss a late child.
|
|
118
|
+
this.supervisor = supervisor;
|
|
119
|
+
try {
|
|
120
|
+
const child = await supervisor.start();
|
|
121
|
+
this.assertStartAllowed();
|
|
122
|
+
const pid = child.pid;
|
|
123
|
+
this._pid = pid;
|
|
124
|
+
await waitForSocket(this.opts.socketPath, pid, this.opts.readyTimeoutMs ?? 10000);
|
|
125
|
+
this.assertStartAllowed();
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
88
128
|
try {
|
|
89
|
-
|
|
129
|
+
await this.terminateSpawnedProcess();
|
|
90
130
|
}
|
|
91
|
-
catch {
|
|
92
|
-
|
|
131
|
+
catch (stopError) {
|
|
132
|
+
throw new AggregateError([error, stopError], 'Codex process start failed and termination could not be proved');
|
|
93
133
|
}
|
|
134
|
+
throw error;
|
|
94
135
|
}
|
|
95
|
-
});
|
|
96
|
-
let child;
|
|
97
|
-
try {
|
|
98
|
-
child = await supervisor.start();
|
|
99
136
|
}
|
|
100
137
|
finally {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const pid = child.pid;
|
|
105
|
-
this.supervisor = supervisor;
|
|
106
|
-
this._pid = pid;
|
|
107
|
-
try {
|
|
108
|
-
await waitForSocket(this.opts.socketPath, pid, this.opts.readyTimeoutMs ?? 10000);
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
await this.reap();
|
|
112
|
-
throw e;
|
|
138
|
+
// The child already inherited these descriptors. Parent-side close
|
|
139
|
+
// errors cannot make a successfully supervised child unowned.
|
|
140
|
+
await Promise.all(logHandles.map((handle) => handle.close().catch(() => undefined)));
|
|
113
141
|
}
|
|
114
142
|
}
|
|
115
143
|
/** SIGTERM → 1s wait → SIGKILL group. Idempotent. */
|
|
116
|
-
|
|
144
|
+
reap() {
|
|
117
145
|
if (this.reaped)
|
|
118
|
-
return;
|
|
146
|
+
return Promise.resolve();
|
|
147
|
+
if (this.reapTask !== null)
|
|
148
|
+
return this.reapTask;
|
|
149
|
+
this.reapRequested = true;
|
|
150
|
+
const task = this.reapProcess();
|
|
151
|
+
this.reapTask = task;
|
|
152
|
+
void task.catch(() => {
|
|
153
|
+
if (this.reapTask === task)
|
|
154
|
+
this.reapTask = null;
|
|
155
|
+
});
|
|
156
|
+
return task;
|
|
157
|
+
}
|
|
158
|
+
async reapProcess() {
|
|
159
|
+
// If no supervisor has been published, `reapRequested` is itself the
|
|
160
|
+
// fence: every later pre-spawn seam checks it before creating a child. Do
|
|
161
|
+
// not join an arbitrary filesystem/startup wait that owns no process yet.
|
|
162
|
+
if (this.supervisor !== null)
|
|
163
|
+
await this.terminateSpawnedProcess();
|
|
119
164
|
this.reaped = true;
|
|
120
|
-
|
|
165
|
+
}
|
|
166
|
+
async terminateSpawnedProcess() {
|
|
167
|
+
const supervisor = this.supervisor;
|
|
168
|
+
await supervisor?.stop();
|
|
121
169
|
try {
|
|
122
170
|
await rm(this.opts.socketPath, { force: true });
|
|
123
171
|
}
|
|
@@ -129,7 +177,15 @@ export class CodexProcess {
|
|
|
129
177
|
// flows over the socket, so they are usually empty (issue #182 logs stage).
|
|
130
178
|
await removeEmptyLogFile(this.opts.stdoutLogPath);
|
|
131
179
|
await removeEmptyLogFile(this.opts.stderrLogPath);
|
|
132
|
-
this.supervisor
|
|
180
|
+
if (this.supervisor === supervisor) {
|
|
181
|
+
this.supervisor = null;
|
|
182
|
+
this._pid = null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
assertStartAllowed() {
|
|
186
|
+
if (this.reapRequested || this.reaped) {
|
|
187
|
+
throw new Error('CodexProcess.start: stopped during start');
|
|
188
|
+
}
|
|
133
189
|
}
|
|
134
190
|
}
|
|
135
191
|
async function waitForSocket(path, pid, timeoutMs) {
|
package/dist/supervisor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AA4BlC,8DAA8D;AAC9D,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type TranscriptScanBudget } from '@excitedjs/dreamux-utils';
|
|
2
|
+
export type CodexTranscriptBudget = TranscriptScanBudget;
|
|
3
|
+
export declare function createCodexTranscriptBudget(input?: {
|
|
4
|
+
maxEntries?: number;
|
|
5
|
+
maxElapsedMs?: number;
|
|
6
|
+
now?: () => number;
|
|
7
|
+
}): CodexTranscriptBudget;
|
|
8
|
+
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/transcript/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEzD,wBAAgB,2BAA2B,CAAC,KAAK,GAAE;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GAAG,qBAAqB,CAS7B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createTranscriptScanBudget, } from '@excitedjs/dreamux-utils';
|
|
2
|
+
import { CodexTranscriptError } from './error.js';
|
|
3
|
+
export function createCodexTranscriptBudget(input = {}) {
|
|
4
|
+
return createTranscriptScanBudget({
|
|
5
|
+
...input,
|
|
6
|
+
limitError: () => new CodexTranscriptError('scan_unsupported', 'Codex transcript discovery exceeded its bounded scan limit'),
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/transcript/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAE3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,UAAU,2BAA2B,CAAC,QAIxC,EAAE;IACJ,OAAO,0BAA0B,CAAC;QAChC,GAAG,KAAK;QACR,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,oBAAoB,CACtB,kBAAkB,EAClB,4DAA4D,CAC7D;KACJ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { transcriptDigest } from '@excitedjs/dreamux-utils';
|
|
2
|
+
export interface CodexCursorPosition {
|
|
3
|
+
segment: number;
|
|
4
|
+
offset: number;
|
|
5
|
+
}
|
|
6
|
+
interface CodexCursorEnvelope {
|
|
7
|
+
v: 1;
|
|
8
|
+
p: 'codex';
|
|
9
|
+
fp: string;
|
|
10
|
+
gen: string;
|
|
11
|
+
pos: CodexCursorPosition;
|
|
12
|
+
bd: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function codexQueryFingerprint(includeTools: boolean): string;
|
|
15
|
+
export declare function encodeCodexCursor(input: {
|
|
16
|
+
fingerprint: string;
|
|
17
|
+
generation: string;
|
|
18
|
+
position: CodexCursorPosition;
|
|
19
|
+
boundaryDigest: string;
|
|
20
|
+
}): string;
|
|
21
|
+
export declare function decodeCodexCursor(cursor: string, expectedFingerprint: string): CodexCursorEnvelope;
|
|
22
|
+
export { transcriptDigest as digest };
|
|
23
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/transcript/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IAC3B,CAAC,EAAE,CAAC,CAAC;IACL,CAAC,EAAE,OAAO,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,mBAAmB,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAUT;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,GAC1B,mBAAmB,CA0BrB;AAyBD,OAAO,EAAE,gBAAgB,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { isTranscriptDigest, transcriptDigest, } from '@excitedjs/dreamux-utils';
|
|
2
|
+
import { CodexTranscriptError } from './error.js';
|
|
3
|
+
export function codexQueryFingerprint(includeTools) {
|
|
4
|
+
return transcriptDigest(JSON.stringify({ include_tools: includeTools }));
|
|
5
|
+
}
|
|
6
|
+
export function encodeCodexCursor(input) {
|
|
7
|
+
const envelope = {
|
|
8
|
+
v: 1,
|
|
9
|
+
p: 'codex',
|
|
10
|
+
fp: input.fingerprint,
|
|
11
|
+
gen: input.generation,
|
|
12
|
+
pos: input.position,
|
|
13
|
+
bd: input.boundaryDigest,
|
|
14
|
+
};
|
|
15
|
+
return Buffer.from(JSON.stringify(envelope), 'utf8').toString('base64url');
|
|
16
|
+
}
|
|
17
|
+
export function decodeCodexCursor(cursor, expectedFingerprint) {
|
|
18
|
+
let value;
|
|
19
|
+
try {
|
|
20
|
+
const decoded = Buffer.from(cursor, 'base64url');
|
|
21
|
+
if (decoded.length === 0 || decoded.length > 3072)
|
|
22
|
+
throw new Error('size');
|
|
23
|
+
value = JSON.parse(decoded.toString('utf8'));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new CodexTranscriptError('cursor_invalid', 'Codex transcript cursor is invalid', { cause: error });
|
|
27
|
+
}
|
|
28
|
+
if (!isCursorEnvelope(value)) {
|
|
29
|
+
throw new CodexTranscriptError('cursor_invalid', 'Codex transcript cursor is invalid');
|
|
30
|
+
}
|
|
31
|
+
if (value.fp !== expectedFingerprint) {
|
|
32
|
+
throw new CodexTranscriptError('cursor_query_mismatch', 'Codex transcript cursor belongs to a different query');
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
function isCursorEnvelope(value) {
|
|
37
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const record = value;
|
|
41
|
+
const position = record['pos'];
|
|
42
|
+
return (Object.keys(record).length === 6 &&
|
|
43
|
+
record['v'] === 1 &&
|
|
44
|
+
record['p'] === 'codex' &&
|
|
45
|
+
isTranscriptDigest(record['fp']) &&
|
|
46
|
+
isTranscriptDigest(record['gen']) &&
|
|
47
|
+
isTranscriptDigest(record['bd']) &&
|
|
48
|
+
position !== null &&
|
|
49
|
+
typeof position === 'object' &&
|
|
50
|
+
!Array.isArray(position) &&
|
|
51
|
+
Number.isInteger(position['segment']) &&
|
|
52
|
+
position['segment'] >= 0 &&
|
|
53
|
+
Number.isSafeInteger(position['offset']) &&
|
|
54
|
+
position['offset'] >= 0);
|
|
55
|
+
}
|
|
56
|
+
export { transcriptDigest as digest };
|
|
57
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/transcript/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentRuntimeTranscriptError } from '@excitedjs/dreamux-types';
|
|
2
|
+
export declare class CodexTranscriptError extends Error implements AgentRuntimeTranscriptError {
|
|
3
|
+
readonly reason: AgentRuntimeTranscriptError['reason'];
|
|
4
|
+
readonly name = "AgentRuntimeTranscriptError";
|
|
5
|
+
constructor(reason: AgentRuntimeTranscriptError['reason'], message: string, options?: {
|
|
6
|
+
cause?: unknown;
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/transcript/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAE5E,qBAAa,oBACX,SAAQ,KACR,YAAW,2BAA2B;IAKpC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC;IAHxD,QAAQ,CAAC,IAAI,iCAAiC;gBAGnC,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,EACtD,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAIpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/transcript/error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBACX,SAAQ,KAAK;IAMF;IAHF,IAAI,GAAG,6BAA6B,CAAC;IAE9C,YACW,MAA6C,EACtD,OAAe,EACf,UAA+B,EAAE;QAEjC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAJf,WAAM,GAAN,MAAM,CAAuC;IAKxD,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FileHandle } from 'node:fs/promises';
|
|
2
|
+
export interface CodexOpenedTranscript {
|
|
3
|
+
handle: FileHandle;
|
|
4
|
+
path: string;
|
|
5
|
+
size: number;
|
|
6
|
+
dev: number | bigint;
|
|
7
|
+
ino: number | bigint;
|
|
8
|
+
}
|
|
9
|
+
export declare function openCodexTranscript(candidate: string, canonicalRoots: readonly string[]): Promise<CodexOpenedTranscript>;
|
|
10
|
+
//# sourceMappingURL=opened-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opened-file.d.ts","sourceRoot":"","sources":["../../src/transcript/opened-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,OAAO,CAAC,qBAAqB,CAAC,CA4DhC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, realpath } from 'node:fs/promises';
|
|
3
|
+
import { isPathWithin } from '@excitedjs/dreamux-utils';
|
|
4
|
+
import { CodexTranscriptError } from './error.js';
|
|
5
|
+
export async function openCodexTranscript(candidate, canonicalRoots) {
|
|
6
|
+
let handle;
|
|
7
|
+
try {
|
|
8
|
+
handle = await open(candidate, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
throw classifyOpenError(error);
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const [opened, canonicalPath] = await Promise.all([
|
|
15
|
+
handle.stat(),
|
|
16
|
+
realpath(candidate),
|
|
17
|
+
]);
|
|
18
|
+
if (!opened.isFile()) {
|
|
19
|
+
throw new CodexTranscriptError('invalid', 'Codex transcript is not a regular file');
|
|
20
|
+
}
|
|
21
|
+
if (!canonicalRoots.some((root) => isPathWithin(root, canonicalPath))) {
|
|
22
|
+
throw new CodexTranscriptError('locator_outside_root', 'Codex transcript locator is outside the native transcript roots');
|
|
23
|
+
}
|
|
24
|
+
const current = await open(canonicalPath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)).catch((error) => {
|
|
25
|
+
throw classifyOpenError(error);
|
|
26
|
+
});
|
|
27
|
+
try {
|
|
28
|
+
const currentStat = await current.stat();
|
|
29
|
+
if (opened.dev !== currentStat.dev || opened.ino !== currentStat.ino) {
|
|
30
|
+
throw new CodexTranscriptError('unreadable', 'Codex transcript changed while opening');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
await current.close();
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
handle,
|
|
38
|
+
path: canonicalPath,
|
|
39
|
+
size: opened.size,
|
|
40
|
+
dev: opened.dev,
|
|
41
|
+
ino: opened.ino,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
await handle.close().catch(() => undefined);
|
|
46
|
+
if (error instanceof CodexTranscriptError)
|
|
47
|
+
throw error;
|
|
48
|
+
throw new CodexTranscriptError('unreadable', 'Codex transcript is unreadable', { cause: error });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function classifyOpenError(error) {
|
|
52
|
+
const code = error.code;
|
|
53
|
+
if (code === 'ENOENT') {
|
|
54
|
+
return new CodexTranscriptError('not_found', 'Codex transcript is unavailable', { cause: error });
|
|
55
|
+
}
|
|
56
|
+
if (code === 'ELOOP') {
|
|
57
|
+
return new CodexTranscriptError('locator_outside_root', 'Codex transcript locator is outside the native transcript roots', { cause: error });
|
|
58
|
+
}
|
|
59
|
+
return new CodexTranscriptError('unreadable', 'Codex transcript is unreadable', { cause: error });
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=opened-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opened-file.js","sourceRoot":"","sources":["../../src/transcript/opened-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAmB,MAAM,kBAAkB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAUlD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,cAAiC;IAEjC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CACjB,SAAS,EACT,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChD,MAAM,CAAC,IAAI,EAAE;YACb,QAAQ,CAAC,SAAS,CAAC;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,oBAAoB,CAC5B,SAAS,EACT,wCAAwC,CACzC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,oBAAoB,CAC5B,sBAAsB,EACtB,iEAAiE,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CACxB,aAAa,EACb,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,CACjD,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACzB,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;gBACrE,MAAM,IAAI,oBAAoB,CAC5B,YAAY,EACZ,wCAAwC,CACzC,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,OAAO;YACL,MAAM;YACN,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,KAAK,YAAY,oBAAoB;YAAE,MAAM,KAAK,CAAC;QACvD,MAAM,IAAI,oBAAoB,CAC5B,YAAY,EACZ,gCAAgC,EAChC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;IACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,oBAAoB,CAC7B,WAAW,EACX,iCAAiC,EACjC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,oBAAoB,CAC7B,sBAAsB,EACtB,iEAAiE,EACjE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,oBAAoB,CAC7B,YAAY,EACZ,gCAAgC,EAChC,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DreamuxEnvironment } from '@excitedjs/dreamux-types';
|
|
2
|
+
import { type CodexTranscriptBudget } from './budget.js';
|
|
3
|
+
import { type CodexOpenedTranscript } from './opened-file.js';
|
|
4
|
+
export interface CodexTranscriptRoots {
|
|
5
|
+
home: string;
|
|
6
|
+
sessions: string;
|
|
7
|
+
archived: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CodexValidatedTranscript {
|
|
10
|
+
path: string;
|
|
11
|
+
root: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
rolloutId: string;
|
|
14
|
+
historyBase: CodexHistoryBase | null;
|
|
15
|
+
dev: number | bigint;
|
|
16
|
+
ino: number | bigint;
|
|
17
|
+
}
|
|
18
|
+
export interface CodexHistoryBase {
|
|
19
|
+
rolloutId: string;
|
|
20
|
+
endByteOffset: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function resolveCodexTranscriptRoots(env?: DreamuxEnvironment): Promise<CodexTranscriptRoots>;
|
|
23
|
+
export declare function validateCodexThreadPath(candidate: string, expectedSessionId: string, roots: CodexTranscriptRoots): Promise<CodexValidatedTranscript>;
|
|
24
|
+
export declare function validateCodexTranscriptLocator(candidate: string, expectedSessionId: string, roots: CodexTranscriptRoots): Promise<CodexValidatedTranscript>;
|
|
25
|
+
export declare function locateCodexTranscript(locator: string | null | undefined, expectedSessionId: string, roots: CodexTranscriptRoots, budget?: CodexTranscriptBudget): Promise<CodexValidatedTranscript>;
|
|
26
|
+
export declare function findCodexRolloutById(roots: CodexTranscriptRoots, rolloutId: string, budget?: CodexTranscriptBudget): Promise<CodexValidatedTranscript>;
|
|
27
|
+
export declare function readCodexTranscriptText(opened: CodexOpenedTranscript, maxDecodedBytes: number): Promise<string>;
|
|
28
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/transcript/path.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,kBAAgC,GACpC,OAAO,CAAC,oBAAoB,CAAC,CAuC/B;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,wBAAwB,CAAC,CAoCnC;AAED,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,wBAAwB,CAAC,CAMnC;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,oBAAoB,EAC3B,MAAM,GAAE,qBAAqD,GAC5D,OAAO,CAAC,wBAAwB,CAAC,CA4CnC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,qBAAqD,GAC5D,OAAO,CAAC,wBAAwB,CAAC,CA2BnC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,qBAAqB,EAC7B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|