@neurynae/toolcairn-mcp 0.1.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 (102) hide show
  1. package/bin/toolpilot-mcp.js +5 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +45 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/middleware/event-logger.d.ts +19 -0
  7. package/dist/middleware/event-logger.d.ts.map +1 -0
  8. package/dist/middleware/event-logger.js +138 -0
  9. package/dist/middleware/event-logger.js.map +1 -0
  10. package/dist/schemas.d.ts +2 -0
  11. package/dist/schemas.d.ts.map +1 -0
  12. package/dist/schemas.js +3 -0
  13. package/dist/schemas.js.map +1 -0
  14. package/dist/server.d.ts +3 -0
  15. package/dist/server.d.ts.map +1 -0
  16. package/dist/server.js +116 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/server.prod.d.ts +14 -0
  19. package/dist/server.prod.d.ts.map +1 -0
  20. package/dist/server.prod.js +127 -0
  21. package/dist/server.prod.js.map +1 -0
  22. package/dist/templates/agent-instructions.d.ts +22 -0
  23. package/dist/templates/agent-instructions.d.ts.map +1 -0
  24. package/dist/templates/agent-instructions.js +155 -0
  25. package/dist/templates/agent-instructions.js.map +1 -0
  26. package/dist/tools/check-compatibility.d.ts +100 -0
  27. package/dist/tools/check-compatibility.d.ts.map +1 -0
  28. package/dist/tools/check-compatibility.js +103 -0
  29. package/dist/tools/check-compatibility.js.map +1 -0
  30. package/dist/tools/check-issue.d.ts +126 -0
  31. package/dist/tools/check-issue.d.ts.map +1 -0
  32. package/dist/tools/check-issue.js +248 -0
  33. package/dist/tools/check-issue.js.map +1 -0
  34. package/dist/tools/classify-prompt.d.ts +101 -0
  35. package/dist/tools/classify-prompt.d.ts.map +1 -0
  36. package/dist/tools/classify-prompt.js +64 -0
  37. package/dist/tools/classify-prompt.js.map +1 -0
  38. package/dist/tools/compare-tools.d.ts +102 -0
  39. package/dist/tools/compare-tools.d.ts.map +1 -0
  40. package/dist/tools/compare-tools.js +178 -0
  41. package/dist/tools/compare-tools.js.map +1 -0
  42. package/dist/tools/format-results.d.ts +44 -0
  43. package/dist/tools/format-results.d.ts.map +1 -0
  44. package/dist/tools/format-results.js +114 -0
  45. package/dist/tools/format-results.js.map +1 -0
  46. package/dist/tools/generate-tracker.d.ts +7 -0
  47. package/dist/tools/generate-tracker.d.ts.map +1 -0
  48. package/dist/tools/generate-tracker.js +408 -0
  49. package/dist/tools/generate-tracker.js.map +1 -0
  50. package/dist/tools/get-stack.d.ts +105 -0
  51. package/dist/tools/get-stack.d.ts.map +1 -0
  52. package/dist/tools/get-stack.js +156 -0
  53. package/dist/tools/get-stack.js.map +1 -0
  54. package/dist/tools/init-project-config.d.ts +107 -0
  55. package/dist/tools/init-project-config.d.ts.map +1 -0
  56. package/dist/tools/init-project-config.js +52 -0
  57. package/dist/tools/init-project-config.js.map +1 -0
  58. package/dist/tools/read-project-config.d.ts +99 -0
  59. package/dist/tools/read-project-config.d.ts.map +1 -0
  60. package/dist/tools/read-project-config.js +78 -0
  61. package/dist/tools/read-project-config.js.map +1 -0
  62. package/dist/tools/refine-requirement.d.ts +105 -0
  63. package/dist/tools/refine-requirement.d.ts.map +1 -0
  64. package/dist/tools/refine-requirement.js +77 -0
  65. package/dist/tools/refine-requirement.js.map +1 -0
  66. package/dist/tools/report-outcome.d.ts +104 -0
  67. package/dist/tools/report-outcome.d.ts.map +1 -0
  68. package/dist/tools/report-outcome.js +108 -0
  69. package/dist/tools/report-outcome.js.map +1 -0
  70. package/dist/tools/search-tools-respond.d.ts +103 -0
  71. package/dist/tools/search-tools-respond.d.ts.map +1 -0
  72. package/dist/tools/search-tools-respond.js +91 -0
  73. package/dist/tools/search-tools-respond.js.map +1 -0
  74. package/dist/tools/search-tools.d.ts +104 -0
  75. package/dist/tools/search-tools.d.ts.map +1 -0
  76. package/dist/tools/search-tools.js +77 -0
  77. package/dist/tools/search-tools.js.map +1 -0
  78. package/dist/tools/suggest-graph-update.d.ts +117 -0
  79. package/dist/tools/suggest-graph-update.d.ts.map +1 -0
  80. package/dist/tools/suggest-graph-update.js +177 -0
  81. package/dist/tools/suggest-graph-update.js.map +1 -0
  82. package/dist/tools/toolpilot-init.d.ts +103 -0
  83. package/dist/tools/toolpilot-init.d.ts.map +1 -0
  84. package/dist/tools/toolpilot-init.js +115 -0
  85. package/dist/tools/toolpilot-init.js.map +1 -0
  86. package/dist/tools/update-project-config.d.ts +104 -0
  87. package/dist/tools/update-project-config.d.ts.map +1 -0
  88. package/dist/tools/update-project-config.js +117 -0
  89. package/dist/tools/update-project-config.js.map +1 -0
  90. package/dist/tools/verify-suggestion.d.ts +113 -0
  91. package/dist/tools/verify-suggestion.d.ts.map +1 -0
  92. package/dist/tools/verify-suggestion.js +223 -0
  93. package/dist/tools/verify-suggestion.js.map +1 -0
  94. package/dist/transport.d.ts +5 -0
  95. package/dist/transport.d.ts.map +1 -0
  96. package/dist/transport.js +13 -0
  97. package/dist/transport.js.map +1 -0
  98. package/dist/utils.d.ts +4 -0
  99. package/dist/utils.d.ts.map +1 -0
  100. package/dist/utils.js +12 -0
  101. package/dist/utils.js.map +1 -0
  102. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-outcome.d.ts","sourceRoot":"","sources":["../../src/tools/report-outcome.ts"],"names":[],"mappings":"AAwEA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DA"}
