@felan-ai/felan 0.12.7 → 0.12.9

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 (78) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +86 -4
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +5 -1
  5. package/dist/application.js.map +1 -1
  6. package/dist/extensions.d.ts +9 -2
  7. package/dist/extensions.d.ts.map +1 -1
  8. package/dist/extensions.js +9 -1
  9. package/dist/extensions.js.map +1 -1
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/lock.d.ts +15 -0
  15. package/dist/lock.d.ts.map +1 -0
  16. package/dist/lock.js +169 -0
  17. package/dist/lock.js.map +1 -0
  18. package/dist/memory/control.d.ts +8 -0
  19. package/dist/memory/control.d.ts.map +1 -0
  20. package/dist/memory/control.js +106 -0
  21. package/dist/memory/control.js.map +1 -0
  22. package/dist/memory/coordinator.d.ts +38 -0
  23. package/dist/memory/coordinator.d.ts.map +1 -0
  24. package/dist/memory/coordinator.js +396 -0
  25. package/dist/memory/coordinator.js.map +1 -0
  26. package/dist/memory/dreamer.d.ts +41 -0
  27. package/dist/memory/dreamer.d.ts.map +1 -0
  28. package/dist/memory/dreamer.js +531 -0
  29. package/dist/memory/dreamer.js.map +1 -0
  30. package/dist/memory/lease.d.ts +13 -0
  31. package/dist/memory/lease.d.ts.map +1 -0
  32. package/dist/memory/lease.js +188 -0
  33. package/dist/memory/lease.js.map +1 -0
  34. package/dist/memory/project.d.ts +7 -0
  35. package/dist/memory/project.d.ts.map +1 -0
  36. package/dist/memory/project.js +41 -0
  37. package/dist/memory/project.js.map +1 -0
  38. package/dist/memory/store.d.ts +52 -0
  39. package/dist/memory/store.d.ts.map +1 -0
  40. package/dist/memory/store.js +344 -0
  41. package/dist/memory/store.js.map +1 -0
  42. package/dist/runtime.d.ts +5 -1
  43. package/dist/runtime.d.ts.map +1 -1
  44. package/dist/runtime.js +68 -10
  45. package/dist/runtime.js.map +1 -1
  46. package/dist/settings.d.ts +3 -0
  47. package/dist/settings.d.ts.map +1 -1
  48. package/dist/settings.js +61 -27
  49. package/dist/settings.js.map +1 -1
  50. package/dist/startup-header.d.ts +1 -0
  51. package/dist/startup-header.d.ts.map +1 -1
  52. package/dist/startup-header.js +40 -0
  53. package/dist/startup-header.js.map +1 -1
  54. package/dist/subagents/agent-navigator.d.ts.map +1 -1
  55. package/dist/subagents/agent-navigator.js +11 -2
  56. package/dist/subagents/agent-navigator.js.map +1 -1
  57. package/dist/subagents/agent-transcript.d.ts.map +1 -1
  58. package/dist/subagents/agent-transcript.js +14 -2
  59. package/dist/subagents/agent-transcript.js.map +1 -1
  60. package/dist/subagents/catalog.d.ts.map +1 -1
  61. package/dist/subagents/catalog.js +4 -2
  62. package/dist/subagents/catalog.js.map +1 -1
  63. package/dist/subagents/host.d.ts +6 -0
  64. package/dist/subagents/host.d.ts.map +1 -1
  65. package/dist/subagents/host.js +11 -7
  66. package/dist/subagents/host.js.map +1 -1
  67. package/dist/tool-activity/presentation.d.ts.map +1 -1
  68. package/dist/tool-activity/presentation.js +205 -4
  69. package/dist/tool-activity/presentation.js.map +1 -1
  70. package/dist/tool-activity/runtime-view.d.ts +1 -0
  71. package/dist/tool-activity/runtime-view.d.ts.map +1 -1
  72. package/dist/tool-activity/runtime-view.js +13 -2
  73. package/dist/tool-activity/runtime-view.js.map +1 -1
  74. package/dist/tool-activity/state.d.ts +3 -1
  75. package/dist/tool-activity/state.d.ts.map +1 -1
  76. package/dist/tool-activity/state.js +6 -1
  77. package/dist/tool-activity/state.js.map +1 -1
  78. package/package.json +8 -7
