@scotthuang/agent-knock-knock 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +18 -8
  3. package/dist/src/agent-session-provider.d.ts +1 -1
  4. package/dist/src/claude-local-transcript-provider.d.ts +29 -1
  5. package/dist/src/claude-local-transcript-provider.js +313 -0
  6. package/dist/src/claude-local-transcript-provider.js.map +1 -1
  7. package/dist/src/claude-terminal-agent-adapter.d.ts +6 -1
  8. package/dist/src/claude-terminal-agent-adapter.js +178 -0
  9. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  10. package/dist/src/cli.js +4745 -355
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/codex-local-session-provider.d.ts +2 -2
  13. package/dist/src/codex-local-session-provider.js +2 -2
  14. package/dist/src/codex-local-session-provider.js.map +1 -1
  15. package/dist/src/codex-store-adapter.d.ts +11 -3
  16. package/dist/src/codex-store-adapter.js +371 -4
  17. package/dist/src/codex-store-adapter.js.map +1 -1
  18. package/dist/src/codex-terminal-agent-adapter.d.ts +6 -1
  19. package/dist/src/codex-terminal-agent-adapter.js +192 -0
  20. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  21. package/dist/src/managed-session.d.ts +163 -0
  22. package/dist/src/managed-session.js +873 -0
  23. package/dist/src/managed-session.js.map +1 -0
  24. package/dist/src/native-thread-lifecycle-policy.d.ts +57 -0
  25. package/dist/src/native-thread-lifecycle-policy.js +116 -0
  26. package/dist/src/native-thread-lifecycle-policy.js.map +1 -0
  27. package/dist/src/openclaw-plugin-helpers.d.ts +31 -6
  28. package/dist/src/openclaw-plugin-helpers.js +226 -9
  29. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  30. package/dist/src/openclaw-plugin.js +238 -23
  31. package/dist/src/openclaw-plugin.js.map +1 -1
  32. package/dist/src/protocol.d.ts +6 -0
  33. package/dist/src/protocol.js.map +1 -1
  34. package/dist/src/session-store.d.ts +57 -0
  35. package/dist/src/session-store.js +529 -0
  36. package/dist/src/session-store.js.map +1 -0
  37. package/dist/src/store.d.ts +2 -1
  38. package/dist/src/store.js +233 -21
  39. package/dist/src/store.js.map +1 -1
  40. package/dist/src/terminal-agent-adapter.d.ts +153 -0
  41. package/dist/src/terminal-agent-adapter.js +12 -0
  42. package/dist/src/terminal-agent-adapter.js.map +1 -1
  43. package/dist/src/terminal-agent-bridge.d.ts +8 -0
  44. package/dist/src/terminal-agent-bridge.js +15 -0
  45. package/dist/src/terminal-agent-bridge.js.map +1 -1
  46. package/dist/src/terminal-control-provider.d.ts +2 -0
  47. package/dist/src/terminal-control-provider.js +1 -0
  48. package/dist/src/terminal-control-provider.js.map +1 -1
  49. package/docs/quickstart-tmux.md +12 -1
  50. package/openclaw.plugin.json +14 -2
  51. package/package.json +1 -1
  52. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +23 -5
