@delfos-ai/cli 1.0.3

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 (190) hide show
  1. package/README.md +93 -0
  2. package/dist/api/delfos-api.client.d.ts +32 -0
  3. package/dist/api/delfos-api.client.d.ts.map +1 -0
  4. package/dist/api/delfos-api.client.js +43 -0
  5. package/dist/api/delfos-api.client.js.map +1 -0
  6. package/dist/commands/login.command.d.ts +15 -0
  7. package/dist/commands/login.command.d.ts.map +1 -0
  8. package/dist/commands/login.command.js +164 -0
  9. package/dist/commands/login.command.js.map +1 -0
  10. package/dist/commands/logout.command.d.ts +8 -0
  11. package/dist/commands/logout.command.d.ts.map +1 -0
  12. package/dist/commands/logout.command.js +46 -0
  13. package/dist/commands/logout.command.js.map +1 -0
  14. package/dist/commands/mcp/mcp-memory.command.d.ts +11 -0
  15. package/dist/commands/mcp/mcp-memory.command.d.ts.map +1 -0
  16. package/dist/commands/mcp/mcp-memory.command.js +22 -0
  17. package/dist/commands/mcp/mcp-memory.command.js.map +1 -0
  18. package/dist/commands/memory/index.d.ts +3 -0
  19. package/dist/commands/memory/index.d.ts.map +1 -0
  20. package/dist/commands/memory/index.js +14 -0
  21. package/dist/commands/memory/index.js.map +1 -0
  22. package/dist/commands/memory/memory-index.command.d.ts +3 -0
  23. package/dist/commands/memory/memory-index.command.d.ts.map +1 -0
  24. package/dist/commands/memory/memory-index.command.js +57 -0
  25. package/dist/commands/memory/memory-index.command.js.map +1 -0
  26. package/dist/commands/memory/memory-init.command.d.ts +3 -0
  27. package/dist/commands/memory/memory-init.command.d.ts.map +1 -0
  28. package/dist/commands/memory/memory-init.command.js +72 -0
  29. package/dist/commands/memory/memory-init.command.js.map +1 -0
  30. package/dist/commands/memory/memory-read.command.d.ts +3 -0
  31. package/dist/commands/memory/memory-read.command.d.ts.map +1 -0
  32. package/dist/commands/memory/memory-read.command.js +52 -0
  33. package/dist/commands/memory/memory-read.command.js.map +1 -0
  34. package/dist/commands/memory/memory-status.command.d.ts +7 -0
  35. package/dist/commands/memory/memory-status.command.d.ts.map +1 -0
  36. package/dist/commands/memory/memory-status.command.js +43 -0
  37. package/dist/commands/memory/memory-status.command.js.map +1 -0
  38. package/dist/commands/memory/memory-write.command.d.ts +3 -0
  39. package/dist/commands/memory/memory-write.command.d.ts.map +1 -0
  40. package/dist/commands/memory/memory-write.command.js +66 -0
  41. package/dist/commands/memory/memory-write.command.js.map +1 -0
  42. package/dist/config/cli-config.d.ts +13 -0
  43. package/dist/config/cli-config.d.ts.map +1 -0
  44. package/dist/config/cli-config.js +31 -0
  45. package/dist/config/cli-config.js.map +1 -0
  46. package/dist/config/memory.config.d.ts +61 -0
  47. package/dist/config/memory.config.d.ts.map +1 -0
  48. package/dist/config/memory.config.js +22 -0
  49. package/dist/config/memory.config.js.map +1 -0
  50. package/dist/features/memory-index/index.d.ts +5 -0
  51. package/dist/features/memory-index/index.d.ts.map +1 -0
  52. package/dist/features/memory-index/index.js +3 -0
  53. package/dist/features/memory-index/index.js.map +1 -0
  54. package/dist/features/memory-index/memory-index.schema.d.ts +96 -0
  55. package/dist/features/memory-index/memory-index.schema.d.ts.map +1 -0
  56. package/dist/features/memory-index/memory-index.schema.js +14 -0
  57. package/dist/features/memory-index/memory-index.schema.js.map +1 -0
  58. package/dist/features/memory-index/vault-indexer.d.ts +17 -0
  59. package/dist/features/memory-index/vault-indexer.d.ts.map +1 -0
  60. package/dist/features/memory-index/vault-indexer.js +140 -0
  61. package/dist/features/memory-index/vault-indexer.js.map +1 -0
  62. package/dist/features/memory-init/vault-scaffolder.d.ts +20 -0
  63. package/dist/features/memory-init/vault-scaffolder.d.ts.map +1 -0
  64. package/dist/features/memory-init/vault-scaffolder.js +109 -0
  65. package/dist/features/memory-init/vault-scaffolder.js.map +1 -0
  66. package/dist/features/memory-read/index.d.ts +4 -0
  67. package/dist/features/memory-read/index.d.ts.map +1 -0
  68. package/dist/features/memory-read/index.js +3 -0
  69. package/dist/features/memory-read/index.js.map +1 -0
  70. package/dist/features/memory-read/memory-read.schema.d.ts +79 -0
  71. package/dist/features/memory-read/memory-read.schema.d.ts.map +1 -0
  72. package/dist/features/memory-read/memory-read.schema.js +25 -0
  73. package/dist/features/memory-read/memory-read.schema.js.map +1 -0
  74. package/dist/features/memory-read/rag-reader.d.ts +8 -0
  75. package/dist/features/memory-read/rag-reader.d.ts.map +1 -0
  76. package/dist/features/memory-read/rag-reader.js +79 -0
  77. package/dist/features/memory-read/rag-reader.js.map +1 -0
  78. package/dist/features/memory-server/config-loader.d.ts +6 -0
  79. package/dist/features/memory-server/config-loader.d.ts.map +1 -0
  80. package/dist/features/memory-server/config-loader.js +39 -0
  81. package/dist/features/memory-server/config-loader.js.map +1 -0
  82. package/dist/features/memory-server/index.d.ts +5 -0
  83. package/dist/features/memory-server/index.d.ts.map +1 -0
  84. package/dist/features/memory-server/index.js +4 -0
  85. package/dist/features/memory-server/index.js.map +1 -0
  86. package/dist/features/memory-server/memory-server.d.ts +6 -0
  87. package/dist/features/memory-server/memory-server.d.ts.map +1 -0
  88. package/dist/features/memory-server/memory-server.js +197 -0
  89. package/dist/features/memory-server/memory-server.js.map +1 -0
  90. package/dist/features/memory-server/memory-server.schema.d.ts +194 -0
  91. package/dist/features/memory-server/memory-server.schema.d.ts.map +1 -0
  92. package/dist/features/memory-server/memory-server.schema.js +58 -0
  93. package/dist/features/memory-server/memory-server.schema.js.map +1 -0
  94. package/dist/features/memory-server/tools/memory-index.handler.d.ts +10 -0
  95. package/dist/features/memory-server/tools/memory-index.handler.d.ts.map +1 -0
  96. package/dist/features/memory-server/tools/memory-index.handler.js +27 -0
  97. package/dist/features/memory-server/tools/memory-index.handler.js.map +1 -0
  98. package/dist/features/memory-server/tools/memory-read.handler.d.ts +10 -0
  99. package/dist/features/memory-server/tools/memory-read.handler.d.ts.map +1 -0
  100. package/dist/features/memory-server/tools/memory-read.handler.js +33 -0
  101. package/dist/features/memory-server/tools/memory-read.handler.js.map +1 -0
  102. package/dist/features/memory-server/tools/memory-status.handler.d.ts +9 -0
  103. package/dist/features/memory-server/tools/memory-status.handler.d.ts.map +1 -0
  104. package/dist/features/memory-server/tools/memory-status.handler.js +35 -0
  105. package/dist/features/memory-server/tools/memory-status.handler.js.map +1 -0
  106. package/dist/features/memory-server/tools/memory-write.handler.d.ts +8 -0
  107. package/dist/features/memory-server/tools/memory-write.handler.d.ts.map +1 -0
  108. package/dist/features/memory-server/tools/memory-write.handler.js +42 -0
  109. package/dist/features/memory-server/tools/memory-write.handler.js.map +1 -0
  110. package/dist/features/memory-shared/chunker.d.ts +16 -0
  111. package/dist/features/memory-shared/chunker.d.ts.map +1 -0
  112. package/dist/features/memory-shared/chunker.js +93 -0
  113. package/dist/features/memory-shared/chunker.js.map +1 -0
  114. package/dist/features/memory-shared/markdown-parser.d.ts +7 -0
  115. package/dist/features/memory-shared/markdown-parser.d.ts.map +1 -0
  116. package/dist/features/memory-shared/markdown-parser.js +24 -0
  117. package/dist/features/memory-shared/markdown-parser.js.map +1 -0
  118. package/dist/features/memory-shared/vault-path-validator.d.ts +14 -0
  119. package/dist/features/memory-shared/vault-path-validator.d.ts.map +1 -0
  120. package/dist/features/memory-shared/vault-path-validator.js +56 -0
  121. package/dist/features/memory-shared/vault-path-validator.js.map +1 -0
  122. package/dist/features/memory-shared/vault-scanner.d.ts +8 -0
  123. package/dist/features/memory-shared/vault-scanner.d.ts.map +1 -0
  124. package/dist/features/memory-shared/vault-scanner.js +35 -0
  125. package/dist/features/memory-shared/vault-scanner.js.map +1 -0
  126. package/dist/features/memory-shared/vault-slug.d.ts +9 -0
  127. package/dist/features/memory-shared/vault-slug.d.ts.map +1 -0
  128. package/dist/features/memory-shared/vault-slug.js +17 -0
  129. package/dist/features/memory-shared/vault-slug.js.map +1 -0
  130. package/dist/features/memory-write/index.d.ts +6 -0
  131. package/dist/features/memory-write/index.d.ts.map +1 -0
  132. package/dist/features/memory-write/index.js +4 -0
  133. package/dist/features/memory-write/index.js.map +1 -0
  134. package/dist/features/memory-write/memory-write.schema.d.ts +36 -0
  135. package/dist/features/memory-write/memory-write.schema.d.ts.map +1 -0
  136. package/dist/features/memory-write/memory-write.schema.js +14 -0
  137. package/dist/features/memory-write/memory-write.schema.js.map +1 -0
  138. package/dist/features/memory-write/note-formatter.d.ts +11 -0
  139. package/dist/features/memory-write/note-formatter.d.ts.map +1 -0
  140. package/dist/features/memory-write/note-formatter.js +38 -0
  141. package/dist/features/memory-write/note-formatter.js.map +1 -0
  142. package/dist/features/memory-write/vault-writer.d.ts +6 -0
  143. package/dist/features/memory-write/vault-writer.d.ts.map +1 -0
  144. package/dist/features/memory-write/vault-writer.js +61 -0
  145. package/dist/features/memory-write/vault-writer.js.map +1 -0
  146. package/dist/index.d.ts +3 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +24 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/infrastructure/embeddings/embedding-provider.d.ts +9 -0
  151. package/dist/infrastructure/embeddings/embedding-provider.d.ts.map +1 -0
  152. package/dist/infrastructure/embeddings/embedding-provider.js +5 -0
  153. package/dist/infrastructure/embeddings/embedding-provider.js.map +1 -0
  154. package/dist/infrastructure/embeddings/local-embedding.provider.d.ts +18 -0
  155. package/dist/infrastructure/embeddings/local-embedding.provider.d.ts.map +1 -0
  156. package/dist/infrastructure/embeddings/local-embedding.provider.js +38 -0
  157. package/dist/infrastructure/embeddings/local-embedding.provider.js.map +1 -0
  158. package/dist/infrastructure/logger/index.d.ts +21 -0
  159. package/dist/infrastructure/logger/index.d.ts.map +1 -0
  160. package/dist/infrastructure/logger/index.js +116 -0
  161. package/dist/infrastructure/logger/index.js.map +1 -0
  162. package/dist/infrastructure/vector-db/chroma.adapter.d.ts +76 -0
  163. package/dist/infrastructure/vector-db/chroma.adapter.d.ts.map +1 -0
  164. package/dist/infrastructure/vector-db/chroma.adapter.js +137 -0
  165. package/dist/infrastructure/vector-db/chroma.adapter.js.map +1 -0
  166. package/dist/utils/config.d.ts +13 -0
  167. package/dist/utils/config.d.ts.map +1 -0
  168. package/dist/utils/config.js +13 -0
  169. package/dist/utils/config.js.map +1 -0
  170. package/dist/utils/pkce.d.ts +17 -0
  171. package/dist/utils/pkce.d.ts.map +1 -0
  172. package/dist/utils/pkce.js +28 -0
  173. package/dist/utils/pkce.js.map +1 -0
  174. package/dist/utils/port.d.ts +7 -0
  175. package/dist/utils/port.d.ts.map +1 -0
  176. package/dist/utils/port.js +33 -0
  177. package/dist/utils/port.js.map +1 -0
  178. package/package.json +59 -0
  179. package/templates/.gitkeep +0 -0
  180. package/templates/obsidian-vault/AI-Context/global-rules.md +129 -0
  181. package/templates/obsidian-vault/AI-Context/tool-preferences.md +128 -0
  182. package/templates/obsidian-vault/Patterns/architecture-patterns.md +147 -0
  183. package/templates/obsidian-vault/Patterns/coding-standards.md +90 -0
  184. package/templates/obsidian-vault/Projects/example-project/Decisions/example-decision.md +51 -0
  185. package/templates/obsidian-vault/Projects/example-project/Migrations/example-migration.md +85 -0
  186. package/templates/obsidian-vault/Projects/example-project/Overview.md +43 -0
  187. package/templates/obsidian-vault/Projects/example-project/Sessions/session-1.md +66 -0
  188. package/templates/obsidian-vault/Templates/decision.md +57 -0
  189. package/templates/obsidian-vault/Templates/migration.md +86 -0
  190. package/templates/obsidian-vault/Templates/session.md +87 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * vault-indexer.ts — Indexes vault notes into the vector DB.
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as path from 'node:path';
6
+ import { EmbeddingDimensionMismatchError } from '../../infrastructure/vector-db/chroma.adapter.js';
7
+ import { getVaultSlug } from '../memory-shared/vault-slug.js';
8
+ import { validateVaultPath } from '../memory-shared/vault-path-validator.js';
9
+ import { scanVault } from '../memory-shared/vault-scanner.js';
10
+ import { parseNote } from '../memory-shared/markdown-parser.js';
11
+ import { chunkNote } from '../memory-shared/chunker.js';
12
+ const BATCH_SIZE = 10;
13
+ export async function indexVault(config, mode, chroma, embedding) {
14
+ const startTime = Date.now();
15
+ const validation = await validateVaultPath(config.vault_path);
16
+ if (!validation.valid) {
17
+ throw new Error(`Invalid vault path: ${validation.errors.join(', ')}`);
18
+ }
19
+ const slug = getVaultSlug(config.vault_path);
20
+ let effectiveMode = mode;
21
+ let lastIndexAt = null;
22
+ let collectionDimension = embedding.dimension;
23
+ if (mode === 'incremental') {
24
+ const exists = await chroma.collectionExists(slug);
25
+ if (!exists) {
26
+ effectiveMode = 'full';
27
+ }
28
+ else {
29
+ const meta = await chroma.getCollectionMeta(slug);
30
+ lastIndexAt = meta.lastIndexAt ? new Date(meta.lastIndexAt) : null;
31
+ collectionDimension = meta.dimension ?? embedding.dimension;
32
+ }
33
+ }
34
+ if (effectiveMode === 'full') {
35
+ await chroma.dropCollection(slug);
36
+ await chroma.getOrCreateCollection(slug, embedding.dimension);
37
+ }
38
+ const notes = await scanVault(validation.resolvedPath);
39
+ let toIndex = notes;
40
+ let toSkip = [];
41
+ if (effectiveMode === 'incremental' && lastIndexAt !== null) {
42
+ toIndex = notes.filter((n) => n.modifiedAt > lastIndexAt);
43
+ toSkip = notes.filter((n) => n.modifiedAt <= lastIndexAt);
44
+ const currentPaths = new Set(notes.map((n) => n.relativePath));
45
+ const zeroVec = new Array(collectionDimension).fill(0);
46
+ const existingChunks = await chroma.queryChunks(slug, zeroVec, 10000);
47
+ const allIndexedPaths = existingChunks.map((c) => c.metadata.path);
48
+ const deletedPaths = [
49
+ ...new Set(allIndexedPaths.filter((p) => !currentPaths.has(p))),
50
+ ];
51
+ if (deletedPaths.length > 0) {
52
+ await chroma.deleteByPaths(slug, deletedPaths);
53
+ }
54
+ }
55
+ let indexed = 0;
56
+ let errors = 0;
57
+ for (let i = 0; i < toIndex.length; i += BATCH_SIZE) {
58
+ const batch = toIndex.slice(i, i + BATCH_SIZE);
59
+ const batchChunksData = [];
60
+ for (const note of batch) {
61
+ try {
62
+ const content = await fs.readFile(note.absolutePath, 'utf-8');
63
+ const parsed = parseNote(content, note.relativePath);
64
+ const chunks = chunkNote(parsed, note.relativePath, note.modifiedAt);
65
+ for (const chunk of chunks) {
66
+ batchChunksData.push({
67
+ noteRelPath: note.relativePath,
68
+ chunkIndex: chunk.chunkIndex,
69
+ content: chunk.content,
70
+ metadata: {
71
+ path: chunk.noteMetadata.path,
72
+ title: chunk.noteMetadata.title,
73
+ folder: chunk.noteMetadata.folder,
74
+ tags: chunk.noteMetadata.tags.join(','),
75
+ modified_at: chunk.noteMetadata.modified_at,
76
+ type: chunk.noteMetadata.type,
77
+ chunk_index: chunk.chunkIndex,
78
+ heading: chunk.heading,
79
+ },
80
+ });
81
+ }
82
+ indexed++;
83
+ }
84
+ catch (err) {
85
+ if (err instanceof EmbeddingDimensionMismatchError)
86
+ throw err;
87
+ errors++;
88
+ }
89
+ }
90
+ if (batchChunksData.length === 0)
91
+ continue;
92
+ const embeddings = await embedding.embed(batchChunksData.map((c) => c.content));
93
+ const chunksToUpsert = batchChunksData.map((cd, idx) => ({
94
+ id: `${cd.noteRelPath}:${cd.chunkIndex}`,
95
+ content: cd.content,
96
+ embedding: embeddings[idx],
97
+ metadata: cd.metadata,
98
+ }));
99
+ await chroma.upsertChunks(slug, chunksToUpsert);
100
+ }
101
+ await chroma.updateLastIndexAt(slug);
102
+ return {
103
+ mode: effectiveMode,
104
+ total_notes: notes.length,
105
+ indexed,
106
+ skipped: toSkip.length,
107
+ errors,
108
+ duration_ms: Date.now() - startTime,
109
+ };
110
+ }
111
+ export async function indexSingleNote(notePath, vaultPath, _persistDir, chroma, embedding) {
112
+ const slug = getVaultSlug(vaultPath);
113
+ const relativePath = path.relative(vaultPath, notePath);
114
+ const [content, stat] = await Promise.all([
115
+ fs.readFile(notePath, 'utf-8'),
116
+ fs.stat(notePath),
117
+ ]);
118
+ const parsed = parseNote(content, relativePath);
119
+ const chunks = chunkNote(parsed, relativePath, stat.mtime);
120
+ if (chunks.length === 0)
121
+ return;
122
+ const embeddings = await embedding.embed(chunks.map((c) => c.content));
123
+ const chunksToUpsert = chunks.map((chunk, idx) => ({
124
+ id: `${relativePath}:${chunk.chunkIndex}`,
125
+ content: chunk.content,
126
+ embedding: embeddings[idx],
127
+ metadata: {
128
+ path: chunk.noteMetadata.path,
129
+ title: chunk.noteMetadata.title,
130
+ folder: chunk.noteMetadata.folder,
131
+ tags: chunk.noteMetadata.tags.join(','),
132
+ modified_at: chunk.noteMetadata.modified_at,
133
+ type: chunk.noteMetadata.type,
134
+ chunk_index: chunk.chunkIndex,
135
+ heading: chunk.heading,
136
+ },
137
+ }));
138
+ await chroma.upsertChunks(slug, chunksToUpsert);
139
+ }
140
+ //# sourceMappingURL=vault-indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-indexer.js","sourceRoot":"","sources":["../../../src/features/memory-index/vault-indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * vault-scaffolder.ts — Scaffolds Obsidian vault structure from templates.
3
+ */
4
+ export interface ScaffoldResult {
5
+ created: string[];
6
+ skipped: string[];
7
+ }
8
+ /**
9
+ * Replaces placeholders in content with actual values.
10
+ */
11
+ export declare function replacePlaceholders(content: string, vaultName: string, date: string): string;
12
+ /**
13
+ * Scaffolds an Obsidian vault structure from templates.
14
+ *
15
+ * @param vaultPath - Absolute path to the target vault
16
+ * @param templateDir - Absolute path to the templates directory
17
+ * @returns ScaffoldResult with created and skipped file paths
18
+ */
19
+ export declare function scaffoldVault(vaultPath: string, templateDir: string): Promise<ScaffoldResult>;
20
+ //# sourceMappingURL=vault-scaffolder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-scaffolder.d.ts","sourceRoot":"","sources":["../../../src/features/memory-init/vault-scaffolder.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAwBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CA2FzB"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * vault-scaffolder.ts — Scaffolds Obsidian vault structure from templates.
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as path from 'node:path';
6
+ import { validateVaultPath } from '../memory-shared/vault-path-validator.js';
7
+ import { createSliceLogger } from '../../infrastructure/logger/index.js';
8
+ const logger = createSliceLogger('vault-scaffolder');
9
+ /**
10
+ * Recursively walks a directory and returns all file paths relative to the base.
11
+ */
12
+ async function walkDirectory(dir, base) {
13
+ const files = [];
14
+ const entries = await fs.readdir(dir, { withFileTypes: true });
15
+ for (const entry of entries) {
16
+ const fullPath = path.join(dir, entry.name);
17
+ const relativePath = path.relative(base, fullPath);
18
+ if (entry.isDirectory()) {
19
+ const childFiles = await walkDirectory(fullPath, base);
20
+ files.push(...childFiles);
21
+ }
22
+ else {
23
+ files.push(relativePath);
24
+ }
25
+ }
26
+ return files;
27
+ }
28
+ /**
29
+ * Replaces placeholders in content with actual values.
30
+ */
31
+ export function replacePlaceholders(content, vaultName, date) {
32
+ return content
33
+ .replace(/\{\{vault_name\}\}/g, vaultName)
34
+ .replace(/\{\{date\}\}/g, date);
35
+ }
36
+ /**
37
+ * Scaffolds an Obsidian vault structure from templates.
38
+ *
39
+ * @param vaultPath - Absolute path to the target vault
40
+ * @param templateDir - Absolute path to the templates directory
41
+ * @returns ScaffoldResult with created and skipped file paths
42
+ */
43
+ export async function scaffoldVault(vaultPath, templateDir) {
44
+ logger.debug({ vaultPath, templateDir }, 'Starting vault scaffolding');
45
+ // Validate vault path
46
+ const validation = await validateVaultPath(vaultPath);
47
+ if (!validation.valid) {
48
+ const error = validation.errors.join(', ');
49
+ logger.error({ vaultPath, errors: validation.errors }, 'Vault path validation failed');
50
+ throw new Error(`Invalid vault path: ${error}`);
51
+ }
52
+ if (validation.warnings.length > 0) {
53
+ logger.warn({ vaultPath, warnings: validation.warnings }, 'Vault path validation warnings');
54
+ }
55
+ const created = [];
56
+ const skipped = [];
57
+ const vaultName = path.basename(vaultPath);
58
+ const date = new Date().toISOString().split('T')[0];
59
+ // Walk template directory
60
+ const templateFiles = await walkDirectory(templateDir, templateDir);
61
+ logger.debug({ templateFileCount: templateFiles.length }, 'Found template files');
62
+ for (const relativePath of templateFiles) {
63
+ const sourcePath = path.join(templateDir, relativePath);
64
+ const targetPath = path.join(vaultPath, relativePath);
65
+ // Check if target already exists
66
+ try {
67
+ await fs.access(targetPath);
68
+ skipped.push(relativePath);
69
+ logger.debug({ path: relativePath }, 'File already exists, skipping');
70
+ continue;
71
+ }
72
+ catch {
73
+ // File doesn't exist, proceed with creation
74
+ }
75
+ // Create directory if needed
76
+ const targetDir = path.dirname(targetPath);
77
+ try {
78
+ await fs.mkdir(targetDir, { recursive: true });
79
+ }
80
+ catch (err) {
81
+ logger.error({ dir: targetDir, err }, 'Failed to create directory');
82
+ throw new Error(`Failed to create directory ${targetDir}: ${err instanceof Error ? err.message : String(err)}`);
83
+ }
84
+ // Read template content
85
+ let content;
86
+ try {
87
+ content = await fs.readFile(sourcePath, 'utf-8');
88
+ }
89
+ catch (err) {
90
+ logger.error({ sourcePath, err }, 'Failed to read template file');
91
+ throw new Error(`Failed to read template ${sourcePath}: ${err instanceof Error ? err.message : String(err)}`);
92
+ }
93
+ // Replace placeholders
94
+ const processedContent = replacePlaceholders(content, vaultName, date);
95
+ // Write file
96
+ try {
97
+ await fs.writeFile(targetPath, processedContent, 'utf-8');
98
+ created.push(relativePath);
99
+ logger.debug({ path: relativePath }, 'File created');
100
+ }
101
+ catch (err) {
102
+ logger.error({ targetPath, err }, 'Failed to write file');
103
+ throw new Error(`Failed to write file ${targetPath}: ${err instanceof Error ? err.message : String(err)}`);
104
+ }
105
+ }
106
+ logger.info({ vaultPath, createdCount: created.length, skippedCount: skipped.length }, 'Vault scaffolding completed');
107
+ return { created, skipped };
108
+ }
109
+ //# sourceMappingURL=vault-scaffolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-scaffolder.js","sourceRoot":"","sources":["../../../src/features/memory-init/vault-scaffolder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { readMemory } from './rag-reader.js';
2
+ export { MemoryReadJobDataSchema, MemoryReadResultSchema, } from './memory-read.schema.js';
3
+ export type { MemoryReadJobData, MemoryReadResult, } from './memory-read.schema.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/memory-read/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { readMemory } from './rag-reader.js';
2
+ export { MemoryReadJobDataSchema, MemoryReadResultSchema, } from './memory-read.schema.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/memory-read/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ export declare const MemoryReadJobDataSchema: z.ZodObject<{
3
+ query: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodNumber>;
5
+ vaultPath: z.ZodString;
6
+ filters: z.ZodOptional<z.ZodObject<{
7
+ folder: z.ZodOptional<z.ZodString>;
8
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ tags?: string[] | undefined;
11
+ folder?: string | undefined;
12
+ }, {
13
+ tags?: string[] | undefined;
14
+ folder?: string | undefined;
15
+ }>>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ vaultPath: string;
18
+ query: string;
19
+ limit: number;
20
+ filters?: {
21
+ tags?: string[] | undefined;
22
+ folder?: string | undefined;
23
+ } | undefined;
24
+ }, {
25
+ vaultPath: string;
26
+ query: string;
27
+ limit?: number | undefined;
28
+ filters?: {
29
+ tags?: string[] | undefined;
30
+ folder?: string | undefined;
31
+ } | undefined;
32
+ }>;
33
+ export type MemoryReadJobData = z.infer<typeof MemoryReadJobDataSchema>;
34
+ export declare const MemoryReadResultSchema: z.ZodObject<{
35
+ path: z.ZodString;
36
+ title: z.ZodString;
37
+ excerpt: z.ZodString;
38
+ score: z.ZodNumber;
39
+ metadata: z.ZodObject<{
40
+ folder: z.ZodString;
41
+ tags: z.ZodArray<z.ZodString, "many">;
42
+ modified_at: z.ZodString;
43
+ type: z.ZodString;
44
+ }, "strip", z.ZodTypeAny, {
45
+ type: string;
46
+ tags: string[];
47
+ folder: string;
48
+ modified_at: string;
49
+ }, {
50
+ type: string;
51
+ tags: string[];
52
+ folder: string;
53
+ modified_at: string;
54
+ }>;
55
+ }, "strip", z.ZodTypeAny, {
56
+ path: string;
57
+ title: string;
58
+ metadata: {
59
+ type: string;
60
+ tags: string[];
61
+ folder: string;
62
+ modified_at: string;
63
+ };
64
+ excerpt: string;
65
+ score: number;
66
+ }, {
67
+ path: string;
68
+ title: string;
69
+ metadata: {
70
+ type: string;
71
+ tags: string[];
72
+ folder: string;
73
+ modified_at: string;
74
+ };
75
+ excerpt: string;
76
+ score: number;
77
+ }>;
78
+ export type MemoryReadResult = z.infer<typeof MemoryReadResultSchema>;
79
+ //# sourceMappingURL=memory-read.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-read.schema.d.ts","sourceRoot":"","sources":["../../../src/features/memory-read/memory-read.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export const MemoryReadJobDataSchema = z.object({
3
+ query: z.string(),
4
+ limit: z.number().int().min(1).max(20).default(5),
5
+ vaultPath: z.string(),
6
+ filters: z
7
+ .object({
8
+ folder: z.string().optional(),
9
+ tags: z.array(z.string()).optional(),
10
+ })
11
+ .optional(),
12
+ });
13
+ export const MemoryReadResultSchema = z.object({
14
+ path: z.string(),
15
+ title: z.string(),
16
+ excerpt: z.string(),
17
+ score: z.number(),
18
+ metadata: z.object({
19
+ folder: z.string(),
20
+ tags: z.array(z.string()),
21
+ modified_at: z.string(),
22
+ type: z.string(),
23
+ }),
24
+ });
25
+ //# sourceMappingURL=memory-read.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-read.schema.js","sourceRoot":"","sources":["../../../src/features/memory-read/memory-read.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrC,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * rag-reader.ts — RAG-based memory search (CLI version without Directus cache).
3
+ */
4
+ import type { ChromaDBAdapter } from '../../infrastructure/vector-db/chroma.adapter.js';
5
+ import type { EmbeddingProvider } from '../../infrastructure/embeddings/embedding-provider.js';
6
+ import type { MemoryReadJobData, MemoryReadResult } from './memory-read.schema.js';
7
+ export declare function readMemory(jobData: MemoryReadJobData, chroma: ChromaDBAdapter, embedding: EmbeddingProvider): Promise<MemoryReadResult[]>;
8
+ //# sourceMappingURL=rag-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-reader.d.ts","sourceRoot":"","sources":["../../../src/features/memory-read/rag-reader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAE/F,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAOjC,wBAAsB,UAAU,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuG7B"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * rag-reader.ts — RAG-based memory search (CLI version without Directus cache).
3
+ */
4
+ import { getVaultSlug } from '../memory-shared/vault-slug.js';
5
+ import { createSliceLogger } from '../../infrastructure/logger/index.js';
6
+ const logger = createSliceLogger('rag-reader');
7
+ const MIN_SCORE = 0.3;
8
+ export async function readMemory(jobData, chroma, embedding) {
9
+ const { query, limit, filters, vaultPath } = jobData;
10
+ const startTime = Date.now();
11
+ logger.debug({ query, limit, filters }, 'Starting memory read');
12
+ // Step 1: Embed query
13
+ const queryEmbeddings = await embedding.embed([query]);
14
+ const queryEmbedding = queryEmbeddings[0];
15
+ // Step 2: ChromaDB search (fetch 3x limit to compensate for deduplication)
16
+ const vaultSlug = getVaultSlug(vaultPath);
17
+ const collectionExists = await chroma.collectionExists(vaultSlug);
18
+ if (!collectionExists) {
19
+ logger.warn({ vaultSlug, vaultPath }, 'Vault not indexed - returning empty results');
20
+ return [];
21
+ }
22
+ const chromaFilters = {};
23
+ if (filters?.folder) {
24
+ chromaFilters.folder = filters.folder;
25
+ }
26
+ if (filters?.tags && filters.tags.length > 0) {
27
+ chromaFilters.tags = filters.tags[0];
28
+ }
29
+ const queryResults = await chroma.queryChunks(vaultSlug, queryEmbedding, limit * 3, chromaFilters);
30
+ // Step 3: Rank by score descending
31
+ queryResults.sort((a, b) => b.score - a.score);
32
+ // Step 4: Deduplicate by path (keep highest score per note)
33
+ const pathMap = new Map();
34
+ for (const result of queryResults) {
35
+ const existing = pathMap.get(result.metadata.path);
36
+ if (!existing || result.score > existing.score) {
37
+ pathMap.set(result.metadata.path, result);
38
+ }
39
+ }
40
+ // Step 5: Filter by threshold and apply additional tag filtering in memory
41
+ let deduplicatedResults = Array.from(pathMap.values());
42
+ if (filters?.tags && filters.tags.length > 1) {
43
+ deduplicatedResults = deduplicatedResults.filter((result) => {
44
+ const resultTags = typeof result.metadata.tags === 'string'
45
+ ? result.metadata.tags.split(',').map((t) => t.trim())
46
+ : result.metadata.tags;
47
+ return filters.tags.every((tag) => resultTags.includes(tag));
48
+ });
49
+ }
50
+ const filteredResults = deduplicatedResults.filter((result) => result.score >= MIN_SCORE);
51
+ // Step 6: Map to MemoryReadResult format
52
+ const results = filteredResults
53
+ .slice(0, limit)
54
+ .map((result) => ({
55
+ path: result.metadata.path,
56
+ title: result.metadata.title,
57
+ excerpt: result.content.length > 500
58
+ ? result.content.substring(0, 500) + '...'
59
+ : result.content,
60
+ score: result.score,
61
+ metadata: {
62
+ folder: result.metadata.folder,
63
+ tags: typeof result.metadata.tags === 'string'
64
+ ? result.metadata.tags.split(',').map((t) => t.trim())
65
+ : result.metadata.tags,
66
+ modified_at: result.metadata.modified_at,
67
+ type: result.metadata.type,
68
+ },
69
+ }));
70
+ const durationMs = Date.now() - startTime;
71
+ logger.info({
72
+ query,
73
+ results_count: results.length,
74
+ top_score: results[0]?.score,
75
+ duration_ms: durationMs,
76
+ }, 'memory read completed');
77
+ return results;
78
+ }
79
+ //# sourceMappingURL=rag-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag-reader.js","sourceRoot":"","sources":["../../../src/features/memory-read/rag-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * config-loader.ts — Loads MemoryConfig from CLI config or defaults.
3
+ */
4
+ import type { MemoryConfig } from '../../config/memory.config.js';
5
+ export declare function loadMemoryConfig(vaultPath?: string): Promise<MemoryConfig>;
6
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/features/memory-server/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,wBAAsB,gBAAgB,CACpC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CA+BvB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * config-loader.ts — Loads MemoryConfig from CLI config or defaults.
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as path from 'node:path';
6
+ import { MemoryConfigSchema } from '../../config/memory.config.js';
7
+ export async function loadMemoryConfig(vaultPath) {
8
+ // If vaultPath is provided, try to load config file
9
+ if (vaultPath) {
10
+ const configPath = path.join(vaultPath, 'DELFOS-AI-LAYER.config.json');
11
+ try {
12
+ const configContent = await fs.readFile(configPath, 'utf-8');
13
+ const rawConfig = JSON.parse(configContent);
14
+ return MemoryConfigSchema.parse(rawConfig);
15
+ }
16
+ catch (err) {
17
+ // Config file doesn't exist or is invalid, fall back to defaults
18
+ }
19
+ }
20
+ // Fall back to default config
21
+ const defaultVaultPath = vaultPath || process.cwd();
22
+ return MemoryConfigSchema.parse({
23
+ enabled: true,
24
+ vault_path: defaultVaultPath,
25
+ vector_db: {
26
+ engine: 'chroma',
27
+ persist_dir: path.join(defaultVaultPath, '.delfos', 'vector_db'),
28
+ },
29
+ embeddings: {
30
+ provider: 'local',
31
+ model: 'all-MiniLM-L6-v2',
32
+ },
33
+ auto_write: true,
34
+ auto_read: true,
35
+ index_on_startup: false,
36
+ rag_cache_ttl_hours: 24,
37
+ });
38
+ }
39
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/features/memory-server/config-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAkB;IAElB,oDAAoD;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,OAAO,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,iEAAiE;QACnE,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACpD,OAAO,kBAAkB,CAAC,KAAK,CAAC;QAC9B,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE;YACT,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,WAAW,CAAC;SACjE;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,kBAAkB;SAC1B;QACD,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,EAAE;KACxB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { startMemoryServer } from './memory-server.js';
2
+ export { loadMemoryConfig } from './config-loader.js';
3
+ export { MemoryReadToolInputSchema, MemoryWriteToolInputSchema, MemoryIndexToolInputSchema, MemoryStatusToolInputSchema, } from './memory-server.schema.js';
4
+ export type { MemoryReadToolInput, MemoryWriteToolInput, MemoryIndexToolInput, MemoryStatusToolInput, } from './memory-server.schema.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/memory-server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { startMemoryServer } from './memory-server.js';
2
+ export { loadMemoryConfig } from './config-loader.js';
3
+ export { MemoryReadToolInputSchema, MemoryWriteToolInputSchema, MemoryIndexToolInputSchema, MemoryStatusToolInputSchema, } from './memory-server.schema.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/memory-server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * memory-server.ts — MCP server entry point for delfos-memory (CLI version).
3
+ * Exposes 4 tools: memory_read, memory_write, memory_index, memory_status.
4
+ */
5
+ export declare function startMemoryServer(vaultPath?: string): Promise<void>;
6
+ //# sourceMappingURL=memory-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-server.d.ts","sourceRoot":"","sources":["../../../src/features/memory-server/memory-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,wBAAsB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0MzE"}