@excitedjs/agent-runtime-claude-code 0.7.1-beta.259 → 0.8.0-alpha.g2c3ef6556fa8
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 +36 -24
- package/dist/activity/cursor.d.ts +0 -1
- package/dist/activity/cursor.d.ts.map +1 -1
- package/dist/activity/cursor.js +5 -10
- package/dist/activity/cursor.js.map +1 -1
- package/dist/activity/native-hash.js +1 -3
- package/dist/activity/native-hash.js.map +1 -1
- package/dist/activity/opened-file.d.ts +1 -3
- package/dist/activity/opened-file.d.ts.map +1 -1
- package/dist/activity/opened-file.js +17 -20
- package/dist/activity/opened-file.js.map +1 -1
- package/dist/activity/parallel-tools.js.map +1 -1
- package/dist/activity/path.d.ts +4 -7
- package/dist/activity/path.d.ts.map +1 -1
- package/dist/activity/path.js +38 -48
- package/dist/activity/path.js.map +1 -1
- package/dist/activity/reader.d.ts +1 -4
- package/dist/activity/reader.d.ts.map +1 -1
- package/dist/activity/reader.js +38 -68
- package/dist/activity/reader.js.map +1 -1
- package/dist/activity/rewrites.d.ts.map +1 -1
- package/dist/activity/rewrites.js +1 -3
- package/dist/activity/rewrites.js.map +1 -1
- package/dist/args.d.ts +3 -3
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js.map +1 -1
- package/dist/config.d.ts +9 -22
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -35
- package/dist/config.js.map +1 -1
- package/dist/control-rpc.d.ts +2 -2
- package/dist/control-rpc.d.ts.map +1 -1
- package/dist/control-rpc.js.map +1 -1
- package/dist/index.d.ts +8 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -12
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +14 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +38 -0
- package/dist/paths.js.map +1 -0
- package/dist/plugin.d.ts +16 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +11 -0
- package/dist/plugin.js.map +1 -0
- package/dist/provider.d.ts +7 -30
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +9 -32
- package/dist/provider.js.map +1 -1
- package/dist/rpc.d.ts +17 -10
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +83 -96
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-activity.d.ts +0 -1
- package/dist/runtime-activity.d.ts.map +1 -1
- package/dist/runtime-activity.js +53 -57
- package/dist/runtime-activity.js.map +1 -1
- package/dist/runtime-deps.d.ts +4 -5
- package/dist/runtime-deps.d.ts.map +1 -1
- package/dist/runtime.d.ts +0 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +29 -22
- package/dist/runtime.js.map +1 -1
- package/dist/skill-materializer.d.ts.map +1 -1
- package/dist/skill-materializer.js +1 -1
- package/dist/skill-materializer.js.map +1 -1
- package/dist/stream.d.ts +3 -10
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +12 -17
- package/dist/stream.js.map +1 -1
- package/dist/supervisor.d.ts +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +16 -16
- package/dist/supervisor.js.map +1 -1
- package/dist/tool-display.d.ts.map +1 -1
- package/dist/tool-display.js +66 -11
- package/dist/tool-display.js.map +1 -1
- package/dist/types.d.ts +7 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/dist/activity/budget.d.ts +0 -8
- package/dist/activity/budget.d.ts.map +0 -1
- package/dist/activity/budget.js +0 -9
- package/dist/activity/budget.js.map +0 -1
- package/dist/activity/error.d.ts +0 -16
- package/dist/activity/error.d.ts.map +0 -1
- package/dist/activity/error.js +0 -22
- package/dist/activity/error.js.map +0 -1
- package/dist/logger.d.ts +0 -7
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -26
- package/dist/logger.js.map +0 -1
- package/dist/provider-ref.d.ts +0 -8
- package/dist/provider-ref.d.ts.map +0 -1
- package/dist/provider-ref.js +0 -8
- package/dist/provider-ref.js.map +0 -1
- package/dist/runtime-session.d.ts +0 -8
- package/dist/runtime-session.d.ts.map +0 -1
- package/dist/runtime-session.js +0 -36
- package/dist/runtime-session.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# @excitedjs/agent-runtime-claude-code
|
|
2
2
|
|
|
3
|
-
The built-in **Claude Code**
|
|
4
|
-
[Dreamux](https://github.com/excitedjs/dreamux)
|
|
5
|
-
|
|
3
|
+
The built-in **Claude Code** Dreamux plugin, always loaded by
|
|
4
|
+
[Dreamux](https://github.com/excitedjs/dreamux). Its default export is the
|
|
5
|
+
plugin factory: the plugin contributes the Claude Code `AgentRuntimeProvider`,
|
|
6
|
+
published behind the stable `builtin:claude-code` alias.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
The provider it contributes implements the public `AgentRuntimeProvider`
|
|
9
|
+
contract from
|
|
8
10
|
[`@excitedjs/dreamux-types`](../../dreamux-types) against a resident `claude`
|
|
9
11
|
stream-json child: process supervision, the stream-json wire protocol (line
|
|
10
12
|
framing, result aggregation, control-request replies), pending-request idle
|
|
@@ -26,11 +28,20 @@ come from `@excitedjs/dreamux-utils`.
|
|
|
26
28
|
|
|
27
29
|
## Loading
|
|
28
30
|
|
|
29
|
-
Dreamux
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
through the
|
|
31
|
+
Dreamux always loads this package's plugin, which contributes the provider
|
|
32
|
+
under `builtin:claude-code` through the neutral plugin `contribute(host)`
|
|
33
|
+
hook; core supplies host contracts through the neutral create context.
|
|
34
|
+
External callers can construct the bare provider directly, without going
|
|
35
|
+
through the plugin:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { createClaudeCodeAgentRuntimeProvider } from '@excitedjs/agent-runtime-claude-code';
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The factory accepts the neutral create context plus optional test/embedder
|
|
42
|
+
seams (`resolveBinPath`, `sessionFactory`, `generateSessionId`); the plugin
|
|
43
|
+
(this package's default export) constructs the provider on package defaults
|
|
44
|
+
with none of these set.
|
|
34
45
|
|
|
35
46
|
## Resident session and request settlement
|
|
36
47
|
|
|
@@ -49,12 +60,13 @@ follow its result and does not decide when another input can be submitted.
|
|
|
49
60
|
Background native turns may run without a submission. Their activity and result
|
|
50
61
|
boundaries remain observable, but they settle no unrelated request and do not
|
|
51
62
|
terminate the resident process. Explicit inputs steered into a background turn
|
|
52
|
-
settle normally once they join it.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
settle normally once they join it. Command-lifecycle admission is assumed
|
|
64
|
+
always supported: there is no capability check, no version gate, and no
|
|
65
|
+
single-input fallback mode. Native `cancelled` can describe a hard failure; it
|
|
66
|
+
does not imply a user stop. Consumed commands retain their result membership
|
|
67
|
+
through terminal lifecycle frames. An unconsumed command that is cancelled,
|
|
68
|
+
refused or discarded settles as failed. Every native error result remains
|
|
69
|
+
observable, including UUID-less errors and the `success` arm with
|
|
58
70
|
`is_error: true` carrying API error text.
|
|
59
71
|
|
|
60
72
|
A setup error can precede `started` and omit the input UUID. It reports a failed
|
|
@@ -66,9 +78,9 @@ Core owns source deduplication, captured recipients and completion-token deliver
|
|
|
66
78
|
The provider owns native admission: `failed` means the command was proven not
|
|
67
79
|
written, while `ambiguous` means a native write may have been accepted and must
|
|
68
80
|
not be retried automatically. Runtime stop synchronously fences new input,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
terminates the supervised process group with absence proof, resolves unsettled
|
|
82
|
+
submissions as stopped, and drains already-started admission calls before it
|
|
83
|
+
resolves.
|
|
72
84
|
|
|
73
85
|
## Native sessions and transcripts
|
|
74
86
|
|
|
@@ -91,17 +103,17 @@ provide the pinned `sessionId` and optional `outputSchemaEnabled` result contrac
|
|
|
91
103
|
the exit handler receives its failure cause.
|
|
92
104
|
|
|
93
105
|
Session implementations own result validation and settlement. Their
|
|
94
|
-
`onProtocolEvent` callback reports native activity independently
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Emitting a callback alone no longer settles a
|
|
106
|
+
`onProtocolEvent` callback reports native activity independently, without
|
|
107
|
+
deciding settlement in runtime or Core: `result` events report a turn's
|
|
108
|
+
terminal outcome, and an `interrupted` event can report an independently known
|
|
109
|
+
interruption boundary. Emitting a callback alone no longer settles a
|
|
99
110
|
request. These are breaking changes to the Claude-specific extension seam;
|
|
100
111
|
the neutral `AgentRuntime` and `RuntimeSubmission` contracts are unchanged.
|
|
101
112
|
|
|
102
113
|
## Direct stream RPC consumers
|
|
103
114
|
|
|
104
|
-
|
|
115
|
+
`ClaudeCodeStreamRpc` (package-internal; see `./rpc.ts`, no longer part of the
|
|
116
|
+
public barrel) has the same single `submit()` path, returning
|
|
105
117
|
`Promise<RuntimeAdmission>` in place of `submitTurn()` and `steerTurn()`. Accepted
|
|
106
118
|
handles own eventual settlement; callers no longer await an aggregate window.
|
|
107
119
|
Replace `failPending(error)` with `fail(error)` for transport failure or `stop()`
|
|
@@ -10,7 +10,6 @@ interface ClaudeCursorEnvelope {
|
|
|
10
10
|
rp: number | null;
|
|
11
11
|
rd: string | null;
|
|
12
12
|
}
|
|
13
|
-
export declare function claudeQueryFingerprint(includeTools: boolean): string;
|
|
14
13
|
export declare function encodeClaudeCursor(input: {
|
|
15
14
|
fingerprint: string;
|
|
16
15
|
generation: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/activity/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/activity/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACX,MAAM,0BAA0B,CAAC;AAElC,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,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;AA0BD,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,CAAC"}
|
package/dist/activity/cursor.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import { isScanDigest, scanDigest, } from '@excitedjs/dreamux-utils';
|
|
2
|
-
import { ClaudeActivityError } from './error.js';
|
|
3
|
-
export function claudeQueryFingerprint(includeTools) {
|
|
4
|
-
return scanDigest(JSON.stringify({ include_tools: includeTools }));
|
|
5
|
-
}
|
|
1
|
+
import { ActivityError, isScanDigest, scanDigest, } from '@excitedjs/dreamux-utils';
|
|
6
2
|
export function encodeClaudeCursor(input) {
|
|
7
3
|
const envelope = {
|
|
8
4
|
v: 1,
|
|
@@ -26,13 +22,13 @@ export function decodeClaudeCursor(cursor, expectedFingerprint) {
|
|
|
26
22
|
value = JSON.parse(decoded.toString('utf8'));
|
|
27
23
|
}
|
|
28
24
|
catch (error) {
|
|
29
|
-
throw new
|
|
25
|
+
throw new ActivityError('cursor_invalid', 'Claude Code activity cursor is invalid', { cause: error });
|
|
30
26
|
}
|
|
31
27
|
if (!isEnvelope(value)) {
|
|
32
|
-
throw new
|
|
28
|
+
throw new ActivityError('cursor_invalid', 'Claude Code activity cursor is invalid');
|
|
33
29
|
}
|
|
34
30
|
if (value.fp !== expectedFingerprint) {
|
|
35
|
-
throw new
|
|
31
|
+
throw new ActivityError('cursor_query_mismatch', 'Claude Code activity cursor belongs to a different query');
|
|
36
32
|
}
|
|
37
33
|
return value;
|
|
38
34
|
}
|
|
@@ -52,8 +48,7 @@ function isEnvelope(value) {
|
|
|
52
48
|
Number.isSafeInteger(record['rw']) &&
|
|
53
49
|
record['rw'] >= 0 &&
|
|
54
50
|
(record['rp'] === null ||
|
|
55
|
-
(Number.isSafeInteger(record['rp']) &&
|
|
56
|
-
record['rp'] >= 0)) &&
|
|
51
|
+
(Number.isSafeInteger(record['rp']) && record['rp'] >= 0)) &&
|
|
57
52
|
(record['rd'] === null || isScanDigest(record['rd'])) &&
|
|
58
53
|
((record['rp'] === null && record['rd'] === null) ||
|
|
59
54
|
(record['rp'] !== null && record['rd'] !== null)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/activity/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,GACX,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/activity/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,7 @@ function wyhash(input, seed) {
|
|
|
18
18
|
const end = length - 4;
|
|
19
19
|
const quarter = (length >> 3) << 2;
|
|
20
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);
|
|
21
|
+
right = (read(input, end, 4) << 32n) | read(input, end - quarter, 4);
|
|
24
22
|
}
|
|
25
23
|
else if (length > 0) {
|
|
26
24
|
left =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-hash.js","sourceRoot":"","sources":["../../src/activity/native-hash.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AACjC,MAAM,MAAM,GAAG;IACb,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;CACX,CAAC;AAEX,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,MAAM,CAAC,KAAiB,EAAE,IAAY;IAC7C,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,IAAY,CAAC;IACjB,IAAI,KAAa,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,KAAK
|
|
1
|
+
{"version":3,"file":"native-hash.js","sourceRoot":"","sources":["../../src/activity/native-hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,5 @@ export interface ClaudeOpenedRollout {
|
|
|
7
7
|
ino: number | bigint;
|
|
8
8
|
}
|
|
9
9
|
export declare function openClaudeRollout(candidate: string, canonicalRoot: string): Promise<ClaudeOpenedRollout>;
|
|
10
|
-
export declare function validateClaudeSessionEvidence(opened: ClaudeOpenedRollout, expectedSessionId: string
|
|
11
|
-
maxReadChunkBytes?: number;
|
|
12
|
-
}): Promise<void>;
|
|
10
|
+
export declare function validateClaudeSessionEvidence(opened: ClaudeOpenedRollout, expectedSessionId: string): Promise<void>;
|
|
13
11
|
//# sourceMappingURL=opened-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opened-file.d.ts","sourceRoot":"","sources":["../../src/activity/opened-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"opened-file.d.ts","sourceRoot":"","sources":["../../src/activity/opened-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnE,MAAM,WAAW,mBAAmB;IAClC,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,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC,CA4D9B;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { constants } from 'node:fs';
|
|
2
2
|
import { open, realpath } from 'node:fs/promises';
|
|
3
|
-
import { isPathWithin, readBytesAt, } from '@excitedjs/dreamux-utils';
|
|
4
|
-
import { ClaudeActivityError } from './error.js';
|
|
3
|
+
import { ActivityError, isPathWithin, readBytesAt, } from '@excitedjs/dreamux-utils';
|
|
5
4
|
const MAX_METADATA_BYTES = 1_048_576;
|
|
6
5
|
export async function openClaudeRollout(candidate, canonicalRoot) {
|
|
7
6
|
let handle;
|
|
@@ -17,10 +16,10 @@ export async function openClaudeRollout(candidate, canonicalRoot) {
|
|
|
17
16
|
realpath(candidate),
|
|
18
17
|
]);
|
|
19
18
|
if (!opened.isFile()) {
|
|
20
|
-
throw new
|
|
19
|
+
throw new ActivityError('invalid', 'Claude Code activity is not a regular file');
|
|
21
20
|
}
|
|
22
21
|
if (!isPathWithin(canonicalRoot, canonicalPath)) {
|
|
23
|
-
throw new
|
|
22
|
+
throw new ActivityError('locator_outside_root', 'Claude Code activity is unavailable for this session');
|
|
24
23
|
}
|
|
25
24
|
const current = await open(canonicalPath, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0)).catch((error) => {
|
|
26
25
|
throw classifyOpenError(error);
|
|
@@ -28,7 +27,7 @@ export async function openClaudeRollout(candidate, canonicalRoot) {
|
|
|
28
27
|
try {
|
|
29
28
|
const currentStat = await current.stat();
|
|
30
29
|
if (opened.dev !== currentStat.dev || opened.ino !== currentStat.ino) {
|
|
31
|
-
throw new
|
|
30
|
+
throw new ActivityError('unreadable', 'Claude Code activity changed while opening');
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
finally {
|
|
@@ -44,52 +43,50 @@ export async function openClaudeRollout(candidate, canonicalRoot) {
|
|
|
44
43
|
}
|
|
45
44
|
catch (error) {
|
|
46
45
|
await handle.close().catch(() => undefined);
|
|
47
|
-
if (error instanceof
|
|
46
|
+
if (error instanceof ActivityError)
|
|
48
47
|
throw error;
|
|
49
|
-
throw new
|
|
48
|
+
throw new ActivityError('unreadable', 'Claude Code activity is unreadable', { cause: error });
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
|
-
export async function validateClaudeSessionEvidence(opened, expectedSessionId
|
|
51
|
+
export async function validateClaudeSessionEvidence(opened, expectedSessionId) {
|
|
53
52
|
const length = Math.min(opened.size, MAX_METADATA_BYTES + 1);
|
|
54
|
-
const data = await readBytesAt(opened.handle, 0, length
|
|
55
|
-
...(options.maxReadChunkBytes !== undefined
|
|
56
|
-
? { maxChunkBytes: options.maxReadChunkBytes }
|
|
57
|
-
: {}),
|
|
58
|
-
});
|
|
53
|
+
const data = await readBytesAt(opened.handle, 0, length);
|
|
59
54
|
let cursor = 0;
|
|
60
55
|
while (cursor < data.length) {
|
|
61
56
|
const newline = data.indexOf(0x0a, cursor);
|
|
62
57
|
if (newline < 0) {
|
|
63
58
|
if (opened.size > MAX_METADATA_BYTES) {
|
|
64
|
-
throw new
|
|
59
|
+
throw new ActivityError('invalid', 'Claude Code activity metadata record is oversized');
|
|
65
60
|
}
|
|
66
61
|
break;
|
|
67
62
|
}
|
|
68
63
|
const raw = data.subarray(cursor, newline).toString('utf8');
|
|
69
64
|
const value = parseRecord(raw);
|
|
70
65
|
if (value === null && raw.trim() !== '') {
|
|
71
|
-
throw new
|
|
66
|
+
throw new ActivityError('invalid', 'Claude Code activity contains invalid native metadata');
|
|
72
67
|
}
|
|
73
68
|
const sessionId = stringValue(value?.['sessionId']);
|
|
74
69
|
if (sessionId !== null) {
|
|
75
70
|
if (sessionId !== expectedSessionId) {
|
|
76
|
-
throw new
|
|
71
|
+
throw new ActivityError('session_mismatch', 'Claude Code activity does not belong to the selected session');
|
|
77
72
|
}
|
|
78
73
|
return;
|
|
79
74
|
}
|
|
80
75
|
cursor = newline + 1;
|
|
81
76
|
}
|
|
82
|
-
throw new
|
|
77
|
+
throw new ActivityError('invalid', 'Claude Code activity has no authoritative session metadata');
|
|
83
78
|
}
|
|
84
79
|
function classifyOpenError(error) {
|
|
85
80
|
const code = error.code;
|
|
86
81
|
if (code === 'ENOENT') {
|
|
87
|
-
return new
|
|
82
|
+
return new ActivityError('not_found', 'Claude Code activity is unavailable', { cause: error });
|
|
88
83
|
}
|
|
89
84
|
if (code === 'ELOOP') {
|
|
90
|
-
return new
|
|
85
|
+
return new ActivityError('locator_outside_root', 'Claude Code activity is unavailable for this session', { cause: error });
|
|
91
86
|
}
|
|
92
|
-
return new
|
|
87
|
+
return new ActivityError('unreadable', 'Claude Code activity is unreadable', {
|
|
88
|
+
cause: error,
|
|
89
|
+
});
|
|
93
90
|
}
|
|
94
91
|
function parseRecord(value) {
|
|
95
92
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opened-file.js","sourceRoot":"","sources":["../../src/activity/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,EACL,YAAY,EACZ,WAAW,GACZ,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"opened-file.js","sourceRoot":"","sources":["../../src/activity/opened-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-tools.js","sourceRoot":"","sources":["../../src/activity/parallel-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parallel-tools.js","sourceRoot":"","sources":["../../src/activity/parallel-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/activity/path.d.ts
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
import type { DreamuxEnvironment } from '@excitedjs/dreamux-types';
|
|
2
|
-
import { type
|
|
2
|
+
import { type ScanBudget } from '@excitedjs/dreamux-utils';
|
|
3
3
|
export interface ClaudeHistoryRoots {
|
|
4
4
|
configHome: string;
|
|
5
5
|
projects: string;
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
interface ClaudeValidatedHistory {
|
|
8
8
|
path: string;
|
|
9
9
|
root: string;
|
|
10
10
|
size: number;
|
|
11
11
|
dev: number | bigint;
|
|
12
12
|
ino: number | bigint;
|
|
13
13
|
}
|
|
14
|
-
export declare function claudeHistoryRoots(env?: DreamuxEnvironment, runtimeCwd?: string): ClaudeHistoryRoots;
|
|
15
|
-
export declare function deriveClaudeHistoryPath(sessionId: string, cwd: string, env?: DreamuxEnvironment): Promise<string>;
|
|
16
14
|
export declare function locateClaudeHistory(input: {
|
|
17
15
|
sessionId: string;
|
|
18
16
|
cwd: string;
|
|
19
|
-
locator?: string | null;
|
|
20
17
|
env?: DreamuxEnvironment;
|
|
21
|
-
budget?:
|
|
18
|
+
budget?: ScanBudget;
|
|
22
19
|
worktreePaths?: readonly string[];
|
|
23
20
|
}): Promise<ClaudeValidatedHistory>;
|
|
24
|
-
export
|
|
21
|
+
export {};
|
|
25
22
|
//# sourceMappingURL=path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/activity/path.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/activity/path.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,0BAA0B,CAAC;AA8BlC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAyCD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAuBlC"}
|
package/dist/activity/path.js
CHANGED
|
@@ -1,25 +1,35 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { opendir, realpath } from 'node:fs/promises';
|
|
3
|
-
import { dirname, isAbsolute, join, relative, resolve
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
|
-
import { isPathWithin } from '@excitedjs/dreamux-utils';
|
|
6
|
-
import {
|
|
7
|
-
import { ClaudeActivityError } from './error.js';
|
|
5
|
+
import { ActivityError, createScanBudget, isPathWithin, } from '@excitedjs/dreamux-utils';
|
|
6
|
+
import { resolveClaudeConfigHomeDir } from '../paths.js';
|
|
8
7
|
import { claudeNativePathHash } from './native-hash.js';
|
|
9
8
|
import { openClaudeRollout, validateClaudeSessionEvidence, } from './opened-file.js';
|
|
10
9
|
const MAX_SANITIZED_LENGTH = 200;
|
|
11
10
|
const SESSION_FILENAME = /^[0-9a-f]{8}-[0-9a-f-]{27}\.jsonl$/i;
|
|
12
11
|
const execFileAsync = promisify(execFile);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const SCAN_BUDGET_EXCEEDED_MESSAGE = 'Claude Code activity discovery exceeded its bounded scan limit';
|
|
13
|
+
/** The default bounded budget for a Claude Code activity discovery scan. */
|
|
14
|
+
function createClaudeScanBudget(input = {}) {
|
|
15
|
+
return createScanBudget({
|
|
16
|
+
...input,
|
|
17
|
+
limitError: () => new ActivityError('scan_unsupported', SCAN_BUDGET_EXCEEDED_MESSAGE),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function claudeHistoryRoots(env = process.env, runtimeCwd = process.cwd()) {
|
|
21
|
+
// resolveClaudeConfigHomeDir is pure/non-throwing (it falls back to this
|
|
22
|
+
// process's own home directory when HOME is absent); the guard here
|
|
23
|
+
// preserves this reader's own typed-error contract for that case instead.
|
|
24
|
+
if ((env['CLAUDE_CONFIG_DIR'] === undefined ||
|
|
25
|
+
env['CLAUDE_CONFIG_DIR'] === '') &&
|
|
26
|
+
(env['HOME'] === undefined || env['HOME'] === '')) {
|
|
27
|
+
throw new ActivityError('not_found', 'Claude Code config home is unavailable');
|
|
28
|
+
}
|
|
29
|
+
const configHome = resolveClaudeConfigHomeDir(env, runtimeCwd).normalize('NFC');
|
|
20
30
|
return { configHome, projects: join(configHome, 'projects') };
|
|
21
31
|
}
|
|
22
|
-
|
|
32
|
+
async function deriveClaudeHistoryPath(sessionId, cwd, env = process.env) {
|
|
23
33
|
assertSessionId(sessionId);
|
|
24
34
|
const roots = claudeHistoryRoots(env, cwd);
|
|
25
35
|
const canonicalCwd = await canonicalRuntimeCwd(cwd);
|
|
@@ -30,17 +40,6 @@ export async function locateClaudeHistory(input) {
|
|
|
30
40
|
assertSessionId(input.sessionId);
|
|
31
41
|
const budget = input.budget ?? createClaudeScanBudget();
|
|
32
42
|
const roots = claudeHistoryRoots(input.env, input.cwd);
|
|
33
|
-
if (input.locator !== null && input.locator !== undefined) {
|
|
34
|
-
try {
|
|
35
|
-
return await validateClaudeHistoryPath(input.locator, input.sessionId, roots);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
if (!(error instanceof ClaudeActivityError) ||
|
|
39
|
-
error.detail !== 'not_found') {
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
43
|
const candidates = await discoveryCandidates({
|
|
45
44
|
roots,
|
|
46
45
|
sessionId: input.sessionId,
|
|
@@ -54,26 +53,25 @@ export async function locateClaudeHistory(input) {
|
|
|
54
53
|
return await validateClaudeHistoryPath(candidate, input.sessionId, roots);
|
|
55
54
|
}
|
|
56
55
|
catch (error) {
|
|
57
|
-
if (error instanceof
|
|
58
|
-
error.detail === 'not_found') {
|
|
56
|
+
if (error instanceof ActivityError && error.detail === 'not_found') {
|
|
59
57
|
continue;
|
|
60
58
|
}
|
|
61
59
|
throw error;
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
|
-
throw new
|
|
62
|
+
throw new ActivityError('not_found', 'Claude Code activity is unavailable');
|
|
65
63
|
}
|
|
66
|
-
|
|
64
|
+
async function validateClaudeHistoryPath(candidate, sessionId, roots) {
|
|
67
65
|
if (!isAbsolute(candidate) ||
|
|
68
66
|
!SESSION_FILENAME.test(candidate.split(/[\\/]/).at(-1) ?? '') ||
|
|
69
67
|
!candidate.endsWith(`${sessionId}.jsonl`)) {
|
|
70
|
-
throw new
|
|
68
|
+
throw new ActivityError('invalid', 'Claude Code activity locator is not a native session path');
|
|
71
69
|
}
|
|
72
70
|
const canonicalProjects = await canonicalExistingRoot(roots.projects);
|
|
73
71
|
const opened = await openClaudeRollout(candidate, canonicalProjects);
|
|
74
72
|
try {
|
|
75
73
|
if (opened.size === 0) {
|
|
76
|
-
throw new
|
|
74
|
+
throw new ActivityError('not_found', 'Claude Code activity is unavailable');
|
|
77
75
|
}
|
|
78
76
|
await validateClaudeSessionEvidence(opened, sessionId);
|
|
79
77
|
return {
|
|
@@ -92,8 +90,7 @@ function sanitizePath(name) {
|
|
|
92
90
|
const sanitized = name.replace(/[^a-zA-Z0-9]/g, '-');
|
|
93
91
|
if (sanitized.length <= MAX_SANITIZED_LENGTH)
|
|
94
92
|
return sanitized;
|
|
95
|
-
return (`${sanitized.slice(0, MAX_SANITIZED_LENGTH)}-` +
|
|
96
|
-
claudeNativePathHash(name));
|
|
93
|
+
return (`${sanitized.slice(0, MAX_SANITIZED_LENGTH)}-` + claudeNativePathHash(name));
|
|
97
94
|
}
|
|
98
95
|
async function discoveryCandidates(input) {
|
|
99
96
|
const result = [];
|
|
@@ -140,7 +137,7 @@ async function readProjectDirectories(roots, budget) {
|
|
|
140
137
|
catch (error) {
|
|
141
138
|
if (error.code === 'ENOENT')
|
|
142
139
|
return [];
|
|
143
|
-
throw new
|
|
140
|
+
throw new ActivityError('unreadable', 'Claude Code activity root is unreadable', { cause: error });
|
|
144
141
|
}
|
|
145
142
|
const entries = [];
|
|
146
143
|
try {
|
|
@@ -151,11 +148,11 @@ async function readProjectDirectories(roots, budget) {
|
|
|
151
148
|
}
|
|
152
149
|
}
|
|
153
150
|
catch (error) {
|
|
154
|
-
if (error instanceof
|
|
151
|
+
if (error instanceof ActivityError)
|
|
155
152
|
throw error;
|
|
156
153
|
if (error.code === 'ENOENT')
|
|
157
154
|
return entries;
|
|
158
|
-
throw new
|
|
155
|
+
throw new ActivityError('unreadable', 'Claude Code activity root is unreadable', { cause: error });
|
|
159
156
|
}
|
|
160
157
|
return entries;
|
|
161
158
|
}
|
|
@@ -185,7 +182,7 @@ async function canonicalProspectivePath(candidate, root) {
|
|
|
185
182
|
canonicalizeProspectivePath(root),
|
|
186
183
|
]);
|
|
187
184
|
if (!isPathWithin(canonicalRoot, canonicalCandidate)) {
|
|
188
|
-
throw new
|
|
185
|
+
throw new ActivityError('locator_outside_root', 'Claude Code activity is unavailable for this session');
|
|
189
186
|
}
|
|
190
187
|
return canonicalCandidate;
|
|
191
188
|
}
|
|
@@ -197,7 +194,7 @@ async function canonicalRuntimeCwd(cwd) {
|
|
|
197
194
|
if (error.code === 'ENOENT') {
|
|
198
195
|
return resolve(cwd);
|
|
199
196
|
}
|
|
200
|
-
throw new
|
|
197
|
+
throw new ActivityError('unreadable', 'Claude Code runtime cwd is unreadable', { cause: error });
|
|
201
198
|
}
|
|
202
199
|
}
|
|
203
200
|
async function canonicalizeProspectivePath(path) {
|
|
@@ -211,12 +208,12 @@ async function canonicalizeProspectivePath(path) {
|
|
|
211
208
|
catch (error) {
|
|
212
209
|
const code = error.code;
|
|
213
210
|
if (code !== 'ENOENT') {
|
|
214
|
-
throw new
|
|
211
|
+
throw new ActivityError('unreadable', 'Claude Code activity path is unreadable', { cause: error });
|
|
215
212
|
}
|
|
216
213
|
}
|
|
217
214
|
const parent = dirname(ancestor);
|
|
218
215
|
if (parent === ancestor) {
|
|
219
|
-
throw new
|
|
216
|
+
throw new ActivityError('not_found', 'Claude Code activity root is unavailable');
|
|
220
217
|
}
|
|
221
218
|
ancestor = parent;
|
|
222
219
|
}
|
|
@@ -227,9 +224,9 @@ async function canonicalExistingRoot(root) {
|
|
|
227
224
|
}
|
|
228
225
|
catch (error) {
|
|
229
226
|
if (error.code === 'ENOENT') {
|
|
230
|
-
throw new
|
|
227
|
+
throw new ActivityError('not_found', 'Claude Code activity root is unavailable', { cause: error });
|
|
231
228
|
}
|
|
232
|
-
throw new
|
|
229
|
+
throw new ActivityError('unreadable', 'Claude Code activity root is unreadable', { cause: error });
|
|
233
230
|
}
|
|
234
231
|
}
|
|
235
232
|
function pushUnique(result, seen, value) {
|
|
@@ -240,14 +237,7 @@ function pushUnique(result, seen, value) {
|
|
|
240
237
|
}
|
|
241
238
|
function assertSessionId(sessionId) {
|
|
242
239
|
if (!/^[0-9a-f]{8}-[0-9a-f-]{27}$/i.test(sessionId)) {
|
|
243
|
-
throw new
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
function requireHome(env) {
|
|
247
|
-
const home = env['HOME'];
|
|
248
|
-
if (home === undefined || home === '') {
|
|
249
|
-
throw new ClaudeActivityError('not_found', 'Claude Code config home is unavailable');
|
|
240
|
+
throw new ActivityError('invalid', 'Claude Code session id is invalid');
|
|
250
241
|
}
|
|
251
|
-
return home;
|
|
252
242
|
}
|
|
253
243
|
//# sourceMappingURL=path.js.map
|