@homenshum/convex-mcp-nodebench 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 (44) hide show
  1. package/README.md +137 -0
  2. package/dist/__tests__/tools.test.d.ts +1 -0
  3. package/dist/__tests__/tools.test.js +267 -0
  4. package/dist/__tests__/tools.test.js.map +1 -0
  5. package/dist/db.d.ts +10 -0
  6. package/dist/db.js +125 -0
  7. package/dist/db.js.map +1 -0
  8. package/dist/gotchaSeed.d.ts +126 -0
  9. package/dist/gotchaSeed.js +147 -0
  10. package/dist/gotchaSeed.js.map +1 -0
  11. package/dist/index.d.ts +15 -0
  12. package/dist/index.js +118 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/componentTools.d.ts +2 -0
  15. package/dist/tools/componentTools.js +131 -0
  16. package/dist/tools/componentTools.js.map +1 -0
  17. package/dist/tools/cronTools.d.ts +2 -0
  18. package/dist/tools/cronTools.js +142 -0
  19. package/dist/tools/cronTools.js.map +1 -0
  20. package/dist/tools/deploymentTools.d.ts +2 -0
  21. package/dist/tools/deploymentTools.js +222 -0
  22. package/dist/tools/deploymentTools.js.map +1 -0
  23. package/dist/tools/functionTools.d.ts +2 -0
  24. package/dist/tools/functionTools.js +293 -0
  25. package/dist/tools/functionTools.js.map +1 -0
  26. package/dist/tools/integrationBridgeTools.d.ts +2 -0
  27. package/dist/tools/integrationBridgeTools.js +294 -0
  28. package/dist/tools/integrationBridgeTools.js.map +1 -0
  29. package/dist/tools/learningTools.d.ts +2 -0
  30. package/dist/tools/learningTools.js +155 -0
  31. package/dist/tools/learningTools.js.map +1 -0
  32. package/dist/tools/methodologyTools.d.ts +2 -0
  33. package/dist/tools/methodologyTools.js +163 -0
  34. package/dist/tools/methodologyTools.js.map +1 -0
  35. package/dist/tools/schemaTools.d.ts +2 -0
  36. package/dist/tools/schemaTools.js +346 -0
  37. package/dist/tools/schemaTools.js.map +1 -0
  38. package/dist/tools/toolRegistry.d.ts +5 -0
  39. package/dist/tools/toolRegistry.js +308 -0
  40. package/dist/tools/toolRegistry.js.map +1 -0
  41. package/dist/types.d.ts +44 -0
  42. package/dist/types.js +2 -0
  43. package/dist/types.js.map +1 -0
  44. package/package.json +54 -0
