kiokuko-dsh 0.1.38 → 0.1.40
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 +10 -2
- package/dist/dsh/composition.d.ts +3 -0
- package/dist/dsh/composition.d.ts.map +1 -1
- package/dist/dsh/composition.js +8 -1
- package/dist/dsh/composition.js.map +1 -1
- package/dist/dsh/session-history-compatibility.d.ts +22 -0
- package/dist/dsh/session-history-compatibility.d.ts.map +1 -0
- package/dist/dsh/session-history-compatibility.js +288 -0
- package/dist/dsh/session-history-compatibility.js.map +1 -0
- package/docs/session-history-repair.md +40 -3
- package/dsh/cordis.patch.yml +1 -1
- package/package.json +7 -3
- package/scripts/repair-continuation-source.mjs +3 -114
- package/scripts/session-history-codec.d.mts +4 -0
- package/scripts/session-history-codec.mjs +121 -0
package/PERMISSIONS.md
CHANGED
|
@@ -10,6 +10,13 @@ Kiokuko operation.
|
|
|
10
10
|
repository metadata.
|
|
11
11
|
- Writes the configured Kiokuko database and pre-migration backups, including
|
|
12
12
|
DSH leases, receipts, retrieval state, and embedding state.
|
|
13
|
+
- On plugin load, enumerates stored DSH session IDs and validates each history.
|
|
14
|
+
When DSH rejects a v3 history containing legacy Kiokuko informational
|
|
15
|
+
events, reads that exact native session file and marks the five supported
|
|
16
|
+
types ignorable under DSH's write lease. Retains a byte-for-byte `.bak`, validates
|
|
17
|
+
in a disposable local directory, and replaces the source atomically. It
|
|
18
|
+
reports failed IDs without exposing message contents; invalid or unrelated
|
|
19
|
+
records remain errors. The same check applies when a chat is opened later.
|
|
13
20
|
- Does not rewrite host configuration or repository instruction files.
|
|
14
21
|
Repository identity, run identity, lease, revision, and integrity mismatches
|
|
15
22
|
fail closed.
|
|
@@ -33,8 +40,9 @@ Kiokuko operation.
|
|
|
33
40
|
- `@huggingface/hub`, `@huggingface/transformers`, and `sqlite-vec` are optional
|
|
34
41
|
peer capabilities. They are not silently installed by the minimal package
|
|
35
42
|
path and are required only by the feature that explicitly uses them.
|
|
36
|
-
- `@deepseek-ai/cordis` is the host peer dependency. The
|
|
37
|
-
|
|
43
|
+
- `@deepseek-ai/cordis` is the host peer dependency. The loaded plugin temporarily
|
|
44
|
+
wraps the JSONL service's `open` method for legacy-history compatibility and
|
|
45
|
+
restores it on unload. It does not change DSH's installed code or event catalog.
|
|
38
46
|
|
|
39
47
|
## Installation lifecycle
|
|
40
48
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SessionHistoryCheck } from './session-history-compatibility.js';
|
|
1
2
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
3
|
import { DshEnnoController } from './enno-controller.js';
|
|
3
4
|
import { DshIntakeGate, type DshPreStepEvent } from './intake-gate.js';
|
|
@@ -89,6 +90,8 @@ export interface DshCompositionHost {
|
|
|
89
90
|
}
|
|
90
91
|
type DshToolHostRegistration = DshToolRegistrationContext['tools']['register'];
|
|
91
92
|
export interface DshCompositionHandle {
|
|
93
|
+
/** Startup validation of all persisted session IDs, also run after plugin reload/update. */
|
|
94
|
+
readonly historyCheck: Promise<SessionHistoryCheck>;
|
|
92
95
|
/** Stop all event, command, tool, and session ingress synchronously. */
|
|
93
96
|
readonly stopIngress: () => void;
|
|
94
97
|
/** Finish resource teardown after ingress has been stopped. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
|
package/dist/dsh/composition.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { formatEvolutionStatus } from '../memory/evolution/status.js';
|
|
2
2
|
import { mountDeepReportSurface } from '../deep-thinker/report-surface.js';
|
|
3
3
|
import { mountDshNoticeSurface } from './session-notice-surface.js';
|
|
4
|
+
import { mountSessionHistoryCompatibility } from './session-history-compatibility.js';
|
|
4
5
|
import { randomUUID } from 'node:crypto';
|
|
5
6
|
import { mountDshIdleLifecycle, mountDshSessionLifecycle } from './session-bridge.js';
|
|
6
7
|
import { mountDshToolPolicy } from './tool-policy.js';
|
|
@@ -89,6 +90,7 @@ export async function mountDshComposition(ctx, host) {
|
|
|
89
90
|
const stopErrors = [];
|
|
90
91
|
let ingressStopped = false;
|
|
91
92
|
let disposePromise;
|
|
93
|
+
let historyCheck;
|
|
92
94
|
const stopIngress = () => {
|
|
93
95
|
if (ingressStopped)
|
|
94
96
|
return;
|
|
@@ -133,6 +135,11 @@ export async function mountDshComposition(ctx, host) {
|
|
|
133
135
|
throw new AggregateError(failures, 'kiokuko-dsh composition setup cleanup failed');
|
|
134
136
|
};
|
|
135
137
|
try {
|
|
138
|
+
const historyCompatibility = mountSessionHistoryCompatibility(ctx);
|
|
139
|
+
historyCheck = historyCompatibility.ready;
|
|
140
|
+
ingressDisposers.push(historyCompatibility.stop);
|
|
141
|
+
setupResourceDisposers.push(historyCompatibility.dispose);
|
|
142
|
+
cleanupDisposers.push(historyCompatibility.dispose);
|
|
136
143
|
if (host.deepPlanning && host.commands)
|
|
137
144
|
ingressDisposers.push(host.commands.register(host.deepPlanning.command()));
|
|
138
145
|
if (host.deepPlanning)
|
|
@@ -284,6 +291,6 @@ export async function mountDshComposition(ctx, host) {
|
|
|
284
291
|
disposePromise = runCleanup();
|
|
285
292
|
return disposePromise;
|
|
286
293
|
};
|
|
287
|
-
return { stopIngress, dispose };
|
|
294
|
+
return { stopIngress, dispose, historyCheck };
|
|
288
295
|
}
|
|
289
296
|
//# sourceMappingURL=composition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/dsh/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
export interface SessionHistoryCheck {
|
|
3
|
+
readonly supported: boolean;
|
|
4
|
+
readonly listed: number;
|
|
5
|
+
readonly checked: number;
|
|
6
|
+
readonly repaired: number;
|
|
7
|
+
readonly failed: number;
|
|
8
|
+
readonly cancelled: boolean;
|
|
9
|
+
/** Bounded diagnostics contain session IDs and errors, never message bodies. */
|
|
10
|
+
readonly failures: readonly {
|
|
11
|
+
id: string;
|
|
12
|
+
error: string;
|
|
13
|
+
}[];
|
|
14
|
+
readonly enumerationError?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Own startup validation and the reversible native-open adapter until plugin unload. */
|
|
17
|
+
export declare function mountSessionHistoryCompatibility(ctx: Context): {
|
|
18
|
+
ready: Promise<SessionHistoryCheck>;
|
|
19
|
+
stop(): void;
|
|
20
|
+
dispose(): Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=session-history-compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-history-compatibility.d.ts","sourceRoot":"","sources":["../../src/dsh/session-history-compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA0B7C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC;AAwJD,yFAAyF;AACzF,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAAC,IAAI,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAkD9I"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { lstat, mkdtemp, open, readFile, realpath, rename, rm } from 'node:fs/promises';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { basename, dirname, join } from 'node:path';
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import { canonicalJson } from '../serialization/validate.js';
|
|
8
|
+
import { decodeSessionLog, encodeSessionLog, parseJsonl, repairInformationalRecord } from '../../scripts/session-history-codec.mjs';
|
|
9
|
+
const MAX_COMPRESSED_BYTES = 64 * 1024 * 1024;
|
|
10
|
+
const MAX_EXPANDED_BYTES = 256 * 1024 * 1024;
|
|
11
|
+
const ownership = Symbol.for('kiokuko-dsh.session-history-compatibility.v1');
|
|
12
|
+
const unsupportedCheck = { supported: false, listed: 0, checked: 0, repaired: 0, failed: 0, cancelled: false, failures: [] };
|
|
13
|
+
function nativeBackend(value) {
|
|
14
|
+
if (!value || typeof value !== 'object')
|
|
15
|
+
return false;
|
|
16
|
+
return ['open', 'list', 'stat', 'resolveCurrentLog', 'acquireWriteLease', 'persistHeader', 'readStoredLog']
|
|
17
|
+
.every(key => typeof value[key] === 'function');
|
|
18
|
+
}
|
|
19
|
+
function refusalPath(error) {
|
|
20
|
+
const refusal = error;
|
|
21
|
+
return refusal?.name === 'SessionFormatUnsupportedError' && refusal.location?.kind === 'jsonl'
|
|
22
|
+
&& typeof refusal.location.path === 'string'
|
|
23
|
+
&& ['session.v3.jsonl.zstd', 'session.v3.jsonl'].includes(basename(refusal.location.path)) ? refusal.location.path : undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Validate with the running backend implementation, including its current codec and identity checks. */
|
|
26
|
+
async function validateCandidate(backend, header, candidate, compression, signal) {
|
|
27
|
+
const root = await mkdtemp(join(tmpdir(), 'kiokuko-history-validation-'));
|
|
28
|
+
const scope = new Context();
|
|
29
|
+
const implementation = Object.getPrototypeOf(backend).constructor;
|
|
30
|
+
let fiber;
|
|
31
|
+
try {
|
|
32
|
+
signal?.throwIfAborted();
|
|
33
|
+
fiber = scope.plugin(implementation, { root, compression });
|
|
34
|
+
await fiber;
|
|
35
|
+
const validator = scope.get('sessionPersistence');
|
|
36
|
+
// This header only locates a native validation artifact. The candidate's
|
|
37
|
+
// end-seed marker supplies its actual inherited boundary during decoding.
|
|
38
|
+
await validator.persistHeader(header, 0);
|
|
39
|
+
const path = await validator.resolveCurrentLog(header.id, signal);
|
|
40
|
+
if (!path)
|
|
41
|
+
throw new Error('Native history validator did not materialize its header');
|
|
42
|
+
const file = await open(path, 'w');
|
|
43
|
+
try {
|
|
44
|
+
await file.writeFile(candidate);
|
|
45
|
+
await file.sync();
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await file.close();
|
|
49
|
+
}
|
|
50
|
+
const restored = await validator.readStoredLog(path, header.id, signal);
|
|
51
|
+
if (restored.tornTruncateTo !== undefined || restored.recoveredTail?.length) {
|
|
52
|
+
throw new Error('Legacy history compatibility cannot discard a damaged tail');
|
|
53
|
+
}
|
|
54
|
+
if (canonicalJson(restored.meta) !== canonicalJson(header))
|
|
55
|
+
throw new Error('Legacy history header changed during validation');
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
try {
|
|
59
|
+
await fiber?.dispose();
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await rm(root, { recursive: true, force: true });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** A backup is never replaced, including after an interrupted first attempt. */
|
|
67
|
+
async function retainBackup(path, original, mode) {
|
|
68
|
+
const backup = `${path}.bak`;
|
|
69
|
+
let file;
|
|
70
|
+
try {
|
|
71
|
+
file = await open(backup, 'wx', mode);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code !== 'EEXIST')
|
|
75
|
+
throw error;
|
|
76
|
+
const status = await lstat(backup);
|
|
77
|
+
if (!status.isFile() || status.isSymbolicLink() || !(await readFile(backup)).equals(original)) {
|
|
78
|
+
throw new Error('Existing session backup differs; refusing to overwrite it');
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
await file.writeFile(original);
|
|
84
|
+
await file.sync();
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
await file.close();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Only the exact rejected current-generation artifact may change, under DSH's own kernel lock. */
|
|
91
|
+
async function repairHistory(backend, id, rejectedPath, signal) {
|
|
92
|
+
signal?.throwIfAborted();
|
|
93
|
+
const path = await backend.resolveCurrentLog(id, signal);
|
|
94
|
+
if (path !== rejectedPath || !['session.v3.jsonl.zstd', 'session.v3.jsonl'].includes(basename(path))) {
|
|
95
|
+
throw new Error('Legacy compatibility requires the exact native v3 session artifact');
|
|
96
|
+
}
|
|
97
|
+
const snapshot = await backend.stat(id, signal ? { signal } : undefined);
|
|
98
|
+
if (!snapshot || snapshot.header.id !== id || snapshot.header.version !== 3)
|
|
99
|
+
throw new Error('Legacy session identity mismatch');
|
|
100
|
+
const lease = await backend.acquireWriteLease(snapshot.header);
|
|
101
|
+
try {
|
|
102
|
+
signal?.throwIfAborted();
|
|
103
|
+
const parent = await realpath(dirname(path));
|
|
104
|
+
const status = await lstat(path);
|
|
105
|
+
if (!status.isFile() || status.isSymbolicLink() || status.size > MAX_COMPRESSED_BYTES) {
|
|
106
|
+
throw new Error('Legacy history must be a regular file within the compatibility size limit');
|
|
107
|
+
}
|
|
108
|
+
const original = await readFile(path);
|
|
109
|
+
if (original.length > MAX_COMPRESSED_BYTES)
|
|
110
|
+
throw new Error('Legacy history exceeds the compatibility size limit');
|
|
111
|
+
const compressed = path.endsWith('.zstd');
|
|
112
|
+
const parsed = parseJsonl(compressed ? decodeSessionLog(original, MAX_EXPANDED_BYTES) : original);
|
|
113
|
+
const physicalHeader = parsed.records[0];
|
|
114
|
+
if (physicalHeader?.type !== 'session' || physicalHeader.id !== id || physicalHeader.version !== 3)
|
|
115
|
+
throw new Error('Legacy physical header mismatch');
|
|
116
|
+
let changed = false;
|
|
117
|
+
const lines = parsed.records.map((record, index) => {
|
|
118
|
+
if (index === 0)
|
|
119
|
+
return parsed.lines[index];
|
|
120
|
+
const compatible = repairInformationalRecord(record);
|
|
121
|
+
if (compatible === record)
|
|
122
|
+
return parsed.lines[index];
|
|
123
|
+
changed = true;
|
|
124
|
+
return JSON.stringify(compatible);
|
|
125
|
+
});
|
|
126
|
+
if (!changed)
|
|
127
|
+
return false;
|
|
128
|
+
const plaintext = Buffer.from(`${lines.join('\n')}\n`);
|
|
129
|
+
const candidate = compressed ? encodeSessionLog(plaintext) : plaintext;
|
|
130
|
+
await validateCandidate(backend, snapshot.header, candidate, compressed ? 'zstd' : 'none', signal);
|
|
131
|
+
signal?.throwIfAborted();
|
|
132
|
+
if (await backend.resolveCurrentLog(id, signal) !== path || await realpath(dirname(path)) !== parent
|
|
133
|
+
|| !(await readFile(path)).equals(original))
|
|
134
|
+
throw new Error('Legacy history changed before replacement');
|
|
135
|
+
await retainBackup(path, original, status.mode & 0o777);
|
|
136
|
+
const temporary = `${path}.kiokuko-${randomUUID()}.tmp`;
|
|
137
|
+
const file = await open(temporary, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, status.mode & 0o777);
|
|
138
|
+
try {
|
|
139
|
+
try {
|
|
140
|
+
await file.writeFile(candidate);
|
|
141
|
+
await file.sync();
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
await file.close();
|
|
145
|
+
}
|
|
146
|
+
signal?.throwIfAborted();
|
|
147
|
+
const current = await lstat(path);
|
|
148
|
+
if (current.ino !== status.ino || current.dev !== status.dev || await realpath(dirname(path)) !== parent
|
|
149
|
+
|| !(await readFile(path)).equals(original))
|
|
150
|
+
throw new Error('Legacy history changed while staging compatibility update');
|
|
151
|
+
await rename(temporary, path);
|
|
152
|
+
if (process.platform !== 'win32') {
|
|
153
|
+
const directory = await open(dirname(path), 'r');
|
|
154
|
+
try {
|
|
155
|
+
await directory.sync();
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
await directory.close();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
await rm(temporary, { force: true });
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
await lease.release();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** Check every native session ID once per plugin load, including first load after an update. */
|
|
172
|
+
async function checkStoredSessionIds(backend, repairedIds, signal) {
|
|
173
|
+
const result = { supported: true, listed: 0, checked: 0, repaired: 0, failed: 0, cancelled: false,
|
|
174
|
+
failures: [], enumerationError: undefined };
|
|
175
|
+
console.info('[kiokuko-dsh] Checking stored session IDs');
|
|
176
|
+
try {
|
|
177
|
+
const snapshots = await backend.list({ signal: AbortSignal.any([signal, AbortSignal.timeout(60_000)]) });
|
|
178
|
+
const ids = [...new Set(snapshots.map(snapshot => snapshot.header.id))];
|
|
179
|
+
result.listed = ids.length;
|
|
180
|
+
for (const id of ids) {
|
|
181
|
+
if (signal.aborted)
|
|
182
|
+
break;
|
|
183
|
+
try {
|
|
184
|
+
const handle = await backend.open(id, 'read', { signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]) });
|
|
185
|
+
// Native open validates the complete stored history. No message content
|
|
186
|
+
// is rendered, exported, or added to a model's context by this check.
|
|
187
|
+
await handle.close();
|
|
188
|
+
if (repairedIds.has(id))
|
|
189
|
+
result.repaired++;
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (signal.aborted)
|
|
193
|
+
break;
|
|
194
|
+
result.failed++;
|
|
195
|
+
if (result.failures.length < 20)
|
|
196
|
+
result.failures.push({ id, error: error instanceof Error ? error.message : String(error) });
|
|
197
|
+
}
|
|
198
|
+
result.checked++;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (!signal.aborted)
|
|
203
|
+
result.enumerationError = error instanceof Error ? error.message : String(error);
|
|
204
|
+
}
|
|
205
|
+
result.cancelled = signal.aborted;
|
|
206
|
+
console.info(`[kiokuko-dsh] Session ID check: ${result.checked}/${result.listed} checked, ${result.repaired} repaired, ${result.failed} failed${result.cancelled ? ', cancelled' : ''}`);
|
|
207
|
+
if (result.enumerationError)
|
|
208
|
+
console.warn('[kiokuko-dsh] Session ID enumeration failed:', result.enumerationError);
|
|
209
|
+
for (const failure of result.failures)
|
|
210
|
+
console.warn(`[kiokuko-dsh] Session ID check failed for ${JSON.stringify(failure.id)}: ${failure.error}`);
|
|
211
|
+
const { enumerationError, ...summary } = result;
|
|
212
|
+
return { ...summary, ...(enumerationError === undefined ? {} : { enumerationError }) };
|
|
213
|
+
}
|
|
214
|
+
/** Own startup validation and the reversible native-open adapter until plugin unload. */
|
|
215
|
+
export function mountSessionHistoryCompatibility(ctx) {
|
|
216
|
+
if (typeof ctx.get !== 'function')
|
|
217
|
+
return { ready: Promise.resolve(unsupportedCheck), stop() { }, async dispose() { } };
|
|
218
|
+
const backend = ctx.get('sessionPersistence', false);
|
|
219
|
+
if (!nativeBackend(backend))
|
|
220
|
+
return { ready: Promise.resolve(unsupportedCheck), stop() { }, async dispose() { } };
|
|
221
|
+
let installation = backend[ownership];
|
|
222
|
+
if (!installation) {
|
|
223
|
+
const original = backend.open;
|
|
224
|
+
const descriptor = Object.getOwnPropertyDescriptor(backend, 'open');
|
|
225
|
+
const pending = new Map();
|
|
226
|
+
const repairedIds = new Set();
|
|
227
|
+
const startup = new AbortController();
|
|
228
|
+
let active = true;
|
|
229
|
+
const wrapped = async function (id, access, options) {
|
|
230
|
+
try {
|
|
231
|
+
return await original.call(this, id, access, options);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
const path = refusalPath(error);
|
|
235
|
+
if (!active || !path)
|
|
236
|
+
throw error;
|
|
237
|
+
options?.signal?.throwIfAborted();
|
|
238
|
+
const operation = (pending.get(id) ?? Promise.resolve()).catch(() => { }).then(() => {
|
|
239
|
+
if (!active)
|
|
240
|
+
throw error;
|
|
241
|
+
return repairHistory(backend, id, path, options?.signal).then(changed => { if (changed)
|
|
242
|
+
repairedIds.add(id); });
|
|
243
|
+
});
|
|
244
|
+
pending.set(id, operation);
|
|
245
|
+
try {
|
|
246
|
+
await operation;
|
|
247
|
+
}
|
|
248
|
+
catch (cause) {
|
|
249
|
+
options?.signal?.throwIfAborted();
|
|
250
|
+
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
251
|
+
throw new Error(`Kiokuko legacy history compatibility failed (raw log: ${path}): ${detail}; original history retained or backed up`, { cause });
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
if (pending.get(id) === operation)
|
|
255
|
+
pending.delete(id);
|
|
256
|
+
}
|
|
257
|
+
options?.signal?.throwIfAborted();
|
|
258
|
+
return original.call(this, id, access, options);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
// The microtask begins only after the adapter and shared owner are installed.
|
|
262
|
+
const ready = Promise.resolve().then(() => checkStoredSessionIds(backend, repairedIds, startup.signal));
|
|
263
|
+
installation = { owners: 0, ready, stop() {
|
|
264
|
+
active = false;
|
|
265
|
+
startup.abort(new Error('Kiokuko history check stopped on plugin unload'));
|
|
266
|
+
if (Object.getOwnPropertyDescriptor(backend, 'open')?.value === wrapped) {
|
|
267
|
+
if (descriptor)
|
|
268
|
+
Object.defineProperty(backend, 'open', descriptor);
|
|
269
|
+
else
|
|
270
|
+
delete backend.open;
|
|
271
|
+
}
|
|
272
|
+
delete backend[ownership];
|
|
273
|
+
}, async drain() { await ready; await Promise.allSettled([...pending.values()]); } };
|
|
274
|
+
Object.defineProperty(backend, 'open', { configurable: true, writable: true, value: wrapped });
|
|
275
|
+
backend[ownership] = installation;
|
|
276
|
+
}
|
|
277
|
+
const owned = installation;
|
|
278
|
+
owned.owners++;
|
|
279
|
+
let stopped = false;
|
|
280
|
+
const stop = () => { if (!stopped) {
|
|
281
|
+
stopped = true;
|
|
282
|
+
if (--owned.owners === 0)
|
|
283
|
+
owned.stop();
|
|
284
|
+
} };
|
|
285
|
+
return { ready: owned.ready, stop, async dispose() { stop(); if (owned.owners === 0)
|
|
286
|
+
await owned.drain(); } };
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=session-history-compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-history-compatibility.js","sourceRoot":"","sources":["../../src/dsh/session-history-compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,46 @@ header's **Kiokukoの回答 / Kiokukoの状態** action displays saved notices;
|
|
|
12
12
|
notices open automatically and are acknowledged after display. Old custom
|
|
13
13
|
notice events remain renderable after their log has been repaired.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
Every plugin load enumerates DSH's stored session IDs and validates their
|
|
16
|
+
histories, including the first load after installation or a package update.
|
|
17
|
+
Affected v3 chats have the five historical informational types below marked
|
|
18
|
+
ignorable before users need to open them individually. The startup log reports
|
|
19
|
+
checked/repaired/failed counts and the IDs of failures (up to 20 diagnostics).
|
|
20
|
+
A failed history does not prevent the remaining IDs from being checked.
|
|
21
|
+
|
|
22
|
+
Opening or resuming a chat also retries DSH's normal reader through the same
|
|
23
|
+
compatibility adapter, covering sessions added after the startup check. New
|
|
24
|
+
observations and notices continue to use Kiokuko's database. Checks run when
|
|
25
|
+
DSH loads the package, not inside npm's installation hooks: a package update
|
|
26
|
+
must actually be loaded by the running DSH process to take effect.
|
|
27
|
+
|
|
28
|
+
The compatibility adapter acquires DSH's native session write lease, validates
|
|
29
|
+
the complete candidate with the running JSONL backend, retains an identical
|
|
30
|
+
`.bak`, and replaces the file atomically. Event bodies, sequence numbers,
|
|
31
|
+
timestamps and fork boundaries are preserved. It refuses active writers,
|
|
32
|
+
conflicting backups, symbolic-link artifacts, damaged logs and unrelated
|
|
33
|
+
required event types. Automatic repair is limited to v3 JSONL/Zstandard files
|
|
34
|
+
up to 64 MiB on disk and 256 MiB expanded. Startup enumeration has a 60-second
|
|
35
|
+
deadline and each session check a 30-second deadline. Unloading Kiokuko cancels
|
|
36
|
+
and drains its startup check, restores the native reader, and waits for any
|
|
37
|
+
repair already in progress. Healthy histories and existing backups are not
|
|
38
|
+
rewritten on subsequent loads.
|
|
39
|
+
|
|
40
|
+
For a current harness checkout, run the compatibility tests against its source
|
|
41
|
+
and workspace module mappings (missing native modules fail the check):
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
export KIOKUKO_DSH_SOURCE_ROOT=/path/to/deepseek-harness
|
|
45
|
+
TSX_TSCONFIG_PATH="$KIOKUKO_DSH_SOURCE_ROOT/tsconfig.json" \
|
|
46
|
+
KIOKUKO_REQUIRE_DSH_NATIVE=1 \
|
|
47
|
+
node scripts/run-tests.mjs tests/dsh/integration/session-history-compatibility.test.ts
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Explicit diagnostic repair
|
|
51
|
+
|
|
52
|
+
The scripts remain available for inspecting a particular artifact, older
|
|
53
|
+
continuation-source issues, or hosts without the automatic adapter. Finish
|
|
54
|
+
active tasks and stop every DSH process using the file before running them.
|
|
18
55
|
|
|
19
56
|
From this Kiokuko checkout, set the exact `raw log:` path printed in the error
|
|
20
57
|
and a built Session format catalog matching the DSH installation that will read
|
package/dsh/cordis.patch.yml
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
- insert:
|
|
7
7
|
- id: kiokuko-dsh
|
|
8
8
|
name: 'kiokuko-dsh'
|
|
9
|
-
inject: [skills, systemPrompt, tools, commands, userQuestions, sessions, sessionQuery, llm, agents, attachments, connection, subagents]
|
|
9
|
+
inject: [skills, systemPrompt, tools, commands, userQuestions, sessions, sessionQuery, sessionPersistence, llm, agents, attachments, connection, subagents]
|
|
10
10
|
config:
|
|
11
11
|
enabled: true
|
|
12
12
|
orca:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiokuko-dsh",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.40",
|
|
4
4
|
"description": "Kiokuko plugin for DeepSeek Harness",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"docs/",
|
|
27
27
|
"scripts/repair-session-log.mjs",
|
|
28
28
|
"scripts/repair-continuation-source.mjs",
|
|
29
|
+
"scripts/session-history-codec.mjs",
|
|
30
|
+
"scripts/session-history-codec.d.mts",
|
|
29
31
|
"README.md",
|
|
30
32
|
"README.ja.md",
|
|
31
33
|
"README.zh-CN.md",
|
|
@@ -78,12 +80,14 @@
|
|
|
78
80
|
"readPaths": [
|
|
79
81
|
"Configured Kiokuko SQLite database and embedding assets",
|
|
80
82
|
"Registered project roots and their repository metadata",
|
|
81
|
-
"Orca traces belonging to the exact native DSH session"
|
|
83
|
+
"Orca traces belonging to the exact native DSH session",
|
|
84
|
+
"Stored native DSH session IDs and histories for startup validation and legacy Kiokuko compatibility"
|
|
82
85
|
],
|
|
83
86
|
"writePaths": [
|
|
84
87
|
"Configured Kiokuko database and pre-migration backups",
|
|
85
88
|
"DSH run, lease, receipt, retrieval, Deep inputs/artifacts/budgets/reports, post-completion memory-finalization, and embedding state inside that database",
|
|
86
|
-
".orca/runs and .orca/exports inside verified session workspaces, or the configured Kiokuko data directory"
|
|
89
|
+
".orca/runs and .orca/exports inside verified session workspaces, or the configured Kiokuko data directory",
|
|
90
|
+
"Legacy Kiokuko history compatibility under DSH's native write lease: exact rejected file, retained .bak, and disposable validation artifacts"
|
|
87
91
|
],
|
|
88
92
|
"commands": [
|
|
89
93
|
"Restricted repository-relative verifier and backup subprocesses when explicitly requested"
|
|
@@ -11,99 +11,11 @@ import {
|
|
|
11
11
|
unlinkSync,
|
|
12
12
|
writeFileSync,
|
|
13
13
|
} from 'node:fs'
|
|
14
|
-
import { constants as zlibConstants, zstdCompressSync, zstdDecompressSync } from 'node:zlib'
|
|
15
14
|
import { dirname, extname, join, resolve } from 'node:path'
|
|
16
15
|
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
17
|
-
import {
|
|
16
|
+
import { decodeSessionLog, parseJsonl, encodeSessionLog, repairInformationalRecord } from './session-history-codec.mjs'
|
|
18
17
|
|
|
19
|
-
const ZSTD_MAGIC = 0xFD2FB528
|
|
20
18
|
const CONTINUATION_FORMS = new Set(['continuation', 'loop-recovery'])
|
|
21
|
-
const INFORMATIONAL_TYPES = new Set(['kiokuko/evolution-observation', 'kiokuko/completion-report',
|
|
22
|
-
'kiokuko/execution-status', 'kiokuko/deep-report', 'kiokuko/deep-status'])
|
|
23
|
-
const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })
|
|
24
|
-
|
|
25
|
-
function scanZstdFrames(buffer) {
|
|
26
|
-
const frames = []
|
|
27
|
-
let offset = 0
|
|
28
|
-
while (offset < buffer.length) {
|
|
29
|
-
const start = offset
|
|
30
|
-
if (buffer.length - offset < 4) return { frames, tornStart: start }
|
|
31
|
-
if (buffer.readUInt32LE(offset) !== ZSTD_MAGIC) {
|
|
32
|
-
throw new Error(`corrupt Zstandard session log: invalid frame magic at byte ${offset}`)
|
|
33
|
-
}
|
|
34
|
-
offset += 4
|
|
35
|
-
if (offset === buffer.length) return { frames, tornStart: start }
|
|
36
|
-
const descriptor = buffer.readUInt8(offset)
|
|
37
|
-
offset += 1
|
|
38
|
-
if ((descriptor & 0x18) !== 0) {
|
|
39
|
-
throw new Error(`corrupt Zstandard session log: reserved frame-header bit at byte ${offset - 1}`)
|
|
40
|
-
}
|
|
41
|
-
const contentSizeFlag = descriptor >>> 6
|
|
42
|
-
const singleSegment = (descriptor & 0x20) !== 0
|
|
43
|
-
const checksum = (descriptor & 0x04) !== 0
|
|
44
|
-
const dictionaryFlag = descriptor & 0x03
|
|
45
|
-
const dictionaryBytes = dictionaryFlag === 3 ? 4 : dictionaryFlag
|
|
46
|
-
const contentSizeBytes = contentSizeFlag === 0
|
|
47
|
-
? (singleSegment ? 1 : 0)
|
|
48
|
-
: 1 << contentSizeFlag
|
|
49
|
-
const remainingHeaderBytes = (singleSegment ? 0 : 1) + dictionaryBytes + contentSizeBytes
|
|
50
|
-
if (buffer.length - offset < remainingHeaderBytes) return { frames, tornStart: start }
|
|
51
|
-
offset += remainingHeaderBytes
|
|
52
|
-
for (;;) {
|
|
53
|
-
if (buffer.length - offset < 3) return { frames, tornStart: start }
|
|
54
|
-
const blockHeader = buffer.readUIntLE(offset, 3)
|
|
55
|
-
offset += 3
|
|
56
|
-
const lastBlock = (blockHeader & 1) !== 0
|
|
57
|
-
const blockType = (blockHeader >>> 1) & 0x03
|
|
58
|
-
const blockSize = blockHeader >>> 3
|
|
59
|
-
if (blockType === 0x03) {
|
|
60
|
-
throw new Error(`corrupt Zstandard session log: reserved block type at byte ${offset - 3}`)
|
|
61
|
-
}
|
|
62
|
-
const payloadBytes = blockType === 0x01 ? 1 : blockSize
|
|
63
|
-
if (buffer.length - offset < payloadBytes) return { frames, tornStart: start }
|
|
64
|
-
offset += payloadBytes
|
|
65
|
-
if (lastBlock) break
|
|
66
|
-
}
|
|
67
|
-
if (checksum) {
|
|
68
|
-
if (buffer.length - offset < 4) return { frames, tornStart: start }
|
|
69
|
-
offset += 4
|
|
70
|
-
}
|
|
71
|
-
frames.push({ start, end: offset })
|
|
72
|
-
}
|
|
73
|
-
return { frames }
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function decodeSessionLog(buffer) {
|
|
77
|
-
const scan = scanZstdFrames(buffer)
|
|
78
|
-
if (scan.frames.length === 0) throw new Error('session log has no complete Zstandard frames')
|
|
79
|
-
if (scan.tornStart !== undefined) throw new Error('session log has an incomplete final Zstandard frame')
|
|
80
|
-
return Buffer.concat(scan.frames.map(({ start, end }) => {
|
|
81
|
-
try {
|
|
82
|
-
return zstdDecompressSync(buffer.subarray(start, end))
|
|
83
|
-
} catch (error) {
|
|
84
|
-
throw new Error(`corrupt Zstandard session log: frame at byte ${start} failed validation`, { cause: error })
|
|
85
|
-
}
|
|
86
|
-
}))
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function parseJsonl(plaintext) {
|
|
90
|
-
if (plaintext.length === 0 || plaintext[plaintext.length - 1] !== 0x0A) {
|
|
91
|
-
throw new Error('session log must end with a newline')
|
|
92
|
-
}
|
|
93
|
-
const text = fatalUtf8Decoder.decode(plaintext)
|
|
94
|
-
const lines = text.slice(0, -1).split('\n')
|
|
95
|
-
if (lines.length === 0 || lines.some(line => line.length === 0)) {
|
|
96
|
-
throw new Error('session log contains an empty JSONL record')
|
|
97
|
-
}
|
|
98
|
-
const records = lines.map((line, index) => {
|
|
99
|
-
try {
|
|
100
|
-
return JSON.parse(line)
|
|
101
|
-
} catch (error) {
|
|
102
|
-
throw new Error(`session log JSONL record ${index} is malformed`, { cause: error })
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
return { lines, records }
|
|
106
|
-
}
|
|
107
19
|
|
|
108
20
|
function objectRecord(value) {
|
|
109
21
|
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined
|
|
@@ -121,17 +33,8 @@ function repairedSource(value) {
|
|
|
121
33
|
function repairRecord(value) {
|
|
122
34
|
const record = objectRecord(value)
|
|
123
35
|
const data = objectRecord(record?.data)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (INFORMATIONAL_TYPES.has(record?.type)) {
|
|
127
|
-
if (Object.hasOwn(record, 'ignorable') && record.ignorable !== true) {
|
|
128
|
-
throw new Error('refusing to replace an invalid ignorable marker')
|
|
129
|
-
}
|
|
130
|
-
if (Object.hasOwn(record, 'surfaceOp') || Object.hasOwn(record, 'sourceEventSeqs')) {
|
|
131
|
-
throw new Error('refusing to mark a surface-changing event ignorable')
|
|
132
|
-
}
|
|
133
|
-
return record.ignorable === true ? value : { ...record, ignorable: true }
|
|
134
|
-
}
|
|
36
|
+
const informational = repairInformationalRecord(value)
|
|
37
|
+
if (informational !== value) return informational
|
|
135
38
|
if (record?.type === 'user/message') {
|
|
136
39
|
const source = repairedSource(data?.source)
|
|
137
40
|
return source === undefined ? value : { ...record, data: { ...data, source } }
|
|
@@ -235,20 +138,6 @@ function ensureBackup(path, original) {
|
|
|
235
138
|
return backup
|
|
236
139
|
}
|
|
237
140
|
|
|
238
|
-
function encodeSessionLog(plaintext) {
|
|
239
|
-
const newline = plaintext.indexOf(0x0A)
|
|
240
|
-
if (newline < 0) throw new Error('session log has no header line')
|
|
241
|
-
const headerFrame = zstdCompressSync(plaintext.subarray(0, newline + 1), {
|
|
242
|
-
params: { [zlibConstants.ZSTD_c_checksumFlag]: 1 },
|
|
243
|
-
})
|
|
244
|
-
const body = plaintext.subarray(newline + 1)
|
|
245
|
-
if (body.length === 0) return headerFrame
|
|
246
|
-
const bodyFrame = zstdCompressSync(body, {
|
|
247
|
-
params: { [zlibConstants.ZSTD_c_checksumFlag]: 1 },
|
|
248
|
-
})
|
|
249
|
-
return Buffer.concat([headerFrame, bodyFrame])
|
|
250
|
-
}
|
|
251
|
-
|
|
252
141
|
async function repair(path, catalog, dryRun = false) {
|
|
253
142
|
const original = readFileSync(path)
|
|
254
143
|
const plaintext = decodeSessionLog(original)
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export function decodeSessionLog(buffer: Buffer, maxOutputLength?: number): Buffer
|
|
2
|
+
export function parseJsonl(plaintext: Buffer): { lines: string[]; records: unknown[] }
|
|
3
|
+
export function encodeSessionLog(plaintext: Buffer): Buffer
|
|
4
|
+
export function repairInformationalRecord(value: unknown): unknown
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { constants as zlibConstants, zstdCompressSync, zstdDecompressSync } from 'node:zlib'
|
|
2
|
+
import { TextDecoder } from 'node:util'
|
|
3
|
+
|
|
4
|
+
const ZSTD_MAGIC = 0xFD2FB528
|
|
5
|
+
const INFORMATIONAL_TYPES = new Set(['kiokuko/evolution-observation', 'kiokuko/completion-report',
|
|
6
|
+
'kiokuko/execution-status', 'kiokuko/deep-report', 'kiokuko/deep-status'])
|
|
7
|
+
const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })
|
|
8
|
+
|
|
9
|
+
function scanZstdFrames(buffer) {
|
|
10
|
+
const frames = []
|
|
11
|
+
let offset = 0
|
|
12
|
+
while (offset < buffer.length) {
|
|
13
|
+
const start = offset
|
|
14
|
+
if (buffer.length - offset < 4) return { frames, tornStart: start }
|
|
15
|
+
if (buffer.readUInt32LE(offset) !== ZSTD_MAGIC) {
|
|
16
|
+
throw new Error(`corrupt Zstandard session log: invalid frame magic at byte ${offset}`)
|
|
17
|
+
}
|
|
18
|
+
offset += 4
|
|
19
|
+
if (offset === buffer.length) return { frames, tornStart: start }
|
|
20
|
+
const descriptor = buffer.readUInt8(offset)
|
|
21
|
+
offset += 1
|
|
22
|
+
if ((descriptor & 0x18) !== 0) {
|
|
23
|
+
throw new Error(`corrupt Zstandard session log: reserved frame-header bit at byte ${offset - 1}`)
|
|
24
|
+
}
|
|
25
|
+
const contentSizeFlag = descriptor >>> 6
|
|
26
|
+
const singleSegment = (descriptor & 0x20) !== 0
|
|
27
|
+
const checksum = (descriptor & 0x04) !== 0
|
|
28
|
+
const dictionaryFlag = descriptor & 0x03
|
|
29
|
+
const dictionaryBytes = dictionaryFlag === 3 ? 4 : dictionaryFlag
|
|
30
|
+
const contentSizeBytes = contentSizeFlag === 0
|
|
31
|
+
? (singleSegment ? 1 : 0)
|
|
32
|
+
: 1 << contentSizeFlag
|
|
33
|
+
const remainingHeaderBytes = (singleSegment ? 0 : 1) + dictionaryBytes + contentSizeBytes
|
|
34
|
+
if (buffer.length - offset < remainingHeaderBytes) return { frames, tornStart: start }
|
|
35
|
+
offset += remainingHeaderBytes
|
|
36
|
+
for (;;) {
|
|
37
|
+
if (buffer.length - offset < 3) return { frames, tornStart: start }
|
|
38
|
+
const blockHeader = buffer.readUIntLE(offset, 3)
|
|
39
|
+
offset += 3
|
|
40
|
+
const lastBlock = (blockHeader & 1) !== 0
|
|
41
|
+
const blockType = (blockHeader >>> 1) & 0x03
|
|
42
|
+
const blockSize = blockHeader >>> 3
|
|
43
|
+
if (blockType === 0x03) {
|
|
44
|
+
throw new Error(`corrupt Zstandard session log: reserved block type at byte ${offset - 3}`)
|
|
45
|
+
}
|
|
46
|
+
const payloadBytes = blockType === 0x01 ? 1 : blockSize
|
|
47
|
+
if (buffer.length - offset < payloadBytes) return { frames, tornStart: start }
|
|
48
|
+
offset += payloadBytes
|
|
49
|
+
if (lastBlock) break
|
|
50
|
+
}
|
|
51
|
+
if (checksum) {
|
|
52
|
+
if (buffer.length - offset < 4) return { frames, tornStart: start }
|
|
53
|
+
offset += 4
|
|
54
|
+
}
|
|
55
|
+
frames.push({ start, end: offset })
|
|
56
|
+
}
|
|
57
|
+
return { frames }
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function decodeSessionLog(buffer, maxOutputLength) {
|
|
61
|
+
const scan = scanZstdFrames(buffer)
|
|
62
|
+
if (scan.frames.length === 0) throw new Error('session log has no complete Zstandard frames')
|
|
63
|
+
if (scan.tornStart !== undefined) throw new Error('session log has an incomplete final Zstandard frame')
|
|
64
|
+
let remaining = maxOutputLength
|
|
65
|
+
return Buffer.concat(scan.frames.map(({ start, end }) => {
|
|
66
|
+
try {
|
|
67
|
+
if (remaining !== undefined && remaining <= 0) throw new Error('expanded session log exceeds compatibility limit')
|
|
68
|
+
const result = zstdDecompressSync(buffer.subarray(start, end), remaining === undefined ? {} : { maxOutputLength: remaining })
|
|
69
|
+
if (remaining !== undefined) remaining -= result.length
|
|
70
|
+
return result
|
|
71
|
+
} catch (error) {
|
|
72
|
+
throw new Error(`corrupt Zstandard session log: frame at byte ${start} failed validation`, { cause: error })
|
|
73
|
+
}
|
|
74
|
+
}))
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function parseJsonl(plaintext) {
|
|
78
|
+
if (plaintext.length === 0 || plaintext[plaintext.length - 1] !== 0x0A) {
|
|
79
|
+
throw new Error('session log must end with a newline')
|
|
80
|
+
}
|
|
81
|
+
const text = fatalUtf8Decoder.decode(plaintext)
|
|
82
|
+
const lines = text.slice(0, -1).split('\n')
|
|
83
|
+
if (lines.length === 0 || lines.some(line => line.length === 0)) {
|
|
84
|
+
throw new Error('session log contains an empty JSONL record')
|
|
85
|
+
}
|
|
86
|
+
const records = lines.map((line, index) => {
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(line)
|
|
89
|
+
} catch (error) {
|
|
90
|
+
throw new Error(`session log JSONL record ${index} is malformed`, { cause: error })
|
|
91
|
+
}
|
|
92
|
+
})
|
|
93
|
+
return { lines, records }
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function encodeSessionLog(plaintext) {
|
|
97
|
+
const newline = plaintext.indexOf(0x0A)
|
|
98
|
+
if (newline < 0) throw new Error('session log has no header line')
|
|
99
|
+
const headerFrame = zstdCompressSync(plaintext.subarray(0, newline + 1), {
|
|
100
|
+
params: { [zlibConstants.ZSTD_c_checksumFlag]: 1 },
|
|
101
|
+
})
|
|
102
|
+
const body = plaintext.subarray(newline + 1)
|
|
103
|
+
if (body.length === 0) return headerFrame
|
|
104
|
+
const bodyFrame = zstdCompressSync(body, {
|
|
105
|
+
params: { [zlibConstants.ZSTD_c_checksumFlag]: 1 },
|
|
106
|
+
})
|
|
107
|
+
return Buffer.concat([headerFrame, bodyFrame])
|
|
108
|
+
}
|
|
109
|
+
function repairInformationalRecord(value) {
|
|
110
|
+
const record = typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined
|
|
111
|
+
if (!INFORMATIONAL_TYPES.has(record?.type)) return value
|
|
112
|
+
if (Object.hasOwn(record, 'ignorable') && record.ignorable !== true) {
|
|
113
|
+
throw new Error('refusing to replace an invalid ignorable marker')
|
|
114
|
+
}
|
|
115
|
+
if (Object.hasOwn(record, 'surfaceOp') || Object.hasOwn(record, 'sourceEventSeqs')) {
|
|
116
|
+
throw new Error('refusing to mark a surface-changing event ignorable')
|
|
117
|
+
}
|
|
118
|
+
return record.ignorable === true ? value : { ...record, ignorable: true }
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { decodeSessionLog, parseJsonl, encodeSessionLog, repairInformationalRecord }
|