nodebench-mcp 3.0.0 → 3.0.2

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 (171) hide show
  1. package/NODEBENCH_AGENTS.md +74 -67
  2. package/README.md +36 -34
  3. package/dist/dashboard/operatingDashboardHtml.js +2 -1
  4. package/dist/dashboard/operatingDashboardHtml.js.map +1 -1
  5. package/dist/dashboard/operatingServer.js +3 -2
  6. package/dist/dashboard/operatingServer.js.map +1 -1
  7. package/dist/db.js +51 -3
  8. package/dist/db.js.map +1 -1
  9. package/dist/index.js +19 -18
  10. package/dist/index.js.map +1 -1
  11. package/dist/packageInfo.d.ts +3 -0
  12. package/dist/packageInfo.js +32 -0
  13. package/dist/packageInfo.js.map +1 -0
  14. package/dist/sandboxApi.js +2 -1
  15. package/dist/sandboxApi.js.map +1 -1
  16. package/dist/tools/boilerplateTools.js +10 -9
  17. package/dist/tools/boilerplateTools.js.map +1 -1
  18. package/dist/tools/documentationTools.js +2 -1
  19. package/dist/tools/documentationTools.js.map +1 -1
  20. package/dist/tools/progressiveDiscoveryTools.js +2 -1
  21. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  22. package/dist/tools/toolRegistry.js +11 -0
  23. package/dist/tools/toolRegistry.js.map +1 -1
  24. package/dist/toolsetRegistry.js +74 -1
  25. package/dist/toolsetRegistry.js.map +1 -1
  26. package/package.json +7 -6
  27. package/scripts/install.sh +14 -14
  28. package/dist/__tests__/analytics.test.d.ts +0 -11
  29. package/dist/__tests__/analytics.test.js +0 -546
  30. package/dist/__tests__/analytics.test.js.map +0 -1
  31. package/dist/__tests__/architectComplex.test.d.ts +0 -1
  32. package/dist/__tests__/architectComplex.test.js +0 -373
  33. package/dist/__tests__/architectComplex.test.js.map +0 -1
  34. package/dist/__tests__/architectSmoke.test.d.ts +0 -1
  35. package/dist/__tests__/architectSmoke.test.js +0 -92
  36. package/dist/__tests__/architectSmoke.test.js.map +0 -1
  37. package/dist/__tests__/audit-registry.d.ts +0 -1
  38. package/dist/__tests__/audit-registry.js +0 -60
  39. package/dist/__tests__/audit-registry.js.map +0 -1
  40. package/dist/__tests__/batchAutopilot.test.d.ts +0 -8
  41. package/dist/__tests__/batchAutopilot.test.js +0 -218
  42. package/dist/__tests__/batchAutopilot.test.js.map +0 -1
  43. package/dist/__tests__/cliSubcommands.test.d.ts +0 -1
  44. package/dist/__tests__/cliSubcommands.test.js +0 -138
  45. package/dist/__tests__/cliSubcommands.test.js.map +0 -1
  46. package/dist/__tests__/comparativeBench.test.d.ts +0 -1
  47. package/dist/__tests__/comparativeBench.test.js +0 -722
  48. package/dist/__tests__/comparativeBench.test.js.map +0 -1
  49. package/dist/__tests__/critterCalibrationEval.d.ts +0 -8
  50. package/dist/__tests__/critterCalibrationEval.js +0 -370
  51. package/dist/__tests__/critterCalibrationEval.js.map +0 -1
  52. package/dist/__tests__/dynamicLoading.test.d.ts +0 -1
  53. package/dist/__tests__/dynamicLoading.test.js +0 -280
  54. package/dist/__tests__/dynamicLoading.test.js.map +0 -1
  55. package/dist/__tests__/embeddingProvider.test.d.ts +0 -1
  56. package/dist/__tests__/embeddingProvider.test.js +0 -86
  57. package/dist/__tests__/embeddingProvider.test.js.map +0 -1
  58. package/dist/__tests__/evalDatasetBench.test.d.ts +0 -1
  59. package/dist/__tests__/evalDatasetBench.test.js +0 -738
  60. package/dist/__tests__/evalDatasetBench.test.js.map +0 -1
  61. package/dist/__tests__/evalHarness.test.d.ts +0 -1
  62. package/dist/__tests__/evalHarness.test.js +0 -1107
  63. package/dist/__tests__/evalHarness.test.js.map +0 -1
  64. package/dist/__tests__/fixtures/bfcl_v3_long_context.sample.json +0 -264
  65. package/dist/__tests__/fixtures/generateBfclLongContextFixture.d.ts +0 -10
  66. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js +0 -135
  67. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js.map +0 -1
  68. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.d.ts +0 -14
  69. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js +0 -189
  70. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js.map +0 -1
  71. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.d.ts +0 -16
  72. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js +0 -154
  73. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js.map +0 -1
  74. package/dist/__tests__/fixtures/swebench_verified.sample.json +0 -162
  75. package/dist/__tests__/fixtures/toolbench_instruction.sample.json +0 -109
  76. package/dist/__tests__/forecastingDogfood.test.d.ts +0 -9
  77. package/dist/__tests__/forecastingDogfood.test.js +0 -284
  78. package/dist/__tests__/forecastingDogfood.test.js.map +0 -1
  79. package/dist/__tests__/forecastingScoring.test.d.ts +0 -9
  80. package/dist/__tests__/forecastingScoring.test.js +0 -202
  81. package/dist/__tests__/forecastingScoring.test.js.map +0 -1
  82. package/dist/__tests__/gaiaCapabilityAudioEval.test.d.ts +0 -15
  83. package/dist/__tests__/gaiaCapabilityAudioEval.test.js +0 -265
  84. package/dist/__tests__/gaiaCapabilityAudioEval.test.js.map +0 -1
  85. package/dist/__tests__/gaiaCapabilityEval.test.d.ts +0 -14
  86. package/dist/__tests__/gaiaCapabilityEval.test.js +0 -1259
  87. package/dist/__tests__/gaiaCapabilityEval.test.js.map +0 -1
  88. package/dist/__tests__/gaiaCapabilityFilesEval.test.d.ts +0 -15
  89. package/dist/__tests__/gaiaCapabilityFilesEval.test.js +0 -914
  90. package/dist/__tests__/gaiaCapabilityFilesEval.test.js.map +0 -1
  91. package/dist/__tests__/gaiaCapabilityMediaEval.test.d.ts +0 -15
  92. package/dist/__tests__/gaiaCapabilityMediaEval.test.js +0 -1101
  93. package/dist/__tests__/gaiaCapabilityMediaEval.test.js.map +0 -1
  94. package/dist/__tests__/helpers/answerMatch.d.ts +0 -41
  95. package/dist/__tests__/helpers/answerMatch.js +0 -267
  96. package/dist/__tests__/helpers/answerMatch.js.map +0 -1
  97. package/dist/__tests__/helpers/textLlm.d.ts +0 -25
  98. package/dist/__tests__/helpers/textLlm.js +0 -214
  99. package/dist/__tests__/helpers/textLlm.js.map +0 -1
  100. package/dist/__tests__/localDashboard.test.d.ts +0 -1
  101. package/dist/__tests__/localDashboard.test.js +0 -226
  102. package/dist/__tests__/localDashboard.test.js.map +0 -1
  103. package/dist/__tests__/multiHopDogfood.test.d.ts +0 -12
  104. package/dist/__tests__/multiHopDogfood.test.js +0 -303
  105. package/dist/__tests__/multiHopDogfood.test.js.map +0 -1
  106. package/dist/__tests__/openDatasetParallelEval.test.d.ts +0 -7
  107. package/dist/__tests__/openDatasetParallelEval.test.js +0 -209
  108. package/dist/__tests__/openDatasetParallelEval.test.js.map +0 -1
  109. package/dist/__tests__/openDatasetParallelEvalGaia.test.d.ts +0 -7
  110. package/dist/__tests__/openDatasetParallelEvalGaia.test.js +0 -279
  111. package/dist/__tests__/openDatasetParallelEvalGaia.test.js.map +0 -1
  112. package/dist/__tests__/openDatasetParallelEvalSwebench.test.d.ts +0 -7
  113. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js +0 -220
  114. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js.map +0 -1
  115. package/dist/__tests__/openDatasetParallelEvalToolbench.test.d.ts +0 -7
  116. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js +0 -218
  117. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js.map +0 -1
  118. package/dist/__tests__/openDatasetPerfComparison.test.d.ts +0 -10
  119. package/dist/__tests__/openDatasetPerfComparison.test.js +0 -318
  120. package/dist/__tests__/openDatasetPerfComparison.test.js.map +0 -1
  121. package/dist/__tests__/openclawDogfood.test.d.ts +0 -23
  122. package/dist/__tests__/openclawDogfood.test.js +0 -535
  123. package/dist/__tests__/openclawDogfood.test.js.map +0 -1
  124. package/dist/__tests__/openclawMessaging.test.d.ts +0 -14
  125. package/dist/__tests__/openclawMessaging.test.js +0 -232
  126. package/dist/__tests__/openclawMessaging.test.js.map +0 -1
  127. package/dist/__tests__/presetRealWorldBench.test.d.ts +0 -1
  128. package/dist/__tests__/presetRealWorldBench.test.js +0 -859
  129. package/dist/__tests__/presetRealWorldBench.test.js.map +0 -1
  130. package/dist/__tests__/tools.test.d.ts +0 -1
  131. package/dist/__tests__/tools.test.js +0 -3201
  132. package/dist/__tests__/tools.test.js.map +0 -1
  133. package/dist/__tests__/toolsetGatingEval.test.d.ts +0 -1
  134. package/dist/__tests__/toolsetGatingEval.test.js +0 -1099
  135. package/dist/__tests__/toolsetGatingEval.test.js.map +0 -1
  136. package/dist/__tests__/traceabilityDogfood.test.d.ts +0 -12
  137. package/dist/__tests__/traceabilityDogfood.test.js +0 -241
  138. package/dist/__tests__/traceabilityDogfood.test.js.map +0 -1
  139. package/dist/__tests__/webmcpTools.test.d.ts +0 -7
  140. package/dist/__tests__/webmcpTools.test.js +0 -195
  141. package/dist/__tests__/webmcpTools.test.js.map +0 -1
  142. package/dist/benchmarks/testProviderBus.d.ts +0 -7
  143. package/dist/benchmarks/testProviderBus.js +0 -272
  144. package/dist/benchmarks/testProviderBus.js.map +0 -1
  145. package/dist/hooks/postCompaction.d.ts +0 -14
  146. package/dist/hooks/postCompaction.js +0 -51
  147. package/dist/hooks/postCompaction.js.map +0 -1
  148. package/dist/security/__tests__/security.test.d.ts +0 -8
  149. package/dist/security/__tests__/security.test.js +0 -295
  150. package/dist/security/__tests__/security.test.js.map +0 -1
  151. package/dist/sync/hyperloopEval.test.d.ts +0 -4
  152. package/dist/sync/hyperloopEval.test.js +0 -60
  153. package/dist/sync/hyperloopEval.test.js.map +0 -1
  154. package/dist/sync/store.test.d.ts +0 -4
  155. package/dist/sync/store.test.js +0 -43
  156. package/dist/sync/store.test.js.map +0 -1
  157. package/dist/tools/documentTools.d.ts +0 -5
  158. package/dist/tools/documentTools.js +0 -524
  159. package/dist/tools/documentTools.js.map +0 -1
  160. package/dist/tools/financialTools.d.ts +0 -10
  161. package/dist/tools/financialTools.js +0 -403
  162. package/dist/tools/financialTools.js.map +0 -1
  163. package/dist/tools/memoryTools.d.ts +0 -5
  164. package/dist/tools/memoryTools.js +0 -137
  165. package/dist/tools/memoryTools.js.map +0 -1
  166. package/dist/tools/planningTools.d.ts +0 -5
  167. package/dist/tools/planningTools.js +0 -147
  168. package/dist/tools/planningTools.js.map +0 -1
  169. package/dist/tools/searchTools.d.ts +0 -5
  170. package/dist/tools/searchTools.js +0 -145
  171. package/dist/tools/searchTools.js.map +0 -1