@@ -0,0 +1,531 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { createReadStream } from 'node:fs';
3
+ import { mkdir, stat, writeFile } from 'node:fs/promises';
4
+ import { isAbsolute, join, relative, resolve, sep } from 'node:path';
5
+ import { createInterface } from 'node:readline/promises';
6
+ import { createAgentCoreSession, HostAgentRuntime, SessionManager, SettingsManager, } from '@felan-ai/agent-core';
7
+ import { createActiveBranchDigester, createMemoryInputManifest, createMemoryDreamerInstructions, isMemoryContextEntry, } from '@felan-ai/ext-memory';
8
+ const MEMORY_DREAM_TOOLS = ['read', 'ls', 'edit', 'write'];
9
+ const DEFAULT_MEMORY_DREAM_TIMEOUT_MS = 60 * 60 * 1_000;
10
+ const MEMORY_DREAM_PROMPT = `Process the staged memory input now.
11
+
12
+ Read .dreaming/input/manifest.json and every transcript listed by that manifest. Inspect the existing .memory wiki and merge durable facts from only those target sessions into it. Edit the Markdown files under .memory in place; do not modify .dreaming/input or access repositories, integrations, credentials, or unrelated files.
13
+
14
+ Do not return a JSON artifact or a patch. The filesystem under .memory is the output. Before finishing, verify the required files, links, page reachability, source provenance, and the memory schema. Return only a concise summary after the staged .memory artifact is complete.`;
15
+ export async function materializeMemoryInput({ stagingDirectory, checkpoints, previousCheckpoints, baseSnapshot, maxTranscriptBytes, signal, }) {
16
+ throwIfAborted(signal);
17
+ const inputDirectory = join(stagingDirectory, '.dreaming', 'input');
18
+ await mkdir(join(inputDirectory, 'sessions'), { recursive: true, mode: 0o700 });
19
+ const sessions = [];
20
+ const failures = [];
21
+ const ordered = [...checkpoints].sort((left, right) => left.sessionId.localeCompare(right.sessionId));
22
+ for (const [index, checkpoint] of ordered.entries()) {
23
+ throwIfAborted(signal);
24
+ const directory = join(inputDirectory, 'sessions', `${String(index).padStart(3, '0')}-${safeSessionDirectoryId(checkpoint.sessionId)}`);
25
+ await mkdir(directory, { recursive: true, mode: 0o700 });
26
+ const transcriptPath = `sessions/${String(index).padStart(3, '0')}-${safeSessionDirectoryId(checkpoint.sessionId)}/transcript.jsonl`;
27
+ const metadataPath = `sessions/${String(index).padStart(3, '0')}-${safeSessionDirectoryId(checkpoint.sessionId)}/metadata.json`;
28
+ try {
29
+ const previousCheckpoint = optionsForSession(checkpoint, previousCheckpoints);
30
+ const evidence = await materializeCheckpointEvidence({
31
+ checkpoint,
32
+ ...(previousCheckpoint === undefined ? {} : { previousCheckpoint }),
33
+ maxTranscriptBytes,
34
+ ...(signal === undefined ? {} : { signal }),
35
+ });
36
+ await writeFile(join(inputDirectory, transcriptPath), evidence.text, { encoding: 'utf8', mode: 0o400 });
37
+ await writeFile(join(inputDirectory, metadataPath), `${JSON.stringify({
38
+ sessionId: checkpoint.sessionId,
39
+ leafId: checkpoint.leafId,
40
+ transcriptDigest: checkpoint.transcriptDigest,
41
+ sessionFile: checkpoint.sessionFile,
42
+ truncated: evidence.truncated,
43
+ }, null, 2)}\n`, { encoding: 'utf8', mode: 0o400 });
44
+ sessions.push({
45
+ checkpoint,
46
+ metadataPath,
47
+ transcriptPath,
48
+ materializedDigest: sha256(evidence.text),
49
+ byteLength: Buffer.byteLength(evidence.text, 'utf8'),
50
+ redactionCount: evidence.redactionCount,
51
+ });
52
+ }
53
+ catch (error) {
54
+ if (!(error instanceof MemoryInputMaterializationError))
55
+ throw error;
56
+ failures.push({ checkpoint, code: error.code, message: error.message });
57
+ }
58
+ }
59
+ const manifest = createMemoryInputManifest({
60
+ baseMemoryFingerprint: baseSnapshot.fingerprint,
61
+ sessions,
62
+ });
63
+ await writeFile(join(inputDirectory, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`, {
64
+ encoding: 'utf8',
65
+ mode: 0o400,
66
+ });
67
+ return { ...manifest, failures };
68
+ }
69
+ function optionsForSession(checkpoint, previousCheckpoints) {
70
+ return previousCheckpoints?.[checkpoint.sessionId];
71
+ }
72
+ export function createDefaultLocalMemoryDreamRunner(options = {}) {
73
+ return async (input) => {
74
+ throwIfAborted(input.signal);
75
+ const model = selectMemoryDreamModel(input.modelRuntime, input.selectedModel);
76
+ if (!model)
77
+ throw new Error('No authenticated local memory model is configured');
78
+ const runtimeDirectory = join(input.stagingDirectory, '.pi-memory-runtime');
79
+ await mkdir(runtimeDirectory, { recursive: true, mode: 0o700 });
80
+ throwIfAborted(input.signal);
81
+ const runtime = createMemoryDreamRuntime(input.stagingDirectory, runtimeDirectory);
82
+ const sessionManager = SessionManager.inMemory(input.stagingDirectory);
83
+ const settingsManager = SettingsManager.inMemory({
84
+ packages: [],
85
+ extensions: [],
86
+ skills: [],
87
+ prompts: [],
88
+ themes: [],
89
+ retry: { enabled: false },
90
+ });
91
+ const createSession = options.createSession
92
+ ?? (async (sessionOptions) => createAgentCoreSession(sessionOptions));
93
+ const created = await createSession({
94
+ runtime,
95
+ agentDir: runtimeDirectory,
96
+ extensionPackages: [],
97
+ importExtension: async (packageName) => {
98
+ throw new Error(`Unexpected memory dream extension: ${packageName}`);
99
+ },
100
+ modelRuntime: input.modelRuntime,
101
+ model,
102
+ settingsManager,
103
+ sessionManager,
104
+ appendSystemPrompt: [createMemoryDreamerInstructions({
105
+ memoryPath: '.memory',
106
+ inputPath: '.dreaming/input',
107
+ label: 'project',
108
+ })],
109
+ });
110
+ const session = created.session;
111
+ let cancellation;
112
+ let timedOut = false;
113
+ const cancel = () => {
114
+ cancellation ??= session.abort();
115
+ return cancellation;
116
+ };
117
+ const timeoutMs = options.timeoutMs ?? DEFAULT_MEMORY_DREAM_TIMEOUT_MS;
118
+ try {
119
+ await session.bindExtensions({ mode: 'print' });
120
+ session.setActiveToolsByName([...MEMORY_DREAM_TOOLS]);
121
+ if (!sameToolNames(session.getActiveToolNames(), MEMORY_DREAM_TOOLS)) {
122
+ throw new Error('Memory dream session could not restrict its tools');
123
+ }
124
+ throwIfAborted(input.signal);
125
+ const abort = () => {
126
+ void cancel().catch(() => { });
127
+ };
128
+ const timeout = setTimeout(() => {
129
+ timedOut = true;
130
+ void cancel().catch(() => { });
131
+ }, timeoutMs);
132
+ timeout.unref?.();
133
+ input.signal.addEventListener('abort', abort, { once: true });
134
+ try {
135
+ await session.prompt(MEMORY_DREAM_PROMPT);
136
+ await cancellation;
137
+ throwIfAborted(input.signal);
138
+ if (timedOut)
139
+ throw new Error('Memory dream exceeded its runtime limit');
140
+ const assistant = [...session.messages].reverse().find((message) => message.role === 'assistant');
141
+ if (!assistant)
142
+ throw new Error('Memory dream completed without an assistant response');
143
+ if (assistant.stopReason === 'error')
144
+ throw new Error('Local memory model request failed');
145
+ }
146
+ catch (error) {
147
+ if (input.signal.aborted)
148
+ throw new Error('Memory processing was cancelled');
149
+ if (timedOut)
150
+ throw new Error('Memory dream exceeded its runtime limit');
151
+ throw error;
152
+ }
153
+ finally {
154
+ input.signal.removeEventListener('abort', abort);
155
+ clearTimeout(timeout);
156
+ await cancellation?.catch(() => { });
157
+ }
158
+ }
159
+ finally {
160
+ session.dispose();
161
+ }
162
+ };
163
+ }
164
+ function selectMemoryDreamModel(modelRuntime, selectedModel) {
165
+ if (selectedModel && modelRuntime.hasConfiguredAuth(selectedModel.provider)) {
166
+ return selectedModel;
167
+ }
168
+ return modelRuntime.getAvailableSnapshot()[0];
169
+ }
170
+ async function materializeCheckpointEvidence({ checkpoint, previousCheckpoint, maxTranscriptBytes, signal, }) {
171
+ throwIfAborted(signal);
172
+ let sourceBytes;
173
+ try {
174
+ const sourceStats = await stat(checkpoint.sessionFile);
175
+ if (!sourceStats.isFile())
176
+ throw new Error('not a file');
177
+ sourceBytes = sourceStats.size;
178
+ }
179
+ catch {
180
+ throw new MemoryInputMaterializationError('source_unavailable', 'Memory checkpoint source is unavailable');
181
+ }
182
+ const index = await indexSessionFile(checkpoint.sessionFile, sourceBytes, signal);
183
+ const current = selectVisibleBranch(index, checkpoint.leafId);
184
+ const previous = previousCheckpoint
185
+ ? selectVisibleBranch(index, previousCheckpoint.leafId)
186
+ : undefined;
187
+ const deltaStart = previous === undefined ? 0 : deltaStartIndex(current.ids, previous.ids);
188
+ const writer = new BoundedTranscriptWriter(maxTranscriptBytes);
189
+ const currentDigester = createActiveBranchDigester();
190
+ const previousDigester = previous === undefined ? undefined : createActiveBranchDigester();
191
+ let currentPosition = 0;
192
+ let previousPosition = 0;
193
+ await readSessionFileLines(checkpoint.sessionFile, sourceBytes, signal, (line, lineNumber) => {
194
+ const value = parseSessionEntryLine(line);
195
+ if (!value)
196
+ return;
197
+ const id = value.id;
198
+ const indexed = index.entries.get(id);
199
+ if (!indexed || indexed.lineNumber !== lineNumber)
200
+ return;
201
+ const currentIndex = current.positions.get(id);
202
+ if (currentIndex !== undefined) {
203
+ if (currentIndex !== currentPosition) {
204
+ throw new MemoryInputMaterializationError('invalid_source', 'Memory checkpoint branch order is invalid');
205
+ }
206
+ const normalized = normalizeVisibleEntry(value, index);
207
+ currentDigester.update(normalized);
208
+ if (currentPosition >= deltaStart) {
209
+ const redacted = redactTranscript(`${JSON.stringify(normalized)}\n`);
210
+ writer.append(redacted.text, redacted.count);
211
+ }
212
+ currentPosition += 1;
213
+ }
214
+ const previousIndex = previous?.positions.get(id);
215
+ if (previousIndex !== undefined) {
216
+ if (previousIndex !== previousPosition) {
217
+ throw new MemoryInputMaterializationError('invalid_source', 'Previously processed memory branch order is invalid');
218
+ }
219
+ previousDigester.update(normalizeVisibleEntry(value, index));
220
+ previousPosition += 1;
221
+ }
222
+ });
223
+ if (currentPosition !== current.ids.length || currentDigester.digest() !== checkpoint.transcriptDigest) {
224
+ throw new MemoryInputMaterializationError('checkpoint_changed', 'Memory checkpoint transcript changed before processing');
225
+ }
226
+ if (previous !== undefined) {
227
+ if (previousPosition !== previous.ids.length || previousDigester.digest() !== previousCheckpoint.transcriptDigest) {
228
+ throw new MemoryInputMaterializationError('previous_checkpoint_changed', 'Previously processed memory checkpoint changed before processing');
229
+ }
230
+ }
231
+ return writer.finish();
232
+ }
233
+ async function indexSessionFile(sessionFile, sourceBytes, signal) {
234
+ const entries = new Map();
235
+ const memoryIds = new Set();
236
+ await readSessionFileLines(sessionFile, sourceBytes, signal, (line, lineNumber) => {
237
+ const value = parseSessionEntryLine(line);
238
+ if (!value)
239
+ return;
240
+ const id = value.id;
241
+ const indexed = {
242
+ lineNumber,
243
+ parent: indexedParent(value.parentId),
244
+ hidden: isMemoryContextEntry(value),
245
+ };
246
+ entries.set(id, indexed);
247
+ if (indexed.hidden)
248
+ memoryIds.add(id);
249
+ });
250
+ return { entries, memoryIds };
251
+ }
252
+ function selectVisibleBranch(index, leafId) {
253
+ const visibleLeafId = visibleLeafIdFromIndex(index, leafId);
254
+ if (visibleLeafId === null)
255
+ return { ids: [], positions: new Map() };
256
+ const path = [];
257
+ const seen = new Set();
258
+ let current = visibleLeafId;
259
+ while (current !== null) {
260
+ if (seen.has(current)) {
261
+ throw new MemoryInputMaterializationError('invalid_source', 'Memory checkpoint transcript contains a cycle');
262
+ }
263
+ seen.add(current);
264
+ const entry = index.entries.get(current);
265
+ if (!entry || entry.hidden) {
266
+ throw new MemoryInputMaterializationError('invalid_source', 'Memory checkpoint leaf is not present in the transcript');
267
+ }
268
+ path.push(current);
269
+ const parent = normalizeParent(entry.parent, index);
270
+ if (parent.kind === 'invalid') {
271
+ throw new MemoryInputMaterializationError('invalid_source', 'Memory checkpoint branch has an invalid parent');
272
+ }
273
+ current = parent.kind === 'id' ? parent.value : null;
274
+ }
275
+ path.reverse();
276
+ return {
277
+ ids: path,
278
+ positions: new Map(path.map((id, position) => [id, position])),
279
+ };
280
+ }
281
+ function visibleLeafIdFromIndex(index, leafId) {
282
+ let current = leafId;
283
+ const seen = new Set();
284
+ while (current !== null && index.entries.get(current)?.hidden) {
285
+ if (seen.has(current))
286
+ return null;
287
+ seen.add(current);
288
+ const parent = index.entries.get(current)?.parent;
289
+ current = parent?.kind === 'id' ? parent.value : null;
290
+ }
291
+ return current;
292
+ }
293
+ function normalizeVisibleEntry(value, index) {
294
+ if (typeof value.parentId !== 'string' || !index.memoryIds.has(value.parentId))
295
+ return value;
296
+ return { ...value, parentId: resolveVisibleParent(value.parentId, index) };
297
+ }
298
+ function resolveVisibleParent(id, index) {
299
+ let current = id;
300
+ const seen = new Set();
301
+ while (current !== null && index.memoryIds.has(current)) {
302
+ if (seen.has(current))
303
+ return null;
304
+ seen.add(current);
305
+ const parent = index.entries.get(current)?.parent;
306
+ current = parent?.kind === 'id' ? parent.value : null;
307
+ }
308
+ return current;
309
+ }
310
+ function normalizeParent(parent, index) {
311
+ if (parent.kind !== 'id' || !index.memoryIds.has(parent.value))
312
+ return parent;
313
+ const visible = resolveVisibleParent(parent.value, index);
314
+ return visible === null ? { kind: 'root' } : { kind: 'id', value: visible };
315
+ }
316
+ function indexedParent(value) {
317
+ if (value === null)
318
+ return { kind: 'root' };
319
+ if (typeof value === 'string')
320
+ return { kind: 'id', value };
321
+ return { kind: 'invalid' };
322
+ }
323
+ function parseSessionEntryLine(line) {
324
+ if (line.trim().length === 0)
325
+ return undefined;
326
+ let value;
327
+ try {
328
+ value = JSON.parse(line);
329
+ }
330
+ catch {
331
+ return undefined;
332
+ }
333
+ if (!isRecord(value) || value.type === 'session' || typeof value.id !== 'string')
334
+ return undefined;
335
+ return value;
336
+ }
337
+ async function readSessionFileLines(sessionFile, sourceBytes, signal, callback) {
338
+ if (sourceBytes === 0)
339
+ return;
340
+ const input = createReadStream(sessionFile, { encoding: 'utf8', start: 0, end: sourceBytes - 1 });
341
+ const lines = createInterface({ input, crlfDelay: Infinity });
342
+ let lineNumber = 0;
343
+ try {
344
+ for await (const line of lines) {
345
+ throwIfAborted(signal);
346
+ callback(line, lineNumber);
347
+ lineNumber += 1;
348
+ }
349
+ }
350
+ catch (error) {
351
+ if (signal?.aborted || error instanceof MemoryInputMaterializationError)
352
+ throw error;
353
+ throw new MemoryInputMaterializationError('source_unavailable', 'Memory checkpoint source is unavailable');
354
+ }
355
+ finally {
356
+ lines.close();
357
+ input.destroy();
358
+ }
359
+ }
360
+ function deltaStartIndex(current, previous) {
361
+ const previousIds = new Set(previous);
362
+ let commonIndex = -1;
363
+ for (let index = 0; index < current.length; index += 1) {
364
+ if (previousIds.has(current[index]))
365
+ commonIndex = index;
366
+ }
367
+ return commonIndex + 1;
368
+ }
369
+ class MemoryInputMaterializationError extends Error {
370
+ code;
371
+ constructor(code, message) {
372
+ super(message);
373
+ this.code = code;
374
+ this.name = 'MemoryInputMaterializationError';
375
+ }
376
+ }
377
+ class BoundedTranscriptWriter {
378
+ maxBytes;
379
+ #text = '';
380
+ #bytes = 0;
381
+ #truncated = false;
382
+ #redactionCount = 0;
383
+ constructor(maxBytes) {
384
+ this.maxBytes = maxBytes;
385
+ }
386
+ append(content, redactionCount = 0) {
387
+ this.#redactionCount += redactionCount;
388
+ if (this.#truncated || content.length === 0)
389
+ return;
390
+ const available = this.maxBytes - this.#bytes;
391
+ if (available <= 0) {
392
+ this.#truncated = true;
393
+ return;
394
+ }
395
+ if (Buffer.byteLength(content, 'utf8') <= available) {
396
+ this.#text += content;
397
+ this.#bytes += Buffer.byteLength(content, 'utf8');
398
+ return;
399
+ }
400
+ this.#text += truncateUtf8(content, available);
401
+ this.#bytes = Buffer.byteLength(this.#text, 'utf8');
402
+ this.#truncated = true;
403
+ }
404
+ finish() {
405
+ return {
406
+ text: this.#text,
407
+ redactionCount: this.#redactionCount,
408
+ truncated: this.#truncated,
409
+ };
410
+ }
411
+ }
412
+ function createMemoryDreamRuntime(stagingDirectory, runtimeDirectory) {
413
+ const base = new HostAgentRuntime(stagingDirectory, {
414
+ sessionStorageRoot: runtimeDirectory,
415
+ agentStorageRoot: runtimeDirectory,
416
+ agentDir: runtimeDirectory,
417
+ });
418
+ return new RestrictedMemoryDreamRuntime(base, resolve(stagingDirectory));
419
+ }
420
+ class RestrictedMemoryDreamRuntime {
421
+ base;
422
+ kind = 'host';
423
+ cwd;
424
+ constructor(base, cwd) {
425
+ this.base = base;
426
+ this.cwd = cwd;
427
+ }
428
+ storage(scope) {
429
+ return this.base.storage(scope);
430
+ }
431
+ async exec(_command, _args, _options) {
432
+ throw new Error('Memory dream runtime does not permit process execution');
433
+ }
434
+ async shell(_command, _options) {
435
+ throw new Error('Memory dream runtime does not permit shell execution');
436
+ }
437
+ async readFile(path, options) {
438
+ const absolutePath = this.#allowedPath(path, ['.memory', '.dreaming/input']);
439
+ return this.base.readFile(absolutePath, options);
440
+ }
441
+ async writeFile(path, content, options) {
442
+ const relativePath = this.#allowedPath(path, ['.memory'], true);
443
+ if (!relativePath.endsWith('.md'))
444
+ throw new Error('Memory dream output must be Markdown');
445
+ await this.base.writeFile(resolve(this.cwd, relativePath), content, options);
446
+ }
447
+ async listFiles(path, options) {
448
+ const absolutePath = this.#allowedPath(path, ['.memory', '.dreaming/input']);
449
+ return this.base.listFiles(absolutePath, options);
450
+ }
451
+ async mkdir(path, options) {
452
+ const absolutePath = this.#allowedPath(path, ['.memory'], true);
453
+ await this.base.mkdir(absolutePath, options);
454
+ }
455
+ async remove(path, options) {
456
+ const absolutePath = this.#allowedPath(path, ['.memory'], true);
457
+ await this.base.remove(absolutePath, options);
458
+ }
459
+ #allowedPath(path, roots, allowDirectory = false) {
460
+ if (path.includes('\0'))
461
+ throw new Error('Memory dream path contains a NUL byte');
462
+ const absolutePath = resolve(this.cwd, path);
463
+ const relativePath = relative(this.cwd, absolutePath);
464
+ if (relativePath.length === 0
465
+ || relativePath === '..'
466
+ || relativePath.startsWith(`..${sep}`)
467
+ || isAbsolute(relativePath)) {
468
+ throw new Error('Memory dream path escapes the staging directory');
469
+ }
470
+ const normalized = relativePath.split(sep).join('/');
471
+ if (!roots.some((root) => normalized === root || normalized.startsWith(`${root}/`))) {
472
+ throw new Error('Memory dream path is outside the staged memory inputs');
473
+ }
474
+ if (!allowDirectory && normalized.endsWith('/')) {
475
+ throw new Error('Memory dream path must identify a file');
476
+ }
477
+ return absolutePath;
478
+ }
479
+ }
480
+ function sameToolNames(actual, expected) {
481
+ return actual.length === expected.length && expected.every((name) => actual.includes(name));
482
+ }
483
+ function redactTranscript(content) {
484
+ let count = 0;
485
+ const replace = (pattern, replacement) => {
486
+ content = content.replace(pattern, (...args) => {
487
+ count += 1;
488
+ return replacement.replace('$1', String(args[1] ?? ''));
489
+ });
490
+ };
491
+ replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?-----END [^-]*PRIVATE KEY-----/gu, '[REDACTED_PRIVATE_KEY]');
492
+ replace(/\b(?:sk-[A-Za-z0-9_-]{16,}|ghp_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|xox[baprs]-[A-Za-z0-9-]{12,})\b/gu, '[REDACTED_TOKEN]');
493
+ replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]{12,}/giu, '$1[REDACTED_TOKEN]');
494
+ replace(/(["']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|password|secret|authorization)["']?\s*[:=]\s*["']?)[^"'\s,}]+/giu, '$1[REDACTED_SECRET]');
495
+ return { text: content, count };
496
+ }
497
+ function truncateUtf8(content, maxBytes) {
498
+ if (maxBytes <= 0)
499
+ return '';
500
+ if (Buffer.byteLength(content, 'utf8') <= maxBytes)
501
+ return content;
502
+ const marker = '\n[TRUNCATED]';
503
+ const markerBytes = Buffer.byteLength(marker, 'utf8');
504
+ if (maxBytes <= markerBytes)
505
+ return utf8Prefix(marker, maxBytes);
506
+ return `${utf8Prefix(content, maxBytes - markerBytes)}${marker}`;
507
+ }
508
+ function utf8Prefix(content, maxBytes) {
509
+ if (maxBytes <= 0)
510
+ return '';
511
+ if (Buffer.byteLength(content, 'utf8') <= maxBytes)
512
+ return content;
513
+ let prefix = new TextDecoder().decode(Buffer.from(content, 'utf8').subarray(0, maxBytes));
514
+ while (Buffer.byteLength(prefix, 'utf8') > maxBytes)
515
+ prefix = prefix.slice(0, -1);
516
+ return prefix;
517
+ }
518
+ function safeSessionDirectoryId(sessionId) {
519
+ return sha256(sessionId).slice(0, 16);
520
+ }
521
+ function sha256(value) {
522
+ return createHash('sha256').update(value, 'utf8').digest('hex');
523
+ }
524
+ function throwIfAborted(signal) {
525
+ if (signal?.aborted)
526
+ throw new Error('Memory processing was cancelled');
527
+ }
528
+ function isRecord(value) {
529
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
530
+ }
531
+ //# sourceMappingURL=dreamer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dreamer.js","sourceRoot":"","sources":["../../src/memory/dreamer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface LocalMemoryLeaseOptions {
2
+ readonly staleMs?: number;
3
+ readonly updateMs?: number;
4
+ }
5
+ export interface LocalMemoryLease {
6
+ readonly token: string;
7
+ readonly acquiredAt: string;
8
+ readonly compromised: AbortSignal;
9
+ verify(): Promise<boolean>;
10
+ release(): Promise<void>;
11
+ }
12
+ export declare function acquireLocalMemoryLease(projectDirectory: string, options?: LocalMemoryLeaseOptions): Promise<LocalMemoryLease | undefined>;
13
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../src/memory/lease.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAKD,wBAAsB,uBAAuB,CAC3C,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA+GvC"}