kiokuko-dsh 0.1.38 → 0.1.39
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 +8 -2
- package/dist/dsh/composition.d.ts.map +1 -1
- package/dist/dsh/composition.js +5 -0
- package/dist/dsh/composition.js.map +1 -1
- package/dist/dsh/session-history-compatibility.d.ts +7 -0
- package/dist/dsh/session-history-compatibility.d.ts.map +1 -0
- package/dist/dsh/session-history-compatibility.js +236 -0
- package/dist/dsh/session-history-compatibility.js.map +1 -0
- package/docs/session-history-repair.md +20 -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,11 @@ 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
|
+
- When DSH rejects a requested v3 history containing legacy Kiokuko informational
|
|
14
|
+
events, reads that exact native session file and marks the five supported
|
|
15
|
+
types ignorable under DSH's write lease. Retains a byte-for-byte `.bak`, validates
|
|
16
|
+
in a disposable local directory, and replaces the source atomically. It does
|
|
17
|
+
not scan and repair other sessions; invalid or unrelated records remain errors.
|
|
13
18
|
- Does not rewrite host configuration or repository instruction files.
|
|
14
19
|
Repository identity, run identity, lease, revision, and integrity mismatches
|
|
15
20
|
fail closed.
|
|
@@ -33,8 +38,9 @@ Kiokuko operation.
|
|
|
33
38
|
- `@huggingface/hub`, `@huggingface/transformers`, and `sqlite-vec` are optional
|
|
34
39
|
peer capabilities. They are not silently installed by the minimal package
|
|
35
40
|
path and are required only by the feature that explicitly uses them.
|
|
36
|
-
- `@deepseek-ai/cordis` is the host peer dependency. The
|
|
37
|
-
|
|
41
|
+
- `@deepseek-ai/cordis` is the host peer dependency. The loaded plugin temporarily
|
|
42
|
+
wraps the JSONL service's `open` method for legacy-history compatibility and
|
|
43
|
+
restores it on unload. It does not change DSH's installed code or event catalog.
|
|
38
44
|
|
|
39
45
|
## Installation lifecycle
|
|
40
46
|
|
|
@@ -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';
|
|
@@ -133,6 +134,10 @@ export async function mountDshComposition(ctx, host) {
|
|
|
133
134
|
throw new AggregateError(failures, 'kiokuko-dsh composition setup cleanup failed');
|
|
134
135
|
};
|
|
135
136
|
try {
|
|
137
|
+
const historyCompatibility = mountSessionHistoryCompatibility(ctx);
|
|
138
|
+
ingressDisposers.push(historyCompatibility.stop);
|
|
139
|
+
setupResourceDisposers.push(historyCompatibility.dispose);
|
|
140
|
+
cleanupDisposers.push(historyCompatibility.dispose);
|
|
136
141
|
if (host.deepPlanning && host.commands)
|
|
137
142
|
ingressDisposers.push(host.commands.register(host.deepPlanning.command()));
|
|
138
143
|
if (host.deepPlanning)
|
|
@@ -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,7 @@
|
|
|
1
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
/** Reversible adapter around the native open boundary; no startup scan or alternative reader. */
|
|
3
|
+
export declare function mountSessionHistoryCompatibility(ctx: Context): {
|
|
4
|
+
stop(): void;
|
|
5
|
+
dispose(): Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
//# 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;AA0I7C,iGAAiG;AACjG,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA6CzG"}
|
|
@@ -0,0 +1,236 @@
|
|
|
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
|
+
function nativeBackend(value) {
|
|
13
|
+
if (!value || typeof value !== 'object')
|
|
14
|
+
return false;
|
|
15
|
+
return ['open', 'stat', 'resolveCurrentLog', 'acquireWriteLease', 'persistHeader', 'readStoredLog']
|
|
16
|
+
.every(key => typeof value[key] === 'function');
|
|
17
|
+
}
|
|
18
|
+
function refusalPath(error) {
|
|
19
|
+
const refusal = error;
|
|
20
|
+
return refusal?.name === 'SessionFormatUnsupportedError' && refusal.location?.kind === 'jsonl'
|
|
21
|
+
&& typeof refusal.location.path === 'string' ? refusal.location.path : undefined;
|
|
22
|
+
}
|
|
23
|
+
/** Validate with the running backend implementation, including its current codec and identity checks. */
|
|
24
|
+
async function validateCandidate(backend, header, candidate, compression, signal) {
|
|
25
|
+
const root = await mkdtemp(join(tmpdir(), 'kiokuko-history-validation-'));
|
|
26
|
+
const scope = new Context();
|
|
27
|
+
const implementation = Object.getPrototypeOf(backend).constructor;
|
|
28
|
+
let fiber;
|
|
29
|
+
try {
|
|
30
|
+
signal?.throwIfAborted();
|
|
31
|
+
fiber = scope.plugin(implementation, { root, compression });
|
|
32
|
+
await fiber;
|
|
33
|
+
const validator = scope.get('sessionPersistence');
|
|
34
|
+
// This header only locates a native validation artifact. The candidate's
|
|
35
|
+
// end-seed marker supplies its actual inherited boundary during decoding.
|
|
36
|
+
await validator.persistHeader(header, 0);
|
|
37
|
+
const path = await validator.resolveCurrentLog(header.id, signal);
|
|
38
|
+
if (!path)
|
|
39
|
+
throw new Error('Native history validator did not materialize its header');
|
|
40
|
+
const file = await open(path, 'w');
|
|
41
|
+
try {
|
|
42
|
+
await file.writeFile(candidate);
|
|
43
|
+
await file.sync();
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await file.close();
|
|
47
|
+
}
|
|
48
|
+
const restored = await validator.readStoredLog(path, header.id, signal);
|
|
49
|
+
if (restored.tornTruncateTo !== undefined || restored.recoveredTail?.length) {
|
|
50
|
+
throw new Error('Legacy history compatibility cannot discard a damaged tail');
|
|
51
|
+
}
|
|
52
|
+
if (canonicalJson(restored.meta) !== canonicalJson(header))
|
|
53
|
+
throw new Error('Legacy history header changed during validation');
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
try {
|
|
57
|
+
await fiber?.dispose();
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
await rm(root, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** A backup is never replaced, including after an interrupted first attempt. */
|
|
65
|
+
async function retainBackup(path, original, mode) {
|
|
66
|
+
const backup = `${path}.bak`;
|
|
67
|
+
let file;
|
|
68
|
+
try {
|
|
69
|
+
file = await open(backup, 'wx', mode);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error.code !== 'EEXIST')
|
|
73
|
+
throw error;
|
|
74
|
+
const status = await lstat(backup);
|
|
75
|
+
if (!status.isFile() || status.isSymbolicLink() || !(await readFile(backup)).equals(original)) {
|
|
76
|
+
throw new Error('Existing session backup differs; refusing to overwrite it');
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await file.writeFile(original);
|
|
82
|
+
await file.sync();
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
await file.close();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Only the exact rejected current-generation artifact may change, under DSH's own kernel lock. */
|
|
89
|
+
async function repairHistory(backend, id, rejectedPath, signal) {
|
|
90
|
+
signal?.throwIfAborted();
|
|
91
|
+
const path = await backend.resolveCurrentLog(id, signal);
|
|
92
|
+
if (path !== rejectedPath || !['session.v3.jsonl.zstd', 'session.v3.jsonl'].includes(basename(path))) {
|
|
93
|
+
throw new Error('Legacy compatibility requires the exact native v3 session artifact');
|
|
94
|
+
}
|
|
95
|
+
const snapshot = await backend.stat(id, signal ? { signal } : undefined);
|
|
96
|
+
if (!snapshot || snapshot.header.id !== id || snapshot.header.version !== 3)
|
|
97
|
+
throw new Error('Legacy session identity mismatch');
|
|
98
|
+
const lease = await backend.acquireWriteLease(snapshot.header);
|
|
99
|
+
try {
|
|
100
|
+
signal?.throwIfAborted();
|
|
101
|
+
const parent = await realpath(dirname(path));
|
|
102
|
+
const status = await lstat(path);
|
|
103
|
+
if (!status.isFile() || status.isSymbolicLink() || status.size > MAX_COMPRESSED_BYTES) {
|
|
104
|
+
throw new Error('Legacy history must be a regular file within the compatibility size limit');
|
|
105
|
+
}
|
|
106
|
+
const original = await readFile(path);
|
|
107
|
+
if (original.length > MAX_COMPRESSED_BYTES)
|
|
108
|
+
throw new Error('Legacy history exceeds the compatibility size limit');
|
|
109
|
+
const compressed = path.endsWith('.zstd');
|
|
110
|
+
const parsed = parseJsonl(compressed ? decodeSessionLog(original, MAX_EXPANDED_BYTES) : original);
|
|
111
|
+
const physicalHeader = parsed.records[0];
|
|
112
|
+
if (physicalHeader?.type !== 'session' || physicalHeader.id !== id || physicalHeader.version !== 3)
|
|
113
|
+
throw new Error('Legacy physical header mismatch');
|
|
114
|
+
let changed = false;
|
|
115
|
+
const lines = parsed.records.map((record, index) => {
|
|
116
|
+
if (index === 0)
|
|
117
|
+
return parsed.lines[index];
|
|
118
|
+
const compatible = repairInformationalRecord(record);
|
|
119
|
+
if (compatible === record)
|
|
120
|
+
return parsed.lines[index];
|
|
121
|
+
changed = true;
|
|
122
|
+
return JSON.stringify(compatible);
|
|
123
|
+
});
|
|
124
|
+
if (!changed)
|
|
125
|
+
return;
|
|
126
|
+
const plaintext = Buffer.from(`${lines.join('\n')}\n`);
|
|
127
|
+
const candidate = compressed ? encodeSessionLog(plaintext) : plaintext;
|
|
128
|
+
await validateCandidate(backend, snapshot.header, candidate, compressed ? 'zstd' : 'none', signal);
|
|
129
|
+
signal?.throwIfAborted();
|
|
130
|
+
if (await backend.resolveCurrentLog(id, signal) !== path || await realpath(dirname(path)) !== parent
|
|
131
|
+
|| !(await readFile(path)).equals(original))
|
|
132
|
+
throw new Error('Legacy history changed before replacement');
|
|
133
|
+
await retainBackup(path, original, status.mode & 0o777);
|
|
134
|
+
const temporary = `${path}.kiokuko-${randomUUID()}.tmp`;
|
|
135
|
+
const file = await open(temporary, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, status.mode & 0o777);
|
|
136
|
+
try {
|
|
137
|
+
try {
|
|
138
|
+
await file.writeFile(candidate);
|
|
139
|
+
await file.sync();
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
await file.close();
|
|
143
|
+
}
|
|
144
|
+
signal?.throwIfAborted();
|
|
145
|
+
const current = await lstat(path);
|
|
146
|
+
if (current.ino !== status.ino || current.dev !== status.dev || await realpath(dirname(path)) !== parent
|
|
147
|
+
|| !(await readFile(path)).equals(original))
|
|
148
|
+
throw new Error('Legacy history changed while staging compatibility update');
|
|
149
|
+
await rename(temporary, path);
|
|
150
|
+
if (process.platform !== 'win32') {
|
|
151
|
+
const directory = await open(dirname(path), 'r');
|
|
152
|
+
try {
|
|
153
|
+
await directory.sync();
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await directory.close();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
await rm(temporary, { force: true });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
await lease.release();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** Reversible adapter around the native open boundary; no startup scan or alternative reader. */
|
|
169
|
+
export function mountSessionHistoryCompatibility(ctx) {
|
|
170
|
+
if (typeof ctx.get !== 'function')
|
|
171
|
+
return { stop() { }, async dispose() { } };
|
|
172
|
+
const backend = ctx.get('sessionPersistence', false);
|
|
173
|
+
if (!nativeBackend(backend))
|
|
174
|
+
return { stop() { }, async dispose() { } };
|
|
175
|
+
let installation = backend[ownership];
|
|
176
|
+
if (!installation) {
|
|
177
|
+
const original = backend.open;
|
|
178
|
+
const descriptor = Object.getOwnPropertyDescriptor(backend, 'open');
|
|
179
|
+
const pending = new Map();
|
|
180
|
+
let active = true;
|
|
181
|
+
const wrapped = async function (id, access, options) {
|
|
182
|
+
try {
|
|
183
|
+
return await original.call(this, id, access, options);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
const path = refusalPath(error);
|
|
187
|
+
if (!active || !path)
|
|
188
|
+
throw error;
|
|
189
|
+
options?.signal?.throwIfAborted();
|
|
190
|
+
const operation = (pending.get(id) ?? Promise.resolve()).catch(() => { }).then(() => {
|
|
191
|
+
if (!active)
|
|
192
|
+
throw error;
|
|
193
|
+
return repairHistory(backend, id, path, options?.signal);
|
|
194
|
+
});
|
|
195
|
+
pending.set(id, operation);
|
|
196
|
+
try {
|
|
197
|
+
await operation;
|
|
198
|
+
}
|
|
199
|
+
catch (cause) {
|
|
200
|
+
options?.signal?.throwIfAborted();
|
|
201
|
+
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
202
|
+
throw new Error(`Kiokuko legacy history compatibility failed (raw log: ${path}): ${detail}; original history retained or backed up`, { cause });
|
|
203
|
+
}
|
|
204
|
+
finally {
|
|
205
|
+
if (pending.get(id) === operation)
|
|
206
|
+
pending.delete(id);
|
|
207
|
+
}
|
|
208
|
+
options?.signal?.throwIfAborted();
|
|
209
|
+
return original.call(this, id, access, options);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
installation = { owners: 0, stop() {
|
|
213
|
+
active = false;
|
|
214
|
+
if (Object.getOwnPropertyDescriptor(backend, 'open')?.value === wrapped) {
|
|
215
|
+
if (descriptor)
|
|
216
|
+
Object.defineProperty(backend, 'open', descriptor);
|
|
217
|
+
else
|
|
218
|
+
delete backend.open;
|
|
219
|
+
}
|
|
220
|
+
delete backend[ownership];
|
|
221
|
+
}, async drain() { await Promise.allSettled([...pending.values()]); } };
|
|
222
|
+
Object.defineProperty(backend, 'open', { configurable: true, writable: true, value: wrapped });
|
|
223
|
+
backend[ownership] = installation;
|
|
224
|
+
}
|
|
225
|
+
const owned = installation;
|
|
226
|
+
owned.owners++;
|
|
227
|
+
let stopped = false;
|
|
228
|
+
const stop = () => { if (!stopped) {
|
|
229
|
+
stopped = true;
|
|
230
|
+
if (--owned.owners === 0)
|
|
231
|
+
owned.stop();
|
|
232
|
+
} };
|
|
233
|
+
return { stop, async dispose() { stop(); if (owned.owners === 0)
|
|
234
|
+
await owned.drain(); } };
|
|
235
|
+
}
|
|
236
|
+
//# 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,26 @@ 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
|
+
Once the updated plugin is loaded, opening an affected v3 chat automatically
|
|
16
|
+
marks the five historical informational types below as ignorable and retries
|
|
17
|
+
DSH's normal reader. This applies to both viewing history and resuming a chat.
|
|
18
|
+
It handles the requested session only; installation does not scan or rewrite
|
|
19
|
+
other chats. New observations and notices continue to use Kiokuko's database.
|
|
20
|
+
|
|
21
|
+
The compatibility adapter acquires DSH's native session write lease, validates
|
|
22
|
+
the complete candidate with the running JSONL backend, retains an identical
|
|
23
|
+
`.bak`, and replaces the file atomically. Event bodies, sequence numbers,
|
|
24
|
+
timestamps and fork boundaries are preserved. It refuses active writers,
|
|
25
|
+
conflicting backups, symbolic-link artifacts, damaged logs and unrelated
|
|
26
|
+
required event types. Automatic repair is limited to v3 JSONL/Zstandard files
|
|
27
|
+
up to 64 MiB on disk and 256 MiB expanded. Unloading Kiokuko restores the native
|
|
28
|
+
reader and waits for any repair already in progress.
|
|
29
|
+
|
|
30
|
+
## Explicit diagnostic repair
|
|
31
|
+
|
|
32
|
+
The scripts remain available for inspecting a particular artifact, older
|
|
33
|
+
continuation-source issues, or hosts without the automatic adapter. Finish
|
|
34
|
+
active tasks and stop every DSH process using the file before running them.
|
|
18
35
|
|
|
19
36
|
From this Kiokuko checkout, set the exact `raw log:` path printed in the error
|
|
20
37
|
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.39",
|
|
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
|
+
"The exact native v3 session history rejected for legacy Kiokuko informational events"
|
|
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 }
|