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,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