@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.
- package/README.md +93 -0
- package/dist/api/delfos-api.client.d.ts +32 -0
- package/dist/api/delfos-api.client.d.ts.map +1 -0
- package/dist/api/delfos-api.client.js +43 -0
- package/dist/api/delfos-api.client.js.map +1 -0
- package/dist/commands/login.command.d.ts +15 -0
- package/dist/commands/login.command.d.ts.map +1 -0
- package/dist/commands/login.command.js +164 -0
- package/dist/commands/login.command.js.map +1 -0
- package/dist/commands/logout.command.d.ts +8 -0
- package/dist/commands/logout.command.d.ts.map +1 -0
- package/dist/commands/logout.command.js +46 -0
- package/dist/commands/logout.command.js.map +1 -0
- package/dist/commands/mcp/mcp-memory.command.d.ts +11 -0
- package/dist/commands/mcp/mcp-memory.command.d.ts.map +1 -0
- package/dist/commands/mcp/mcp-memory.command.js +22 -0
- package/dist/commands/mcp/mcp-memory.command.js.map +1 -0
- package/dist/commands/memory/index.d.ts +3 -0
- package/dist/commands/memory/index.d.ts.map +1 -0
- package/dist/commands/memory/index.js +14 -0
- package/dist/commands/memory/index.js.map +1 -0
- package/dist/commands/memory/memory-index.command.d.ts +3 -0
- package/dist/commands/memory/memory-index.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-index.command.js +57 -0
- package/dist/commands/memory/memory-index.command.js.map +1 -0
- package/dist/commands/memory/memory-init.command.d.ts +3 -0
- package/dist/commands/memory/memory-init.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-init.command.js +72 -0
- package/dist/commands/memory/memory-init.command.js.map +1 -0
- package/dist/commands/memory/memory-read.command.d.ts +3 -0
- package/dist/commands/memory/memory-read.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-read.command.js +52 -0
- package/dist/commands/memory/memory-read.command.js.map +1 -0
- package/dist/commands/memory/memory-status.command.d.ts +7 -0
- package/dist/commands/memory/memory-status.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-status.command.js +43 -0
- package/dist/commands/memory/memory-status.command.js.map +1 -0
- package/dist/commands/memory/memory-write.command.d.ts +3 -0
- package/dist/commands/memory/memory-write.command.d.ts.map +1 -0
- package/dist/commands/memory/memory-write.command.js +66 -0
- package/dist/commands/memory/memory-write.command.js.map +1 -0
- package/dist/config/cli-config.d.ts +13 -0
- package/dist/config/cli-config.d.ts.map +1 -0
- package/dist/config/cli-config.js +31 -0
- package/dist/config/cli-config.js.map +1 -0
- package/dist/config/memory.config.d.ts +61 -0
- package/dist/config/memory.config.d.ts.map +1 -0
- package/dist/config/memory.config.js +22 -0
- package/dist/config/memory.config.js.map +1 -0
- package/dist/features/memory-index/index.d.ts +5 -0
- package/dist/features/memory-index/index.d.ts.map +1 -0
- package/dist/features/memory-index/index.js +3 -0
- package/dist/features/memory-index/index.js.map +1 -0
- package/dist/features/memory-index/memory-index.schema.d.ts +96 -0
- package/dist/features/memory-index/memory-index.schema.d.ts.map +1 -0
- package/dist/features/memory-index/memory-index.schema.js +14 -0
- package/dist/features/memory-index/memory-index.schema.js.map +1 -0
- package/dist/features/memory-index/vault-indexer.d.ts +17 -0
- package/dist/features/memory-index/vault-indexer.d.ts.map +1 -0
- package/dist/features/memory-index/vault-indexer.js +140 -0
- package/dist/features/memory-index/vault-indexer.js.map +1 -0
- package/dist/features/memory-init/vault-scaffolder.d.ts +20 -0
- package/dist/features/memory-init/vault-scaffolder.d.ts.map +1 -0
- package/dist/features/memory-init/vault-scaffolder.js +109 -0
- package/dist/features/memory-init/vault-scaffolder.js.map +1 -0
- package/dist/features/memory-read/index.d.ts +4 -0
- package/dist/features/memory-read/index.d.ts.map +1 -0
- package/dist/features/memory-read/index.js +3 -0
- package/dist/features/memory-read/index.js.map +1 -0
- package/dist/features/memory-read/memory-read.schema.d.ts +79 -0
- package/dist/features/memory-read/memory-read.schema.d.ts.map +1 -0
- package/dist/features/memory-read/memory-read.schema.js +25 -0
- package/dist/features/memory-read/memory-read.schema.js.map +1 -0
- package/dist/features/memory-read/rag-reader.d.ts +8 -0
- package/dist/features/memory-read/rag-reader.d.ts.map +1 -0
- package/dist/features/memory-read/rag-reader.js +79 -0
- package/dist/features/memory-read/rag-reader.js.map +1 -0
- package/dist/features/memory-server/config-loader.d.ts +6 -0
- package/dist/features/memory-server/config-loader.d.ts.map +1 -0
- package/dist/features/memory-server/config-loader.js +39 -0
- package/dist/features/memory-server/config-loader.js.map +1 -0
- package/dist/features/memory-server/index.d.ts +5 -0
- package/dist/features/memory-server/index.d.ts.map +1 -0
- package/dist/features/memory-server/index.js +4 -0
- package/dist/features/memory-server/index.js.map +1 -0
- package/dist/features/memory-server/memory-server.d.ts +6 -0
- package/dist/features/memory-server/memory-server.d.ts.map +1 -0
- package/dist/features/memory-server/memory-server.js +197 -0
- package/dist/features/memory-server/memory-server.js.map +1 -0
- package/dist/features/memory-server/memory-server.schema.d.ts +194 -0
- package/dist/features/memory-server/memory-server.schema.d.ts.map +1 -0
- package/dist/features/memory-server/memory-server.schema.js +58 -0
- package/dist/features/memory-server/memory-server.schema.js.map +1 -0
- package/dist/features/memory-server/tools/memory-index.handler.d.ts +10 -0
- package/dist/features/memory-server/tools/memory-index.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-index.handler.js +27 -0
- package/dist/features/memory-server/tools/memory-index.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-read.handler.d.ts +10 -0
- package/dist/features/memory-server/tools/memory-read.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-read.handler.js +33 -0
- package/dist/features/memory-server/tools/memory-read.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-status.handler.d.ts +9 -0
- package/dist/features/memory-server/tools/memory-status.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-status.handler.js +35 -0
- package/dist/features/memory-server/tools/memory-status.handler.js.map +1 -0
- package/dist/features/memory-server/tools/memory-write.handler.d.ts +8 -0
- package/dist/features/memory-server/tools/memory-write.handler.d.ts.map +1 -0
- package/dist/features/memory-server/tools/memory-write.handler.js +42 -0
- package/dist/features/memory-server/tools/memory-write.handler.js.map +1 -0
- package/dist/features/memory-shared/chunker.d.ts +16 -0
- package/dist/features/memory-shared/chunker.d.ts.map +1 -0
- package/dist/features/memory-shared/chunker.js +93 -0
- package/dist/features/memory-shared/chunker.js.map +1 -0
- package/dist/features/memory-shared/markdown-parser.d.ts +7 -0
- package/dist/features/memory-shared/markdown-parser.d.ts.map +1 -0
- package/dist/features/memory-shared/markdown-parser.js +24 -0
- package/dist/features/memory-shared/markdown-parser.js.map +1 -0
- package/dist/features/memory-shared/vault-path-validator.d.ts +14 -0
- package/dist/features/memory-shared/vault-path-validator.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-path-validator.js +56 -0
- package/dist/features/memory-shared/vault-path-validator.js.map +1 -0
- package/dist/features/memory-shared/vault-scanner.d.ts +8 -0
- package/dist/features/memory-shared/vault-scanner.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-scanner.js +35 -0
- package/dist/features/memory-shared/vault-scanner.js.map +1 -0
- package/dist/features/memory-shared/vault-slug.d.ts +9 -0
- package/dist/features/memory-shared/vault-slug.d.ts.map +1 -0
- package/dist/features/memory-shared/vault-slug.js +17 -0
- package/dist/features/memory-shared/vault-slug.js.map +1 -0
- package/dist/features/memory-write/index.d.ts +6 -0
- package/dist/features/memory-write/index.d.ts.map +1 -0
- package/dist/features/memory-write/index.js +4 -0
- package/dist/features/memory-write/index.js.map +1 -0
- package/dist/features/memory-write/memory-write.schema.d.ts +36 -0
- package/dist/features/memory-write/memory-write.schema.d.ts.map +1 -0
- package/dist/features/memory-write/memory-write.schema.js +14 -0
- package/dist/features/memory-write/memory-write.schema.js.map +1 -0
- package/dist/features/memory-write/note-formatter.d.ts +11 -0
- package/dist/features/memory-write/note-formatter.d.ts.map +1 -0
- package/dist/features/memory-write/note-formatter.js +38 -0
- package/dist/features/memory-write/note-formatter.js.map +1 -0
- package/dist/features/memory-write/vault-writer.d.ts +6 -0
- package/dist/features/memory-write/vault-writer.d.ts.map +1 -0
- package/dist/features/memory-write/vault-writer.js +61 -0
- package/dist/features/memory-write/vault-writer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/embeddings/embedding-provider.d.ts +9 -0
- package/dist/infrastructure/embeddings/embedding-provider.d.ts.map +1 -0
- package/dist/infrastructure/embeddings/embedding-provider.js +5 -0
- package/dist/infrastructure/embeddings/embedding-provider.js.map +1 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.d.ts +18 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.d.ts.map +1 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.js +38 -0
- package/dist/infrastructure/embeddings/local-embedding.provider.js.map +1 -0
- package/dist/infrastructure/logger/index.d.ts +21 -0
- package/dist/infrastructure/logger/index.d.ts.map +1 -0
- package/dist/infrastructure/logger/index.js +116 -0
- package/dist/infrastructure/logger/index.js.map +1 -0
- package/dist/infrastructure/vector-db/chroma.adapter.d.ts +76 -0
- package/dist/infrastructure/vector-db/chroma.adapter.d.ts.map +1 -0
- package/dist/infrastructure/vector-db/chroma.adapter.js +137 -0
- package/dist/infrastructure/vector-db/chroma.adapter.js.map +1 -0
- package/dist/utils/config.d.ts +13 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +13 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/pkce.d.ts +17 -0
- package/dist/utils/pkce.d.ts.map +1 -0
- package/dist/utils/pkce.js +28 -0
- package/dist/utils/pkce.js.map +1 -0
- package/dist/utils/port.d.ts +7 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +33 -0
- package/dist/utils/port.js.map +1 -0
- package/package.json +59 -0
- package/templates/.gitkeep +0 -0
- package/templates/obsidian-vault/AI-Context/global-rules.md +129 -0
- package/templates/obsidian-vault/AI-Context/tool-preferences.md +128 -0
- package/templates/obsidian-vault/Patterns/architecture-patterns.md +147 -0
- package/templates/obsidian-vault/Patterns/coding-standards.md +90 -0
- package/templates/obsidian-vault/Projects/example-project/Decisions/example-decision.md +51 -0
- package/templates/obsidian-vault/Projects/example-project/Migrations/example-migration.md +85 -0
- package/templates/obsidian-vault/Projects/example-project/Overview.md +43 -0
- package/templates/obsidian-vault/Projects/example-project/Sessions/session-1.md +66 -0
- package/templates/obsidian-vault/Templates/decision.md +57 -0
- package/templates/obsidian-vault/Templates/migration.md +86 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|