velixar-mcp-server 0.2.4 → 1.2.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/README.md +120 -64
- package/dist/api.d.ts +64 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +405 -0
- package/dist/api.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +52 -0
- package/dist/errors.js.map +1 -0
- package/dist/justify.d.ts +9 -0
- package/dist/justify.d.ts.map +1 -0
- package/dist/justify.js +114 -0
- package/dist/justify.js.map +1 -0
- package/dist/prompts.d.ts +88 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +693 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +25 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +278 -0
- package/dist/resources.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +392 -0
- package/dist/server.js.map +1 -0
- package/dist/simulation/personas.d.ts +41 -0
- package/dist/simulation/personas.d.ts.map +1 -0
- package/dist/simulation/personas.js +173 -0
- package/dist/simulation/personas.js.map +1 -0
- package/dist/simulation/report.d.ts +28 -0
- package/dist/simulation/report.d.ts.map +1 -0
- package/dist/simulation/report.js +105 -0
- package/dist/simulation/report.js.map +1 -0
- package/dist/simulation/runner.d.ts +63 -0
- package/dist/simulation/runner.d.ts.map +1 -0
- package/dist/simulation/runner.js +167 -0
- package/dist/simulation/runner.js.map +1 -0
- package/dist/temporal_merge.d.ts +70 -0
- package/dist/temporal_merge.d.ts.map +1 -0
- package/dist/temporal_merge.js +258 -0
- package/dist/temporal_merge.js.map +1 -0
- package/dist/tools/clairvoyance.d.ts +9 -0
- package/dist/tools/clairvoyance.d.ts.map +1 -0
- package/dist/tools/clairvoyance.js +321 -0
- package/dist/tools/clairvoyance.js.map +1 -0
- package/dist/tools/cognitive.d.ts +10 -0
- package/dist/tools/cognitive.d.ts.map +1 -0
- package/dist/tools/cognitive.js +462 -0
- package/dist/tools/cognitive.js.map +1 -0
- package/dist/tools/construction.d.ts +9 -0
- package/dist/tools/construction.d.ts.map +1 -0
- package/dist/tools/construction.js +350 -0
- package/dist/tools/construction.js.map +1 -0
- package/dist/tools/graph.d.ts +14 -0
- package/dist/tools/graph.d.ts.map +1 -0
- package/dist/tools/graph.js +263 -0
- package/dist/tools/graph.js.map +1 -0
- package/dist/tools/graph_sanitizer.d.ts +24 -0
- package/dist/tools/graph_sanitizer.d.ts.map +1 -0
- package/dist/tools/graph_sanitizer.js +79 -0
- package/dist/tools/graph_sanitizer.js.map +1 -0
- package/dist/tools/lifecycle.d.ts +9 -0
- package/dist/tools/lifecycle.d.ts.map +1 -0
- package/dist/tools/lifecycle.js +1091 -0
- package/dist/tools/lifecycle.js.map +1 -0
- package/dist/tools/livedata.d.ts +9 -0
- package/dist/tools/livedata.d.ts.map +1 -0
- package/dist/tools/livedata.js +222 -0
- package/dist/tools/livedata.js.map +1 -0
- package/dist/tools/memory.d.ts +10 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +275 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/recall.d.ts +9 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +206 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/retrieval.d.ts +9 -0
- package/dist/tools/retrieval.d.ts.map +1 -0
- package/dist/tools/retrieval.js +338 -0
- package/dist/tools/retrieval.js.map +1 -0
- package/dist/tools/system.d.ts +12 -0
- package/dist/tools/system.d.ts.map +1 -0
- package/dist/tools/system.js +228 -0
- package/dist/tools/system.js.map +1 -0
- package/dist/types.d.ts +234 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +79 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +174 -0
- package/dist/validate.js.map +1 -0
- package/dist/validate_retrieval.d.ts +33 -0
- package/dist/validate_retrieval.d.ts.map +1 -0
- package/dist/validate_retrieval.js +97 -0
- package/dist/validate_retrieval.js.map +1 -0
- package/package.json +22 -6
- package/server.json +2 -2
- package/.github/workflows/ci.yml +0 -18
- package/.mcpregistry_github_token +0 -1
- package/.mcpregistry_registry_token +0 -1
- package/src/index.js +0 -262
- package/tests/server.test.js +0 -193
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
// ── Memory CRUD Tools ──
|
|
2
|
+
// store, search, list, update, delete
|
|
3
|
+
// Phase 0: Added tags, before, after, tier filters (backend-side via Qdrant).
|
|
4
|
+
// H1.5: _warnings array when backend may not support filter params.
|
|
5
|
+
import { normalizeMemory, wrapResponse } from '../api.js';
|
|
6
|
+
import { validateStoreResponse, validateSearchResponse, validateListResponse, validateMutationResponse } from '../validate.js';
|
|
7
|
+
// H1.5: Track warned params to avoid cluttering every response
|
|
8
|
+
const _warnedParams = new Set();
|
|
9
|
+
// H6.1/Chain 9: _baseFilter — single source of truth for building search/list query params
|
|
10
|
+
// All retrieval handlers must use this instead of constructing URLSearchParams directly.
|
|
11
|
+
export function _baseFilter(config, args) {
|
|
12
|
+
const params = new URLSearchParams({ user_id: config.userId });
|
|
13
|
+
if (args.limit)
|
|
14
|
+
params.set('limit', String(args.limit));
|
|
15
|
+
if (args.tags)
|
|
16
|
+
params.set('tags', args.tags.join(','));
|
|
17
|
+
if (args.before)
|
|
18
|
+
params.set('before', args.before);
|
|
19
|
+
if (args.after)
|
|
20
|
+
params.set('after', args.after);
|
|
21
|
+
if (args.tier !== undefined)
|
|
22
|
+
params.set('tier', String(args.tier));
|
|
23
|
+
if (args.sort)
|
|
24
|
+
params.set('sort', args.sort);
|
|
25
|
+
return params;
|
|
26
|
+
}
|
|
27
|
+
export const memoryTools = [
|
|
28
|
+
{
|
|
29
|
+
name: 'velixar_store',
|
|
30
|
+
description: 'Store a memory for later retrieval. Use for important facts, decisions, user preferences, project context, or anything worth remembering long-term. ' +
|
|
31
|
+
'Memories are workspace-scoped and persist across sessions. ' +
|
|
32
|
+
'Use check_duplicate: true when storing content that may overlap with existing memories.',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
content: { type: 'string', description: 'The memory content to store' },
|
|
37
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Optional tags for categorization' },
|
|
38
|
+
tier: { type: 'number', description: 'Memory tier: 0=pinned, 1=session, 2=semantic (default), 3=org' },
|
|
39
|
+
quarantine_zone: { type: 'string', description: 'Optional quarantine zone ID. Memory will only be visible to zone members.' },
|
|
40
|
+
check_duplicate: { type: 'boolean', description: 'Check for near-duplicate before storing (default: false). Still stores regardless — warning is advisory.' },
|
|
41
|
+
dedup_threshold: { type: 'number', description: 'Similarity threshold for duplicate detection (default: 0.95). Only used when check_duplicate is true.' },
|
|
42
|
+
source: { type: 'string', description: 'Provenance label (e.g., "user-stated", "derived-from-analysis")' },
|
|
43
|
+
source_ids: { type: 'array', items: { type: 'string' }, description: 'Parent memory IDs for provenance linking' },
|
|
44
|
+
atomic: { type: 'boolean', description: 'Store as a single unit — never split into chunks. Use for poems, quotes, structured data that must stay whole.' },
|
|
45
|
+
},
|
|
46
|
+
required: ['content'],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'velixar_search',
|
|
51
|
+
description: 'Search stored memories by semantic similarity. Returns ranked results with relevance scores. ' +
|
|
52
|
+
'Supports filtering by tags, date range, tier, and memory type.',
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
properties: {
|
|
56
|
+
query: { type: 'string', description: 'Search query' },
|
|
57
|
+
limit: { type: 'number', description: 'Max results (default 5)' },
|
|
58
|
+
memory_type: { type: 'string', enum: ['episodic', 'semantic'], description: 'Filter by memory type' },
|
|
59
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags (AND logic — memory must have all specified tags)' },
|
|
60
|
+
before: { type: 'string', description: 'ISO timestamp — only return memories created before this time' },
|
|
61
|
+
after: { type: 'string', description: 'ISO timestamp — only return memories created after this time' },
|
|
62
|
+
tier: { type: 'number', description: 'Filter by memory tier (0=pinned, 1=session, 2=semantic, 3=org)' },
|
|
63
|
+
full_content: { type: 'boolean', description: 'Reassemble chunked memories into full content (default: false). Use for poems, essays, or content that must be returned whole.' },
|
|
64
|
+
},
|
|
65
|
+
required: ['query'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'velixar_list',
|
|
70
|
+
description: 'List recent memories with pagination. Returns full metadata including IDs, tags, and timestamps. ' +
|
|
71
|
+
'Supports filtering by tags, date range, tier, and memory type.',
|
|
72
|
+
inputSchema: {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
limit: { type: 'number', description: 'Max results (default 10)' },
|
|
76
|
+
cursor: { type: 'string', description: 'Pagination cursor from previous response' },
|
|
77
|
+
memory_type: { type: 'string', enum: ['episodic', 'semantic'], description: 'Filter by memory type' },
|
|
78
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'Filter by tags (AND logic)' },
|
|
79
|
+
before: { type: 'string', description: 'ISO timestamp — only return memories created before this time' },
|
|
80
|
+
after: { type: 'string', description: 'ISO timestamp — only return memories created after this time' },
|
|
81
|
+
tier: { type: 'number', description: 'Filter by memory tier (0=pinned, 1=session, 2=semantic, 3=org)' },
|
|
82
|
+
sort: { type: 'string', enum: ['recent', 'oldest', 'tier'], description: 'Sort order (default: recent)' },
|
|
83
|
+
count_only: { type: 'boolean', description: 'Return only the total count, no memory content' },
|
|
84
|
+
},
|
|
85
|
+
required: [],
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'velixar_update',
|
|
90
|
+
description: "Update an existing memory's content or tags.",
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
properties: {
|
|
94
|
+
memory_id: { type: 'string', description: 'Memory ID to update' },
|
|
95
|
+
id: { type: 'string', description: 'Alias for memory_id (backward compat)' },
|
|
96
|
+
content: { type: 'string', description: 'New content' },
|
|
97
|
+
tags: { type: 'array', items: { type: 'string' }, description: 'New tags' },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'velixar_delete',
|
|
103
|
+
description: 'Delete or archive memories. Use archive: true for soft-delete (recoverable).',
|
|
104
|
+
inputSchema: {
|
|
105
|
+
type: 'object',
|
|
106
|
+
properties: {
|
|
107
|
+
memory_id: { type: 'string', description: 'Memory ID to delete (single)' },
|
|
108
|
+
id: { type: 'string', description: 'Alias for memory_id (backward compat)' },
|
|
109
|
+
ids: { type: 'array', items: { type: 'string' }, description: 'Memory IDs to delete (bulk)' },
|
|
110
|
+
archive: { type: 'boolean', description: 'Soft-delete: set archived=true instead of hard-deleting (default: false)' },
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
export async function handleMemoryTool(name, args, api, config) {
|
|
116
|
+
if (name === 'velixar_store') {
|
|
117
|
+
// Build 1.1: Opt-in dedup check
|
|
118
|
+
let similar_existing = null;
|
|
119
|
+
if (args.check_duplicate) {
|
|
120
|
+
const threshold = args.dedup_threshold ?? 0.95;
|
|
121
|
+
try {
|
|
122
|
+
const content = args.content;
|
|
123
|
+
// Skip dedup for very long content (embedding token limit)
|
|
124
|
+
if (content.length < 25000) {
|
|
125
|
+
const searchParams = new URLSearchParams({ q: content.slice(0, 500), user_id: config.userId, limit: '1' });
|
|
126
|
+
const searchRaw = await api.get(`/memory/search?${searchParams}`, false);
|
|
127
|
+
const searchResult = validateSearchResponse(searchRaw, '/memory/search');
|
|
128
|
+
if (searchResult.memories.length > 0) {
|
|
129
|
+
const top = searchResult.memories[0];
|
|
130
|
+
const score = top.score ?? 0;
|
|
131
|
+
if (score >= threshold) {
|
|
132
|
+
similar_existing = {
|
|
133
|
+
id: top.id,
|
|
134
|
+
content_preview: (top.content || '').slice(0, 200),
|
|
135
|
+
similarity: Math.round(score * 1000) / 1000,
|
|
136
|
+
threshold_used: threshold,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Dedup check failed — store anyway (H2.7: graceful fallback)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Build 1.2: Provenance params
|
|
147
|
+
const storeBody = {
|
|
148
|
+
content: args.content,
|
|
149
|
+
user_id: config.userId,
|
|
150
|
+
tier: args.tier ?? 2,
|
|
151
|
+
tags: args.tags || [],
|
|
152
|
+
author: { type: 'agent', agent_id: config.userId },
|
|
153
|
+
source_type: args.source || 'mcp_store',
|
|
154
|
+
quarantine_zone: args.quarantine_zone || null,
|
|
155
|
+
no_chunk: args.atomic === true,
|
|
156
|
+
};
|
|
157
|
+
if (args.source_ids)
|
|
158
|
+
storeBody.previous_memory_id = args.source_ids[0] || null;
|
|
159
|
+
const raw = await api.post('/memory', storeBody);
|
|
160
|
+
const result = validateStoreResponse(raw, '/memory');
|
|
161
|
+
const responseData = { id: result.id, action: 'stored' };
|
|
162
|
+
if (similar_existing)
|
|
163
|
+
responseData.similar_existing = similar_existing;
|
|
164
|
+
return { text: JSON.stringify(wrapResponse(responseData, config)) };
|
|
165
|
+
}
|
|
166
|
+
if (name === 'velixar_search') {
|
|
167
|
+
const params = _baseFilter(config, args);
|
|
168
|
+
params.set('q', args.query);
|
|
169
|
+
if (args.full_content)
|
|
170
|
+
params.set('reassemble', 'true');
|
|
171
|
+
const raw = await api.get(`/memory/search?${params}`, true);
|
|
172
|
+
const result = validateSearchResponse(raw, '/memory/search');
|
|
173
|
+
let items = result.memories.map(m => {
|
|
174
|
+
const mem = normalizeMemory(m);
|
|
175
|
+
mem.workspace_id = config.workspaceId;
|
|
176
|
+
return mem;
|
|
177
|
+
});
|
|
178
|
+
if (args.memory_type)
|
|
179
|
+
items = items.filter(m => m.memory_type === args.memory_type);
|
|
180
|
+
// H1.5: Verify backend actually applied filters — warn if results don't match
|
|
181
|
+
const _warnings = [];
|
|
182
|
+
if (args.tags && items.length > 0) {
|
|
183
|
+
const requiredTags = args.tags;
|
|
184
|
+
const unfiltered = items.filter(m => !requiredTags.every(t => m.tags.includes(t)));
|
|
185
|
+
if (unfiltered.length > 0) {
|
|
186
|
+
items = items.filter(m => requiredTags.every(t => m.tags.includes(t)));
|
|
187
|
+
if (!_warnedParams.has('search:tags')) {
|
|
188
|
+
_warnings.push('tags filter may not be fully supported by backend — applied client-side fallback');
|
|
189
|
+
_warnedParams.add('search:tags');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
text: JSON.stringify(wrapResponse({ items, count: items.length, ...(_warnings.length ? { _warnings } : {}) }, config, { data_absent: items.length === 0 })),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (name === 'velixar_list') {
|
|
198
|
+
const params = _baseFilter(config, args);
|
|
199
|
+
if (args.cursor)
|
|
200
|
+
params.set('cursor', args.cursor);
|
|
201
|
+
const raw = await api.get(`/memory/list?${params}`, true);
|
|
202
|
+
const result = validateListResponse(raw, '/memory/list');
|
|
203
|
+
let items = result.memories.map(m => {
|
|
204
|
+
const mem = normalizeMemory(m);
|
|
205
|
+
mem.workspace_id = config.workspaceId;
|
|
206
|
+
return mem;
|
|
207
|
+
});
|
|
208
|
+
if (args.memory_type)
|
|
209
|
+
items = items.filter(m => m.memory_type === args.memory_type);
|
|
210
|
+
if (args.count_only) {
|
|
211
|
+
return { text: JSON.stringify(wrapResponse({ count: items.length }, config)) };
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
text: JSON.stringify(wrapResponse({ items, count: items.length, cursor: result.cursor }, config, { data_absent: items.length === 0 })),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (name === 'velixar_update') {
|
|
218
|
+
const memoryId = (args.memory_id || args.id);
|
|
219
|
+
if (!memoryId)
|
|
220
|
+
throw new Error('memory_id or id required');
|
|
221
|
+
const body = { user_id: config.userId };
|
|
222
|
+
if (args.content)
|
|
223
|
+
body.content = args.content;
|
|
224
|
+
if (args.tags)
|
|
225
|
+
body.tags = args.tags;
|
|
226
|
+
const raw = await api.patch(`/memory/${memoryId}`, body);
|
|
227
|
+
validateMutationResponse(raw, `/memory/${memoryId}`);
|
|
228
|
+
return { text: JSON.stringify(wrapResponse({ id: memoryId, action: 'updated' }, config)) };
|
|
229
|
+
}
|
|
230
|
+
if (name === 'velixar_delete') {
|
|
231
|
+
const archive = args.archive;
|
|
232
|
+
const targetIds = args.ids
|
|
233
|
+
? args.ids
|
|
234
|
+
: (args.memory_id || args.id) ? [(args.memory_id || args.id)] : [];
|
|
235
|
+
if (targetIds.length === 0)
|
|
236
|
+
throw new Error('id or ids required');
|
|
237
|
+
if (archive) {
|
|
238
|
+
// Build 1.5: Soft-delete via archive — bulk all-or-nothing (H6.6)
|
|
239
|
+
// Archive = update with archived: true
|
|
240
|
+
const results = [];
|
|
241
|
+
for (const mid of targetIds) {
|
|
242
|
+
try {
|
|
243
|
+
const body = { user_id: config.userId, archived: true };
|
|
244
|
+
await api.patch(`/memory/${mid}`, body);
|
|
245
|
+
results.push({ id: mid, status: 'archived' });
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// H6.6: If any fails, report but continue (best-effort for archive)
|
|
249
|
+
results.push({ id: mid, status: 'error' });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return { text: JSON.stringify(wrapResponse({ results, action: 'archived', count: results.filter(r => r.status === 'archived').length }, config)) };
|
|
253
|
+
}
|
|
254
|
+
// Hard delete
|
|
255
|
+
if (targetIds.length === 1) {
|
|
256
|
+
const raw = await api.delete(`/memory/${targetIds[0]}`);
|
|
257
|
+
validateMutationResponse(raw, `/memory/${targetIds[0]}`);
|
|
258
|
+
return { text: JSON.stringify(wrapResponse({ id: targetIds[0], action: 'deleted' }, config)) };
|
|
259
|
+
}
|
|
260
|
+
// Bulk hard delete
|
|
261
|
+
const results = [];
|
|
262
|
+
for (const mid of targetIds) {
|
|
263
|
+
try {
|
|
264
|
+
await api.delete(`/memory/${mid}`);
|
|
265
|
+
results.push({ id: mid, status: 'deleted' });
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
results.push({ id: mid, status: 'error' });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return { text: JSON.stringify(wrapResponse({ results, action: 'deleted', count: results.filter(r => r.status === 'deleted').length }, config)) };
|
|
272
|
+
}
|
|
273
|
+
throw new Error(`Unknown memory tool: ${name}`);
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/tools/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { ApiClient } from '../api.js';
|
|
3
|
+
import type { ApiConfig } from '../types.js';
|
|
4
|
+
export declare const recallTools: Tool[];
|
|
5
|
+
export declare function handleRecallTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
|
|
6
|
+
text: string;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall.d.ts","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAKzD,eAAO,MAAM,WAAW,EAAE,IAAI,EA0B7B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA8L9C"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// ── Recall Tools ──
|
|
2
|
+
// velixar_context — synthesized workspace brief (flagship)
|
|
3
|
+
// velixar_inspect — deep single-memory inspection
|
|
4
|
+
import { normalizeMemory, wrapResponse } from '../api.js';
|
|
5
|
+
import { justify } from '../justify.js';
|
|
6
|
+
import { validateSearchResponse, validateListResponse, validateOverviewResponse } from '../validate.js';
|
|
7
|
+
import { temporalMerge, mergeMultiQueryResults } from '../temporal_merge.js';
|
|
8
|
+
export const recallTools = [
|
|
9
|
+
{
|
|
10
|
+
name: 'velixar_context',
|
|
11
|
+
description: 'Synthesize the best working brief for the current workspace. Recommended first tool for any new task. ' +
|
|
12
|
+
'Returns summary, relevant facts, open issues, contradiction flags, and pattern hints.',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
topic: { type: 'string', description: 'Optional topic to focus the brief on' },
|
|
17
|
+
compact: { type: 'boolean', description: 'Compact mode (default true) — shorter summary' },
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'velixar_inspect',
|
|
23
|
+
description: 'Deep inspection of a specific memory — raw content, provenance, relations, chain links.',
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: 'object',
|
|
26
|
+
properties: {
|
|
27
|
+
memory_id: { type: 'string', description: 'Memory ID to inspect' },
|
|
28
|
+
},
|
|
29
|
+
required: ['memory_id'],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
export async function handleRecallTool(name, args, api, config) {
|
|
34
|
+
if (name === 'velixar_context') {
|
|
35
|
+
const topic = args.topic || '';
|
|
36
|
+
const compact = args.compact !== false;
|
|
37
|
+
const multiAngle = process.env.VELIXAR_CONTEXT_MULTI_ANGLE === 'true';
|
|
38
|
+
const listParams = new URLSearchParams({ user_id: config.userId, limit: '5' });
|
|
39
|
+
const startMs = Date.now();
|
|
40
|
+
// Build search queries — single or multi-angle based on feature flag
|
|
41
|
+
let searchPromises;
|
|
42
|
+
if (multiAngle && topic) {
|
|
43
|
+
const angles = [topic, `decisions about ${topic}`, `problems or issues with ${topic}`];
|
|
44
|
+
const perAngleLimit = compact ? '3' : '5';
|
|
45
|
+
searchPromises = angles.map(q => {
|
|
46
|
+
const p = new URLSearchParams({ q, user_id: config.userId, limit: perAngleLimit });
|
|
47
|
+
return api.get(`/memory/search?${p}`, true);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else if (multiAngle && !topic) {
|
|
51
|
+
const angles = ['important recent context', 'open decisions', 'unresolved issues'];
|
|
52
|
+
searchPromises = angles.map(q => {
|
|
53
|
+
const p = new URLSearchParams({ q, user_id: config.userId, limit: compact ? '3' : '5' });
|
|
54
|
+
return api.get(`/memory/search?${p}`, true);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const searchQ = topic || 'important recent context';
|
|
59
|
+
const params = new URLSearchParams({ q: searchQ, user_id: config.userId, limit: compact ? '5' : '10' });
|
|
60
|
+
searchPromises = [api.get(`/memory/search?${params}`, true)];
|
|
61
|
+
}
|
|
62
|
+
const [searchResults, listRes, overviewRes, contradictionsRes] = await Promise.allSettled([
|
|
63
|
+
Promise.allSettled(searchPromises),
|
|
64
|
+
api.get(`/memory/list?${listParams}`, true),
|
|
65
|
+
api.get('/exocortex/overview', true),
|
|
66
|
+
api.get('/exocortex/contradictions?status=open', true),
|
|
67
|
+
]);
|
|
68
|
+
// Merge search results — multi-angle dedup or single pass
|
|
69
|
+
let relevantFacts = [];
|
|
70
|
+
const searchAnglesUsed = searchPromises.length;
|
|
71
|
+
if (searchResults.status === 'fulfilled') {
|
|
72
|
+
const subResults = searchResults.value;
|
|
73
|
+
if (multiAngle && subResults.length > 1) {
|
|
74
|
+
// Multi-angle: merge + dedup via temporal_merge
|
|
75
|
+
const perQuery = subResults.map((r, i) => {
|
|
76
|
+
if (r.status !== 'fulfilled')
|
|
77
|
+
return { query: `angle-${i}`, memories: [] };
|
|
78
|
+
try {
|
|
79
|
+
const validated = validateSearchResponse(r.value, '/memory/search');
|
|
80
|
+
return {
|
|
81
|
+
query: `angle-${i}`,
|
|
82
|
+
memories: validated.memories.map(m => { const mem = normalizeMemory(m); mem.workspace_id = config.workspaceId; return mem; }),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return { query: `angle-${i}`, memories: [] };
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
const { merged } = mergeMultiQueryResults(perQuery, 'weighted', compact ? 8 : 15);
|
|
90
|
+
const temporal = temporalMerge(merged);
|
|
91
|
+
relevantFacts = temporal.current;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Single angle
|
|
95
|
+
const r = subResults[0];
|
|
96
|
+
if (r && r.status === 'fulfilled') {
|
|
97
|
+
try {
|
|
98
|
+
const validated = validateSearchResponse(r.value, '/memory/search');
|
|
99
|
+
relevantFacts = validated.memories.map(m => { const mem = normalizeMemory(m); mem.workspace_id = config.workspaceId; return mem; });
|
|
100
|
+
}
|
|
101
|
+
catch { /* empty */ }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Sort: semantic first, then by relevance
|
|
106
|
+
relevantFacts.sort((a, b) => {
|
|
107
|
+
if (a.memory_type === 'semantic' && b.memory_type !== 'semantic')
|
|
108
|
+
return -1;
|
|
109
|
+
if (a.memory_type !== 'semantic' && b.memory_type === 'semantic')
|
|
110
|
+
return 1;
|
|
111
|
+
return (b.relevance ?? 0) - (a.relevance ?? 0);
|
|
112
|
+
});
|
|
113
|
+
const list = listRes.status === 'fulfilled' ? validateListResponse(listRes.value, '/memory/list') : null;
|
|
114
|
+
const overview = overviewRes.status === 'fulfilled' ? validateOverviewResponse(overviewRes.value, '/exocortex/overview') : null;
|
|
115
|
+
const contradictionsRaw = contradictionsRes.status === 'fulfilled'
|
|
116
|
+
? ((contradictionsRes.value && typeof contradictionsRes.value === 'object') ? contradictionsRes.value : {})
|
|
117
|
+
: null;
|
|
118
|
+
// Recent activity from list
|
|
119
|
+
const recentItems = (list?.memories || []).map(m => {
|
|
120
|
+
const mem = normalizeMemory(m);
|
|
121
|
+
mem.workspace_id = config.workspaceId;
|
|
122
|
+
return mem;
|
|
123
|
+
});
|
|
124
|
+
// Contradiction flags
|
|
125
|
+
const rawCArr = contradictionsRaw ? (Array.isArray(contradictionsRaw.contradictions) ? contradictionsRaw.contradictions : []) : [];
|
|
126
|
+
const openContradictions = rawCArr.map((c) => ({
|
|
127
|
+
id: c.id,
|
|
128
|
+
statement_a: c.statement_a || c.memory_a_content,
|
|
129
|
+
statement_b: c.statement_b || c.memory_b_content,
|
|
130
|
+
severity: c.severity || 'medium',
|
|
131
|
+
}));
|
|
132
|
+
// Build brief
|
|
133
|
+
const brief = {
|
|
134
|
+
summary: overview
|
|
135
|
+
? `Workspace has ${overview.total_memories || 0} memories, ${overview.cortex_nodes || 0} entities, ${overview.temporal_chains || 0} chains. Mode: ${overview.system_mode || 'unknown'}.`
|
|
136
|
+
: `${relevantFacts.length} relevant facts found${topic ? ` for "${topic}"` : ''}.`,
|
|
137
|
+
relevant_facts: relevantFacts,
|
|
138
|
+
recent_activity: compact ? recentItems.slice(0, 3) : recentItems,
|
|
139
|
+
open_issues: openContradictions,
|
|
140
|
+
contradiction_count: openContradictions.length,
|
|
141
|
+
pattern_hints: [],
|
|
142
|
+
// Phase 4: Multi-angle search metadata
|
|
143
|
+
...(multiAngle ? { search_angles_used: searchAnglesUsed } : {}),
|
|
144
|
+
section_freshness: {
|
|
145
|
+
relevant_facts: { source: multiAngle ? 'multi_angle_search' : 'search', fetched_at: new Date().toISOString() },
|
|
146
|
+
recent_activity: { source: 'list', fetched_at: new Date().toISOString() },
|
|
147
|
+
overview: overviewRes.status === 'fulfilled' ? { source: 'overview', fetched_at: new Date().toISOString() } : { source: 'overview', status: 'unavailable' },
|
|
148
|
+
contradictions: contradictionsRes.status === 'fulfilled' ? { source: 'contradictions', fetched_at: new Date().toISOString() } : { source: 'contradictions', status: 'unavailable' },
|
|
149
|
+
},
|
|
150
|
+
justification: justify(overview
|
|
151
|
+
? `Workspace context synthesis from ${overview.total_memories || 0} memories`
|
|
152
|
+
: `Context synthesis from ${relevantFacts.length} relevant facts`, 'synthesized_summary', relevantFacts, config.workspaceId, { contradictionCount: openContradictions.length }),
|
|
153
|
+
};
|
|
154
|
+
const partial = [searchResults, listRes, overviewRes, contradictionsRes].some(r => r.status === 'rejected');
|
|
155
|
+
const contextMs = Date.now() - startMs;
|
|
156
|
+
return {
|
|
157
|
+
text: JSON.stringify(wrapResponse(brief, config, {
|
|
158
|
+
data_absent: relevantFacts.length === 0 && recentItems.length === 0,
|
|
159
|
+
partial_context: partial,
|
|
160
|
+
contradictions_present: openContradictions.length > 0,
|
|
161
|
+
request_ms: contextMs,
|
|
162
|
+
})),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
if (name === 'velixar_inspect') {
|
|
166
|
+
const id = args.memory_id;
|
|
167
|
+
const raw = await api.get(`/memory/${id}`, true);
|
|
168
|
+
if (!raw || typeof raw !== 'object')
|
|
169
|
+
throw new Error(`Memory ${id} not found`);
|
|
170
|
+
const result = raw;
|
|
171
|
+
if (result.error)
|
|
172
|
+
throw new Error(String(result.error));
|
|
173
|
+
if (!result.memory || typeof result.memory !== 'object')
|
|
174
|
+
throw new Error(`Memory ${id} not found`);
|
|
175
|
+
const rawMem = result.memory;
|
|
176
|
+
const mem = normalizeMemory({
|
|
177
|
+
id: String(rawMem.id || ''),
|
|
178
|
+
content: String(rawMem.content || ''),
|
|
179
|
+
score: typeof rawMem.score === 'number' ? rawMem.score : undefined,
|
|
180
|
+
tier: typeof rawMem.tier === 'number' ? rawMem.tier : undefined,
|
|
181
|
+
type: typeof rawMem.type === 'string' ? rawMem.type : null,
|
|
182
|
+
tags: Array.isArray(rawMem.tags) ? rawMem.tags.filter((t) => typeof t === 'string') : [],
|
|
183
|
+
salience: typeof rawMem.salience === 'number' ? rawMem.salience : undefined,
|
|
184
|
+
created_at: typeof rawMem.created_at === 'string' ? rawMem.created_at : undefined,
|
|
185
|
+
updated_at: typeof rawMem.updated_at === 'string' ? rawMem.updated_at : undefined,
|
|
186
|
+
previous_memory_id: typeof rawMem.previous_memory_id === 'string' ? rawMem.previous_memory_id : null,
|
|
187
|
+
});
|
|
188
|
+
mem.workspace_id = config.workspaceId;
|
|
189
|
+
// H17: Validate provenance — check derived_from IDs exist
|
|
190
|
+
let provenanceStatus;
|
|
191
|
+
if (mem.provenance.derived_from?.length) {
|
|
192
|
+
const checks = await Promise.allSettled(mem.provenance.derived_from.map(refId => api.get(`/memory/${refId}`, true)));
|
|
193
|
+
provenanceStatus = mem.provenance.derived_from.map((refId, i) => {
|
|
194
|
+
if (checks[i].status !== 'fulfilled')
|
|
195
|
+
return { id: refId, status: 'deleted' };
|
|
196
|
+
const val = checks[i].status === 'fulfilled' ? checks[i].value : null;
|
|
197
|
+
const hasMemory = val && typeof val === 'object' && 'memory' in val && val.memory;
|
|
198
|
+
return { id: refId, status: hasMemory ? 'exists' : 'deleted' };
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
const justification = justify(`Inspection of memory ${id}`, 'retrieved_fact', [mem], config.workspaceId);
|
|
202
|
+
return { text: JSON.stringify(wrapResponse({ memory: mem, justification, ...(provenanceStatus ? { provenance_validation: provenanceStatus } : {}) }, config)) };
|
|
203
|
+
}
|
|
204
|
+
throw new Error(`Unknown recall tool: ${name}`);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/tools/recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { ApiClient } from '../api.js';
|
|
3
|
+
import type { ApiConfig } from '../types.js';
|
|
4
|
+
export declare const retrievalTools: Tool[];
|
|
5
|
+
export declare function handleRetrievalTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
|
|
6
|
+
text: string;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=retrieval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retrieval.d.ts","sourceRoot":"","sources":["../../src/tools/retrieval.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAKzD,eAAO,MAAM,cAAc,EAAE,IAAI,EAmDhC,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA6S9C"}
|