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 @@
1
+ {"version":3,"file":"cognitive.d.ts","sourceRoot":"","sources":["../../src/tools/cognitive.ts"],"names":[],"mappings":"AAGA,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;AASzD,wBAAgB,wBAAwB,IAAI,IAAI,CAAqC;AAErF,eAAO,MAAM,cAAc,EAAE,IAAI,EAiEhC,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,CAyd9C"}
@@ -0,0 +1,462 @@
1
+ // ── Cognitive Tools ──
2
+ // velixar_identity, velixar_contradictions, velixar_timeline, velixar_patterns
3
+ import { normalizeMemory, wrapResponse } from '../api.js';
4
+ import { justify } from '../justify.js';
5
+ import { validateIdentityResponse, validateSearchResponse } from '../validate.js';
6
+ // H10/H11: Track identity freshness
7
+ let _lastIdentityUpdate = 0;
8
+ let _toolCallsSinceIdentityUpdate = 0;
9
+ const IDENTITY_STALE_CALLS = 20; // suggest refresh after this many tool calls
10
+ export function trackToolCallForIdentity() { _toolCallsSinceIdentityUpdate++; }
11
+ export const cognitiveTools = [
12
+ {
13
+ name: 'velixar_identity',
14
+ description: 'User profile — preferences, expertise, communication style, recurring goals, stable constraints. ' +
15
+ 'Supports get (default), store, update, delete, list, and history actions. Workspace-scoped.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ action: { type: 'string', enum: ['get', 'store', 'update', 'delete', 'list', 'history'], description: 'Action (default: get)' },
20
+ field: { type: 'string', description: 'Identity field to store/update/delete/history (e.g. "expertise", "communication_style")' },
21
+ value: { description: 'Value to store/update (string or array of strings)' },
22
+ },
23
+ },
24
+ },
25
+ {
26
+ name: 'velixar_contradictions',
27
+ description: 'Surface conflicting beliefs, preferences, or facts. Supports resolve action to mark contradictions as resolved. ' +
28
+ 'Returns pairs of contradicting statements with severity and linked memory IDs.',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ status: { type: 'string', enum: ['open', 'resolved', 'all'], description: 'Filter by status (default: open)' },
33
+ topic: { type: 'string', description: 'Filter contradictions by topic (semantic relevance)' },
34
+ severity_min: { type: 'number', description: 'Minimum severity threshold (0-1)' },
35
+ action: { type: 'string', enum: ['list', 'resolve'], description: 'Action (default: list)' },
36
+ contradiction_id: { type: 'string', description: 'Contradiction ID to resolve (required for resolve action)' },
37
+ resolution: { type: 'string', description: 'Resolution note (required for resolve action)' },
38
+ },
39
+ },
40
+ },
41
+ {
42
+ name: 'velixar_timeline',
43
+ description: 'Show how a topic, entity, or belief evolved over time. ' +
44
+ 'Supports date range filtering and summary mode for long histories.',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ topic: { type: 'string', description: 'Topic or entity to trace' },
49
+ memory_id: { type: 'string', description: 'Starting memory ID (alternative to topic)' },
50
+ limit: { type: 'number', description: 'Max entries (default 10)' },
51
+ before: { type: 'string', description: 'ISO timestamp — only return entries before this time' },
52
+ after: { type: 'string', description: 'ISO timestamp — only return entries after this time' },
53
+ },
54
+ },
55
+ },
56
+ {
57
+ name: 'velixar_patterns',
58
+ description: 'Surface recurring problem/solution motifs from memory. ' +
59
+ 'Omit topic to return all detected patterns. Supports dismiss action.',
60
+ inputSchema: {
61
+ type: 'object',
62
+ properties: {
63
+ topic: { type: 'string', description: 'Topic to find patterns for (optional — omit for all patterns)' },
64
+ limit: { type: 'number', description: 'Max results (default 5)' },
65
+ min_confidence: { type: 'number', description: 'Minimum confidence threshold (0-1)' },
66
+ evidence: { type: 'boolean', description: 'Include supporting memory IDs (default false)' },
67
+ action: { type: 'string', enum: ['list', 'dismiss'], description: 'Action (default: list)' },
68
+ pattern_id: { type: 'string', description: 'Pattern ID to dismiss (required for dismiss action)' },
69
+ },
70
+ },
71
+ },
72
+ ];
73
+ export async function handleCognitiveTool(name, args, api, config) {
74
+ if (name === 'velixar_identity') {
75
+ const action = args.action || 'get';
76
+ // Build 4.1: delete — remove an identity field
77
+ if (action === 'delete') {
78
+ const field = args.field;
79
+ if (!field)
80
+ throw new Error('field required for delete');
81
+ // Search for identity memories with this field tag, then delete them
82
+ const params = new URLSearchParams({ q: `[identity:${field}]`, user_id: config.userId, limit: '10' });
83
+ const raw = await api.get(`/memory/search?${params}`, true);
84
+ const validated = validateSearchResponse(raw, '/memory/search');
85
+ const toDelete = validated.memories.filter(m => m.tags?.includes(`identity:${field}`));
86
+ for (const m of toDelete) {
87
+ await api.delete(`/memory/${m.id}`).catch(() => { });
88
+ }
89
+ return {
90
+ text: JSON.stringify(wrapResponse({ action: 'delete', field, deleted_count: toDelete.length, message: `Identity field "${field}" deleted (${toDelete.length} memories removed)` }, config)),
91
+ };
92
+ }
93
+ // Build 4.1: list — return all stored identity field names
94
+ if (action === 'list') {
95
+ const params = new URLSearchParams({ q: '[identity:', user_id: config.userId, limit: '50' });
96
+ const raw = await api.get(`/memory/search?${params}`, true);
97
+ const validated = validateSearchResponse(raw, '/memory/search');
98
+ const fields = new Set();
99
+ for (const m of validated.memories) {
100
+ for (const tag of (m.tags || [])) {
101
+ if (tag.startsWith('identity:'))
102
+ fields.add(tag.slice(9));
103
+ }
104
+ }
105
+ return {
106
+ text: JSON.stringify(wrapResponse({ action: 'list', fields: [...fields], count: fields.size }, config, { data_absent: fields.size === 0 })),
107
+ };
108
+ }
109
+ // Build 4.1: history — return evolution of a specific field over time
110
+ if (action === 'history') {
111
+ const field = args.field;
112
+ if (!field)
113
+ throw new Error('field required for history');
114
+ const params = new URLSearchParams({ q: `[identity:${field}]`, user_id: config.userId, limit: '20' });
115
+ const raw = await api.get(`/memory/search?${params}`, true);
116
+ const validated = validateSearchResponse(raw, '/memory/search');
117
+ const history = validated.memories
118
+ .filter(m => m.tags?.includes(`identity:${field}`))
119
+ .map(m => ({
120
+ id: m.id,
121
+ value: m.content.replace(`[identity:${field}] `, ''),
122
+ timestamp: m.created_at || '',
123
+ }))
124
+ .sort((a, b) => a.timestamp.localeCompare(b.timestamp));
125
+ return {
126
+ text: JSON.stringify(wrapResponse({ action: 'history', field, entries: history, count: history.length }, config, { data_absent: history.length === 0 })),
127
+ };
128
+ }
129
+ // Store or update: persist identity facet as a tagged memory
130
+ if (action === 'store' || action === 'update') {
131
+ const field = args.field;
132
+ const value = args.value;
133
+ if (!field || value === undefined)
134
+ throw new Error('field and value required for store/update');
135
+ // Store as semantic memory tagged with identity field
136
+ const content = `[identity:${field}] ${typeof value === 'string' ? value : JSON.stringify(value)}`;
137
+ await api.post('/memory', {
138
+ content,
139
+ user_id: config.userId,
140
+ tier: 0, // pinned — identity is durable
141
+ tags: ['identity', `identity:${field}`],
142
+ author: { type: 'user' },
143
+ });
144
+ // H10: Track identity update
145
+ _lastIdentityUpdate = Date.now();
146
+ _toolCallsSinceIdentityUpdate = 0;
147
+ return {
148
+ text: JSON.stringify(wrapResponse({ action, field, value, message: `Identity field "${field}" ${action}d` }, config)),
149
+ };
150
+ }
151
+ // Get: fetch synthesized identity profile
152
+ const raw = await api.get('/memory/identity', true);
153
+ const result = validateIdentityResponse(raw, '/memory/identity');
154
+ const identity = result.identity || {};
155
+ const profile = {
156
+ preferences: identity.preferences || {},
157
+ expertise: identity.expertise || [],
158
+ communication_style: identity.communication_style,
159
+ recurring_goals: identity.recurring_goals || [],
160
+ stable_constraints: identity.stable_constraints || [],
161
+ shifts: (result.shifts || []).map(s => ({
162
+ field: s.field,
163
+ from: s.from,
164
+ to: s.to,
165
+ timestamp: s.timestamp,
166
+ })),
167
+ contradictions: (result.contradictions || []).map(c => ({
168
+ existing: c.existing,
169
+ new: c.new,
170
+ severity: c.severity,
171
+ })),
172
+ snapshot_count: result.snapshot_count || 0,
173
+ workspace_scope: 'workspace_local',
174
+ // H10: Identity staleness detection
175
+ stale_identity: _lastIdentityUpdate > 0 && _toolCallsSinceIdentityUpdate > IDENTITY_STALE_CALLS,
176
+ // H11: Refresh hint
177
+ ...(_toolCallsSinceIdentityUpdate > IDENTITY_STALE_CALLS
178
+ ? { refresh_hint: 'Identity has not been updated recently. Consider storing new preferences or expertise if they have changed.' }
179
+ : {}),
180
+ justification: justify('User identity profile synthesized from stored preferences and behavioral patterns', Object.keys(identity).length > 0 ? 'synthesized_summary' : 'hypothesis', [], config.workspaceId, { contradictionCount: (result.contradictions || []).length }),
181
+ };
182
+ return {
183
+ text: JSON.stringify(wrapResponse(profile, config, {
184
+ data_absent: Object.keys(identity).length === 0,
185
+ })),
186
+ };
187
+ }
188
+ if (name === 'velixar_contradictions') {
189
+ const action = args.action || 'list';
190
+ // Build 4.2: resolve action
191
+ if (action === 'resolve') {
192
+ const contradictionId = args.contradiction_id;
193
+ const resolution = args.resolution;
194
+ if (!contradictionId || !resolution)
195
+ throw new Error('contradiction_id and resolution required for resolve action');
196
+ try {
197
+ await api.post(`/exocortex/contradictions/${contradictionId}`, {
198
+ resolution,
199
+ status: 'resolved',
200
+ });
201
+ return {
202
+ text: JSON.stringify(wrapResponse({ action: 'resolve', contradiction_id: contradictionId, resolution, message: 'Contradiction resolved' }, config)),
203
+ };
204
+ }
205
+ catch {
206
+ // Fallback: store resolution as a memory linking the contradiction
207
+ await api.post('/memory', {
208
+ content: `[contradiction-resolved:${contradictionId}] ${resolution}`,
209
+ user_id: config.userId,
210
+ tags: ['contradiction-resolution', `contradiction:${contradictionId}`],
211
+ author: { type: 'user' },
212
+ });
213
+ return {
214
+ text: JSON.stringify(wrapResponse({ action: 'resolve', contradiction_id: contradictionId, resolution, message: 'Resolution stored as memory (backend resolve endpoint unavailable)', _fallback: true }, config)),
215
+ };
216
+ }
217
+ }
218
+ const status = args.status || 'open';
219
+ const raw = await api.get(`/exocortex/contradictions?status=${status}`, true);
220
+ const rObj = (raw && typeof raw === 'object') ? raw : {};
221
+ const rawContradictions = Array.isArray(rObj.contradictions) ? rObj.contradictions : [];
222
+ // Temporal supersession threshold: if two conflicting memories are >7 days apart,
223
+ // classify as "superseded" (temporal update) rather than "contradiction"
224
+ const SUPERSESSION_DAYS = 7;
225
+ const items = rawContradictions.map((c) => {
226
+ const detectedA = String(c.memory_a_created_at || c.created_at_a || '');
227
+ const detectedB = String(c.memory_b_created_at || c.created_at_b || '');
228
+ let classification = 'contradiction';
229
+ if (detectedA && detectedB) {
230
+ const timeA = new Date(detectedA).getTime();
231
+ const timeB = new Date(detectedB).getTime();
232
+ if (!isNaN(timeA) && !isNaN(timeB)) {
233
+ const daysDiff = Math.abs(timeB - timeA) / (1000 * 60 * 60 * 24);
234
+ if (daysDiff > SUPERSESSION_DAYS)
235
+ classification = 'superseded';
236
+ }
237
+ }
238
+ return {
239
+ id: String(c.id || ''),
240
+ statement_a: String(c.statement_a || c.memory_a_content || ''),
241
+ statement_b: String(c.statement_b || c.memory_b_content || ''),
242
+ memory_id_a: String(c.memory_a_id || ''),
243
+ memory_id_b: String(c.memory_b_id || ''),
244
+ severity: String(c.severity || 'medium'),
245
+ confidence: typeof c.confidence === 'number' ? c.confidence : 0.5,
246
+ explanation: String(c.explanation || c.description || ''),
247
+ workspace_id: config.workspaceId,
248
+ detected_at: String(c.detected_at || c.created_at || ''),
249
+ classification,
250
+ };
251
+ });
252
+ const activeContradictions = items.filter(i => i.classification === 'contradiction');
253
+ const superseded = items.filter(i => i.classification === 'superseded');
254
+ // Phase 0 filters: topic and severity
255
+ let filtered = activeContradictions;
256
+ if (args.topic) {
257
+ const topicLower = args.topic.toLowerCase();
258
+ filtered = filtered.filter(i => i.statement_a.toLowerCase().includes(topicLower) ||
259
+ i.statement_b.toLowerCase().includes(topicLower) ||
260
+ i.explanation.toLowerCase().includes(topicLower));
261
+ }
262
+ if (args.severity_min !== undefined) {
263
+ const severityMap = { low: 0.25, medium: 0.5, high: 0.75, critical: 1.0 };
264
+ const minSev = args.severity_min;
265
+ filtered = filtered.filter(i => (severityMap[i.severity] ?? i.confidence) >= minSev);
266
+ }
267
+ return {
268
+ text: JSON.stringify(wrapResponse({
269
+ conflict_summary: `${filtered.length} active contradiction${filtered.length !== 1 ? 's' : ''}, ${superseded.length} superseded (temporal updates)`,
270
+ evidence: filtered,
271
+ superseded,
272
+ likely_interpretation: filtered.length > 0
273
+ ? `${filtered.filter(i => i.severity === 'high').length} high-severity conflicts require attention`
274
+ : 'No active contradictions — beliefs are consistent',
275
+ next_step: filtered.length > 0
276
+ ? 'Use velixar_inspect on linked memory IDs to understand each side, then velixar_timeline to trace belief evolution'
277
+ : null,
278
+ count: filtered.length,
279
+ superseded_count: superseded.length,
280
+ justification: justify(`${filtered.length} contradiction${filtered.length !== 1 ? 's' : ''} detected, ${superseded.length} classified as temporal supersession`, filtered.length > 0 ? 'retrieved_fact' : 'synthesized_summary', [], config.workspaceId, { contradictionCount: filtered.length }),
281
+ }, config, { data_absent: items.length === 0, contradictions_present: filtered.length > 0 })),
282
+ };
283
+ }
284
+ if (name === 'velixar_timeline') {
285
+ const topic = args.topic;
286
+ const memoryId = args.memory_id;
287
+ const limit = Math.min(args.limit || 10, 50);
288
+ if (!topic && !memoryId)
289
+ throw new Error('Either topic or memory_id required');
290
+ // Use search to find temporally-related memories, sorted by time
291
+ if (topic) {
292
+ // H14: Synonym expansion — query graph for entity aliases to broaden search
293
+ let expandedTerms = [topic];
294
+ try {
295
+ const graphResult = await api.post('/graph/traverse', { entity: topic, max_hops: 1 });
296
+ const gObj = (graphResult && typeof graphResult === 'object') ? graphResult : {};
297
+ const gNodes = Array.isArray(gObj.nodes) ? gObj.nodes : [];
298
+ if (gNodes.length) {
299
+ const aliases = gNodes
300
+ .filter((n) => String(n.relationship || '').match(/alias|also_known_as|synonym/i))
301
+ .map((n) => String(n.label || ''))
302
+ .filter(Boolean);
303
+ if (aliases.length)
304
+ expandedTerms.push(...aliases.slice(0, 3));
305
+ }
306
+ }
307
+ catch { /* graph unavailable — proceed with original term */ }
308
+ // H13: Search with expanded terms for better recall
309
+ const searchQuery = expandedTerms.join(' OR ');
310
+ const params = new URLSearchParams({ q: searchQuery, user_id: config.userId, limit: String(limit) });
311
+ const raw = await api.get(`/memory/search?${params}`, true);
312
+ // H13: Also fetch graph relationships for the entity
313
+ let relatedEntities = [];
314
+ try {
315
+ const graphResult = await api.post('/graph/traverse', { entity: topic, max_hops: 1 });
316
+ const gObj = (graphResult && typeof graphResult === 'object') ? graphResult : {};
317
+ const gEdges = Array.isArray(gObj.edges) ? gObj.edges : [];
318
+ relatedEntities = gEdges.map((e) => ({
319
+ label: String(e.target || ''),
320
+ relationship: String(e.relationship || 'related'),
321
+ })).slice(0, 10);
322
+ }
323
+ catch { /* graph unavailable */ }
324
+ const result = validateSearchResponse(raw, '/memory/search');
325
+ const entries = result.memories
326
+ .map(m => {
327
+ const mem = normalizeMemory(m);
328
+ mem.workspace_id = config.workspaceId;
329
+ return {
330
+ id: mem.id,
331
+ content: mem.content,
332
+ summary: mem.content.slice(0, 120),
333
+ timestamp: mem.provenance.created_at,
334
+ memory_type: mem.memory_type,
335
+ chain_position: 0,
336
+ tags: mem.tags,
337
+ previous_memory_id: m.previous_memory_id || null,
338
+ };
339
+ })
340
+ // Prefer episodic memories (event-specific), then sort by time
341
+ .sort((a, b) => {
342
+ if (a.memory_type === 'episodic' && b.memory_type !== 'episodic')
343
+ return -1;
344
+ if (a.memory_type !== 'episodic' && b.memory_type === 'episodic')
345
+ return 1;
346
+ return a.timestamp.localeCompare(b.timestamp);
347
+ });
348
+ // Timeline output form per strategy memo
349
+ const changePoints = entries.filter((e, i) => i > 0 && e.tags.some(t => entries[i - 1].tags.indexOf(t) === -1));
350
+ return {
351
+ text: JSON.stringify(wrapResponse({
352
+ phases: entries,
353
+ key_change_points: changePoints.map(e => ({ id: e.id, summary: e.summary, timestamp: e.timestamp })),
354
+ current_state: entries.length > 0 ? entries[entries.length - 1].summary : null,
355
+ uncertainty: entries.length < 3 ? 'Limited data — timeline may be incomplete' : null,
356
+ count: entries.length,
357
+ // H13: Related entities from knowledge graph
358
+ ...(relatedEntities.length ? { related_entities: relatedEntities } : {}),
359
+ // H14: Search terms used (including synonyms)
360
+ ...(expandedTerms.length > 1 ? { search_expanded: expandedTerms } : {}),
361
+ }, config, { data_absent: entries.length === 0 })),
362
+ };
363
+ }
364
+ // Start from a specific memory and follow chain links
365
+ const memResult = await api.get(`/memory/${memoryId}`, true);
366
+ if (!memResult || typeof memResult !== 'object' || !memResult.memory)
367
+ throw new Error(`Memory ${memoryId} not found`);
368
+ const rawMem = memResult.memory;
369
+ const normalized = normalizeMemory({
370
+ id: String(rawMem.id || ''),
371
+ content: String(rawMem.content || ''),
372
+ score: typeof rawMem.score === 'number' ? rawMem.score : undefined,
373
+ tier: typeof rawMem.tier === 'number' ? rawMem.tier : undefined,
374
+ type: typeof rawMem.type === 'string' ? rawMem.type : null,
375
+ tags: Array.isArray(rawMem.tags) ? rawMem.tags.filter((t) => typeof t === 'string') : [],
376
+ salience: typeof rawMem.salience === 'number' ? rawMem.salience : undefined,
377
+ created_at: typeof rawMem.created_at === 'string' ? rawMem.created_at : undefined,
378
+ updated_at: typeof rawMem.updated_at === 'string' ? rawMem.updated_at : undefined,
379
+ previous_memory_id: typeof rawMem.previous_memory_id === 'string' ? rawMem.previous_memory_id : null,
380
+ });
381
+ normalized.workspace_id = config.workspaceId;
382
+ return {
383
+ text: JSON.stringify(wrapResponse({
384
+ entries: [{
385
+ id: normalized.id,
386
+ content: normalized.content,
387
+ summary: normalized.content.slice(0, 120),
388
+ timestamp: normalized.provenance.created_at,
389
+ memory_type: normalized.memory_type,
390
+ chain_position: 0,
391
+ tags: normalized.tags,
392
+ }],
393
+ count: 1,
394
+ }, config)),
395
+ };
396
+ }
397
+ if (name === 'velixar_patterns') {
398
+ const action = args.action || 'list';
399
+ // Build 4.3: dismiss action
400
+ if (action === 'dismiss') {
401
+ const patternId = args.pattern_id;
402
+ if (!patternId)
403
+ throw new Error('pattern_id required for dismiss action');
404
+ try {
405
+ await api.post('/patterns/dismiss', { pattern_id: patternId });
406
+ }
407
+ catch {
408
+ // Fallback: store dismissal as memory
409
+ await api.post('/memory', {
410
+ content: `[pattern-dismissed:${patternId}]`,
411
+ user_id: config.userId,
412
+ tags: ['pattern-dismissed', `pattern:${patternId}`],
413
+ author: { type: 'user' },
414
+ });
415
+ }
416
+ return {
417
+ text: JSON.stringify(wrapResponse({ action: 'dismiss', pattern_id: patternId, message: 'Pattern dismissed' }, config)),
418
+ };
419
+ }
420
+ const includeEvidence = args.evidence === true;
421
+ const params = new URLSearchParams({ q: args.topic });
422
+ if (args.limit)
423
+ params.set('limit', String(args.limit));
424
+ const raw = await api.get(`/patterns/suggest?${params}`, true);
425
+ const rObj = (raw && typeof raw === 'object') ? raw : {};
426
+ const rawPatterns = Array.isArray(rObj.patterns) ? rObj.patterns : [];
427
+ const patterns = rawPatterns.map((p) => {
428
+ const occurrences = p.occurrence_count || p.frequency || 0;
429
+ const memoryIds = p.supporting_memories || [];
430
+ const rawConfidence = p.confidence ?? 0.5;
431
+ // H18: Confidence decay — fewer supporting memories or old patterns get reduced confidence
432
+ let adjustedConfidence = rawConfidence;
433
+ if (occurrences < 3)
434
+ adjustedConfidence *= 0.7; // weak support
435
+ if (occurrences < 2)
436
+ adjustedConfidence *= 0.5; // very weak
437
+ // H19: Causal indicator — check if supporting memories have temporal ordering
438
+ const patternType = (p.temporal_order || p.ordered) ? 'temporal' : 'co-occurrence';
439
+ return {
440
+ name: p.name || p.id,
441
+ problem_signature: p.problem || p.context || '',
442
+ prior_solution: p.solution || '',
443
+ confidence: Math.round(adjustedConfidence * 100) / 100,
444
+ confidence_raw: rawConfidence,
445
+ // Build 4.3: conditionally include evidence
446
+ ...(includeEvidence ? { supporting_memories: memoryIds } : {}),
447
+ occurrence_count: occurrences,
448
+ pattern_type: patternType, // H19
449
+ ...(adjustedConfidence < rawConfidence ? { confidence_decay_reason: `Only ${occurrences} supporting observation${occurrences !== 1 ? 's' : ''}` } : {}),
450
+ };
451
+ });
452
+ return {
453
+ text: JSON.stringify(wrapResponse({
454
+ patterns,
455
+ count: patterns.length,
456
+ justification: justify(`${patterns.length} recurring pattern${patterns.length !== 1 ? 's' : ''} identified`, patterns.length > 0 ? 'pattern_inference' : 'hypothesis', [], config.workspaceId),
457
+ }, config, { data_absent: patterns.length === 0 })),
458
+ };
459
+ }
460
+ throw new Error(`Unknown cognitive tool: ${name}`);
461
+ }
462
+ //# sourceMappingURL=cognitive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognitive.js","sourceRoot":"","sources":["../../src/tools/cognitive.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 constructionTools: Tool[];
5
+ export declare function handleConstructionTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
6
+ text: string;
7
+ isError?: boolean;
8
+ }>;
9
+ //# sourceMappingURL=construction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construction.d.ts","sourceRoot":"","sources":["../../src/tools/construction.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAkDzD,eAAO,MAAM,iBAAiB,EAAE,IAAI,EAqCnC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,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,CAgT9C"}