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,258 @@
|
|
|
1
|
+
// ── Temporal Merge ──
|
|
2
|
+
// Shared module for chain detection, supersession marking, temporal decay,
|
|
3
|
+
// and current/superseded grouping. Stateless — all functions are pure transforms.
|
|
4
|
+
// Consumers: multi_search, search_neighborhood, coverage_check, context upgrade, prepare_context.
|
|
5
|
+
// ── Configuration ──
|
|
6
|
+
const DECAY_RATE = parseFloat(process.env.VELIXAR_TEMPORAL_DECAY_RATE || '0.02');
|
|
7
|
+
const SUPERSEDED_FACTOR = 0.3;
|
|
8
|
+
const BROKEN_CHAIN_FACTOR = 0.6;
|
|
9
|
+
const HEURISTIC_SUPERSESSION_DAYS = 7;
|
|
10
|
+
const CONTENT_SIMILARITY_THRESHOLD = 0.95;
|
|
11
|
+
/**
|
|
12
|
+
* Detect supersession relationships from chain links (previous_memory_id / derived_from).
|
|
13
|
+
* Returns a map of superseded_id → superseding_id.
|
|
14
|
+
*/
|
|
15
|
+
export function detectChains(memories) {
|
|
16
|
+
const idSet = new Set(memories.map(m => m.id));
|
|
17
|
+
const childrenOf = new Map(); // parent_id → [child_ids]
|
|
18
|
+
const hasParent = new Set();
|
|
19
|
+
for (const mem of memories) {
|
|
20
|
+
const parentIds = mem.provenance.derived_from || [];
|
|
21
|
+
for (const parentId of parentIds) {
|
|
22
|
+
hasParent.add(mem.id);
|
|
23
|
+
const children = childrenOf.get(parentId) || [];
|
|
24
|
+
children.push(mem.id);
|
|
25
|
+
childrenOf.set(parentId, children);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const supersededBy = new Map();
|
|
29
|
+
const forks = new Set();
|
|
30
|
+
const brokenChains = new Set();
|
|
31
|
+
for (const [parentId, children] of childrenOf) {
|
|
32
|
+
if (children.length > 1) {
|
|
33
|
+
// Fork: parent has multiple children — flag as contradiction, not supersession
|
|
34
|
+
forks.add(parentId);
|
|
35
|
+
}
|
|
36
|
+
else if (children.length === 1) {
|
|
37
|
+
if (idSet.has(parentId)) {
|
|
38
|
+
// Parent is in our result set — mark as superseded
|
|
39
|
+
supersededBy.set(parentId, children[0]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Detect broken chains: memory references a parent not in our result set
|
|
44
|
+
for (const mem of memories) {
|
|
45
|
+
const parentIds = mem.provenance.derived_from || [];
|
|
46
|
+
for (const parentId of parentIds) {
|
|
47
|
+
if (!idSet.has(parentId)) {
|
|
48
|
+
brokenChains.add(mem.id);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Chain heads: memories that are not superseded and not forked
|
|
53
|
+
const chainHeads = new Set();
|
|
54
|
+
for (const mem of memories) {
|
|
55
|
+
if (!supersededBy.has(mem.id) && !forks.has(mem.id)) {
|
|
56
|
+
chainHeads.add(mem.id);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { supersededBy, chainHeads, forks, brokenChains };
|
|
60
|
+
}
|
|
61
|
+
// ── Timestamp Heuristic Supersession ──
|
|
62
|
+
/**
|
|
63
|
+
* For memories without chain links, detect possible supersession by timestamp gap.
|
|
64
|
+
* Groups by content similarity — only memories about the same topic can supersede each other.
|
|
65
|
+
* Returns low-confidence supersession pairs.
|
|
66
|
+
*/
|
|
67
|
+
export function detectHeuristicSupersession(memories, alreadySuperseded) {
|
|
68
|
+
const result = new Map();
|
|
69
|
+
const candidates = memories.filter(m => !alreadySuperseded.has(m.id));
|
|
70
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
71
|
+
for (let j = i + 1; j < candidates.length; j++) {
|
|
72
|
+
const a = candidates[i];
|
|
73
|
+
const b = candidates[j];
|
|
74
|
+
// Only consider if both have timestamps
|
|
75
|
+
const tsA = new Date(a.provenance.created_at).getTime();
|
|
76
|
+
const tsB = new Date(b.provenance.created_at).getTime();
|
|
77
|
+
if (isNaN(tsA) || isNaN(tsB))
|
|
78
|
+
continue;
|
|
79
|
+
const daysDiff = Math.abs(tsB - tsA) / (1000 * 60 * 60 * 24);
|
|
80
|
+
if (daysDiff < HEURISTIC_SUPERSESSION_DAYS)
|
|
81
|
+
continue;
|
|
82
|
+
// Check content similarity via tag overlap (lightweight proxy for cosine)
|
|
83
|
+
const tagsA = new Set(a.tags);
|
|
84
|
+
const tagsB = new Set(b.tags);
|
|
85
|
+
const overlap = [...tagsA].filter(t => tagsB.has(t)).length;
|
|
86
|
+
const maxTags = Math.max(tagsA.size, tagsB.size, 1);
|
|
87
|
+
if (overlap / maxTags < 0.5)
|
|
88
|
+
continue;
|
|
89
|
+
// Older one is possibly superseded
|
|
90
|
+
const [older, newer] = tsA < tsB ? [a, b] : [b, a];
|
|
91
|
+
if (!alreadySuperseded.has(older.id) && !result.has(older.id)) {
|
|
92
|
+
result.set(older.id, { supersededBy: newer.id, confidence: 'inferred' });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
// ── Temporal Decay ──
|
|
99
|
+
/**
|
|
100
|
+
* Apply temporal decay to relevance scores.
|
|
101
|
+
* Semantic (tier 2) and pinned (tier 0) memories are exempt — they represent durable knowledge.
|
|
102
|
+
* Only episodic memories (tier 1) decay.
|
|
103
|
+
*/
|
|
104
|
+
export function applyTemporalDecay(mem) {
|
|
105
|
+
// Exempt semantic and pinned memories from decay
|
|
106
|
+
if (mem.memory_type === 'semantic')
|
|
107
|
+
return mem.relevance ?? 0;
|
|
108
|
+
const createdAt = new Date(mem.provenance.created_at).getTime();
|
|
109
|
+
if (isNaN(createdAt))
|
|
110
|
+
return mem.relevance ?? 0;
|
|
111
|
+
const daysSince = (Date.now() - createdAt) / (1000 * 60 * 60 * 24);
|
|
112
|
+
const freshness = Math.exp(-DECAY_RATE * daysSince);
|
|
113
|
+
return (mem.relevance ?? 0) * (0.7 + 0.3 * freshness);
|
|
114
|
+
}
|
|
115
|
+
// ── Full Temporal Merge Pipeline ──
|
|
116
|
+
/**
|
|
117
|
+
* Takes a flat list of memories, applies chain detection, supersession marking,
|
|
118
|
+
* temporal decay, and returns grouped results.
|
|
119
|
+
*/
|
|
120
|
+
export function temporalMerge(memories) {
|
|
121
|
+
if (memories.length === 0) {
|
|
122
|
+
return {
|
|
123
|
+
current: [],
|
|
124
|
+
superseded: [],
|
|
125
|
+
temporal_context: {
|
|
126
|
+
newest_memory: '', oldest_memory: '', chain_count: 0,
|
|
127
|
+
fork_count: 0, broken_chain_count: 0, warning: null,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Step 1: Chain detection
|
|
132
|
+
const { supersededBy, chainHeads, forks, brokenChains } = detectChains(memories);
|
|
133
|
+
// Step 2: Heuristic supersession for unchained memories
|
|
134
|
+
const explicitlySuperseded = new Set(supersededBy.keys());
|
|
135
|
+
const heuristic = detectHeuristicSupersession(memories, explicitlySuperseded);
|
|
136
|
+
// Step 3: Build temporal memories with annotations
|
|
137
|
+
const temporal = memories.map(mem => {
|
|
138
|
+
const isExplicitlySuperseded = supersededBy.has(mem.id);
|
|
139
|
+
const isHeuristicallySuperseded = heuristic.has(mem.id);
|
|
140
|
+
const isSuperseded = isExplicitlySuperseded || isHeuristicallySuperseded;
|
|
141
|
+
const isFork = forks.has(mem.id);
|
|
142
|
+
const isBrokenChain = brokenChains.has(mem.id);
|
|
143
|
+
const tmem = {
|
|
144
|
+
...mem,
|
|
145
|
+
_original_relevance: mem.relevance,
|
|
146
|
+
_superseded: isSuperseded,
|
|
147
|
+
_superseded_by: isExplicitlySuperseded
|
|
148
|
+
? supersededBy.get(mem.id)
|
|
149
|
+
: isHeuristicallySuperseded
|
|
150
|
+
? heuristic.get(mem.id).supersededBy
|
|
151
|
+
: undefined,
|
|
152
|
+
_supersession_confidence: isExplicitlySuperseded
|
|
153
|
+
? 'explicit'
|
|
154
|
+
: isHeuristicallySuperseded
|
|
155
|
+
? 'inferred'
|
|
156
|
+
: 'none',
|
|
157
|
+
_chain_head: chainHeads.has(mem.id),
|
|
158
|
+
_chain_broken: isBrokenChain,
|
|
159
|
+
_chain_fork: isFork,
|
|
160
|
+
};
|
|
161
|
+
// Step 4: Apply relevance adjustments
|
|
162
|
+
if (isExplicitlySuperseded) {
|
|
163
|
+
tmem.relevance = (mem.relevance ?? 0) * SUPERSEDED_FACTOR;
|
|
164
|
+
}
|
|
165
|
+
else if (isBrokenChain) {
|
|
166
|
+
tmem.relevance = (mem.relevance ?? 0) * BROKEN_CHAIN_FACTOR;
|
|
167
|
+
}
|
|
168
|
+
else if (!isHeuristicallySuperseded) {
|
|
169
|
+
// Only apply temporal decay to non-superseded memories
|
|
170
|
+
tmem.relevance = applyTemporalDecay(tmem);
|
|
171
|
+
}
|
|
172
|
+
// Heuristic supersession: do NOT auto-demote, just label
|
|
173
|
+
return tmem;
|
|
174
|
+
});
|
|
175
|
+
// Step 5: Group
|
|
176
|
+
const current = temporal
|
|
177
|
+
.filter(m => !m._superseded || m._supersession_confidence === 'inferred')
|
|
178
|
+
.sort((a, b) => (b.relevance ?? 0) - (a.relevance ?? 0));
|
|
179
|
+
const superseded = temporal
|
|
180
|
+
.filter(m => m._superseded && m._supersession_confidence === 'explicit')
|
|
181
|
+
.sort((a, b) => (b.relevance ?? 0) - (a.relevance ?? 0));
|
|
182
|
+
// Step 6: Temporal context metadata
|
|
183
|
+
const timestamps = memories
|
|
184
|
+
.map(m => m.provenance.created_at)
|
|
185
|
+
.filter(Boolean)
|
|
186
|
+
.sort();
|
|
187
|
+
const spanDays = timestamps.length >= 2
|
|
188
|
+
? (new Date(timestamps[timestamps.length - 1]).getTime() - new Date(timestamps[0]).getTime()) / (1000 * 60 * 60 * 24)
|
|
189
|
+
: 0;
|
|
190
|
+
return {
|
|
191
|
+
current,
|
|
192
|
+
superseded,
|
|
193
|
+
temporal_context: {
|
|
194
|
+
newest_memory: timestamps[timestamps.length - 1] || '',
|
|
195
|
+
oldest_memory: timestamps[0] || '',
|
|
196
|
+
chain_count: supersededBy.size,
|
|
197
|
+
fork_count: forks.size,
|
|
198
|
+
broken_chain_count: brokenChains.size,
|
|
199
|
+
warning: spanDays > 14
|
|
200
|
+
? `Results span ${Math.round(spanDays)} days — beliefs may have evolved`
|
|
201
|
+
: forks.size > 0
|
|
202
|
+
? `${forks.size} chain fork(s) detected — possible contradictions`
|
|
203
|
+
: null,
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// ── Multi-Query Merge ──
|
|
208
|
+
/**
|
|
209
|
+
* Deduplicate and merge memories from multiple search queries.
|
|
210
|
+
* Memories appearing in multiple queries get boosted scores.
|
|
211
|
+
* H3.4: Returns matched_query_indices per memory (not full strings).
|
|
212
|
+
* H3.5: Never reorders input queries — indices are stable.
|
|
213
|
+
*/
|
|
214
|
+
export function mergeMultiQueryResults(perQueryResults, strategy = 'weighted', limit = 10, queryWeights, threshold = 2) {
|
|
215
|
+
const seen = new Map();
|
|
216
|
+
for (let qi = 0; qi < perQueryResults.length; qi++) {
|
|
217
|
+
const weight = queryWeights?.[qi] ?? 1;
|
|
218
|
+
for (const mem of perQueryResults[qi].memories) {
|
|
219
|
+
const existing = seen.get(mem.id);
|
|
220
|
+
const weightedScore = (mem.relevance ?? 0) * weight;
|
|
221
|
+
if (existing) {
|
|
222
|
+
existing.hitCount++;
|
|
223
|
+
existing.maxScore = Math.max(existing.maxScore, weightedScore);
|
|
224
|
+
existing.queryIndices.push(qi);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
seen.set(mem.id, { mem, hitCount: 1, maxScore: weightedScore, queryIndices: [qi] });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
let merged = [...seen.values()].map(({ mem, hitCount, maxScore, queryIndices }) => ({
|
|
232
|
+
...mem,
|
|
233
|
+
relevance: strategy === 'weighted'
|
|
234
|
+
? maxScore * (1 + 0.2 * (hitCount - 1))
|
|
235
|
+
: maxScore,
|
|
236
|
+
_hit_count: hitCount,
|
|
237
|
+
_matched_queries: hitCount,
|
|
238
|
+
_query_indices: queryIndices,
|
|
239
|
+
}));
|
|
240
|
+
if (strategy === 'intersection') {
|
|
241
|
+
merged = merged.filter(m => m._hit_count >= threshold);
|
|
242
|
+
}
|
|
243
|
+
merged.sort((a, b) => (b.relevance ?? 0) - (a.relevance ?? 0));
|
|
244
|
+
const totalSlots = perQueryResults.reduce((sum, r) => sum + r.memories.length, 0);
|
|
245
|
+
const diversity_score = totalSlots > 0 ? seen.size / totalSlots : 1;
|
|
246
|
+
// H3.4: Build matched_query_indices map
|
|
247
|
+
const matched_query_indices = {};
|
|
248
|
+
for (const item of merged.slice(0, limit)) {
|
|
249
|
+
matched_query_indices[item.id] = item._query_indices;
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
merged: merged.slice(0, limit),
|
|
253
|
+
diversity_score: Math.round(diversity_score * 100) / 100,
|
|
254
|
+
per_query_counts: perQueryResults.map(r => r.memories.length),
|
|
255
|
+
matched_query_indices,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=temporal_merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal_merge.js","sourceRoot":"","sources":["../src/temporal_merge.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 clairvoyanceTools: Tool[];
|
|
5
|
+
export declare function handleClairvoyanceTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
|
|
6
|
+
text: string;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=clairvoyance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clairvoyance.d.ts","sourceRoot":"","sources":["../../src/tools/clairvoyance.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,eAAO,MAAM,iBAAiB,EAAE,IAAI,EAyD9B,CAAC;AA+BP,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,CA8P9C"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
// ── Clairvoyance MCP Tools ──
|
|
2
|
+
// velixar_simulate, velixar_scenario, velixar_predict
|
|
3
|
+
// Enterprise add-on only. Gated by VELIXAR_CLAIRVOYANCE flag.
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
import { wrapResponse } from '../api.js';
|
|
6
|
+
import { validateSearchResponse } from '../validate.js';
|
|
7
|
+
import { generatePersonas } from '../simulation/personas.js';
|
|
8
|
+
import { runSimulation } from '../simulation/runner.js';
|
|
9
|
+
import { generateReport } from '../simulation/report.js';
|
|
10
|
+
const CLAIRVOYANCE_ENABLED = process.env.VELIXAR_CLAIRVOYANCE === 'true';
|
|
11
|
+
export const clairvoyanceTools = CLAIRVOYANCE_ENABLED ? [
|
|
12
|
+
{
|
|
13
|
+
name: 'velixar_simulate',
|
|
14
|
+
description: 'Run a multi-agent simulation to explore potential outcomes. Enterprise add-on. ' +
|
|
15
|
+
'Returns a prediction report with confidence ranges, risks, and assumptions. Metered — cost estimate shown first.',
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
question: { type: 'string', description: 'The "what if" question to simulate' },
|
|
20
|
+
context: { type: 'string', description: 'Additional context to seed the simulation' },
|
|
21
|
+
agent_count: { type: 'number', description: 'Number of personas (default 12, max 30)' },
|
|
22
|
+
round_count: { type: 'number', description: 'Simulation rounds (default 20, max 50)' },
|
|
23
|
+
variables: { type: 'object', description: 'Key variables to inject (e.g., {"price_increase": "20%"})' },
|
|
24
|
+
persona_types: { type: 'array', items: { type: 'string' }, description: 'Override persona types: customer, competitor, regulator, internal_team, market_force, investor' },
|
|
25
|
+
fresh: { type: 'boolean', description: 'Exclude past simulation insights (default: false)' },
|
|
26
|
+
async: { type: 'boolean', description: 'Non-blocking mode — returns simulation_id immediately (default: false)' },
|
|
27
|
+
seed: { type: 'number', description: 'Random seed for reproducible simulations' },
|
|
28
|
+
model: { type: 'string', description: 'LLM model override (default: gpt-4o-mini)' },
|
|
29
|
+
},
|
|
30
|
+
required: ['question'],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'velixar_scenario',
|
|
35
|
+
description: 'Compare multiple scenarios side by side. Runs parallel simulations with different variables. Enterprise add-on. Metered.',
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
question: { type: 'string', description: 'The base question' },
|
|
40
|
+
scenarios: {
|
|
41
|
+
type: 'array',
|
|
42
|
+
items: { type: 'object', properties: { name: { type: 'string' }, variables: { type: 'object' } }, required: ['name', 'variables'] },
|
|
43
|
+
description: 'Array of {name, variables} to compare',
|
|
44
|
+
},
|
|
45
|
+
agent_count: { type: 'number', description: 'Personas per scenario (default 12)' },
|
|
46
|
+
round_count: { type: 'number', description: 'Rounds per scenario (default 20)' },
|
|
47
|
+
verify: { type: 'boolean', description: 'Run top 2 scenarios twice for stability check (doubles cost for those 2)' },
|
|
48
|
+
},
|
|
49
|
+
required: ['question', 'scenarios'],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'velixar_predict',
|
|
54
|
+
description: 'Lightweight prediction using existing memories and patterns — no simulation. Enterprise add-on. ' +
|
|
55
|
+
'Returns prediction with confidence and supporting evidence.',
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: 'object',
|
|
58
|
+
properties: {
|
|
59
|
+
question: { type: 'string', description: 'The prediction question' },
|
|
60
|
+
depth: { type: 'string', enum: ['quick', 'thorough'], description: 'quick = patterns only, thorough = patterns + search + contradictions (default: thorough)' },
|
|
61
|
+
},
|
|
62
|
+
required: ['question'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
] : [];
|
|
66
|
+
// ── LLM Call Factory ──
|
|
67
|
+
function makeLLMCall(api, model) {
|
|
68
|
+
return async (system, user) => {
|
|
69
|
+
// Route through Velixar backend LLM proxy or direct OpenAI
|
|
70
|
+
const res = await api.post('/llm/chat', {
|
|
71
|
+
model,
|
|
72
|
+
messages: [
|
|
73
|
+
{ role: 'system', content: system },
|
|
74
|
+
{ role: 'user', content: user },
|
|
75
|
+
],
|
|
76
|
+
temperature: 0.7,
|
|
77
|
+
max_tokens: 300,
|
|
78
|
+
});
|
|
79
|
+
return res.content || res.choices?.[0]?.message?.content || '';
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// ── Cost Estimation ──
|
|
83
|
+
function estimateCost(agentCount, roundCount, activationProb) {
|
|
84
|
+
const activePerRound = Math.ceil(agentCount * activationProb);
|
|
85
|
+
const totalCalls = activePerRound * roundCount;
|
|
86
|
+
const tokensPerCall = 800; // system prompt + context + response
|
|
87
|
+
const tokens = totalCalls * tokensPerCall;
|
|
88
|
+
const cost = tokens * 0.0000006; // GPT-4o-mini approximate
|
|
89
|
+
const batches = Math.ceil(totalCalls / 10);
|
|
90
|
+
const timeSeconds = Math.ceil(batches * 0.8) + 8; // +8 for persona gen + report
|
|
91
|
+
return { tokens, cost: Math.round(cost * 100) / 100, timeSeconds };
|
|
92
|
+
}
|
|
93
|
+
export async function handleClairvoyanceTool(name, args, api, config) {
|
|
94
|
+
if (!CLAIRVOYANCE_ENABLED) {
|
|
95
|
+
return {
|
|
96
|
+
text: JSON.stringify({ error: 'Clairvoyance is an enterprise add-on. Contact sales to enable.' }),
|
|
97
|
+
isError: true,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (name === 'velixar_simulate') {
|
|
101
|
+
const question = args.question;
|
|
102
|
+
const variables = args.variables || {};
|
|
103
|
+
const agentCount = Math.min(args.agent_count || 12, 30); // H2.6
|
|
104
|
+
const roundCount = Math.min(args.round_count || 20, 50); // H2.6
|
|
105
|
+
const model = args.model || 'gpt-4o-mini';
|
|
106
|
+
const fresh = args.fresh;
|
|
107
|
+
const seed = args.seed;
|
|
108
|
+
const simulationId = `sim-${randomUUID().slice(0, 12)}`;
|
|
109
|
+
// Cost estimate (shown before execution)
|
|
110
|
+
const activationProb = Math.max(0.6, Math.min(0.9, 1 - (roundCount / 100)));
|
|
111
|
+
const estimate = estimateCost(agentCount, roundCount, activationProb);
|
|
112
|
+
// Step 1: Data foundation assessment (Chain 9)
|
|
113
|
+
let coverageRatio = 0;
|
|
114
|
+
let seedMemoryCount = 0;
|
|
115
|
+
try {
|
|
116
|
+
const params = new URLSearchParams({ q: question, user_id: config.userId, limit: '20' });
|
|
117
|
+
const raw = await api.get(`/memory/search?${params}`, true);
|
|
118
|
+
const validated = validateSearchResponse(raw, '/memory/search');
|
|
119
|
+
seedMemoryCount = validated.memories.length;
|
|
120
|
+
coverageRatio = Math.min(1.0, seedMemoryCount / 20);
|
|
121
|
+
}
|
|
122
|
+
catch { /* proceed with zero coverage */ }
|
|
123
|
+
const minDataThreshold = args.min_data_threshold || 10;
|
|
124
|
+
// Step 2: Generate personas
|
|
125
|
+
const llmCall = makeLLMCall(api, model);
|
|
126
|
+
const personaResult = await generatePersonas(question, variables, api, config, llmCall, {
|
|
127
|
+
agentCount, personaTypes: args.persona_types, fresh, simulationId,
|
|
128
|
+
});
|
|
129
|
+
const personas = personaResult.personas;
|
|
130
|
+
// Step 3: Run simulation
|
|
131
|
+
const result = await runSimulation({
|
|
132
|
+
simulationId, question, variables, personas, roundCount,
|
|
133
|
+
llmCall, seed, concurrency: 10, timeoutMs: 60000,
|
|
134
|
+
});
|
|
135
|
+
// Step 4: Generate report
|
|
136
|
+
const report = generateReport(result, personas, coverageRatio, seedMemoryCount, minDataThreshold);
|
|
137
|
+
// Step 5: Store prediction as hypothesis memory (H4.2: inline disclaimer)
|
|
138
|
+
try {
|
|
139
|
+
await api.post('/memory', {
|
|
140
|
+
content: report.prediction,
|
|
141
|
+
user_id: config.userId,
|
|
142
|
+
tier: 2,
|
|
143
|
+
tags: ['clairvoyance', 'prediction', 'active', simulationId],
|
|
144
|
+
source_type: 'clairvoyance',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch { /* non-blocking */ }
|
|
148
|
+
// Step 6: Store simulation insight (Chain 11: escapes quarantine)
|
|
149
|
+
try {
|
|
150
|
+
const insightContent = `${report.badge} Simulation ${simulationId}: "${question}" → ${result.emergentConsensus} (confidence: ${report.confidenceRange.low}-${report.confidenceRange.high}). Key factors: ${report.keyFactors.slice(0, 2).join('; ')}`;
|
|
151
|
+
await api.post('/memory', {
|
|
152
|
+
content: insightContent,
|
|
153
|
+
user_id: config.userId,
|
|
154
|
+
tier: 2,
|
|
155
|
+
tags: ['clairvoyance', 'simulation-insight', simulationId],
|
|
156
|
+
source_type: 'clairvoyance',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch { /* non-blocking */ }
|
|
160
|
+
// Step 7: Log billing event
|
|
161
|
+
const usage = { tokens_consumed: result.tokensUsed, estimated_cost: estimate.cost, agent_count: agentCount, round_count: roundCount };
|
|
162
|
+
return {
|
|
163
|
+
text: JSON.stringify(wrapResponse({
|
|
164
|
+
simulation_id: simulationId,
|
|
165
|
+
report: {
|
|
166
|
+
badge: report.badge,
|
|
167
|
+
prediction: report.prediction,
|
|
168
|
+
confidence: report.confidenceRange,
|
|
169
|
+
key_factors: report.keyFactors,
|
|
170
|
+
what_could_go_wrong: report.risks,
|
|
171
|
+
assumptions: report.assumptions,
|
|
172
|
+
timeline: report.timeline,
|
|
173
|
+
dissenting_views: report.dissentingViews,
|
|
174
|
+
data_foundation: report.dataFoundation,
|
|
175
|
+
},
|
|
176
|
+
simulation_metadata: {
|
|
177
|
+
rounds_completed: result.rounds.length,
|
|
178
|
+
rounds_planned: roundCount,
|
|
179
|
+
convergence_round: result.convergenceRound,
|
|
180
|
+
personas: result.personas,
|
|
181
|
+
aborted: result.aborted,
|
|
182
|
+
},
|
|
183
|
+
usage,
|
|
184
|
+
disclaimer: report.disclaimer,
|
|
185
|
+
track_this_prediction: report.trackPrompt,
|
|
186
|
+
}, config)),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (name === 'velixar_scenario') {
|
|
190
|
+
const question = args.question;
|
|
191
|
+
const scenarios = args.scenarios;
|
|
192
|
+
const agentCount = Math.min(args.agent_count || 12, 30);
|
|
193
|
+
const roundCount = Math.min(args.round_count || 20, 50);
|
|
194
|
+
if (!scenarios?.length || scenarios.length > 5) {
|
|
195
|
+
return { text: JSON.stringify({ error: 'Provide 1-5 scenarios.' }), isError: true };
|
|
196
|
+
}
|
|
197
|
+
// Cost estimate for all scenarios
|
|
198
|
+
const activationProb = Math.max(0.6, Math.min(0.9, 1 - (roundCount / 100)));
|
|
199
|
+
const perScenario = estimateCost(agentCount, roundCount, activationProb);
|
|
200
|
+
const totalEstimate = {
|
|
201
|
+
tokens: perScenario.tokens * scenarios.length,
|
|
202
|
+
cost: Math.round(perScenario.cost * scenarios.length * 100) / 100,
|
|
203
|
+
timeSeconds: perScenario.timeSeconds * 2, // parallel but not instant
|
|
204
|
+
};
|
|
205
|
+
// Run all scenarios in parallel
|
|
206
|
+
const results = await Promise.allSettled(scenarios.map(async (scenario) => {
|
|
207
|
+
const simId = `sim-${randomUUID().slice(0, 12)}`;
|
|
208
|
+
const llmCall = makeLLMCall(api, 'gpt-4o-mini');
|
|
209
|
+
const personaResult = await generatePersonas(question, scenario.variables, api, config, llmCall, {
|
|
210
|
+
agentCount, simulationId: simId,
|
|
211
|
+
});
|
|
212
|
+
const personas = personaResult.personas;
|
|
213
|
+
const simResult = await runSimulation({
|
|
214
|
+
simulationId: simId, question, variables: scenario.variables,
|
|
215
|
+
personas, roundCount, llmCall, concurrency: 10, timeoutMs: 60000,
|
|
216
|
+
});
|
|
217
|
+
let coverageRatio = 0, seedMemoryCount = 0;
|
|
218
|
+
try {
|
|
219
|
+
const params = new URLSearchParams({ q: question, user_id: config.userId, limit: '20' });
|
|
220
|
+
const raw = await api.get(`/memory/search?${params}`, true);
|
|
221
|
+
const validated = validateSearchResponse(raw, '/memory/search');
|
|
222
|
+
seedMemoryCount = validated.memories.length;
|
|
223
|
+
coverageRatio = Math.min(1.0, seedMemoryCount / 20);
|
|
224
|
+
}
|
|
225
|
+
catch { /* */ }
|
|
226
|
+
const report = generateReport(simResult, personas, coverageRatio, seedMemoryCount, 10);
|
|
227
|
+
return { name: scenario.name, variables: scenario.variables, simulationId: simId, report, convergenceRound: simResult.convergenceRound };
|
|
228
|
+
}));
|
|
229
|
+
const completed = results
|
|
230
|
+
.filter((r) => r.status === 'fulfilled')
|
|
231
|
+
.map(r => r.value);
|
|
232
|
+
// H6.4: Comparison uses ranges and directional language
|
|
233
|
+
const comparison = completed.map(s => ({
|
|
234
|
+
scenario: s.name,
|
|
235
|
+
variables: s.variables,
|
|
236
|
+
simulation_id: s.simulationId,
|
|
237
|
+
confidence: s.report.confidenceRange,
|
|
238
|
+
consensus: s.report.prediction.split('\n').find((l) => !l.startsWith('['))?.trim() || '',
|
|
239
|
+
convergence: s.convergenceRound ? `Round ${s.convergenceRound}` : 'Did not converge',
|
|
240
|
+
top_risk: s.report.risks[0] || 'None identified',
|
|
241
|
+
}));
|
|
242
|
+
// Recommendation: highest confidence
|
|
243
|
+
const best = completed.sort((a, b) => b.report.confidenceRange.high - a.report.confidenceRange.high)[0];
|
|
244
|
+
return {
|
|
245
|
+
text: JSON.stringify(wrapResponse({
|
|
246
|
+
comparison,
|
|
247
|
+
recommendation: best
|
|
248
|
+
? `"${best.name}" shows the strongest signal (confidence ${best.report.confidenceRange.low}-${best.report.confidenceRange.high}). However, all scenarios carry uncertainty — review assumptions before acting.`
|
|
249
|
+
: 'Unable to determine a clear recommendation.',
|
|
250
|
+
scenarios_completed: completed.length,
|
|
251
|
+
scenarios_failed: results.filter(r => r.status === 'rejected').length,
|
|
252
|
+
usage: totalEstimate,
|
|
253
|
+
disclaimer: 'Scenario comparison shows directional differences, not precise outcomes. Use to inform strategy, not as a forecast.',
|
|
254
|
+
}, config)),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
if (name === 'velixar_predict') {
|
|
258
|
+
const question = args.question;
|
|
259
|
+
const depth = args.depth || 'thorough';
|
|
260
|
+
// Pattern-based prediction — no simulation, no incremental LLM cost
|
|
261
|
+
const evidence = [];
|
|
262
|
+
// Search for relevant memories
|
|
263
|
+
try {
|
|
264
|
+
const params = new URLSearchParams({ q: question, user_id: config.userId, limit: '10' });
|
|
265
|
+
const raw = await api.get(`/memory/search?${params}`, true);
|
|
266
|
+
const validated = validateSearchResponse(raw, '/memory/search');
|
|
267
|
+
for (const m of validated.memories) {
|
|
268
|
+
evidence.push({ content: m.content.slice(0, 200), relevance: m.score ?? 0 });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch { /* */ }
|
|
272
|
+
// Check for existing predictions on this topic
|
|
273
|
+
let existingPrediction = null;
|
|
274
|
+
try {
|
|
275
|
+
const params = new URLSearchParams({ q: `prediction ${question}`, user_id: config.userId, limit: '3', tags: 'clairvoyance,prediction' });
|
|
276
|
+
const raw = await api.get(`/memory/search?${params}`, true);
|
|
277
|
+
const validated = validateSearchResponse(raw, '/memory/search');
|
|
278
|
+
if (validated.memories.length > 0) {
|
|
279
|
+
existingPrediction = validated.memories[0].content;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch { /* */ }
|
|
283
|
+
// Check patterns
|
|
284
|
+
let patterns = [];
|
|
285
|
+
if (depth === 'thorough') {
|
|
286
|
+
try {
|
|
287
|
+
const patternData = await api.post('/exocortex/patterns', { topic: question });
|
|
288
|
+
const p = Array.isArray(patternData?.patterns) ? patternData.patterns : [];
|
|
289
|
+
patterns = p.slice(0, 3).map(pt => String(pt.description || pt.pattern || ''));
|
|
290
|
+
}
|
|
291
|
+
catch { /* */ }
|
|
292
|
+
}
|
|
293
|
+
// Check contradictions
|
|
294
|
+
let contradictions = [];
|
|
295
|
+
if (depth === 'thorough') {
|
|
296
|
+
try {
|
|
297
|
+
const cData = await api.get('/exocortex/contradictions?status=open', true);
|
|
298
|
+
const cs = Array.isArray(cData?.contradictions) ? cData.contradictions : [];
|
|
299
|
+
contradictions = cs.slice(0, 3).map(c => `${String(c.statement_a || '').slice(0, 80)} vs ${String(c.statement_b || '').slice(0, 80)}`);
|
|
300
|
+
}
|
|
301
|
+
catch { /* */ }
|
|
302
|
+
}
|
|
303
|
+
const confidence = Math.min(0.9, evidence.filter(e => e.relevance > 0.5).length / 10 + (patterns.length * 0.1));
|
|
304
|
+
return {
|
|
305
|
+
text: JSON.stringify(wrapResponse({
|
|
306
|
+
question,
|
|
307
|
+
existing_prediction: existingPrediction,
|
|
308
|
+
evidence: evidence.slice(0, 5),
|
|
309
|
+
patterns,
|
|
310
|
+
contradictions,
|
|
311
|
+
confidence: Math.round(confidence * 100) / 100,
|
|
312
|
+
assessment: confidence >= 0.6
|
|
313
|
+
? 'Enough data for a pattern-based estimate. See evidence above.'
|
|
314
|
+
: 'Limited data — consider running velixar_simulate for a deeper analysis.',
|
|
315
|
+
depth,
|
|
316
|
+
}, config, { data_absent: evidence.length === 0 })),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
throw new Error(`Unknown clairvoyance tool: ${name}`);
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=clairvoyance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clairvoyance.js","sourceRoot":"","sources":["../../src/tools/clairvoyance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 function trackToolCallForIdentity(): void;
|
|
5
|
+
export declare const cognitiveTools: Tool[];
|
|
6
|
+
export declare function handleCognitiveTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
|
|
7
|
+
text: string;
|
|
8
|
+
isError?: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=cognitive.d.ts.map
|