dsh-mnemon 0.1.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +169 -0
  3. package/README.md +169 -0
  4. package/cordis.patch.yml +15 -0
  5. package/docs/README.md +8 -0
  6. package/docs/en/README.md +39 -0
  7. package/docs/en/architecture.md +129 -0
  8. package/docs/en/assets/project-architecture.svg +182 -0
  9. package/docs/en/configuration.md +204 -0
  10. package/docs/en/development.md +178 -0
  11. package/docs/en/getting-started.md +147 -0
  12. package/docs/en/interfaces.md +159 -0
  13. package/docs/en/operations.md +151 -0
  14. package/docs/en/project-overview.md +247 -0
  15. package/docs/en/roadmap.md +41 -0
  16. package/docs/en/storage-model.md +179 -0
  17. package/docs/en/workflows.md +290 -0
  18. package/docs/zh-CN/README.md +39 -0
  19. package/docs/zh-CN/architecture.md +129 -0
  20. package/docs/zh-CN/assets/project-architecture.svg +182 -0
  21. package/docs/zh-CN/assets/screenshots/conversation-recall.png +0 -0
  22. package/docs/zh-CN/assets/screenshots/conversation-writeback.png +0 -0
  23. package/docs/zh-CN/assets/screenshots/documents-markdown.png +0 -0
  24. package/docs/zh-CN/assets/screenshots/entities-context.png +0 -0
  25. package/docs/zh-CN/assets/screenshots/memory-content.png +0 -0
  26. package/docs/zh-CN/assets/screenshots/overview-memory-graph.png +0 -0
  27. package/docs/zh-CN/assets/screenshots/recall-agent-answer.png +0 -0
  28. package/docs/zh-CN/assets/screenshots/runtime-memory.png +0 -0
  29. package/docs/zh-CN/configuration.md +204 -0
  30. package/docs/zh-CN/development.md +178 -0
  31. package/docs/zh-CN/getting-started.md +147 -0
  32. package/docs/zh-CN/interfaces.md +159 -0
  33. package/docs/zh-CN/operations.md +151 -0
  34. package/docs/zh-CN/project-overview.md +247 -0
  35. package/docs/zh-CN/roadmap.md +41 -0
  36. package/docs/zh-CN/storage-model.md +179 -0
  37. package/docs/zh-CN/workflows.md +290 -0
  38. package/lib/client.js +6288 -0
  39. package/lib/client.js.map +1 -0
  40. package/lib/index.js +4453 -0
  41. package/lib/types/client/MnemonLogo.d.ts +7 -0
  42. package/lib/types/client/MnemonLogo.d.ts.map +1 -0
  43. package/lib/types/client/MnemonLogo.js +6 -0
  44. package/lib/types/client/MnemonLogo.js.map +1 -0
  45. package/lib/types/client/MnemonSettingsCard.d.ts +9 -0
  46. package/lib/types/client/MnemonSettingsCard.d.ts.map +1 -0
  47. package/lib/types/client/MnemonSettingsCard.js +109 -0
  48. package/lib/types/client/MnemonSettingsCard.js.map +1 -0
  49. package/lib/types/client/MnemonView.d.ts +11 -0
  50. package/lib/types/client/MnemonView.d.ts.map +1 -0
  51. package/lib/types/client/MnemonView.js +1239 -0
  52. package/lib/types/client/MnemonView.js.map +1 -0
  53. package/lib/types/client/api.d.ts +68 -0
  54. package/lib/types/client/api.d.ts.map +1 -0
  55. package/lib/types/client/api.js +80 -0
  56. package/lib/types/client/api.js.map +1 -0
  57. package/lib/types/client/index.d.ts +4 -0
  58. package/lib/types/client/index.d.ts.map +1 -0
  59. package/lib/types/client/index.js +36 -0
  60. package/lib/types/client/index.js.map +1 -0
  61. package/lib/types/client/locales.d.ts +1054 -0
  62. package/lib/types/client/locales.d.ts.map +1 -0
  63. package/lib/types/client/locales.js +1062 -0
  64. package/lib/types/client/locales.js.map +1 -0
  65. package/lib/types/client/settings.d.ts +17 -0
  66. package/lib/types/client/settings.d.ts.map +1 -0
  67. package/lib/types/client/settings.js +49 -0
  68. package/lib/types/client/settings.js.map +1 -0
  69. package/lib/types/commands.d.ts +6 -0
  70. package/lib/types/commands.d.ts.map +1 -0
  71. package/lib/types/commands.js +100 -0
  72. package/lib/types/commands.js.map +1 -0
  73. package/lib/types/config-values.d.ts +4 -0
  74. package/lib/types/config-values.d.ts.map +1 -0
  75. package/lib/types/config-values.js +4 -0
  76. package/lib/types/config-values.js.map +1 -0
  77. package/lib/types/config.d.ts +49 -0
  78. package/lib/types/config.d.ts.map +1 -0
  79. package/lib/types/config.js +55 -0
  80. package/lib/types/config.js.map +1 -0
  81. package/lib/types/contracts.d.ts +272 -0
  82. package/lib/types/contracts.d.ts.map +1 -0
  83. package/lib/types/contracts.js +2 -0
  84. package/lib/types/contracts.js.map +1 -0
  85. package/lib/types/documents.d.ts +149 -0
  86. package/lib/types/documents.d.ts.map +1 -0
  87. package/lib/types/documents.js +503 -0
  88. package/lib/types/documents.js.map +1 -0
  89. package/lib/types/guidance.d.ts +9 -0
  90. package/lib/types/guidance.d.ts.map +1 -0
  91. package/lib/types/guidance.js +18 -0
  92. package/lib/types/guidance.js.map +1 -0
  93. package/lib/types/index.d.ts +15 -0
  94. package/lib/types/index.d.ts.map +1 -0
  95. package/lib/types/index.js +45 -0
  96. package/lib/types/index.js.map +1 -0
  97. package/lib/types/lifecycle.d.ts +75 -0
  98. package/lib/types/lifecycle.d.ts.map +1 -0
  99. package/lib/types/lifecycle.js +380 -0
  100. package/lib/types/lifecycle.js.map +1 -0
  101. package/lib/types/memory-bodies.d.ts +47 -0
  102. package/lib/types/memory-bodies.d.ts.map +1 -0
  103. package/lib/types/memory-bodies.js +160 -0
  104. package/lib/types/memory-bodies.js.map +1 -0
  105. package/lib/types/process.d.ts +14 -0
  106. package/lib/types/process.d.ts.map +1 -0
  107. package/lib/types/process.js +65 -0
  108. package/lib/types/process.js.map +1 -0
  109. package/lib/types/review-activity.d.ts +33 -0
  110. package/lib/types/review-activity.d.ts.map +1 -0
  111. package/lib/types/review-activity.js +37 -0
  112. package/lib/types/review-activity.js.map +1 -0
  113. package/lib/types/rpc.d.ts +12 -0
  114. package/lib/types/rpc.d.ts.map +1 -0
  115. package/lib/types/rpc.js +225 -0
  116. package/lib/types/rpc.js.map +1 -0
  117. package/lib/types/runner.d.ts +29 -0
  118. package/lib/types/runner.d.ts.map +1 -0
  119. package/lib/types/runner.js +150 -0
  120. package/lib/types/runner.js.map +1 -0
  121. package/lib/types/runtime-memory.d.ts +104 -0
  122. package/lib/types/runtime-memory.d.ts.map +1 -0
  123. package/lib/types/runtime-memory.js +415 -0
  124. package/lib/types/runtime-memory.js.map +1 -0
  125. package/lib/types/service.d.ts +173 -0
  126. package/lib/types/service.d.ts.map +1 -0
  127. package/lib/types/service.js +508 -0
  128. package/lib/types/service.js.map +1 -0
  129. package/lib/types/settings.d.ts +6 -0
  130. package/lib/types/settings.d.ts.map +1 -0
  131. package/lib/types/settings.js +75 -0
  132. package/lib/types/settings.js.map +1 -0
  133. package/lib/types/storage-scope.d.ts +39 -0
  134. package/lib/types/storage-scope.d.ts.map +1 -0
  135. package/lib/types/storage-scope.js +179 -0
  136. package/lib/types/storage-scope.js.map +1 -0
  137. package/lib/types/subagent.d.ts +97 -0
  138. package/lib/types/subagent.d.ts.map +1 -0
  139. package/lib/types/subagent.js +619 -0
  140. package/lib/types/subagent.js.map +1 -0
  141. package/lib/types/tools.d.ts +8 -0
  142. package/lib/types/tools.d.ts.map +1 -0
  143. package/lib/types/tools.js +328 -0
  144. package/lib/types/tools.js.map +1 -0
  145. package/package.json +111 -0
