@excitedjs/agent-runtime-claude-code 0.5.0-beta.168 → 0.5.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/README.md +43 -1
- package/dist/args.d.ts +2 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +5 -0
- package/dist/args.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +5 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +10 -4
- package/dist/provider.js.map +1 -1
- package/dist/rpc.d.ts +79 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +329 -57
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-deps.d.ts +30 -0
- package/dist/runtime-deps.d.ts.map +1 -0
- package/dist/runtime-deps.js +2 -0
- package/dist/runtime-deps.js.map +1 -0
- package/dist/runtime-session.d.ts +13 -0
- package/dist/runtime-session.d.ts.map +1 -0
- package/dist/runtime-session.js +41 -0
- package/dist/runtime-session.js.map +1 -0
- package/dist/runtime-submissions.d.ts +34 -0
- package/dist/runtime-submissions.d.ts.map +1 -0
- package/dist/runtime-submissions.js +200 -0
- package/dist/runtime-submissions.js.map +1 -0
- package/dist/runtime.d.ts +33 -131
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +286 -268
- package/dist/runtime.js.map +1 -1
- package/dist/skill-adapter.d.ts +11 -1
- package/dist/skill-adapter.d.ts.map +1 -1
- package/dist/skill-adapter.js +60 -7
- package/dist/skill-adapter.js.map +1 -1
- package/dist/skill-materializer.d.ts +6 -0
- package/dist/skill-materializer.d.ts.map +1 -0
- package/dist/skill-materializer.js +45 -0
- package/dist/skill-materializer.js.map +1 -0
- package/dist/source-reservation.d.ts +6 -0
- package/dist/source-reservation.d.ts.map +1 -0
- package/dist/source-reservation.js +48 -0
- package/dist/source-reservation.js.map +1 -0
- package/dist/stream.d.ts +3 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +48 -1
- package/dist/stream.js.map +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +68 -14
- 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/completion.d.ts +8 -0
- package/dist/transcript/completion.d.ts.map +1 -0
- package/dist/transcript/completion.js +57 -0
- package/dist/transcript/completion.js.map +1 -0
- package/dist/transcript/cursor.d.ts +25 -0
- package/dist/transcript/cursor.d.ts.map +1 -0
- package/dist/transcript/cursor.js +62 -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/native-hash.d.ts +2 -0
- package/dist/transcript/native-hash.d.ts.map +1 -0
- package/dist/transcript/native-hash.js +79 -0
- package/dist/transcript/native-hash.js.map +1 -0
- package/dist/transcript/opened-file.d.ts +13 -0
- package/dist/transcript/opened-file.d.ts.map +1 -0
- package/dist/transcript/opened-file.js +110 -0
- package/dist/transcript/opened-file.js.map +1 -0
- package/dist/transcript/parallel-tools.d.ts +6 -0
- package/dist/transcript/parallel-tools.d.ts.map +1 -0
- package/dist/transcript/parallel-tools.js +123 -0
- package/dist/transcript/parallel-tools.js.map +1 -0
- package/dist/transcript/path.d.ts +25 -0
- package/dist/transcript/path.d.ts.map +1 -0
- package/dist/transcript/path.js +253 -0
- package/dist/transcript/path.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 +476 -0
- package/dist/transcript/reader.js.map +1 -0
- package/dist/transcript/rewrites.d.ts +5 -0
- package/dist/transcript/rewrites.d.ts.map +1 -0
- package/dist/transcript/rewrites.js +65 -0
- package/dist/transcript/rewrites.js.map +1 -0
- package/dist/types.d.ts +33 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
package/dist/supervisor.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { mkdir, open } from 'node:fs/promises';
|
|
10
10
|
import { dirname } from 'node:path';
|
|
11
11
|
import { removeEmptyLogFile, SupervisedChild, } from '@excitedjs/dreamux-utils';
|
|
12
|
-
import { ClaudeCodeStreamRpc } from './rpc.js';
|
|
12
|
+
import { ClaudeCodeStreamRpc, ClaudeSteerAdmissionError, } from './rpc.js';
|
|
13
13
|
/** The live session: spawns and supervises the real `claude` child. */
|
|
14
14
|
class LiveClaudeCodeSession {
|
|
15
15
|
spec;
|
|
@@ -17,6 +17,9 @@ class LiveClaudeCodeSession {
|
|
|
17
17
|
child = null;
|
|
18
18
|
exited = false;
|
|
19
19
|
stopped = false;
|
|
20
|
+
stopRequested = false;
|
|
21
|
+
startTask = null;
|
|
22
|
+
stopTask = null;
|
|
20
23
|
rpc = null;
|
|
21
24
|
onExitHandler = null;
|
|
22
25
|
constructor(spec) {
|
|
@@ -25,16 +28,37 @@ class LiveClaudeCodeSession {
|
|
|
25
28
|
isAlive() {
|
|
26
29
|
return this.child !== null && !this.exited;
|
|
27
30
|
}
|
|
28
|
-
|
|
31
|
+
start() {
|
|
32
|
+
if (this.stopRequested || this.stopped) {
|
|
33
|
+
return Promise.reject(new Error('ClaudeCodeSession.start: stopped'));
|
|
34
|
+
}
|
|
35
|
+
if (this.startTask !== null)
|
|
36
|
+
return this.startTask;
|
|
29
37
|
if (this.child !== null) {
|
|
30
|
-
|
|
38
|
+
return Promise.reject(new Error('ClaudeCodeSession.start: already started'));
|
|
31
39
|
}
|
|
40
|
+
const task = this.startSession();
|
|
41
|
+
this.startTask = task;
|
|
42
|
+
void task.finally(() => {
|
|
43
|
+
if (this.startTask === task)
|
|
44
|
+
this.startTask = null;
|
|
45
|
+
}).catch(() => undefined);
|
|
46
|
+
return task;
|
|
47
|
+
}
|
|
48
|
+
async startSession() {
|
|
49
|
+
this.assertStartAllowed();
|
|
32
50
|
await mkdir(this.spec.cwd, { recursive: true });
|
|
51
|
+
this.assertStartAllowed();
|
|
33
52
|
await mkdir(dirname(this.spec.stderrLogPath), { recursive: true });
|
|
53
|
+
this.assertStartAllowed();
|
|
34
54
|
// Open the stderr log as a FileHandle and hand its fd to the child. The
|
|
35
55
|
// handle is closed once the child owns the inherited fd (the finally),
|
|
36
56
|
// matching the timing discipline in codex/supervisor.ts.
|
|
37
57
|
const stderrHandle = await open(this.spec.stderrLogPath, 'a', 0o600);
|
|
58
|
+
if (this.stopRequested) {
|
|
59
|
+
await stderrHandle.close();
|
|
60
|
+
this.assertStartAllowed();
|
|
61
|
+
}
|
|
38
62
|
const supervisor = new SupervisedChild({
|
|
39
63
|
kind: 'spawn',
|
|
40
64
|
command: this.spec.bin,
|
|
@@ -49,6 +73,9 @@ class LiveClaudeCodeSession {
|
|
|
49
73
|
this.spec.log?.('warn', 'claude resident child error', error);
|
|
50
74
|
});
|
|
51
75
|
supervisor.onExit(() => this.onChildExit());
|
|
76
|
+
// Publish group-termination authority before spawn resolves. If a later
|
|
77
|
+
// setup step fails, runtime cleanup can still prove that no child remains.
|
|
78
|
+
this.supervisor = supervisor;
|
|
52
79
|
let child;
|
|
53
80
|
try {
|
|
54
81
|
child = await supervisor.start();
|
|
@@ -56,8 +83,8 @@ class LiveClaudeCodeSession {
|
|
|
56
83
|
finally {
|
|
57
84
|
await stderrHandle.close();
|
|
58
85
|
}
|
|
59
|
-
this.supervisor = supervisor;
|
|
60
86
|
this.child = child;
|
|
87
|
+
this.assertStartAllowed();
|
|
61
88
|
const stdin = child.stdin;
|
|
62
89
|
if (stdin === null) {
|
|
63
90
|
throw new Error('claude resident child spawned without stdin');
|
|
@@ -71,6 +98,7 @@ class LiveClaudeCodeSession {
|
|
|
71
98
|
});
|
|
72
99
|
},
|
|
73
100
|
onRemoteControlUrl: this.spec.onRemoteControlUrl,
|
|
101
|
+
onProtocolEvent: this.spec.onProtocolEvent,
|
|
74
102
|
});
|
|
75
103
|
this.rpc = rpc;
|
|
76
104
|
child.stdout?.setEncoding('utf8');
|
|
@@ -80,35 +108,55 @@ class LiveClaudeCodeSession {
|
|
|
80
108
|
if (this.spec.remoteControl)
|
|
81
109
|
rpc.enableRemoteControl();
|
|
82
110
|
}
|
|
83
|
-
async submitTurn(prompt, options = {}) {
|
|
84
|
-
if (this.stopped) {
|
|
111
|
+
async submitTurn(prompt, options = {}, commandUuid) {
|
|
112
|
+
if (this.stopRequested || this.stopped) {
|
|
85
113
|
return Promise.reject(new Error('claude resident session is stopped'));
|
|
86
114
|
}
|
|
87
115
|
if (this.child === null || this.exited || this.rpc === null) {
|
|
88
116
|
return Promise.reject(new Error('claude resident child is not running'));
|
|
89
117
|
}
|
|
90
|
-
return this.rpc.submitTurn(prompt, options);
|
|
118
|
+
return this.rpc.submitTurn(prompt, options, commandUuid);
|
|
91
119
|
}
|
|
92
|
-
async steerTurn(prompt, options = {}) {
|
|
93
|
-
if (this.stopped) {
|
|
94
|
-
return Promise.reject(new
|
|
120
|
+
async steerTurn(prompt, options = {}, commandUuid) {
|
|
121
|
+
if (this.stopRequested || this.stopped) {
|
|
122
|
+
return Promise.reject(new ClaudeSteerAdmissionError('failed', 'claude resident session is stopped before live steer'));
|
|
95
123
|
}
|
|
96
124
|
if (this.child === null || this.exited || this.rpc === null) {
|
|
97
|
-
return Promise.reject(new
|
|
125
|
+
return Promise.reject(new ClaudeSteerAdmissionError('failed', 'claude resident child is not running before live steer'));
|
|
98
126
|
}
|
|
99
|
-
return this.rpc.steerTurn(prompt, options);
|
|
127
|
+
return this.rpc.steerTurn(prompt, options, commandUuid);
|
|
100
128
|
}
|
|
101
129
|
async stop() {
|
|
102
130
|
if (this.stopped)
|
|
103
131
|
return;
|
|
104
|
-
this.
|
|
132
|
+
if (this.stopTask !== null)
|
|
133
|
+
return this.stopTask;
|
|
134
|
+
this.stopRequested = true;
|
|
135
|
+
const task = this.stopSession();
|
|
136
|
+
this.stopTask = task;
|
|
137
|
+
try {
|
|
138
|
+
await task;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (this.stopTask === task)
|
|
142
|
+
this.stopTask = null;
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async stopSession() {
|
|
105
147
|
// Mark exited up front so the child's own `exit` event (fired by the kill
|
|
106
148
|
// below) is treated as a deliberate stop, never an unexpected exit that
|
|
107
149
|
// would fire `onExit` and degrade the runtime we are intentionally tearing
|
|
108
150
|
// down.
|
|
109
151
|
this.exited = true;
|
|
110
152
|
this.rpc?.failPending(new Error('claude resident session stopped mid-turn'));
|
|
111
|
-
|
|
153
|
+
const supervisorAtStop = this.supervisor;
|
|
154
|
+
const supervisorStop = supervisorAtStop?.stop() ?? null;
|
|
155
|
+
void supervisorStop?.catch(() => undefined);
|
|
156
|
+
const supervisor = this.supervisor;
|
|
157
|
+
await (supervisor === supervisorAtStop && supervisorStop !== null
|
|
158
|
+
? supervisorStop
|
|
159
|
+
: supervisor?.stop());
|
|
112
160
|
this.exited = true;
|
|
113
161
|
this.rpc = null;
|
|
114
162
|
this.child = null;
|
|
@@ -117,6 +165,12 @@ class LiveClaudeCodeSession {
|
|
|
117
165
|
// log if it stayed empty — claude traffic flows over the resident stream, so
|
|
118
166
|
// it usually captures nothing (issue #182 logs stage).
|
|
119
167
|
await removeEmptyLogFile(this.spec.stderrLogPath);
|
|
168
|
+
this.stopped = true;
|
|
169
|
+
}
|
|
170
|
+
assertStartAllowed() {
|
|
171
|
+
if (this.stopRequested || this.stopped) {
|
|
172
|
+
throw new Error('ClaudeCodeSession.start: stopped during start');
|
|
173
|
+
}
|
|
120
174
|
}
|
|
121
175
|
onChildExit() {
|
|
122
176
|
if (this.exited)
|
package/dist/supervisor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,
|
|
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 ClaudeTranscriptBudget = TranscriptScanBudget;
|
|
3
|
+
export declare function createClaudeTranscriptBudget(input?: {
|
|
4
|
+
maxEntries?: number;
|
|
5
|
+
maxElapsedMs?: number;
|
|
6
|
+
now?: () => number;
|
|
7
|
+
}): ClaudeTranscriptBudget;
|
|
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,sBAAsB,GAAG,oBAAoB,CAAC;AAE1D,wBAAgB,4BAA4B,CAAC,KAAK,GAAE;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GAAG,sBAAsB,CAS9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createTranscriptScanBudget, } from '@excitedjs/dreamux-utils';
|
|
2
|
+
import { ClaudeTranscriptError } from './error.js';
|
|
3
|
+
export function createClaudeTranscriptBudget(input = {}) {
|
|
4
|
+
return createTranscriptScanBudget({
|
|
5
|
+
...input,
|
|
6
|
+
limitError: () => new ClaudeTranscriptError('scan_unsupported', 'Claude Code 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,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAInD,MAAM,UAAU,4BAA4B,CAAC,QAIzC,EAAE;IACJ,OAAO,0BAA0B,CAAC;QAChC,GAAG,KAAK;QACR,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,qBAAqB,CACvB,kBAAkB,EAClB,kEAAkE,CACnE;KACJ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ClaudeCompletionEntry {
|
|
2
|
+
value: Record<string, unknown>;
|
|
3
|
+
}
|
|
4
|
+
export declare function hasAssistantWithoutHumanBoundary(entries: readonly ClaudeCompletionEntry[]): boolean;
|
|
5
|
+
export declare function hasCompletionEvidence(entries: readonly ClaudeCompletionEntry[]): boolean;
|
|
6
|
+
export declare function hasOpenTail(entries: readonly ClaudeCompletionEntry[]): boolean;
|
|
7
|
+
export declare function isHumanPrompt(value: Record<string, unknown>): boolean;
|
|
8
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/transcript/completion.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,SAAS,qBAAqB,EAAE,GACxC,OAAO,CAUT;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,qBAAqB,EAAE,GACxC,OAAO,CAET;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,qBAAqB,EAAE,GACxC,OAAO,CAOT;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAYrE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function hasAssistantWithoutHumanBoundary(entries) {
|
|
2
|
+
return (entries.some((entry) => entry.value['type'] === 'assistant' &&
|
|
3
|
+
entry.value['isSidechain'] !== true &&
|
|
4
|
+
entry.value['isMeta'] !== true) &&
|
|
5
|
+
!entries.some((entry) => isHumanPrompt(entry.value)));
|
|
6
|
+
}
|
|
7
|
+
export function hasCompletionEvidence(entries) {
|
|
8
|
+
return entries.some((entry) => isCompletionMarker(entry.value));
|
|
9
|
+
}
|
|
10
|
+
export function hasOpenTail(entries) {
|
|
11
|
+
let open = false;
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
if (isHumanPrompt(entry.value))
|
|
14
|
+
open = true;
|
|
15
|
+
if (isCompletionMarker(entry.value))
|
|
16
|
+
open = false;
|
|
17
|
+
}
|
|
18
|
+
return open;
|
|
19
|
+
}
|
|
20
|
+
export function isHumanPrompt(value) {
|
|
21
|
+
if (value['type'] !== 'user' ||
|
|
22
|
+
value['isSidechain'] === true ||
|
|
23
|
+
value['isMeta'] === true) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const content = recordValue(value['message'])?.['content'];
|
|
27
|
+
if (typeof content === 'string')
|
|
28
|
+
return content !== '';
|
|
29
|
+
if (!Array.isArray(content))
|
|
30
|
+
return false;
|
|
31
|
+
return content.some((entry) => recordValue(entry)?.['type'] === 'text');
|
|
32
|
+
}
|
|
33
|
+
function isCompletionMarker(value) {
|
|
34
|
+
if (value['isSidechain'] === true || value['isMeta'] === true)
|
|
35
|
+
return false;
|
|
36
|
+
if (value['type'] === 'system') {
|
|
37
|
+
return value['subtype'] === 'turn_duration';
|
|
38
|
+
}
|
|
39
|
+
if (value['type'] !== 'assistant')
|
|
40
|
+
return false;
|
|
41
|
+
const message = recordValue(value['message']);
|
|
42
|
+
return (message?.['role'] === 'assistant' &&
|
|
43
|
+
isTerminalAssistantStopReason(message['stop_reason']));
|
|
44
|
+
}
|
|
45
|
+
function isTerminalAssistantStopReason(value) {
|
|
46
|
+
return (value === 'end_turn' ||
|
|
47
|
+
value === 'max_tokens' ||
|
|
48
|
+
value === 'stop_sequence' ||
|
|
49
|
+
value === 'refusal' ||
|
|
50
|
+
value === 'model_context_window_exceeded');
|
|
51
|
+
}
|
|
52
|
+
function recordValue(value) {
|
|
53
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
54
|
+
? value
|
|
55
|
+
: null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/transcript/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { transcriptDigest } from '@excitedjs/dreamux-utils';
|
|
2
|
+
interface ClaudeCursorEnvelope {
|
|
3
|
+
v: 1;
|
|
4
|
+
p: 'claude';
|
|
5
|
+
fp: string;
|
|
6
|
+
gen: string;
|
|
7
|
+
pos: number;
|
|
8
|
+
bd: string;
|
|
9
|
+
rw: number;
|
|
10
|
+
rp: number | null;
|
|
11
|
+
rd: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function claudeQueryFingerprint(includeTools: boolean): string;
|
|
14
|
+
export declare function encodeClaudeCursor(input: {
|
|
15
|
+
fingerprint: string;
|
|
16
|
+
generation: string;
|
|
17
|
+
position: number;
|
|
18
|
+
boundaryDigest: string;
|
|
19
|
+
rewriteWatermark: number;
|
|
20
|
+
rewritePosition: number | null;
|
|
21
|
+
rewriteDigest: string | null;
|
|
22
|
+
}): string;
|
|
23
|
+
export declare function decodeClaudeCursor(cursor: string, expectedFingerprint: string): ClaudeCursorEnvelope;
|
|
24
|
+
export { transcriptDigest as digest };
|
|
25
|
+
//# 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,UAAU,oBAAoB;IAC5B,CAAC,EAAE,CAAC,CAAC;IACL,CAAC,EAAE,QAAQ,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG,MAAM,CAaT;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,GAC1B,oBAAoB,CA0BtB;AA2BD,OAAO,EAAE,gBAAgB,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { isTranscriptDigest, transcriptDigest, } from '@excitedjs/dreamux-utils';
|
|
2
|
+
import { ClaudeTranscriptError } from './error.js';
|
|
3
|
+
export function claudeQueryFingerprint(includeTools) {
|
|
4
|
+
return transcriptDigest(JSON.stringify({ include_tools: includeTools }));
|
|
5
|
+
}
|
|
6
|
+
export function encodeClaudeCursor(input) {
|
|
7
|
+
const envelope = {
|
|
8
|
+
v: 1,
|
|
9
|
+
p: 'claude',
|
|
10
|
+
fp: input.fingerprint,
|
|
11
|
+
gen: input.generation,
|
|
12
|
+
pos: input.position,
|
|
13
|
+
bd: input.boundaryDigest,
|
|
14
|
+
rw: input.rewriteWatermark,
|
|
15
|
+
rp: input.rewritePosition,
|
|
16
|
+
rd: input.rewriteDigest,
|
|
17
|
+
};
|
|
18
|
+
return Buffer.from(JSON.stringify(envelope), 'utf8').toString('base64url');
|
|
19
|
+
}
|
|
20
|
+
export function decodeClaudeCursor(cursor, expectedFingerprint) {
|
|
21
|
+
let value;
|
|
22
|
+
try {
|
|
23
|
+
const decoded = Buffer.from(cursor, 'base64url');
|
|
24
|
+
if (decoded.length === 0 || decoded.length > 3072)
|
|
25
|
+
throw new Error('size');
|
|
26
|
+
value = JSON.parse(decoded.toString('utf8'));
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new ClaudeTranscriptError('cursor_invalid', 'Claude Code transcript cursor is invalid', { cause: error });
|
|
30
|
+
}
|
|
31
|
+
if (!isEnvelope(value)) {
|
|
32
|
+
throw new ClaudeTranscriptError('cursor_invalid', 'Claude Code transcript cursor is invalid');
|
|
33
|
+
}
|
|
34
|
+
if (value.fp !== expectedFingerprint) {
|
|
35
|
+
throw new ClaudeTranscriptError('cursor_query_mismatch', 'Claude Code transcript cursor belongs to a different query');
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function isEnvelope(value) {
|
|
40
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const record = value;
|
|
44
|
+
return (Object.keys(record).length === 9 &&
|
|
45
|
+
record['v'] === 1 &&
|
|
46
|
+
record['p'] === 'claude' &&
|
|
47
|
+
isTranscriptDigest(record['fp']) &&
|
|
48
|
+
isTranscriptDigest(record['gen']) &&
|
|
49
|
+
Number.isSafeInteger(record['pos']) &&
|
|
50
|
+
record['pos'] >= 0 &&
|
|
51
|
+
isTranscriptDigest(record['bd']) &&
|
|
52
|
+
Number.isSafeInteger(record['rw']) &&
|
|
53
|
+
record['rw'] >= 0 &&
|
|
54
|
+
(record['rp'] === null ||
|
|
55
|
+
(Number.isSafeInteger(record['rp']) &&
|
|
56
|
+
record['rp'] >= 0)) &&
|
|
57
|
+
(record['rd'] === null || isTranscriptDigest(record['rd'])) &&
|
|
58
|
+
((record['rp'] === null && record['rd'] === null) ||
|
|
59
|
+
(record['rp'] !== null && record['rd'] !== null)));
|
|
60
|
+
}
|
|
61
|
+
export { transcriptDigest as digest };
|
|
62
|
+
//# 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 ClaudeTranscriptError 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,qBACX,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,qBACX,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 @@
|
|
|
1
|
+
{"version":3,"file":"native-hash.d.ts","sourceRoot":"","sources":["../../src/transcript/native-hash.ts"],"names":[],"mappings":"AAQA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
const MASK_64 = (1n << 64n) - 1n;
|
|
2
|
+
const SECRET = [
|
|
3
|
+
0xa0761d6478bd642fn,
|
|
4
|
+
0xe7037ed1a0b428dbn,
|
|
5
|
+
0x8ebc6af09c88c6e3n,
|
|
6
|
+
0x589965cc75374cc3n,
|
|
7
|
+
];
|
|
8
|
+
export function claudeNativePathHash(value) {
|
|
9
|
+
return wyhash(new TextEncoder().encode(value), 0n).toString(36);
|
|
10
|
+
}
|
|
11
|
+
function wyhash(input, seed) {
|
|
12
|
+
let state = uint64(seed) ^ mix(uint64(seed) ^ SECRET[0], SECRET[1]);
|
|
13
|
+
let left;
|
|
14
|
+
let right;
|
|
15
|
+
const length = input.length;
|
|
16
|
+
if (length <= 16) {
|
|
17
|
+
if (length >= 4) {
|
|
18
|
+
const end = length - 4;
|
|
19
|
+
const quarter = (length >> 3) << 2;
|
|
20
|
+
left = (read(input, 0, 4) << 32n) | read(input, quarter, 4);
|
|
21
|
+
right =
|
|
22
|
+
(read(input, end, 4) << 32n) |
|
|
23
|
+
read(input, end - quarter, 4);
|
|
24
|
+
}
|
|
25
|
+
else if (length > 0) {
|
|
26
|
+
left =
|
|
27
|
+
(BigInt(input[0]) << 16n) |
|
|
28
|
+
(BigInt(input[length >> 1]) << 8n) |
|
|
29
|
+
BigInt(input[length - 1]);
|
|
30
|
+
right = 0n;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
left = 0n;
|
|
34
|
+
right = 0n;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const lanes = [state, state, state];
|
|
39
|
+
let offset = 0;
|
|
40
|
+
while (offset + 48 < length) {
|
|
41
|
+
for (let lane = 0; lane < lanes.length; lane += 1) {
|
|
42
|
+
lanes[lane] = mix(read(input, offset + 16 * lane, 8) ^ SECRET[lane + 1], read(input, offset + 16 * lane + 8, 8) ^ lanes[lane]);
|
|
43
|
+
}
|
|
44
|
+
offset += 48;
|
|
45
|
+
}
|
|
46
|
+
lanes[0] = lanes[0] ^ lanes[1] ^ lanes[2];
|
|
47
|
+
while (offset + 16 < length) {
|
|
48
|
+
lanes[0] = mix(read(input, offset, 8) ^ SECRET[1], read(input, offset + 8, 8) ^ lanes[0]);
|
|
49
|
+
offset += 16;
|
|
50
|
+
}
|
|
51
|
+
left = read(input, length - 16, 8);
|
|
52
|
+
right = read(input, length - 8, 8);
|
|
53
|
+
state = lanes[0];
|
|
54
|
+
}
|
|
55
|
+
const product = multiply(left ^ SECRET[1], right ^ state);
|
|
56
|
+
return mix(product.low ^ SECRET[0] ^ BigInt(length), product.high ^ SECRET[1]);
|
|
57
|
+
}
|
|
58
|
+
function read(input, offset, length) {
|
|
59
|
+
let value = 0n;
|
|
60
|
+
for (let index = 0; index < length; index += 1) {
|
|
61
|
+
value |= BigInt(input[offset + index] ?? 0) << BigInt(index * 8);
|
|
62
|
+
}
|
|
63
|
+
return uint64(value);
|
|
64
|
+
}
|
|
65
|
+
function mix(left, right) {
|
|
66
|
+
const product = multiply(left, right);
|
|
67
|
+
return product.low ^ product.high;
|
|
68
|
+
}
|
|
69
|
+
function multiply(left, right) {
|
|
70
|
+
const product = uint64(left) * uint64(right);
|
|
71
|
+
return {
|
|
72
|
+
low: uint64(product),
|
|
73
|
+
high: uint64(product >> 64n),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function uint64(value) {
|
|
77
|
+
return value & MASK_64;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=native-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-hash.js","sourceRoot":"","sources":["../../src/transcript/native-hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type FileHandle } from 'node:fs/promises';
|
|
2
|
+
export interface ClaudeOpenedTranscript {
|
|
3
|
+
handle: FileHandle;
|
|
4
|
+
path: string;
|
|
5
|
+
size: number;
|
|
6
|
+
dev: number | bigint;
|
|
7
|
+
ino: number | bigint;
|
|
8
|
+
}
|
|
9
|
+
export declare function openClaudeTranscript(candidate: string, canonicalRoot: string): Promise<ClaudeOpenedTranscript>;
|
|
10
|
+
export declare function validateClaudeSessionEvidence(opened: ClaudeOpenedTranscript, expectedSessionId: string, options?: {
|
|
11
|
+
maxReadChunkBytes?: number;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
//# 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;AASnE,MAAM,WAAW,sBAAsB;IACrC,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;AAID,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,sBAAsB,CAAC,CA4DjC;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,sBAAsB,EAC9B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3C,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|