@omnicoreos/planka-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/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +26 -0
- package/.claude-plugin/plugin.json +45 -0
- package/.codex-plugin/mcp.json +16 -0
- package/.codex-plugin/plugin.json +27 -0
- package/.mcp.json +17 -0
- package/CHANGELOG.md +510 -0
- package/README.es.md +294 -55
- package/README.md +293 -55
- package/dist/cli/init.d.ts +101 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +481 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/client.d.ts +32 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +106 -32
- package/dist/client.js.map +1 -1
- package/dist/config/policy.d.ts +82 -0
- package/dist/config/policy.d.ts.map +1 -0
- package/dist/config/policy.js +226 -0
- package/dist/config/policy.js.map +1 -0
- package/dist/errors.d.ts +5 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +62 -5
- package/dist/errors.js.map +1 -1
- package/dist/identity.generated.d.ts +2 -1
- package/dist/identity.generated.d.ts.map +1 -1
- package/dist/identity.generated.js +2 -1
- package/dist/identity.generated.js.map +1 -1
- package/dist/index.js +85 -10
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +21 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +37 -0
- package/dist/instructions.js.map +1 -0
- package/dist/operations/actions.d.ts +654 -0
- package/dist/operations/actions.d.ts.map +1 -0
- package/dist/operations/actions.js +154 -0
- package/dist/operations/actions.js.map +1 -0
- package/dist/operations/archive.d.ts +28 -0
- package/dist/operations/archive.d.ts.map +1 -0
- package/dist/operations/archive.js +74 -0
- package/dist/operations/archive.js.map +1 -0
- package/dist/operations/attachments.d.ts +1 -1
- package/dist/operations/attachments.d.ts.map +1 -1
- package/dist/operations/attachments.js +3 -1
- package/dist/operations/attachments.js.map +1 -1
- package/dist/operations/board-id.d.ts +1 -1
- package/dist/operations/board-id.d.ts.map +1 -1
- package/dist/operations/board-id.js +13 -7
- package/dist/operations/board-id.js.map +1 -1
- package/dist/operations/boards.d.ts +96 -19
- package/dist/operations/boards.d.ts.map +1 -1
- package/dist/operations/boards.js +377 -93
- package/dist/operations/boards.js.map +1 -1
- package/dist/operations/card-brief.d.ts +91 -0
- package/dist/operations/card-brief.d.ts.map +1 -0
- package/dist/operations/card-brief.js +79 -0
- package/dist/operations/card-brief.js.map +1 -0
- package/dist/operations/cards.d.ts +34 -9
- package/dist/operations/cards.d.ts.map +1 -1
- package/dist/operations/cards.js +60 -14
- package/dist/operations/cards.js.map +1 -1
- package/dist/operations/comments.d.ts +61 -4
- package/dist/operations/comments.d.ts.map +1 -1
- package/dist/operations/comments.js +91 -8
- package/dist/operations/comments.js.map +1 -1
- package/dist/operations/duplicate.d.ts +16 -0
- package/dist/operations/duplicate.d.ts.map +1 -0
- package/dist/operations/duplicate.js +43 -0
- package/dist/operations/duplicate.js.map +1 -0
- package/dist/operations/labels.d.ts +1 -1
- package/dist/operations/labels.d.ts.map +1 -1
- package/dist/operations/labels.js +7 -4
- package/dist/operations/labels.js.map +1 -1
- package/dist/operations/lists.d.ts +63 -1
- package/dist/operations/lists.d.ts.map +1 -1
- package/dist/operations/lists.js +97 -2
- package/dist/operations/lists.js.map +1 -1
- package/dist/operations/members.d.ts +39 -0
- package/dist/operations/members.d.ts.map +1 -0
- package/dist/operations/members.js +107 -0
- package/dist/operations/members.js.map +1 -0
- package/dist/operations/projects.d.ts +16 -0
- package/dist/operations/projects.d.ts.map +1 -1
- package/dist/operations/projects.js +54 -9
- package/dist/operations/projects.js.map +1 -1
- package/dist/operations/tasks.d.ts +1 -1
- package/dist/operations/tasks.d.ts.map +1 -1
- package/dist/operations/tasks.js +5 -3
- package/dist/operations/tasks.js.map +1 -1
- package/dist/operations/users.d.ts +123 -0
- package/dist/operations/users.d.ts.map +1 -0
- package/dist/operations/users.js +180 -0
- package/dist/operations/users.js.map +1 -0
- package/dist/operations/verify.d.ts +84 -0
- package/dist/operations/verify.d.ts.map +1 -0
- package/dist/operations/verify.js +124 -0
- package/dist/operations/verify.js.map +1 -0
- package/dist/prompts.d.ts +48 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +155 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +38 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +127 -0
- package/dist/resources.js.map +1 -0
- package/dist/schemas/entities.d.ts +115 -24
- package/dist/schemas/entities.d.ts.map +1 -1
- package/dist/schemas/entities.js +48 -0
- package/dist/schemas/entities.js.map +1 -1
- package/dist/schemas/requests.d.ts +121 -46
- package/dist/schemas/requests.d.ts.map +1 -1
- package/dist/schemas/requests.js +57 -12
- package/dist/schemas/requests.js.map +1 -1
- package/dist/schemas/responses.d.ts +541 -186
- package/dist/schemas/responses.d.ts.map +1 -1
- package/dist/schemas/responses.js +13 -2
- package/dist/schemas/responses.js.map +1 -1
- package/dist/tools/activity.d.ts +150 -0
- package/dist/tools/activity.d.ts.map +1 -0
- package/dist/tools/activity.js +198 -0
- package/dist/tools/activity.js.map +1 -0
- package/dist/tools/annotations.d.ts +52 -0
- package/dist/tools/annotations.d.ts.map +1 -0
- package/dist/tools/annotations.js +214 -0
- package/dist/tools/annotations.js.map +1 -0
- package/dist/tools/attachments.d.ts +28 -4
- package/dist/tools/attachments.d.ts.map +1 -1
- package/dist/tools/attachments.js +53 -34
- package/dist/tools/attachments.js.map +1 -1
- package/dist/tools/card-ops.d.ts +232 -0
- package/dist/tools/card-ops.d.ts.map +1 -0
- package/dist/tools/card-ops.js +333 -0
- package/dist/tools/card-ops.js.map +1 -0
- package/dist/tools/cards.d.ts +90 -8
- package/dist/tools/cards.d.ts.map +1 -1
- package/dist/tools/cards.js +411 -128
- package/dist/tools/cards.js.map +1 -1
- package/dist/tools/comments.d.ts +226 -22
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +163 -134
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/dispatch.d.ts +47 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +63 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/guard.d.ts +9 -0
- package/dist/tools/guard.d.ts.map +1 -0
- package/dist/tools/guard.js +20 -0
- package/dist/tools/guard.js.map +1 -0
- package/dist/tools/index.d.ts +748 -450
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +136 -17
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/labels.d.ts +213 -18
- package/dist/tools/labels.d.ts.map +1 -1
- package/dist/tools/labels.js +218 -203
- package/dist/tools/labels.js.map +1 -1
- package/dist/tools/lists.d.ts +222 -15
- package/dist/tools/lists.d.ts.map +1 -1
- package/dist/tools/lists.js +175 -156
- package/dist/tools/lists.js.map +1 -1
- package/dist/tools/members.d.ts +128 -0
- package/dist/tools/members.d.ts.map +1 -0
- package/dist/tools/members.js +150 -0
- package/dist/tools/members.js.map +1 -0
- package/dist/tools/navigation.d.ts +22 -2
- package/dist/tools/navigation.d.ts.map +1 -1
- package/dist/tools/navigation.js +60 -15
- package/dist/tools/navigation.js.map +1 -1
- package/dist/tools/queries.d.ts +196 -166
- package/dist/tools/queries.d.ts.map +1 -1
- package/dist/tools/queries.js +125 -155
- package/dist/tools/queries.js.map +1 -1
- package/dist/tools/tasks.d.ts +26 -6
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +110 -55
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/users.d.ts +130 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +165 -0
- package/dist/tools/users.js.map +1 -0
- package/docs/planka-2x-gotchas.md +121 -5
- package/docs/tools.md +771 -187
- package/docs/troubleshooting.md +137 -5
- package/hooks/hooks.json +15 -0
- package/hooks/preflight.mjs +100 -0
- package/package.json +6 -1
- package/scripts/setup.sh +8 -26
- package/scripts/sync-identity.mjs +55 -1
- package/server.json +87 -6
- package/tests/smoke/planka-smoke.mjs +512 -72
- package/workflow/skills/planka-close-card/SKILL.md +18 -5
- package/workflow/skills/planka-orchestrator/SKILL.md +36 -7
package/dist/tools/tasks.js
CHANGED
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Task tools for PLANKA MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Tasks have no GET of their own in Planka 2.x: they are only visible through
|
|
5
|
+
* their card. So verification here needs a `cardId`; without it the tool says
|
|
6
|
+
* so instead of claiming success.
|
|
3
7
|
*/
|
|
4
8
|
import { createTasks, updateTask, deleteTask } from "../operations/tasks.js";
|
|
9
|
+
import { getCardLight } from "../operations/cards.js";
|
|
10
|
+
import { nothingToDo, verifiedDelete, verifiedWrite, writeResult, } from "../operations/verify.js";
|
|
5
11
|
import { PlankaError } from "../errors.js";
|
|
12
|
+
const NO_CARD_ID = "pass cardId to verify: Planka has no GET for a single task, so the card is the only place it can be re-read";
|
|
6
13
|
/**
|
|
7
14
|
* Tool: planka_create_tasks
|
|
8
15
|
* Add one or more tasks (checklist items) to a card.
|
|
9
16
|
*/
|
|
10
17
|
export const createTasksTool = {
|
|
11
18
|
name: "planka_create_tasks",
|
|
12
|
-
description: "Add
|
|
19
|
+
description: "Add tasks (checklist items) to a card. Reports the tasks that actually landed.",
|
|
13
20
|
inputSchema: {
|
|
14
21
|
type: "object",
|
|
15
22
|
properties: {
|
|
@@ -28,26 +35,29 @@ export const createTasksTool = {
|
|
|
28
35
|
},
|
|
29
36
|
handler: async (params) => {
|
|
30
37
|
try {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
const written = await verifiedWrite({
|
|
39
|
+
write: () => createTasks({
|
|
40
|
+
cardId: params.cardId,
|
|
41
|
+
tasks: params.tasks.map((name) => ({ name })),
|
|
42
|
+
}),
|
|
43
|
+
reread: () => getCardLight({ cardId: params.cardId }),
|
|
44
|
+
landed: (after, tasks) => tasks.length === params.tasks.length &&
|
|
45
|
+
tasks.every((t) => after.tasks.some((x) => x.id === t.id)),
|
|
34
46
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
],
|
|
50
|
-
};
|
|
47
|
+
const after = written.after;
|
|
48
|
+
const onCard = after
|
|
49
|
+
? written.result.filter((t) => after.tasks.some((x) => x.id === t.id))
|
|
50
|
+
: [];
|
|
51
|
+
return writeResult({
|
|
52
|
+
cardId: params.cardId,
|
|
53
|
+
tasksRequested: params.tasks.length,
|
|
54
|
+
tasksCreated: after ? onCard.length : 0,
|
|
55
|
+
tasks: (after ? onCard : written.result).map((t) => ({
|
|
56
|
+
id: t.id,
|
|
57
|
+
name: t.name,
|
|
58
|
+
isCompleted: t.isCompleted,
|
|
59
|
+
})),
|
|
60
|
+
}, written);
|
|
51
61
|
}
|
|
52
62
|
catch (error) {
|
|
53
63
|
if (error instanceof PlankaError) {
|
|
@@ -66,7 +76,7 @@ export const createTasksTool = {
|
|
|
66
76
|
*/
|
|
67
77
|
export const updateTaskTool = {
|
|
68
78
|
name: "planka_update_task",
|
|
69
|
-
description: "Update a task's name or completion
|
|
79
|
+
description: "Update a task's name or completion. Pass cardId to have it verified.",
|
|
70
80
|
inputSchema: {
|
|
71
81
|
type: "object",
|
|
72
82
|
properties: {
|
|
@@ -74,6 +84,10 @@ export const updateTaskTool = {
|
|
|
74
84
|
type: "string",
|
|
75
85
|
description: "The task ID",
|
|
76
86
|
},
|
|
87
|
+
cardId: {
|
|
88
|
+
type: "string",
|
|
89
|
+
description: "The task's card. Without it the change cannot be verified.",
|
|
90
|
+
},
|
|
77
91
|
name: {
|
|
78
92
|
type: "string",
|
|
79
93
|
description: "New task name",
|
|
@@ -87,29 +101,58 @@ export const updateTaskTool = {
|
|
|
87
101
|
},
|
|
88
102
|
handler: async (params) => {
|
|
89
103
|
try {
|
|
90
|
-
const { taskId
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (
|
|
94
|
-
patch.
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
name: task.name,
|
|
107
|
-
isCompleted: task.isCompleted,
|
|
108
|
-
},
|
|
109
|
-
}, null, 2),
|
|
104
|
+
const patch = { taskId: params.taskId };
|
|
105
|
+
if (params.name !== undefined)
|
|
106
|
+
patch.name = params.name;
|
|
107
|
+
if (params.isCompleted !== undefined)
|
|
108
|
+
patch.isCompleted = params.isCompleted;
|
|
109
|
+
if (Object.keys(patch).length === 1) {
|
|
110
|
+
return nothingToDo("name, isCompleted");
|
|
111
|
+
}
|
|
112
|
+
const cardId = params.cardId;
|
|
113
|
+
if (!cardId) {
|
|
114
|
+
const task = await updateTask(patch);
|
|
115
|
+
return writeResult({
|
|
116
|
+
task: {
|
|
117
|
+
id: task.id,
|
|
118
|
+
name: task.name,
|
|
119
|
+
isCompleted: task.isCompleted,
|
|
110
120
|
},
|
|
111
|
-
|
|
121
|
+
// Planka's echo of the PATCH, not a re-read: the write-echo trap
|
|
122
|
+
// documented in docs/planka-2x-gotchas.md. Labelled so the model
|
|
123
|
+
// does not mistake it for confirmed state.
|
|
124
|
+
taskFromWriteEcho: true,
|
|
125
|
+
message: `Task ${params.taskId} was sent to Planka but NOT verified. Call planka_update_task again with cardId, or planka_get_card, to confirm it landed.`,
|
|
126
|
+
}, { verified: false, verificationUnavailable: NO_CARD_ID });
|
|
127
|
+
}
|
|
128
|
+
const mismatches = (after) => {
|
|
129
|
+
const task = after.tasks.find((t) => t.id === params.taskId);
|
|
130
|
+
if (!task)
|
|
131
|
+
return ["task not found on the card"];
|
|
132
|
+
const bad = [];
|
|
133
|
+
if (patch.name !== undefined && task.name !== patch.name)
|
|
134
|
+
bad.push("name");
|
|
135
|
+
if (patch.isCompleted !== undefined &&
|
|
136
|
+
task.isCompleted !== patch.isCompleted)
|
|
137
|
+
bad.push("isCompleted");
|
|
138
|
+
return bad;
|
|
112
139
|
};
|
|
140
|
+
const written = await verifiedWrite({
|
|
141
|
+
write: () => updateTask(patch),
|
|
142
|
+
reread: () => getCardLight({ cardId }),
|
|
143
|
+
landed: (after) => mismatches(after).length === 0,
|
|
144
|
+
});
|
|
145
|
+
const onCard = written.after?.tasks.find((t) => t.id === params.taskId);
|
|
146
|
+
const notLanded = written.after ? mismatches(written.after) : [];
|
|
147
|
+
return writeResult({
|
|
148
|
+
cardId,
|
|
149
|
+
task: {
|
|
150
|
+
id: written.result.id,
|
|
151
|
+
name: onCard?.name ?? written.result.name,
|
|
152
|
+
isCompleted: onCard?.isCompleted ?? written.result.isCompleted,
|
|
153
|
+
},
|
|
154
|
+
...(notLanded.length > 0 ? { notLanded } : {}),
|
|
155
|
+
}, written);
|
|
113
156
|
}
|
|
114
157
|
catch (error) {
|
|
115
158
|
if (error instanceof PlankaError) {
|
|
@@ -128,7 +171,7 @@ export const updateTaskTool = {
|
|
|
128
171
|
*/
|
|
129
172
|
export const deleteTaskTool = {
|
|
130
173
|
name: "planka_delete_task",
|
|
131
|
-
description: "Delete a task
|
|
174
|
+
description: "Delete a task. Pass cardId to have it verified.",
|
|
132
175
|
inputSchema: {
|
|
133
176
|
type: "object",
|
|
134
177
|
properties: {
|
|
@@ -136,23 +179,35 @@ export const deleteTaskTool = {
|
|
|
136
179
|
type: "string",
|
|
137
180
|
description: "The task ID to delete",
|
|
138
181
|
},
|
|
182
|
+
cardId: {
|
|
183
|
+
type: "string",
|
|
184
|
+
description: "The task's card. Without it the deletion cannot be verified.",
|
|
185
|
+
},
|
|
139
186
|
},
|
|
140
187
|
required: ["taskId"],
|
|
141
188
|
},
|
|
142
189
|
handler: async (params) => {
|
|
143
190
|
try {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
191
|
+
const cardId = params.cardId;
|
|
192
|
+
const deleted = await verifiedDelete({
|
|
193
|
+
del: () => deleteTask({ taskId: params.taskId }),
|
|
194
|
+
confirmGone: async () => {
|
|
195
|
+
if (!cardId)
|
|
196
|
+
return null;
|
|
197
|
+
const after = await getCardLight({ cardId });
|
|
198
|
+
return !after.tasks.some((t) => t.id === params.taskId);
|
|
199
|
+
},
|
|
200
|
+
unknownReason: NO_CARD_ID,
|
|
201
|
+
});
|
|
202
|
+
return writeResult({
|
|
203
|
+
taskId: params.taskId,
|
|
204
|
+
...(cardId ? { cardId } : {}),
|
|
205
|
+
message: deleted.verified
|
|
206
|
+
? `Task ${params.taskId} deleted`
|
|
207
|
+
: cardId
|
|
208
|
+
? `Task ${params.taskId} delete NOT confirmed: it still reads on card ${cardId}`
|
|
209
|
+
: `Task ${params.taskId} delete NOT confirmed — pass cardId to have it verified, or read the card with planka_get_card`,
|
|
210
|
+
}, deleted);
|
|
156
211
|
}
|
|
157
212
|
catch (error) {
|
|
158
213
|
if (error instanceof PlankaError) {
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: planka_list_users
|
|
3
|
+
*/
|
|
4
|
+
export declare const listUsersTool: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
boardId: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
detail: {
|
|
15
|
+
type: string;
|
|
16
|
+
enum: string[];
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
handler: (params: {
|
|
22
|
+
boardId?: string;
|
|
23
|
+
detail?: "digest" | "full";
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
content: {
|
|
26
|
+
type: "text";
|
|
27
|
+
text: string;
|
|
28
|
+
}[];
|
|
29
|
+
isError: true;
|
|
30
|
+
} | {
|
|
31
|
+
content: {
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}[];
|
|
35
|
+
}>;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Tool: planka_whoami
|
|
39
|
+
*
|
|
40
|
+
* The first call to make when something answers 404 that should not: it says
|
|
41
|
+
* which account this is, what it may do on the board, and what the local policy
|
|
42
|
+
* has switched off — the three usual causes of a confusing refusal.
|
|
43
|
+
*/
|
|
44
|
+
export declare const whoamiTool: {
|
|
45
|
+
name: string;
|
|
46
|
+
description: string;
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object";
|
|
49
|
+
properties: {
|
|
50
|
+
boardId: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
handler: (params?: {
|
|
57
|
+
boardId?: string;
|
|
58
|
+
}) => Promise<{
|
|
59
|
+
content: {
|
|
60
|
+
type: "text";
|
|
61
|
+
text: string;
|
|
62
|
+
}[];
|
|
63
|
+
isError: true;
|
|
64
|
+
} | {
|
|
65
|
+
content: {
|
|
66
|
+
type: "text";
|
|
67
|
+
text: string;
|
|
68
|
+
}[];
|
|
69
|
+
}>;
|
|
70
|
+
};
|
|
71
|
+
export declare const userTools: ({
|
|
72
|
+
name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
inputSchema: {
|
|
75
|
+
type: "object";
|
|
76
|
+
properties: {
|
|
77
|
+
boardId: {
|
|
78
|
+
type: string;
|
|
79
|
+
description: string;
|
|
80
|
+
};
|
|
81
|
+
detail: {
|
|
82
|
+
type: string;
|
|
83
|
+
enum: string[];
|
|
84
|
+
description: string;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
handler: (params: {
|
|
89
|
+
boardId?: string;
|
|
90
|
+
detail?: "digest" | "full";
|
|
91
|
+
}) => Promise<{
|
|
92
|
+
content: {
|
|
93
|
+
type: "text";
|
|
94
|
+
text: string;
|
|
95
|
+
}[];
|
|
96
|
+
isError: true;
|
|
97
|
+
} | {
|
|
98
|
+
content: {
|
|
99
|
+
type: "text";
|
|
100
|
+
text: string;
|
|
101
|
+
}[];
|
|
102
|
+
}>;
|
|
103
|
+
} | {
|
|
104
|
+
name: string;
|
|
105
|
+
description: string;
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: "object";
|
|
108
|
+
properties: {
|
|
109
|
+
boardId: {
|
|
110
|
+
type: string;
|
|
111
|
+
description: string;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
handler: (params?: {
|
|
116
|
+
boardId?: string;
|
|
117
|
+
}) => Promise<{
|
|
118
|
+
content: {
|
|
119
|
+
type: "text";
|
|
120
|
+
text: string;
|
|
121
|
+
}[];
|
|
122
|
+
isError: true;
|
|
123
|
+
} | {
|
|
124
|
+
content: {
|
|
125
|
+
type: "text";
|
|
126
|
+
text: string;
|
|
127
|
+
}[];
|
|
128
|
+
}>;
|
|
129
|
+
})[];
|
|
130
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;sBAoBA;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;KAAE;;;;;;;;;;;;CAyBzE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;uBAcG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;CAsF7C,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;sBAxII;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;uBAgDhD;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;IAwFM,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity tools: who can be assigned, and who this server is.
|
|
3
|
+
*/
|
|
4
|
+
import { getBoardMembership, getCurrentUser, getPlankaVersion, listUsers, } from "../operations/users.js";
|
|
5
|
+
import { getConfig } from "../client.js";
|
|
6
|
+
import { getPolicy } from "../config/policy.js";
|
|
7
|
+
import { PlankaError } from "../errors.js";
|
|
8
|
+
function errorResult(error) {
|
|
9
|
+
if (error instanceof PlankaError) {
|
|
10
|
+
return {
|
|
11
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
12
|
+
isError: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Tool: planka_list_users
|
|
19
|
+
*/
|
|
20
|
+
export const listUsersTool = {
|
|
21
|
+
name: "planka_list_users",
|
|
22
|
+
description: "The people who can be assigned, with their IDs. Falls back to the board's members when this " +
|
|
23
|
+
"account may not read the instance roster, and says so in `source`. Emails only with detail: full.",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
boardId: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Board to fall back to when the instance roster is refused (403). Ignored otherwise.",
|
|
30
|
+
},
|
|
31
|
+
detail: {
|
|
32
|
+
type: "string",
|
|
33
|
+
enum: ["digest", "full"],
|
|
34
|
+
description: "digest (default) hides email addresses; full includes them.",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
handler: async (params) => {
|
|
39
|
+
try {
|
|
40
|
+
const result = await listUsers({
|
|
41
|
+
boardId: params.boardId,
|
|
42
|
+
detail: params.detail,
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: "text",
|
|
48
|
+
text: JSON.stringify({
|
|
49
|
+
source: result.source,
|
|
50
|
+
...(result.boardId ? { boardId: result.boardId } : {}),
|
|
51
|
+
...(result.fellBackBecause ? { note: result.fellBackBecause } : {}),
|
|
52
|
+
total: result.users.length,
|
|
53
|
+
users: result.users,
|
|
54
|
+
}),
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return errorResult(error);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Tool: planka_whoami
|
|
66
|
+
*
|
|
67
|
+
* The first call to make when something answers 404 that should not: it says
|
|
68
|
+
* which account this is, what it may do on the board, and what the local policy
|
|
69
|
+
* has switched off — the three usual causes of a confusing refusal.
|
|
70
|
+
*/
|
|
71
|
+
export const whoamiTool = {
|
|
72
|
+
name: "planka_whoami",
|
|
73
|
+
description: "This server's identity and limits: the Planka account, its board role, the Planka version, " +
|
|
74
|
+
"and the local access policy (default board, allowlist, read-only, disabled tools).",
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: {
|
|
78
|
+
boardId: {
|
|
79
|
+
type: "string",
|
|
80
|
+
description: "Board to report membership for. Defaults to the configured board.",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
handler: async (params = {}) => {
|
|
85
|
+
try {
|
|
86
|
+
const policy = getPolicy();
|
|
87
|
+
const user = await getCurrentUser();
|
|
88
|
+
let authMode = "unknown";
|
|
89
|
+
try {
|
|
90
|
+
authMode = getConfig().apiKey ? "apiKey" : "password";
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// A config error would have stopped the call above; stay silent.
|
|
94
|
+
}
|
|
95
|
+
let plankaVersion = null;
|
|
96
|
+
let versionWarning;
|
|
97
|
+
try {
|
|
98
|
+
plankaVersion = await getPlankaVersion();
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
versionWarning = "The Planka version could not be read from /api/bootstrap.";
|
|
102
|
+
}
|
|
103
|
+
if (plankaVersion && !plankaVersion.startsWith("2.")) {
|
|
104
|
+
versionWarning =
|
|
105
|
+
`This server targets Planka 2.x and the instance reports ${plankaVersion}. ` +
|
|
106
|
+
`Endpoints, response shapes and the card-membership paths may differ.`;
|
|
107
|
+
}
|
|
108
|
+
const boardId = params?.boardId ?? policy.defaultBoardId ?? policy.allowedBoardIds?.[0] ?? null;
|
|
109
|
+
let boardMembership = null;
|
|
110
|
+
if (boardId) {
|
|
111
|
+
try {
|
|
112
|
+
const membership = await getBoardMembership({ boardId, userId: user.id });
|
|
113
|
+
boardMembership = membership
|
|
114
|
+
? {
|
|
115
|
+
boardId,
|
|
116
|
+
role: membership.role ?? null,
|
|
117
|
+
canComment: membership.canComment ?? null,
|
|
118
|
+
}
|
|
119
|
+
: null;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
boardMembership = null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
content: [
|
|
127
|
+
{
|
|
128
|
+
type: "text",
|
|
129
|
+
text: JSON.stringify({
|
|
130
|
+
user: {
|
|
131
|
+
id: user.id,
|
|
132
|
+
name: user.name ?? user.username ?? user.id,
|
|
133
|
+
...(user.username ? { username: user.username } : {}),
|
|
134
|
+
...(user.role ? { role: user.role } : {}),
|
|
135
|
+
},
|
|
136
|
+
plankaVersion,
|
|
137
|
+
...(versionWarning ? { versionWarning } : {}),
|
|
138
|
+
authMode,
|
|
139
|
+
boardMembership,
|
|
140
|
+
...(boardId && !boardMembership
|
|
141
|
+
? {
|
|
142
|
+
membershipNote: `No board membership found for this user on board ${boardId}. ` +
|
|
143
|
+
`An admin can still read it; a boardUser could not write to it.`,
|
|
144
|
+
}
|
|
145
|
+
: {}),
|
|
146
|
+
policy: {
|
|
147
|
+
defaultBoardId: policy.defaultBoardId,
|
|
148
|
+
allowedBoardIds: policy.allowedBoardIds,
|
|
149
|
+
allowedProjectIds: policy.allowedProjectIds,
|
|
150
|
+
readOnly: policy.readOnly,
|
|
151
|
+
disabledTools: policy.disabledTools,
|
|
152
|
+
protectedListIds: policy.protectedListIds,
|
|
153
|
+
},
|
|
154
|
+
}),
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return errorResult(error);
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
export const userTools = [listUsersTool, whoamiTool];
|
|
165
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}
|