nodebench-mcp 1.0.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.
- package/README.md +237 -0
- package/dist/__tests__/tools.test.d.ts +1 -0
- package/dist/__tests__/tools.test.js +402 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/db.d.ts +4 -0
- package/dist/db.js +198 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +237 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/documentTools.d.ts +5 -0
- package/dist/tools/documentTools.js +524 -0
- package/dist/tools/documentTools.js.map +1 -0
- package/dist/tools/documentationTools.d.ts +12 -0
- package/dist/tools/documentationTools.js +647 -0
- package/dist/tools/documentationTools.js.map +1 -0
- package/dist/tools/evalTools.d.ts +6 -0
- package/dist/tools/evalTools.js +335 -0
- package/dist/tools/evalTools.js.map +1 -0
- package/dist/tools/financialTools.d.ts +10 -0
- package/dist/tools/financialTools.js +403 -0
- package/dist/tools/financialTools.js.map +1 -0
- package/dist/tools/flywheelTools.d.ts +6 -0
- package/dist/tools/flywheelTools.js +366 -0
- package/dist/tools/flywheelTools.js.map +1 -0
- package/dist/tools/githubTools.d.ts +12 -0
- package/dist/tools/githubTools.js +432 -0
- package/dist/tools/githubTools.js.map +1 -0
- package/dist/tools/learningTools.d.ts +6 -0
- package/dist/tools/learningTools.js +199 -0
- package/dist/tools/learningTools.js.map +1 -0
- package/dist/tools/memoryTools.d.ts +5 -0
- package/dist/tools/memoryTools.js +137 -0
- package/dist/tools/memoryTools.js.map +1 -0
- package/dist/tools/metaTools.d.ts +7 -0
- package/dist/tools/metaTools.js +837 -0
- package/dist/tools/metaTools.js.map +1 -0
- package/dist/tools/planningTools.d.ts +5 -0
- package/dist/tools/planningTools.js +147 -0
- package/dist/tools/planningTools.js.map +1 -0
- package/dist/tools/qualityGateTools.d.ts +6 -0
- package/dist/tools/qualityGateTools.js +347 -0
- package/dist/tools/qualityGateTools.js.map +1 -0
- package/dist/tools/reconTools.d.ts +8 -0
- package/dist/tools/reconTools.js +729 -0
- package/dist/tools/reconTools.js.map +1 -0
- package/dist/tools/searchTools.d.ts +5 -0
- package/dist/tools/searchTools.js +145 -0
- package/dist/tools/searchTools.js.map +1 -0
- package/dist/tools/uiCaptureTools.d.ts +8 -0
- package/dist/tools/uiCaptureTools.js +339 -0
- package/dist/tools/uiCaptureTools.js.map +1 -0
- package/dist/tools/verificationTools.d.ts +6 -0
- package/dist/tools/verificationTools.js +472 -0
- package/dist/tools/verificationTools.js.map +1 -0
- package/dist/tools/visionTools.d.ts +12 -0
- package/dist/tools/visionTools.js +553 -0
- package/dist/tools/visionTools.js.map +1 -0
- package/dist/tools/webTools.d.ts +12 -0
- package/dist/tools/webTools.js +443 -0
- package/dist/tools/webTools.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,524 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentTools.js","sourceRoot":"","sources":["../../src/tools/documentTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation & Research tools — Self-maintenance and market research.
|
|
3
|
+
* Enables agents to maintain AGENTS.md, research job markets, and set up local environments.
|
|
4
|
+
*
|
|
5
|
+
* - update_agents_md: Read/append/update sections in AGENTS.md
|
|
6
|
+
* - research_job_market: Aggregate job requirements for roles/skills
|
|
7
|
+
* - setup_local_env: Help agents configure their local environment
|
|
8
|
+
*
|
|
9
|
+
* Designed for fully local operation — helps agents bootstrap their own tooling.
|
|
10
|
+
*/
|
|
11
|
+
import type { McpTool } from "../types.js";
|
|
12
|
+
export declare const documentationTools: McpTool[];
|