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.
Files changed (104) hide show
  1. package/README.md +120 -64
  2. package/dist/api.d.ts +64 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +405 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/errors.d.ts +19 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +52 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/justify.d.ts +9 -0
  11. package/dist/justify.d.ts.map +1 -0
  12. package/dist/justify.js +114 -0
  13. package/dist/justify.js.map +1 -0
  14. package/dist/prompts.d.ts +88 -0
  15. package/dist/prompts.d.ts.map +1 -0
  16. package/dist/prompts.js +693 -0
  17. package/dist/prompts.js.map +1 -0
  18. package/dist/resources.d.ts +25 -0
  19. package/dist/resources.d.ts.map +1 -0
  20. package/dist/resources.js +278 -0
  21. package/dist/resources.js.map +1 -0
  22. package/dist/server.d.ts +3 -0
  23. package/dist/server.d.ts.map +1 -0
  24. package/dist/server.js +392 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/simulation/personas.d.ts +41 -0
  27. package/dist/simulation/personas.d.ts.map +1 -0
  28. package/dist/simulation/personas.js +173 -0
  29. package/dist/simulation/personas.js.map +1 -0
  30. package/dist/simulation/report.d.ts +28 -0
  31. package/dist/simulation/report.d.ts.map +1 -0
  32. package/dist/simulation/report.js +105 -0
  33. package/dist/simulation/report.js.map +1 -0
  34. package/dist/simulation/runner.d.ts +63 -0
  35. package/dist/simulation/runner.d.ts.map +1 -0
  36. package/dist/simulation/runner.js +167 -0
  37. package/dist/simulation/runner.js.map +1 -0
  38. package/dist/temporal_merge.d.ts +70 -0
  39. package/dist/temporal_merge.d.ts.map +1 -0
  40. package/dist/temporal_merge.js +258 -0
  41. package/dist/temporal_merge.js.map +1 -0
  42. package/dist/tools/clairvoyance.d.ts +9 -0
  43. package/dist/tools/clairvoyance.d.ts.map +1 -0
  44. package/dist/tools/clairvoyance.js +321 -0
  45. package/dist/tools/clairvoyance.js.map +1 -0
  46. package/dist/tools/cognitive.d.ts +10 -0
  47. package/dist/tools/cognitive.d.ts.map +1 -0
  48. package/dist/tools/cognitive.js +462 -0
  49. package/dist/tools/cognitive.js.map +1 -0
  50. package/dist/tools/construction.d.ts +9 -0
  51. package/dist/tools/construction.d.ts.map +1 -0
  52. package/dist/tools/construction.js +350 -0
  53. package/dist/tools/construction.js.map +1 -0
  54. package/dist/tools/graph.d.ts +14 -0
  55. package/dist/tools/graph.d.ts.map +1 -0
  56. package/dist/tools/graph.js +263 -0
  57. package/dist/tools/graph.js.map +1 -0
  58. package/dist/tools/graph_sanitizer.d.ts +24 -0
  59. package/dist/tools/graph_sanitizer.d.ts.map +1 -0
  60. package/dist/tools/graph_sanitizer.js +79 -0
  61. package/dist/tools/graph_sanitizer.js.map +1 -0
  62. package/dist/tools/lifecycle.d.ts +9 -0
  63. package/dist/tools/lifecycle.d.ts.map +1 -0
  64. package/dist/tools/lifecycle.js +1091 -0
  65. package/dist/tools/lifecycle.js.map +1 -0
  66. package/dist/tools/livedata.d.ts +9 -0
  67. package/dist/tools/livedata.d.ts.map +1 -0
  68. package/dist/tools/livedata.js +222 -0
  69. package/dist/tools/livedata.js.map +1 -0
  70. package/dist/tools/memory.d.ts +10 -0
  71. package/dist/tools/memory.d.ts.map +1 -0
  72. package/dist/tools/memory.js +275 -0
  73. package/dist/tools/memory.js.map +1 -0
  74. package/dist/tools/recall.d.ts +9 -0
  75. package/dist/tools/recall.d.ts.map +1 -0
  76. package/dist/tools/recall.js +206 -0
  77. package/dist/tools/recall.js.map +1 -0
  78. package/dist/tools/retrieval.d.ts +9 -0
  79. package/dist/tools/retrieval.d.ts.map +1 -0
  80. package/dist/tools/retrieval.js +338 -0
  81. package/dist/tools/retrieval.js.map +1 -0
  82. package/dist/tools/system.d.ts +12 -0
  83. package/dist/tools/system.d.ts.map +1 -0
  84. package/dist/tools/system.js +228 -0
  85. package/dist/tools/system.js.map +1 -0
  86. package/dist/types.d.ts +234 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +5 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/validate.d.ts +79 -0
  91. package/dist/validate.d.ts.map +1 -0
  92. package/dist/validate.js +174 -0
  93. package/dist/validate.js.map +1 -0
  94. package/dist/validate_retrieval.d.ts +33 -0
  95. package/dist/validate_retrieval.d.ts.map +1 -0
  96. package/dist/validate_retrieval.js +97 -0
  97. package/dist/validate_retrieval.js.map +1 -0
  98. package/package.json +22 -6
  99. package/server.json +2 -2
  100. package/.github/workflows/ci.yml +0 -18
  101. package/.mcpregistry_github_token +0 -1
  102. package/.mcpregistry_registry_token +0 -1
  103. package/src/index.js +0 -262
  104. 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"}