clementine-agent 1.0.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.
- package/.env.example +44 -0
- package/LICENSE +21 -0
- package/README.md +795 -0
- package/dist/agent/agent-manager.d.ts +69 -0
- package/dist/agent/agent-manager.js +441 -0
- package/dist/agent/assistant.d.ts +225 -0
- package/dist/agent/assistant.js +3888 -0
- package/dist/agent/auto-update.d.ts +32 -0
- package/dist/agent/auto-update.js +186 -0
- package/dist/agent/daily-planner.d.ts +24 -0
- package/dist/agent/daily-planner.js +379 -0
- package/dist/agent/execution-advisor.d.ts +10 -0
- package/dist/agent/execution-advisor.js +272 -0
- package/dist/agent/hooks.d.ts +45 -0
- package/dist/agent/hooks.js +564 -0
- package/dist/agent/insight-engine.d.ts +66 -0
- package/dist/agent/insight-engine.js +225 -0
- package/dist/agent/intent-classifier.d.ts +48 -0
- package/dist/agent/intent-classifier.js +214 -0
- package/dist/agent/link-extractor.d.ts +19 -0
- package/dist/agent/link-extractor.js +90 -0
- package/dist/agent/mcp-bridge.d.ts +62 -0
- package/dist/agent/mcp-bridge.js +435 -0
- package/dist/agent/metacognition.d.ts +66 -0
- package/dist/agent/metacognition.js +221 -0
- package/dist/agent/orchestrator.d.ts +81 -0
- package/dist/agent/orchestrator.js +790 -0
- package/dist/agent/profiles.d.ts +22 -0
- package/dist/agent/profiles.js +91 -0
- package/dist/agent/prompt-cache.d.ts +24 -0
- package/dist/agent/prompt-cache.js +68 -0
- package/dist/agent/prompt-evolver.d.ts +28 -0
- package/dist/agent/prompt-evolver.js +279 -0
- package/dist/agent/role-scaffolds.d.ts +28 -0
- package/dist/agent/role-scaffolds.js +433 -0
- package/dist/agent/safe-restart.d.ts +41 -0
- package/dist/agent/safe-restart.js +150 -0
- package/dist/agent/self-improve.d.ts +66 -0
- package/dist/agent/self-improve.js +1706 -0
- package/dist/agent/session-event-log.d.ts +114 -0
- package/dist/agent/session-event-log.js +233 -0
- package/dist/agent/skill-extractor.d.ts +72 -0
- package/dist/agent/skill-extractor.js +435 -0
- package/dist/agent/source-mods.d.ts +61 -0
- package/dist/agent/source-mods.js +230 -0
- package/dist/agent/source-preflight.d.ts +25 -0
- package/dist/agent/source-preflight.js +100 -0
- package/dist/agent/stall-guard.d.ts +62 -0
- package/dist/agent/stall-guard.js +109 -0
- package/dist/agent/strategic-planner.d.ts +60 -0
- package/dist/agent/strategic-planner.js +352 -0
- package/dist/agent/team-bus.d.ts +89 -0
- package/dist/agent/team-bus.js +556 -0
- package/dist/agent/team-router.d.ts +26 -0
- package/dist/agent/team-router.js +37 -0
- package/dist/agent/tool-loop-detector.d.ts +59 -0
- package/dist/agent/tool-loop-detector.js +242 -0
- package/dist/agent/workflow-runner.d.ts +36 -0
- package/dist/agent/workflow-runner.js +317 -0
- package/dist/agent/workflow-variables.d.ts +16 -0
- package/dist/agent/workflow-variables.js +62 -0
- package/dist/channels/discord-agent-bot.d.ts +101 -0
- package/dist/channels/discord-agent-bot.js +881 -0
- package/dist/channels/discord-bot-manager.d.ts +80 -0
- package/dist/channels/discord-bot-manager.js +262 -0
- package/dist/channels/discord-utils.d.ts +51 -0
- package/dist/channels/discord-utils.js +293 -0
- package/dist/channels/discord.d.ts +12 -0
- package/dist/channels/discord.js +1832 -0
- package/dist/channels/slack-agent-bot.d.ts +73 -0
- package/dist/channels/slack-agent-bot.js +320 -0
- package/dist/channels/slack-bot-manager.d.ts +66 -0
- package/dist/channels/slack-bot-manager.js +236 -0
- package/dist/channels/slack-utils.d.ts +39 -0
- package/dist/channels/slack-utils.js +189 -0
- package/dist/channels/slack.d.ts +11 -0
- package/dist/channels/slack.js +196 -0
- package/dist/channels/telegram.d.ts +10 -0
- package/dist/channels/telegram.js +235 -0
- package/dist/channels/webhook.d.ts +9 -0
- package/dist/channels/webhook.js +78 -0
- package/dist/channels/whatsapp.d.ts +11 -0
- package/dist/channels/whatsapp.js +181 -0
- package/dist/cli/chat.d.ts +14 -0
- package/dist/cli/chat.js +220 -0
- package/dist/cli/cron.d.ts +17 -0
- package/dist/cli/cron.js +552 -0
- package/dist/cli/dashboard.d.ts +15 -0
- package/dist/cli/dashboard.js +17677 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +2474 -0
- package/dist/cli/routes/delegations.d.ts +19 -0
- package/dist/cli/routes/delegations.js +154 -0
- package/dist/cli/routes/digest.d.ts +17 -0
- package/dist/cli/routes/digest.js +375 -0
- package/dist/cli/routes/goals.d.ts +14 -0
- package/dist/cli/routes/goals.js +258 -0
- package/dist/cli/routes/workflows.d.ts +18 -0
- package/dist/cli/routes/workflows.js +97 -0
- package/dist/cli/setup.d.ts +8 -0
- package/dist/cli/setup.js +619 -0
- package/dist/cli/tunnel.d.ts +35 -0
- package/dist/cli/tunnel.js +141 -0
- package/dist/config.d.ts +145 -0
- package/dist/config.js +278 -0
- package/dist/events/bus.d.ts +43 -0
- package/dist/events/bus.js +136 -0
- package/dist/gateway/cron-scheduler.d.ts +166 -0
- package/dist/gateway/cron-scheduler.js +1767 -0
- package/dist/gateway/delivery-queue.d.ts +30 -0
- package/dist/gateway/delivery-queue.js +110 -0
- package/dist/gateway/heartbeat-scheduler.d.ts +99 -0
- package/dist/gateway/heartbeat-scheduler.js +1298 -0
- package/dist/gateway/heartbeat.d.ts +3 -0
- package/dist/gateway/heartbeat.js +3 -0
- package/dist/gateway/lanes.d.ts +24 -0
- package/dist/gateway/lanes.js +76 -0
- package/dist/gateway/notifications.d.ts +29 -0
- package/dist/gateway/notifications.js +75 -0
- package/dist/gateway/router.d.ts +210 -0
- package/dist/gateway/router.js +1330 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1015 -0
- package/dist/memory/chunker.d.ts +28 -0
- package/dist/memory/chunker.js +226 -0
- package/dist/memory/consolidation.d.ts +44 -0
- package/dist/memory/consolidation.js +171 -0
- package/dist/memory/context-assembler.d.ts +50 -0
- package/dist/memory/context-assembler.js +149 -0
- package/dist/memory/embeddings.d.ts +38 -0
- package/dist/memory/embeddings.js +180 -0
- package/dist/memory/graph-store.d.ts +66 -0
- package/dist/memory/graph-store.js +613 -0
- package/dist/memory/mmr.d.ts +21 -0
- package/dist/memory/mmr.js +75 -0
- package/dist/memory/search.d.ts +26 -0
- package/dist/memory/search.js +67 -0
- package/dist/memory/store.d.ts +530 -0
- package/dist/memory/store.js +2022 -0
- package/dist/security/integrity.d.ts +24 -0
- package/dist/security/integrity.js +58 -0
- package/dist/security/patterns.d.ts +34 -0
- package/dist/security/patterns.js +110 -0
- package/dist/security/scanner.d.ts +32 -0
- package/dist/security/scanner.js +263 -0
- package/dist/tools/admin-tools.d.ts +12 -0
- package/dist/tools/admin-tools.js +1278 -0
- package/dist/tools/external-tools.d.ts +11 -0
- package/dist/tools/external-tools.js +1327 -0
- package/dist/tools/goal-tools.d.ts +9 -0
- package/dist/tools/goal-tools.js +159 -0
- package/dist/tools/mcp-server.d.ts +13 -0
- package/dist/tools/mcp-server.js +141 -0
- package/dist/tools/memory-tools.d.ts +10 -0
- package/dist/tools/memory-tools.js +568 -0
- package/dist/tools/session-tools.d.ts +6 -0
- package/dist/tools/session-tools.js +146 -0
- package/dist/tools/shared.d.ts +216 -0
- package/dist/tools/shared.js +340 -0
- package/dist/tools/team-tools.d.ts +6 -0
- package/dist/tools/team-tools.js +447 -0
- package/dist/tools/tool-meta.d.ts +34 -0
- package/dist/tools/tool-meta.js +133 -0
- package/dist/tools/vault-tools.d.ts +8 -0
- package/dist/tools/vault-tools.js +457 -0
- package/dist/types.d.ts +716 -0
- package/dist/types.js +16 -0
- package/dist/vault-migrations/0001-add-execution-framework.d.ts +10 -0
- package/dist/vault-migrations/0001-add-execution-framework.js +47 -0
- package/dist/vault-migrations/0002-add-agentic-communication.d.ts +12 -0
- package/dist/vault-migrations/0002-add-agentic-communication.js +79 -0
- package/dist/vault-migrations/0003-update-execution-pipeline-narration.d.ts +11 -0
- package/dist/vault-migrations/0003-update-execution-pipeline-narration.js +73 -0
- package/dist/vault-migrations/helpers.d.ts +14 -0
- package/dist/vault-migrations/helpers.js +44 -0
- package/dist/vault-migrations/runner.d.ts +14 -0
- package/dist/vault-migrations/runner.js +139 -0
- package/dist/vault-migrations/types.d.ts +42 -0
- package/dist/vault-migrations/types.js +9 -0
- package/install.sh +320 -0
- package/package.json +84 -0
- package/scripts/postinstall.js +125 -0
- package/vault/00-System/AGENTS.md +66 -0
- package/vault/00-System/CRON.md +71 -0
- package/vault/00-System/HEARTBEAT.md +58 -0
- package/vault/00-System/MEMORY.md +16 -0
- package/vault/00-System/SOUL.md +96 -0
- package/vault/05-Tasks/TASKS.md +19 -0
- package/vault/06-Templates/_Daily-Template.md +28 -0
- package/vault/06-Templates/_People-Template.md +22 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clementine TypeScript — Embedding Provider.
|
|
3
|
+
*
|
|
4
|
+
* Provides vector embeddings for memory chunks to enable semantic search.
|
|
5
|
+
* Uses a lightweight local approach (TF-IDF vectors stored as Float32Array blobs)
|
|
6
|
+
* that runs without external API calls or heavy WASM dependencies.
|
|
7
|
+
*
|
|
8
|
+
* The embedding column (BLOB) in the chunks table stores serialized Float32Arrays.
|
|
9
|
+
* Query-time: embed the query, compute cosine similarity against stored vectors.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Build the IDF vocabulary from a corpus of text chunks.
|
|
13
|
+
* Should be called periodically (e.g., during evening consolidation) with all chunk contents.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildVocab(documents: string[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Compute a TF-IDF embedding vector for a text string.
|
|
18
|
+
* Returns a Float32Array of length EMBEDDING_DIM, or null if vocab isn't ready.
|
|
19
|
+
*/
|
|
20
|
+
export declare function embed(text: string): Float32Array | null;
|
|
21
|
+
/**
|
|
22
|
+
* Compute cosine similarity between two embedding vectors.
|
|
23
|
+
* Returns a value in [-1, 1] where 1 = identical, 0 = orthogonal.
|
|
24
|
+
*/
|
|
25
|
+
export declare function cosineSimilarity(a: Float32Array, b: Float32Array): number;
|
|
26
|
+
/**
|
|
27
|
+
* Serialize a Float32Array to a Buffer for SQLite BLOB storage.
|
|
28
|
+
*/
|
|
29
|
+
export declare function serializeEmbedding(vec: Float32Array): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Deserialize a Buffer (from SQLite BLOB) back to Float32Array.
|
|
32
|
+
*/
|
|
33
|
+
export declare function deserializeEmbedding(buf: Buffer): Float32Array;
|
|
34
|
+
/**
|
|
35
|
+
* Check if the embedding system is ready (vocabulary loaded with sufficient words).
|
|
36
|
+
*/
|
|
37
|
+
export declare function isReady(): boolean;
|
|
38
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clementine TypeScript — Embedding Provider.
|
|
3
|
+
*
|
|
4
|
+
* Provides vector embeddings for memory chunks to enable semantic search.
|
|
5
|
+
* Uses a lightweight local approach (TF-IDF vectors stored as Float32Array blobs)
|
|
6
|
+
* that runs without external API calls or heavy WASM dependencies.
|
|
7
|
+
*
|
|
8
|
+
* The embedding column (BLOB) in the chunks table stores serialized Float32Arrays.
|
|
9
|
+
* Query-time: embed the query, compute cosine similarity against stored vectors.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import pino from 'pino';
|
|
14
|
+
import { BASE_DIR } from '../config.js';
|
|
15
|
+
const logger = pino({ name: 'clementine.embeddings' });
|
|
16
|
+
/** Dimension of the TF-IDF embedding vectors. */
|
|
17
|
+
const EMBEDDING_DIM = 512;
|
|
18
|
+
/** IDF vocabulary — built from corpus, cached to disk. */
|
|
19
|
+
let idfVocab = null;
|
|
20
|
+
let vocabWords = [];
|
|
21
|
+
const VOCAB_PATH = path.join(BASE_DIR, '.embedding-vocab.json');
|
|
22
|
+
/**
|
|
23
|
+
* Load or initialize the IDF vocabulary.
|
|
24
|
+
* The vocabulary maps the top-N words to their IDF weights.
|
|
25
|
+
*/
|
|
26
|
+
function loadVocab() {
|
|
27
|
+
if (idfVocab)
|
|
28
|
+
return;
|
|
29
|
+
if (existsSync(VOCAB_PATH)) {
|
|
30
|
+
try {
|
|
31
|
+
const data = JSON.parse(readFileSync(VOCAB_PATH, 'utf-8'));
|
|
32
|
+
idfVocab = new Map(Object.entries(data));
|
|
33
|
+
vocabWords = [...idfVocab.keys()];
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
logger.debug('Failed to load embedding vocab — will rebuild');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Start with empty vocab — will be built on first buildVocab() call
|
|
41
|
+
idfVocab = new Map();
|
|
42
|
+
vocabWords = [];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Build the IDF vocabulary from a corpus of text chunks.
|
|
46
|
+
* Should be called periodically (e.g., during evening consolidation) with all chunk contents.
|
|
47
|
+
*/
|
|
48
|
+
export function buildVocab(documents) {
|
|
49
|
+
if (documents.length === 0)
|
|
50
|
+
return;
|
|
51
|
+
// Compute document frequency for each word
|
|
52
|
+
const df = new Map();
|
|
53
|
+
const N = documents.length;
|
|
54
|
+
for (const doc of documents) {
|
|
55
|
+
const words = new Set(tokenize(doc));
|
|
56
|
+
for (const word of words) {
|
|
57
|
+
df.set(word, (df.get(word) ?? 0) + 1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Select top EMBEDDING_DIM words by document frequency (must appear in at least 2 docs)
|
|
61
|
+
const sorted = [...df.entries()]
|
|
62
|
+
.filter(([, count]) => count >= 2 && count < N * 0.95) // skip too-rare and too-common
|
|
63
|
+
.sort((a, b) => b[1] - a[1])
|
|
64
|
+
.slice(0, EMBEDDING_DIM);
|
|
65
|
+
idfVocab = new Map();
|
|
66
|
+
vocabWords = [];
|
|
67
|
+
for (const [word, count] of sorted) {
|
|
68
|
+
const idf = Math.log(N / (1 + count));
|
|
69
|
+
idfVocab.set(word, idf);
|
|
70
|
+
vocabWords.push(word);
|
|
71
|
+
}
|
|
72
|
+
// Persist to disk
|
|
73
|
+
try {
|
|
74
|
+
mkdirSync(path.dirname(VOCAB_PATH), { recursive: true });
|
|
75
|
+
writeFileSync(VOCAB_PATH, JSON.stringify(Object.fromEntries(idfVocab)));
|
|
76
|
+
logger.info({ vocabSize: vocabWords.length, corpusSize: N }, 'Embedding vocabulary built');
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
logger.debug({ err }, 'Failed to persist embedding vocabulary');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Tokenize text into lowercase words, filtering short words and stop words.
|
|
84
|
+
*/
|
|
85
|
+
function tokenize(text) {
|
|
86
|
+
return text
|
|
87
|
+
.toLowerCase()
|
|
88
|
+
.replace(/[^\w\s]/g, ' ')
|
|
89
|
+
.split(/\s+/)
|
|
90
|
+
.filter(w => w.length > 2 && !STOP_WORDS.has(w));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Compute a TF-IDF embedding vector for a text string.
|
|
94
|
+
* Returns a Float32Array of length EMBEDDING_DIM, or null if vocab isn't ready.
|
|
95
|
+
*/
|
|
96
|
+
export function embed(text) {
|
|
97
|
+
loadVocab();
|
|
98
|
+
if (!idfVocab || vocabWords.length === 0)
|
|
99
|
+
return null;
|
|
100
|
+
const words = tokenize(text);
|
|
101
|
+
if (words.length === 0)
|
|
102
|
+
return null;
|
|
103
|
+
// Compute term frequency
|
|
104
|
+
const tf = new Map();
|
|
105
|
+
for (const word of words) {
|
|
106
|
+
tf.set(word, (tf.get(word) ?? 0) + 1);
|
|
107
|
+
}
|
|
108
|
+
// Build TF-IDF vector
|
|
109
|
+
const vec = new Float32Array(vocabWords.length);
|
|
110
|
+
for (let i = 0; i < vocabWords.length; i++) {
|
|
111
|
+
const word = vocabWords[i];
|
|
112
|
+
const termFreq = tf.get(word) ?? 0;
|
|
113
|
+
const idf = idfVocab.get(word) ?? 0;
|
|
114
|
+
vec[i] = termFreq * idf;
|
|
115
|
+
}
|
|
116
|
+
// L2 normalize
|
|
117
|
+
let norm = 0;
|
|
118
|
+
for (let i = 0; i < vec.length; i++) {
|
|
119
|
+
norm += vec[i] * vec[i];
|
|
120
|
+
}
|
|
121
|
+
norm = Math.sqrt(norm);
|
|
122
|
+
if (norm > 0) {
|
|
123
|
+
for (let i = 0; i < vec.length; i++) {
|
|
124
|
+
vec[i] /= norm;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return vec;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Compute cosine similarity between two embedding vectors.
|
|
131
|
+
* Returns a value in [-1, 1] where 1 = identical, 0 = orthogonal.
|
|
132
|
+
*/
|
|
133
|
+
export function cosineSimilarity(a, b) {
|
|
134
|
+
if (a.length !== b.length)
|
|
135
|
+
return 0;
|
|
136
|
+
let dot = 0;
|
|
137
|
+
for (let i = 0; i < a.length; i++) {
|
|
138
|
+
dot += a[i] * b[i];
|
|
139
|
+
}
|
|
140
|
+
return dot; // Already L2-normalized, so dot product = cosine similarity
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Serialize a Float32Array to a Buffer for SQLite BLOB storage.
|
|
144
|
+
*/
|
|
145
|
+
export function serializeEmbedding(vec) {
|
|
146
|
+
return Buffer.from(vec.buffer, vec.byteOffset, vec.byteLength);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Deserialize a Buffer (from SQLite BLOB) back to Float32Array.
|
|
150
|
+
*/
|
|
151
|
+
export function deserializeEmbedding(buf) {
|
|
152
|
+
const ab = new ArrayBuffer(buf.length);
|
|
153
|
+
const view = new Uint8Array(ab);
|
|
154
|
+
for (let i = 0; i < buf.length; i++) {
|
|
155
|
+
view[i] = buf[i];
|
|
156
|
+
}
|
|
157
|
+
return new Float32Array(ab);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if the embedding system is ready (vocabulary loaded with sufficient words).
|
|
161
|
+
*/
|
|
162
|
+
export function isReady() {
|
|
163
|
+
loadVocab();
|
|
164
|
+
return vocabWords.length >= 50; // need at least 50 vocab words
|
|
165
|
+
}
|
|
166
|
+
const STOP_WORDS = new Set([
|
|
167
|
+
'the', 'be', 'to', 'of', 'and', 'in', 'that', 'have', 'it', 'for',
|
|
168
|
+
'not', 'on', 'with', 'he', 'as', 'you', 'do', 'at', 'this', 'but',
|
|
169
|
+
'his', 'by', 'from', 'they', 'we', 'say', 'her', 'she', 'or', 'an',
|
|
170
|
+
'will', 'my', 'one', 'all', 'would', 'there', 'their', 'what', 'so',
|
|
171
|
+
'up', 'out', 'if', 'about', 'who', 'get', 'which', 'go', 'me', 'when',
|
|
172
|
+
'make', 'can', 'like', 'time', 'no', 'just', 'him', 'know', 'take',
|
|
173
|
+
'people', 'into', 'year', 'your', 'good', 'some', 'could', 'them',
|
|
174
|
+
'see', 'other', 'than', 'then', 'now', 'look', 'only', 'come', 'its',
|
|
175
|
+
'over', 'think', 'also', 'back', 'after', 'use', 'two', 'how', 'our',
|
|
176
|
+
'work', 'first', 'well', 'way', 'even', 'new', 'want', 'because',
|
|
177
|
+
'any', 'these', 'give', 'day', 'most', 'was', 'are', 'has', 'had',
|
|
178
|
+
'been', 'were', 'did', 'does', 'done', 'being',
|
|
179
|
+
]);
|
|
180
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clementine TypeScript — FalkorDBLite graph memory layer.
|
|
3
|
+
*
|
|
4
|
+
* Adds entity graph, typed relationships, and multi-hop traversal on top
|
|
5
|
+
* of the existing SQLite FTS5 memory store. The vault remains the source
|
|
6
|
+
* of truth; the graph is a derived index that can be rebuilt at any time.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - The daemon calls `initialize()` which starts an embedded FalkorDB
|
|
10
|
+
* server and writes its Unix socket path to SOCKET_FILE.
|
|
11
|
+
* - MCP tools, dashboard, and assistant.ts call `connectToRunning()`
|
|
12
|
+
* which reads the socket file and connects as a client (no new server).
|
|
13
|
+
* - If no running instance is found, all graph features degrade gracefully.
|
|
14
|
+
*
|
|
15
|
+
* Graceful degradation: if FalkorDBLite fails to initialize, `isAvailable()`
|
|
16
|
+
* returns false and all graph features are silently skipped.
|
|
17
|
+
*/
|
|
18
|
+
import type { EntityNode, EntityRef, GraphSyncStats, PathResult, RelationshipTriplet, TraversalResult } from '../types.js';
|
|
19
|
+
export declare class GraphStore {
|
|
20
|
+
private db;
|
|
21
|
+
private client;
|
|
22
|
+
private graph;
|
|
23
|
+
private available;
|
|
24
|
+
private persistenceDir;
|
|
25
|
+
private ownsServer;
|
|
26
|
+
constructor(persistenceDir: string);
|
|
27
|
+
/** Get the socket file path for this instance's data dir. */
|
|
28
|
+
private get socketFilePath();
|
|
29
|
+
/**
|
|
30
|
+
* Start an embedded FalkorDB server. Only the daemon should call this.
|
|
31
|
+
* Writes the socket path to a file so other processes can connect.
|
|
32
|
+
*/
|
|
33
|
+
initialize(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Connect to an already-running FalkorDB instance via its socket file.
|
|
36
|
+
* Does NOT start a new server. Returns false if no running instance.
|
|
37
|
+
*/
|
|
38
|
+
connectToRunning(): Promise<boolean>;
|
|
39
|
+
isAvailable(): boolean;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
upsertEntity(label: string, id: string, props: Record<string, any>): Promise<void>;
|
|
42
|
+
getEntity(label: string, id: string): Promise<EntityNode | null>;
|
|
43
|
+
createRelationship(from: EntityRef, to: EntityRef, type: string, props?: Record<string, any>, temporal?: {
|
|
44
|
+
validFrom?: string;
|
|
45
|
+
validTo?: string;
|
|
46
|
+
}): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Mark a relationship as no longer active by setting its valid_to timestamp.
|
|
49
|
+
*/
|
|
50
|
+
invalidateRelationship(fromId: string, toId: string, relType: string, asOf?: string): Promise<boolean>;
|
|
51
|
+
getRelationships(entityId: string, direction?: 'in' | 'out' | 'both', relType?: string, asOf?: string): Promise<Array<{
|
|
52
|
+
from: string;
|
|
53
|
+
to: string;
|
|
54
|
+
type: string;
|
|
55
|
+
properties: Record<string, any>;
|
|
56
|
+
}>>;
|
|
57
|
+
traverse(startId: string, maxDepth?: number, relTypes?: string[], asOf?: string): Promise<TraversalResult[]>;
|
|
58
|
+
shortestPath(fromId: string, toId: string): Promise<PathResult | null>;
|
|
59
|
+
findConnected(entityId: string, targetLabel: string, maxHops?: number): Promise<EntityNode[]>;
|
|
60
|
+
query(cypher: string, params?: Record<string, any>): Promise<any[]>;
|
|
61
|
+
syncFromVault(vaultDir: string, agentsDir: string): Promise<GraphSyncStats>;
|
|
62
|
+
extractAndStoreRelationships(triplets: RelationshipTriplet[]): Promise<void>;
|
|
63
|
+
enrichWithGraphContext(entityIds: string[], _maxHops?: number): Promise<string>;
|
|
64
|
+
}
|
|
65
|
+
export declare function getSharedGraphStore(persistenceDir: string): Promise<GraphStore | null>;
|
|
66
|
+
//# sourceMappingURL=graph-store.d.ts.map
|