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,350 @@
1
+ // ── Context Construction Tools ──
2
+ // velixar_prepare_context — task-aware context assembly with anti-hallucination
3
+ // velixar_refine_context — iterative mid-generation refinement
4
+ // Phase 5: The capstone — consumes all retrieval tools internally.
5
+ import { randomUUID } from 'node:crypto';
6
+ import { normalizeMemory, wrapResponse } from '../api.js';
7
+ import { validateSearchResponse } from '../validate.js';
8
+ import { validateCoverageResponse } from '../validate_retrieval.js';
9
+ import { temporalMerge, mergeMultiQueryResults } from '../temporal_merge.js';
10
+ const contextCache = new Map();
11
+ const MAX_REFINEMENTS = 5;
12
+ function cacheKey(workspaceId, contextId) {
13
+ return `${workspaceId}:${contextId}`;
14
+ }
15
+ function getContext(workspaceId, contextId) {
16
+ const key = cacheKey(workspaceId, contextId);
17
+ const state = contextCache.get(key);
18
+ if (!state)
19
+ return null;
20
+ if (Date.now() - state.createdAt > state.ttlMs) {
21
+ contextCache.delete(key);
22
+ return null;
23
+ }
24
+ return state;
25
+ }
26
+ // ── Token Estimation ──
27
+ function estimateTokens(text) {
28
+ return Math.ceil(text.length / 4);
29
+ }
30
+ const SECTION_PRIORITY = {
31
+ task_answer: ['current_state', 'key_decisions', 'unknowns', 'history'],
32
+ decision_support: ['contradictions', 'current_state', 'alternatives', 'precedents'],
33
+ historical_review: ['timeline', 'evolution', 'superseded', 'current_state'],
34
+ exploration: ['broad_coverage', 'related_entities', 'patterns', 'unknowns'],
35
+ };
36
+ export const constructionTools = [
37
+ {
38
+ name: 'velixar_prepare_context',
39
+ description: 'Assemble a token-budgeted, task-aware context package with explicit gap declaration. ' +
40
+ 'Runs multi-angle search, coverage check, and temporal analysis internally.',
41
+ inputSchema: {
42
+ type: 'object',
43
+ properties: {
44
+ queries: { type: 'array', items: { type: 'string' }, description: 'Explicit search queries (recommended). If omitted, queries are auto-generated from intent.' },
45
+ intent: { type: 'string', description: 'What you are about to do — drives section prioritization' },
46
+ token_budget: { type: 'number', description: 'Max tokens for context package. Auto-scales by strategy if omitted: task_answer=4000, decision_support=6000, historical_review=8000, exploration=3000.' },
47
+ strategy: { type: 'string', enum: ['task_answer', 'decision_support', 'historical_review', 'exploration'], description: 'Shapes section priority (default: task_answer)' },
48
+ include_ids: { type: 'array', items: { type: 'string' }, description: 'Memory IDs that MUST be included' },
49
+ exclude_ids: { type: 'array', items: { type: 'string' }, description: 'Memory IDs to exclude' },
50
+ context_ttl: { type: 'number', description: 'TTL in seconds for the context package (default: 600). After expiry, refine_context will fail.' },
51
+ },
52
+ required: ['intent'],
53
+ },
54
+ },
55
+ {
56
+ name: 'velixar_refine_context',
57
+ description: 'Expand a section, fill a gap, or add a topic to an existing context package. ' +
58
+ 'Accepts a single action or an array of actions for batch refinement.',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {
62
+ context_id: { type: 'string', description: 'ID from prepare_context response' },
63
+ action: { type: 'string', enum: ['expand_section', 'fill_gap', 'add_topic'], description: 'What to do (single action)' },
64
+ target: { type: 'string', description: 'Section label, gap name, or new topic (single action)' },
65
+ actions: { type: 'array', items: { type: 'object', properties: { action: { type: 'string' }, target: { type: 'string' }, budget: { type: 'number' } } }, description: 'Batch: array of {action, target, budget?} for multiple refinements in one call' },
66
+ additional_budget: { type: 'number', description: 'Extra tokens (default 1000)' },
67
+ },
68
+ required: ['context_id'],
69
+ },
70
+ },
71
+ ];
72
+ export async function handleConstructionTool(name, args, api, config) {
73
+ if (name === 'velixar_prepare_context') {
74
+ const intent = args.intent;
75
+ const strategy = args.strategy || (intent.length < 20 ? 'exploration' : 'task_answer');
76
+ // Build 5.1: Smart token budget — auto-scale by strategy
77
+ const STRATEGY_BUDGETS = { task_answer: 4000, decision_support: 6000, historical_review: 8000, exploration: 3000 };
78
+ const budget = Math.min(args.token_budget || STRATEGY_BUDGETS[strategy], 12000);
79
+ const contextTtlSec = args.context_ttl || 600;
80
+ const contextTtlMs = contextTtlSec * 1000;
81
+ const includeIds = new Set(args.include_ids || []);
82
+ const excludeIds = new Set(args.exclude_ids || []);
83
+ // Include wins over exclude
84
+ for (const id of includeIds)
85
+ excludeIds.delete(id);
86
+ const contextId = randomUUID();
87
+ const provenanceLog = [];
88
+ const INTERNAL_TIMEOUT = 3000;
89
+ // Step 1: Multi-angle retrieval (with timeout)
90
+ // Prefer explicit queries from LLM (they know the vocabulary); fall back to intent extraction
91
+ const explicitQueries = args.queries;
92
+ let angles;
93
+ if (explicitQueries?.length) {
94
+ angles = explicitQueries.slice(0, 5);
95
+ }
96
+ else {
97
+ const intentClean = intent.replace(/[?!.]+$/g, '').trim();
98
+ const significant = intentClean.split(/\s+/).filter(w => w.length > 3 && !/^(what|that|this|with|from|about|should|could|would|does|have|been|their|there|which|where|when|into|status|current)$/i.test(w));
99
+ const topicPhrase = significant.slice(0, 3).join(' ') || intentClean.slice(0, 30);
100
+ angles = [topicPhrase, `${topicPhrase} plan`, `${topicPhrase} strategy`];
101
+ }
102
+ const searchStart = Date.now();
103
+ let allMemories = [];
104
+ try {
105
+ const searchResults = await Promise.race([
106
+ Promise.allSettled(angles.map(q => {
107
+ const params = new URLSearchParams({ q, user_id: config.userId, limit: '10' });
108
+ return api.get(`/memory/search?${params}`, true);
109
+ })),
110
+ new Promise(resolve => setTimeout(() => resolve([]), INTERNAL_TIMEOUT)),
111
+ ]);
112
+ const perQuery = searchResults.map((r, i) => {
113
+ if (r.status !== 'fulfilled')
114
+ return { query: angles[i], memories: [] };
115
+ try {
116
+ const validated = validateSearchResponse(r.value, '/memory/search');
117
+ return {
118
+ query: angles[i],
119
+ memories: validated.memories.map(m => { const mem = normalizeMemory(m); mem.workspace_id = config.workspaceId; return mem; }),
120
+ };
121
+ }
122
+ catch {
123
+ return { query: angles[i], memories: [] };
124
+ }
125
+ });
126
+ const { merged } = mergeMultiQueryResults(perQuery, 'weighted', 20);
127
+ allMemories = merged;
128
+ provenanceLog.push({ step: 'multi_search', queries: angles, results: merged.length, ms: Date.now() - searchStart });
129
+ }
130
+ catch {
131
+ provenanceLog.push({ step: 'multi_search', error: 'timeout', ms: INTERNAL_TIMEOUT });
132
+ }
133
+ // Add forced includes
134
+ for (const id of includeIds) {
135
+ if (!allMemories.some(m => m.id === id)) {
136
+ try {
137
+ const raw = await api.get(`/memory/${id}`, true);
138
+ const rObj = (raw && typeof raw === 'object') ? raw : {};
139
+ const memData = (rObj.memory && typeof rObj.memory === 'object') ? rObj.memory : null;
140
+ if (memData) {
141
+ const mem = normalizeMemory({
142
+ id: String(memData.id || ''), content: String(memData.content || ''),
143
+ score: typeof memData.score === 'number' ? memData.score : undefined,
144
+ tier: typeof memData.tier === 'number' ? memData.tier : undefined,
145
+ type: typeof memData.type === 'string' ? memData.type : null,
146
+ tags: Array.isArray(memData.tags) ? memData.tags.filter((t) => typeof t === 'string') : [],
147
+ created_at: typeof memData.created_at === 'string' ? memData.created_at : undefined,
148
+ previous_memory_id: typeof memData.previous_memory_id === 'string' ? memData.previous_memory_id : null,
149
+ });
150
+ mem.workspace_id = config.workspaceId;
151
+ allMemories.push(mem);
152
+ }
153
+ }
154
+ catch { /* skip unfetchable includes */ }
155
+ }
156
+ }
157
+ // Remove excludes
158
+ allMemories = allMemories.filter(m => !excludeIds.has(m.id));
159
+ // Step 2: Temporal merge
160
+ const temporal = temporalMerge(allMemories);
161
+ const currentMemories = temporal.current;
162
+ provenanceLog.push({ step: 'temporal_merge', current: currentMemories.length, superseded: temporal.superseded.length });
163
+ // Step 3: Coverage check (best-effort, skip if slow)
164
+ let coverageRatio = null;
165
+ let gaps = [];
166
+ let suggestedQueries = [];
167
+ try {
168
+ const covRaw = await Promise.race([
169
+ api.post('/memory/coverage', { topic: intent, memory_ids: currentMemories.map(m => m.id) }),
170
+ new Promise(resolve => setTimeout(() => resolve(null), 2000)),
171
+ ]);
172
+ if (covRaw) {
173
+ const cov = validateCoverageResponse(covRaw, '/memory/coverage');
174
+ coverageRatio = cov.coverage_ratio;
175
+ gaps = cov.gaps;
176
+ suggestedQueries = cov.suggested_queries;
177
+ provenanceLog.push({ step: 'coverage_check', ratio: coverageRatio, gaps: gaps.length });
178
+ }
179
+ }
180
+ catch {
181
+ // Fallback: estimate from search
182
+ coverageRatio = null;
183
+ provenanceLog.push({ step: 'coverage_check', status: 'unavailable' });
184
+ }
185
+ // Step 4: Build sections by strategy priority
186
+ const sectionOrder = SECTION_PRIORITY[strategy];
187
+ const sections = [];
188
+ let usedTokens = 0;
189
+ const charBudget = budget * 4;
190
+ // Current state section
191
+ const currentContent = currentMemories.slice(0, 8).map(m => m.content).join('\n\n');
192
+ if (currentContent) {
193
+ const tokens = estimateTokens(currentContent);
194
+ const truncated = usedTokens + tokens > charBudget / 4 && sections.length > 0;
195
+ const finalContent = truncated ? currentContent.slice(0, Math.max(200, (charBudget - usedTokens * 4))) : currentContent;
196
+ sections.push({
197
+ label: 'current_state',
198
+ content: finalContent,
199
+ memory_ids: currentMemories.slice(0, 8).map(m => m.id),
200
+ confidence: coverageRatio !== null ? Math.min(0.95, coverageRatio + 0.1) : 0.7,
201
+ truncated,
202
+ });
203
+ usedTokens += estimateTokens(finalContent);
204
+ }
205
+ // Decisions section
206
+ const decisions = currentMemories.filter(m => /\b(decided|decision|chose|going with)\b/i.test(m.content));
207
+ if (decisions.length > 0 && usedTokens * 4 < charBudget * 0.8) {
208
+ const decContent = decisions.slice(0, 5).map(m => m.content).join('\n\n');
209
+ const finalContent = decContent.slice(0, Math.max(200, charBudget - usedTokens * 4));
210
+ sections.push({
211
+ label: 'key_decisions',
212
+ content: finalContent,
213
+ memory_ids: decisions.slice(0, 5).map(m => m.id),
214
+ confidence: 0.85,
215
+ truncated: finalContent.length < decContent.length,
216
+ });
217
+ usedTokens += estimateTokens(finalContent);
218
+ }
219
+ // Unknowns section (always included — anti-hallucination)
220
+ const gapDescriptions = gaps.map(g => g.preview).filter(Boolean);
221
+ const unknownsContent = gapDescriptions.length > 0
222
+ ? `No data retrieved for: ${gapDescriptions.slice(0, 5).join('; ')}`
223
+ : coverageRatio !== null && coverageRatio < 0.7
224
+ ? 'Coverage is below 70% — some relevant context may be missing.'
225
+ : '';
226
+ if (unknownsContent) {
227
+ sections.push({
228
+ label: 'unknowns',
229
+ content: unknownsContent,
230
+ memory_ids: [],
231
+ confidence: 1.0,
232
+ truncated: false,
233
+ });
234
+ usedTokens += estimateTokens(unknownsContent);
235
+ }
236
+ // Cache state for refine_context
237
+ const state = {
238
+ contextId, intent, strategy, memories: currentMemories,
239
+ gaps, coverageRatio, refinementCount: 0,
240
+ createdAt: Date.now(), ttlMs: contextTtlMs, provenance: provenanceLog,
241
+ };
242
+ contextCache.set(cacheKey(config.workspaceId, contextId), state);
243
+ const expiresAt = new Date(state.createdAt + contextTtlMs).toISOString();
244
+ return {
245
+ text: JSON.stringify(wrapResponse({
246
+ context_id: contextId,
247
+ context_package: {
248
+ sections,
249
+ token_count: usedTokens,
250
+ budget_used: Math.round((usedTokens / budget) * 100) / 100,
251
+ },
252
+ retrieval_metadata: {
253
+ memories_considered: allMemories.length + (excludeIds.size),
254
+ memories_included: currentMemories.length,
255
+ memories_excluded_superseded: temporal.superseded.length,
256
+ memories_excluded_budget: Math.max(0, currentMemories.length - 8),
257
+ coverage_ratio: coverageRatio,
258
+ temporal_span: {
259
+ from: temporal.temporal_context.oldest_memory,
260
+ to: temporal.temporal_context.newest_memory,
261
+ },
262
+ chain_count: temporal.temporal_context.chain_count,
263
+ },
264
+ anti_hallucination: {
265
+ explicit_gaps: gapDescriptions.slice(0, 10),
266
+ low_confidence_sections: sections.filter(s => s.confidence < 0.5).map(s => s.label),
267
+ contradictions_active: 0,
268
+ instruction: gaps.length > 0
269
+ ? 'Do NOT fill gaps listed above with inference. State them as unknown.'
270
+ : coverageRatio !== null && coverageRatio < 0.7
271
+ ? 'Coverage is incomplete. Qualify your answer and note what may be missing.'
272
+ : 'Context appears adequate for synthesis.',
273
+ suggested_queries: suggestedQueries,
274
+ },
275
+ provenance: { context_id: contextId, created_at: new Date().toISOString(), expires_at: expiresAt, intent, strategy, steps: provenanceLog },
276
+ }, config, {
277
+ data_absent: currentMemories.length === 0,
278
+ partial_context: coverageRatio !== null && coverageRatio < 0.5,
279
+ })),
280
+ };
281
+ }
282
+ if (name === 'velixar_refine_context') {
283
+ const contextId = args.context_id;
284
+ const state = getContext(config.workspaceId, contextId);
285
+ if (!state) {
286
+ return { text: JSON.stringify(wrapResponse({ error: 'Context expired or not found. Call velixar_prepare_context again.' }, config)), isError: true };
287
+ }
288
+ const actionsList = args.actions
289
+ ? args.actions
290
+ : (args.action && args.target)
291
+ ? [{ action: args.action, target: args.target, budget: args.additional_budget }]
292
+ : [];
293
+ if (actionsList.length === 0) {
294
+ return { text: JSON.stringify(wrapResponse({ error: 'Provide action+target or actions array.' }, config)), isError: true };
295
+ }
296
+ if (state.refinementCount + actionsList.length > MAX_REFINEMENTS) {
297
+ return { text: JSON.stringify(wrapResponse({ error: `Would exceed max ${MAX_REFINEMENTS} refinements (current: ${state.refinementCount}, requested: ${actionsList.length}).` }, config)), isError: true };
298
+ }
299
+ const existingIds = new Set(state.memories.map(m => m.id));
300
+ const results = [];
301
+ for (const act of actionsList) {
302
+ const additionalBudget = Math.min(act.budget || 1000, 2000);
303
+ let newMemories = [];
304
+ const params = new URLSearchParams({ q: act.target, user_id: config.userId, limit: '10' });
305
+ try {
306
+ const raw = await api.get(`/memory/search?${params}`, true);
307
+ const validated = validateSearchResponse(raw, '/memory/search');
308
+ newMemories = validated.memories
309
+ .map(m => { const mem = normalizeMemory(m); mem.workspace_id = config.workspaceId; return mem; })
310
+ .filter(m => !existingIds.has(m.id));
311
+ }
312
+ catch { /* empty */ }
313
+ const temporal = temporalMerge(newMemories);
314
+ const added = temporal.current.slice(0, 5);
315
+ state.memories.push(...added);
316
+ for (const m of added)
317
+ existingIds.add(m.id);
318
+ state.refinementCount++;
319
+ if (act.action === 'fill_gap') {
320
+ state.gaps = state.gaps.filter(g => !g.preview.toLowerCase().includes(act.target.toLowerCase()));
321
+ }
322
+ state.provenance.push({ step: 'refinement', action: act.action, target: act.target, memories_added: added.length, refinement_number: state.refinementCount });
323
+ const newContent = added.map(m => m.content).join('\n\n');
324
+ results.push({
325
+ action: act.action,
326
+ target: act.target,
327
+ memories_added: added.length,
328
+ new_section: newContent ? {
329
+ label: `${act.action}:${act.target}`,
330
+ content: newContent.slice(0, additionalBudget * 4),
331
+ memory_ids: added.map(m => m.id),
332
+ confidence: added.length >= 3 ? 0.8 : added.length >= 1 ? 0.6 : 0.3,
333
+ truncated: newContent.length > additionalBudget * 4,
334
+ } : null,
335
+ });
336
+ }
337
+ return {
338
+ text: JSON.stringify(wrapResponse({
339
+ context_id: contextId,
340
+ refinements: results,
341
+ remaining_gaps: state.gaps.map(g => g.preview),
342
+ refinements_remaining: MAX_REFINEMENTS - state.refinementCount,
343
+ }, config, {
344
+ data_absent: results.every(r => r.memories_added === 0),
345
+ })),
346
+ };
347
+ }
348
+ throw new Error(`Unknown construction tool: ${name}`);
349
+ }
350
+ //# sourceMappingURL=construction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"construction.js","sourceRoot":"","sources":["../../src/tools/construction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
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 getGraphTelemetry(): {
5
+ total_calls: number;
6
+ no_entity_calls: number;
7
+ listing_pct: number;
8
+ };
9
+ export declare const graphTools: Tool[];
10
+ export declare function handleGraphTool(name: string, args: Record<string, unknown>, api: ApiClient, config: ApiConfig): Promise<{
11
+ text: string;
12
+ isError?: boolean;
13
+ }>;
14
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/tools/graph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,wBAAgB,iBAAiB;;;;EAEhC;AAED,eAAO,MAAM,UAAU,EAAE,IAAI,EAwC5B,CAAC;AAEF,wBAAsB,eAAe,CACnC,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,CA+O9C"}