@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.
Files changed (195) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +26 -0
  3. package/.claude-plugin/plugin.json +45 -0
  4. package/.codex-plugin/mcp.json +16 -0
  5. package/.codex-plugin/plugin.json +27 -0
  6. package/.mcp.json +17 -0
  7. package/CHANGELOG.md +510 -0
  8. package/README.es.md +294 -55
  9. package/README.md +293 -55
  10. package/dist/cli/init.d.ts +101 -0
  11. package/dist/cli/init.d.ts.map +1 -0
  12. package/dist/cli/init.js +481 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/client.d.ts +32 -4
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +106 -32
  17. package/dist/client.js.map +1 -1
  18. package/dist/config/policy.d.ts +82 -0
  19. package/dist/config/policy.d.ts.map +1 -0
  20. package/dist/config/policy.js +226 -0
  21. package/dist/config/policy.js.map +1 -0
  22. package/dist/errors.d.ts +5 -1
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/errors.js +62 -5
  25. package/dist/errors.js.map +1 -1
  26. package/dist/identity.generated.d.ts +2 -1
  27. package/dist/identity.generated.d.ts.map +1 -1
  28. package/dist/identity.generated.js +2 -1
  29. package/dist/identity.generated.js.map +1 -1
  30. package/dist/index.js +85 -10
  31. package/dist/index.js.map +1 -1
  32. package/dist/instructions.d.ts +21 -0
  33. package/dist/instructions.d.ts.map +1 -0
  34. package/dist/instructions.js +37 -0
  35. package/dist/instructions.js.map +1 -0
  36. package/dist/operations/actions.d.ts +654 -0
  37. package/dist/operations/actions.d.ts.map +1 -0
  38. package/dist/operations/actions.js +154 -0
  39. package/dist/operations/actions.js.map +1 -0
  40. package/dist/operations/archive.d.ts +28 -0
  41. package/dist/operations/archive.d.ts.map +1 -0
  42. package/dist/operations/archive.js +74 -0
  43. package/dist/operations/archive.js.map +1 -0
  44. package/dist/operations/attachments.d.ts +1 -1
  45. package/dist/operations/attachments.d.ts.map +1 -1
  46. package/dist/operations/attachments.js +3 -1
  47. package/dist/operations/attachments.js.map +1 -1
  48. package/dist/operations/board-id.d.ts +1 -1
  49. package/dist/operations/board-id.d.ts.map +1 -1
  50. package/dist/operations/board-id.js +13 -7
  51. package/dist/operations/board-id.js.map +1 -1
  52. package/dist/operations/boards.d.ts +96 -19
  53. package/dist/operations/boards.d.ts.map +1 -1
  54. package/dist/operations/boards.js +377 -93
  55. package/dist/operations/boards.js.map +1 -1
  56. package/dist/operations/card-brief.d.ts +91 -0
  57. package/dist/operations/card-brief.d.ts.map +1 -0
  58. package/dist/operations/card-brief.js +79 -0
  59. package/dist/operations/card-brief.js.map +1 -0
  60. package/dist/operations/cards.d.ts +34 -9
  61. package/dist/operations/cards.d.ts.map +1 -1
  62. package/dist/operations/cards.js +60 -14
  63. package/dist/operations/cards.js.map +1 -1
  64. package/dist/operations/comments.d.ts +61 -4
  65. package/dist/operations/comments.d.ts.map +1 -1
  66. package/dist/operations/comments.js +91 -8
  67. package/dist/operations/comments.js.map +1 -1
  68. package/dist/operations/duplicate.d.ts +16 -0
  69. package/dist/operations/duplicate.d.ts.map +1 -0
  70. package/dist/operations/duplicate.js +43 -0
  71. package/dist/operations/duplicate.js.map +1 -0
  72. package/dist/operations/labels.d.ts +1 -1
  73. package/dist/operations/labels.d.ts.map +1 -1
  74. package/dist/operations/labels.js +7 -4
  75. package/dist/operations/labels.js.map +1 -1
  76. package/dist/operations/lists.d.ts +63 -1
  77. package/dist/operations/lists.d.ts.map +1 -1
  78. package/dist/operations/lists.js +97 -2
  79. package/dist/operations/lists.js.map +1 -1
  80. package/dist/operations/members.d.ts +39 -0
  81. package/dist/operations/members.d.ts.map +1 -0
  82. package/dist/operations/members.js +107 -0
  83. package/dist/operations/members.js.map +1 -0
  84. package/dist/operations/projects.d.ts +16 -0
  85. package/dist/operations/projects.d.ts.map +1 -1
  86. package/dist/operations/projects.js +54 -9
  87. package/dist/operations/projects.js.map +1 -1
  88. package/dist/operations/tasks.d.ts +1 -1
  89. package/dist/operations/tasks.d.ts.map +1 -1
  90. package/dist/operations/tasks.js +5 -3
  91. package/dist/operations/tasks.js.map +1 -1
  92. package/dist/operations/users.d.ts +123 -0
  93. package/dist/operations/users.d.ts.map +1 -0
  94. package/dist/operations/users.js +180 -0
  95. package/dist/operations/users.js.map +1 -0
  96. package/dist/operations/verify.d.ts +84 -0
  97. package/dist/operations/verify.d.ts.map +1 -0
  98. package/dist/operations/verify.js +124 -0
  99. package/dist/operations/verify.js.map +1 -0
  100. package/dist/prompts.d.ts +48 -0
  101. package/dist/prompts.d.ts.map +1 -0
  102. package/dist/prompts.js +155 -0
  103. package/dist/prompts.js.map +1 -0
  104. package/dist/resources.d.ts +38 -0
  105. package/dist/resources.d.ts.map +1 -0
  106. package/dist/resources.js +127 -0
  107. package/dist/resources.js.map +1 -0
  108. package/dist/schemas/entities.d.ts +115 -24
  109. package/dist/schemas/entities.d.ts.map +1 -1
  110. package/dist/schemas/entities.js +48 -0
  111. package/dist/schemas/entities.js.map +1 -1
  112. package/dist/schemas/requests.d.ts +121 -46
  113. package/dist/schemas/requests.d.ts.map +1 -1
  114. package/dist/schemas/requests.js +57 -12
  115. package/dist/schemas/requests.js.map +1 -1
  116. package/dist/schemas/responses.d.ts +541 -186
  117. package/dist/schemas/responses.d.ts.map +1 -1
  118. package/dist/schemas/responses.js +13 -2
  119. package/dist/schemas/responses.js.map +1 -1
  120. package/dist/tools/activity.d.ts +150 -0
  121. package/dist/tools/activity.d.ts.map +1 -0
  122. package/dist/tools/activity.js +198 -0
  123. package/dist/tools/activity.js.map +1 -0
  124. package/dist/tools/annotations.d.ts +52 -0
  125. package/dist/tools/annotations.d.ts.map +1 -0
  126. package/dist/tools/annotations.js +214 -0
  127. package/dist/tools/annotations.js.map +1 -0
  128. package/dist/tools/attachments.d.ts +28 -4
  129. package/dist/tools/attachments.d.ts.map +1 -1
  130. package/dist/tools/attachments.js +53 -34
  131. package/dist/tools/attachments.js.map +1 -1
  132. package/dist/tools/card-ops.d.ts +232 -0
  133. package/dist/tools/card-ops.d.ts.map +1 -0
  134. package/dist/tools/card-ops.js +333 -0
  135. package/dist/tools/card-ops.js.map +1 -0
  136. package/dist/tools/cards.d.ts +90 -8
  137. package/dist/tools/cards.d.ts.map +1 -1
  138. package/dist/tools/cards.js +411 -128
  139. package/dist/tools/cards.js.map +1 -1
  140. package/dist/tools/comments.d.ts +226 -22
  141. package/dist/tools/comments.d.ts.map +1 -1
  142. package/dist/tools/comments.js +163 -134
  143. package/dist/tools/comments.js.map +1 -1
  144. package/dist/tools/dispatch.d.ts +47 -0
  145. package/dist/tools/dispatch.d.ts.map +1 -0
  146. package/dist/tools/dispatch.js +63 -0
  147. package/dist/tools/dispatch.js.map +1 -0
  148. package/dist/tools/guard.d.ts +9 -0
  149. package/dist/tools/guard.d.ts.map +1 -0
  150. package/dist/tools/guard.js +20 -0
  151. package/dist/tools/guard.js.map +1 -0
  152. package/dist/tools/index.d.ts +748 -450
  153. package/dist/tools/index.d.ts.map +1 -1
  154. package/dist/tools/index.js +136 -17
  155. package/dist/tools/index.js.map +1 -1
  156. package/dist/tools/labels.d.ts +213 -18
  157. package/dist/tools/labels.d.ts.map +1 -1
  158. package/dist/tools/labels.js +218 -203
  159. package/dist/tools/labels.js.map +1 -1
  160. package/dist/tools/lists.d.ts +222 -15
  161. package/dist/tools/lists.d.ts.map +1 -1
  162. package/dist/tools/lists.js +175 -156
  163. package/dist/tools/lists.js.map +1 -1
  164. package/dist/tools/members.d.ts +128 -0
  165. package/dist/tools/members.d.ts.map +1 -0
  166. package/dist/tools/members.js +150 -0
  167. package/dist/tools/members.js.map +1 -0
  168. package/dist/tools/navigation.d.ts +22 -2
  169. package/dist/tools/navigation.d.ts.map +1 -1
  170. package/dist/tools/navigation.js +60 -15
  171. package/dist/tools/navigation.js.map +1 -1
  172. package/dist/tools/queries.d.ts +196 -166
  173. package/dist/tools/queries.d.ts.map +1 -1
  174. package/dist/tools/queries.js +125 -155
  175. package/dist/tools/queries.js.map +1 -1
  176. package/dist/tools/tasks.d.ts +26 -6
  177. package/dist/tools/tasks.d.ts.map +1 -1
  178. package/dist/tools/tasks.js +110 -55
  179. package/dist/tools/tasks.js.map +1 -1
  180. package/dist/tools/users.d.ts +130 -0
  181. package/dist/tools/users.d.ts.map +1 -0
  182. package/dist/tools/users.js +165 -0
  183. package/dist/tools/users.js.map +1 -0
  184. package/docs/planka-2x-gotchas.md +121 -5
  185. package/docs/tools.md +771 -187
  186. package/docs/troubleshooting.md +137 -5
  187. package/hooks/hooks.json +15 -0
  188. package/hooks/preflight.mjs +100 -0
  189. package/package.json +6 -1
  190. package/scripts/setup.sh +8 -26
  191. package/scripts/sync-identity.mjs +55 -1
  192. package/server.json +87 -6
  193. package/tests/smoke/planka-smoke.mjs +512 -72
  194. package/workflow/skills/planka-close-card/SKILL.md +18 -5
  195. package/workflow/skills/planka-orchestrator/SKILL.md +36 -7
