@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.
Files changed (94) hide show
  1. package/README.md +43 -1
  2. package/dist/args.d.ts +2 -0
  3. package/dist/args.d.ts.map +1 -1
  4. package/dist/args.js +5 -0
  5. package/dist/args.js.map +1 -1
  6. package/dist/index.d.ts +2 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/provider.d.ts +5 -0
  10. package/dist/provider.d.ts.map +1 -1
  11. package/dist/provider.js +10 -4
  12. package/dist/provider.js.map +1 -1
  13. package/dist/rpc.d.ts +79 -6
  14. package/dist/rpc.d.ts.map +1 -1
  15. package/dist/rpc.js +329 -57
  16. package/dist/rpc.js.map +1 -1
  17. package/dist/runtime-deps.d.ts +30 -0
  18. package/dist/runtime-deps.d.ts.map +1 -0
  19. package/dist/runtime-deps.js +2 -0
  20. package/dist/runtime-deps.js.map +1 -0
  21. package/dist/runtime-session.d.ts +13 -0
  22. package/dist/runtime-session.d.ts.map +1 -0
  23. package/dist/runtime-session.js +41 -0
  24. package/dist/runtime-session.js.map +1 -0
  25. package/dist/runtime-submissions.d.ts +34 -0
  26. package/dist/runtime-submissions.d.ts.map +1 -0
  27. package/dist/runtime-submissions.js +200 -0
  28. package/dist/runtime-submissions.js.map +1 -0
  29. package/dist/runtime.d.ts +33 -131
  30. package/dist/runtime.d.ts.map +1 -1
  31. package/dist/runtime.js +286 -268
  32. package/dist/runtime.js.map +1 -1
  33. package/dist/skill-adapter.d.ts +11 -1
  34. package/dist/skill-adapter.d.ts.map +1 -1
  35. package/dist/skill-adapter.js +60 -7
  36. package/dist/skill-adapter.js.map +1 -1
  37. package/dist/skill-materializer.d.ts +6 -0
  38. package/dist/skill-materializer.d.ts.map +1 -0
  39. package/dist/skill-materializer.js +45 -0
  40. package/dist/skill-materializer.js.map +1 -0
  41. package/dist/source-reservation.d.ts +6 -0
  42. package/dist/source-reservation.d.ts.map +1 -0
  43. package/dist/source-reservation.js +48 -0
  44. package/dist/source-reservation.js.map +1 -0
  45. package/dist/stream.d.ts +3 -1
  46. package/dist/stream.d.ts.map +1 -1
  47. package/dist/stream.js +48 -1
  48. package/dist/stream.js.map +1 -1
  49. package/dist/supervisor.d.ts.map +1 -1
  50. package/dist/supervisor.js +68 -14
  51. package/dist/supervisor.js.map +1 -1
  52. package/dist/transcript/budget.d.ts +8 -0
  53. package/dist/transcript/budget.d.ts.map +1 -0
  54. package/dist/transcript/budget.js +9 -0
  55. package/dist/transcript/budget.js.map +1 -0
  56. package/dist/transcript/completion.d.ts +8 -0
  57. package/dist/transcript/completion.d.ts.map +1 -0
  58. package/dist/transcript/completion.js +57 -0
  59. package/dist/transcript/completion.js.map +1 -0
  60. package/dist/transcript/cursor.d.ts +25 -0
  61. package/dist/transcript/cursor.d.ts.map +1 -0
  62. package/dist/transcript/cursor.js +62 -0
  63. package/dist/transcript/cursor.js.map +1 -0
  64. package/dist/transcript/error.d.ts +9 -0
  65. package/dist/transcript/error.d.ts.map +1 -0
  66. package/dist/transcript/error.js +9 -0
  67. package/dist/transcript/error.js.map +1 -0
  68. package/dist/transcript/native-hash.d.ts +2 -0
  69. package/dist/transcript/native-hash.d.ts.map +1 -0
  70. package/dist/transcript/native-hash.js +79 -0
  71. package/dist/transcript/native-hash.js.map +1 -0
  72. package/dist/transcript/opened-file.d.ts +13 -0
  73. package/dist/transcript/opened-file.d.ts.map +1 -0
  74. package/dist/transcript/opened-file.js +110 -0
  75. package/dist/transcript/opened-file.js.map +1 -0
  76. package/dist/transcript/parallel-tools.d.ts +6 -0
  77. package/dist/transcript/parallel-tools.d.ts.map +1 -0
  78. package/dist/transcript/parallel-tools.js +123 -0
  79. package/dist/transcript/parallel-tools.js.map +1 -0
  80. package/dist/transcript/path.d.ts +25 -0
  81. package/dist/transcript/path.d.ts.map +1 -0
  82. package/dist/transcript/path.js +253 -0
  83. package/dist/transcript/path.js.map +1 -0
  84. package/dist/transcript/reader.d.ts +7 -0
  85. package/dist/transcript/reader.d.ts.map +1 -0
  86. package/dist/transcript/reader.js +476 -0
  87. package/dist/transcript/reader.js.map +1 -0
  88. package/dist/transcript/rewrites.d.ts +5 -0
  89. package/dist/transcript/rewrites.d.ts.map +1 -0
  90. package/dist/transcript/rewrites.js +65 -0
  91. package/dist/transcript/rewrites.js.map +1 -0
  92. package/dist/types.d.ts +33 -3
  93. package/dist/types.d.ts.map +1 -1
  94. package/package.json +4 -3
@@ -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
- async start() {
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
- throw new Error('ClaudeCodeSession.start: already started');
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 Error('claude resident session is stopped'));
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 Error('claude resident child is not running'));
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.stopped = true;
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
- await this.supervisor?.stop();
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)
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"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"}
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,9 @@
1
+ export class ClaudeTranscriptError extends Error {
2
+ reason;
3
+ name = 'AgentRuntimeTranscriptError';
4
+ constructor(reason, message, options = {}) {
5
+ super(message, options);
6
+ this.reason = reason;
7
+ }
8
+ }
9
+ //# sourceMappingURL=error.js.map
@@ -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,2 @@
1
+ export declare function claudeNativePathHash(value: string): string;
2
+ //# sourceMappingURL=native-hash.d.ts.map
@@ -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"}