@@ -0,0 +1,346 @@
1
+ import { readFileSync, existsSync, readdirSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { getDb, genId } from "../db.js";
4
+ import { getQuickRef } from "./toolRegistry.js";
5
+ // ── Helpers ──────────────────────────────────────────────────────────
6
+ function findConvexDir(projectDir) {
7
+ const candidates = [
8
+ join(projectDir, "convex"),
9
+ join(projectDir, "src", "convex"),
10
+ ];
11
+ for (const c of candidates) {
12
+ if (existsSync(c))
13
+ return c;
14
+ }
15
+ return null;
16
+ }
17
+ function readSchemaFile(convexDir) {
18
+ const schemaPath = join(convexDir, "schema.ts");
19
+ if (!existsSync(schemaPath))
20
+ return null;
21
+ return readFileSync(schemaPath, "utf-8");
22
+ }
23
+ function collectTsFiles(dir, ext = ".ts") {
24
+ const results = [];
25
+ if (!existsSync(dir))
26
+ return results;
27
+ const entries = readdirSync(dir, { withFileTypes: true });
28
+ for (const entry of entries) {
29
+ const full = join(dir, entry.name);
30
+ if (entry.isDirectory() && entry.name !== "node_modules" && entry.name !== "_generated") {
31
+ results.push(...collectTsFiles(full, ext));
32
+ }
33
+ else if (entry.isFile() && entry.name.endsWith(ext)) {
34
+ results.push(full);
35
+ }
36
+ }
37
+ return results;
38
+ }
39
+ // ── Schema Analysis Engine ──────────────────────────────────────────
40
+ function analyzeSchema(schemaContent, filePath) {
41
+ const issues = [];
42
+ const lines = schemaContent.split("\n");
43
+ // Check: v.bigint() usage (deprecated)
44
+ lines.forEach((line, i) => {
45
+ if (/v\.bigint\s*\(/.test(line)) {
46
+ issues.push({
47
+ severity: "critical",
48
+ location: `${filePath}:${i + 1}`,
49
+ message: "v.bigint() is deprecated. Use v.int64() instead.",
50
+ fix: "Replace v.bigint() with v.int64()",
51
+ gotchaKey: "validator_bigint_deprecated",
52
+ });
53
+ }
54
+ });
55
+ // Check: v.map() or v.set() usage (unsupported)
56
+ lines.forEach((line, i) => {
57
+ if (/v\.(map|set)\s*\(/.test(line)) {
58
+ const match = line.match(/v\.(map|set)/);
59
+ issues.push({
60
+ severity: "critical",
61
+ location: `${filePath}:${i + 1}`,
62
+ message: `v.${match?.[1]}() is not supported. Use v.record(keys, values) instead.`,
63
+ fix: "Replace with v.record(keyValidator, valueValidator)",
64
+ gotchaKey: "no_map_set_validators",
65
+ });
66
+ }
67
+ });
68
+ // Check: fields starting with $ or _
69
+ const fieldNamePattern = /["'](\$|_)[\w]+["']\s*:/g;
70
+ lines.forEach((line, i) => {
71
+ let match;
72
+ while ((match = fieldNamePattern.exec(line)) !== null) {
73
+ // Ignore system fields in comments
74
+ if (line.trim().startsWith("//") || line.trim().startsWith("*"))
75
+ continue;
76
+ issues.push({
77
+ severity: "critical",
78
+ location: `${filePath}:${i + 1}`,
79
+ message: `Field name starts with '${match[1]}' which is reserved for system use.`,
80
+ fix: "Rename the field to not start with '$' or '_'",
81
+ gotchaKey: "field_no_dollar_underscore",
82
+ });
83
+ }
84
+ });
85
+ // Check: defineTable without any indexes
86
+ const tablePattern = /defineTable\s*\(/g;
87
+ const indexPattern = /\.index\s*\(/g;
88
+ const tableCount = (schemaContent.match(tablePattern) || []).length;
89
+ const indexCount = (schemaContent.match(indexPattern) || []).length;
90
+ if (tableCount > 0 && indexCount === 0) {
91
+ issues.push({
92
+ severity: "warning",
93
+ location: filePath,
94
+ message: `Schema defines ${tableCount} table(s) but has no indexes. Most apps need indexes for efficient queries.`,
95
+ fix: "Add .index() calls to defineTable for fields you query by",
96
+ gotchaKey: "index_field_order",
97
+ });
98
+ }
99
+ // Check: index names don't include field names
100
+ const indexDefPattern = /\.index\s*\(\s*["']([^"']+)["']\s*,\s*\[([^\]]+)\]/g;
101
+ let idxMatch;
102
+ while ((idxMatch = indexDefPattern.exec(schemaContent)) !== null) {
103
+ const indexName = idxMatch[1];
104
+ const fieldsRaw = idxMatch[2];
105
+ const fields = fieldsRaw.match(/["']([^"']+)["']/g)?.map((f) => f.replace(/["']/g, "")) || [];
106
+ const allFieldsInName = fields.every((f) => indexName.toLowerCase().includes(f.toLowerCase()));
107
+ if (!allFieldsInName && fields.length > 0) {
108
+ issues.push({
109
+ severity: "info",
110
+ location: filePath,
111
+ message: `Index "${indexName}" does not include all field names (${fields.join(", ")}). Convention: use "by_${fields.join("_and_")}".`,
112
+ fix: `Rename index to "by_${fields.join("_and_")}"`,
113
+ gotchaKey: "index_name_include_fields",
114
+ });
115
+ }
116
+ }
117
+ // Check: _creationTime or _id in schema definition (system fields)
118
+ lines.forEach((line, i) => {
119
+ if (line.trim().startsWith("//") || line.trim().startsWith("*"))
120
+ return;
121
+ if (/["']_creationTime["']|["']_id["']/.test(line) && /v\./.test(line)) {
122
+ issues.push({
123
+ severity: "warning",
124
+ location: `${filePath}:${i + 1}`,
125
+ message: "System fields (_id, _creationTime) are auto-added. Don't include them in schema.",
126
+ fix: "Remove the system field from your schema definition",
127
+ gotchaKey: "system_fields_auto",
128
+ });
129
+ }
130
+ });
131
+ return issues;
132
+ }
133
+ function analyzeValidatorCoverage(convexDir) {
134
+ const files = collectTsFiles(convexDir);
135
+ const result = {
136
+ totalFunctions: 0,
137
+ withArgs: 0,
138
+ withReturns: 0,
139
+ missingArgs: [],
140
+ missingReturns: [],
141
+ usingOldSyntax: [],
142
+ };
143
+ const funcTypes = ["query", "internalQuery", "mutation", "internalMutation", "action", "internalAction"];
144
+ const funcPattern = new RegExp(`export\\s+(?:const|default)\\s+(\\w+)?\\s*=\\s*(${funcTypes.join("|")})\\s*\\(`, "g");
145
+ for (const filePath of files) {
146
+ const content = readFileSync(filePath, "utf-8");
147
+ const relativePath = filePath.replace(convexDir, "").replace(/^[\\/]/, "");
148
+ let match;
149
+ while ((match = funcPattern.exec(content)) !== null) {
150
+ const funcName = match[1] || "default";
151
+ const location = `${relativePath}:${funcName}`;
152
+ result.totalFunctions++;
153
+ // Find the function body (rough heuristic - look for args: and returns: nearby)
154
+ const startIdx = match.index;
155
+ const chunk = content.slice(startIdx, startIdx + 500);
156
+ if (/args\s*:\s*\{/.test(chunk) || /args\s*:\s*v\./.test(chunk)) {
157
+ result.withArgs++;
158
+ }
159
+ else {
160
+ result.missingArgs.push(location);
161
+ }
162
+ if (/returns\s*:\s*v\./.test(chunk)) {
163
+ result.withReturns++;
164
+ }
165
+ else {
166
+ result.missingReturns.push(location);
167
+ }
168
+ // Check for old syntax (handler as second argument, not in object)
169
+ if (/\(\s*async\s*\(ctx/.test(chunk) && !/handler\s*:/.test(chunk)) {
170
+ result.usingOldSyntax.push(location);
171
+ }
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ function suggestIndexes(convexDir) {
177
+ const suggestions = [];
178
+ const files = collectTsFiles(convexDir);
179
+ // Track query patterns: db.query("table").withIndex("name", ...) or .filter(q => q.eq(q.field("x"), ...))
180
+ const queryPattern = /\.query\s*\(\s*["'](\w+)["']\s*\)/g;
181
+ const filterFieldPattern = /q\.field\s*\(\s*["'](\w+)["']\s*\)/g;
182
+ const withIndexPattern = /\.withIndex\s*\(\s*["'](\w+)["']/g;
183
+ const tableQueryFields = new Map();
184
+ const existingIndexes = new Set();
185
+ for (const filePath of files) {
186
+ const content = readFileSync(filePath, "utf-8");
187
+ // Collect existing indexes
188
+ let idxMatch;
189
+ while ((idxMatch = withIndexPattern.exec(content)) !== null) {
190
+ existingIndexes.add(idxMatch[1]);
191
+ }
192
+ // Collect query + filter patterns
193
+ let qMatch;
194
+ while ((qMatch = queryPattern.exec(content)) !== null) {
195
+ const tableName = qMatch[1];
196
+ // Look for filter fields nearby
197
+ const nearbyContent = content.slice(qMatch.index, qMatch.index + 300);
198
+ let fMatch;
199
+ while ((fMatch = filterFieldPattern.exec(nearbyContent)) !== null) {
200
+ const field = fMatch[1];
201
+ if (field === "_id" || field === "_creationTime")
202
+ continue;
203
+ if (!tableQueryFields.has(tableName)) {
204
+ tableQueryFields.set(tableName, new Set());
205
+ }
206
+ tableQueryFields.get(tableName).add(field);
207
+ }
208
+ }
209
+ }
210
+ // Generate suggestions for frequently queried fields
211
+ for (const [table, fields] of tableQueryFields) {
212
+ for (const field of fields) {
213
+ const indexName = `by_${field}`;
214
+ if (!existingIndexes.has(indexName)) {
215
+ suggestions.push({
216
+ table,
217
+ fields: [field],
218
+ suggestedName: indexName,
219
+ reason: `Queries filter on "${table}.${field}" but no index exists for it`,
220
+ });
221
+ }
222
+ }
223
+ }
224
+ return suggestions;
225
+ }
226
+ // ── Tool Definitions ────────────────────────────────────────────────
227
+ export const schemaTools = [
228
+ {
229
+ name: "convex_audit_schema",
230
+ description: "Analyze a Convex project's schema.ts for anti-patterns, deprecated validators, reserved field names, missing indexes, and naming convention violations. Scans the convex/ directory and returns categorized issues with fix suggestions.",
231
+ inputSchema: {
232
+ type: "object",
233
+ properties: {
234
+ projectDir: {
235
+ type: "string",
236
+ description: "Absolute path to the project root containing a convex/ directory",
237
+ },
238
+ },
239
+ required: ["projectDir"],
240
+ },
241
+ handler: async (args) => {
242
+ const projectDir = resolve(args.projectDir);
243
+ const convexDir = findConvexDir(projectDir);
244
+ if (!convexDir) {
245
+ return {
246
+ error: "No convex/ directory found",
247
+ hint: "Ensure projectDir points to a directory containing a convex/ folder",
248
+ };
249
+ }
250
+ const schemaContent = readSchemaFile(convexDir);
251
+ if (!schemaContent) {
252
+ return {
253
+ error: "No convex/schema.ts found",
254
+ hint: "Create a schema.ts file in your convex/ directory",
255
+ quickRef: getQuickRef("convex_audit_schema"),
256
+ };
257
+ }
258
+ const schemaPath = join(convexDir, "schema.ts");
259
+ const issues = analyzeSchema(schemaContent, schemaPath);
260
+ // Store audit result
261
+ const db = getDb();
262
+ db.prepare("INSERT INTO audit_results (id, project_dir, audit_type, file_path, issues_json, issue_count) VALUES (?, ?, ?, ?, ?, ?)").run(genId("audit"), projectDir, "schema", schemaPath, JSON.stringify(issues), issues.length);
263
+ const critical = issues.filter((i) => i.severity === "critical");
264
+ const warnings = issues.filter((i) => i.severity === "warning");
265
+ const info = issues.filter((i) => i.severity === "info");
266
+ return {
267
+ summary: {
268
+ totalIssues: issues.length,
269
+ critical: critical.length,
270
+ warnings: warnings.length,
271
+ info: info.length,
272
+ schemaFile: schemaPath,
273
+ },
274
+ issues,
275
+ quickRef: getQuickRef("convex_audit_schema"),
276
+ };
277
+ },
278
+ },
279
+ {
280
+ name: "convex_suggest_indexes",
281
+ description: "Analyze query patterns across all Convex functions and suggest missing indexes. Scans for .query().filter() patterns and compares against defined indexes in schema.ts.",
282
+ inputSchema: {
283
+ type: "object",
284
+ properties: {
285
+ projectDir: {
286
+ type: "string",
287
+ description: "Absolute path to the project root containing a convex/ directory",
288
+ },
289
+ },
290
+ required: ["projectDir"],
291
+ },
292
+ handler: async (args) => {
293
+ const projectDir = resolve(args.projectDir);
294
+ const convexDir = findConvexDir(projectDir);
295
+ if (!convexDir) {
296
+ return { error: "No convex/ directory found" };
297
+ }
298
+ const suggestions = suggestIndexes(convexDir);
299
+ return {
300
+ totalSuggestions: suggestions.length,
301
+ suggestions,
302
+ quickRef: getQuickRef("convex_suggest_indexes"),
303
+ };
304
+ },
305
+ },
306
+ {
307
+ name: "convex_check_validator_coverage",
308
+ description: "Check that all exported Convex functions (query, mutation, action, and their internal variants) have both args and returns validators. Reports functions missing validators and those using deprecated old syntax.",
309
+ inputSchema: {
310
+ type: "object",
311
+ properties: {
312
+ projectDir: {
313
+ type: "string",
314
+ description: "Absolute path to the project root containing a convex/ directory",
315
+ },
316
+ },
317
+ required: ["projectDir"],
318
+ },
319
+ handler: async (args) => {
320
+ const projectDir = resolve(args.projectDir);
321
+ const convexDir = findConvexDir(projectDir);
322
+ if (!convexDir) {
323
+ return { error: "No convex/ directory found" };
324
+ }
325
+ const result = analyzeValidatorCoverage(convexDir);
326
+ const passed = result.missingArgs.length === 0 && result.missingReturns.length === 0;
327
+ // Store audit result
328
+ const db = getDb();
329
+ db.prepare("INSERT INTO audit_results (id, project_dir, audit_type, issues_json, issue_count) VALUES (?, ?, ?, ?, ?)").run(genId("audit"), projectDir, "validator_coverage", JSON.stringify(result), result.missingArgs.length + result.missingReturns.length);
330
+ return {
331
+ passed,
332
+ summary: {
333
+ totalFunctions: result.totalFunctions,
334
+ argsValidatorCoverage: `${result.withArgs}/${result.totalFunctions}`,
335
+ returnsValidatorCoverage: `${result.withReturns}/${result.totalFunctions}`,
336
+ oldSyntaxCount: result.usingOldSyntax.length,
337
+ },
338
+ missingArgs: result.missingArgs.length > 0 ? result.missingArgs : undefined,
339
+ missingReturns: result.missingReturns.length > 0 ? result.missingReturns : undefined,
340
+ usingOldSyntax: result.usingOldSyntax.length > 0 ? result.usingOldSyntax : undefined,
341
+ quickRef: getQuickRef("convex_check_validator_coverage"),
342
+ };
343
+ },
344
+ },
345
+ ];
346
+ //# sourceMappingURL=schemaTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaTools.js","sourceRoot":"","sources":["../../src/tools/schemaTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,wEAAwE;AAExE,SAAS,aAAa,CAAC,UAAkB;IACvC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC;KAClC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,GAAG,GAAG,KAAK;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uEAAuE;AAEvE,SAAS,aAAa,CAAC,aAAqB,EAAE,QAAgB;IAC5D,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExC,uCAAuC;IACvC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,kDAAkD;gBAC3D,GAAG,EAAE,mCAAmC;gBACxC,SAAS,EAAE,6BAA6B;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,0DAA0D;gBAClF,GAAG,EAAE,qDAAqD;gBAC1D,SAAS,EAAE,uBAAuB;aACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;IACpD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,mCAAmC;YACnC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC1E,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,2BAA2B,KAAK,CAAC,CAAC,CAAC,qCAAqC;gBACjF,GAAG,EAAE,+CAA+C;gBACpD,SAAS,EAAE,4BAA4B;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,MAAM,YAAY,GAAG,mBAAmB,CAAC;IACzC,MAAM,YAAY,GAAG,eAAe,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACpE,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,kBAAkB,UAAU,6EAA6E;YAClH,GAAG,EAAE,2DAA2D;YAChE,SAAS,EAAE,mBAAmB;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,MAAM,eAAe,GAAG,qDAAqD,CAAC;IAC9E,IAAI,QAAQ,CAAC;IACb,OAAO,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9F,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,UAAU,SAAS,uCAAuC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;gBACtI,GAAG,EAAE,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;gBACnD,SAAS,EAAE,2BAA2B;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QACxE,IAAI,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,kFAAkF;gBAC3F,GAAG,EAAE,qDAAqD;gBAC1D,SAAS,EAAE,oBAAoB;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,SAAS,wBAAwB,CAAC,SAAiB;IACjD,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,MAAM,GAA4B;QACtC,cAAc,EAAE,CAAC;QACjB,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACzG,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,mDAAmD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAChF,GAAG,CACJ,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE3E,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YACvC,MAAM,QAAQ,GAAG,GAAG,YAAY,IAAI,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,cAAc,EAAE,CAAC;YAExB,gFAAgF;YAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC;YAEtD,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,mEAAmE;YACnE,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD,SAAS,cAAc,CAAC,SAAiB;IACvC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAExC,0GAA0G;IAC1G,MAAM,YAAY,GAAG,oCAAoC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;IACjE,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;IAE7D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,IAAI,QAAQ,CAAC;QACb,OAAO,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5D,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,kCAAkC;QAClC,IAAI,MAAM,CAAC;QACX,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5B,gCAAgC;YAChC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC;YACX,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,eAAe;oBAAE,SAAS;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACrC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBACD,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,MAAM,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,WAAW,CAAC,IAAI,CAAC;oBACf,KAAK;oBACL,MAAM,EAAE,CAAC,KAAK,CAAC;oBACf,aAAa,EAAE,SAAS;oBACxB,MAAM,EAAE,sBAAsB,KAAK,IAAI,KAAK,8BAA8B;iBAC3E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,MAAM,WAAW,GAAc;IACpC;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,0OAA0O;QAC5O,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;QACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,KAAK,EAAE,4BAA4B;oBACnC,IAAI,EAAE,qEAAqE;iBAC5E,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;oBACL,KAAK,EAAE,2BAA2B;oBAClC,IAAI,EAAE,mDAAmD;oBACzD,QAAQ,EAAE,WAAW,CAAC,qBAAqB,CAAC;iBAC7C,CAAC;YACJ,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAExD,qBAAqB;YACrB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,EAAE,CAAC,OAAO,CACR,wHAAwH,CACzH,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAE/F,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;YAChE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE;oBACP,WAAW,EAAE,MAAM,CAAC,MAAM;oBAC1B,QAAQ,EAAE,QAAQ,CAAC,MAAM;oBACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM;oBACzB,IAAI,EAAE,IAAI,CAAC,MAAM;oBACjB,UAAU,EAAE,UAAU;iBACvB;gBACD,MAAM;gBACN,QAAQ,EAAE,WAAW,CAAC,qBAAqB,CAAC;aAC7C,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,yKAAyK;QAC3K,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;QACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;YACjD,CAAC;YAED,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO;gBACL,gBAAgB,EAAE,WAAW,CAAC,MAAM;gBACpC,WAAW;gBACX,QAAQ,EAAE,WAAW,CAAC,wBAAwB,CAAC;aAChD,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,iCAAiC;QACvC,WAAW,EACT,oNAAoN;QACtN,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,CAAC;SACzB;QACD,OAAO,EAAE,KAAK,EAAE,IAA4B,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;YACjD,CAAC;YAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;YAErF,qBAAqB;YACrB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,EAAE,CAAC,OAAO,CACR,0GAA0G,CAC3G,CAAC,GAAG,CACH,KAAK,CAAC,OAAO,CAAC,EACd,UAAU,EACV,oBAAoB,EACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EACtB,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CACzD,CAAC;YAEF,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE;oBACP,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,qBAAqB,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,cAAc,EAAE;oBACpE,wBAAwB,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE;oBAC1E,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM;iBAC7C;gBACD,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBAC3E,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBACpF,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBACpF,QAAQ,EAAE,WAAW,CAAC,iCAAiC,CAAC;aACzD,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ConvexQuickRef, ToolRegistryEntry } from "../types.js";
2
+ export declare const REGISTRY: ToolRegistryEntry[];
3
+ export declare function getQuickRef(toolName: string): ConvexQuickRef | null;
4
+ export declare function getToolsByCategory(category: string): ToolRegistryEntry[];
5
+ export declare function findTools(query: string): ToolRegistryEntry[];