@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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: planka_set_card_members
|
|
3
|
+
*
|
|
4
|
+
* The shape mirrors planka_set_card_labels on purpose: same argument names,
|
|
5
|
+
* same report of added/removed/alreadyPresent/notPresent/failed, same rule that
|
|
6
|
+
* the final state is read back rather than assumed.
|
|
7
|
+
*/
|
|
8
|
+
export declare const setCardMembersTool: {
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object";
|
|
13
|
+
properties: {
|
|
14
|
+
cardId: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
add: {
|
|
19
|
+
type: string;
|
|
20
|
+
items: {
|
|
21
|
+
type: string;
|
|
22
|
+
};
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
remove: {
|
|
26
|
+
type: string;
|
|
27
|
+
items: {
|
|
28
|
+
type: string;
|
|
29
|
+
};
|
|
30
|
+
description: string;
|
|
31
|
+
};
|
|
32
|
+
addUserNames: {
|
|
33
|
+
type: string;
|
|
34
|
+
items: {
|
|
35
|
+
type: string;
|
|
36
|
+
};
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
removeUserNames: {
|
|
40
|
+
type: string;
|
|
41
|
+
items: {
|
|
42
|
+
type: string;
|
|
43
|
+
};
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
boardId: {
|
|
47
|
+
type: string;
|
|
48
|
+
description: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
required: string[];
|
|
52
|
+
};
|
|
53
|
+
handler: (params: {
|
|
54
|
+
cardId: string;
|
|
55
|
+
add?: string[];
|
|
56
|
+
remove?: string[];
|
|
57
|
+
addUserNames?: string[];
|
|
58
|
+
removeUserNames?: string[];
|
|
59
|
+
boardId?: string;
|
|
60
|
+
}) => Promise<{
|
|
61
|
+
isError?: true | undefined;
|
|
62
|
+
content: {
|
|
63
|
+
type: "text";
|
|
64
|
+
text: string;
|
|
65
|
+
}[];
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
export declare const memberTools: {
|
|
69
|
+
name: string;
|
|
70
|
+
description: string;
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: "object";
|
|
73
|
+
properties: {
|
|
74
|
+
cardId: {
|
|
75
|
+
type: string;
|
|
76
|
+
description: string;
|
|
77
|
+
};
|
|
78
|
+
add: {
|
|
79
|
+
type: string;
|
|
80
|
+
items: {
|
|
81
|
+
type: string;
|
|
82
|
+
};
|
|
83
|
+
description: string;
|
|
84
|
+
};
|
|
85
|
+
remove: {
|
|
86
|
+
type: string;
|
|
87
|
+
items: {
|
|
88
|
+
type: string;
|
|
89
|
+
};
|
|
90
|
+
description: string;
|
|
91
|
+
};
|
|
92
|
+
addUserNames: {
|
|
93
|
+
type: string;
|
|
94
|
+
items: {
|
|
95
|
+
type: string;
|
|
96
|
+
};
|
|
97
|
+
description: string;
|
|
98
|
+
};
|
|
99
|
+
removeUserNames: {
|
|
100
|
+
type: string;
|
|
101
|
+
items: {
|
|
102
|
+
type: string;
|
|
103
|
+
};
|
|
104
|
+
description: string;
|
|
105
|
+
};
|
|
106
|
+
boardId: {
|
|
107
|
+
type: string;
|
|
108
|
+
description: string;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
required: string[];
|
|
112
|
+
};
|
|
113
|
+
handler: (params: {
|
|
114
|
+
cardId: string;
|
|
115
|
+
add?: string[];
|
|
116
|
+
remove?: string[];
|
|
117
|
+
addUserNames?: string[];
|
|
118
|
+
removeUserNames?: string[];
|
|
119
|
+
boardId?: string;
|
|
120
|
+
}) => Promise<{
|
|
121
|
+
isError?: true | undefined;
|
|
122
|
+
content: {
|
|
123
|
+
type: "text";
|
|
124
|
+
text: string;
|
|
125
|
+
}[];
|
|
126
|
+
}>;
|
|
127
|
+
}[];
|
|
128
|
+
//# sourceMappingURL=members.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.d.ts","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAsCL;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;;;;;;;CA+GF,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAxHE;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;;;;;;;GAiH4C,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Card membership tool — who is assigned to a card.
|
|
3
|
+
*/
|
|
4
|
+
import { setCardMembers } from "../operations/members.js";
|
|
5
|
+
import { listUsers, resolveUserNames } from "../operations/users.js";
|
|
6
|
+
import { PlankaError } from "../errors.js";
|
|
7
|
+
import { writeResult } from "../operations/verify.js";
|
|
8
|
+
/**
|
|
9
|
+
* Tool: planka_set_card_members
|
|
10
|
+
*
|
|
11
|
+
* The shape mirrors planka_set_card_labels on purpose: same argument names,
|
|
12
|
+
* same report of added/removed/alreadyPresent/notPresent/failed, same rule that
|
|
13
|
+
* the final state is read back rather than assumed.
|
|
14
|
+
*/
|
|
15
|
+
export const setCardMembersTool = {
|
|
16
|
+
name: "planka_set_card_members",
|
|
17
|
+
description: "Assign or unassign people on a card, by user ID (names are accepted and resolved). " +
|
|
18
|
+
"Re-reads the card and reports finalMemberIds — never the request.",
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
properties: {
|
|
22
|
+
cardId: { type: "string", description: "The card ID" },
|
|
23
|
+
add: {
|
|
24
|
+
type: "array",
|
|
25
|
+
items: { type: "string" },
|
|
26
|
+
description: "User IDs to assign. IDs come from planka_list_users.",
|
|
27
|
+
},
|
|
28
|
+
remove: {
|
|
29
|
+
type: "array",
|
|
30
|
+
items: { type: "string" },
|
|
31
|
+
description: "User IDs to unassign",
|
|
32
|
+
},
|
|
33
|
+
addUserNames: {
|
|
34
|
+
type: "array",
|
|
35
|
+
items: { type: "string" },
|
|
36
|
+
description: "Names or usernames to assign, resolved exactly and case-insensitively. An ambiguous name fails instead of guessing.",
|
|
37
|
+
},
|
|
38
|
+
removeUserNames: {
|
|
39
|
+
type: "array",
|
|
40
|
+
items: { type: "string" },
|
|
41
|
+
description: "Names or usernames to unassign",
|
|
42
|
+
},
|
|
43
|
+
boardId: {
|
|
44
|
+
type: "string",
|
|
45
|
+
description: "Board used to resolve names when this account cannot read the instance roster",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
required: ["cardId"],
|
|
49
|
+
},
|
|
50
|
+
handler: async (params) => {
|
|
51
|
+
try {
|
|
52
|
+
const add = [...(params.add ?? [])];
|
|
53
|
+
const remove = [...(params.remove ?? [])];
|
|
54
|
+
const addNames = params.addUserNames ?? [];
|
|
55
|
+
const removeNames = params.removeUserNames ?? [];
|
|
56
|
+
if (add.length === 0 &&
|
|
57
|
+
remove.length === 0 &&
|
|
58
|
+
addNames.length === 0 &&
|
|
59
|
+
removeNames.length === 0) {
|
|
60
|
+
return {
|
|
61
|
+
content: [
|
|
62
|
+
{
|
|
63
|
+
type: "text",
|
|
64
|
+
text: "Error: nothing to do — pass add and/or remove (user IDs), or addUserNames/removeUserNames. " +
|
|
65
|
+
"User IDs come from planka_list_users.",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const unresolved = [];
|
|
72
|
+
if (addNames.length > 0 || removeNames.length > 0) {
|
|
73
|
+
// Resolving a NAME is what needs the roster, and the roster may need a
|
|
74
|
+
// board. Say that, instead of letting a bare "boardId is required"
|
|
75
|
+
// surface from three layers down with no mention of the names.
|
|
76
|
+
let roster;
|
|
77
|
+
try {
|
|
78
|
+
roster = await listUsers({ boardId: params.boardId });
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error instanceof PlankaError &&
|
|
82
|
+
error.code === "MISSING_BOARD_ID") {
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: "text",
|
|
87
|
+
text: `Error: cannot resolve the user name(s) ${[...addNames, ...removeNames].join(", ")}: ` +
|
|
88
|
+
"this account cannot read the instance roster, so the names have to be looked up on a board. " +
|
|
89
|
+
"Pass boardId to this call (or set PLANKA_DEFAULT_BOARD_ID), or pass user IDs in add/remove — " +
|
|
90
|
+
"planka_list_users with a boardId returns them.",
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
isError: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
const resolvedAdd = resolveUserNames(addNames, roster.users);
|
|
99
|
+
const resolvedRemove = resolveUserNames(removeNames, roster.users);
|
|
100
|
+
add.push(...resolvedAdd.ids);
|
|
101
|
+
remove.push(...resolvedRemove.ids);
|
|
102
|
+
for (const failure of [...resolvedAdd.failed, ...resolvedRemove.failed]) {
|
|
103
|
+
unresolved.push({ userId: failure.userName, reason: failure.reason });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Every name failed to resolve and there was nothing else to do: say so
|
|
107
|
+
// instead of reporting a no-op success.
|
|
108
|
+
if (add.length === 0 && remove.length === 0) {
|
|
109
|
+
return {
|
|
110
|
+
content: [
|
|
111
|
+
{
|
|
112
|
+
type: "text",
|
|
113
|
+
text: `Error: no user could be resolved. ${unresolved
|
|
114
|
+
.map((f) => `${f.userId}: ${f.reason}`)
|
|
115
|
+
.join(" · ")}`,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
isError: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const result = await setCardMembers({ cardId: params.cardId, add, remove });
|
|
122
|
+
const failed = [...unresolved, ...result.failed];
|
|
123
|
+
// `failed` comes from setCardMembers' re-read of the card, so this IS
|
|
124
|
+
// the verification — no hand-written `verified: true`.
|
|
125
|
+
const ok = failed.length === 0;
|
|
126
|
+
return writeResult({
|
|
127
|
+
cardId: params.cardId,
|
|
128
|
+
membersAdded: result.added.length,
|
|
129
|
+
membersRemoved: result.removed.length,
|
|
130
|
+
added: result.added,
|
|
131
|
+
removed: result.removed,
|
|
132
|
+
alreadyPresent: result.alreadyPresent,
|
|
133
|
+
notPresent: result.notPresent,
|
|
134
|
+
failed,
|
|
135
|
+
finalMemberIds: result.finalMemberIds,
|
|
136
|
+
}, { verified: ok });
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error instanceof PlankaError) {
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: "text", text: `Error: ${error.message}` }],
|
|
142
|
+
isError: true,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
export const memberTools = [setCardMembersTool];
|
|
150
|
+
//# sourceMappingURL=members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/tools/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,15 @@ export declare const getStructureTool: {
|
|
|
12
12
|
type: string;
|
|
13
13
|
description: string;
|
|
14
14
|
};
|
|
15
|
+
withLists: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
15
19
|
};
|
|
16
20
|
};
|
|
17
21
|
handler: (params: {
|
|
18
22
|
projectId?: string;
|
|
23
|
+
withLists?: boolean;
|
|
19
24
|
}) => Promise<{
|
|
20
25
|
content: {
|
|
21
26
|
type: "text";
|
|
@@ -42,12 +47,17 @@ export declare const getBoardTool: {
|
|
|
42
47
|
description: string;
|
|
43
48
|
default: boolean;
|
|
44
49
|
};
|
|
50
|
+
limit: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
45
54
|
};
|
|
46
55
|
required: string[];
|
|
47
56
|
};
|
|
48
57
|
handler: (params: {
|
|
49
|
-
boardId
|
|
58
|
+
boardId?: string;
|
|
50
59
|
includeTaskCounts?: boolean;
|
|
60
|
+
limit?: number;
|
|
51
61
|
}) => Promise<{
|
|
52
62
|
content: {
|
|
53
63
|
type: "text";
|
|
@@ -65,10 +75,15 @@ export declare const navigationTools: ({
|
|
|
65
75
|
type: string;
|
|
66
76
|
description: string;
|
|
67
77
|
};
|
|
78
|
+
withLists: {
|
|
79
|
+
type: string;
|
|
80
|
+
description: string;
|
|
81
|
+
};
|
|
68
82
|
};
|
|
69
83
|
};
|
|
70
84
|
handler: (params: {
|
|
71
85
|
projectId?: string;
|
|
86
|
+
withLists?: boolean;
|
|
72
87
|
}) => Promise<{
|
|
73
88
|
content: {
|
|
74
89
|
type: "text";
|
|
@@ -90,12 +105,17 @@ export declare const navigationTools: ({
|
|
|
90
105
|
description: string;
|
|
91
106
|
default: boolean;
|
|
92
107
|
};
|
|
108
|
+
limit: {
|
|
109
|
+
type: string;
|
|
110
|
+
description: string;
|
|
111
|
+
};
|
|
93
112
|
};
|
|
94
113
|
required: string[];
|
|
95
114
|
};
|
|
96
115
|
handler: (params: {
|
|
97
|
-
boardId
|
|
116
|
+
boardId?: string;
|
|
98
117
|
includeTaskCounts?: boolean;
|
|
118
|
+
limit?: number;
|
|
99
119
|
}) => Promise<{
|
|
100
120
|
content: {
|
|
101
121
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;sBAmBH;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;CAqCpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;sBA4BC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;;;;;;CAuHF,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;sBApMF;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAuE3C;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;;;;;;IAyH4D,CAAC"}
|
package/dist/tools/navigation.js
CHANGED
|
@@ -3,13 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { getStructure } from "../operations/projects.js";
|
|
5
5
|
import { getBoardWithTaskCounts } from "../operations/boards.js";
|
|
6
|
+
import { parseInput } from "../errors.js";
|
|
7
|
+
import { GetBoardSchema } from "../schemas/requests.js";
|
|
6
8
|
/**
|
|
7
9
|
* Tool: planka_get_structure
|
|
8
10
|
* Get the full project/board/list hierarchy.
|
|
9
11
|
*/
|
|
10
12
|
export const getStructureTool = {
|
|
11
13
|
name: "planka_get_structure",
|
|
12
|
-
description: "
|
|
14
|
+
description: "Projects, boards and lists with their IDs. The source of the IDs every other tool needs. " +
|
|
15
|
+
"Columns cost one board read per board: pass withLists: false for the projects and boards alone, in a single request.",
|
|
13
16
|
inputSchema: {
|
|
14
17
|
type: "object",
|
|
15
18
|
properties: {
|
|
@@ -17,10 +20,17 @@ export const getStructureTool = {
|
|
|
17
20
|
type: "string",
|
|
18
21
|
description: "Optional: Get structure for a specific project only",
|
|
19
22
|
},
|
|
23
|
+
withLists: {
|
|
24
|
+
type: "boolean",
|
|
25
|
+
description: "Include each board's columns. Default true; false answers projects and boards in one request (planka_board_summary also lists the columns, with their counts).",
|
|
26
|
+
},
|
|
20
27
|
},
|
|
21
28
|
},
|
|
22
29
|
handler: async (params) => {
|
|
23
|
-
const structure = await getStructure({
|
|
30
|
+
const structure = await getStructure({
|
|
31
|
+
projectId: params.projectId,
|
|
32
|
+
withLists: params.withLists,
|
|
33
|
+
});
|
|
24
34
|
// Format for readability
|
|
25
35
|
const formatted = structure.map((project) => ({
|
|
26
36
|
project: {
|
|
@@ -30,19 +40,23 @@ export const getStructureTool = {
|
|
|
30
40
|
boards: project.boards.map((b) => ({
|
|
31
41
|
id: b.board.id,
|
|
32
42
|
name: b.board.name,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
...(params.withLists === false
|
|
44
|
+
? {}
|
|
45
|
+
: {
|
|
46
|
+
lists: b.lists
|
|
47
|
+
.filter((l) => l.name !== null) // Filter out archive/trash
|
|
48
|
+
.map((l) => ({
|
|
49
|
+
id: l.id,
|
|
50
|
+
name: l.name,
|
|
51
|
+
})),
|
|
52
|
+
}),
|
|
39
53
|
})),
|
|
40
54
|
}));
|
|
41
55
|
return {
|
|
42
56
|
content: [
|
|
43
57
|
{
|
|
44
58
|
type: "text",
|
|
45
|
-
text: JSON.stringify(formatted
|
|
59
|
+
text: JSON.stringify(formatted),
|
|
46
60
|
},
|
|
47
61
|
],
|
|
48
62
|
};
|
|
@@ -54,24 +68,32 @@ export const getStructureTool = {
|
|
|
54
68
|
*/
|
|
55
69
|
export const getBoardTool = {
|
|
56
70
|
name: "planka_get_board",
|
|
57
|
-
description: "
|
|
71
|
+
description: "DEPRECATED: use planka_board_summary + planka_find_cards. " +
|
|
72
|
+
"Whole board in one payload: every list, card and label — the most expensive read of the set, and it grows with the board. " +
|
|
73
|
+
"It returns at most `limit` cards (50 by default) and reports total/truncated when it clips. " +
|
|
74
|
+
"Archive and trash columns are never included (excludesArchived).",
|
|
58
75
|
inputSchema: {
|
|
59
76
|
type: "object",
|
|
60
77
|
properties: {
|
|
61
78
|
boardId: {
|
|
62
79
|
type: "string",
|
|
63
|
-
description: "The board ID",
|
|
80
|
+
description: "The board ID. Optional when the server has PLANKA_DEFAULT_BOARD_ID.",
|
|
64
81
|
},
|
|
65
82
|
includeTaskCounts: {
|
|
66
83
|
type: "boolean",
|
|
67
84
|
description: "Include task completion counts for each card",
|
|
68
85
|
default: true,
|
|
69
86
|
},
|
|
87
|
+
limit: {
|
|
88
|
+
type: "number",
|
|
89
|
+
description: "Max cards across the whole board. Default 50, max 200. Beyond it the response carries truncated: true.",
|
|
90
|
+
},
|
|
70
91
|
},
|
|
71
92
|
required: ["boardId"],
|
|
72
93
|
},
|
|
73
94
|
handler: async (params) => {
|
|
74
|
-
const
|
|
95
|
+
const { boardId, includeTaskCounts, limit } = parseInput(GetBoardSchema, params);
|
|
96
|
+
const details = await getBoardWithTaskCounts({ boardId });
|
|
75
97
|
// Group cards by list for readability
|
|
76
98
|
const cardsByList = new Map();
|
|
77
99
|
for (const card of details.cards) {
|
|
@@ -91,11 +113,18 @@ export const getBoardTool = {
|
|
|
91
113
|
}
|
|
92
114
|
labelsByCard.set(cl.cardId, labels);
|
|
93
115
|
}
|
|
116
|
+
// Cards are handed out in board order until `limit` runs out; the rest is
|
|
117
|
+
// reported, never dropped in silence.
|
|
118
|
+
let budget = limit;
|
|
119
|
+
const totalCards = details.cards.length;
|
|
94
120
|
const formatted = {
|
|
95
121
|
board: {
|
|
96
122
|
id: details.board.id,
|
|
97
123
|
name: details.board.name,
|
|
98
124
|
},
|
|
125
|
+
deprecated: "planka_get_board is deprecated: use planka_board_summary for the shape of the board and planka_find_cards for its cards.",
|
|
126
|
+
excludesArchived: true,
|
|
127
|
+
totalCards,
|
|
99
128
|
labels: details.labels.map((l) => ({
|
|
100
129
|
id: l.id,
|
|
101
130
|
name: l.name,
|
|
@@ -104,10 +133,16 @@ export const getBoardTool = {
|
|
|
104
133
|
lists: details.lists
|
|
105
134
|
.filter((l) => l.name !== null) // Filter archive/trash
|
|
106
135
|
.map((list) => {
|
|
107
|
-
const
|
|
136
|
+
const allListCards = (cardsByList.get(list.id) || []).sort((a, b) => a.position - b.position);
|
|
137
|
+
const listCards = allListCards.slice(0, Math.max(budget, 0));
|
|
138
|
+
budget -= listCards.length;
|
|
108
139
|
return {
|
|
109
140
|
id: list.id,
|
|
110
141
|
name: list.name,
|
|
142
|
+
cardCount: allListCards.length,
|
|
143
|
+
...(listCards.length < allListCards.length
|
|
144
|
+
? { returned: listCards.length }
|
|
145
|
+
: {}),
|
|
111
146
|
cards: listCards.map((card) => {
|
|
112
147
|
const cardData = {
|
|
113
148
|
id: card.id,
|
|
@@ -129,7 +164,7 @@ export const getBoardTool = {
|
|
|
129
164
|
if (cardLabels && cardLabels.length > 0) {
|
|
130
165
|
cardData.labels = cardLabels;
|
|
131
166
|
}
|
|
132
|
-
if (
|
|
167
|
+
if (includeTaskCounts !== false && card.taskCount > 0) {
|
|
133
168
|
cardData.tasks = `${card.completedTaskCount}/${card.taskCount}`;
|
|
134
169
|
}
|
|
135
170
|
return cardData;
|
|
@@ -137,11 +172,21 @@ export const getBoardTool = {
|
|
|
137
172
|
};
|
|
138
173
|
}),
|
|
139
174
|
};
|
|
175
|
+
const returnedCards = limit - budget;
|
|
140
176
|
return {
|
|
141
177
|
content: [
|
|
142
178
|
{
|
|
143
179
|
type: "text",
|
|
144
|
-
text: JSON.stringify(
|
|
180
|
+
text: JSON.stringify({
|
|
181
|
+
...formatted,
|
|
182
|
+
returnedCards,
|
|
183
|
+
...(returnedCards < totalCards
|
|
184
|
+
? {
|
|
185
|
+
truncated: true,
|
|
186
|
+
note: `Only ${returnedCards} of ${totalCards} cards are in this response. Raise limit, or read one column with planka_find_cards({listId}).`,
|
|
187
|
+
}
|
|
188
|
+
: {}),
|
|
189
|
+
}),
|
|
145
190
|
},
|
|
146
191
|
],
|
|
147
192
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"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"}
|