@@ -0,0 +1,108 @@
1
+ import { PrismaClient } from '@toolpilot/db';
2
+ import { MemgraphToolRepository, buildDecrementEdgeWeightQuery, buildIncrementEdgeWeightQuery, getMemgraphSession, } from '@toolpilot/graph';
3
+ import { enqueueIndexJob } from '@toolpilot/queue';
4
+ import pino from 'pino';
5
+ import { errResult, okResult } from '../utils.js';
6
+ const logger = pino({ name: '@toolpilot/mcp-server:report-outcome' });
7
+ const prisma = new PrismaClient();
8
+ const repo = new MemgraphToolRepository();
9
+ // How much to shift edge weights per outcome report
10
+ const WEIGHT_DELTA_SUCCESS = 0.05;
11
+ const WEIGHT_DELTA_FAILURE = 0.05;
12
+ async function adjustSolvesEdge(toolName, delta, direction) {
13
+ // Find the tool in Memgraph to get its ID
14
+ const toolResult = await repo.findByName(toolName);
15
+ if (!toolResult.ok || !toolResult.data)
16
+ return;
17
+ const edgeType = 'SOLVES';
18
+ const session = getMemgraphSession();
19
+ try {
20
+ const { text, parameters } = direction === 'up'
21
+ ? buildIncrementEdgeWeightQuery(edgeType, delta)
22
+ : buildDecrementEdgeWeightQuery(edgeType, delta);
23
+ // Run with both tool name variants (it solves some use case)
24
+ await session.run(text, {
25
+ ...parameters,
26
+ name_a: toolName,
27
+ name_b: toolName, // SOLVES edges go tool→usecase; we adjust any outgoing SOLVES
28
+ });
29
+ }
30
+ catch (e) {
31
+ logger.warn({ err: e, tool: toolName }, 'Failed to adjust SOLVES edge weight');
32
+ }
33
+ finally {
34
+ await session.close();
35
+ }
36
+ }
37
+ async function stageReplacesEdge(oldTool, newTool, queryId) {
38
+ try {
39
+ await prisma.stagedEdge.create({
40
+ data: {
41
+ edge_type: 'REPLACES',
42
+ source_node_id: newTool,
43
+ target_node_id: oldTool,
44
+ edge_data: {
45
+ evidence: `User replaced ${oldTool} with ${newTool} in session ${queryId}`,
46
+ confidence: 0.6,
47
+ },
48
+ confidence: 0.6,
49
+ source: 'usage_data',
50
+ supporting_queries: [queryId],
51
+ },
52
+ });
53
+ logger.info({ old: oldTool, new: newTool }, 'REPLACES edge staged');
54
+ }
55
+ catch (e) {
56
+ logger.warn({ err: e }, 'Failed to stage REPLACES edge');
57
+ }
58
+ }
59
+ export async function handleReportOutcome(args) {
60
+ try {
61
+ await prisma.outcomeReport.create({
62
+ data: {
63
+ query_id: args.query_id,
64
+ chosen_tool: args.chosen_tool,
65
+ reason: args.reason,
66
+ outcome: args.outcome,
67
+ feedback: args.feedback,
68
+ },
69
+ });
70
+ const graphActions = [];
71
+ if (args.outcome === 'success') {
72
+ // Strengthen SOLVES edges asynchronously — never block the response
73
+ adjustSolvesEdge(args.chosen_tool, WEIGHT_DELTA_SUCCESS, 'up').catch((e) => {
74
+ logger.warn({ err: e }, 'Background edge weight update failed');
75
+ });
76
+ graphActions.push(`SOLVES weight +${WEIGHT_DELTA_SUCCESS} for ${args.chosen_tool}`);
77
+ }
78
+ if (args.outcome === 'failure') {
79
+ // Weaken edges + trigger re-index to refresh health signals
80
+ adjustSolvesEdge(args.chosen_tool, WEIGHT_DELTA_FAILURE, 'down').catch((e) => {
81
+ logger.warn({ err: e }, 'Background edge weight update failed');
82
+ });
83
+ const result = await enqueueIndexJob(args.chosen_tool, 1);
84
+ if (!result.ok) {
85
+ logger.warn({ tool: args.chosen_tool, err: result.error }, 'Failed to enqueue re-index');
86
+ }
87
+ graphActions.push(`SOLVES weight -${WEIGHT_DELTA_FAILURE} for ${args.chosen_tool}`, 're-index queued');
88
+ }
89
+ if (args.outcome === 'replaced' && args.replaced_by) {
90
+ // Stage a REPLACES edge between the new tool and the old one
91
+ stageReplacesEdge(args.chosen_tool, args.replaced_by, args.query_id).catch((e) => {
92
+ logger.warn({ err: e }, 'Background REPLACES staging failed');
93
+ });
94
+ graphActions.push(`REPLACES edge staged: ${args.replaced_by} → ${args.chosen_tool}`);
95
+ }
96
+ logger.info({ query_id: args.query_id, outcome: args.outcome, graphActions }, 'Outcome recorded');
97
+ return okResult({
98
+ recorded: true,
99
+ outcome: args.outcome,
100
+ graph_actions: graphActions,
101
+ });
102
+ }
103
+ catch (e) {
104
+ logger.error({ err: e, query_id: args.query_id }, 'Failed to record outcome');
105
+ return errResult('storage_error', e instanceof Error ? e.message : String(e));
106
+ }
107
+ }
108
+ //# sourceMappingURL=report-outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-outcome.js","sourceRoot":"","sources":["../../src/tools/report-outcome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ export declare function handleSearchToolsRespond(args: {
2
+ query_id: string;
3
+ answers: Array<{
4
+ dimension: string;
5
+ value: string;
6
+ }>;
7
+ }): Promise<{
8
+ [x: string]: unknown;
9
+ content: ({
10
+ type: "text";
11
+ text: string;
12
+ annotations?: {
13
+ audience?: ("user" | "assistant")[] | undefined;
14
+ priority?: number | undefined;
15
+ lastModified?: string | undefined;
16
+ } | undefined;
17
+ _meta?: {
18
+ [x: string]: unknown;
19
+ } | undefined;
20
+ } | {
21
+ type: "image";
22
+ data: string;
23
+ mimeType: string;
24
+ annotations?: {
25
+ audience?: ("user" | "assistant")[] | undefined;
26
+ priority?: number | undefined;
27
+ lastModified?: string | undefined;
28
+ } | undefined;
29
+ _meta?: {
30
+ [x: string]: unknown;
31
+ } | undefined;
32
+ } | {
33
+ type: "audio";
34
+ data: string;
35
+ mimeType: string;
36
+ annotations?: {
37
+ audience?: ("user" | "assistant")[] | undefined;
38
+ priority?: number | undefined;
39
+ lastModified?: string | undefined;
40
+ } | undefined;
41
+ _meta?: {
42
+ [x: string]: unknown;
43
+ } | undefined;
44
+ } | {
45
+ uri: string;
46
+ name: string;
47
+ type: "resource_link";
48
+ description?: string | undefined;
49
+ mimeType?: string | undefined;
50
+ annotations?: {
51
+ audience?: ("user" | "assistant")[] | undefined;
52
+ priority?: number | undefined;
53
+ lastModified?: string | undefined;
54
+ } | undefined;
55
+ _meta?: {
56
+ [x: string]: unknown;
57
+ } | undefined;
58
+ icons?: {
59
+ src: string;
60
+ mimeType?: string | undefined;
61
+ sizes?: string[] | undefined;
62
+ theme?: "light" | "dark" | undefined;
63
+ }[] | undefined;
64
+ title?: string | undefined;
65
+ } | {
66
+ type: "resource";
67
+ resource: {
68
+ uri: string;
69
+ text: string;
70
+ mimeType?: string | undefined;
71
+ _meta?: {
72
+ [x: string]: unknown;
73
+ } | undefined;
74
+ } | {
75
+ uri: string;
76
+ blob: string;
77
+ mimeType?: string | undefined;
78
+ _meta?: {
79
+ [x: string]: unknown;
80
+ } | undefined;
81
+ };
82
+ annotations?: {
83
+ audience?: ("user" | "assistant")[] | undefined;
84
+ priority?: number | undefined;
85
+ lastModified?: string | undefined;
86
+ } | undefined;
87
+ _meta?: {
88
+ [x: string]: unknown;
89
+ } | undefined;
90
+ })[];
91
+ _meta?: {
92
+ [x: string]: unknown;
93
+ progressToken?: string | number | undefined;
94
+ "io.modelcontextprotocol/related-task"?: {
95
+ taskId: string;
96
+ } | undefined;
97
+ } | undefined;
98
+ structuredContent?: {
99
+ [x: string]: unknown;
100
+ } | undefined;
101
+ isError?: boolean | undefined;
102
+ }>;
103
+ //# sourceMappingURL=search-tools-respond.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools-respond.d.ts","sourceRoot":"","sources":["../../src/tools/search-tools-respond.ts"],"names":[],"mappings":"AAgBA,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8GA"}
@@ -0,0 +1,91 @@
1
+ import { PrismaClient } from '@toolpilot/db';
2
+ import { ClarificationEngine, SearchPipeline, SearchSessionManager } from '@toolpilot/search';
3
+ import pino from 'pino';
4
+ import { errResult, okResult } from '../utils.js';
5
+ import { buildLowCredibilityWarning, buildNonIndexedGuidance, formatResults, } from './format-results.js';
6
+ const logger = pino({ name: '@toolpilot/mcp-server:search-tools-respond' });
7
+ const prisma = new PrismaClient();
8
+ const sessionManager = new SearchSessionManager(prisma);
9
+ const pipeline = new SearchPipeline(sessionManager);
10
+ const clarificationEngine = new ClarificationEngine();
11
+ export async function handleSearchToolsRespond(args) {
12
+ try {
13
+ const session = await sessionManager.getSession(args.query_id);
14
+ if (!session) {
15
+ return errResult('session_not_found', `No session found for query_id: ${args.query_id}`);
16
+ }
17
+ logger.info({ sessionId: args.query_id, answerCount: args.answers.length }, 'search_tools_respond called');
18
+ // Load saved Stage 1 candidates
19
+ const candidateIds = await sessionManager.getCandidates(args.query_id);
20
+ if (candidateIds.length === 0) {
21
+ return errResult('no_candidates', 'No saved candidates for this session. Call search_tools first.');
22
+ }
23
+ // Build updated context from clarification answers
24
+ const filterUpdates = {};
25
+ for (const answer of args.answers) {
26
+ filterUpdates[answer.dimension] = answer.value;
27
+ }
28
+ const prevContext = session.context ?? {};
29
+ const updatedContext = {
30
+ ...prevContext, // preserve stage1_ids and any other session fields
31
+ filters: {
32
+ ...(prevContext.filters ?? {}),
33
+ ...filterUpdates,
34
+ },
35
+ };
36
+ await sessionManager.updateContext(args.query_id, updatedContext);
37
+ await sessionManager.appendClarification(args.query_id, [], args.answers);
38
+ // Get all dimensions asked so far (including this round's answers)
39
+ const allAskedDimensions = await sessionManager.getAskedDimensions(args.query_id);
40
+ // Check if another clarification round is warranted (max 3 rounds)
41
+ if (allAskedDimensions.size < 3) {
42
+ // Filter corpus by the answers just given to produce an updated candidate set
43
+ const corpus = await pipeline.loadToolCorpus();
44
+ const idSet = new Set(candidateIds);
45
+ const candidateTools = corpus.filter((t) => idSet.has(t.id));
46
+ const filteredCandidates = clarificationEngine.applyAnswers(candidateTools, args.answers);
47
+ const nextQuestions = clarificationEngine.getClarification(filteredCandidates, allAskedDimensions);
48
+ if (nextQuestions.length > 0) {
49
+ // Persist the questions (no answers yet) for this upcoming round
50
+ await sessionManager.appendClarification(args.query_id, nextQuestions, []);
51
+ const clarificationRound = allAskedDimensions.size + 1;
52
+ logger.info({
53
+ sessionId: args.query_id,
54
+ clarificationRound,
55
+ questionCount: nextQuestions.length,
56
+ }, 'search_tools_respond: next clarification round');
57
+ return okResult({
58
+ done: false,
59
+ query_id: args.query_id,
60
+ status: 'clarification_needed',
61
+ stage: 2,
62
+ clarification_round: clarificationRound,
63
+ questions: nextQuestions,
64
+ });
65
+ }
66
+ }
67
+ // No more clarification needed — run stages 2-4 with saved candidates + updated context filters
68
+ const { results, is_two_option } = await pipeline.runStages2to4(candidateIds, updatedContext, args.query_id);
69
+ logger.info({ sessionId: args.query_id, resultCount: results.length }, 'search_tools_respond complete');
70
+ const sessionForQuery = await sessionManager.getSession(args.query_id);
71
+ const originalQuery = sessionForQuery?.query ?? '';
72
+ const formattedResults = formatResults(results, is_two_option);
73
+ const nonIndexedGuidance = buildNonIndexedGuidance(formattedResults, originalQuery);
74
+ const credibilityWarning = buildLowCredibilityWarning(formattedResults);
75
+ return okResult({
76
+ done: true,
77
+ query_id: args.query_id,
78
+ status: 'complete',
79
+ stage: 4,
80
+ results: formattedResults,
81
+ is_two_option,
82
+ ...(nonIndexedGuidance ? { non_indexed_guidance: nonIndexedGuidance } : {}),
83
+ ...(credibilityWarning ? { credibility_warning: credibilityWarning } : {}),
84
+ });
85
+ }
86
+ catch (e) {
87
+ logger.error({ err: e, query_id: args.query_id }, 'search_tools_respond failed');
88
+ return errResult('search_error', e instanceof Error ? e.message : String(e));
89
+ }
90
+ }
91
+ //# sourceMappingURL=search-tools-respond.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools-respond.js","sourceRoot":"","sources":["../../src/tools/search-tools-respond.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ export declare function handleSearchTools(args: {
2
+ query: string;
3
+ context?: {
4
+ filters: Record<string, unknown>;
5
+ };
6
+ query_id?: string;
7
+ user_id?: string;
8
+ }): Promise<{
9
+ [x: string]: unknown;
10
+ content: ({
11
+ type: "text";
12
+ text: string;
13
+ annotations?: {
14
+ audience?: ("user" | "assistant")[] | undefined;
15
+ priority?: number | undefined;
16
+ lastModified?: string | undefined;
17
+ } | undefined;
18
+ _meta?: {
19
+ [x: string]: unknown;
20
+ } | undefined;
21
+ } | {
22
+ type: "image";
23
+ data: string;
24
+ mimeType: string;
25
+ annotations?: {
26
+ audience?: ("user" | "assistant")[] | undefined;
27
+ priority?: number | undefined;
28
+ lastModified?: string | undefined;
29
+ } | undefined;
30
+ _meta?: {
31
+ [x: string]: unknown;
32
+ } | undefined;
33
+ } | {
34
+ type: "audio";
35
+ data: string;
36
+ mimeType: string;
37
+ annotations?: {
38
+ audience?: ("user" | "assistant")[] | undefined;
39
+ priority?: number | undefined;
40
+ lastModified?: string | undefined;
41
+ } | undefined;
42
+ _meta?: {
43
+ [x: string]: unknown;
44
+ } | undefined;
45
+ } | {
46
+ uri: string;
47
+ name: string;
48
+ type: "resource_link";
49
+ description?: string | undefined;
50
+ mimeType?: string | undefined;
51
+ annotations?: {
52
+ audience?: ("user" | "assistant")[] | undefined;
53
+ priority?: number | undefined;
54
+ lastModified?: string | undefined;
55
+ } | undefined;
56
+ _meta?: {
57
+ [x: string]: unknown;
58
+ } | undefined;
59
+ icons?: {
60
+ src: string;
61
+ mimeType?: string | undefined;
62
+ sizes?: string[] | undefined;
63
+ theme?: "light" | "dark" | undefined;
64
+ }[] | undefined;
65
+ title?: string | undefined;
66
+ } | {
67
+ type: "resource";
68
+ resource: {
69
+ uri: string;
70
+ text: string;
71
+ mimeType?: string | undefined;
72
+ _meta?: {
73
+ [x: string]: unknown;
74
+ } | undefined;
75
+ } | {
76
+ uri: string;
77
+ blob: string;
78
+ mimeType?: string | undefined;
79
+ _meta?: {
80
+ [x: string]: unknown;
81
+ } | undefined;
82
+ };
83
+ annotations?: {
84
+ audience?: ("user" | "assistant")[] | undefined;
85
+ priority?: number | undefined;
86
+ lastModified?: string | undefined;
87
+ } | undefined;
88
+ _meta?: {
89
+ [x: string]: unknown;
90
+ } | undefined;
91
+ })[];
92
+ _meta?: {
93
+ [x: string]: unknown;
94
+ progressToken?: string | number | undefined;
95
+ "io.modelcontextprotocol/related-task"?: {
96
+ taskId: string;
97
+ } | undefined;
98
+ } | undefined;
99
+ structuredContent?: {
100
+ [x: string]: unknown;
101
+ } | undefined;
102
+ isError?: boolean | undefined;
103
+ }>;
104
+ //# sourceMappingURL=search-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"AAwBA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EA"}
@@ -0,0 +1,77 @@
1
+ import { PrismaClient } from '@toolpilot/db';
2
+ import { enqueueSearchEvent } from '@toolpilot/queue';
3
+ import { ClarificationEngine, SearchPipeline, SearchSessionManager, stage1HybridSearch, } from '@toolpilot/search';
4
+ import pino from 'pino';
5
+ import { errResult, okResult } from '../utils.js';
6
+ import { buildLowCredibilityWarning, buildNonIndexedGuidance, formatResults, } from './format-results.js';
7
+ const logger = pino({ name: '@toolpilot/mcp-server:search-tools' });
8
+ const prisma = new PrismaClient();
9
+ const sessionManager = new SearchSessionManager(prisma);
10
+ const pipeline = new SearchPipeline(sessionManager);
11
+ const clarificationEngine = new ClarificationEngine();
12
+ const CLARIFICATION_THRESHOLD = 3; // ask questions if > this many candidates
13
+ export async function handleSearchTools(args) {
14
+ try {
15
+ const sessionId = args.query_id ?? (await sessionManager.createSession(args.query));
16
+ logger.info({ sessionId, query: args.query }, 'search_tools called');
17
+ if (args.context) {
18
+ await sessionManager.updateContext(sessionId, args.context);
19
+ }
20
+ const t0 = Date.now();
21
+ // Stage 1 — hybrid retrieval (BM25 + optional vector)
22
+ const corpus = await pipeline.loadToolCorpus();
23
+ const stage1 = await stage1HybridSearch(args.query, corpus);
24
+ // Build candidate set from Stage 1 IDs
25
+ const idSet = new Set(stage1.ids);
26
+ const candidates = corpus.filter((t) => idSet.has(t.id));
27
+ // Check if clarification is warranted
28
+ const askedDimensions = await sessionManager.getAskedDimensions(sessionId);
29
+ const questions = clarificationEngine.getClarification(candidates, askedDimensions);
30
+ if (questions.length > 0 && candidates.length > CLARIFICATION_THRESHOLD) {
31
+ // Save Stage 1 candidate IDs so search_tools_respond can use them
32
+ await sessionManager.saveCandidates(sessionId, stage1.ids);
33
+ // Record questions in clarification history (no answers yet)
34
+ await sessionManager.appendClarification(sessionId, questions, []);
35
+ enqueueSearchEvent(args.query, sessionId).catch((e) => {
36
+ logger.warn({ err: e }, 'Failed to enqueue search event');
37
+ });
38
+ logger.info({ sessionId, candidateCount: candidates.length, questionCount: questions.length }, 'Clarification needed');
39
+ const askedDimsList = [...askedDimensions];
40
+ const clarificationRound = pipeline.getClarificationRound(askedDimsList);
41
+ return okResult({
42
+ query_id: sessionId,
43
+ status: 'clarification_needed',
44
+ stage: 1,
45
+ clarification_round: clarificationRound,
46
+ candidate_count: candidates.length,
47
+ questions,
48
+ hint: 'Answer to narrow the search. Up to 2 more rounds of clarification may follow.',
49
+ });
50
+ }
51
+ // No clarification needed — run stages 2-4 directly
52
+ const { results, is_two_option, stage2_ms, stage3_ms, stage4_ms } = await pipeline.runStages2to4(stage1.ids, args.context, sessionId);
53
+ enqueueSearchEvent(args.query, sessionId).catch((e) => {
54
+ logger.warn({ err: e }, 'Failed to enqueue search event');
55
+ });
56
+ const total_ms = Date.now() - t0;
57
+ logger.info({ sessionId, total_ms, resultCount: results.length }, 'search_tools complete');
58
+ const formattedResults = formatResults(results, is_two_option);
59
+ const nonIndexedGuidance = buildNonIndexedGuidance(formattedResults, args.query);
60
+ const credibilityWarning = buildLowCredibilityWarning(formattedResults);
61
+ return okResult({
62
+ query_id: sessionId,
63
+ status: 'complete',
64
+ stage: 4,
65
+ results: formattedResults,
66
+ is_two_option,
67
+ timing: { stage1_ms: stage1.elapsed_ms, stage2_ms, stage3_ms, stage4_ms, total_ms },
68
+ ...(nonIndexedGuidance ? { non_indexed_guidance: nonIndexedGuidance } : {}),
69
+ ...(credibilityWarning ? { credibility_warning: credibilityWarning } : {}),
70
+ });
71
+ }
72
+ catch (e) {
73
+ logger.error({ err: e, query: args.query }, 'search_tools failed');
74
+ return errResult('search_error', e instanceof Error ? e.message : String(e));
75
+ }
76
+ }
77
+ //# sourceMappingURL=search-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools.js","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ export declare function handleSuggestGraphUpdate(args: {
2
+ suggestion_type: 'new_tool' | 'new_edge' | 'update_health' | 'new_use_case';
3
+ data: {
4
+ tool_name?: string;
5
+ github_url?: string;
6
+ description?: string;
7
+ relationship?: {
8
+ source_tool: string;
9
+ target_tool: string;
10
+ edge_type: string;
11
+ evidence?: string;
12
+ };
13
+ use_case?: {
14
+ name: string;
15
+ description: string;
16
+ tools?: string[];
17
+ };
18
+ };
19
+ query_id?: string;
20
+ confidence?: number;
21
+ }): Promise<{
22
+ [x: string]: unknown;
23
+ content: ({
24
+ type: "text";
25
+ text: string;
26
+ annotations?: {
27
+ audience?: ("user" | "assistant")[] | undefined;
28
+ priority?: number | undefined;
29
+ lastModified?: string | undefined;
30
+ } | undefined;
31
+ _meta?: {
32
+ [x: string]: unknown;
33
+ } | undefined;
34
+ } | {
35
+ type: "image";
36
+ data: string;
37
+ mimeType: string;
38
+ annotations?: {
39
+ audience?: ("user" | "assistant")[] | undefined;
40
+ priority?: number | undefined;
41
+ lastModified?: string | undefined;
42
+ } | undefined;
43
+ _meta?: {
44
+ [x: string]: unknown;
45
+ } | undefined;
46
+ } | {
47
+ type: "audio";
48
+ data: string;
49
+ mimeType: string;
50
+ annotations?: {
51
+ audience?: ("user" | "assistant")[] | undefined;
52
+ priority?: number | undefined;
53
+ lastModified?: string | undefined;
54
+ } | undefined;
55
+ _meta?: {
56
+ [x: string]: unknown;
57
+ } | undefined;
58
+ } | {
59
+ uri: string;
60
+ name: string;
61
+ type: "resource_link";
62
+ description?: string | undefined;
63
+ mimeType?: string | undefined;
64
+ annotations?: {
65
+ audience?: ("user" | "assistant")[] | undefined;
66
+ priority?: number | undefined;
67
+ lastModified?: string | undefined;
68
+ } | undefined;
69
+ _meta?: {
70
+ [x: string]: unknown;
71
+ } | undefined;
72
+ icons?: {
73
+ src: string;
74
+ mimeType?: string | undefined;
75
+ sizes?: string[] | undefined;
76
+ theme?: "light" | "dark" | undefined;
77
+ }[] | undefined;
78
+ title?: string | undefined;
79
+ } | {
80
+ type: "resource";
81
+ resource: {
82
+ uri: string;
83
+ text: string;
84
+ mimeType?: string | undefined;
85
+ _meta?: {
86
+ [x: string]: unknown;
87
+ } | undefined;
88
+ } | {
89
+ uri: string;
90
+ blob: string;
91
+ mimeType?: string | undefined;
92
+ _meta?: {
93
+ [x: string]: unknown;
94
+ } | undefined;
95
+ };
96
+ annotations?: {
97
+ audience?: ("user" | "assistant")[] | undefined;
98
+ priority?: number | undefined;
99
+ lastModified?: string | undefined;
100
+ } | undefined;
101
+ _meta?: {
102
+ [x: string]: unknown;
103
+ } | undefined;
104
+ })[];
105
+ _meta?: {
106
+ [x: string]: unknown;
107
+ progressToken?: string | number | undefined;
108
+ "io.modelcontextprotocol/related-task"?: {
109
+ taskId: string;
110
+ } | undefined;
111
+ } | undefined;
112
+ structuredContent?: {
113
+ [x: string]: unknown;
114
+ } | undefined;
115
+ isError?: boolean | undefined;
116
+ }>;
117
+ //# sourceMappingURL=suggest-graph-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-graph-update.d.ts","sourceRoot":"","sources":["../../src/tools/suggest-graph-update.ts"],"names":[],"mappings":"AAyBA,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,eAAe,EAAE,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,cAAc,CAAC;IAC5E,IAAI,EAAE;QACJ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0LA"}