@@ -0,0 +1,529 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { assertManagedSessionId, assertManagedSessionState, assertNativeThreadTransition, managedSessionStorageKey } from "./managed-session.js";
5
+ import { assertStoreReadable, ensureDir, withStoreWriterLease } from "./store.js";
6
+ const PRIVATE_FILE_MODE = 0o600;
7
+ const NO_FOLLOW_FLAG = typeof fs.constants.O_NOFOLLOW === "number"
8
+ ? fs.constants.O_NOFOLLOW
9
+ : 0;
10
+ const SESSIONS_DIRECTORY = "sessions";
11
+ const TRANSITIONS_DIRECTORY = "transitions";
12
+ const SESSION_STATE_FILE = "state.json";
13
+ export class ManagedSessionConflictError extends Error {
14
+ code = "AKK_MANAGED_SESSION_CONFLICT";
15
+ sessionId;
16
+ expectedRevision;
17
+ actualRevision;
18
+ constructor(sessionId, expectedRevision, actualRevision, detail) {
19
+ super(`managed Session ${sessionId} changed concurrently` +
20
+ ` (expected revision ${String(expectedRevision)}, actual ${String(actualRevision)})` +
21
+ (detail ? `: ${detail}` : ""));
22
+ this.name = "ManagedSessionConflictError";
23
+ this.sessionId = sessionId;
24
+ this.expectedRevision = expectedRevision;
25
+ this.actualRevision = actualRevision;
26
+ }
27
+ }
28
+ export class ManagedSessionStateMissingError extends Error {
29
+ code = "AKK_MANAGED_SESSION_STATE_MISSING";
30
+ sessionId;
31
+ constructor(sessionId) {
32
+ super(`Store protocol 3 requires authoritative state for managed Session ${sessionId}; ` +
33
+ "refusing to infer a binding from Turn recency");
34
+ this.name = "ManagedSessionStateMissingError";
35
+ this.sessionId = sessionId;
36
+ }
37
+ }
38
+ export class ManagedSessionNativeThreadConflictError extends Error {
39
+ code = "AKK_MANAGED_SESSION_NATIVE_THREAD_CONFLICT";
40
+ sessionId;
41
+ nativeThreadId;
42
+ conflictingSessionIds;
43
+ constructor(sessionId, nativeThreadId, conflictingSessionIds) {
44
+ const conflicts = [...conflictingSessionIds].sort();
45
+ super(`managed Session ${sessionId} cannot claim native thread ${nativeThreadId}; ` +
46
+ `it is already recorded by ${conflicts.join(", ")}`);
47
+ this.name = "ManagedSessionNativeThreadConflictError";
48
+ this.sessionId = sessionId;
49
+ this.nativeThreadId = nativeThreadId;
50
+ this.conflictingSessionIds = conflicts;
51
+ }
52
+ }
53
+ export class NativeThreadTransitionConflictError extends Error {
54
+ code = "AKK_NATIVE_THREAD_TRANSITION_CONFLICT";
55
+ transitionId;
56
+ expectedRevision;
57
+ actualRevision;
58
+ constructor(transitionId, expectedRevision, actualRevision, detail) {
59
+ super(`native thread transition ${transitionId} changed concurrently` +
60
+ ` (expected revision ${String(expectedRevision)}, actual ${String(actualRevision)})` +
61
+ (detail ? `: ${detail}` : ""));
62
+ this.name = "NativeThreadTransitionConflictError";
63
+ this.transitionId = transitionId;
64
+ this.expectedRevision = expectedRevision;
65
+ this.actualRevision = actualRevision;
66
+ }
67
+ }
68
+ export function managedSessionsDir(storeDir) {
69
+ return path.join(storeDir, SESSIONS_DIRECTORY);
70
+ }
71
+ export function nativeThreadTransitionsDir(storeDir) {
72
+ return path.join(storeDir, TRANSITIONS_DIRECTORY);
73
+ }
74
+ export function pathsForManagedSession(sessionId, storeDir) {
75
+ assertManagedSessionId(sessionId);
76
+ const directory = path.join(managedSessionsDir(storeDir), managedSessionStorageKey(sessionId));
77
+ assertContained(directory, managedSessionsDir(storeDir), "session directory");
78
+ return { directory, statePath: path.join(directory, SESSION_STATE_FILE) };
79
+ }
80
+ export function pathsForNativeThreadTransition(transitionId, storeDir) {
81
+ validateRecordId(transitionId, "transition id");
82
+ const directory = path.join(nativeThreadTransitionsDir(storeDir), transitionId);
83
+ assertContained(directory, nativeThreadTransitionsDir(storeDir), "transition directory");
84
+ return { directory, statePath: path.join(directory, SESSION_STATE_FILE) };
85
+ }
86
+ /**
87
+ * Create or compare-and-swap an authoritative Session record. Callers must use
88
+ * the returned value (and its incremented revision) for a later update.
89
+ */
90
+ export function saveManagedSession(storeDir, state, options) {
91
+ assertManagedSessionState(state, undefined, { allowMissingRevision: true });
92
+ assertExpectedRevision(options?.expectedRevision);
93
+ const paths = pathsForManagedSession(state.session_id, storeDir);
94
+ return withStoreWriterLease(storeDir, () => {
95
+ const current = tryReadManagedSessionState(paths, state.session_id);
96
+ const actualRevision = current?.revision ?? null;
97
+ if (actualRevision !== options.expectedRevision) {
98
+ throw new ManagedSessionConflictError(state.session_id, options.expectedRevision, actualRevision);
99
+ }
100
+ if (state.revision !== undefined &&
101
+ state.revision !== (options.expectedRevision ?? 1)) {
102
+ throw new ManagedSessionConflictError(state.session_id, options.expectedRevision, actualRevision, `candidate carries revision ${state.revision}`);
103
+ }
104
+ if (current) {
105
+ assertImmutableSessionFields(current, state);
106
+ assertSafeBindingReplacement(current, state);
107
+ }
108
+ assertUniqueManagedNativeThreadBinding(storeDir, state);
109
+ const revision = current ? requiredRevision(current) + 1 : 1;
110
+ if (!Number.isSafeInteger(revision)) {
111
+ throw new Error(`managed Session ${state.session_id} revision overflow`);
112
+ }
113
+ const next = { ...state, revision };
114
+ assertManagedSessionState(next, state.session_id);
115
+ atomicSaveJson(paths.statePath, next);
116
+ return next;
117
+ });
118
+ }
119
+ function assertUniqueManagedNativeThreadBinding(storeDir, candidate) {
120
+ const nativeThreadId = candidate.binding?.native_thread_id?.toLowerCase();
121
+ if (!nativeThreadId) {
122
+ return;
123
+ }
124
+ const conflicts = listManagedSessions(storeDir)
125
+ .filter((state) => state.session_id !== candidate.session_id &&
126
+ state.agent === candidate.agent &&
127
+ state.binding?.native_thread_id?.toLowerCase() === nativeThreadId)
128
+ .map((state) => state.session_id);
129
+ if (conflicts.length > 0) {
130
+ throw new ManagedSessionNativeThreadConflictError(candidate.session_id, nativeThreadId, conflicts);
131
+ }
132
+ }
133
+ export function loadManagedSession(storeDir, sessionId) {
134
+ const compatibility = assertStoreReadable(storeDir);
135
+ const paths = pathsForManagedSession(sessionId, storeDir);
136
+ try {
137
+ const state = readJsonFile(paths.statePath, "managed session state");
138
+ assertManagedSessionState(state, sessionId);
139
+ return state;
140
+ }
141
+ catch (error) {
142
+ if (isNodeError(error, "ENOENT") && compatibility.writer_protocol === 3) {
143
+ throw new ManagedSessionStateMissingError(sessionId);
144
+ }
145
+ throw error;
146
+ }
147
+ }
148
+ export function tryLoadManagedSession(storeDir, sessionId) {
149
+ try {
150
+ return loadManagedSession(storeDir, sessionId);
151
+ }
152
+ catch (error) {
153
+ if (isNodeError(error, "ENOENT") ||
154
+ error instanceof ManagedSessionStateMissingError) {
155
+ return undefined;
156
+ }
157
+ throw error;
158
+ }
159
+ }
160
+ export function listManagedSessions(storeDir) {
161
+ if (!fs.existsSync(storeDir)) {
162
+ return [];
163
+ }
164
+ const compatibility = assertStoreReadable(storeDir);
165
+ const root = managedSessionsDir(storeDir);
166
+ if (!fs.existsSync(root)) {
167
+ if (compatibility.writer_protocol === 3) {
168
+ throw new Error(`Store protocol 3 requires a managed sessions directory: ${root}`);
169
+ }
170
+ return [];
171
+ }
172
+ assertRealDirectory(root, "managed sessions directory");
173
+ return fs.readdirSync(root, { withFileTypes: true })
174
+ .map((entry) => {
175
+ if (entry.isSymbolicLink() ||
176
+ !entry.isDirectory() ||
177
+ !/^[0-9a-f]{64}$/u.test(entry.name)) {
178
+ throw new Error(`managed sessions directory contains an invalid entry: ${path.join(root, entry.name)}`);
179
+ }
180
+ const statePath = path.join(root, entry.name, SESSION_STATE_FILE);
181
+ const state = readJsonFile(statePath, "managed session state");
182
+ assertManagedSessionState(state);
183
+ if (entry.name !== managedSessionStorageKey(state.session_id)) {
184
+ throw new Error(`managed session storage key does not match ${state.session_id}`);
185
+ }
186
+ return state;
187
+ })
188
+ .sort((left, right) => right.updated_at.localeCompare(left.updated_at) ||
189
+ left.session_id.localeCompare(right.session_id));
190
+ }
191
+ export function saveNativeThreadTransition(storeDir, transition, options) {
192
+ assertNativeThreadTransition(transition, undefined, {
193
+ allowMissingRevision: true
194
+ });
195
+ assertExpectedRevision(options?.expectedRevision);
196
+ const paths = pathsForNativeThreadTransition(transition.transition_id, storeDir);
197
+ return withStoreWriterLease(storeDir, () => {
198
+ const current = tryReadNativeThreadTransitionState(paths, transition.transition_id);
199
+ const actualRevision = current?.revision ?? null;
200
+ if (actualRevision !== options.expectedRevision) {
201
+ throw new NativeThreadTransitionConflictError(transition.transition_id, options.expectedRevision, actualRevision);
202
+ }
203
+ if (transition.revision !== undefined &&
204
+ transition.revision !== (options.expectedRevision ?? 1)) {
205
+ throw new NativeThreadTransitionConflictError(transition.transition_id, options.expectedRevision, actualRevision, `candidate carries revision ${transition.revision}`);
206
+ }
207
+ if (current) {
208
+ assertImmutableTransitionFields(current, transition);
209
+ assertTransitionStatusAdvance(current.status, transition.status);
210
+ }
211
+ const revision = current
212
+ ? requiredTransitionRevision(current) + 1
213
+ : 1;
214
+ if (!Number.isSafeInteger(revision)) {
215
+ throw new Error(`native thread transition ${transition.transition_id} revision overflow`);
216
+ }
217
+ const next = { ...transition, revision };
218
+ assertNativeThreadTransition(next, transition.transition_id);
219
+ atomicSaveJson(paths.statePath, next);
220
+ return next;
221
+ });
222
+ }
223
+ export function loadNativeThreadTransition(storeDir, transitionId) {
224
+ assertStoreReadable(storeDir);
225
+ const paths = pathsForNativeThreadTransition(transitionId, storeDir);
226
+ const transition = readJsonFile(paths.statePath, "native thread transition state");
227
+ assertNativeThreadTransition(transition, transitionId);
228
+ return transition;
229
+ }
230
+ function tryReadManagedSessionState(paths, sessionId) {
231
+ try {
232
+ const state = readJsonFile(paths.statePath, "managed session state");
233
+ assertManagedSessionState(state, sessionId);
234
+ return state;
235
+ }
236
+ catch (error) {
237
+ if (isNodeError(error, "ENOENT")) {
238
+ return undefined;
239
+ }
240
+ throw error;
241
+ }
242
+ }
243
+ function tryReadNativeThreadTransitionState(paths, transitionId) {
244
+ try {
245
+ const transition = readJsonFile(paths.statePath, "native thread transition state");
246
+ assertNativeThreadTransition(transition, transitionId);
247
+ return transition;
248
+ }
249
+ catch (error) {
250
+ if (isNodeError(error, "ENOENT")) {
251
+ return undefined;
252
+ }
253
+ throw error;
254
+ }
255
+ }
256
+ function assertImmutableSessionFields(current, candidate) {
257
+ const immutablePairs = [
258
+ ["agent", current.agent, candidate.agent],
259
+ ["workspace", current.workspace, candidate.workspace],
260
+ ["created_at", current.created_at, candidate.created_at],
261
+ ["lineage", current.lineage, candidate.lineage]
262
+ ];
263
+ const changed = immutablePairs.find(([, left, right]) => JSON.stringify(left) !== JSON.stringify(right));
264
+ if (changed) {
265
+ throw new Error(`managed Session ${current.session_id} cannot change immutable ${changed[0]}`);
266
+ }
267
+ }
268
+ function assertSafeBindingReplacement(current, candidate) {
269
+ const before = current.binding;
270
+ const after = candidate.binding;
271
+ if (!before && !after) {
272
+ return;
273
+ }
274
+ if (!before && after) {
275
+ if (after.generation !== 1) {
276
+ throw new Error(`first binding for managed Session ${current.session_id} must use generation 1`);
277
+ }
278
+ return;
279
+ }
280
+ if (before && !after) {
281
+ throw new Error(`managed Session ${current.session_id} cannot discard its binding evidence`);
282
+ }
283
+ if (!before || !after) {
284
+ return;
285
+ }
286
+ if (before.binding_id === after.binding_id &&
287
+ before.generation === after.generation) {
288
+ assertBindingIdentityRefinement(before, after, current.session_id);
289
+ return;
290
+ }
291
+ if (after.binding_id === before.binding_id ||
292
+ after.generation !== before.generation + 1) {
293
+ throw new Error(`managed Session ${current.session_id} binding replacement must use a new id and generation ${before.generation + 1}`);
294
+ }
295
+ }
296
+ function assertImmutableTransitionFields(current, candidate) {
297
+ const immutablePairs = [
298
+ ["operation", current.operation, candidate.operation],
299
+ ["terminal_id", current.terminal_id, candidate.terminal_id],
300
+ ["agent", current.agent, candidate.agent],
301
+ ["workspace", current.workspace, candidate.workspace],
302
+ ["source_session_id", current.source_session_id, candidate.source_session_id],
303
+ ["source_expected_revision", current.source_expected_revision, candidate.source_expected_revision],
304
+ ["source_previous_last_transition_id", current.source_previous_last_transition_id, candidate.source_previous_last_transition_id],
305
+ ["target_session_id", current.target_session_id, candidate.target_session_id],
306
+ ["target_expected_revision", current.target_expected_revision, candidate.target_expected_revision],
307
+ ["target_native_thread_id", current.target_native_thread_id, candidate.target_native_thread_id],
308
+ ["target_candidate_file_identity", current.target_candidate_file_identity, candidate.target_candidate_file_identity],
309
+ ["before_native_thread_id", current.before_native_thread_id, candidate.before_native_thread_id],
310
+ ["before_process_uuid", current.before_process_uuid, candidate.before_process_uuid],
311
+ ["before_process_started_at", current.before_process_started_at, candidate.before_process_started_at],
312
+ ["before_process_birth", current.before_process_birth, candidate.before_process_birth],
313
+ ["before_process_rollout", current.before_process_rollout, candidate.before_process_rollout],
314
+ ["before_binding", current.before_binding, candidate.before_binding],
315
+ ["adapter_version", current.adapter_version, candidate.adapter_version],
316
+ ["command_fingerprint", current.command_fingerprint, candidate.command_fingerprint],
317
+ ["dispatcher_pid", current.dispatcher_pid, candidate.dispatcher_pid],
318
+ ["prepared_at", current.prepared_at, candidate.prepared_at]
319
+ ];
320
+ if (current.after_binding !== undefined) {
321
+ immutablePairs.push([
322
+ "after_binding",
323
+ current.after_binding,
324
+ candidate.after_binding
325
+ ]);
326
+ }
327
+ if (current.reconciled_outcome !== undefined) {
328
+ immutablePairs.push([
329
+ "reconciled_outcome",
330
+ current.reconciled_outcome,
331
+ candidate.reconciled_outcome
332
+ ], ["reconciled_at", current.reconciled_at, candidate.reconciled_at]);
333
+ }
334
+ const changed = immutablePairs.find(([, left, right]) => JSON.stringify(left) !== JSON.stringify(right));
335
+ if (changed) {
336
+ throw new Error(`native thread transition ${current.transition_id} cannot change immutable ${changed[0]}`);
337
+ }
338
+ }
339
+ function assertTransitionStatusAdvance(current, candidate) {
340
+ const allowed = {
341
+ prepared: ["dispatching", "aborted"],
342
+ dispatching: ["submitted", "uncertain", "aborted"],
343
+ submitted: ["verified", "uncertain", "aborted"],
344
+ verified: ["committed"],
345
+ uncertain: ["verified", "aborted"],
346
+ committed: [],
347
+ aborted: []
348
+ };
349
+ if (!allowed[current].includes(candidate)) {
350
+ throw new Error(`native thread transition cannot move from ${current} to ${candidate}`);
351
+ }
352
+ }
353
+ function assertBindingIdentityRefinement(before, after, sessionId) {
354
+ const fixedBefore = {
355
+ binding_id: before.binding_id,
356
+ generation: before.generation,
357
+ terminal_id: before.terminal_id,
358
+ terminal_control: before.terminal_control,
359
+ pid: before.native_process.pid,
360
+ bound_at: before.bound_at
361
+ };
362
+ const fixedAfter = {
363
+ binding_id: after.binding_id,
364
+ generation: after.generation,
365
+ terminal_id: after.terminal_id,
366
+ terminal_control: after.terminal_control,
367
+ pid: after.native_process.pid,
368
+ bound_at: after.bound_at
369
+ };
370
+ if (JSON.stringify(fixedBefore) !== JSON.stringify(fixedAfter)) {
371
+ throw new Error(`managed Session ${sessionId} cannot mutate an existing binding identity`);
372
+ }
373
+ for (const [label, oldValue, newValue] of [
374
+ ["native_thread_id", before.native_thread_id, after.native_thread_id],
375
+ ["process_uuid", before.native_process.process_uuid, after.native_process.process_uuid],
376
+ ["process_birth", before.native_process.process_birth, after.native_process.process_birth],
377
+ ["rollout", before.native_process.rollout, after.native_process.rollout]
378
+ ]) {
379
+ if (oldValue !== undefined &&
380
+ JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
381
+ throw new Error(`managed Session ${sessionId} cannot replace verified binding ${label}`);
382
+ }
383
+ }
384
+ }
385
+ function requiredRevision(state) {
386
+ if (!Number.isSafeInteger(state.revision) || Number(state.revision) < 1) {
387
+ throw new Error(`managed Session ${state.session_id} has no valid revision`);
388
+ }
389
+ return Number(state.revision);
390
+ }
391
+ function requiredTransitionRevision(state) {
392
+ if (!Number.isSafeInteger(state.revision) || Number(state.revision) < 1) {
393
+ throw new Error(`native thread transition ${state.transition_id} has no valid revision`);
394
+ }
395
+ return Number(state.revision);
396
+ }
397
+ function assertExpectedRevision(value) {
398
+ if (value !== null &&
399
+ (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1)) {
400
+ throw new Error("expectedRevision must be null or a positive safe integer");
401
+ }
402
+ }
403
+ function atomicSaveJson(filePath, value) {
404
+ const recordRoot = path.dirname(path.dirname(filePath));
405
+ const recordDirectory = path.dirname(filePath);
406
+ const rootExisted = fs.existsSync(recordRoot);
407
+ ensureDir(recordRoot);
408
+ assertRealDirectory(recordRoot, "record root");
409
+ if (!rootExisted) {
410
+ fsyncDirectory(path.dirname(recordRoot));
411
+ }
412
+ const recordDirectoryExisted = fs.existsSync(recordDirectory);
413
+ ensureDir(recordDirectory);
414
+ if (!recordDirectoryExisted) {
415
+ fsyncDirectory(recordRoot);
416
+ }
417
+ assertRealDirectory(recordDirectory, "record directory");
418
+ assertRegularOrAbsent(filePath, "record state file");
419
+ const tempPath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${process.pid}.${randomUUID()}.tmp`);
420
+ let fd;
421
+ try {
422
+ fd = fs.openSync(tempPath, fs.constants.O_CREAT |
423
+ fs.constants.O_EXCL |
424
+ fs.constants.O_WRONLY |
425
+ NO_FOLLOW_FLAG, PRIVATE_FILE_MODE);
426
+ fs.fchmodSync(fd, PRIVATE_FILE_MODE);
427
+ fs.writeFileSync(fd, `${JSON.stringify(value, null, 2)}\n`, "utf8");
428
+ fs.fsyncSync(fd);
429
+ fs.closeSync(fd);
430
+ fd = undefined;
431
+ assertRegularOrAbsent(filePath, "record state file");
432
+ fs.renameSync(tempPath, filePath);
433
+ fs.chmodSync(filePath, PRIVATE_FILE_MODE);
434
+ fsyncDirectory(path.dirname(filePath));
435
+ }
436
+ finally {
437
+ if (fd !== undefined) {
438
+ fs.closeSync(fd);
439
+ }
440
+ try {
441
+ fs.unlinkSync(tempPath);
442
+ }
443
+ catch (error) {
444
+ if (!isNodeError(error, "ENOENT")) {
445
+ throw error;
446
+ }
447
+ }
448
+ }
449
+ }
450
+ function readJsonFile(filePath, label) {
451
+ assertRealDirectory(path.dirname(path.dirname(filePath)), `${label} root`);
452
+ assertRealDirectory(path.dirname(filePath), `${label} directory`);
453
+ const stat = fs.lstatSync(filePath);
454
+ if (stat.isSymbolicLink() || !stat.isFile()) {
455
+ throw new Error(`${label} must be a regular file: ${filePath}`);
456
+ }
457
+ const fd = fs.openSync(filePath, fs.constants.O_RDONLY | NO_FOLLOW_FLAG);
458
+ try {
459
+ if (!fs.fstatSync(fd).isFile()) {
460
+ throw new Error(`${label} must be a regular file: ${filePath}`);
461
+ }
462
+ return JSON.parse(fs.readFileSync(fd, "utf8"));
463
+ }
464
+ finally {
465
+ fs.closeSync(fd);
466
+ }
467
+ }
468
+ function validateRecordId(value, label) {
469
+ if (!value ||
470
+ value === "." ||
471
+ value === ".." ||
472
+ value.includes("\0") ||
473
+ path.posix.basename(value) !== value ||
474
+ path.win32.basename(value) !== value ||
475
+ path.isAbsolute(value)) {
476
+ throw new Error(`${label} is not safe for storage: ${value}`);
477
+ }
478
+ }
479
+ function assertContained(candidate, parent, label) {
480
+ const resolvedParent = path.resolve(parent);
481
+ const resolvedCandidate = path.resolve(candidate);
482
+ if (resolvedCandidate === resolvedParent ||
483
+ !resolvedCandidate.startsWith(`${resolvedParent}${path.sep}`)) {
484
+ throw new Error(`${label} escapes its Store root: ${candidate}`);
485
+ }
486
+ }
487
+ function assertRealDirectory(value, label) {
488
+ const stat = fs.lstatSync(value);
489
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
490
+ throw new Error(`${label} must be a real directory: ${value}`);
491
+ }
492
+ }
493
+ function assertRegularOrAbsent(value, label) {
494
+ try {
495
+ const stat = fs.lstatSync(value);
496
+ if (stat.isSymbolicLink() || !stat.isFile()) {
497
+ throw new Error(`${label} must be a regular file: ${value}`);
498
+ }
499
+ }
500
+ catch (error) {
501
+ if (!isNodeError(error, "ENOENT")) {
502
+ throw error;
503
+ }
504
+ }
505
+ }
506
+ function fsyncDirectory(directory) {
507
+ let fd;
508
+ try {
509
+ fd = fs.openSync(directory, fs.constants.O_RDONLY | NO_FOLLOW_FLAG);
510
+ fs.fsyncSync(fd);
511
+ }
512
+ catch (error) {
513
+ const code = isNodeError(error) ? error.code : undefined;
514
+ if (!["EINVAL", "ENOTSUP", "EPERM", "EISDIR"].includes(String(code))) {
515
+ throw error;
516
+ }
517
+ }
518
+ finally {
519
+ if (fd !== undefined) {
520
+ fs.closeSync(fd);
521
+ }
522
+ }
523
+ }
524
+ function isNodeError(error, code) {
525
+ return error instanceof Error &&
526
+ "code" in error &&
527
+ (code === undefined || error.code === code);
528
+ }
529
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EAKzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC,SAAS,CAAC,UAAU,KAAK,QAAQ;IAChE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU;IACzB,CAAC,CAAC,CAAC,CAAC;AACN,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAC5C,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAsBxC,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,GAAG,8BAA8B,CAAC;IACtC,SAAS,CAAS;IAClB,gBAAgB,CAAgB;IAChC,cAAc,CAAgB;IAEvC,YACE,SAAiB,EACjB,gBAA+B,EAC/B,cAA6B,EAC7B,MAAe;QAEf,KAAK,CACH,mBAAmB,SAAS,uBAAuB;YACnD,uBAAuB,MAAM,CAAC,gBAAgB,CAAC,YAAY,MAAM,CAAC,cAAc,CAAC,GAAG;YACpF,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,IAAI,GAAG,mCAAmC,CAAC;IAC3C,SAAS,CAAS;IAE3B,YAAY,SAAiB;QAC3B,KAAK,CACH,qEAAqE,SAAS,IAAI;YAClF,+CAA+C,CAChD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,uCAAwC,SAAQ,KAAK;IACvD,IAAI,GAAG,4CAA4C,CAAC;IACpD,SAAS,CAAS;IAClB,cAAc,CAAS;IACvB,qBAAqB,CAAoB;IAElD,YACE,SAAiB,EACjB,cAAsB,EACtB,qBAAwC;QAExC,MAAM,SAAS,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,KAAK,CACH,mBAAmB,SAAS,+BAA+B,cAAc,IAAI;YAC7E,6BAA6B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yCAAyC,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,mCAAoC,SAAQ,KAAK;IACnD,IAAI,GAAG,uCAAuC,CAAC;IAC/C,YAAY,CAAS;IACrB,gBAAgB,CAAgB;IAChC,cAAc,CAAgB;IAEvC,YACE,YAAoB,EACpB,gBAA+B,EAC/B,cAA6B,EAC7B,MAAe;QAEf,KAAK,CACH,4BAA4B,YAAY,uBAAuB;YAC/D,uBAAuB,MAAM,CAAC,gBAAgB,CAAC,YAAY,MAAM,CAAC,cAAc,CAAC,GAAG;YACpF,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9B,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAC;QAClD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,QAAgB;IAEhB,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,kBAAkB,CAAC,QAAQ,CAAC,EAC5B,wBAAwB,CAAC,SAAS,CAAC,CACpC,CAAC;IACF,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC9E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,YAAoB,EACpB,QAAgB;IAEhB,gBAAgB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IAChF,eAAe,CACb,SAAS,EACT,0BAA0B,CAAC,QAAQ,CAAC,EACpC,sBAAsB,CACvB,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,KAA0B,EAC1B,OAAkC;IAElC,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzC,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;QACjD,IAAI,cAAc,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAChD,MAAM,IAAI,2BAA2B,CACnC,KAAK,CAAC,UAAU,EAChB,OAAO,CAAC,gBAAgB,EACxB,cAAc,CACf,CAAC;QACJ,CAAC;QACD,IACE,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC5B,KAAK,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,EAClD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,KAAK,CAAC,UAAU,EAChB,OAAO,CAAC,gBAAgB,EACxB,cAAc,EACd,8BAA8B,KAAK,CAAC,QAAQ,EAAE,CAC/C,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7C,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,sCAAsC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,UAAU,oBAAoB,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAwB,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC;QACzD,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAClD,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sCAAsC,CAC7C,QAAgB,EAChB,SAA8B;IAE9B,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC;SAC5C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAChB,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU;QACzC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK;QAC/B,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,cAAc,CAClE;SACA,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,uCAAuC,CAC/C,SAAS,CAAC,UAAU,EACpB,cAAc,EACd,SAAS,CACV,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,SAAiB;IAEjB,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACrE,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,aAAa,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,+BAA+B,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,SAAiB;IAEjB,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC5B,KAAK,YAAY,+BAA+B,EAChD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,2DAA2D,IAAI,EAAE,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,mBAAmB,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACjD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IACE,KAAK,CAAC,cAAc,EAAE;YACtB,CAAC,KAAK,CAAC,WAAW,EAAE;YACpB,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACnC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,yDAAyD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QAC/D,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CACb,8CAA8C,KAAK,CAAC,UAAU,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAChD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAAgB,EAChB,UAAkC,EAClC,OAA0C;IAE1C,4BAA4B,CAAC,UAAU,EAAE,SAAS,EAAE;QAClD,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IACH,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,8BAA8B,CAC1C,UAAU,CAAC,aAAa,EACxB,QAAQ,CACT,CAAC;IACF,OAAO,oBAAoB,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzC,MAAM,OAAO,GAAG,kCAAkC,CAChD,KAAK,EACL,UAAU,CAAC,aAAa,CACzB,CAAC;QACF,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;QACjD,IAAI,cAAc,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAChD,MAAM,IAAI,mCAAmC,CAC3C,UAAU,CAAC,aAAa,EACxB,OAAO,CAAC,gBAAgB,EACxB,cAAc,CACf,CAAC;QACJ,CAAC;QACD,IACE,UAAU,CAAC,QAAQ,KAAK,SAAS;YACjC,UAAU,CAAC,QAAQ,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,EACvD,CAAC;YACD,MAAM,IAAI,mCAAmC,CAC3C,UAAU,CAAC,aAAa,EACxB,OAAO,CAAC,gBAAgB,EACxB,cAAc,EACd,8BAA8B,UAAU,CAAC,QAAQ,EAAE,CACpD,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,+BAA+B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACrD,6BAA6B,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC;YACzC,CAAC,CAAC,CAAC,CAAC;QACN,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,4BAA4B,UAAU,CAAC,aAAa,oBAAoB,CACzE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAA2B,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC;QACjE,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7D,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAAgB,EAChB,YAAoB;IAEpB,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,8BAA8B,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,YAAY,CAC7B,KAAK,CAAC,SAAS,EACf,gCAAgC,CACjC,CAAC;IACF,4BAA4B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACvD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,0BAA0B,CACjC,KAA0B,EAC1B,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;QACrE,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC,CACzC,KAAkC,EAClC,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,YAAY,CAC7B,KAAK,CAAC,SAAS,EACf,gCAAgC,CACjC,CAAC;QACF,4BAA4B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,OAA4B,EAC5B,SAA8B;IAE9B,MAAM,cAAc,GAAsC;QACxD,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;QACzC,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;QACrD,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;QACxD,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;KAChD,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACtD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC/C,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,UAAU,4BAA4B,OAAO,CAAC,CAAC,CAAC,EAAE,CAC9E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,OAA4B,EAC5B,SAA8B;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;IAChC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,qCAAqC,OAAO,CAAC,UAAU,wBAAwB,CAChF,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,UAAU,sCAAsC,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,IACE,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;QACtC,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EACtC,CAAC;QACD,+BAA+B,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IACD,IACE,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;QACtC,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,GAAG,CAAC,EAC1C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mBAAmB,OAAO,CAAC,UAAU,yDAAyD,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CACtH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CACtC,OAA+B,EAC/B,SAAiC;IAEjC,MAAM,cAAc,GAAsC;QACxD,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;QACrD,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC;QAC3D,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC;QACzC,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;QACrD,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,CAAC;QAC7E,CAAC,0BAA0B,EAAE,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,CAAC;QAClG,CAAC,oCAAoC,EAAE,OAAO,CAAC,kCAAkC,EAAE,SAAS,CAAC,kCAAkC,CAAC;QAChI,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,iBAAiB,CAAC;QAC7E,CAAC,0BAA0B,EAAE,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC,wBAAwB,CAAC;QAClG,CAAC,yBAAyB,EAAE,OAAO,CAAC,uBAAuB,EAAE,SAAS,CAAC,uBAAuB,CAAC;QAC/F,CAAC,gCAAgC,EAAE,OAAO,CAAC,8BAA8B,EAAE,SAAS,CAAC,8BAA8B,CAAC;QACpH,CAAC,yBAAyB,EAAE,OAAO,CAAC,uBAAuB,EAAE,SAAS,CAAC,uBAAuB,CAAC;QAC/F,CAAC,qBAAqB,EAAE,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,CAAC;QACnF,CAAC,2BAA2B,EAAE,OAAO,CAAC,yBAAyB,EAAE,SAAS,CAAC,yBAAyB,CAAC;QACrG,CAAC,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,oBAAoB,CAAC;QACtF,CAAC,wBAAwB,EAAE,OAAO,CAAC,sBAAsB,EAAE,SAAS,CAAC,sBAAsB,CAAC;QAC5F,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC;QACpE,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,eAAe,CAAC;QACvE,CAAC,qBAAqB,EAAE,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,CAAC;QACnF,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC;QACpE,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC;KAC5D,CAAC;IACF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC;YAClB,eAAe;YACf,OAAO,CAAC,aAAa;YACrB,SAAS,CAAC,aAAa;SACxB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC7C,cAAc,CAAC,IAAI,CACjB;YACE,oBAAoB;YACpB,OAAO,CAAC,kBAAkB;YAC1B,SAAS,CAAC,kBAAkB;SAC7B,EACD,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACtD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAC/C,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4BAA4B,OAAO,CAAC,aAAa,4BAA4B,OAAO,CAAC,CAAC,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,OAAqC,EACrC,SAAuC;IAEvC,MAAM,OAAO,GAAkF;QAC7F,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;QACpC,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;QAClD,SAAS,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC;QAC/C,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAClC,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,6CAA6C,OAAO,OAAO,SAAS,EAAE,CACvE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CACtC,MAA8B,EAC9B,KAA6B,EAC7B,SAAiB;IAEjB,MAAM,WAAW,GAAG;QAClB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IACF,MAAM,UAAU,GAAG;QACjB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG;QAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,mBAAmB,SAAS,6CAA6C,CAC1E,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACxC,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACrE,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;QACvF,CAAC,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;QAC1F,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;KAChE,EAAE,CAAC;QACX,IACE,QAAQ,KAAK,SAAS;YACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EACrD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mBAAmB,SAAS,oCAAoC,KAAK,EAAE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA0B;IAClD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,UAAU,wBAAwB,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA6B;IAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,CAAC,aAAa,wBAAwB,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IACE,KAAK,KAAK,IAAI;QACd,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EACxE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,KAAc;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9C,SAAS,CAAC,UAAU,CAAC,CAAC;IACtB,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,sBAAsB,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC9D,SAAS,CAAC,eAAe,CAAC,CAAC;IAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IACD,mBAAmB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACzD,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CACjE,CAAC;IACF,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CACd,QAAQ,EACR,EAAE,CAAC,SAAS,CAAC,OAAO;YAClB,EAAE,CAAC,SAAS,CAAC,MAAM;YACnB,EAAE,CAAC,SAAS,CAAC,QAAQ;YACrB,cAAc,EAChB,iBAAiB,CAClB,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACrC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjB,EAAE,GAAG,SAAS,CAAC;QACf,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACrD,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1C,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,KAAa;IACnD,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IAC3E,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAa;IACpD,IACE,CAAC,KAAK;QACN,KAAK,KAAK,GAAG;QACb,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK;QACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,SAAiB,EACjB,MAAc,EACd,KAAa;IAEb,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,IACE,iBAAiB,KAAK,cAAc;QACpC,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACvD,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4BAA4B,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACvC,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;QACpE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,IAAa;IAEb,OAAO,KAAK,YAAY,KAAK;QAC3B,MAAM,IAAI,KAAK;QACf,CAAC,IAAI,KAAK,SAAS,IAAK,KAA+B,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type AgentMessage, type Conversation } from "./protocol.js";
2
2
  declare const STORE_SCHEMA = "agent-knock-knock/store";
3
3
  export declare const STORE_FORMAT_VERSION = 1;
4
- export declare const STORE_WRITER_PROTOCOL = 2;
4
+ export declare const STORE_WRITER_PROTOCOL = 3;
5
5
  export interface StoreManifest {
6
6
  schema: typeof STORE_SCHEMA;
7
7
  format_version: number;
@@ -42,6 +42,7 @@ export interface ConversationPaths {
42
42
  }
43
43
  export declare function storeManifestPath(storeDir?: string): string;
44
44
  export declare function storeConversationsDir(storeDir?: string): string;
45
+ export declare function storeSessionsDir(storeDir?: string): string;
45
46
  export declare function inspectStoreCompatibility(storeDir?: string): StoreCompatibility;
46
47
  export declare function assertStoreReadable(storeDir?: string): StoreCompatibility;
47
48
  /**