@@ -2,17 +2,200 @@
2
2
  * Label tools for PLANKA MCP server.
3
3
  */
4
4
  import { createLabel, updateLabel, deleteLabel, setCardLabels, } from "../operations/labels.js";
5
+ import { getBoard } from "../operations/boards.js";
5
6
  import { LabelColorSchema } from "../schemas/entities.js";
7
+ import { nothingToDo, verifiedDelete, verifiedWrite, writeResult, } from "../operations/verify.js";
6
8
  import { PlankaError } from "../errors.js";
7
- // Valid colors for the schema description
8
- const validColors = LabelColorSchema.options.join(", ");
9
+ import { assertBoardAllowed, getPolicy } from "../config/policy.js";
10
+ import { dispatchAction } from "./dispatch.js";
11
+ import { guarded } from "./guard.js";
9
12
  /**
10
- * Tool: planka_manage_labels
11
- * Create, update, or delete labels on a board.
13
+ * The 43 Planka colors as a real JSON Schema enum instead of a sentence in the
14
+ * description. Measured: the enum costs 599 chars against the 580 of the prose
15
+ * it replaces — so this is NOT a token saving, it is a correctness one: the
16
+ * client now rejects a bad color before the call is made. The prose stays for
17
+ * the runtime error message only.
18
+ */
19
+ const LABEL_COLORS = LabelColorSchema.options;
20
+ const validColors = LABEL_COLORS.join(", ");
21
+ function badColor(color) {
22
+ return {
23
+ content: [
24
+ {
25
+ type: "text",
26
+ text: `Error: Invalid color '${color}'. Valid colors: ${validColors}`,
27
+ },
28
+ ],
29
+ isError: true,
30
+ };
31
+ }
32
+ /**
33
+ * The enum is announced ONCE, on planka_create_label: it is the discovery path,
34
+ * and 43 colors cost ~650 chars of every session on every tool that repeats
35
+ * them. update_label and the manage_labels alias take the same colors and
36
+ * validate them with `badColor()` server-side, which answers with the full list.
37
+ */
38
+ const colorProperty = {
39
+ type: "string",
40
+ enum: LABEL_COLORS,
41
+ description: "Label color",
42
+ };
43
+ const colorPropertyNoEnum = {
44
+ type: "string",
45
+ description: "Label color. Same 43 values planka_create_label lists, also served as the planka://labels/colors resource; an invalid one comes back with the full list.",
46
+ };
47
+ /**
48
+ * Tool: planka_create_label
49
+ */
50
+ export const createLabelTool = {
51
+ name: "planka_create_label",
52
+ description: "Create a label on a board. Verified against the board's labels after writing.",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {
56
+ boardId: { type: "string", description: "Board ID" },
57
+ name: { type: "string", description: "Label name" },
58
+ color: colorProperty,
59
+ position: { type: "number", description: "Label position" },
60
+ },
61
+ required: ["boardId", "name", "color"],
62
+ },
63
+ handler: async (params) => guarded(async () => {
64
+ // Explicit, like every other write path: the allowlist must not depend
65
+ // on a lower layer the handler does not control.
66
+ const requested = params.boardId ?? getPolicy().defaultBoardId;
67
+ const boardId = requested ? assertBoardAllowed(requested) : null;
68
+ if (!boardId) {
69
+ return {
70
+ content: [
71
+ {
72
+ type: "text",
73
+ text: "Error: boardId is required (or set PLANKA_DEFAULT_BOARD_ID)",
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ const colorParse = LabelColorSchema.safeParse(params.color);
80
+ if (!colorParse.success)
81
+ return badColor(params.color);
82
+ const written = await verifiedWrite({
83
+ write: () => createLabel({
84
+ boardId,
85
+ name: params.name,
86
+ color: colorParse.data,
87
+ ...(params.position !== undefined
88
+ ? { position: params.position }
89
+ : {}),
90
+ }),
91
+ reread: (label) => getBoard({ boardId: label.boardId }),
92
+ landed: (board, label) => board.labels.some((l) => l.id === label.id &&
93
+ l.name === params.name &&
94
+ l.color === colorParse.data),
95
+ });
96
+ return writeResult({
97
+ label: {
98
+ id: written.result.id,
99
+ name: written.result.name,
100
+ color: written.result.color,
101
+ boardId: written.result.boardId,
102
+ position: written.result.position,
103
+ },
104
+ }, written);
105
+ }),
106
+ };
107
+ /**
108
+ * Tool: planka_update_label
109
+ */
110
+ export const updateLabelTool = {
111
+ name: "planka_update_label",
112
+ description: "Rename a label or change its color, by label ID from planka_board_summary. Verified against the board.",
113
+ inputSchema: {
114
+ type: "object",
115
+ properties: {
116
+ labelId: { type: "string", description: "Label ID" },
117
+ name: { type: "string", description: "New label name" },
118
+ color: colorPropertyNoEnum,
119
+ },
120
+ required: ["labelId"],
121
+ },
122
+ handler: async (params) => guarded(async () => {
123
+ const updates = { labelId: params.labelId };
124
+ if (params.name !== undefined)
125
+ updates.name = params.name;
126
+ if (params.color !== undefined) {
127
+ const colorParse = LabelColorSchema.safeParse(params.color);
128
+ if (!colorParse.success)
129
+ return badColor(params.color);
130
+ updates.color = colorParse.data;
131
+ }
132
+ if (Object.keys(updates).length === 1) {
133
+ return nothingToDo("name, color");
134
+ }
135
+ const written = await verifiedWrite({
136
+ write: () => updateLabel(updates),
137
+ reread: (label) => getBoard({ boardId: label.boardId }),
138
+ landed: (board) => {
139
+ const label = board.labels.find((l) => l.id === params.labelId);
140
+ if (!label)
141
+ return false;
142
+ if (updates.name !== undefined && label.name !== updates.name)
143
+ return false;
144
+ if (updates.color !== undefined && label.color !== updates.color)
145
+ return false;
146
+ return true;
147
+ },
148
+ });
149
+ const onBoard = written.after?.labels.find((l) => l.id === params.labelId);
150
+ return writeResult({
151
+ label: {
152
+ id: written.result.id,
153
+ name: onBoard?.name ?? written.result.name,
154
+ color: onBoard?.color ?? written.result.color,
155
+ boardId: written.result.boardId,
156
+ },
157
+ }, written);
158
+ }),
159
+ };
160
+ /**
161
+ * Tool: planka_delete_label
162
+ */
163
+ export const deleteLabelTool = {
164
+ name: "planka_delete_label",
165
+ description: "Delete a label from a board. DESTRUCTIVE: it disappears from every card that carried it. Confirmed by re-reading the board.",
166
+ inputSchema: {
167
+ type: "object",
168
+ properties: {
169
+ labelId: { type: "string", description: "Label ID" },
170
+ },
171
+ required: ["labelId"],
172
+ },
173
+ handler: async (params) => guarded(async () => {
174
+ const deleted = await verifiedDelete({
175
+ del: () => deleteLabel({ labelId: params.labelId }),
176
+ confirmGone: async (label) => {
177
+ if (!label)
178
+ return null;
179
+ const board = await getBoard({ boardId: label.boardId });
180
+ return !board.labels.some((l) => l.id === params.labelId);
181
+ },
182
+ unknownReason: "Planka did not echo the deleted label, so its board is unknown and the delete could not be confirmed — call planka_board_summary on the board to see whether the label is gone",
183
+ });
184
+ return writeResult({
185
+ labelId: params.labelId,
186
+ ...(deleted.result ? { boardId: deleted.result.boardId } : {}),
187
+ message: deleted.verified
188
+ ? `Label ${params.labelId} deleted`
189
+ : `Label ${params.labelId} delete NOT confirmed — check with planka_board_summary before retrying`,
190
+ }, deleted);
191
+ }),
192
+ };
193
+ /**
194
+ * Tool: planka_manage_labels (DEPRECATED alias)
12
195
  */
13
196
  export const manageLabelsTool = {
14
197
  name: "planka_manage_labels",
15
- description: "Create, update, or delete labels on a board.",
198
+ description: "DEPRECATED: use planka_create_label / planka_update_label / planka_delete_label. Kept so existing callers keep working; it only routes `action` to those tools.",
16
199
  inputSchema: {
17
200
  type: "object",
18
201
  properties: {
@@ -21,190 +204,24 @@ export const manageLabelsTool = {
21
204
  enum: ["create", "update", "delete"],
22
205
  description: "Action to perform",
23
206
  },
24
- boardId: {
25
- type: "string",
26
- description: "Board ID (required for create)",
27
- },
207
+ boardId: { type: "string", description: "Board ID (required for create)" },
28
208
  labelId: {
29
209
  type: "string",
30
210
  description: "Label ID (required for update/delete)",
31
211
  },
32
- name: {
33
- type: "string",
34
- description: "Label name",
35
- },
212
+ name: { type: "string", description: "Label name" },
36
213
  color: {
37
214
  type: "string",
38
- description: `Label color. Valid colors: ${validColors}`,
215
+ description: "Label color (required for create). Values: planka_create_label's enum, or the planka://labels/colors resource.",
39
216
  },
40
217
  },
41
218
  required: ["action"],
42
219
  },
43
- handler: async (params) => {
44
- try {
45
- switch (params.action) {
46
- case "create": {
47
- if (!params.boardId) {
48
- return {
49
- content: [
50
- {
51
- type: "text",
52
- text: "Error: boardId is required for create action",
53
- },
54
- ],
55
- isError: true,
56
- };
57
- }
58
- if (!params.name) {
59
- return {
60
- content: [
61
- {
62
- type: "text",
63
- text: "Error: name is required for create action",
64
- },
65
- ],
66
- isError: true,
67
- };
68
- }
69
- if (!params.color) {
70
- return {
71
- content: [
72
- {
73
- type: "text",
74
- text: "Error: color is required for create action",
75
- },
76
- ],
77
- isError: true,
78
- };
79
- }
80
- // Validate color
81
- const colorParse = LabelColorSchema.safeParse(params.color);
82
- if (!colorParse.success) {
83
- return {
84
- content: [
85
- {
86
- type: "text",
87
- text: `Error: Invalid color '${params.color}'. Valid colors: ${validColors}`,
88
- },
89
- ],
90
- isError: true,
91
- };
92
- }
93
- const label = await createLabel({
94
- boardId: params.boardId,
95
- name: params.name,
96
- color: colorParse.data,
97
- });
98
- return {
99
- content: [
100
- {
101
- type: "text",
102
- text: JSON.stringify({
103
- success: true,
104
- label: {
105
- id: label.id,
106
- name: label.name,
107
- color: label.color,
108
- },
109
- }, null, 2),
110
- },
111
- ],
112
- };
113
- }
114
- case "update": {
115
- if (!params.labelId) {
116
- return {
117
- content: [
118
- {
119
- type: "text",
120
- text: "Error: labelId is required for update action",
121
- },
122
- ],
123
- isError: true,
124
- };
125
- }
126
- const updates = { labelId: params.labelId };
127
- if (params.name !== undefined)
128
- updates.name = params.name;
129
- if (params.color !== undefined) {
130
- const colorParse = LabelColorSchema.safeParse(params.color);
131
- if (!colorParse.success) {
132
- return {
133
- content: [
134
- {
135
- type: "text",
136
- text: `Error: Invalid color '${params.color}'. Valid colors: ${validColors}`,
137
- },
138
- ],
139
- isError: true,
140
- };
141
- }
142
- updates.color = colorParse.data;
143
- }
144
- const label = await updateLabel(updates);
145
- return {
146
- content: [
147
- {
148
- type: "text",
149
- text: JSON.stringify({
150
- success: true,
151
- label: {
152
- id: label.id,
153
- name: label.name,
154
- color: label.color,
155
- },
156
- }, null, 2),
157
- },
158
- ],
159
- };
160
- }
161
- case "delete": {
162
- if (!params.labelId) {
163
- return {
164
- content: [
165
- {
166
- type: "text",
167
- text: "Error: labelId is required for delete action",
168
- },
169
- ],
170
- isError: true,
171
- };
172
- }
173
- await deleteLabel({ labelId: params.labelId });
174
- return {
175
- content: [
176
- {
177
- type: "text",
178
- text: JSON.stringify({
179
- success: true,
180
- message: `Label ${params.labelId} deleted`,
181
- }, null, 2),
182
- },
183
- ],
184
- };
185
- }
186
- default:
187
- return {
188
- content: [
189
- {
190
- type: "text",
191
- text: `Error: Unknown action '${params.action}'`,
192
- },
193
- ],
194
- isError: true,
195
- };
196
- }
197
- }
198
- catch (error) {
199
- if (error instanceof PlankaError) {
200
- return {
201
- content: [{ type: "text", text: `Error: ${error.message}` }],
202
- isError: true,
203
- };
204
- }
205
- throw error;
206
- }
207
- },
220
+ handler: async (params) => dispatchAction("planka_manage_labels", params, {
221
+ create: createLabelTool,
222
+ update: updateLabelTool,
223
+ delete: deleteLabelTool,
224
+ }),
208
225
  };
209
226
  /**
210
227
  * Tool: planka_set_card_labels
@@ -212,8 +229,7 @@ export const manageLabelsTool = {
212
229
  */
213
230
  export const setCardLabelsTool = {
214
231
  name: "planka_set_card_labels",
215
- description: "Add or remove labels from a card. Pass label IDs from the board (planka_get_board lists them), not label names. " +
216
- "Reports what actually landed on the card, verified by re-reading it.",
232
+ description: "Add or remove labels on a card, by label ID — never by name. IDs come from planka_board_summary.",
217
233
  inputSchema: {
218
234
  type: "object",
219
235
  properties: {
@@ -254,7 +270,7 @@ export const setCardLabelsTool = {
254
270
  {
255
271
  type: "text",
256
272
  text: "Error: nothing to do — pass addLabelIds (or labelIds) and/or removeLabelIds. " +
257
- "Label IDs come from planka_get_board.",
273
+ "Label IDs come from planka_board_summary.",
258
274
  },
259
275
  ],
260
276
  isError: true,
@@ -265,27 +281,20 @@ export const setCardLabelsTool = {
265
281
  addLabelIds: toAdd,
266
282
  removeLabelIds: toRemove,
267
283
  });
284
+ // `failed` is derived from setCardLabels' own re-read of the card, so
285
+ // this IS the verification — no hand-written `verified: true`.
268
286
  const ok = result.failed.length === 0;
269
- return {
270
- content: [
271
- {
272
- type: "text",
273
- text: JSON.stringify({
274
- success: ok,
275
- cardId: params.cardId,
276
- labelsAdded: result.added.length,
277
- labelsRemoved: result.removed.length,
278
- added: result.added,
279
- removed: result.removed,
280
- alreadyPresent: result.alreadyPresent,
281
- notPresent: result.notPresent,
282
- failed: result.failed,
283
- finalLabelIds: result.finalLabelIds,
284
- }, null, 2),
285
- },
286
- ],
287
- ...(ok ? {} : { isError: true }),
288
- };
287
+ return writeResult({
288
+ cardId: params.cardId,
289
+ labelsAdded: result.added.length,
290
+ labelsRemoved: result.removed.length,
291
+ added: result.added,
292
+ removed: result.removed,
293
+ alreadyPresent: result.alreadyPresent,
294
+ notPresent: result.notPresent,
295
+ failed: result.failed,
296
+ finalLabelIds: result.finalLabelIds,
297
+ }, { verified: ok });
289
298
  }
290
299
  catch (error) {
291
300
  if (error instanceof PlankaError) {
@@ -298,5 +307,11 @@ export const setCardLabelsTool = {
298
307
  }
299
308
  },
300
309
  };
301
- export const labelTools = [manageLabelsTool, setCardLabelsTool];
310
+ export const labelTools = [
311
+ createLabelTool,
312
+ updateLabelTool,
313
+ deleteLabelTool,
314
+ setCardLabelsTool,
315
+ manageLabelsTool,
316
+ ];
302
317
  //# sourceMappingURL=labels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/tools/labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/tools/labels.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAA4B,CAAC;AACnE,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE5C,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,yBAAyB,KAAK,oBAAoB,WAAW,EAAE;aACtE;SACF;QACD,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,aAAa;CAC3B,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,QAAQ;IACd,WAAW,EACT,0JAA0J;CAC7J,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,+EAA+E;IACjF,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;YACpD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACnD,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;SAC5D;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;KACvC;IACD,OAAO,EAAE,KAAK,EAAE,MAKf,EAAE,EAAE,CACH,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,uEAAuE;QACvE,iDAAiD;QACjD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC,cAAc,CAAC;QAC/D,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6DAA6D;qBACpE;iBACF;gBACD,OAAO,EAAE,IAAa;aACvB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,KAAK,EAAE,GAAG,EAAE,CACV,WAAW,CAAC;gBACV,OAAO;gBACP,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,UAAU,CAAC,IAAI;gBACtB,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;oBAC/B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;oBAC/B,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACJ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;gBACjB,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;gBACtB,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,IAAI,CAC9B;SACJ,CAAC,CAAC;QAEH,OAAO,WAAW,CAChB;YACE,KAAK,EAAE;gBACL,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;gBACzB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC/B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;aAClC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,wGAAwG;IAC1G,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;YACpD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;YACvD,KAAK,EAAE,mBAAmB;SAC3B;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD,OAAO,EAAE,KAAK,EAAE,MAA0D,EAAE,EAAE,CAC5E,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAA2B,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;QAClC,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;oBAC3D,OAAO,KAAK,CAAC;gBACf,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;oBAC9D,OAAO,KAAK,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3E,OAAO,WAAW,CAChB;YACE,KAAK,EAAE;gBACL,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI;gBAC1C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;gBAC7C,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;aAChC;SACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,6HAA6H;IAC/H,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;SACrD;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD,OAAO,EAAE,KAAK,EAAE,MAA2B,EAAE,EAAE,CAC7C,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACnC,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACnD,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3B,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBACxB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC;YACD,aAAa,EACX,gLAAgL;SACnL,CAAC,CAAC;QAEH,OAAO,WAAW,CAChB;YACE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,EAAE,OAAO,CAAC,QAAQ;gBACvB,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,UAAU;gBACnC,CAAC,CAAC,SAAS,MAAM,CAAC,OAAO,yEAAyE;SACrG,EACD,OAAO,CACR,CAAC;IACJ,CAAC,CAAC;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,iKAAiK;IACnK,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBACpC,WAAW,EAAE,mBAAmB;aACjC;YACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;YAC1E,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACnD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,gHAAgH;aACnH;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD,OAAO,EAAE,KAAK,EAAE,MAMf,EAAE,EAAE,CACH,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE;QAC7C,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,eAAe;KACxB,CAAC;CACL,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,kGAAkG;IACpG,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;aAC3B;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,qEAAqE;aACxE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,yCAAyC;aACvD;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,qBAAqB;aACnC;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;IACD,OAAO,EAAE,KAAK,EAAE,MAKf,EAAE,EAAE;QACH,IAAI,CAAC;YACH,iEAAiE;YACjE,qEAAqE;YACrE,6DAA6D;YAC7D,MAAM,KAAK,GAAG;gBACZ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;aACxE,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;YAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EACF,+EAA+E;gCAC/E,2CAA2C;yBAC9C;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,QAAQ;aACzB,CAAC,CAAC;YACH,sEAAsE;YACtE,+DAA+D;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YAEtC,OAAO,WAAW,CAChB;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAChC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;gBACpC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,EACD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,eAAe;IACf,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,gBAAgB;CACjB,CAAC"}