kiokuko-dsh 0.1.99 → 0.2.1
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/PERMISSIONS.md +30 -25
- package/README.ja.md +6 -12
- package/README.ko.md +12 -18
- package/README.md +7 -12
- package/README.zh-CN.md +12 -17
- package/THIRD_PARTY_NOTICES.md +5 -5
- package/dist/client.cjs +4 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/dsh/agenticreplay-command-surface.d.ts +5 -0
- package/dist/dsh/agenticreplay-command-surface.d.ts.map +1 -0
- package/dist/dsh/{orca-command-surface.js → agenticreplay-command-surface.js} +15 -15
- package/dist/dsh/agenticreplay-command-surface.js.map +1 -0
- package/dist/dsh/{orca-event-mapper.d.ts → agenticreplay-event-mapper.d.ts} +7 -7
- package/dist/dsh/agenticreplay-event-mapper.d.ts.map +1 -0
- package/dist/dsh/{orca-event-mapper.js → agenticreplay-event-mapper.js} +9 -9
- package/dist/dsh/agenticreplay-event-mapper.js.map +1 -0
- package/dist/dsh/agenticreplay-files.d.ts +21 -0
- package/dist/dsh/agenticreplay-files.d.ts.map +1 -0
- package/dist/dsh/{orca-files.js → agenticreplay-files.js} +32 -31
- package/dist/dsh/agenticreplay-files.js.map +1 -0
- package/dist/dsh/agenticreplay-hooks.d.ts +5 -0
- package/dist/dsh/agenticreplay-hooks.d.ts.map +1 -0
- package/dist/dsh/{orca-hooks.js → agenticreplay-hooks.js} +2 -2
- package/dist/dsh/agenticreplay-hooks.js.map +1 -0
- package/dist/dsh/{orca-host.d.ts → agenticreplay-host.d.ts} +5 -5
- package/dist/dsh/agenticreplay-host.d.ts.map +1 -0
- package/dist/dsh/{orca-host.js → agenticreplay-host.js} +15 -15
- package/dist/dsh/agenticreplay-host.js.map +1 -0
- package/dist/dsh/agenticreplay-libraries.d.ts +85 -0
- package/dist/dsh/agenticreplay-libraries.d.ts.map +1 -0
- package/dist/dsh/agenticreplay-libraries.js +23 -0
- package/dist/dsh/agenticreplay-libraries.js.map +1 -0
- package/dist/dsh/agenticreplay-read-service.d.ts +21 -0
- package/dist/dsh/agenticreplay-read-service.d.ts.map +1 -0
- package/dist/dsh/{orca-read-service.js → agenticreplay-read-service.js} +28 -26
- package/dist/dsh/agenticreplay-read-service.js.map +1 -0
- package/dist/dsh/{orca-recorder.d.ts → agenticreplay-recorder.d.ts} +21 -21
- package/dist/dsh/agenticreplay-recorder.d.ts.map +1 -0
- package/dist/dsh/{orca-recorder.js → agenticreplay-recorder.js} +38 -48
- package/dist/dsh/agenticreplay-recorder.js.map +1 -0
- package/dist/dsh/{orca-security.d.ts → agenticreplay-security.d.ts} +7 -5
- package/dist/dsh/agenticreplay-security.d.ts.map +1 -0
- package/dist/dsh/agenticreplay-security.js +228 -0
- package/dist/dsh/agenticreplay-security.js.map +1 -0
- package/dist/dsh/agenticreplay-session-choice.d.ts +24 -0
- package/dist/dsh/agenticreplay-session-choice.d.ts.map +1 -0
- package/dist/dsh/{orca-session-choice.js → agenticreplay-session-choice.js} +10 -10
- package/dist/dsh/agenticreplay-session-choice.js.map +1 -0
- package/dist/dsh/agenticreplay-status-presentation.d.ts +6 -0
- package/dist/dsh/agenticreplay-status-presentation.d.ts.map +1 -0
- package/dist/dsh/{orca-status-presentation.js → agenticreplay-status-presentation.js} +14 -14
- package/dist/dsh/agenticreplay-status-presentation.js.map +1 -0
- package/dist/dsh/agenticreplay-store.d.ts +16 -0
- package/dist/dsh/agenticreplay-store.d.ts.map +1 -0
- package/dist/dsh/agenticreplay-store.js +42 -0
- package/dist/dsh/agenticreplay-store.js.map +1 -0
- package/dist/dsh/agenticreplay-types.d.ts +64 -0
- package/dist/dsh/agenticreplay-types.d.ts.map +1 -0
- package/dist/dsh/{orca-types.js → agenticreplay-types.js} +5 -5
- package/dist/dsh/agenticreplay-types.js.map +1 -0
- package/dist/dsh/composition.d.ts +1 -1
- package/dist/dsh/composition.d.ts.map +1 -1
- package/dist/dsh/composition.js +4 -1
- package/dist/dsh/composition.js.map +1 -1
- package/dist/dsh/config.d.ts +4 -3
- package/dist/dsh/config.d.ts.map +1 -1
- package/dist/dsh/config.js +4 -2
- package/dist/dsh/config.js.map +1 -1
- package/dist/dsh/core/host.d.ts.map +1 -1
- package/dist/dsh/core/host.js +6 -25
- package/dist/dsh/core/host.js.map +1 -1
- package/dist/dsh/decisions/akinator-classification.d.ts +3 -3
- package/dist/dsh/decisions/akinator-classification.d.ts.map +1 -1
- package/dist/dsh/decisions/akinator-classification.js +14 -58
- package/dist/dsh/decisions/akinator-classification.js.map +1 -1
- package/dist/dsh/execution-support.d.ts +10 -0
- package/dist/dsh/execution-support.d.ts.map +1 -1
- package/dist/dsh/execution-support.js +25 -9
- package/dist/dsh/execution-support.js.map +1 -1
- package/dist/dsh/host-adapter/memory-application-host.d.ts +2 -0
- package/dist/dsh/host-adapter/memory-application-host.d.ts.map +1 -1
- package/dist/dsh/host-adapter/memory-application-host.js +1 -0
- package/dist/dsh/host-adapter/memory-application-host.js.map +1 -1
- package/dist/dsh/host-adapter/routing.d.ts.map +1 -1
- package/dist/dsh/host-adapter/routing.js +1 -22
- package/dist/dsh/host-adapter/routing.js.map +1 -1
- package/dist/dsh/host-adapter.d.ts +2 -2
- package/dist/dsh/host-adapter.d.ts.map +1 -1
- package/dist/dsh/host-adapter.js +16 -10
- package/dist/dsh/host-adapter.js.map +1 -1
- package/dist/dsh/index.d.ts +7 -5
- package/dist/dsh/index.d.ts.map +1 -1
- package/dist/dsh/index.js +12 -12
- package/dist/dsh/index.js.map +1 -1
- package/dist/dsh/legacy-session-codecs.js +627 -7
- package/dist/dsh/legacy-session-codecs.js.map +3 -3
- package/dist/dsh/lisp/contracts.js +1 -1
- package/dist/dsh/lisp/contracts.js.map +1 -1
- package/dist/dsh/live-approval-config.js +1 -1
- package/dist/dsh/live-approval-config.js.map +1 -1
- package/dist/dsh/memory-application.d.ts +3 -1
- package/dist/dsh/memory-application.d.ts.map +1 -1
- package/dist/dsh/memory-application.js +2 -2
- package/dist/dsh/memory-application.js.map +1 -1
- package/dist/dsh/modules/enno.js +1 -1
- package/dist/dsh/modules/enno.js.map +1 -1
- package/dist/dsh/native-search.d.ts +3 -0
- package/dist/dsh/native-search.d.ts.map +1 -0
- package/dist/dsh/native-search.js +31 -0
- package/dist/dsh/native-search.js.map +1 -0
- package/dist/dsh/on-demand-intake.d.ts +7 -2
- package/dist/dsh/on-demand-intake.d.ts.map +1 -1
- package/dist/dsh/on-demand-intake.js +38 -9
- package/dist/dsh/on-demand-intake.js.map +1 -1
- package/dist/dsh/orchestration/managed-agent-executor.d.ts +20 -14
- package/dist/dsh/orchestration/managed-agent-executor.d.ts.map +1 -1
- package/dist/dsh/orchestration/managed-agent-executor.js +18 -6
- package/dist/dsh/orchestration/managed-agent-executor.js.map +1 -1
- package/dist/dsh/paths.d.ts +1 -1
- package/dist/dsh/paths.d.ts.map +1 -1
- package/dist/dsh/paths.js +2 -2
- package/dist/dsh/paths.js.map +1 -1
- package/dist/dsh/setup.d.ts +1 -1
- package/dist/dsh/setup.d.ts.map +1 -1
- package/dist/dsh/setup.js +2 -0
- package/dist/dsh/setup.js.map +1 -1
- package/dist/dsh/skill-prompts.json +1 -1
- package/dist/index.js +2 -2
- package/dist/locale/en.json +1 -1
- package/dist/locale/ja.json +1 -1
- package/dist/locale/ko.json +1 -1
- package/dist/locale/zh-CN.json +1 -1
- package/dist/memory/application.d.ts +4 -1
- package/dist/memory/application.d.ts.map +1 -1
- package/dist/memory/application.js +4 -3
- package/dist/memory/application.js.map +1 -1
- package/docs/{orca-recording.md → agenticreplay-recording.md} +70 -38
- package/docs/agenticreplay-verification.md +54 -0
- package/docs/core-modules.md +2 -2
- package/docs/deep-planning.md +4 -4
- package/docs/dsh-plugin.md +23 -24
- package/docs/execution-support.md +2 -2
- package/docs/getting-started.ja.md +1 -1
- package/docs/getting-started.md +1 -1
- package/docs/harness-map.md +1 -1
- package/docs/keyboard-shortcuts.md +1 -2
- package/docs/lisp-verification.md +1 -1
- package/docs/lisp.md +19 -10
- package/docs/memory-application.md +1 -1
- package/docs/memory-lifecycle-verification.md +1 -1
- package/docs/model-selection.ja.md +1 -1
- package/docs/model-selection.md +1 -1
- package/docs/on-demand-intake.md +4 -4
- package/docs/pr72-ci-verification.md +3 -4
- package/docs/session-history-repair.md +1 -1
- package/docs/token-efficiency.md +2 -2
- package/docs/tool-exposure.md +4 -4
- package/docs/typed-decisions.md +13 -8
- package/dsh/cordis.patch.yml +1 -1
- package/migrations/034_agenticreplay.sql +42 -0
- package/package.json +36 -22
- package/scripts/repair-continuation-source.mjs +21 -13
- package/scripts/verify-lisp-vendor.mjs +4 -2
- package/skills/kiokuko-lisp/SKILL.md +11 -6
- package/skills/kiokuko-soul/SKILL.md +14 -12
- package/dist/dsh/memory-review-presentation.d.ts +0 -10
- package/dist/dsh/memory-review-presentation.d.ts.map +0 -1
- package/dist/dsh/memory-review-presentation.js +0 -29
- package/dist/dsh/memory-review-presentation.js.map +0 -1
- package/dist/dsh/orca-command-surface.d.ts +0 -5
- package/dist/dsh/orca-command-surface.d.ts.map +0 -1
- package/dist/dsh/orca-command-surface.js.map +0 -1
- package/dist/dsh/orca-event-mapper.d.ts.map +0 -1
- package/dist/dsh/orca-event-mapper.js.map +0 -1
- package/dist/dsh/orca-files.d.ts +0 -21
- package/dist/dsh/orca-files.d.ts.map +0 -1
- package/dist/dsh/orca-files.js.map +0 -1
- package/dist/dsh/orca-hooks.d.ts +0 -5
- package/dist/dsh/orca-hooks.d.ts.map +0 -1
- package/dist/dsh/orca-hooks.js.map +0 -1
- package/dist/dsh/orca-host.d.ts.map +0 -1
- package/dist/dsh/orca-host.js.map +0 -1
- package/dist/dsh/orca-read-service.d.ts +0 -20
- package/dist/dsh/orca-read-service.d.ts.map +0 -1
- package/dist/dsh/orca-read-service.js.map +0 -1
- package/dist/dsh/orca-recorder.d.ts.map +0 -1
- package/dist/dsh/orca-recorder.js.map +0 -1
- package/dist/dsh/orca-security.d.ts.map +0 -1
- package/dist/dsh/orca-security.js +0 -160
- package/dist/dsh/orca-security.js.map +0 -1
- package/dist/dsh/orca-session-choice.d.ts +0 -24
- package/dist/dsh/orca-session-choice.d.ts.map +0 -1
- package/dist/dsh/orca-session-choice.js.map +0 -1
- package/dist/dsh/orca-status-presentation.d.ts +0 -6
- package/dist/dsh/orca-status-presentation.d.ts.map +0 -1
- package/dist/dsh/orca-status-presentation.js.map +0 -1
- package/dist/dsh/orca-store.d.ts +0 -16
- package/dist/dsh/orca-store.d.ts.map +0 -1
- package/dist/dsh/orca-store.js +0 -42
- package/dist/dsh/orca-store.js.map +0 -1
- package/dist/dsh/orca-types.d.ts +0 -64
- package/dist/dsh/orca-types.d.ts.map +0 -1
- package/dist/dsh/orca-types.js.map +0 -1
- package/docs/orca-verification.md +0 -61
- /package/docs/{ORCAREPLAY-LICENSE.txt → AGENTICREPLAY-LICENSE.txt} +0 -0
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { readdir } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { loadAgenticReplayLibrary } from './agenticreplay-libraries.js';
|
|
5
|
+
import { AgenticReplayError } from './agenticreplay-types.js';
|
|
6
|
+
import { checkPrivatePath, openPrivateFile, readPrivateFile } from './agenticreplay-security.js';
|
|
7
|
+
export async function readAgenticReplayManifest(dir, runId) {
|
|
8
|
+
const assertManifest = (await loadAgenticReplayLibrary('schema')).assertManifest;
|
|
8
9
|
const value = JSON.parse((await readPrivateFile(join(dir, 'manifest.json'), 65_536)).toString('utf8'));
|
|
9
10
|
assertManifest(value);
|
|
10
11
|
if (value.run_id !== runId)
|
|
11
|
-
throw new
|
|
12
|
+
throw new AgenticReplayError('manifest_mismatch');
|
|
12
13
|
return value;
|
|
13
14
|
}
|
|
14
15
|
/** Offset reader: at most one page of JSONL, never reads/skips the prefix. */
|
|
15
|
-
export async function
|
|
16
|
-
const schema = await
|
|
16
|
+
export async function readAgenticReplayPage(dir, offset, previousSeq, maxEvents, maxBytes, validatedBlobs = new Map()) {
|
|
17
|
+
const schema = await loadAgenticReplayLibrary('schema');
|
|
17
18
|
const assertEvent = schema.assertEvent;
|
|
18
19
|
const isBlobRef = schema.isBlobRef;
|
|
19
20
|
const handle = await openPrivateFile(join(dir, 'events.jsonl'));
|
|
@@ -21,14 +22,14 @@ export async function readOrcaPage(dir, offset, previousSeq, maxEvents, maxBytes
|
|
|
21
22
|
const stat = await handle.stat();
|
|
22
23
|
if (!Number.isSafeInteger(offset) || offset < 0 || offset > stat.size || !Number.isSafeInteger(previousSeq)
|
|
23
24
|
|| (offset === 0 ? previousSeq !== -1 : previousSeq < 0))
|
|
24
|
-
throw new
|
|
25
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
25
26
|
let readBytes = 0;
|
|
26
27
|
if (offset > 0) {
|
|
27
28
|
const boundary = Buffer.alloc(1);
|
|
28
29
|
await handle.read(boundary, 0, 1, offset - 1);
|
|
29
30
|
readBytes++;
|
|
30
31
|
if (boundary[0] !== 10)
|
|
31
|
-
throw new
|
|
32
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
32
33
|
}
|
|
33
34
|
let buffer = Buffer.alloc(0);
|
|
34
35
|
const events = [];
|
|
@@ -43,41 +44,41 @@ export async function readOrcaPage(dir, offset, previousSeq, maxEvents, maxBytes
|
|
|
43
44
|
const chunk = Buffer.alloc(Math.min(4096, available, stat.size - offset - buffer.length));
|
|
44
45
|
const read = await handle.read(chunk, 0, chunk.length, offset + buffer.length);
|
|
45
46
|
if (read.bytesRead === 0)
|
|
46
|
-
throw new
|
|
47
|
+
throw new AgenticReplayError('file_changed');
|
|
47
48
|
readBytes += read.bytesRead;
|
|
48
49
|
buffer = Buffer.concat([buffer, chunk.subarray(0, read.bytesRead)]);
|
|
49
50
|
end = buffer.indexOf(10, used);
|
|
50
51
|
}
|
|
51
52
|
if (end === -1) {
|
|
52
53
|
if (offset + buffer.length === stat.size)
|
|
53
|
-
throw new
|
|
54
|
+
throw new AgenticReplayError('truncated_jsonl');
|
|
54
55
|
if (events.length === 0)
|
|
55
|
-
throw new
|
|
56
|
+
throw new AgenticReplayError('timeline_line_limit');
|
|
56
57
|
break;
|
|
57
58
|
}
|
|
58
59
|
const event = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(buffer.subarray(used, end)));
|
|
59
60
|
assertEvent(event);
|
|
60
61
|
if (event.seq !== previousSeq + events.length + 1)
|
|
61
|
-
throw new
|
|
62
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
62
63
|
if (isBlobRef(event.payload)) {
|
|
63
64
|
const ref = event.payload;
|
|
64
65
|
const knownBytes = validatedBlobs.get(ref.$blob);
|
|
65
66
|
if (knownBytes !== undefined && knownBytes !== ref.bytes)
|
|
66
|
-
throw new
|
|
67
|
+
throw new AgenticReplayError('blob_mismatch');
|
|
67
68
|
if (knownBytes === undefined) {
|
|
68
69
|
if (readBytes + blobBytes + ref.bytes > maxBytes) {
|
|
69
70
|
if (events.length === 0)
|
|
70
|
-
throw new
|
|
71
|
+
throw new AgenticReplayError('timeline_blob_limit');
|
|
71
72
|
break;
|
|
72
73
|
}
|
|
73
74
|
const hex = ref.$blob.slice(7);
|
|
74
75
|
if (!/^[0-9a-f]{64}$/u.test(hex))
|
|
75
|
-
throw new
|
|
76
|
+
throw new AgenticReplayError('unsafe_blob');
|
|
76
77
|
await checkPrivatePath(join(dir, 'blobs'), true);
|
|
77
78
|
await checkPrivatePath(join(dir, 'blobs', hex.slice(0, 2)), true);
|
|
78
79
|
const bytes = await readPrivateFile(join(dir, 'blobs', hex.slice(0, 2), hex), ref.bytes);
|
|
79
80
|
if (bytes.length !== ref.bytes || createHash('sha256').update(bytes).digest('hex') !== hex)
|
|
80
|
-
throw new
|
|
81
|
+
throw new AgenticReplayError('blob_mismatch');
|
|
81
82
|
blobBytes += ref.bytes;
|
|
82
83
|
validatedBlobs.set(ref.$blob, ref.bytes);
|
|
83
84
|
}
|
|
@@ -87,7 +88,7 @@ export async function readOrcaPage(dir, offset, previousSeq, maxEvents, maxBytes
|
|
|
87
88
|
used = end + 1;
|
|
88
89
|
}
|
|
89
90
|
if ((await handle.stat()).size !== stat.size)
|
|
90
|
-
throw new
|
|
91
|
+
throw new AgenticReplayError('file_changed');
|
|
91
92
|
return { events, offset: offset + used, previousSeq: previousSeq + events.length, done: offset + used === stat.size, bytes: used, blobs,
|
|
92
93
|
raw: buffer.subarray(0, used), readBytes: readBytes + blobBytes };
|
|
93
94
|
}
|
|
@@ -96,15 +97,15 @@ export async function readOrcaPage(dir, offset, previousSeq, maxEvents, maxBytes
|
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
99
|
/** Only the known run directory is walked, with fixed maximum depth and byte budget. */
|
|
99
|
-
export async function
|
|
100
|
+
export async function agenticReplayDiskBytes(dir, maxBytes) {
|
|
100
101
|
let total = 0;
|
|
101
102
|
let entries = 0;
|
|
102
103
|
async function walk(current, depth) {
|
|
103
104
|
if (depth > 3)
|
|
104
|
-
throw new
|
|
105
|
+
throw new AgenticReplayError('unexpected_trace_file');
|
|
105
106
|
for (const name of await readdir(current)) {
|
|
106
107
|
if (++entries > 100_000)
|
|
107
|
-
throw new
|
|
108
|
+
throw new AgenticReplayError('trace_file_limit');
|
|
108
109
|
const target = join(current, name);
|
|
109
110
|
const { lstat } = await import('node:fs/promises');
|
|
110
111
|
const stat = await lstat(target);
|
|
@@ -114,30 +115,30 @@ export async function orcaDiskBytes(dir, maxBytes) {
|
|
|
114
115
|
else
|
|
115
116
|
total += stat.size;
|
|
116
117
|
if (total > maxBytes)
|
|
117
|
-
throw new
|
|
118
|
+
throw new AgenticReplayError('trace_limit');
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
await walk(dir, 0);
|
|
121
122
|
return total;
|
|
122
123
|
}
|
|
123
|
-
export async function
|
|
124
|
+
export async function scanAgenticReplayTrace(dir, runId, maxInputBytes, maxEvents) {
|
|
124
125
|
const file = await checkPrivatePath(join(dir, 'events.jsonl'), false);
|
|
125
126
|
if (file.size > maxInputBytes)
|
|
126
|
-
throw new
|
|
127
|
-
const manifest = await
|
|
127
|
+
throw new AgenticReplayError('export_input_limit');
|
|
128
|
+
const manifest = await readAgenticReplayManifest(dir, runId);
|
|
128
129
|
if (!manifest.ended_at || !manifest.counts || !manifest.integrity)
|
|
129
|
-
throw new
|
|
130
|
+
throw new AgenticReplayError('trace_not_completed');
|
|
130
131
|
let offset = 0, seq = -1, total = file.size;
|
|
131
132
|
const blobs = new Map();
|
|
132
133
|
const validatedBlobs = new Map();
|
|
133
134
|
const hash = createHash('sha256');
|
|
134
135
|
do {
|
|
135
|
-
const page = await
|
|
136
|
+
const page = await readAgenticReplayPage(dir, offset, seq, Math.min(200, maxEvents + 1), Math.min(maxInputBytes + 1, 16_777_216), validatedBlobs);
|
|
136
137
|
offset = page.offset;
|
|
137
138
|
seq = page.previousSeq;
|
|
138
139
|
hash.update(page.raw);
|
|
139
140
|
if (seq + 1 > maxEvents)
|
|
140
|
-
throw new
|
|
141
|
+
throw new AgenticReplayError('export_event_limit');
|
|
141
142
|
for (const [ref, bytes] of page.blobs) {
|
|
142
143
|
if (!blobs.has(ref)) {
|
|
143
144
|
total += bytes;
|
|
@@ -145,13 +146,13 @@ export async function scanOrcaTrace(dir, runId, maxInputBytes, maxEvents) {
|
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
if (total > maxInputBytes)
|
|
148
|
-
throw new
|
|
149
|
+
throw new AgenticReplayError('export_input_limit');
|
|
149
150
|
if (page.done)
|
|
150
151
|
break;
|
|
151
152
|
} while (true);
|
|
152
153
|
if (manifest.counts.events !== seq + 1 || manifest.counts.blobs !== blobs.size || manifest.integrity.blob_count !== blobs.size
|
|
153
154
|
|| manifest.integrity.events_sha256 !== hash.digest('hex'))
|
|
154
|
-
throw new
|
|
155
|
+
throw new AgenticReplayError('trace_integrity_mismatch');
|
|
155
156
|
return { eventCount: seq + 1, exportInputBytes: total, manifest };
|
|
156
157
|
}
|
|
157
|
-
//# sourceMappingURL=
|
|
158
|
+
//# sourceMappingURL=agenticreplay-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-files.js","sourceRoot":"","sources":["../../src/dsh/agenticreplay-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { DshAgenticReplayHostServices } from './agenticreplay-types.js';
|
|
3
|
+
/** Global Cordis observation with exact host bindings; result observer survives ingress shutdown. */
|
|
4
|
+
export declare function mountDshAgenticReplayHooks(ctx: Context, services: DshAgenticReplayHostServices): () => void;
|
|
5
|
+
//# sourceMappingURL=agenticreplay-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-hooks.d.ts","sourceRoot":"","sources":["../../src/dsh/agenticreplay-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,4BAA4B,EAA8B,MAAM,0BAA0B,CAAA;AAExG,qGAAqG;AACrG,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,GAAG,MAAM,IAAI,CAiC3G"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Global Cordis observation with exact host bindings; result observer survives ingress shutdown. */
|
|
2
|
-
export function
|
|
2
|
+
export function mountDshAgenticReplayHooks(ctx, services) {
|
|
3
3
|
const disposers = [];
|
|
4
4
|
const on = (name, listener) => disposers.push(ctx.on(name, listener, { global: true }));
|
|
5
5
|
const binding = (exec) => {
|
|
@@ -67,4 +67,4 @@ export function mountDshOrcaHooks(ctx, services) {
|
|
|
67
67
|
return; disposed = true; for (const dispose of disposers.reverse())
|
|
68
68
|
dispose(); };
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=agenticreplay-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-hooks.js","sourceRoot":"","sources":["../../src/dsh/agenticreplay-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
-
import type {
|
|
2
|
+
import type { AgenticReplayConfig } from './config.js';
|
|
3
3
|
import type { DshUserQuestions } from './user-interaction.js';
|
|
4
4
|
import type { DshCoreRuntime as DshRuntime } from './core-runtime.js';
|
|
5
|
-
import type {
|
|
6
|
-
export declare function
|
|
5
|
+
import type { DshAgenticReplayHostServices } from './agenticreplay-types.js';
|
|
6
|
+
export declare function createDshAgenticReplayHost(ctx: Context, config: AgenticReplayConfig, runtime: DshRuntime, native: {
|
|
7
7
|
session(id: string): object | undefined;
|
|
8
8
|
agent(id: string): object | undefined;
|
|
9
9
|
logicalRun(session: {
|
|
@@ -18,5 +18,5 @@ export declare function createDshOrcaHost(ctx: Context, config: OrcaConfig, runt
|
|
|
18
18
|
agent: object;
|
|
19
19
|
session: object;
|
|
20
20
|
} | undefined;
|
|
21
|
-
}):
|
|
22
|
-
//# sourceMappingURL=
|
|
21
|
+
}): DshAgenticReplayHostServices;
|
|
22
|
+
//# sourceMappingURL=agenticreplay-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-host.d.ts","sourceRoot":"","sources":["../../src/dsh/agenticreplay-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAStD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,KAAK,EAA2B,4BAA4B,EAA0B,MAAM,0BAA0B,CAAA;AAE7H,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE;IACjH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACvC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACrC,UAAU,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,GAAG,SAAS,CAAA;IACvD,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B,WAAW,CAAC,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAA;IAC5C,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAChD,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAChF,GAAG,4BAA4B,CAkH/B"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { canonicalDirectory, detectRepositoryRoot } from '../repository/detect-root.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { workspaceKey } from './
|
|
7
|
-
import { record } from './
|
|
8
|
-
import {
|
|
9
|
-
export function
|
|
2
|
+
import { DshAgenticReplayRecorder } from './agenticreplay-recorder.js';
|
|
3
|
+
import { DshAgenticReplayStore } from './agenticreplay-store.js';
|
|
4
|
+
import { mountDshAgenticReplayHooks } from './agenticreplay-hooks.js';
|
|
5
|
+
import { getDshAgenticReplayStoreRoot } from './paths.js';
|
|
6
|
+
import { workspaceKey } from './agenticreplay-security.js';
|
|
7
|
+
import { record } from './agenticreplay-event-mapper.js';
|
|
8
|
+
import { DshAgenticReplaySessionChoices } from './agenticreplay-session-choice.js';
|
|
9
|
+
export function createDshAgenticReplayHost(ctx, config, runtime, native) {
|
|
10
10
|
// Web keeps observers alive through recorder drain. TUI forbids a plugin
|
|
11
11
|
// from registering on the composition root, so use its own scoped context.
|
|
12
12
|
const profile = ctx.get?.('profileContext', false)?.name;
|
|
13
13
|
const observerContext = profile === 'dsh-tui' ? ctx : ctx.root ?? ctx;
|
|
14
14
|
const bindings = new Map();
|
|
15
15
|
let accepting = true;
|
|
16
|
-
const withIndex = operation => runtime.withDatabase(async (db) => await operation(new
|
|
17
|
-
const recorder = new
|
|
18
|
-
const choices = new
|
|
16
|
+
const withIndex = operation => runtime.withDatabase(async (db) => await operation(new DshAgenticReplayStore(db)));
|
|
17
|
+
const recorder = new DshAgenticReplayRecorder(config, withIndex);
|
|
18
|
+
const choices = new DshAgenticReplaySessionChoices(withIndex, native.questions, config.askOnStart);
|
|
19
19
|
const operations = new Map();
|
|
20
20
|
let shutdown;
|
|
21
21
|
const disposers = [];
|
|
@@ -37,7 +37,7 @@ export function createDshOrcaHost(ctx, config, runtime, native) {
|
|
|
37
37
|
setSessionRecording(binding, enabled) {
|
|
38
38
|
const pending = (operations.get(binding.sessionId) ?? Promise.resolve()).catch(() => undefined).then(async () => {
|
|
39
39
|
if (!accepting)
|
|
40
|
-
throw new Error('
|
|
40
|
+
throw new Error('AgenticReplay host closed');
|
|
41
41
|
try {
|
|
42
42
|
await choices.set(binding, enabled);
|
|
43
43
|
}
|
|
@@ -72,7 +72,7 @@ export function createDshOrcaHost(ctx, config, runtime, native) {
|
|
|
72
72
|
const cwd = canonicalDirectory(s.header.cwd);
|
|
73
73
|
const root = detectRepositoryRoot({ cwd, allowDirectory: true }).root;
|
|
74
74
|
const entry = { agent, session, binding: Object.freeze({ sessionId: s.id, sessionCwd: cwd, workspaceRoot: root,
|
|
75
|
-
storeRoot:
|
|
75
|
+
storeRoot: getDshAgenticReplayStoreRoot(root, config.storage, workspaceKey(root)) }) };
|
|
76
76
|
bindings.set(s.id, entry);
|
|
77
77
|
return enrich(entry);
|
|
78
78
|
},
|
|
@@ -137,7 +137,7 @@ export function createDshOrcaHost(ctx, config, runtime, native) {
|
|
|
137
137
|
choices.forget(entry.binding);
|
|
138
138
|
void recorder.closeSessionRecording(id, 'session_disposed').finally(() => { bindings.delete(id); recorder.forgetSession(id); }).catch(() => undefined);
|
|
139
139
|
}, { global: true }));
|
|
140
|
-
disposers.push(
|
|
140
|
+
disposers.push(mountDshAgenticReplayHooks(observerContext, services));
|
|
141
141
|
}
|
|
142
142
|
catch {
|
|
143
143
|
for (const dispose of disposers.reverse())
|
|
@@ -147,4 +147,4 @@ export function createDshOrcaHost(ctx, config, runtime, native) {
|
|
|
147
147
|
}
|
|
148
148
|
return services;
|
|
149
149
|
}
|
|
150
|
-
//# sourceMappingURL=
|
|
150
|
+
//# sourceMappingURL=agenticreplay-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-host.js","sourceRoot":"","sources":["../../src/dsh/agenticreplay-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface Manifest {
|
|
2
|
+
schema_version: string;
|
|
3
|
+
run_id: string;
|
|
4
|
+
agenticreplay_version: string;
|
|
5
|
+
ended_at?: string;
|
|
6
|
+
counts?: {
|
|
7
|
+
events: number;
|
|
8
|
+
blobs: number;
|
|
9
|
+
};
|
|
10
|
+
integrity?: {
|
|
11
|
+
events_sha256: string;
|
|
12
|
+
blob_count: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface TraceEvent {
|
|
16
|
+
seq: number;
|
|
17
|
+
ts: string;
|
|
18
|
+
mono_us: number;
|
|
19
|
+
turn: number;
|
|
20
|
+
type: string;
|
|
21
|
+
actor: string;
|
|
22
|
+
attrs?: Record<string, unknown>;
|
|
23
|
+
payload?: unknown;
|
|
24
|
+
causes?: number[];
|
|
25
|
+
}
|
|
26
|
+
export interface EventInit {
|
|
27
|
+
type: 'run.start' | 'run.end' | 'model.request' | 'model.response' | 'tool.call' | 'tool.result' | 'note' | 'error';
|
|
28
|
+
actor: 'harness' | 'model' | 'tool';
|
|
29
|
+
causes?: number[];
|
|
30
|
+
attrs?: Record<string, unknown>;
|
|
31
|
+
payload?: Record<string, unknown>;
|
|
32
|
+
occurredAt?: Date;
|
|
33
|
+
}
|
|
34
|
+
export interface TraceWriter {
|
|
35
|
+
readonly runDir: string;
|
|
36
|
+
append(event: EventInit): Promise<TraceEvent>;
|
|
37
|
+
close(): Promise<Manifest>;
|
|
38
|
+
}
|
|
39
|
+
export type CreateTraceWriter = (runsDir: string, init: {
|
|
40
|
+
runId?: string;
|
|
41
|
+
adapter: {
|
|
42
|
+
id: string;
|
|
43
|
+
};
|
|
44
|
+
argv: string[];
|
|
45
|
+
cwd: string;
|
|
46
|
+
agenticreplayVersion: string;
|
|
47
|
+
envAllowlist?: string[];
|
|
48
|
+
}) => Promise<TraceWriter>;
|
|
49
|
+
export interface CoreLibrary {
|
|
50
|
+
TraceWriter: {
|
|
51
|
+
create: CreateTraceWriter;
|
|
52
|
+
};
|
|
53
|
+
TraceReader: {
|
|
54
|
+
open(runDir: string): Promise<{
|
|
55
|
+
events(): Promise<TraceEvent[]>;
|
|
56
|
+
}>;
|
|
57
|
+
};
|
|
58
|
+
ensureRunsDir(root: string): Promise<string>;
|
|
59
|
+
}
|
|
60
|
+
export interface SchemaLibrary {
|
|
61
|
+
assertManifest(value: unknown): asserts value is Manifest;
|
|
62
|
+
assertEvent(value: unknown): asserts value is TraceEvent;
|
|
63
|
+
isBlobRef(value: unknown): value is {
|
|
64
|
+
$blob: string;
|
|
65
|
+
bytes: number;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export interface ViewerLibrary {
|
|
69
|
+
buildTimeline(events: TraceEvent[]): Record<string, unknown>[];
|
|
70
|
+
exportTraceHtml(runDir: string, output: string, options?: {
|
|
71
|
+
maxBlobBytes?: number;
|
|
72
|
+
maxInlineChars?: number;
|
|
73
|
+
}): Promise<{
|
|
74
|
+
bytes: number;
|
|
75
|
+
}>;
|
|
76
|
+
}
|
|
77
|
+
interface Libraries {
|
|
78
|
+
core: CoreLibrary;
|
|
79
|
+
schema: SchemaLibrary;
|
|
80
|
+
viewer: ViewerLibrary;
|
|
81
|
+
}
|
|
82
|
+
export declare function loadAgenticReplayLibrary<K extends keyof Libraries>(name: K): Promise<Libraries[K]>;
|
|
83
|
+
export declare function installedAgenticReplayCoreVersion(): Promise<string>;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=agenticreplay-libraries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-libraries.d.ts","sourceRoot":"","sources":["../../src/dsh/agenticreplay-libraries.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,SAAS,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1D;AACD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AACD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAA;IACnH,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,IAAI,CAAA;CAClB;AACD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7C,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC3B;AACD,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;IACpE,oBAAoB,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACtD,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;AAC1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAA;IAC1C,WAAW,EAAE;QAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;YAAE,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAA;IACnF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC7C;AACD,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAA;IACzD,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAA;IACxD,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACrE;AACD,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC9D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QACxD,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAC/C,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC/B;AACD,UAAU,SAAS;IAAG,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE;AAMvF,wBAAsB,wBAAwB,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAGxG;AACD,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,MAAM,CAAC,CASzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createRequire, findPackageJSON } from 'node:module';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
/** Resolve from the distribution that declares/bundles the SDK, never a global installation. */
|
|
5
|
+
function distributionRequire() {
|
|
6
|
+
return createRequire(import.meta.resolve('agenticreplay'));
|
|
7
|
+
}
|
|
8
|
+
export async function loadAgenticReplayLibrary(name) {
|
|
9
|
+
const entry = distributionRequire().resolve(`@agenticreplay/${name}`);
|
|
10
|
+
return import(pathToFileURL(entry).href);
|
|
11
|
+
}
|
|
12
|
+
export async function installedAgenticReplayCoreVersion() {
|
|
13
|
+
const owner = distributionRequire();
|
|
14
|
+
const path = findPackageJSON('@agenticreplay/core', owner.resolve('@agenticreplay/core'));
|
|
15
|
+
if (!path)
|
|
16
|
+
throw new Error('AgenticReplay core package metadata unavailable');
|
|
17
|
+
const manifest = JSON.parse(await readFile(path, 'utf8'));
|
|
18
|
+
if (manifest.name !== '@agenticreplay/core' || typeof manifest.version !== 'string' || !manifest.version.trim()) {
|
|
19
|
+
throw new Error('Invalid AgenticReplay core package metadata');
|
|
20
|
+
}
|
|
21
|
+
return manifest.version;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=agenticreplay-libraries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-libraries.js","sourceRoot":"","sources":["../../src/dsh/agenticreplay-libraries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AA0DxC,gGAAgG;AAChG,SAAS,mBAAmB;IAC1B,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;AAC5D,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAA4B,IAAO;IAC/E,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAA;IACrE,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAA0B,CAAA;AACnE,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,iCAAiC;IACrD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACzF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAChH,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ViewerLibrary } from './agenticreplay-libraries.js';
|
|
2
|
+
import type { AgenticReplayConfig } from './config.js';
|
|
3
|
+
import { type DshAgenticReplayBinding, type WithAgenticReplayIndex } from './agenticreplay-types.js';
|
|
4
|
+
export declare class DshAgenticReplayReadService {
|
|
5
|
+
#private;
|
|
6
|
+
readonly config: AgenticReplayConfig;
|
|
7
|
+
readonly withIndex: WithAgenticReplayIndex;
|
|
8
|
+
private readonly loadViewer;
|
|
9
|
+
constructor(config: AgenticReplayConfig, withIndex: WithAgenticReplayIndex, loadViewer?: () => Promise<ViewerLibrary>);
|
|
10
|
+
list(binding: DshAgenticReplayBinding): Promise<import("./agenticreplay-types.js").AgenticReplayTrace[]>;
|
|
11
|
+
show(binding: DshAgenticReplayBinding, id: string, cursor?: string): Promise<{
|
|
12
|
+
cursor?: string;
|
|
13
|
+
recordingState: import("./agenticreplay-types.js").AgenticReplayState;
|
|
14
|
+
exactReplay: boolean;
|
|
15
|
+
usage: string;
|
|
16
|
+
rows: Record<string, unknown>[];
|
|
17
|
+
events: import("./agenticreplay-libraries.js").TraceEvent[];
|
|
18
|
+
}>;
|
|
19
|
+
export(binding: DshAgenticReplayBinding, id: string): Promise<string>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=agenticreplay-read-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenticreplay-read-service.d.ts","sourceRoot":"","sources":["../../src/dsh/agenticreplay-read-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAI3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAsB,KAAK,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAIxH,qBAAa,2BAA2B;;IAE1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB;IAAE,QAAQ,CAAC,SAAS,EAAE,sBAAsB;IAC1F,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADR,MAAM,EAAE,mBAAmB,EAAW,SAAS,EAAE,sBAAsB,EACzE,UAAU,GAAE,MAAM,OAAO,CAAC,aAAa,CAA4C;IAChG,IAAI,CAAC,OAAO,EAAE,uBAAuB;IA4CrC,IAAI,CAAC,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;IAUlE,MAAM,CAAC,OAAO,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAoC5E"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import { loadAgenticReplayLibrary } from './agenticreplay-libraries.js';
|
|
1
2
|
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
3
|
import { rename, rm, open } from 'node:fs/promises';
|
|
3
4
|
import { join } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import { checkedRunDir, checkPrivatePath,
|
|
6
|
-
import {
|
|
7
|
-
export class
|
|
5
|
+
import { AgenticReplayError } from './agenticreplay-types.js';
|
|
6
|
+
import { checkedRunDir, checkPrivatePath, AGENTICREPLAY_RUN_ID, privateDirectory, workspaceKey, ensureAgenticReplayGitignore } from './agenticreplay-security.js';
|
|
7
|
+
import { readAgenticReplayManifest, readAgenticReplayPage, scanAgenticReplayTrace } from './agenticreplay-files.js';
|
|
8
|
+
export class DshAgenticReplayReadService {
|
|
8
9
|
config;
|
|
9
10
|
withIndex;
|
|
10
11
|
loadViewer;
|
|
11
12
|
#cursorKey = randomBytes(32);
|
|
12
|
-
constructor(config, withIndex, loadViewer = () =>
|
|
13
|
+
constructor(config, withIndex, loadViewer = () => loadAgenticReplayLibrary('viewer')) {
|
|
13
14
|
this.config = config;
|
|
14
15
|
this.withIndex = withIndex;
|
|
15
16
|
this.loadViewer = loadViewer;
|
|
@@ -39,17 +40,17 @@ export class DshOrcaReadService {
|
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
async #authorized(binding, id) {
|
|
42
|
-
if (!
|
|
43
|
-
throw new
|
|
43
|
+
if (!AGENTICREPLAY_RUN_ID.test(id))
|
|
44
|
+
throw new AgenticReplayError('trace_not_found');
|
|
44
45
|
const row = await this.withIndex(store => store.get(binding.sessionId, workspaceKey(binding.workspaceRoot), id));
|
|
45
46
|
if (!row || row.store_root !== binding.storeRoot || row.session_cwd !== binding.sessionCwd)
|
|
46
|
-
throw new
|
|
47
|
+
throw new AgenticReplayError('trace_not_found');
|
|
47
48
|
if (row.state !== 'completed')
|
|
48
|
-
throw new
|
|
49
|
+
throw new AgenticReplayError('trace_not_completed');
|
|
49
50
|
const dir = await checkedRunDir(row.store_root, id);
|
|
50
|
-
const manifest = await
|
|
51
|
+
const manifest = await readAgenticReplayManifest(dir, id);
|
|
51
52
|
if (!manifest.ended_at || manifest.counts?.events !== row.event_count)
|
|
52
|
-
throw new
|
|
53
|
+
throw new AgenticReplayError('trace_integrity_mismatch');
|
|
53
54
|
return { row, dir };
|
|
54
55
|
}
|
|
55
56
|
#encode(id, offset, seq) {
|
|
@@ -60,30 +61,30 @@ export class DshOrcaReadService {
|
|
|
60
61
|
if (cursor === undefined)
|
|
61
62
|
return { offset: 0, seq: -1 };
|
|
62
63
|
if (cursor.length > 1024)
|
|
63
|
-
throw new
|
|
64
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
64
65
|
const parts = cursor.split('.');
|
|
65
66
|
const [body, signature] = parts;
|
|
66
67
|
if (parts.length !== 2 || !body || !signature)
|
|
67
|
-
throw new
|
|
68
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
68
69
|
const expected = createHmac('sha256', this.#cursorKey).update(body).digest();
|
|
69
70
|
const supplied = Buffer.from(signature, 'base64url');
|
|
70
71
|
if (supplied.length !== expected.length || !timingSafeEqual(expected, supplied))
|
|
71
|
-
throw new
|
|
72
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
72
73
|
const value = JSON.parse(Buffer.from(body, 'base64url').toString('utf8'));
|
|
73
74
|
if (value.v !== 1 || value.id !== id)
|
|
74
|
-
throw new
|
|
75
|
+
throw new AgenticReplayError('invalid_cursor');
|
|
75
76
|
return value;
|
|
76
77
|
}
|
|
77
78
|
async show(binding, id, cursor) {
|
|
78
79
|
const { dir, row } = await this.#authorized(binding, id);
|
|
79
80
|
const position = this.#decode(cursor, id);
|
|
80
|
-
const page = await
|
|
81
|
+
const page = await readAgenticReplayPage(dir, position.offset, position.seq, this.config.maxTimelineEventsPerPage, this.config.maxTimelineReadBytesPerPage);
|
|
81
82
|
let viewer;
|
|
82
83
|
try {
|
|
83
84
|
viewer = await this.loadViewer();
|
|
84
85
|
}
|
|
85
86
|
catch {
|
|
86
|
-
throw new
|
|
87
|
+
throw new AgenticReplayError('viewer_unavailable_reinstall_package');
|
|
87
88
|
}
|
|
88
89
|
return { recordingState: row.state, exactReplay: false, usage: 'Missing usage is unknown, not measured zero.',
|
|
89
90
|
rows: viewer.buildTimeline(page.events), events: page.events,
|
|
@@ -91,21 +92,22 @@ export class DshOrcaReadService {
|
|
|
91
92
|
}
|
|
92
93
|
async export(binding, id) {
|
|
93
94
|
const { dir, row } = await this.#authorized(binding, id);
|
|
94
|
-
const scan = await
|
|
95
|
+
const scan = await scanAgenticReplayTrace(dir, id, this.config.maxHtmlExportInputBytes, this.config.maxHtmlExportEvents);
|
|
95
96
|
if (scan.eventCount !== row.event_count || scan.exportInputBytes !== row.export_input_bytes)
|
|
96
|
-
throw new
|
|
97
|
+
throw new AgenticReplayError('trace_integrity_mismatch');
|
|
97
98
|
// Bound repeated blob inlining, escaping, fixed markup, static CSS/JS before invoking the materializing viewer.
|
|
98
99
|
const estimate = 1_048_576 + scan.exportInputBytes * 40 + scan.eventCount * (8192 + this.config.maxHtmlInlineCharsPerEvent * 6);
|
|
99
100
|
if (!Number.isSafeInteger(estimate) || estimate > this.config.maxHtmlExportOutputBytes)
|
|
100
|
-
throw new
|
|
101
|
+
throw new AgenticReplayError('export_output_limit');
|
|
101
102
|
let viewer;
|
|
102
103
|
try {
|
|
103
104
|
viewer = await this.loadViewer();
|
|
104
105
|
}
|
|
105
106
|
catch {
|
|
106
|
-
throw new
|
|
107
|
+
throw new AgenticReplayError('viewer_unavailable_reinstall_package');
|
|
107
108
|
}
|
|
108
|
-
const exports = join(row.store_root, '.
|
|
109
|
+
const exports = join(row.store_root, '.agenticreplay', 'exports');
|
|
110
|
+
await ensureAgenticReplayGitignore(row.store_root);
|
|
109
111
|
await privateDirectory(exports);
|
|
110
112
|
const output = join(exports, `${id}.html`);
|
|
111
113
|
async function verifyExisting() {
|
|
@@ -126,11 +128,11 @@ export class DshOrcaReadService {
|
|
|
126
128
|
maxInlineChars: this.config.maxHtmlInlineCharsPerEvent });
|
|
127
129
|
const actual = await checkPrivatePath(temporary, false);
|
|
128
130
|
if (actual.size !== result.bytes || result.bytes > this.config.maxHtmlExportOutputBytes)
|
|
129
|
-
throw new
|
|
131
|
+
throw new AgenticReplayError('export_output_limit');
|
|
130
132
|
// Detect changes during the third-party reader's second pass before publishing the file locally.
|
|
131
|
-
const after = await
|
|
133
|
+
const after = await scanAgenticReplayTrace(dir, id, this.config.maxHtmlExportInputBytes, this.config.maxHtmlExportEvents);
|
|
132
134
|
if (after.manifest.integrity?.events_sha256 !== scan.manifest.integrity?.events_sha256 || after.exportInputBytes !== scan.exportInputBytes)
|
|
133
|
-
throw new
|
|
135
|
+
throw new AgenticReplayError('file_changed');
|
|
134
136
|
await checkPrivatePath(exports, true);
|
|
135
137
|
await verifyExisting();
|
|
136
138
|
await rename(temporary, output);
|
|
@@ -141,4 +143,4 @@ export class DshOrcaReadService {
|
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
|
-
//# sourceMappingURL=
|
|
146
|
+
//# sourceMappingURL=agenticreplay-read-service.js.map
|