n2-qln 3.4.2 → 4.1.1

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 (57) hide show
  1. package/README.ko.md +459 -470
  2. package/README.md +459 -490
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.js +87 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/config.d.ts +9 -0
  7. package/{lib → dist/lib}/config.js +23 -27
  8. package/dist/lib/config.js.map +1 -0
  9. package/dist/lib/embedding.d.ts +28 -0
  10. package/{lib → dist/lib}/embedding.js +45 -47
  11. package/dist/lib/embedding.js.map +1 -0
  12. package/dist/lib/executor.d.ts +57 -0
  13. package/dist/lib/executor.js +175 -0
  14. package/dist/lib/executor.js.map +1 -0
  15. package/dist/lib/mcp-discovery.d.ts +83 -0
  16. package/dist/lib/mcp-discovery.js +206 -0
  17. package/dist/lib/mcp-discovery.js.map +1 -0
  18. package/dist/lib/provider-loader.d.ts +13 -0
  19. package/dist/lib/provider-loader.js +144 -0
  20. package/dist/lib/provider-loader.js.map +1 -0
  21. package/dist/lib/registry.d.ts +38 -0
  22. package/{lib → dist/lib}/registry.js +103 -101
  23. package/dist/lib/registry.js.map +1 -0
  24. package/dist/lib/router.d.ts +63 -0
  25. package/{lib → dist/lib}/router.js +75 -117
  26. package/dist/lib/router.js.map +1 -0
  27. package/dist/lib/schema.d.ts +20 -0
  28. package/{lib → dist/lib}/schema.js +38 -30
  29. package/dist/lib/schema.js.map +1 -0
  30. package/dist/lib/store.d.ts +48 -0
  31. package/dist/lib/store.js +234 -0
  32. package/dist/lib/store.js.map +1 -0
  33. package/dist/lib/validator.d.ts +37 -0
  34. package/dist/lib/validator.js +114 -0
  35. package/dist/lib/validator.js.map +1 -0
  36. package/dist/lib/vector-index.d.ts +37 -0
  37. package/{lib → dist/lib}/vector-index.js +19 -36
  38. package/dist/lib/vector-index.js.map +1 -0
  39. package/dist/tools/qln-call.d.ts +41 -0
  40. package/dist/tools/qln-call.js +353 -0
  41. package/dist/tools/qln-call.js.map +1 -0
  42. package/dist/tools/qln-helpers.d.ts +55 -0
  43. package/dist/tools/qln-helpers.js +88 -0
  44. package/dist/tools/qln-helpers.js.map +1 -0
  45. package/dist/types.d.ts +243 -0
  46. package/dist/types.js +4 -0
  47. package/dist/types.js.map +1 -0
  48. package/package.json +11 -4
  49. package/.github/FUNDING.yml +0 -3
  50. package/docs/README.md +0 -2
  51. package/docs/architecture.png +0 -0
  52. package/index.js +0 -80
  53. package/lib/executor.js +0 -104
  54. package/lib/provider-loader.js +0 -126
  55. package/lib/store.js +0 -217
  56. package/lib/validator.js +0 -171
  57. package/tools/qln-call.js +0 -257
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerQlnCall = registerQlnCall;
4
+ // QLN MCP tool — n2_qln_call (unified tool: search/exec/create/update/delete/discover)
5
+ // Single entry point for all QLN operations. ~200 tokens in AI context.
6
+ const validator_1 = require("../lib/validator");
7
+ const qln_helpers_1 = require("./qln-helpers");
8
+ /** Build Zod schema for n2_qln_call input */
9
+ function _buildSchema(z) {
10
+ return {
11
+ action: z.enum(['search', 'exec', 'auto', 'stats', 'create', 'update', 'delete', 'inject', 'discover'])
12
+ .describe('Action: search | exec | auto | stats | create | update | delete | inject | discover'),
13
+ query: z.string().optional().describe('[search] Natural language query'),
14
+ topK: z.number().optional().describe('[search] Number of results (default: 5, max: 20)'),
15
+ tool: z.string().optional().describe('[exec/update/delete] Tool name'),
16
+ args: z.record(z.unknown()).optional().describe('[exec] Tool arguments (JSON object)'),
17
+ name: z.string().optional().describe('[create/update] Tool name (unique identifier)'),
18
+ description: z.string().optional().describe('[create/update] Tool description'),
19
+ source: z.string().optional().describe('[create/update] Source: mcp, plugin, local'),
20
+ category: z.string().optional().describe('[create/update] Category: web, data, file, dev, ai, capture, misc'),
21
+ toolSchema: z.record(z.unknown()).optional().describe('[create/update] JSON Schema for tool input'),
22
+ tags: z.array(z.string()).optional().describe('[create/update] Additional search tags'),
23
+ provider: z.string().optional().describe('[create/update] Provider name'),
24
+ examples: z.array(z.string()).optional().describe('[create/update] Usage examples'),
25
+ endpoint: z.string().optional().describe('[create/update] Execution HTTP endpoint'),
26
+ tools: z.array(z.record(z.unknown())).optional().describe('[inject] Array of tool objects for bulk registration'),
27
+ servers: z.array(z.record(z.unknown())).optional().describe('[discover] MCP server configs: [{name, command, args}]'),
28
+ command: z.string().optional().describe('[discover] Single server command shorthand'),
29
+ };
30
+ }
31
+ /**
32
+ * Register the unified n2_qln_call MCP tool.
33
+ */
34
+ function registerQlnCall(server, z, router, executor, registry, discovery) {
35
+ const DESCRIPTION = 'Query Layer Network — unified tool dispatcher. Search 1000+ tools, execute them, or manage the index. Actions: search, exec, auto (search+exec), stats, create, update, delete, inject, discover (scan MCP servers).';
36
+ server.tool('n2_qln_call', DESCRIPTION, _buildSchema(z), async (rawParams) => {
37
+ const params = rawParams;
38
+ try {
39
+ switch (params.action) {
40
+ case 'search': return await _handleSearch(router, registry, params);
41
+ case 'exec': return await _handleExec(executor, registry, params);
42
+ case 'auto': return await _handleAuto(router, executor, registry, params);
43
+ case 'stats': return _handleStats(router, registry, executor);
44
+ case 'create': return await _handleCreate(registry, router, params);
45
+ case 'update': return await _handleUpdate(registry, router, params);
46
+ case 'delete': return await _handleDelete(registry, router, params);
47
+ case 'inject': return _handleInject(registry, router, params);
48
+ case 'discover': return await _handleDiscover(discovery, params);
49
+ default:
50
+ return (0, qln_helpers_1.error)(`Unknown action: ${params.action}`);
51
+ }
52
+ }
53
+ catch (err) {
54
+ const msg = err instanceof Error ? err.message : String(err);
55
+ return (0, qln_helpers_1.error)(`QLN internal error: ${msg}. Try the action again or use raw tool calls as fallback.`);
56
+ }
57
+ });
58
+ }
59
+ // ── Action Handlers ──
60
+ /** Stats: registry + router + usage dashboard + circuit breaker */
61
+ function _handleStats(router, registry, executor) {
62
+ const regStats = registry.stats();
63
+ const routerStats = router.stats();
64
+ const allTools = registry.getAll();
65
+ const topUsed = allTools.filter(t => t.usageCount > 0)
66
+ .sort((a, b) => b.usageCount - a.usageCount).slice(0, 10)
67
+ .map(t => ({ name: t.name, value: t.usageCount, detail: `calls (${Math.round(t.successRate * 100)}% success)` }));
68
+ const recentUsed = allTools.filter(t => t.lastUsedAt)
69
+ .sort((a, b) => (b.lastUsedAt || '').localeCompare(a.lastUsedAt || '')).slice(0, 5)
70
+ .map(t => ` ${t.name} — ${t.lastUsedAt}`).join('\n');
71
+ const tripped = executor.getTrippedCircuits();
72
+ const circuitLines = tripped.length > 0
73
+ ? tripped.map(c => ` ⚡ ${c.name}: ${c.state} (${c.failures} failures)`).join('\n')
74
+ : ' (all circuits healthy)';
75
+ const unstable = allTools.filter(t => t.consecutiveFailures >= 2)
76
+ .sort((a, b) => b.consecutiveFailures - a.consecutiveFailures).slice(0, 5)
77
+ .map(t => ` ⚠️ ${t.name}: ${t.consecutiveFailures} consecutive failures`).join('\n');
78
+ return (0, qln_helpers_1.text)(`📊 QLN Stats\n\n` +
79
+ `Tools: ${regStats.total} | Embedding: ${regStats.embeddingCoverage}\n` +
80
+ `BM25: ${routerStats.bm25.idfTerms} terms, avgDocLen ${routerStats.bm25.avgDocLen}\n` +
81
+ `Vector: ${routerStats.vectorIndex.tools} indexed, ${routerStats.vectorIndex.dimension}d, ${routerStats.vectorIndex.memoryKB}KB\n\n` +
82
+ `By source:\n${(0, qln_helpers_1.formatBreakdown)(regStats.bySource)}\n\n` +
83
+ `By category:\n${(0, qln_helpers_1.formatBreakdown)(regStats.byCategory)}\n\n` +
84
+ `Top used:\n${(0, qln_helpers_1.formatTopList)(topUsed, '(no usage data)')}\n\n` +
85
+ `Recently used:\n${recentUsed || ' (none)'}\n\n` +
86
+ `Circuit Breaker:\n${circuitLines}\n` +
87
+ (unstable ? `\nUnstable tools:\n${unstable}` : ''));
88
+ }
89
+ /** Auto: search → pick top → exec → fallback chain. */
90
+ async function _handleAuto(router, executor, registry, { query, args, topK }) {
91
+ if (!query)
92
+ return (0, qln_helpers_1.error)('Missing required param: query');
93
+ const k = Math.min(topK || 5, 20);
94
+ const { results, timing } = await router.route(query, { topK: k });
95
+ if (results.length === 0) {
96
+ const stats = registry.stats();
97
+ const cats = Object.entries(stats.byCategory).map(([c, n]) => `${c}(${n})`).join(', ');
98
+ return (0, qln_helpers_1.text)(`[auto] No tools found for: "${query}" (${timing.total}ms)\n\nCategories [${stats.total}]: ${cats || 'none'}\n→ Try a different keyword.`);
99
+ }
100
+ if (results[0].score < qln_helpers_1.CONFIDENCE_THRESHOLD) {
101
+ return (0, qln_helpers_1.formatAutoLowConfidence)(query, results, timing);
102
+ }
103
+ return await _execWithFallback(executor, registry, query, results, timing, args || {});
104
+ }
105
+ /** @internal Execute top candidates with fallback chain. */
106
+ async function _execWithFallback(executor, registry, query, results, timing, execArgs) {
107
+ const candidates = results.filter(r => r.score >= qln_helpers_1.CONFIDENCE_THRESHOLD).slice(0, qln_helpers_1.MAX_FALLBACK);
108
+ const failedAttempts = [];
109
+ for (let i = 0; i < candidates.length; i++) {
110
+ const candidate = candidates[i];
111
+ try {
112
+ const execResult = await executor.exec(candidate.name, execArgs);
113
+ registry.recordUsage(candidate.name, true);
114
+ const runnersUp = results.slice(i + 1, i + 4);
115
+ return (0, qln_helpers_1.formatAutoSuccess)(query, candidate, timing, execResult, runnersUp, failedAttempts);
116
+ }
117
+ catch (err) {
118
+ registry.recordUsage(candidate.name, false);
119
+ const msg = err instanceof Error ? err.message : String(err);
120
+ failedAttempts.push({ name: candidate.name, error: msg.slice(0, 50) });
121
+ }
122
+ }
123
+ const remaining = results.slice(candidates.length, candidates.length + 3)
124
+ .map(r => ({ name: r.name, score: r.score, description: r.description || '' }));
125
+ return (0, qln_helpers_1.formatAutoAllFailed)(query, failedAttempts, remaining);
126
+ }
127
+ /** Search tools by natural language query */
128
+ async function _handleSearch(router, registry, { query, topK }) {
129
+ if (!query)
130
+ return (0, qln_helpers_1.error)('Missing required param: query');
131
+ try {
132
+ const k = Math.min(topK || 5, 20);
133
+ const { results, timing } = await router.route(query, { topK: k });
134
+ if (results.length === 0) {
135
+ const stats = registry.stats();
136
+ const categories = Object.entries(stats.byCategory)
137
+ .map(([cat, count]) => `${cat}(${count})`)
138
+ .join(', ');
139
+ return (0, qln_helpers_1.text)(`No tools found for: "${query}" (${timing.total}ms)\n\n` +
140
+ `Available categories [${stats.total} tools]: ${categories || 'none'}\n` +
141
+ `→ Try a different keyword, or check available categories above.`);
142
+ }
143
+ const lines = results.map((r, i) => {
144
+ const schemaHint = r.inputSchema
145
+ ? ` | args: ${JSON.stringify(Object.keys(r.inputSchema?.['properties'] ?? r.inputSchema ?? {}))}`
146
+ : '';
147
+ return `${i + 1}. **${r.name}** (${r.score}) [${r.source}/${r.category}]${schemaHint}\n ${r.description || '(no description)'}`;
148
+ });
149
+ const top = results[0];
150
+ const hint = `\n→ Execute: n2_qln_call(action: "exec", tool: "${top.name}", args: {})`;
151
+ return (0, qln_helpers_1.text)(`Route "${query}" (${timing.total}ms, stages: T${timing.stage1}+K${timing.stage2}+S${timing.stage3}ms):\n\n` +
152
+ `${lines.join('\n\n')}${hint}`);
153
+ }
154
+ catch (err) {
155
+ const msg = err instanceof Error ? err.message : String(err);
156
+ return (0, qln_helpers_1.error)(`Search failed: ${msg}`);
157
+ }
158
+ }
159
+ /** Execute a tool by name */
160
+ async function _handleExec(executor, registry, { tool: toolName, args }) {
161
+ if (!toolName)
162
+ return (0, qln_helpers_1.error)('Missing required param: tool');
163
+ try {
164
+ const { result, source, elapsed } = await executor.exec(toolName, args || {});
165
+ registry.recordUsage(toolName, true);
166
+ const resultStr = typeof result === 'string'
167
+ ? result
168
+ : JSON.stringify(result, null, 2);
169
+ const truncated = resultStr.length > qln_helpers_1.MAX_RESULT_LENGTH
170
+ ? resultStr.substring(0, qln_helpers_1.MAX_RESULT_LENGTH) + '\n... (truncated)'
171
+ : resultStr;
172
+ return (0, qln_helpers_1.text)(`✅ [${toolName}] (${source}, ${elapsed}ms):\n${truncated}`);
173
+ }
174
+ catch (err) {
175
+ registry.recordUsage(toolName, false);
176
+ const msg = err instanceof Error ? err.message : String(err);
177
+ return { content: [{ type: 'text', text: `❌ [${toolName}] failed: ${msg}` }], isError: true };
178
+ }
179
+ }
180
+ /** Create (register) a new tool — with enforced validation */
181
+ async function _handleCreate(registry, router, params) {
182
+ const validation = (0, validator_1.validateToolEntry)(params, registry);
183
+ if (!validation.valid) {
184
+ return { content: [{ type: 'text', text: (0, validator_1.formatValidationErrors)(validation.errors) }], isError: true };
185
+ }
186
+ try {
187
+ const entry = registry.register({
188
+ name: params.name,
189
+ description: params.description,
190
+ source: params.source || 'local',
191
+ category: params.category || undefined,
192
+ provider: params.provider || '',
193
+ inputSchema: params.toolSchema,
194
+ tags: params.tags,
195
+ examples: params.examples || [],
196
+ endpoint: params.endpoint || '',
197
+ });
198
+ const indexResult = router.buildIndex();
199
+ const warnings = validation.errors.filter(e => e.severity === 'warning');
200
+ const warnMsg = warnings.length > 0
201
+ ? `\n${(0, validator_1.formatValidationErrors)(warnings)}`
202
+ : '';
203
+ return (0, qln_helpers_1.text)(`✅ Created: ${entry.name} [${entry.source}/${entry.category}]\n` +
204
+ `Provider: ${entry.provider || '(none)'}\n` +
205
+ `Triggers: ${entry.triggers.join(', ')}\n` +
206
+ `Examples: ${entry.examples.length}\n` +
207
+ `Index: ${indexResult.indexed} tools, ${indexResult.categories} categories${warnMsg}`);
208
+ }
209
+ catch (err) {
210
+ const msg = err instanceof Error ? err.message : String(err);
211
+ return (0, qln_helpers_1.error)(`Create failed: ${msg}`);
212
+ }
213
+ }
214
+ /** Update an existing tool — with validation */
215
+ async function _handleUpdate(registry, router, params) {
216
+ const toolName = params.tool || params.name;
217
+ if (!toolName)
218
+ return (0, qln_helpers_1.error)('Missing required param: tool (or name)');
219
+ const existing = registry.get(toolName);
220
+ if (!existing)
221
+ return (0, qln_helpers_1.error)(`Tool not found: ${toolName}`);
222
+ const validation = (0, validator_1.validateUpdateEntry)(params, existing);
223
+ if (!validation.valid) {
224
+ return { content: [{ type: 'text', text: (0, validator_1.formatValidationErrors)(validation.errors) }], isError: true };
225
+ }
226
+ try {
227
+ const entry = registry.register({
228
+ name: toolName,
229
+ description: params.description || existing.description,
230
+ source: params.source || existing.source,
231
+ category: params.category || existing.category,
232
+ provider: params.provider || existing.provider,
233
+ inputSchema: params.toolSchema || existing.inputSchema,
234
+ tags: params.tags || existing.tags,
235
+ examples: params.examples || existing.examples,
236
+ endpoint: params.endpoint || existing.endpoint,
237
+ });
238
+ const indexResult = router.buildIndex();
239
+ return (0, qln_helpers_1.text)(`✅ Updated: ${entry.name} [${entry.source}/${entry.category}]\n` +
240
+ `Provider: ${entry.provider || '(none)'}\n` +
241
+ `Triggers: ${entry.triggers.join(', ')}\n` +
242
+ `Index: ${indexResult.indexed} tools, ${indexResult.categories} categories`);
243
+ }
244
+ catch (err) {
245
+ const msg = err instanceof Error ? err.message : String(err);
246
+ return (0, qln_helpers_1.error)(`Update failed: ${msg}`);
247
+ }
248
+ }
249
+ /** Delete tool(s) — by name or by provider */
250
+ async function _handleDelete(registry, router, params) {
251
+ const toolName = params.tool || params.name;
252
+ // Provider-level delete
253
+ if (params.provider && !toolName) {
254
+ const count = registry.removeByProvider(params.provider);
255
+ if (count === 0)
256
+ return (0, qln_helpers_1.error)(`No tools found for provider: ${params.provider}`);
257
+ const indexResult = router.buildIndex();
258
+ return (0, qln_helpers_1.text)(`✅ Deleted ${count} tools from provider: ${params.provider}\n` +
259
+ `Index: ${indexResult.indexed} tools, ${indexResult.categories} categories`);
260
+ }
261
+ // Single tool delete
262
+ if (!toolName)
263
+ return (0, qln_helpers_1.error)('Missing required param: tool (or name). For bulk delete, use provider param.');
264
+ const removed = registry.remove(toolName);
265
+ if (!removed)
266
+ return (0, qln_helpers_1.error)(`Tool not found: ${toolName}`);
267
+ const indexResult = router.buildIndex();
268
+ return (0, qln_helpers_1.text)(`✅ Deleted: ${toolName}\n` +
269
+ `Index: ${indexResult.indexed} tools, ${indexResult.categories} categories`);
270
+ }
271
+ /** Inject: bulk register tools from array (e.g. MCP server boot) */
272
+ function _handleInject(registry, router, { tools, source, provider }) {
273
+ if (!tools || !Array.isArray(tools) || tools.length === 0) {
274
+ return (0, qln_helpers_1.error)('Missing required param: tools (array of tool objects with at least "name" and "description")');
275
+ }
276
+ let registered = 0;
277
+ let skipped = 0;
278
+ const errors = [];
279
+ for (const raw of tools) {
280
+ try {
281
+ if (!raw.name || typeof raw.name !== 'string') {
282
+ skipped++;
283
+ errors.push(`Skipped: missing name`);
284
+ continue;
285
+ }
286
+ registry.register({
287
+ name: raw.name,
288
+ description: raw.description || '',
289
+ source: raw.source || source || 'local',
290
+ category: raw.category || undefined,
291
+ provider: raw.provider || provider || '',
292
+ inputSchema: raw.inputSchema || null,
293
+ tags: raw.tags || [],
294
+ examples: raw.examples || [],
295
+ endpoint: raw.endpoint || '',
296
+ });
297
+ registered++;
298
+ }
299
+ catch (err) {
300
+ skipped++;
301
+ const msg = err instanceof Error ? err.message : String(err);
302
+ errors.push(`${raw.name || '?'}: ${msg}`);
303
+ }
304
+ }
305
+ const indexResult = router.buildIndex();
306
+ const errorMsg = errors.length > 0
307
+ ? `\n\nWarnings (${errors.length}):\n${errors.slice(0, 5).join('\n')}${errors.length > 5 ? `\n... and ${errors.length - 5} more` : ''}`
308
+ : '';
309
+ return (0, qln_helpers_1.text)(`✅ Injected: ${registered}/${tools.length} tools` +
310
+ `${skipped > 0 ? ` (${skipped} skipped)` : ''}\n` +
311
+ `Source: ${source || 'local'} | Provider: ${provider || '(none)'}\n` +
312
+ `Index: ${indexResult.indexed} tools, ${indexResult.categories} categories${errorMsg}`);
313
+ }
314
+ // ── MCP Auto-Discovery ──
315
+ /** Discover: scan MCP servers and auto-index their tools */
316
+ async function _handleDiscover(discovery, { servers, name, command, args }) {
317
+ if (!discovery) {
318
+ return (0, qln_helpers_1.error)('MCP Auto-Discovery not initialized. Pass McpDiscovery instance to registerQlnCall().');
319
+ }
320
+ const serverConfigs = _buildDiscoverConfigs(servers, name, command, args);
321
+ if (!serverConfigs) {
322
+ return (0, qln_helpers_1.error)('Missing params for discover. Provide:\n servers: [{name, command, args}]\n or: name + command + args');
323
+ }
324
+ for (const cfg of serverConfigs) {
325
+ if (!cfg.name || !cfg.command)
326
+ return (0, qln_helpers_1.error)(`Invalid config: name and command required. Got: ${JSON.stringify(cfg)}`);
327
+ if (!cfg.args)
328
+ cfg.args = [];
329
+ }
330
+ const result = await discovery.discoverAll(serverConfigs);
331
+ return _formatDiscoverResult(result);
332
+ }
333
+ /** @internal Parse discover params into server configs. */
334
+ function _buildDiscoverConfigs(servers, name, command, args) {
335
+ if (servers && Array.isArray(servers))
336
+ return servers;
337
+ if (command) {
338
+ return [{ name: name || 'default', command, args: (args ? Object.values(args).map(String) : []) }];
339
+ }
340
+ return null;
341
+ }
342
+ /** @internal Format discovery results for MCP response. */
343
+ function _formatDiscoverResult(result) {
344
+ const lines = result.servers.map(s => {
345
+ if (s.status === 'success') {
346
+ const list = s.tools.length <= 10 ? s.tools.join(', ') : s.tools.slice(0, 10).join(', ') + ` ... +${s.tools.length - 10} more`;
347
+ return ` ✅ ${s.server}: ${s.toolCount} tools (${s.elapsed}ms)\n ${list}`;
348
+ }
349
+ return ` ❌ ${s.server}: ${s.status} — ${s.error || 'unknown'} (${s.elapsed}ms)`;
350
+ }).join('\n');
351
+ return (0, qln_helpers_1.text)(`🔍 MCP Auto-Discovery Complete\n\nServers: ${result.servers.length} | Tools: ${result.registered} (${result.elapsed}ms)\n\n${lines}\n\n→ Search: n2_qln_call(action: "search", query: "...")`);
352
+ }
353
+ //# sourceMappingURL=qln-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qln-call.js","sourceRoot":"","sources":["../../src/tools/qln-call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { McpToolResponse } from '../types';
2
+ /** Max result text length before truncation */
3
+ export declare const MAX_RESULT_LENGTH = 4000;
4
+ /** Confidence threshold for auto-execution */
5
+ export declare const CONFIDENCE_THRESHOLD = 2;
6
+ /** Max fallback candidates in auto mode */
7
+ export declare const MAX_FALLBACK = 3;
8
+ export declare function text(msg: string): McpToolResponse;
9
+ export declare function error(message: string): McpToolResponse;
10
+ /** Format ranked list of tools by a numeric field */
11
+ export declare function formatTopList(items: Array<{
12
+ name: string;
13
+ value: number;
14
+ detail: string;
15
+ }>, emptyMsg: string): string;
16
+ /** Format key-value breakdown (source/category counts) */
17
+ export declare function formatBreakdown(entries: Record<string, number>): string;
18
+ /** Format successful auto-execution result */
19
+ export declare function formatAutoSuccess(query: string, candidate: {
20
+ name: string;
21
+ score: number;
22
+ }, timing: {
23
+ total: number;
24
+ }, execResult: {
25
+ result: unknown;
26
+ source: string;
27
+ elapsed: number;
28
+ }, runnersUp: Array<{
29
+ name: string;
30
+ score: number;
31
+ }>, fallbackAttempts: Array<{
32
+ name: string;
33
+ error: string;
34
+ }>): McpToolResponse;
35
+ /** Format all-candidates-failed result */
36
+ export declare function formatAutoAllFailed(query: string, failedAttempts: Array<{
37
+ name: string;
38
+ error: string;
39
+ }>, remaining: Array<{
40
+ name: string;
41
+ score: number;
42
+ description: string;
43
+ }>): McpToolResponse;
44
+ /** Format low-confidence search-only result */
45
+ export declare function formatAutoLowConfidence(query: string, results: Array<{
46
+ name: string;
47
+ score: number;
48
+ source: string;
49
+ category: string;
50
+ description?: string;
51
+ inputSchema?: unknown;
52
+ }>, timing: {
53
+ total: number;
54
+ }): McpToolResponse;
55
+ //# sourceMappingURL=qln-helpers.d.ts.map
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_FALLBACK = exports.CONFIDENCE_THRESHOLD = exports.MAX_RESULT_LENGTH = void 0;
4
+ exports.text = text;
5
+ exports.error = error;
6
+ exports.formatTopList = formatTopList;
7
+ exports.formatBreakdown = formatBreakdown;
8
+ exports.formatAutoSuccess = formatAutoSuccess;
9
+ exports.formatAutoAllFailed = formatAutoAllFailed;
10
+ exports.formatAutoLowConfidence = formatAutoLowConfidence;
11
+ // ── Constants ──
12
+ /** Max result text length before truncation */
13
+ exports.MAX_RESULT_LENGTH = 4000;
14
+ /** Confidence threshold for auto-execution */
15
+ exports.CONFIDENCE_THRESHOLD = 2.0;
16
+ /** Max fallback candidates in auto mode */
17
+ exports.MAX_FALLBACK = 3;
18
+ // ── Response Helpers ──
19
+ function text(msg) {
20
+ return { content: [{ type: 'text', text: msg }] };
21
+ }
22
+ function error(message) {
23
+ return { content: [{ type: 'text', text: `⚠️ ${message}` }], isError: true };
24
+ }
25
+ // ── Stats Formatters ──
26
+ /** Format ranked list of tools by a numeric field */
27
+ function formatTopList(items, emptyMsg) {
28
+ if (items.length === 0)
29
+ return ` ${emptyMsg}`;
30
+ return items.map((t, i) => ` ${i + 1}. ${t.name} — ${t.value} ${t.detail}`).join('\n');
31
+ }
32
+ /** Format key-value breakdown (source/category counts) */
33
+ function formatBreakdown(entries) {
34
+ return Object.entries(entries)
35
+ .sort((a, b) => b[1] - a[1])
36
+ .map(([key, count]) => ` ${key}: ${count}`)
37
+ .join('\n') || ' (none)';
38
+ }
39
+ // ── Auto Result Formatters ──
40
+ /** Format successful auto-execution result */
41
+ function formatAutoSuccess(query, candidate, timing, execResult, runnersUp, fallbackAttempts) {
42
+ const resultStr = typeof execResult.result === 'string'
43
+ ? execResult.result
44
+ : JSON.stringify(execResult.result, null, 2);
45
+ const truncated = resultStr.length > exports.MAX_RESULT_LENGTH
46
+ ? resultStr.substring(0, exports.MAX_RESULT_LENGTH) + '\n... (truncated)'
47
+ : resultStr;
48
+ const altHint = runnersUp.length > 0
49
+ ? `\n\nAlternatives: ${runnersUp.map(r => `${r.name}(${r.score})`).join(', ')}`
50
+ : '';
51
+ const fallbackHint = fallbackAttempts.length > 0
52
+ ? `\n⚡ Fallback: ${fallbackAttempts.map(f => `${f.name}(${f.error})`).join(' → ')} → **${candidate.name}**`
53
+ : '';
54
+ return text(`[auto] "${query}" → **${candidate.name}** (score: ${candidate.score}, ` +
55
+ `${timing.total}ms search + ${execResult.elapsed}ms exec, ${execResult.source})${fallbackHint}\n\n` +
56
+ `${truncated}${altHint}`);
57
+ }
58
+ /** Format all-candidates-failed result */
59
+ function formatAutoAllFailed(query, failedAttempts, remaining) {
60
+ const failedSummary = failedAttempts
61
+ .map((f, i) => `${i + 1}. ${f.name}: ${f.error}`)
62
+ .join('\n');
63
+ const remainingLines = remaining
64
+ .map((r, i) => `${i + 1}. **${r.name}** (${r.score}) — ${r.description || '(no description)'}`)
65
+ .join('\n');
66
+ return {
67
+ content: [{
68
+ type: 'text',
69
+ text: `[auto] All ${failedAttempts.length} candidates failed for "${query}":\n${failedSummary}\n\n` +
70
+ (remainingLines ? `Other options:\n${remainingLines}\n\n` : '') +
71
+ `→ Try: n2_qln_call(action: "search", query: "${query}")`,
72
+ }],
73
+ isError: true,
74
+ };
75
+ }
76
+ /** Format low-confidence search-only result */
77
+ function formatAutoLowConfidence(query, results, timing) {
78
+ const lines = results.map((r, i) => {
79
+ const schemaHint = r.inputSchema
80
+ ? ` | args: ${JSON.stringify(Object.keys(r.inputSchema?.['properties'] ?? r.inputSchema ?? {}))}`
81
+ : '';
82
+ return `${i + 1}. **${r.name}** (${r.score}) [${r.source}/${r.category}]${schemaHint}\n ${r.description || '(no description)'}`;
83
+ });
84
+ return text(`[auto] Low confidence — returning search results instead (top: ${results[0]?.score}, threshold: ${exports.CONFIDENCE_THRESHOLD})\n\n` +
85
+ `Route "${query}" (${timing.total}ms):\n\n${lines.join('\n\n')}\n\n` +
86
+ `→ Execute manually: n2_qln_call(action: "exec", tool: "${results[0]?.name}", args: {})`);
87
+ }
88
+ //# sourceMappingURL=qln-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qln-helpers.js","sourceRoot":"","sources":["../../src/tools/qln-helpers.ts"],"names":[],"mappings":"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"}