@paca-ai/paca-mcp 0.2.0 → 0.3.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 +177 -1
- package/build/api/client.d.ts.map +1 -1
- package/build/api/client.js +3 -0
- package/build/api/client.js.map +1 -1
- package/build/api/doc-client.d.ts.map +1 -1
- package/build/api/doc-client.js +3 -0
- package/build/api/doc-client.js.map +1 -1
- package/build/api/extended-client.d.ts.map +1 -1
- package/build/api/extended-client.js +3 -0
- package/build/api/extended-client.js.map +1 -1
- package/build/api/task-extended-client.d.ts.map +1 -1
- package/build/api/task-extended-client.js +3 -0
- package/build/api/task-extended-client.js.map +1 -1
- package/build/api/views-client.d.ts.map +1 -1
- package/build/api/views-client.js +3 -0
- package/build/api/views-client.js.map +1 -1
- package/build/index.js +14 -1
- package/build/index.js.map +1 -1
- package/build/package.json +1 -1
- package/build/permissions.d.ts +15 -0
- package/build/permissions.d.ts.map +1 -0
- package/build/permissions.js +213 -0
- package/build/permissions.js.map +1 -0
- package/build/plugin-loader.d.ts.map +1 -1
- package/build/plugin-loader.js +21 -7
- package/build/plugin-loader.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +50 -2
- package/build/server.js.map +1 -1
- package/build/tools/filesystem-doc-tools.d.ts +5 -0
- package/build/tools/filesystem-doc-tools.d.ts.map +1 -0
- package/build/tools/filesystem-doc-tools.js +417 -0
- package/build/tools/filesystem-doc-tools.js.map +1 -0
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +9 -20
- package/build/tools/index.js.map +1 -1
- package/build/tools/view-tools.d.ts.map +1 -1
- package/build/tools/view-tools.js +15 -3
- package/build/tools/view-tools.js.map +1 -1
- package/build/types/index.d.ts +18 -1
- package/build/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/build/tools/doc-github-tools.d.ts +0 -11
- package/build/tools/doc-github-tools.d.ts.map +0 -1
- package/build/tools/doc-github-tools.js +0 -267
- package/build/tools/doc-github-tools.js.map +0 -1
- package/build/tools/document-tools.d.ts +0 -16
- package/build/tools/document-tools.d.ts.map +0 -1
- package/build/tools/document-tools.js +0 -224
- package/build/tools/document-tools.js.map +0 -1
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { blocknoteToMarkdown } from "../utils/index.js";
|
|
3
|
+
// ── Zod schemas ───────────────────────────────────────────────────────────────
|
|
4
|
+
const ListDocsSchema = z.object({
|
|
5
|
+
projectId: z.string(),
|
|
6
|
+
path: z.string().optional(),
|
|
7
|
+
});
|
|
8
|
+
const ReadDocSchema = z.object({
|
|
9
|
+
projectId: z.string(),
|
|
10
|
+
path: z.string(),
|
|
11
|
+
});
|
|
12
|
+
const WriteDocSchema = z.object({
|
|
13
|
+
projectId: z.string(),
|
|
14
|
+
path: z.string(),
|
|
15
|
+
content: z.string(),
|
|
16
|
+
});
|
|
17
|
+
const DeleteDocSchema = z.object({
|
|
18
|
+
projectId: z.string(),
|
|
19
|
+
path: z.string(),
|
|
20
|
+
});
|
|
21
|
+
const MoveDocSchema = z.object({
|
|
22
|
+
projectId: z.string(),
|
|
23
|
+
sourcePath: z.string(),
|
|
24
|
+
destPath: z.string(),
|
|
25
|
+
});
|
|
26
|
+
// ── Tree building ─────────────────────────────────────────────────────────────
|
|
27
|
+
async function buildDocTree(projectId, apiClient, docClient) {
|
|
28
|
+
const [folders, documents] = await Promise.all([
|
|
29
|
+
docClient.listFolders(projectId),
|
|
30
|
+
apiClient.listDocuments(projectId),
|
|
31
|
+
]);
|
|
32
|
+
const foldersByParent = new Map();
|
|
33
|
+
const foldersById = new Map();
|
|
34
|
+
for (const f of folders) {
|
|
35
|
+
const pid = f.parent_id || null;
|
|
36
|
+
if (!foldersByParent.has(pid))
|
|
37
|
+
foldersByParent.set(pid, []);
|
|
38
|
+
foldersByParent.get(pid).push(f);
|
|
39
|
+
foldersById.set(f.id, f);
|
|
40
|
+
}
|
|
41
|
+
const docsByFolder = new Map();
|
|
42
|
+
for (const d of documents) {
|
|
43
|
+
const fid = d.folder_id || null;
|
|
44
|
+
if (!docsByFolder.has(fid))
|
|
45
|
+
docsByFolder.set(fid, []);
|
|
46
|
+
docsByFolder.get(fid).push(d);
|
|
47
|
+
}
|
|
48
|
+
return { folders, documents, foldersByParent, docsByFolder, foldersById };
|
|
49
|
+
}
|
|
50
|
+
// ── Tree rendering ────────────────────────────────────────────────────────────
|
|
51
|
+
function renderLines(parentId, tree) {
|
|
52
|
+
const childFolders = (tree.foldersByParent.get(parentId) || [])
|
|
53
|
+
.slice()
|
|
54
|
+
.sort((a, b) => a.position - b.position || a.name.localeCompare(b.name));
|
|
55
|
+
const childDocs = (tree.docsByFolder.get(parentId) || [])
|
|
56
|
+
.slice()
|
|
57
|
+
.sort((a, b) => a.position - b.position || a.title.localeCompare(b.title));
|
|
58
|
+
const entries = [
|
|
59
|
+
...childFolders.map((f) => ({ label: `📁 ${f.name}/`, folderId: f.id })),
|
|
60
|
+
...childDocs.map((d) => ({ label: `📄 ${d.title}` })),
|
|
61
|
+
];
|
|
62
|
+
const lines = [];
|
|
63
|
+
entries.forEach((entry, i) => {
|
|
64
|
+
const last = i === entries.length - 1;
|
|
65
|
+
const connector = last ? "└── " : "├── ";
|
|
66
|
+
const childIndent = last ? " " : "│ ";
|
|
67
|
+
lines.push(connector + entry.label);
|
|
68
|
+
if (entry.folderId) {
|
|
69
|
+
for (const child of renderLines(entry.folderId, tree)) {
|
|
70
|
+
lines.push(childIndent + child);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return lines;
|
|
75
|
+
}
|
|
76
|
+
// ── Path helpers ──────────────────────────────────────────────────────────────
|
|
77
|
+
function parsePath(path) {
|
|
78
|
+
return path
|
|
79
|
+
.split("/")
|
|
80
|
+
.map((p) => p.trim())
|
|
81
|
+
.filter((p) => p.length > 0);
|
|
82
|
+
}
|
|
83
|
+
function resolvePath(path, tree) {
|
|
84
|
+
const parts = parsePath(path);
|
|
85
|
+
if (parts.length === 0)
|
|
86
|
+
return { type: "root" };
|
|
87
|
+
let currentFolderId = null;
|
|
88
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
89
|
+
const name = parts[i];
|
|
90
|
+
const siblings = tree.foldersByParent.get(currentFolderId) || [];
|
|
91
|
+
const found = siblings.find((f) => f.name === name);
|
|
92
|
+
if (!found)
|
|
93
|
+
return null;
|
|
94
|
+
currentFolderId = found.id;
|
|
95
|
+
}
|
|
96
|
+
const lastName = parts[parts.length - 1];
|
|
97
|
+
const siblingFolders = tree.foldersByParent.get(currentFolderId) || [];
|
|
98
|
+
const folder = siblingFolders.find((f) => f.name === lastName);
|
|
99
|
+
if (folder)
|
|
100
|
+
return { type: "folder", folder };
|
|
101
|
+
const siblingDocs = tree.docsByFolder.get(currentFolderId) || [];
|
|
102
|
+
const doc = siblingDocs.find((d) => d.title === lastName);
|
|
103
|
+
if (doc)
|
|
104
|
+
return { type: "doc", doc };
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
async function ensureFolderPath(projectId, folderNames, docClient, tree) {
|
|
108
|
+
let currentFolderId = null;
|
|
109
|
+
for (const name of folderNames) {
|
|
110
|
+
const siblings = tree.foldersByParent.get(currentFolderId) || [];
|
|
111
|
+
let folder = siblings.find((f) => f.name === name);
|
|
112
|
+
if (!folder) {
|
|
113
|
+
folder = await docClient.createFolder(projectId, {
|
|
114
|
+
name,
|
|
115
|
+
parent_id: currentFolderId || undefined,
|
|
116
|
+
});
|
|
117
|
+
if (!tree.foldersByParent.has(currentFolderId)) {
|
|
118
|
+
tree.foldersByParent.set(currentFolderId, []);
|
|
119
|
+
}
|
|
120
|
+
tree.foldersByParent.get(currentFolderId).push(folder);
|
|
121
|
+
tree.foldersById.set(folder.id, folder);
|
|
122
|
+
}
|
|
123
|
+
currentFolderId = folder.id;
|
|
124
|
+
}
|
|
125
|
+
return currentFolderId;
|
|
126
|
+
}
|
|
127
|
+
// ── Tool definitions ──────────────────────────────────────────────────────────
|
|
128
|
+
export function getFilesystemDocTools() {
|
|
129
|
+
return [
|
|
130
|
+
{
|
|
131
|
+
name: "list_docs",
|
|
132
|
+
description: "List the documentation tree for a project, showing folders and documents in a filesystem-like hierarchy. " +
|
|
133
|
+
"Optionally start from a specific folder path. Use this to explore the project documentation structure.",
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: "object",
|
|
136
|
+
properties: {
|
|
137
|
+
projectId: {
|
|
138
|
+
type: "string",
|
|
139
|
+
description: "The technical UUID of the project. Use list_projects to get the project ID.",
|
|
140
|
+
},
|
|
141
|
+
path: {
|
|
142
|
+
type: "string",
|
|
143
|
+
description: "Optional folder path to list from (e.g. 'Architecture' or 'Guides/Setup'). " +
|
|
144
|
+
"Omit or leave empty to list from the root.",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
required: ["projectId"],
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "read_doc",
|
|
152
|
+
description: "Read the Markdown content of a document by its path (e.g. 'Architecture/API Design'). " +
|
|
153
|
+
"Use list_docs first to discover available paths.",
|
|
154
|
+
inputSchema: {
|
|
155
|
+
type: "object",
|
|
156
|
+
properties: {
|
|
157
|
+
projectId: {
|
|
158
|
+
type: "string",
|
|
159
|
+
description: "The technical UUID of the project. Use list_projects to get the project ID.",
|
|
160
|
+
},
|
|
161
|
+
path: {
|
|
162
|
+
type: "string",
|
|
163
|
+
description: "Path to the document (e.g. 'Architecture/API Design' or just 'README'). " +
|
|
164
|
+
"Folder and document names are separated by '/'.",
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
required: ["projectId", "path"],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: "write_doc",
|
|
172
|
+
description: "Create or update a document at the given path. " +
|
|
173
|
+
"If the document already exists it will be updated; otherwise it will be created. " +
|
|
174
|
+
"Missing intermediate folders are created automatically. " +
|
|
175
|
+
"Always prefer this over creating local files when writing project documentation.",
|
|
176
|
+
inputSchema: {
|
|
177
|
+
type: "object",
|
|
178
|
+
properties: {
|
|
179
|
+
projectId: {
|
|
180
|
+
type: "string",
|
|
181
|
+
description: "The technical UUID of the project. Use list_projects to get the project ID.",
|
|
182
|
+
},
|
|
183
|
+
path: {
|
|
184
|
+
type: "string",
|
|
185
|
+
description: "Full path for the document (e.g. 'Architecture/API Design' or 'README'). " +
|
|
186
|
+
"The last segment is the document title; preceding segments are folder names.",
|
|
187
|
+
},
|
|
188
|
+
content: {
|
|
189
|
+
type: "string",
|
|
190
|
+
description: "Document content in Markdown format.",
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
required: ["projectId", "path", "content"],
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: "delete_doc",
|
|
198
|
+
description: "Delete a document or folder by path. " +
|
|
199
|
+
"Deleting a folder also removes all documents and subfolders inside it.",
|
|
200
|
+
inputSchema: {
|
|
201
|
+
type: "object",
|
|
202
|
+
properties: {
|
|
203
|
+
projectId: {
|
|
204
|
+
type: "string",
|
|
205
|
+
description: "The technical UUID of the project. Use list_projects to get the project ID.",
|
|
206
|
+
},
|
|
207
|
+
path: {
|
|
208
|
+
type: "string",
|
|
209
|
+
description: "Path to the document or folder to delete.",
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
required: ["projectId", "path"],
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "move_doc",
|
|
217
|
+
description: "Move or rename a document or folder by specifying a source path and destination path. " +
|
|
218
|
+
"Missing intermediate folders in the destination are created automatically.",
|
|
219
|
+
inputSchema: {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
projectId: {
|
|
223
|
+
type: "string",
|
|
224
|
+
description: "The technical UUID of the project. Use list_projects to get the project ID.",
|
|
225
|
+
},
|
|
226
|
+
sourcePath: {
|
|
227
|
+
type: "string",
|
|
228
|
+
description: "Current path of the document or folder.",
|
|
229
|
+
},
|
|
230
|
+
destPath: {
|
|
231
|
+
type: "string",
|
|
232
|
+
description: "New path for the document or folder. The last segment becomes the new name.",
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
required: ["projectId", "sourcePath", "destPath"],
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
}
|
|
240
|
+
// ── Tool handler ──────────────────────────────────────────────────────────────
|
|
241
|
+
export async function handleFilesystemDocTool(toolName, args, apiClient, docClient) {
|
|
242
|
+
switch (toolName) {
|
|
243
|
+
case "list_docs": {
|
|
244
|
+
const { projectId, path } = ListDocsSchema.parse(args);
|
|
245
|
+
const tree = await buildDocTree(projectId, apiClient, docClient);
|
|
246
|
+
let rootId = null;
|
|
247
|
+
let header = "/";
|
|
248
|
+
if (path && path.trim() !== "" && path.trim() !== "/") {
|
|
249
|
+
const resolved = resolvePath(path, tree);
|
|
250
|
+
if (!resolved) {
|
|
251
|
+
return {
|
|
252
|
+
content: [{ type: "text", text: `Path not found: ${path}` }],
|
|
253
|
+
isError: true,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
else if (resolved.type === "doc") {
|
|
257
|
+
return {
|
|
258
|
+
content: [
|
|
259
|
+
{
|
|
260
|
+
type: "text",
|
|
261
|
+
text: `'${path}' is a document, not a folder. Use read_doc to read it.`,
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
isError: true,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
else if (resolved.type === "folder") {
|
|
268
|
+
rootId = resolved.folder.id;
|
|
269
|
+
header = path;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const lines = renderLines(rootId, tree);
|
|
273
|
+
const treeStr = lines.length > 0 ? lines.join("\n") : "(empty)";
|
|
274
|
+
return {
|
|
275
|
+
content: [{ type: "text", text: `📂 ${header}\n${treeStr}` }],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
case "read_doc": {
|
|
279
|
+
const { projectId, path } = ReadDocSchema.parse(args);
|
|
280
|
+
const tree = await buildDocTree(projectId, apiClient, docClient);
|
|
281
|
+
const resolved = resolvePath(path, tree);
|
|
282
|
+
if (!resolved) {
|
|
283
|
+
return {
|
|
284
|
+
content: [{ type: "text", text: `Not found: ${path}` }],
|
|
285
|
+
isError: true,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
if (resolved.type !== "doc") {
|
|
289
|
+
return {
|
|
290
|
+
content: [
|
|
291
|
+
{
|
|
292
|
+
type: "text",
|
|
293
|
+
text: `'${path}' is a folder, not a document. Use list_docs to see its contents.`,
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
isError: true,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const doc = await apiClient.getDocument(projectId, resolved.doc.id);
|
|
300
|
+
const content = doc.content ? blocknoteToMarkdown(doc.content) : "";
|
|
301
|
+
return {
|
|
302
|
+
content: [
|
|
303
|
+
{
|
|
304
|
+
type: "text",
|
|
305
|
+
text: `📄 ${doc.title}\nPath: ${path}\nUpdated: ${doc.updated_at}\n\n---\n\n${content}`,
|
|
306
|
+
},
|
|
307
|
+
],
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
case "write_doc": {
|
|
311
|
+
const { projectId, path, content } = WriteDocSchema.parse(args);
|
|
312
|
+
const tree = await buildDocTree(projectId, apiClient, docClient);
|
|
313
|
+
const parts = parsePath(path);
|
|
314
|
+
if (parts.length === 0) {
|
|
315
|
+
return {
|
|
316
|
+
content: [
|
|
317
|
+
{ type: "text", text: "Path must include at least a document name." },
|
|
318
|
+
],
|
|
319
|
+
isError: true,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
const folderNames = parts.slice(0, -1);
|
|
323
|
+
const docTitle = parts[parts.length - 1];
|
|
324
|
+
const folderId = await ensureFolderPath(projectId, folderNames, docClient, tree);
|
|
325
|
+
const siblingDocs = tree.docsByFolder.get(folderId) || [];
|
|
326
|
+
const existing = siblingDocs.find((d) => d.title === docTitle);
|
|
327
|
+
if (existing) {
|
|
328
|
+
await apiClient.updateDocument(projectId, existing.id, { content });
|
|
329
|
+
return {
|
|
330
|
+
content: [{ type: "text", text: `Updated document: ${path}` }],
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
await apiClient.createDocument({
|
|
334
|
+
project_id: projectId,
|
|
335
|
+
title: docTitle,
|
|
336
|
+
content,
|
|
337
|
+
folder_id: folderId,
|
|
338
|
+
});
|
|
339
|
+
return {
|
|
340
|
+
content: [{ type: "text", text: `Created document: ${path}` }],
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
case "delete_doc": {
|
|
344
|
+
const { projectId, path } = DeleteDocSchema.parse(args);
|
|
345
|
+
const tree = await buildDocTree(projectId, apiClient, docClient);
|
|
346
|
+
const resolved = resolvePath(path, tree);
|
|
347
|
+
if (!resolved || resolved.type === "root") {
|
|
348
|
+
return {
|
|
349
|
+
content: [{ type: "text", text: `Not found: ${path}` }],
|
|
350
|
+
isError: true,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
if (resolved.type === "doc") {
|
|
354
|
+
await apiClient.deleteDocument(projectId, resolved.doc.id);
|
|
355
|
+
return {
|
|
356
|
+
content: [{ type: "text", text: `Deleted document: ${path}` }],
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
await docClient.deleteFolder(projectId, resolved.folder.id);
|
|
360
|
+
return {
|
|
361
|
+
content: [{ type: "text", text: `Deleted folder: ${path}` }],
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
case "move_doc": {
|
|
365
|
+
const { projectId, sourcePath, destPath } = MoveDocSchema.parse(args);
|
|
366
|
+
const tree = await buildDocTree(projectId, apiClient, docClient);
|
|
367
|
+
const source = resolvePath(sourcePath, tree);
|
|
368
|
+
if (!source || source.type === "root") {
|
|
369
|
+
return {
|
|
370
|
+
content: [{ type: "text", text: `Not found: ${sourcePath}` }],
|
|
371
|
+
isError: true,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
const destParts = parsePath(destPath);
|
|
375
|
+
if (destParts.length === 0) {
|
|
376
|
+
return {
|
|
377
|
+
content: [
|
|
378
|
+
{ type: "text", text: "Destination path must include at least a name." },
|
|
379
|
+
],
|
|
380
|
+
isError: true,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
const destFolderNames = destParts.slice(0, -1);
|
|
384
|
+
const destName = destParts[destParts.length - 1];
|
|
385
|
+
const destFolderId = await ensureFolderPath(projectId, destFolderNames, docClient, tree);
|
|
386
|
+
if (source.type === "doc") {
|
|
387
|
+
await apiClient.updateDocument(projectId, source.doc.id, {
|
|
388
|
+
title: destName,
|
|
389
|
+
folder_id: destFolderId,
|
|
390
|
+
});
|
|
391
|
+
return {
|
|
392
|
+
content: [
|
|
393
|
+
{
|
|
394
|
+
type: "text",
|
|
395
|
+
text: `Moved document: ${sourcePath} → ${destPath}`,
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
await docClient.updateFolder(projectId, source.folder.id, {
|
|
401
|
+
name: destName,
|
|
402
|
+
parent_id: destFolderId,
|
|
403
|
+
});
|
|
404
|
+
return {
|
|
405
|
+
content: [
|
|
406
|
+
{
|
|
407
|
+
type: "text",
|
|
408
|
+
text: `Moved folder: ${sourcePath} → ${destPath}`,
|
|
409
|
+
},
|
|
410
|
+
],
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
default:
|
|
414
|
+
throw new Error(`Unknown filesystem doc tool: ${toolName}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=filesystem-doc-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-doc-tools.js","sourceRoot":"","sources":["../../src/tools/filesystem-doc-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EACX,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EACX,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,MAAM,iBAAiB,CAAC;AAgCzB;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,EAAE,CAepC;AAED;;;GAGG;AACH,wBAAsB,cAAc,CACnC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE;IACR,SAAS,EAAE,aAAa,CAAC;IACzB,cAAc,EAAE,qBAAqB,CAAC;IACtC,WAAW,EAAE,kBAAkB,CAAC;IAChC,kBAAkB,EAAE,yBAAyB,CAAC;IAC9C,SAAS,EAAE,gBAAgB,CAAC;CAC5B,GACC,OAAO,CAAC,GAAG,CAAC,CAiJd"}
|
package/build/tools/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getAttachmentTools, handleAttachmentTool, } from "./attachment-tools.js";
|
|
2
|
-
import {
|
|
3
|
-
import { getDocumentTools, handleDocumentTool } from "./document-tools.js";
|
|
2
|
+
import { getFilesystemDocTools, handleFilesystemDocTool, } from "./filesystem-doc-tools.js";
|
|
4
3
|
import { getProjectMemberTools, getProjectRoleTools, handleProjectMemberTool, } from "./member-tools.js";
|
|
5
4
|
import { getProjectTools, handleProjectTool } from "./project-tools.js";
|
|
6
5
|
import { getSprintTools, handleSprintTool } from "./sprint-tools.js";
|
|
@@ -16,7 +15,7 @@ export function getAllTools() {
|
|
|
16
15
|
...getProjectTools(),
|
|
17
16
|
...getTaskTools(),
|
|
18
17
|
...getSprintTools(),
|
|
19
|
-
...
|
|
18
|
+
...getFilesystemDocTools(),
|
|
20
19
|
...getProjectMemberTools(),
|
|
21
20
|
...getProjectRoleTools(),
|
|
22
21
|
...getTaskTypeTools(),
|
|
@@ -24,7 +23,6 @@ export function getAllTools() {
|
|
|
24
23
|
...getViewTools(),
|
|
25
24
|
...getCustomFieldTools(),
|
|
26
25
|
...getAttachmentTools(),
|
|
27
|
-
...getDocTools(),
|
|
28
26
|
...getTaskActivityTools(),
|
|
29
27
|
];
|
|
30
28
|
}
|
|
@@ -61,13 +59,13 @@ export async function handleToolCall(request, clients) {
|
|
|
61
59
|
name === "complete_sprint") {
|
|
62
60
|
return handleSprintTool(name, args, clients.apiClient);
|
|
63
61
|
}
|
|
64
|
-
//
|
|
65
|
-
if (name === "
|
|
66
|
-
name === "
|
|
67
|
-
name === "
|
|
68
|
-
name === "
|
|
69
|
-
name === "
|
|
70
|
-
return
|
|
62
|
+
// Filesystem document tools
|
|
63
|
+
if (name === "list_docs" ||
|
|
64
|
+
name === "read_doc" ||
|
|
65
|
+
name === "write_doc" ||
|
|
66
|
+
name === "delete_doc" ||
|
|
67
|
+
name === "move_doc") {
|
|
68
|
+
return handleFilesystemDocTool(name, args, clients.apiClient, clients.docClient);
|
|
71
69
|
}
|
|
72
70
|
// Project member and role tools
|
|
73
71
|
if (name === "list_project_members" ||
|
|
@@ -117,15 +115,6 @@ export async function handleToolCall(request, clients) {
|
|
|
117
115
|
name === "delete_task_attachment") {
|
|
118
116
|
return handleAttachmentTool(name, args, clients.viewsClient);
|
|
119
117
|
}
|
|
120
|
-
// Document tools
|
|
121
|
-
if (name === "list_doc_folders" ||
|
|
122
|
-
name === "create_doc_folder" ||
|
|
123
|
-
name === "update_doc_folder" ||
|
|
124
|
-
name === "delete_doc_folder" ||
|
|
125
|
-
name === "list_doc_snapshots" ||
|
|
126
|
-
name === "get_doc_snapshot") {
|
|
127
|
-
return handleDocTool(name, args, clients.docClient);
|
|
128
|
-
}
|
|
129
118
|
// Task activity tools
|
|
130
119
|
if (name === "list_task_activities" ||
|
|
131
120
|
name === "add_task_comment" ||
|
package/build/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACN,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-tools.d.ts","sourceRoot":"","sources":["../../src/tools/view-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"view-tools.d.ts","sourceRoot":"","sources":["../../src/tools/view-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAgG1D;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,EAAE,CAsOrC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,EAAE,CA4H5C;AAqBD;;GAEG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,kBAAkB,GACxB,OAAO,CAAC,GAAG,CAAC,CAgQd"}
|
|
@@ -2,6 +2,8 @@ import { z } from "zod";
|
|
|
2
2
|
import { formatList } from "../utils/index.js";
|
|
3
3
|
const ListViewsSchema = z.object({
|
|
4
4
|
projectId: z.string(),
|
|
5
|
+
context: z.string().optional(),
|
|
6
|
+
sprintId: z.string().optional(),
|
|
5
7
|
});
|
|
6
8
|
const CreateViewSchema = z.object({
|
|
7
9
|
projectId: z.string(),
|
|
@@ -84,7 +86,7 @@ export function getViewTools() {
|
|
|
84
86
|
return [
|
|
85
87
|
{
|
|
86
88
|
name: "list_views",
|
|
87
|
-
description: "List all views in a project",
|
|
89
|
+
description: "List all views in a project. Use context='backlog' or context='timeline' to list non-sprint views. Use context='sprint' with sprintId to list views for a specific sprint.",
|
|
88
90
|
inputSchema: {
|
|
89
91
|
type: "object",
|
|
90
92
|
properties: {
|
|
@@ -92,6 +94,14 @@ export function getViewTools() {
|
|
|
92
94
|
type: "string",
|
|
93
95
|
description: "The ID of the project",
|
|
94
96
|
},
|
|
97
|
+
context: {
|
|
98
|
+
type: "string",
|
|
99
|
+
description: "The view context: 'sprint', 'backlog', or 'timeline'. Defaults to 'backlog'. Use 'sprint' together with sprintId to list sprint views.",
|
|
100
|
+
},
|
|
101
|
+
sprintId: {
|
|
102
|
+
type: "string",
|
|
103
|
+
description: "The sprint ID (required when context is 'sprint').",
|
|
104
|
+
},
|
|
95
105
|
},
|
|
96
106
|
required: ["projectId"],
|
|
97
107
|
},
|
|
@@ -453,8 +463,10 @@ Created: ${field.created_at}`;
|
|
|
453
463
|
export async function handleViewTool(toolName, args, client) {
|
|
454
464
|
switch (toolName) {
|
|
455
465
|
case "list_views": {
|
|
456
|
-
const { projectId } = ListViewsSchema.parse(args);
|
|
457
|
-
|
|
466
|
+
const { projectId, context, sprintId } = ListViewsSchema.parse(args);
|
|
467
|
+
// Default to 'backlog' when no context is provided to avoid requiring sprint_id
|
|
468
|
+
const resolvedContext = context ?? "backlog";
|
|
469
|
+
const views = await client.listViews(projectId, resolvedContext, sprintId);
|
|
458
470
|
const formatted = formatList(views, formatView);
|
|
459
471
|
return {
|
|
460
472
|
content: [
|