@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/cli/init.js
ADDED
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `planka-mcp init` — write the MCP config for one client, or print it.
|
|
3
|
+
*
|
|
4
|
+
* Design rules, all of them learned the hard way:
|
|
5
|
+
*
|
|
6
|
+
* - **Never clobber.** Every emitter merges: an existing `planka` entry is
|
|
7
|
+
* reported and left alone rather than overwritten, and unrelated servers in
|
|
8
|
+
* the same file are preserved byte for byte.
|
|
9
|
+
* - **`--dry-run` and `--client print` write nothing** and need no credentials,
|
|
10
|
+
* so the command is safe to run just to see what it would do.
|
|
11
|
+
* - **The API key is preferred** over email + password: no login, no token
|
|
12
|
+
* refresh, and no sign-in rate limit when ten agents start at once.
|
|
13
|
+
* - **No secret ever reaches a shareable artifact.** The Cursor deeplink and
|
|
14
|
+
* every printed snippet carry placeholders; only files under the user's home
|
|
15
|
+
* get the real value, and those are written 0600.
|
|
16
|
+
*/
|
|
17
|
+
import { spawnSync } from "node:child_process";
|
|
18
|
+
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
19
|
+
import { homedir } from "node:os";
|
|
20
|
+
import { dirname, resolve } from "node:path";
|
|
21
|
+
import { PlankaClient } from "../client.js";
|
|
22
|
+
import { PACKAGE_NAME, SERVER_VERSION } from "../identity.generated.js";
|
|
23
|
+
export const CLIENTS = ["claude", "codex", "cursor", "vscode", "print"];
|
|
24
|
+
const KEY_PLACEHOLDER = "<your-planka-api-key>";
|
|
25
|
+
const URL_PLACEHOLDER = "https://planka.example.com";
|
|
26
|
+
export const USAGE = `planka-mcp init — configure this MCP server in your client
|
|
27
|
+
|
|
28
|
+
Usage:
|
|
29
|
+
npx ${PACKAGE_NAME} init [--client <name>] [options]
|
|
30
|
+
|
|
31
|
+
Clients:
|
|
32
|
+
claude Claude Code (claude mcp add, user scope)
|
|
33
|
+
codex Codex CLI (~/.codex/config.toml)
|
|
34
|
+
cursor Cursor (~/.cursor/mcp.json) and an "Add to Cursor" deeplink
|
|
35
|
+
vscode VS Code (.vscode/mcp.json, secret asked at startup)
|
|
36
|
+
print print every snippet, write nothing (default without a TTY)
|
|
37
|
+
|
|
38
|
+
Options:
|
|
39
|
+
--base-url <url> Planka origin, e.g. https://planka.example.com
|
|
40
|
+
--api-key <key> Planka API key (recommended)
|
|
41
|
+
--email <email> Agent email, only if you have no API key
|
|
42
|
+
--password <pass> Agent password, only if you have no API key
|
|
43
|
+
--board <id> Default board ID (PLANKA_DEFAULT_BOARD_ID)
|
|
44
|
+
--project-dir <dir> Where to write .vscode/mcp.json (default: cwd)
|
|
45
|
+
--dry-run Print what would be written, change nothing
|
|
46
|
+
-h, --help This text
|
|
47
|
+
|
|
48
|
+
With no flags and a terminal attached, init asks for what it needs.`;
|
|
49
|
+
/** Flags in, options out. Unknown flags are an error, not a silent no-op. */
|
|
50
|
+
export function parseInitArgs(argv) {
|
|
51
|
+
const options = {
|
|
52
|
+
client: "print",
|
|
53
|
+
dryRun: false,
|
|
54
|
+
projectDir: process.cwd(),
|
|
55
|
+
help: false,
|
|
56
|
+
};
|
|
57
|
+
let clientGiven = false;
|
|
58
|
+
const value = (index, flag) => {
|
|
59
|
+
const next = argv[index + 1];
|
|
60
|
+
if (next === undefined || next.startsWith("--")) {
|
|
61
|
+
throw new Error(`${flag} needs a value.`);
|
|
62
|
+
}
|
|
63
|
+
return next;
|
|
64
|
+
};
|
|
65
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
66
|
+
const flag = argv[index];
|
|
67
|
+
switch (flag) {
|
|
68
|
+
case "-h":
|
|
69
|
+
case "--help":
|
|
70
|
+
options.help = true;
|
|
71
|
+
break;
|
|
72
|
+
case "--dry-run":
|
|
73
|
+
options.dryRun = true;
|
|
74
|
+
break;
|
|
75
|
+
case "--client": {
|
|
76
|
+
const raw = value(index, flag);
|
|
77
|
+
if (!CLIENTS.includes(raw)) {
|
|
78
|
+
throw new Error(`Unknown client: ${raw}. Choose one of: ${CLIENTS.join(", ")}.`);
|
|
79
|
+
}
|
|
80
|
+
options.client = raw;
|
|
81
|
+
clientGiven = true;
|
|
82
|
+
index += 1;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case "--base-url":
|
|
86
|
+
options.baseUrl = value(index, flag);
|
|
87
|
+
index += 1;
|
|
88
|
+
break;
|
|
89
|
+
case "--api-key":
|
|
90
|
+
options.apiKey = value(index, flag);
|
|
91
|
+
index += 1;
|
|
92
|
+
break;
|
|
93
|
+
case "--email":
|
|
94
|
+
options.email = value(index, flag);
|
|
95
|
+
index += 1;
|
|
96
|
+
break;
|
|
97
|
+
case "--password":
|
|
98
|
+
options.password = value(index, flag);
|
|
99
|
+
index += 1;
|
|
100
|
+
break;
|
|
101
|
+
case "--board":
|
|
102
|
+
options.boardId = value(index, flag);
|
|
103
|
+
index += 1;
|
|
104
|
+
break;
|
|
105
|
+
case "--project-dir":
|
|
106
|
+
options.projectDir = resolve(value(index, flag));
|
|
107
|
+
index += 1;
|
|
108
|
+
break;
|
|
109
|
+
default:
|
|
110
|
+
throw new Error(`Unknown option: ${flag}. Run init --help.`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Without --client and without a terminal to ask on, printing is the only
|
|
114
|
+
// honest default: writing someone's config from a script they did not aim is
|
|
115
|
+
// exactly the invasiveness this command is supposed to avoid.
|
|
116
|
+
if (!clientGiven && !process.stdin.isTTY)
|
|
117
|
+
options.client = "print";
|
|
118
|
+
return options;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The server entry every client gets, in MCP's `{command, args, env}` shape.
|
|
122
|
+
* `redacted` swaps the secret for a placeholder — that is the version that goes
|
|
123
|
+
* into anything printed, linked or committed.
|
|
124
|
+
*/
|
|
125
|
+
export function serverSpec(options, redacted = false) {
|
|
126
|
+
const env = {
|
|
127
|
+
PLANKA_BASE_URL: options.baseUrl || URL_PLACEHOLDER,
|
|
128
|
+
};
|
|
129
|
+
if (options.apiKey || !(options.email && options.password)) {
|
|
130
|
+
env.PLANKA_API_KEY = redacted
|
|
131
|
+
? KEY_PLACEHOLDER
|
|
132
|
+
: options.apiKey || KEY_PLACEHOLDER;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
env.PLANKA_AGENT_EMAIL = options.email;
|
|
136
|
+
env.PLANKA_AGENT_PASSWORD = redacted ? "<your-planka-password>" : options.password;
|
|
137
|
+
}
|
|
138
|
+
if (options.boardId)
|
|
139
|
+
env.PLANKA_DEFAULT_BOARD_ID = options.boardId;
|
|
140
|
+
return {
|
|
141
|
+
command: "npx",
|
|
142
|
+
args: ["-y", `${PACKAGE_NAME}@${SERVER_VERSION}`],
|
|
143
|
+
env,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** `claude mcp add …`, ready to paste. */
|
|
147
|
+
export function claudeMcpAddCommand(spec) {
|
|
148
|
+
const envFlags = Object.entries(spec.env)
|
|
149
|
+
.map(([key, val]) => ` --env ${key}=${val} \\`)
|
|
150
|
+
.join("\n");
|
|
151
|
+
return [
|
|
152
|
+
"claude mcp add --scope user --transport stdio planka \\",
|
|
153
|
+
envFlags,
|
|
154
|
+
` -- ${spec.command} ${spec.args.join(" ")}`,
|
|
155
|
+
].join("\n");
|
|
156
|
+
}
|
|
157
|
+
/** The `[mcp_servers.planka]` block for `~/.codex/config.toml`. */
|
|
158
|
+
export function codexTomlBlock(spec) {
|
|
159
|
+
const envLines = Object.entries(spec.env)
|
|
160
|
+
.map(([key, val]) => `${key} = ${JSON.stringify(val)}`)
|
|
161
|
+
.join(", ");
|
|
162
|
+
return [
|
|
163
|
+
"[mcp_servers.planka]",
|
|
164
|
+
`command = ${JSON.stringify(spec.command)}`,
|
|
165
|
+
`args = [${spec.args.map((a) => JSON.stringify(a)).join(", ")}]`,
|
|
166
|
+
`env = { ${envLines} }`,
|
|
167
|
+
"",
|
|
168
|
+
].join("\n");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Cursor's install deeplink. The base64 payload is the SERVER OBJECT ONLY —
|
|
172
|
+
* `{command, args, env}` with no name wrapper — and it never carries a real
|
|
173
|
+
* key: a deeplink ends up in browser history and in READMEs.
|
|
174
|
+
*/
|
|
175
|
+
export function cursorDeeplink(spec) {
|
|
176
|
+
const config = Buffer.from(JSON.stringify(spec)).toString("base64");
|
|
177
|
+
return `cursor://anysphere.cursor-deeplink/mcp/install?name=planka&config=${config}`;
|
|
178
|
+
}
|
|
179
|
+
/** VS Code badge URL. Same payload, url-encoded instead of base64. */
|
|
180
|
+
export function vscodeBadgeUrl(spec) {
|
|
181
|
+
const config = encodeURIComponent(JSON.stringify({ ...spec, type: "stdio" }));
|
|
182
|
+
return `https://insiders.vscode.dev/redirect/mcp/install?name=planka&config=${config}`;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* `.vscode/mcp.json`. The secret is an `inputs` promptString with
|
|
186
|
+
* `password: true`, so VS Code asks for it at startup and the committed file
|
|
187
|
+
* holds no credential.
|
|
188
|
+
*/
|
|
189
|
+
export function vscodeConfig(options) {
|
|
190
|
+
const env = {
|
|
191
|
+
PLANKA_BASE_URL: options.baseUrl || URL_PLACEHOLDER,
|
|
192
|
+
PLANKA_API_KEY: "${input:planka_api_key}",
|
|
193
|
+
};
|
|
194
|
+
if (options.boardId)
|
|
195
|
+
env.PLANKA_DEFAULT_BOARD_ID = options.boardId;
|
|
196
|
+
return {
|
|
197
|
+
inputs: [
|
|
198
|
+
{
|
|
199
|
+
id: "planka_api_key",
|
|
200
|
+
type: "promptString",
|
|
201
|
+
description: "Planka API key (X-Api-Key) for the agent user",
|
|
202
|
+
password: true,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
servers: {
|
|
206
|
+
planka: {
|
|
207
|
+
type: "stdio",
|
|
208
|
+
command: "npx",
|
|
209
|
+
args: ["-y", `${PACKAGE_NAME}@${SERVER_VERSION}`],
|
|
210
|
+
env,
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Merge a server entry into an `{mcpServers: …}` document without touching
|
|
217
|
+
* anything else. An existing `planka` entry wins: this command never silently
|
|
218
|
+
* replaces a config the user tuned by hand.
|
|
219
|
+
*/
|
|
220
|
+
export function mergeMcpJson(document, spec, key = "mcpServers") {
|
|
221
|
+
const base = document && typeof document === "object" && !Array.isArray(document)
|
|
222
|
+
? { ...document }
|
|
223
|
+
: {};
|
|
224
|
+
const servers = base[key] && typeof base[key] === "object" && !Array.isArray(base[key])
|
|
225
|
+
? { ...base[key] }
|
|
226
|
+
: {};
|
|
227
|
+
if (servers.planka) {
|
|
228
|
+
base[key] = servers;
|
|
229
|
+
return { document: base, added: false };
|
|
230
|
+
}
|
|
231
|
+
servers.planka = { type: "stdio", ...spec };
|
|
232
|
+
base[key] = servers;
|
|
233
|
+
return { document: base, added: true };
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Append the Codex block to an existing config.toml. Present already = leave it
|
|
237
|
+
* alone. TOML is edited as text on purpose: no parser here means no chance of
|
|
238
|
+
* rewriting (and reformatting, and losing the comments of) somebody's config.
|
|
239
|
+
*/
|
|
240
|
+
export function mergeCodexToml(current, block) {
|
|
241
|
+
if (/^\s*\[mcp_servers\.planka\]\s*$/m.test(current)) {
|
|
242
|
+
return { text: current, added: false };
|
|
243
|
+
}
|
|
244
|
+
const prefix = current.length === 0 || current.endsWith("\n") ? "" : "\n";
|
|
245
|
+
const separator = current.trim().length === 0 ? "" : "\n";
|
|
246
|
+
return { text: `${current}${prefix}${separator}${block}`, added: true };
|
|
247
|
+
}
|
|
248
|
+
async function readJsonFile(path) {
|
|
249
|
+
try {
|
|
250
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
const code = error.code;
|
|
254
|
+
if (code === "ENOENT")
|
|
255
|
+
return undefined;
|
|
256
|
+
throw new Error(`Cannot parse ${path}: ${error.message}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
async function writePrivateJson(path, value) {
|
|
260
|
+
await mkdir(dirname(path), { recursive: true });
|
|
261
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
|
|
262
|
+
await chmod(path, 0o600);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* The connection smoke that `scripts/setup.mjs` has always run, reduced to its
|
|
266
|
+
* useful half: one authenticated GET. It proves the base URL is the API origin
|
|
267
|
+
* (not an SPA or a proxy page) and that the credential works, before anything
|
|
268
|
+
* is written. Never fatal — a config that cannot be verified is still worth
|
|
269
|
+
* writing, as long as we say so.
|
|
270
|
+
*/
|
|
271
|
+
export async function checkConnection(options, fetchImpl = fetch) {
|
|
272
|
+
if (!options.baseUrl)
|
|
273
|
+
return { ok: false, detail: "no base URL given" };
|
|
274
|
+
if (!options.apiKey && !(options.email && options.password)) {
|
|
275
|
+
return { ok: false, detail: "no credentials given" };
|
|
276
|
+
}
|
|
277
|
+
const env = { PLANKA_BASE_URL: options.baseUrl };
|
|
278
|
+
if (options.apiKey)
|
|
279
|
+
env.PLANKA_API_KEY = options.apiKey;
|
|
280
|
+
else {
|
|
281
|
+
env.PLANKA_AGENT_EMAIL = options.email;
|
|
282
|
+
env.PLANKA_AGENT_PASSWORD = options.password;
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
const client = new PlankaClient(env, fetchImpl);
|
|
286
|
+
const me = await client.get("/api/users/me");
|
|
287
|
+
const who = me?.item?.username || me?.item?.name || "the agent user";
|
|
288
|
+
return { ok: true, detail: `authenticated as ${who}` };
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
return { ok: false, detail: error.message };
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/** Fill in whatever is missing, but only when there is a terminal to ask on. */
|
|
295
|
+
async function promptMissing(options, ask) {
|
|
296
|
+
if (options.client === "print")
|
|
297
|
+
return;
|
|
298
|
+
if (!options.baseUrl) {
|
|
299
|
+
options.baseUrl =
|
|
300
|
+
(await ask("Planka base URL (https://…)")) || undefined;
|
|
301
|
+
}
|
|
302
|
+
if (!options.apiKey && !(options.email && options.password)) {
|
|
303
|
+
options.apiKey = (await ask("Planka API key (blank to use email + password)", true)) || undefined;
|
|
304
|
+
if (!options.apiKey) {
|
|
305
|
+
options.email = (await ask("Agent email or username")) || undefined;
|
|
306
|
+
options.password = (await ask("Agent password", true)) || undefined;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (!options.boardId) {
|
|
310
|
+
options.boardId = (await ask("Default board ID (optional)")) || undefined;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function printAll(options, log) {
|
|
314
|
+
const spec = serverSpec(options, true);
|
|
315
|
+
log("# Claude Code (user scope)");
|
|
316
|
+
log(claudeMcpAddCommand(spec));
|
|
317
|
+
log("");
|
|
318
|
+
log("# Claude Code / Codex plugin (skills included)");
|
|
319
|
+
log("/plugin marketplace add omnicoreos/planka-mcp");
|
|
320
|
+
log("/plugin install planka@planka-mcp");
|
|
321
|
+
log("");
|
|
322
|
+
log("# Codex CLI — append to ~/.codex/config.toml");
|
|
323
|
+
log(codexTomlBlock(spec));
|
|
324
|
+
log("# Cursor — open this link (it carries no credential; Cursor asks)");
|
|
325
|
+
log(cursorDeeplink(spec));
|
|
326
|
+
log("");
|
|
327
|
+
log("# VS Code — .vscode/mcp.json (the key is asked at startup)");
|
|
328
|
+
log(JSON.stringify(vscodeConfig(options), null, 2));
|
|
329
|
+
}
|
|
330
|
+
/** Entry point. Returns the process exit code; never throws for user error. */
|
|
331
|
+
export async function runInit(argv, deps = {}) {
|
|
332
|
+
const log = deps.log ?? ((line) => console.log(line));
|
|
333
|
+
let options;
|
|
334
|
+
try {
|
|
335
|
+
options = parseInitArgs(argv);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
log(`init: ${error.message}`);
|
|
339
|
+
return 2;
|
|
340
|
+
}
|
|
341
|
+
if (options.help) {
|
|
342
|
+
log(USAGE);
|
|
343
|
+
return 0;
|
|
344
|
+
}
|
|
345
|
+
if (deps.ask && !options.dryRun)
|
|
346
|
+
await promptMissing(options, deps.ask);
|
|
347
|
+
if (options.client === "print") {
|
|
348
|
+
printAll(options, log);
|
|
349
|
+
return 0;
|
|
350
|
+
}
|
|
351
|
+
// The smoke: real credentials, one authenticated GET, before writing.
|
|
352
|
+
if (!options.dryRun) {
|
|
353
|
+
const check = deps.check ?? checkConnection;
|
|
354
|
+
const result = await check(options);
|
|
355
|
+
log(result.ok
|
|
356
|
+
? `Planka reachable: ${result.detail}.`
|
|
357
|
+
: `Warning: could not verify the connection (${result.detail}). Writing the config anyway — fix the credentials and rerun to verify.`);
|
|
358
|
+
}
|
|
359
|
+
const spec = serverSpec(options);
|
|
360
|
+
const redacted = serverSpec(options, true);
|
|
361
|
+
switch (options.client) {
|
|
362
|
+
case "claude": {
|
|
363
|
+
const command = claudeMcpAddCommand(spec);
|
|
364
|
+
if (options.dryRun) {
|
|
365
|
+
log("Would run:");
|
|
366
|
+
log(claudeMcpAddCommand(redacted));
|
|
367
|
+
return 0;
|
|
368
|
+
}
|
|
369
|
+
const probe = spawnSync("claude", ["--version"], { encoding: "utf8" });
|
|
370
|
+
if (probe.error) {
|
|
371
|
+
log("Claude Code is not on PATH. Run this once it is installed:");
|
|
372
|
+
log(command);
|
|
373
|
+
return 0;
|
|
374
|
+
}
|
|
375
|
+
const args = [
|
|
376
|
+
"mcp",
|
|
377
|
+
"add",
|
|
378
|
+
"--scope",
|
|
379
|
+
"user",
|
|
380
|
+
"--transport",
|
|
381
|
+
"stdio",
|
|
382
|
+
"planka",
|
|
383
|
+
...Object.entries(spec.env).flatMap(([key, val]) => [
|
|
384
|
+
"--env",
|
|
385
|
+
`${key}=${val}`,
|
|
386
|
+
]),
|
|
387
|
+
"--",
|
|
388
|
+
spec.command,
|
|
389
|
+
...spec.args,
|
|
390
|
+
];
|
|
391
|
+
const added = spawnSync("claude", args, { encoding: "utf8" });
|
|
392
|
+
if (added.status !== 0) {
|
|
393
|
+
log(`claude mcp add failed: ${(added.stderr || added.stdout || "unknown error").trim()}`);
|
|
394
|
+
return 1;
|
|
395
|
+
}
|
|
396
|
+
log("Claude Code user configuration updated. Restart Claude Code.");
|
|
397
|
+
return 0;
|
|
398
|
+
}
|
|
399
|
+
case "codex": {
|
|
400
|
+
const block = codexTomlBlock(spec);
|
|
401
|
+
const path = resolve(homedir(), ".codex", "config.toml");
|
|
402
|
+
if (options.dryRun) {
|
|
403
|
+
log(`Would append to ${path}:`);
|
|
404
|
+
log(codexTomlBlock(redacted));
|
|
405
|
+
return 0;
|
|
406
|
+
}
|
|
407
|
+
let current = "";
|
|
408
|
+
try {
|
|
409
|
+
current = await readFile(path, "utf8");
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
if (error.code !== "ENOENT")
|
|
413
|
+
throw error;
|
|
414
|
+
}
|
|
415
|
+
const merged = mergeCodexToml(current, block);
|
|
416
|
+
if (!merged.added) {
|
|
417
|
+
log(`${path} already has [mcp_servers.planka]. Left untouched; replace it by hand with:`);
|
|
418
|
+
log(block);
|
|
419
|
+
return 0;
|
|
420
|
+
}
|
|
421
|
+
await mkdir(dirname(path), { recursive: true });
|
|
422
|
+
await writeFile(path, merged.text, { mode: 0o600 });
|
|
423
|
+
log(`Appended [mcp_servers.planka] to ${path}. Restart Codex.`);
|
|
424
|
+
return 0;
|
|
425
|
+
}
|
|
426
|
+
case "cursor": {
|
|
427
|
+
const path = resolve(homedir(), ".cursor", "mcp.json");
|
|
428
|
+
if (options.dryRun) {
|
|
429
|
+
log(`Would merge into ${path}:`);
|
|
430
|
+
log(JSON.stringify(mergeMcpJson(undefined, redacted).document, null, 2));
|
|
431
|
+
log("");
|
|
432
|
+
log("Deeplink (no credential inside):");
|
|
433
|
+
log(cursorDeeplink(redacted));
|
|
434
|
+
return 0;
|
|
435
|
+
}
|
|
436
|
+
const merged = mergeMcpJson(await readJsonFile(path), spec);
|
|
437
|
+
if (!merged.added) {
|
|
438
|
+
log(`${path} already has an "planka" server. Left untouched.`);
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
await writePrivateJson(path, merged.document);
|
|
442
|
+
log(`Merged into ${path} (0600). Restart Cursor.`);
|
|
443
|
+
}
|
|
444
|
+
log("");
|
|
445
|
+
log("Share this instead of the file — it carries no credential:");
|
|
446
|
+
log(cursorDeeplink(redacted));
|
|
447
|
+
return 0;
|
|
448
|
+
}
|
|
449
|
+
case "vscode": {
|
|
450
|
+
const path = resolve(options.projectDir, ".vscode", "mcp.json");
|
|
451
|
+
const config = vscodeConfig(options);
|
|
452
|
+
if (options.dryRun) {
|
|
453
|
+
log(`Would write ${path}:`);
|
|
454
|
+
log(JSON.stringify(config, null, 2));
|
|
455
|
+
return 0;
|
|
456
|
+
}
|
|
457
|
+
const existing = await readJsonFile(path);
|
|
458
|
+
if (existing &&
|
|
459
|
+
typeof existing === "object" &&
|
|
460
|
+
existing.servers?.planka) {
|
|
461
|
+
log(`${path} already has a "planka" server. Left untouched.`);
|
|
462
|
+
return 0;
|
|
463
|
+
}
|
|
464
|
+
const base = existing ?? {};
|
|
465
|
+
const document = {
|
|
466
|
+
...base,
|
|
467
|
+
inputs: [
|
|
468
|
+
...(base.inputs ?? []).filter((input) => input.id !== "planka_api_key"),
|
|
469
|
+
...config.inputs,
|
|
470
|
+
],
|
|
471
|
+
servers: { ...(base.servers ?? {}), ...config.servers },
|
|
472
|
+
};
|
|
473
|
+
await mkdir(dirname(path), { recursive: true });
|
|
474
|
+
await writeFile(path, `${JSON.stringify(document, null, 2)}\n`);
|
|
475
|
+
log(`Wrote ${path}. VS Code asks for the API key on first start.`);
|
|
476
|
+
return 0;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return 0;
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
export interface ClientConfig {
|
|
2
2
|
baseUrl: string;
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Planka API key (`X-Api-Key`). When present there is no login and no token
|
|
5
|
+
* refresh: the key is sent on every request, including binary downloads.
|
|
6
|
+
*/
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
password?: string;
|
|
5
10
|
}
|
|
6
11
|
export interface RequestOptions {
|
|
7
12
|
token?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Planka API key. Mutually exclusive with `token` by design: Planka reads
|
|
15
|
+
* `Authorization: Bearer` first and ignores `x-api-key` when both arrive
|
|
16
|
+
* (`server/api/hooks/current-user/index.js`).
|
|
17
|
+
*/
|
|
18
|
+
apiKey?: string;
|
|
8
19
|
body?: unknown;
|
|
9
20
|
/**
|
|
10
21
|
* Multipart body (attachment uploads). Content-Type is left unset on
|
|
@@ -53,6 +64,18 @@ export declare class PlankaClient {
|
|
|
53
64
|
* Gets a valid token, refreshing if necessary.
|
|
54
65
|
*/
|
|
55
66
|
private getToken;
|
|
67
|
+
/**
|
|
68
|
+
* The auth material for one request: an API key when configured (no login,
|
|
69
|
+
* no refresh), a bearer token otherwise. Never both — Planka ignores
|
|
70
|
+
* `x-api-key` whenever `Authorization` is present.
|
|
71
|
+
*/
|
|
72
|
+
private authOptions;
|
|
73
|
+
/**
|
|
74
|
+
* A 200 carrying the SPA's HTML instead of JSON — Planka answers every
|
|
75
|
+
* unknown GET that way, and an http:// base URL redirected to https:// ends
|
|
76
|
+
* up here too. Indistinguishable from success if only the status is read.
|
|
77
|
+
*/
|
|
78
|
+
private assertNotHtml;
|
|
56
79
|
/**
|
|
57
80
|
* Safely parses JSON from a response, returning null on failure.
|
|
58
81
|
*/
|
|
@@ -71,7 +94,7 @@ export declare class PlankaClient {
|
|
|
71
94
|
* Authenticated binary download (attachment contents).
|
|
72
95
|
* Accepts an absolute URL on the same host, or a relative path.
|
|
73
96
|
*/
|
|
74
|
-
getBinary(urlOrPath: string): Promise<{
|
|
97
|
+
getBinary(urlOrPath: string, isRetry?: boolean): Promise<{
|
|
75
98
|
bytes: Uint8Array;
|
|
76
99
|
mimeType: string | null;
|
|
77
100
|
}>;
|
|
@@ -89,8 +112,13 @@ export declare class PlankaClient {
|
|
|
89
112
|
patch<T>(path: string, body: unknown): Promise<T>;
|
|
90
113
|
/**
|
|
91
114
|
* DELETE request.
|
|
115
|
+
*
|
|
116
|
+
* Returns the response body: Planka 2.x answers a delete with `{item}` of
|
|
117
|
+
* what it removed, and that item carries the parent id (cardId, boardId…)
|
|
118
|
+
* the caller needs to re-read the parent and prove the delete landed.
|
|
119
|
+
* Discarding it made every delete a blind `success: true`.
|
|
92
120
|
*/
|
|
93
|
-
delete(path: string): Promise<
|
|
121
|
+
delete<T = unknown>(path: string): Promise<T>;
|
|
94
122
|
}
|
|
95
123
|
export declare const plankaClient: PlankaClient;
|
|
96
124
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,WAAW,CAuBb;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,YAAY,CA8Cd;AAED;;GAEG;AACH,qBAAa,YAAY;IAMrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,cAAc,CAAa;gBAGhB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,KAAa;IAGlD;;OAEG;IACH,OAAO,CAAC,SAAS;IAOjB,sCAAsC;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAEnD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;YACW,YAAY;IAgE1B;;OAEG;YACW,QAAQ;IAOtB;;;;OAIG;YACW,WAAW;IAMzB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;YACW,aAAa;IAQ3B;;;OAGG;YACW,OAAO;IAwDrB;;;OAGG;IACG,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,OAAO,UAAQ,GACd,OAAO,CAAC,CAAC,CAAC;IA2Cb;;;OAGG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,UAAQ,GACd,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAiD1D;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAItC;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAItD;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvD;;;;;;;OAOG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAGpD;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|