@@ -1,524 +0,0 @@
1
- /**
2
- * Document, folder, spreadsheet tools backed by local SQLite.
3
- */
4
- import { getDb, genId } from "../db.js";
5
- // ─── ProseMirror JSON → Markdown converter ──────────────────────────────────
6
- function prosemirrorToMarkdown(jsonStr) {
7
- if (!jsonStr)
8
- return "";
9
- let doc;
10
- try {
11
- doc = JSON.parse(jsonStr);
12
- }
13
- catch {
14
- return jsonStr;
15
- }
16
- if (!doc || !doc.content)
17
- return jsonStr;
18
- return renderNodes(doc.content);
19
- }
20
- function renderNodes(nodes) {
21
- return (nodes || []).map(renderNode).join("");
22
- }
23
- function renderNode(node) {
24
- switch (node.type) {
25
- case "paragraph":
26
- return renderInline(node.content) + "\n\n";
27
- case "heading": {
28
- const level = node.attrs?.level ?? 1;
29
- return "#".repeat(level) + " " + renderInline(node.content) + "\n\n";
30
- }
31
- case "bulletList":
32
- return (node.content || []).map((li) => "- " + renderInline(li.content?.[0]?.content).trim()).join("\n") + "\n\n";
33
- case "orderedList":
34
- return (node.content || []).map((li, i) => `${i + 1}. ` + renderInline(li.content?.[0]?.content).trim()).join("\n") + "\n\n";
35
- case "codeBlock": {
36
- const lang = node.attrs?.language ?? "";
37
- return "```" + lang + "\n" + renderInline(node.content) + "\n```\n\n";
38
- }
39
- case "blockquote":
40
- return renderNodes(node.content || []).split("\n").map((l) => "> " + l).join("\n") + "\n\n";
41
- case "horizontalRule":
42
- return "---\n\n";
43
- case "text": {
44
- let t = node.text ?? "";
45
- for (const mark of node.marks || []) {
46
- if (mark.type === "bold")
47
- t = `**${t}**`;
48
- else if (mark.type === "italic")
49
- t = `*${t}*`;
50
- else if (mark.type === "code")
51
- t = "`" + t + "`";
52
- else if (mark.type === "link")
53
- t = `[${t}](${mark.attrs?.href ?? ""})`;
54
- }
55
- return t;
56
- }
57
- default:
58
- if (node.content)
59
- return renderNodes(node.content);
60
- if (node.text)
61
- return node.text;
62
- return "";
63
- }
64
- }
65
- function renderInline(content) {
66
- if (!content)
67
- return "";
68
- return content.map(renderNode).join("");
69
- }
70
- // ─── tool definitions ───────────────────────────────────────────────────────
71
- export const documentTools = [
72
- // ── Document CRUD ─────────────────────────────────────────────
73
- {
74
- name: "createDocument",
75
- description: "Create a new rich-text document with a title and optional initial content blocks.",
76
- inputSchema: {
77
- type: "object",
78
- properties: {
79
- title: { type: "string", description: "Document title" },
80
- parentId: { type: "string", description: "Optional parent document ID for hierarchy" },
81
- },
82
- required: ["title"],
83
- },
84
- handler: async (args) => {
85
- const db = getDb();
86
- const id = genId("doc");
87
- db.prepare("INSERT INTO documents (id, title, parent_id) VALUES (?, ?, ?)").run(id, args.title, args.parentId ?? null);
88
- return { id, title: args.title };
89
- },
90
- },
91
- {
92
- name: "createDocumentWithContent",
93
- description: "Create a document with pre-built ProseMirror JSON content string.",
94
- inputSchema: {
95
- type: "object",
96
- properties: {
97
- title: { type: "string", description: "Document title" },
98
- content: { type: "string", description: "ProseMirror JSON content string" },
99
- parentId: { type: "string", description: "Optional parent document ID" },
100
- },
101
- required: ["title", "content"],
102
- },
103
- handler: async (args) => {
104
- const db = getDb();
105
- const id = genId("doc");
106
- db.prepare("INSERT INTO documents (id, title, content, parent_id) VALUES (?, ?, ?, ?)").run(id, args.title, args.content, args.parentId ?? null);
107
- return { id, title: args.title };
108
- },
109
- },
110
- {
111
- name: "getDocument",
112
- description: "Get a document by ID, including title, content, metadata, and file info.",
113
- inputSchema: {
114
- type: "object",
115
- properties: {
116
- documentId: { type: "string", description: "Document ID" },
117
- },
118
- required: ["documentId"],
119
- },
120
- handler: async (args) => {
121
- const db = getDb();
122
- const row = db.prepare("SELECT * FROM documents WHERE id = ? AND is_archived = 0").get(args.documentId);
123
- if (!row)
124
- throw new Error(`Document not found: ${args.documentId}`);
125
- return {
126
- id: row.id, title: row.title, content: row.content, icon: row.icon,
127
- parentId: row.parent_id, isArchived: !!row.is_archived, docType: row.doc_type,
128
- createdAt: row.created_at, updatedAt: row.updated_at,
129
- };
130
- },
131
- },
132
- {
133
- name: "updateDocument",
134
- description: "Update document fields: title, content, icon, visibility, favorite status.",
135
- inputSchema: {
136
- type: "object",
137
- properties: {
138
- id: { type: "string", description: "Document ID" },
139
- title: { type: "string", description: "New title" },
140
- content: { type: "string", description: "New ProseMirror JSON content string" },
141
- icon: { type: "string", description: "Emoji icon" },
142
- isPublic: { type: "boolean", description: "Public visibility" },
143
- isFavorite: { type: "boolean", description: "Favorite status" },
144
- },
145
- required: ["id"],
146
- },
147
- handler: async (args) => {
148
- const db = getDb();
149
- const sets = [];
150
- const vals = [];
151
- if (args.title !== undefined) {
152
- sets.push("title = ?");
153
- vals.push(args.title);
154
- }
155
- if (args.content !== undefined) {
156
- sets.push("content = ?");
157
- vals.push(args.content);
158
- }
159
- if (args.icon !== undefined) {
160
- sets.push("icon = ?");
161
- vals.push(args.icon);
162
- }
163
- sets.push("updated_at = ?");
164
- vals.push(new Date().toISOString());
165
- vals.push(args.id);
166
- if (sets.length <= 1)
167
- throw new Error("No fields to update");
168
- db.prepare(`UPDATE documents SET ${sets.join(", ")} WHERE id = ?`).run(...vals);
169
- return { success: true, id: args.id };
170
- },
171
- },
172
- {
173
- name: "archiveDocument",
174
- description: "Archive (soft-delete) a document and all its children recursively.",
175
- inputSchema: {
176
- type: "object",
177
- properties: {
178
- id: { type: "string", description: "Document ID" },
179
- },
180
- required: ["id"],
181
- },
182
- handler: async (args) => {
183
- const db = getDb();
184
- const now = new Date().toISOString();
185
- db.prepare(`
186
- WITH RECURSIVE children(id) AS (
187
- SELECT id FROM documents WHERE id = ?
188
- UNION ALL
189
- SELECT d.id FROM documents d JOIN children c ON d.parent_id = c.id
190
- )
191
- UPDATE documents SET is_archived = 1, updated_at = ?
192
- WHERE id IN (SELECT id FROM children)
193
- `).run(args.id, now);
194
- return { success: true, id: args.id };
195
- },
196
- },
197
- {
198
- name: "restoreDocument",
199
- description: "Restore an archived document and its children.",
200
- inputSchema: {
201
- type: "object",
202
- properties: {
203
- id: { type: "string", description: "Document ID" },
204
- },
205
- required: ["id"],
206
- },
207
- handler: async (args) => {
208
- const db = getDb();
209
- const now = new Date().toISOString();
210
- db.prepare(`
211
- WITH RECURSIVE children(id) AS (
212
- SELECT id FROM documents WHERE id = ?
213
- UNION ALL
214
- SELECT d.id FROM documents d JOIN children c ON d.parent_id = c.id
215
- )
216
- UPDATE documents SET is_archived = 0, updated_at = ?
217
- WHERE id IN (SELECT id FROM children)
218
- `).run(args.id, now);
219
- return { success: true, id: args.id };
220
- },
221
- },
222
- {
223
- name: "searchDocuments",
224
- description: "Search documents by title and content (full-text search).",
225
- inputSchema: {
226
- type: "object",
227
- properties: {
228
- query: { type: "string", description: "Search query" },
229
- },
230
- required: ["query"],
231
- },
232
- handler: async (args) => {
233
- const db = getDb();
234
- const rows = db.prepare(`
235
- SELECT d.id, d.title, snippet(documents_fts, 1, '**', '**', '...', 48) as snippet
236
- FROM documents_fts
237
- JOIN documents d ON d.rowid = documents_fts.rowid
238
- WHERE documents_fts MATCH ?
239
- AND d.is_archived = 0
240
- ORDER BY rank
241
- LIMIT 50
242
- `).all(args.query);
243
- return {
244
- count: rows.length,
245
- results: rows.map((r) => ({ id: r.id, title: r.title, snippet: r.snippet })),
246
- };
247
- },
248
- },
249
- {
250
- name: "listDocuments",
251
- description: "List all user documents sorted by last modified (most recent first, up to 200).",
252
- inputSchema: {
253
- type: "object",
254
- properties: {
255
- limit: { type: "number", description: "Max results (default 100)" },
256
- },
257
- },
258
- handler: async (args) => {
259
- const db = getDb();
260
- const limit = Math.min(args.limit ?? 100, 200);
261
- const rows = db.prepare("SELECT id, title, doc_type, icon, parent_id, created_at, updated_at FROM documents WHERE is_archived = 0 ORDER BY updated_at DESC LIMIT ?").all(limit);
262
- return {
263
- count: rows.length,
264
- documents: rows.map((r) => ({
265
- id: r.id, title: r.title, docType: r.doc_type, icon: r.icon,
266
- parentId: r.parent_id, createdAt: r.created_at, updatedAt: r.updated_at,
267
- })),
268
- };
269
- },
270
- },
271
- {
272
- name: "exportDocumentToMarkdown",
273
- description: "Export a document to Markdown format. Returns { title, markdown }.",
274
- inputSchema: {
275
- type: "object",
276
- properties: {
277
- documentId: { type: "string", description: "Document ID" },
278
- },
279
- required: ["documentId"],
280
- },
281
- handler: async (args) => {
282
- const db = getDb();
283
- const row = db.prepare("SELECT title, content FROM documents WHERE id = ?").get(args.documentId);
284
- if (!row)
285
- throw new Error(`Document not found: ${args.documentId}`);
286
- return {
287
- title: row.title,
288
- markdown: `# ${row.title}\n\n${prosemirrorToMarkdown(row.content)}`,
289
- };
290
- },
291
- },
292
- {
293
- name: "duplicateDocument",
294
- description: "Duplicate a document. Clones content, icon, type. Resets visibility and favorite.",
295
- inputSchema: {
296
- type: "object",
297
- properties: {
298
- documentId: { type: "string", description: "Document ID to clone" },
299
- title: { type: "string", description: "Override title (default: original + ' (Copy)')" },
300
- },
301
- required: ["documentId"],
302
- },
303
- handler: async (args) => {
304
- const db = getDb();
305
- const original = db.prepare("SELECT * FROM documents WHERE id = ?").get(args.documentId);
306
- if (!original)
307
- throw new Error(`Document not found: ${args.documentId}`);
308
- const newId = genId("doc");
309
- const newTitle = args.title ?? `${original.title} (Copy)`;
310
- db.prepare("INSERT INTO documents (id, title, content, icon, doc_type) VALUES (?, ?, ?, ?, ?)").run(newId, newTitle, original.content, original.icon, original.doc_type);
311
- return { id: newId, title: newTitle };
312
- },
313
- },
314
- // ── Folder Management ─────────────────────────────────────────
315
- {
316
- name: "createFolder",
317
- description: "Create a new folder for organizing documents.",
318
- inputSchema: {
319
- type: "object",
320
- properties: {
321
- name: { type: "string", description: "Folder name" },
322
- color: { type: "string", description: "CSS color class (e.g. 'blue', 'red', 'green')" },
323
- },
324
- required: ["name", "color"],
325
- },
326
- handler: async (args) => {
327
- const db = getDb();
328
- const id = genId("folder");
329
- db.prepare("INSERT INTO folders (id, name, color) VALUES (?, ?, ?)").run(id, args.name, args.color);
330
- return { id, name: args.name, color: args.color };
331
- },
332
- },
333
- {
334
- name: "listFolders",
335
- description: "List all user folders.",
336
- inputSchema: { type: "object", properties: {} },
337
- handler: async () => {
338
- const db = getDb();
339
- const rows = db.prepare("SELECT * FROM folders ORDER BY created_at DESC").all();
340
- return {
341
- count: rows.length,
342
- folders: rows.map((r) => ({ id: r.id, name: r.name, color: r.color, createdAt: r.created_at })),
343
- };
344
- },
345
- },
346
- {
347
- name: "getFolderWithDocuments",
348
- description: "Get a folder and all documents inside it.",
349
- inputSchema: {
350
- type: "object",
351
- properties: {
352
- folderId: { type: "string", description: "Folder ID" },
353
- },
354
- required: ["folderId"],
355
- },
356
- handler: async (args) => {
357
- const db = getDb();
358
- const folder = db.prepare("SELECT * FROM folders WHERE id = ?").get(args.folderId);
359
- if (!folder)
360
- throw new Error(`Folder not found: ${args.folderId}`);
361
- const docs = db.prepare(`
362
- SELECT d.id, d.title, d.doc_type, d.icon, d.updated_at
363
- FROM folder_documents fd
364
- JOIN documents d ON d.id = fd.document_id
365
- WHERE fd.folder_id = ? AND d.is_archived = 0
366
- ORDER BY d.updated_at DESC
367
- `).all(args.folderId);
368
- return {
369
- folder: { id: folder.id, name: folder.name, color: folder.color },
370
- documents: docs.map((d) => ({
371
- id: d.id, title: d.title, docType: d.doc_type, icon: d.icon, updatedAt: d.updated_at,
372
- })),
373
- };
374
- },
375
- },
376
- {
377
- name: "addDocumentToFolder",
378
- description: "Add a document to a folder.",
379
- inputSchema: {
380
- type: "object",
381
- properties: {
382
- documentId: { type: "string", description: "Document ID" },
383
- folderId: { type: "string", description: "Folder ID" },
384
- },
385
- required: ["documentId", "folderId"],
386
- },
387
- handler: async (args) => {
388
- const db = getDb();
389
- db.prepare("INSERT OR IGNORE INTO folder_documents (folder_id, document_id) VALUES (?, ?)").run(args.folderId, args.documentId);
390
- return { success: true };
391
- },
392
- },
393
- {
394
- name: "removeDocumentFromFolder",
395
- description: "Remove a document from a folder.",
396
- inputSchema: {
397
- type: "object",
398
- properties: {
399
- documentId: { type: "string", description: "Document ID" },
400
- folderId: { type: "string", description: "Folder ID" },
401
- },
402
- required: ["documentId", "folderId"],
403
- },
404
- handler: async (args) => {
405
- const db = getDb();
406
- db.prepare("DELETE FROM folder_documents WHERE folder_id = ? AND document_id = ?").run(args.folderId, args.documentId);
407
- return { success: true };
408
- },
409
- },
410
- // ── Spreadsheet Operations ────────────────────────────────────
411
- {
412
- name: "createSpreadsheet",
413
- description: "Create a new spreadsheet with a name.",
414
- inputSchema: {
415
- type: "object",
416
- properties: {
417
- name: { type: "string", description: "Spreadsheet name" },
418
- },
419
- required: ["name"],
420
- },
421
- handler: async (args) => {
422
- const db = getDb();
423
- const id = genId("sheet");
424
- db.prepare("INSERT INTO documents (id, title, doc_type) VALUES (?, ?, 'spreadsheet')").run(id, args.name);
425
- return { id, name: args.name };
426
- },
427
- },
428
- {
429
- name: "listSpreadsheets",
430
- description: "List user spreadsheets sorted by last updated.",
431
- inputSchema: {
432
- type: "object",
433
- properties: {
434
- limit: { type: "number", description: "Max results (default 25)" },
435
- },
436
- },
437
- handler: async (args) => {
438
- const db = getDb();
439
- const limit = args.limit ?? 25;
440
- const rows = db.prepare("SELECT id, title, created_at, updated_at FROM documents WHERE doc_type = 'spreadsheet' AND is_archived = 0 ORDER BY updated_at DESC LIMIT ?").all(limit);
441
- return {
442
- count: rows.length,
443
- spreadsheets: rows.map((r) => ({
444
- id: r.id, name: r.title, createdAt: r.created_at, updatedAt: r.updated_at,
445
- })),
446
- };
447
- },
448
- },
449
- {
450
- name: "getSpreadsheetRange",
451
- description: "Get cells within a range from a spreadsheet (row/col coordinates).",
452
- inputSchema: {
453
- type: "object",
454
- properties: {
455
- sheetId: { type: "string", description: "Spreadsheet ID" },
456
- startRow: { type: "number", description: "Start row (0-based)" },
457
- endRow: { type: "number", description: "End row (inclusive)" },
458
- startCol: { type: "number", description: "Start column (0-based)" },
459
- endCol: { type: "number", description: "End column (inclusive)" },
460
- },
461
- required: ["sheetId", "startRow", "endRow", "startCol", "endCol"],
462
- },
463
- handler: async (args) => {
464
- const db = getDb();
465
- const rows = db.prepare(`
466
- SELECT row, col, value, cell_type
467
- FROM spreadsheet_cells
468
- WHERE sheet_id = ? AND row BETWEEN ? AND ? AND col BETWEEN ? AND ?
469
- ORDER BY row, col
470
- `).all(args.sheetId, args.startRow, args.endRow, args.startCol, args.endCol);
471
- return {
472
- sheetId: args.sheetId,
473
- range: { startRow: args.startRow, endRow: args.endRow, startCol: args.startCol, endCol: args.endCol },
474
- cells: rows.map((r) => ({ row: r.row, col: r.col, value: r.value, type: r.cell_type })),
475
- };
476
- },
477
- },
478
- {
479
- name: "applySpreadsheetOperations",
480
- description: 'Apply batch cell operations to a spreadsheet. Operations: setCell ({op:"setCell", row, col, value, type?}), clearCell ({op:"clearCell", row, col}).',
481
- inputSchema: {
482
- type: "object",
483
- properties: {
484
- sheetId: { type: "string", description: "Spreadsheet ID" },
485
- operations: {
486
- type: "array",
487
- description: "Array of cell operations",
488
- items: {
489
- type: "object",
490
- properties: {
491
- op: { type: "string", enum: ["setCell", "clearCell"] },
492
- row: { type: "number" },
493
- col: { type: "number" },
494
- value: { type: "string" },
495
- type: { type: "string" },
496
- },
497
- required: ["op"],
498
- },
499
- },
500
- },
501
- required: ["sheetId", "operations"],
502
- },
503
- handler: async (args) => {
504
- const db = getDb();
505
- const setStmt = db.prepare("INSERT OR REPLACE INTO spreadsheet_cells (sheet_id, row, col, value, cell_type) VALUES (?, ?, ?, ?, ?)");
506
- const clearStmt = db.prepare("DELETE FROM spreadsheet_cells WHERE sheet_id = ? AND row = ? AND col = ?");
507
- const tx = db.transaction(() => {
508
- for (const op of args.operations) {
509
- if (op.op === "setCell") {
510
- setStmt.run(args.sheetId, op.row, op.col, op.value ?? "", op.type ?? "text");
511
- }
512
- else if (op.op === "clearCell") {
513
- clearStmt.run(args.sheetId, op.row, op.col);
514
- }
515
- }
516
- });
517
- tx();
518
- // Update the document's updated_at
519
- db.prepare("UPDATE documents SET updated_at = ? WHERE id = ?").run(new Date().toISOString(), args.sheetId);
520
- return { success: true, operationsApplied: args.operations.length };
521
- },
522
- },
523
- ];
524
- //# sourceMappingURL=documentTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"documentTools.js","sourceRoot":"","sources":["../../src/tools/documentTools.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Financial data tools — uses only built-in `fetch()` (no npm packages).
3
- *
4
- * Data sources:
5
- * - Stooq (equity / crypto CSV quotes & history)
6
- * - Yahoo Finance (quote, fundamentals, news)
7
- * - World Bank (GDP, inflation)
8
- */
9
- import type { McpTool } from "../types.js";
10
- export declare const financialTools: McpTool[];