@@ -0,0 +1,503 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from 'node:fs';
3
+ import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
4
+ export const DOCUMENTS_VERSION = 1;
5
+ export const DOCUMENTS_ACTIVE_LIMIT_BYTES = 10 * 1024 * 1024;
6
+ const MAX_DOCUMENT_BYTES = 2 * 1024 * 1024;
7
+ const LOCK_TIMEOUT_MS = 5_000;
8
+ const LOCK_STALE_MS = 30_000;
9
+ const LOCK_RETRY_MS = 20;
10
+ export class DocumentCapacityError extends Error {
11
+ projected;
12
+ limit;
13
+ candidates;
14
+ constructor(projected, limit, candidates) {
15
+ super(`Would exceed active document capacity: ${projected} bytes (limit ${limit}). Archive the least-recently-used active document before retrying.`);
16
+ this.projected = projected;
17
+ this.limit = limit;
18
+ this.candidates = candidates;
19
+ this.name = 'DocumentCapacityError';
20
+ }
21
+ }
22
+ export class DocumentConflictError extends Error {
23
+ constructor() {
24
+ super('document changed while archival was running; the active copy was preserved');
25
+ this.name = 'DocumentConflictError';
26
+ }
27
+ }
28
+ function isRecord(value) {
29
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
30
+ }
31
+ function normalizeLine(value, field, maximum, required) {
32
+ const normalized = value?.trim().replace(/\s+/gu, ' ') ?? '';
33
+ if (required && normalized === '')
34
+ throw new Error(`${field} is required`);
35
+ if (normalized.length > maximum)
36
+ throw new Error(`${field} is too long (max ${maximum} characters)`);
37
+ return normalized;
38
+ }
39
+ function normalizeContent(value, required) {
40
+ if (value === undefined && !required)
41
+ return undefined;
42
+ const normalized = value?.replace(/\0/gu, '').trim() ?? '';
43
+ if (normalized === '')
44
+ throw new Error('document content is required');
45
+ const size = Buffer.byteLength(normalized, 'utf8');
46
+ if (size > MAX_DOCUMENT_BYTES)
47
+ throw new Error(`document content is too large (${size} bytes; max ${MAX_DOCUMENT_BYTES})`);
48
+ return normalized;
49
+ }
50
+ function unique(values, maximum) {
51
+ return [...new Set(values.map(value => value.trim()).filter(Boolean))].slice(0, maximum);
52
+ }
53
+ function hash(value) {
54
+ return createHash('sha256').update(value).digest('hex');
55
+ }
56
+ function indexRevision(index) {
57
+ return hash(JSON.stringify(index));
58
+ }
59
+ function slug(title) {
60
+ const result = title.normalize('NFKD').toLowerCase().replace(/[^a-z0-9]+/gu, '-').replace(/^-|-$/gu, '').slice(0, 48);
61
+ return result || 'document';
62
+ }
63
+ function yamlString(value) {
64
+ return JSON.stringify(value);
65
+ }
66
+ function renderDocument(record, content) {
67
+ const sources = record.sourcePaths.length === 0 ? ' []' : record.sourcePaths.map(path => ` - ${yamlString(path)}`).join('\n');
68
+ const sessions = record.sessionIds.length === 0 ? ' []' : record.sessionIds.map(id => ` - ${yamlString(id)}`).join('\n');
69
+ const bodies = record.memoryBodyIds.length === 0 ? ' []' : record.memoryBodyIds.map(id => ` - ${yamlString(id)}`).join('\n');
70
+ return `---
71
+ id: ${yamlString(record.id)}
72
+ title: ${yamlString(record.title)}
73
+ description: ${yamlString(record.description)}
74
+ status: ${yamlString(record.status)}
75
+ created_at: ${yamlString(record.createdAt)}
76
+ updated_at: ${yamlString(record.updatedAt)}
77
+ content_hash: ${yamlString(record.contentHash)}
78
+ source_paths:
79
+ ${sources}
80
+ session_ids:
81
+ ${sessions}
82
+ memory_body_ids:
83
+ ${bodies}
84
+ ---
85
+
86
+ ${content.trim()}\n`;
87
+ }
88
+ function documentBody(markdown) {
89
+ if (!markdown.startsWith('---\n'))
90
+ return markdown.trim();
91
+ const end = markdown.indexOf('\n---\n', 4);
92
+ return end < 0 ? markdown.trim() : markdown.slice(end + 5).trim();
93
+ }
94
+ function excerpt(content, maximum = 220) {
95
+ const normalized = content.replace(/[#>*_`\[\]]/gu, '').replace(/\s+/gu, ' ').trim();
96
+ return normalized.length <= maximum ? normalized : `${normalized.slice(0, maximum - 1)}…`;
97
+ }
98
+ function sleepSync(milliseconds) {
99
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, milliseconds);
100
+ }
101
+ function parseRecord(value) {
102
+ if (!isRecord(value) || typeof value.id !== 'string' || typeof value.title !== 'string' || typeof value.description !== 'string')
103
+ return undefined;
104
+ if ((value.status !== 'active' && value.status !== 'archived') || typeof value.filename !== 'string' || typeof value.relativePath !== 'string')
105
+ return undefined;
106
+ if (typeof value.createdAt !== 'string' || typeof value.updatedAt !== 'string' || typeof value.lastAccessedAt !== 'string')
107
+ return undefined;
108
+ if (typeof value.revision !== 'number' || typeof value.contentHash !== 'string' || typeof value.sizeBytes !== 'number')
109
+ return undefined;
110
+ if (!Array.isArray(value.sourcePaths) || !Array.isArray(value.sessionIds) || !Array.isArray(value.memoryBodyIds))
111
+ return undefined;
112
+ return {
113
+ id: value.id,
114
+ title: value.title,
115
+ description: value.description,
116
+ status: value.status,
117
+ filename: value.filename,
118
+ relativePath: value.relativePath,
119
+ sourcePaths: value.sourcePaths.filter((entry) => typeof entry === 'string'),
120
+ sessionIds: value.sessionIds.filter((entry) => typeof entry === 'string'),
121
+ createdAt: value.createdAt,
122
+ updatedAt: value.updatedAt,
123
+ lastAccessedAt: value.lastAccessedAt,
124
+ revision: value.revision,
125
+ contentHash: value.contentHash,
126
+ sizeBytes: value.sizeBytes,
127
+ ...(typeof value.archivedAt === 'string' ? { archivedAt: value.archivedAt } : {}),
128
+ ...(typeof value.archiveSummary === 'string' ? { archiveSummary: value.archiveSummary } : {}),
129
+ memoryBodyIds: value.memoryBodyIds.filter((entry) => typeof entry === 'string'),
130
+ };
131
+ }
132
+ /** Project-scoped control plane for managed active and cold document copies. */
133
+ export class DocumentController {
134
+ limitBytes;
135
+ now;
136
+ workspaceRoot;
137
+ storageRoot;
138
+ directory;
139
+ activeDirectory;
140
+ archivedDirectory;
141
+ indexPath;
142
+ lockPath;
143
+ managedRelativePrefix;
144
+ queue = Promise.resolve();
145
+ constructor(workspaceRoot, limitBytes = DOCUMENTS_ACTIVE_LIMIT_BYTES, now = () => new Date(), storageRoot) {
146
+ this.limitBytes = limitBytes;
147
+ this.now = now;
148
+ this.workspaceRoot = resolve(workspaceRoot);
149
+ if (!existsSync(this.workspaceRoot) || !statSync(this.workspaceRoot).isDirectory())
150
+ throw new Error(`document workspace is unavailable: ${this.workspaceRoot}`);
151
+ if (!Number.isSafeInteger(limitBytes) || limitBytes < 1)
152
+ throw new Error('active document limit must be a positive integer');
153
+ this.storageRoot = storageRoot === undefined ? join(this.workspaceRoot, '.mnemon') : resolve(storageRoot);
154
+ this.managedRelativePrefix = storageRoot === undefined ? ['.mnemon', 'documents'].join('/') : 'documents';
155
+ this.directory = join(this.storageRoot, 'documents');
156
+ this.activeDirectory = join(this.directory, 'active');
157
+ this.archivedDirectory = join(this.directory, 'archived');
158
+ this.indexPath = join(this.directory, 'index.json');
159
+ this.lockPath = join(this.directory, '.index.lock');
160
+ this.initialize();
161
+ }
162
+ snapshot() {
163
+ return this.withLock(() => this.snapshotUnlocked(this.readIndex()));
164
+ }
165
+ get(id) {
166
+ return this.withLock(() => this.view(this.requireDocument(this.readIndex(), id)));
167
+ }
168
+ capacityPlan(request) {
169
+ return this.withLock(() => {
170
+ const index = this.readIndex();
171
+ const active = index.documents.filter(record => record.status === 'active');
172
+ const used = active.reduce((sum, record) => sum + record.sizeBytes, 0);
173
+ let projected;
174
+ let excludeId;
175
+ if (request.action === 'create') {
176
+ const now = this.now().toISOString();
177
+ const title = normalizeLine(request.title, 'document title', 160, true);
178
+ const content = normalizeContent(request.content, true);
179
+ const id = crypto.randomUUID();
180
+ const record = {
181
+ id, title,
182
+ description: normalizeLine(request.description, 'document description', 600, false),
183
+ status: 'active', filename: `${slug(title)}-${id.slice(0, 8)}.md`, relativePath: '',
184
+ sourcePaths: this.normalizeSourcePaths(request.sourcePaths ?? []), sessionIds: unique(request.sessionIds ?? [], 20),
185
+ createdAt: now, updatedAt: now, lastAccessedAt: now, revision: 1,
186
+ contentHash: hash(content), sizeBytes: 0, memoryBodyIds: [],
187
+ };
188
+ projected = used + Buffer.byteLength(renderDocument(record, content), 'utf8');
189
+ }
190
+ else {
191
+ const current = this.requireDocument(index, request.id);
192
+ if (current.status !== 'active')
193
+ throw new Error('archived documents are immutable; create a new active revision instead');
194
+ const content = normalizeContent(request.content, false) ?? this.readBody(current);
195
+ const updated = {
196
+ ...current,
197
+ title: request.title === undefined ? current.title : normalizeLine(request.title, 'document title', 160, true),
198
+ description: request.description === undefined ? current.description : normalizeLine(request.description, 'document description', 600, false),
199
+ sourcePaths: request.sourcePaths === undefined ? current.sourcePaths : this.normalizeSourcePaths(request.sourcePaths),
200
+ sessionIds: request.sessionIds === undefined ? current.sessionIds : unique([...current.sessionIds, ...request.sessionIds], 20),
201
+ contentHash: hash(content), revision: current.revision + 1,
202
+ };
203
+ projected = used - current.sizeBytes + Buffer.byteLength(renderDocument(updated, content), 'utf8');
204
+ excludeId = current.id;
205
+ }
206
+ const candidates = active
207
+ .filter(record => record.id !== excludeId)
208
+ .sort((left, right) => Date.parse(left.lastAccessedAt) - Date.parse(right.lastAccessedAt) || Date.parse(left.updatedAt) - Date.parse(right.updatedAt));
209
+ return { projected, limit: this.limitBytes, fits: projected <= this.limitBytes, candidates };
210
+ });
211
+ }
212
+ search(query, options = {}) {
213
+ const operation = this.queue.then(() => this.withLock(() => {
214
+ const index = this.readIndex();
215
+ const normalized = query.trim().normalize('NFKC').toLocaleLowerCase();
216
+ const tokens = normalized.match(/[\p{L}\p{N}_-]+/gu) ?? [];
217
+ const includeArchived = options.includeArchived === true;
218
+ const limit = Math.max(1, Math.min(50, Math.trunc(options.limit ?? 20)));
219
+ const ranked = index.documents
220
+ .filter(record => includeArchived || record.status === 'active')
221
+ .map(record => {
222
+ const view = this.view(record);
223
+ const title = view.title.normalize('NFKC').toLocaleLowerCase();
224
+ const description = view.description.normalize('NFKC').toLocaleLowerCase();
225
+ const content = view.content.normalize('NFKC').toLocaleLowerCase();
226
+ let score = normalized === '' ? 1 : title.includes(normalized) ? 12 : description.includes(normalized) ? 7 : content.includes(normalized) ? 4 : 0;
227
+ for (const token of tokens)
228
+ score += title.includes(token) ? 4 : description.includes(token) ? 2 : content.includes(token) ? 1 : 0;
229
+ return { ...view, score, excerpt: excerpt(view.content) };
230
+ })
231
+ .filter(result => normalized === '' || result.score > 0)
232
+ .sort((left, right) => right.score - left.score || Date.parse(right.updatedAt) - Date.parse(left.updatedAt))
233
+ .slice(0, limit);
234
+ if (ranked.length > 0) {
235
+ const accessedAt = this.now().toISOString();
236
+ const ids = new Set(ranked.map(result => result.id));
237
+ index.documents = index.documents.map(record => ids.has(record.id) ? { ...record, lastAccessedAt: accessedAt } : record);
238
+ this.persistIndex(index);
239
+ }
240
+ return { query: query.trim(), includeArchived, total: ranked.length, generatedAt: this.now().toISOString(), results: ranked };
241
+ }));
242
+ this.queue = operation.catch(() => undefined);
243
+ return operation;
244
+ }
245
+ mutate(request) {
246
+ const operation = this.queue.then(() => this.withLock(() => this.mutateLocked(request)));
247
+ this.queue = operation.catch(() => undefined);
248
+ return operation;
249
+ }
250
+ archive(id, expectedRevision, details) {
251
+ const operation = this.queue.then(() => this.withLock(() => {
252
+ const index = this.readIndex();
253
+ const current = this.requireDocument(index, id);
254
+ if (current.status !== 'active')
255
+ throw new Error('only active documents can be archived');
256
+ if (current.revision !== expectedRevision)
257
+ throw new DocumentConflictError();
258
+ const source = this.pathFor(current);
259
+ const now = this.now().toISOString();
260
+ const updated = {
261
+ ...current,
262
+ status: 'archived',
263
+ relativePath: this.relativeManagedPath('archived', current.filename),
264
+ updatedAt: now,
265
+ lastAccessedAt: now,
266
+ revision: current.revision + 1,
267
+ archivedAt: now,
268
+ archiveSummary: normalizeLine(details.summary, 'archive summary', 1000, true),
269
+ memoryBodyIds: unique(details.memoryBodyIds, 20),
270
+ };
271
+ const content = this.readBody(current);
272
+ const rendered = renderDocument(updated, content);
273
+ updated.sizeBytes = Buffer.byteLength(rendered, 'utf8');
274
+ const destination = this.pathFor(updated);
275
+ renameSync(source, destination);
276
+ try {
277
+ writeFileSync(destination, rendered, 'utf8');
278
+ index.documents = index.documents.map(record => record.id === id ? updated : record);
279
+ this.persistIndex(index);
280
+ }
281
+ catch (error) {
282
+ if (existsSync(destination))
283
+ renameSync(destination, source);
284
+ throw error;
285
+ }
286
+ return { success: true, action: 'archived', document: { ...updated, content }, snapshot: this.snapshotUnlocked(index) };
287
+ }));
288
+ this.queue = operation.catch(() => undefined);
289
+ return operation;
290
+ }
291
+ mutateLocked(request) {
292
+ const index = this.readIndex();
293
+ const now = this.now().toISOString();
294
+ if (request.action === 'create') {
295
+ const title = normalizeLine(request.title, 'document title', 160, true);
296
+ const description = normalizeLine(request.description, 'document description', 600, false);
297
+ const content = normalizeContent(request.content, true);
298
+ const id = crypto.randomUUID();
299
+ const filename = `${slug(title)}-${id.slice(0, 8)}.md`;
300
+ const record = {
301
+ id, title, description, status: 'active', filename,
302
+ relativePath: this.relativeManagedPath('active', filename),
303
+ sourcePaths: this.normalizeSourcePaths(request.sourcePaths ?? []),
304
+ sessionIds: unique(request.sessionIds ?? [], 20),
305
+ createdAt: now, updatedAt: now, lastAccessedAt: now, revision: 1,
306
+ contentHash: hash(content), sizeBytes: 0, memoryBodyIds: [],
307
+ };
308
+ const rendered = renderDocument(record, content);
309
+ record.sizeBytes = Buffer.byteLength(rendered, 'utf8');
310
+ this.assertCapacity(index, record.sizeBytes);
311
+ this.persistDocument(record, content);
312
+ index.documents.push(record);
313
+ this.persistIndex(index);
314
+ return { success: true, action: 'created', document: { ...record, content }, snapshot: this.snapshotUnlocked(index) };
315
+ }
316
+ const current = this.requireDocument(index, request.id);
317
+ if (current.status !== 'active')
318
+ throw new Error('archived documents are immutable; create a new active revision instead');
319
+ const content = normalizeContent(request.content, false) ?? this.readBody(current);
320
+ const updated = {
321
+ ...current,
322
+ title: request.title === undefined ? current.title : normalizeLine(request.title, 'document title', 160, true),
323
+ description: request.description === undefined ? current.description : normalizeLine(request.description, 'document description', 600, false),
324
+ sourcePaths: request.sourcePaths === undefined ? current.sourcePaths : this.normalizeSourcePaths(request.sourcePaths),
325
+ sessionIds: request.sessionIds === undefined ? current.sessionIds : unique([...current.sessionIds, ...request.sessionIds], 20),
326
+ updatedAt: now,
327
+ lastAccessedAt: now,
328
+ revision: current.revision + 1,
329
+ contentHash: hash(content),
330
+ };
331
+ const rendered = renderDocument(updated, content);
332
+ updated.sizeBytes = Buffer.byteLength(rendered, 'utf8');
333
+ this.assertCapacity(index, updated.sizeBytes - current.sizeBytes, current.id);
334
+ this.persistDocument(updated, content);
335
+ index.documents = index.documents.map(record => record.id === current.id ? updated : record);
336
+ this.persistIndex(index);
337
+ return { success: true, action: 'updated', document: { ...updated, content }, snapshot: this.snapshotUnlocked(index) };
338
+ }
339
+ initialize() {
340
+ mkdirSync(this.activeDirectory, { recursive: true });
341
+ mkdirSync(this.archivedDirectory, { recursive: true });
342
+ if (!existsSync(this.indexPath))
343
+ this.atomicWrite(this.indexPath, `${JSON.stringify({ version: DOCUMENTS_VERSION, documents: [] }, null, 2)}\n`);
344
+ this.readIndex();
345
+ }
346
+ readIndex() {
347
+ const raw = JSON.parse(readFileSync(this.indexPath, 'utf8'));
348
+ if (!isRecord(raw) || raw.version !== DOCUMENTS_VERSION || !Array.isArray(raw.documents))
349
+ throw new Error(`invalid document index: ${this.indexPath}`);
350
+ const documents = raw.documents.map(parseRecord);
351
+ if (documents.some(record => record === undefined))
352
+ throw new Error(`invalid document record in ${this.indexPath}`);
353
+ return { version: DOCUMENTS_VERSION, documents: documents };
354
+ }
355
+ snapshotUnlocked(index) {
356
+ const documents = index.documents.map(record => {
357
+ const path = this.pathFor(record);
358
+ const healthy = existsSync(path);
359
+ return { ...record, healthy, excerpt: healthy ? excerpt(this.readBody(record)) : '' };
360
+ });
361
+ const active = documents.filter(record => record.status === 'active');
362
+ return {
363
+ workspaceRoot: this.workspaceRoot,
364
+ directory: this.directory,
365
+ indexPath: this.indexPath,
366
+ generatedAt: this.now().toISOString(),
367
+ revision: indexRevision(index),
368
+ limitBytes: this.limitBytes,
369
+ activeBytes: active.reduce((sum, record) => sum + record.sizeBytes, 0),
370
+ activeCount: active.length,
371
+ archivedCount: documents.length - active.length,
372
+ total: documents.length,
373
+ documents,
374
+ };
375
+ }
376
+ requireDocument(index, rawId) {
377
+ const id = rawId.trim();
378
+ const record = index.documents.find(document => document.id === id);
379
+ if (record === undefined)
380
+ throw new Error(`document not found: ${id}`);
381
+ return record;
382
+ }
383
+ assertCapacity(index, delta, excludeId) {
384
+ const active = index.documents.filter(record => record.status === 'active');
385
+ const used = active.reduce((sum, record) => sum + record.sizeBytes, 0);
386
+ const projected = used + delta;
387
+ if (projected <= this.limitBytes)
388
+ return;
389
+ const candidates = active
390
+ .filter(record => record.id !== excludeId)
391
+ .sort((left, right) => Date.parse(left.lastAccessedAt) - Date.parse(right.lastAccessedAt) || Date.parse(left.updatedAt) - Date.parse(right.updatedAt));
392
+ throw new DocumentCapacityError(projected, this.limitBytes, candidates);
393
+ }
394
+ normalizeSourcePaths(paths) {
395
+ return unique(paths, 50).map(value => {
396
+ const absolute = resolve(this.workspaceRoot, value);
397
+ const workspaceRelative = relative(this.workspaceRoot, absolute);
398
+ if (workspaceRelative === '..' || workspaceRelative.startsWith(`..${sep}`) || isAbsolute(workspaceRelative))
399
+ throw new Error(`source path must stay inside the workspace: ${value}`);
400
+ if (absolute === this.directory || absolute.startsWith(`${this.directory}${sep}`))
401
+ throw new Error('managed document paths cannot be used as source paths');
402
+ return workspaceRelative.split(sep).join('/') || '.';
403
+ });
404
+ }
405
+ relativeManagedPath(status, filename) {
406
+ return [this.managedRelativePrefix, status, basename(filename)].join('/');
407
+ }
408
+ pathFor(record) {
409
+ const legacyPrefix = ['.mnemon', 'documents'].join('/');
410
+ const relativePath = record.relativePath === legacyPrefix || record.relativePath.startsWith(`${legacyPrefix}/`)
411
+ ? record.relativePath.slice('.mnemon/'.length)
412
+ : record.relativePath;
413
+ const path = resolve(this.storageRoot, relativePath);
414
+ const managedRoot = `${resolve(this.directory)}${sep}`;
415
+ if (!path.startsWith(managedRoot))
416
+ throw new Error('document index contains an unsafe managed path');
417
+ return path;
418
+ }
419
+ readBody(record) {
420
+ return documentBody(readFileSync(this.pathFor(record), 'utf8'));
421
+ }
422
+ view(record) {
423
+ return { ...record, content: this.readBody(record) };
424
+ }
425
+ persistDocument(record, content) {
426
+ this.atomicWrite(this.pathFor(record), renderDocument(record, content));
427
+ }
428
+ persistIndex(index) {
429
+ this.atomicWrite(this.indexPath, `${JSON.stringify(index, null, 2)}\n`);
430
+ }
431
+ atomicWrite(path, content) {
432
+ const temporary = `${path}.${process.pid}.${crypto.randomUUID()}.tmp`;
433
+ writeFileSync(temporary, content, { encoding: 'utf8', mode: 0o600 });
434
+ renameSync(temporary, path);
435
+ }
436
+ withLock(callback) {
437
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
438
+ let descriptor;
439
+ while (descriptor === undefined) {
440
+ try {
441
+ descriptor = openSync(this.lockPath, 'wx', 0o600);
442
+ }
443
+ catch (error) {
444
+ const code = error.code;
445
+ if (code !== 'EEXIST')
446
+ throw error;
447
+ try {
448
+ if (Date.now() - statSync(this.lockPath).mtimeMs > LOCK_STALE_MS)
449
+ rmSync(this.lockPath, { force: true });
450
+ }
451
+ catch { }
452
+ if (Date.now() >= deadline)
453
+ throw new Error(`timed out waiting for document lock: ${this.lockPath}`);
454
+ sleepSync(LOCK_RETRY_MS);
455
+ }
456
+ }
457
+ try {
458
+ return callback();
459
+ }
460
+ finally {
461
+ closeSync(descriptor);
462
+ rmSync(this.lockPath, { force: true });
463
+ }
464
+ }
465
+ }
466
+ /** Resolves one cached controller per canonical DSH workspace. */
467
+ export class DocumentManager {
468
+ limitBytes;
469
+ now;
470
+ storageRoot;
471
+ controllers = new Map();
472
+ constructor(limitBytes = DOCUMENTS_ACTIVE_LIMIT_BYTES, now = () => new Date(), storageRoot) {
473
+ this.limitBytes = limitBytes;
474
+ this.now = now;
475
+ this.storageRoot = storageRoot;
476
+ }
477
+ forWorkspace(workspaceRoot) {
478
+ const root = resolve(workspaceRoot);
479
+ let controller = this.controllers.get(root);
480
+ if (controller === undefined) {
481
+ controller = new DocumentController(root, this.limitBytes, this.now);
482
+ this.controllers.set(root, controller);
483
+ }
484
+ return controller;
485
+ }
486
+ forAgent(agent) {
487
+ const cwd = agent.session.header?.cwd;
488
+ if (cwd === undefined || cwd.trim() === '')
489
+ throw new Error('the current DSH session has no workspace for Mnemon Documents');
490
+ if (this.storageRoot === undefined)
491
+ return this.forWorkspace(cwd);
492
+ const storageRoot = resolve(this.storageRoot());
493
+ const root = resolve(cwd);
494
+ const key = `${storageRoot}\0${root}`;
495
+ let controller = this.controllers.get(key);
496
+ if (controller === undefined) {
497
+ controller = new DocumentController(root, this.limitBytes, this.now, storageRoot);
498
+ this.controllers.set(key, controller);
499
+ }
500
+ return controller;
501
+ }
502
+ }
503
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { HostContextShape } from './contracts.ts';
2
+ import type { RuntimeMemoryController } from './runtime-memory.ts';
3
+ export declare const GUIDANCE_SECTION_NAME = "mnemon:routing";
4
+ export declare const RUNTIME_MEMORY_SECTION_NAME = "mnemon:runtime-memory";
5
+ export declare const ROUTING_GUIDANCE = "Use memory only by need. For substantial project records, search active Mnemon Documents before deep recall. Call mnemon_recall when durable history may matter or an exact prior detail is missing; never infer a missing historical rule. New explicit reusable facts normally go to mnemon_runtime_memory. A write completes only with a tool receipt.";
6
+ export declare function registerGuidance(ctx: HostContextShape): void;
7
+ /** Inject the latest committed USER.md/MEMORY.md projections on every prompt assembly. */
8
+ export declare function registerRuntimeMemoryContext(ctx: HostContextShape, runtimeMemory: RuntimeMemoryController): void;
9
+ //# sourceMappingURL=guidance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../../src/guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,eAAO,MAAM,qBAAqB,mBAAmB,CAAA;AACrD,eAAO,MAAM,2BAA2B,0BAA0B,CAAA;AAClE,eAAO,MAAM,gBAAgB,8VAA8V,CAAA;AAU3X,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAE5D;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,EAAE,aAAa,EAAE,uBAAuB,GAAG,IAAI,CAMhH"}
@@ -0,0 +1,18 @@
1
+ export const GUIDANCE_SECTION_NAME = 'mnemon:routing';
2
+ export const RUNTIME_MEMORY_SECTION_NAME = 'mnemon:runtime-memory';
3
+ export const ROUTING_GUIDANCE = 'Use memory only by need. For substantial project records, search active Mnemon Documents before deep recall. Call mnemon_recall when durable history may matter or an exact prior detail is missing; never infer a missing historical rule. New explicit reusable facts normally go to mnemon_runtime_memory. A write completes only with a tool receipt.';
4
+ function systemPrompt(ctx) {
5
+ return ctx.get('systemPrompt');
6
+ }
7
+ export function registerGuidance(ctx) {
8
+ systemPrompt(ctx)?.section?.({ name: GUIDANCE_SECTION_NAME, order: 150, text: ROUTING_GUIDANCE });
9
+ }
10
+ /** Inject the latest committed USER.md/MEMORY.md projections on every prompt assembly. */
11
+ export function registerRuntimeMemoryContext(ctx, runtimeMemory) {
12
+ systemPrompt(ctx)?.section?.({
13
+ name: RUNTIME_MEMORY_SECTION_NAME,
14
+ order: 145,
15
+ text: () => runtimeMemory.contextText(),
16
+ });
17
+ }
18
+ //# sourceMappingURL=guidance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/guidance.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAA;AACrD,MAAM,CAAC,MAAM,2BAA2B,GAAG,uBAAuB,CAAA;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,2VAA2V,CAAA;AAE3X,SAAS,YAAY,CAAC,GAAqB;IAGzC,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAEhB,CAAA;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAqB;IACpD,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAA;AACnG,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,4BAA4B,CAAC,GAAqB,EAAE,aAAsC;IACxG,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QAC3B,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE;KACxC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Config, resolveConfig, type Config as MnemonConfig } from './config.ts';
2
+ import { DocumentManager } from './documents.ts';
3
+ import { MnemonLifecycle } from './lifecycle.ts';
4
+ import { createRunner } from './runner.ts';
5
+ import { RuntimeMemoryController } from './runtime-memory.ts';
6
+ import { MnemonService } from './service.ts';
7
+ import { MnemonSubagentCoordinator } from './subagent.ts';
8
+ import { StorageScopeInspector } from './storage-scope.ts';
9
+ export declare const name = "dsh-mnemon";
10
+ export declare const inject: string[];
11
+ export { Config, resolveConfig, DocumentManager, MnemonLifecycle, MnemonService, MnemonSubagentCoordinator, RuntimeMemoryController, StorageScopeInspector, createRunner };
12
+ export type { MnemonConfig };
13
+ /** Mount native model tools on every DSH surface and UI RPC only when Web connection exists. */
14
+ export declare function apply(rawContext: unknown, config?: MnemonConfig): void;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAGhF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,eAAO,MAAM,IAAI,eAAe,CAAA;AAChC,eAAO,MAAM,MAAM,UAA2D,CAAA;AAC9E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAA;AAC1K,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,gGAAgG;AAChG,wBAAgB,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,GAAE,YAAiB,GAAG,IAAI,CAwB1E"}