@lovinka/deployik-mcp 0.1.6 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -68,10 +68,10 @@ Get a token at **Account → Access tokens** in Deployik. The token is shown onc
68
68
 
69
69
  ## What it does
70
70
 
71
- - **~32 thin tools** — one per Deployik HTTP endpoint (projects, deployments, env vars, secrets, domains, auto-build, password protection, volumes, analytics, email, workspaces, tokens, GitHub).
71
+ - **~37 thin tools** — one per Deployik HTTP endpoint (projects, deployments, env vars, secrets, domains, auto-build, password protection, volumes, analytics, email, dashboard groups, tokens, GitHub).
72
72
  - **12 workflow tools** — `setup_project_from_repo`, `deploy_project`, `set_secret`, `tail_latest_logs`, `debug_failed_deployment`, `get_project_health`, `init_in_repo`, `whats_my_url`, `whats_broken`, `redeploy`, and more.
73
73
  - **Bundled knowledge** — Deployik's how-to recipes ship as MCP prompts (`deployik_recipe_*`), plus three tools: `list_recipes`, `get_recipe(topic)`, and **`find_help(question)`** which routes free-form English ("where do I set the Stripe key for the live site?") to the right recipe automatically.
74
- - **Repo binding** — first call inside a git repo with a unique-match `origin` auto-writes `.deployik.json` (committed, just project + workspace + schema URL) and gitignores the private `.deployik/` directory. Self-healing `.gitignore`.
74
+ - **Repo binding** — first call inside a git repo with a unique-match `origin` auto-writes `.deployik.json` (committed, just project + dashboard group + schema URL) and gitignores the private `.deployik/` directory. Self-healing `.gitignore`.
75
75
  - **Tiered safety** — destructive operations require `confirm: true`; production-touching operations also require `confirm_name: <project>`. Every destructive call is logged to `.deployik/audit.log`.
76
76
  - **Loose English** — `prod` / `live` / `staging` / `dev` / `both` / `everywhere` all normalize to the right scope automatically.
77
77
 
@@ -99,7 +99,7 @@ Project ↔ repo state is split into two layers — **public** (commit it) and
99
99
  │ Deployik project this folder deploys to.
100
100
  └── .deployik/ PRIVATE. Auto-added to .gitignore (and re-added on every
101
101
  MCP call if a teammate clobbers the .gitignore line).
102
- ├── cache.json Project + workspace list (1h TTL).
102
+ ├── cache.json Project + dashboard group list (1h TTL).
103
103
  ├── token Optional token fallback (mode 0600) — only used if
104
104
  DEPLOYIK_TOKEN env var is unset.
105
105
  └── audit.log Append-only ledger of destructive calls (secret values
@@ -17,7 +17,7 @@ export function hintForStatus(status, endpoint) {
17
17
  return "Token is missing, expired, or revoked. Set DEPLOYIK_TOKEN to a fresh `dpk_…` token from Account → Access tokens.";
18
18
  }
19
19
  if (status === 403) {
20
- return "Token is valid but the owner cannot access this resource. Check the project's workspace membership.";
20
+ return "Token is valid but the owner cannot access this resource. Check the project's dashboard group membership.";
21
21
  }
22
22
  if (status === 404) {
23
23
  if (endpoint.includes("/projects/")) {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,IAAI,CAAU;IACd,IAAI,CAAU;IAEvB,YAAY,IAAyF;QACnG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qGAAqG,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,2JAA2J,CAAC;QACrK,CAAC;QACD,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,MAAM,CAAS;IACf,QAAQ,CAAS;IACjB,IAAI,CAAU;IACd,IAAI,CAAU;IAEvB,YAAY,IAAyF;QACnG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,QAAgB;IAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,kHAAkH,CAAC;IAC5H,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,2GAA2G,CAAC;IACrH,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,2JAA2J,CAAC;QACrK,CAAC;QACD,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,qIAAqI,CAAC;IAC/I,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,oDAAoD,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -125,6 +125,15 @@ export class DeployikClient {
125
125
  screenshotUrl(deploymentId) {
126
126
  return `${this.baseUrl}/api/deployments/${encodeURIComponent(deploymentId)}/screenshot`;
127
127
  }
128
+ /** Build a ws://… / wss://… URL for a `/ws/...` path. */
129
+ wsUrl(path) {
130
+ const normalized = path.startsWith("/") ? path : `/${path}`;
131
+ return `${this.baseUrl.replace(/^http/, "ws")}${normalized}`;
132
+ }
133
+ /** Authorization header value for WS handshakes — PATs are gated to Bearer. */
134
+ bearerHeader() {
135
+ return `Bearer ${this.token}`;
136
+ }
128
137
  }
129
138
  function retryableMethod(method, path) {
130
139
  // GET / PUT / DELETE are HTTP-idempotent.
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,54 @@ import { homedir } from "node:os";
10
10
  import { join, resolve } from "node:path";
11
11
  import { createInterface } from "node:readline";
12
12
  import { RECIPE_FILES } from "./knowledge/recipes.generated.js";
13
+ // Two read modes, chosen at first prompt by checking whether stdin is a TTY:
14
+ //
15
+ // TTY → singleton readline; user is typing interactively.
16
+ // pipe → drain stdin once into a line buffer (piped input EOFs as soon as
17
+ // it drains, which auto-closes readline mid-wizard with ERR_USE_AFTER_CLOSE).
18
+ //
19
+ // Same async API for both — callers don't care which mode is active.
20
+ let sharedRl = null;
21
+ let pipedLines = null;
22
+ let pipeReadPromise = null;
23
+ function isPipedStdin() {
24
+ return process.stdin.isTTY !== true;
25
+ }
26
+ function ensurePipedLines() {
27
+ if (pipeReadPromise)
28
+ return pipeReadPromise;
29
+ pipeReadPromise = new Promise((resolveFn) => {
30
+ let data = "";
31
+ process.stdin.setEncoding("utf8");
32
+ process.stdin.on("data", (chunk) => { data += chunk; });
33
+ process.stdin.on("end", () => {
34
+ pipedLines = data.split(/\r?\n/);
35
+ resolveFn();
36
+ });
37
+ process.stdin.on("error", () => { pipedLines = []; resolveFn(); });
38
+ });
39
+ return pipeReadPromise;
40
+ }
41
+ async function readLine(promptText) {
42
+ if (isPipedStdin()) {
43
+ process.stdout.write(promptText);
44
+ await ensurePipedLines();
45
+ const line = pipedLines.shift() ?? "";
46
+ process.stdout.write(line + "\n");
47
+ return line;
48
+ }
49
+ if (!sharedRl)
50
+ sharedRl = createInterface({ input: process.stdin, output: process.stdout });
51
+ return new Promise((resolveFn) => {
52
+ sharedRl.question(promptText, (answer) => resolveFn(answer));
53
+ });
54
+ }
55
+ export function closeReadline() {
56
+ if (sharedRl) {
57
+ sharedRl.close();
58
+ sharedRl = null;
59
+ }
60
+ }
13
61
  export function skillTargetDir(scope, cwd, destBase) {
14
62
  if (destBase)
15
63
  return resolve(destBase, "deployik-howto");
@@ -51,24 +99,29 @@ export async function installSkillResult(opts) {
51
99
  writeFileSync(join(target, f.file), f.content, "utf8");
52
100
  return { target, files: RECIPE_FILES.map((f) => f.file), alreadyExisted };
53
101
  }
54
- export function promptYesNo(prompt) {
55
- return new Promise((resolveFn) => {
56
- const rl = createInterface({ input: process.stdin, output: process.stdout });
57
- rl.question(prompt, (answer) => {
58
- rl.close();
59
- resolveFn(/^y(es)?$/i.test(answer.trim()));
60
- });
61
- });
102
+ export async function promptYesNo(promptText) {
103
+ const answer = await readLine(promptText);
104
+ return /^y(es)?$/i.test(answer.trim());
62
105
  }
63
- export function prompt(message, defaultValue) {
64
- return new Promise((resolveFn) => {
65
- const rl = createInterface({ input: process.stdin, output: process.stdout });
66
- const suffix = defaultValue ? ` [${defaultValue}]` : "";
67
- rl.question(`${message}${suffix}: `, (answer) => {
68
- rl.close();
69
- const trimmed = answer.trim();
70
- resolveFn(trimmed || defaultValue || "");
71
- });
72
- });
106
+ export async function prompt(message, defaultValue) {
107
+ const suffix = defaultValue ? ` [${defaultValue}]` : "";
108
+ const answer = await readLine(`${message}${suffix}: `);
109
+ const trimmed = answer.trim();
110
+ return trimmed || defaultValue || "";
111
+ }
112
+ /**
113
+ * Single-letter choice prompt, e.g. promptChoice("Scope", [["g","global"],["l","local"]], "g").
114
+ * Returns the chosen letter (lowercased).
115
+ */
116
+ export async function promptChoice(message, choices, defaultLetter) {
117
+ const display = choices
118
+ .map(([l, lab]) => (l === defaultLetter ? l.toUpperCase() : l) + "=" + lab)
119
+ .join(" / ");
120
+ const answer = await readLine(`${message} [${display}]: `);
121
+ const a = answer.trim().toLowerCase();
122
+ if (!a)
123
+ return defaultLetter.toLowerCase();
124
+ const match = choices.find(([l]) => l.toLowerCase() === a[0]);
125
+ return match ? match[0].toLowerCase() : defaultLetter.toLowerCase();
73
126
  }
74
127
  //# sourceMappingURL=install-skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
package/dist/install.js CHANGED
@@ -1,80 +1,188 @@
1
- // One-shot installer: registers the @lovinka/deployik-mcp MCP server in
2
- // Claude's config AND copies the bundled Deployik skill into Claude's skills
3
- // directory. Default scope is GLOBAL (recommended) once installed, every
4
- // project + every Claude window can use the deployik tools.
1
+ // Interactive 4-step installer: URL token scope → confirm.
2
+ // Each step validates before moving on so the user gets immediate feedback
3
+ // (server reachable? token authenticates? scope chosen?) instead of a silent
4
+ // failure at the end.
5
+ //
6
+ // `--yes` skips prompts but still runs validations — bad token / unreachable
7
+ // URL still aborts, since installing a config that can't authenticate would
8
+ // be a footgun.
5
9
  import { installMcp } from "./install-mcp.js";
6
- import { installSkillResult, prompt, promptYesNo } from "./install-skill.js";
10
+ import { installSkillResult, prompt, promptYesNo, promptChoice, closeReadline } from "./install-skill.js";
11
+ import { openInBrowser } from "./lib/browser.js";
12
+ import { box, dim, fail, info, ok, section, warn, bold, cyan } from "./lib/term.js";
13
+ import { VERSION } from "./version.js";
7
14
  const DEFAULT_URL = "https://deployik.lovinka.com";
8
15
  export async function installAll(opts) {
9
16
  const cwd = opts.cwd ?? process.cwd();
10
- const scope = opts.scope;
11
- process.stdout.write(`\n=== Installing @lovinka/deployik-mcp (${scope}) ===\n\n`);
12
- // Resolve URL + token
17
+ if (!opts.yes) {
18
+ process.stdout.write("\n" + box(`@lovinka/deployik-mcp installer (${VERSION})`, [
19
+ `${dim("Wires the Deployik MCP server into Claude's config and copies")}`,
20
+ `${dim("the bundled how-to recipes into ~/.claude/skills/.")}`,
21
+ ]) + "\n");
22
+ }
23
+ // ─── Step 1: URL ──────────────────────────────────────────────
13
24
  let url = opts.url ?? process.env.DEPLOYIK_URL ?? "";
14
- let token = opts.token ?? process.env.DEPLOYIK_TOKEN ?? "";
15
25
  if (!opts.skipMcp) {
16
- if (!opts.yes) {
17
- if (!url)
18
- url = await prompt("Deployik URL", DEFAULT_URL);
19
- if (!token)
20
- token = await prompt("Personal Access Token (dpk_…)");
26
+ if (!opts.yes && !url) {
27
+ process.stdout.write(section(1, 4, "Deployik server URL"));
28
+ process.stdout.write(`\n${dim("Public default works for the lovinka.com instance. For VPN-only")}\n`);
29
+ process.stdout.write(`${dim("installs, point at the internal hostname (e.g. http://10.x.x.x:8080).")}\n\n`);
30
+ url = await prompt("Deployik URL", DEFAULT_URL);
31
+ }
32
+ if (!url)
33
+ url = DEFAULT_URL;
34
+ const reach = await probeHealth(url);
35
+ if (reach.ok) {
36
+ process.stdout.write(" " + ok(`reachable${reach.version ? ` (deployik ${reach.version})` : ""}\n`));
21
37
  }
22
38
  else {
23
- if (!url)
24
- url = DEFAULT_URL;
39
+ process.stdout.write(" " + warn(`unreachable: ${reach.error}\n`));
40
+ if (!opts.yes) {
41
+ const cont = await promptYesNo(" Continue anyway? [y/N] ");
42
+ if (!cont)
43
+ return abort("Install aborted at URL step.");
44
+ }
45
+ }
46
+ }
47
+ // ─── Step 2: Token ────────────────────────────────────────────
48
+ let token = opts.token ?? process.env.DEPLOYIK_TOKEN ?? "";
49
+ let user;
50
+ if (!opts.skipMcp) {
51
+ process.stdout.write(section(2, 4, "Personal Access Token"));
52
+ if (!token && !opts.yes) {
53
+ const tokensUrl = `${url.replace(/\/+$/, "")}/account/tokens`;
54
+ process.stdout.write(`\n${dim("Create a token at:")} ${cyan(tokensUrl)}\n`);
55
+ const open = await promptYesNo(`Open the page in your browser? [Y/n] `);
56
+ const yes = open === true || open;
57
+ if (yes) {
58
+ const opened = openInBrowser(tokensUrl);
59
+ process.stdout.write(` ${opened ? ok("opening browser…") : warn("couldn't auto-open — visit the URL manually")}\n\n`);
60
+ }
61
+ token = await prompt("Paste the token (starts with dpk_)");
25
62
  }
26
63
  if (!token) {
27
- process.stderr.write(`\nERROR: DEPLOYIK_TOKEN missing.\nPass --token=<dpk_...> or set DEPLOYIK_TOKEN env var.\n` +
28
- `Get a token at: Account Access tokens in your Deployik dashboard.\n`);
64
+ process.stderr.write("\n" + fail("DEPLOYIK_TOKEN missing.") +
65
+ `\n Pass ${bold("--token=<dpk_...>")} or set ${bold("DEPLOYIK_TOKEN")} env var.\n` +
66
+ ` Get a token at ${cyan(`${url.replace(/\/+$/, "")}/account/tokens`)}\n`);
29
67
  return 2;
30
68
  }
31
- if (!url)
32
- url = DEFAULT_URL;
69
+ if (!token.startsWith("dpk_")) {
70
+ process.stdout.write(" " + warn(`token doesn't start with 'dpk_' — Deployik PATs always do. Continuing anyway.\n`));
71
+ }
72
+ const auth = await probeWhoami(url, token);
73
+ if (auth.ok) {
74
+ user = auth.user;
75
+ process.stdout.write(" " + ok(`authenticated as ${bold(auth.user.username ?? "?")} (${auth.user.role ?? "?"})\n`));
76
+ }
77
+ else {
78
+ process.stdout.write(" " + fail(`token rejected: ${auth.error}\n`));
79
+ // 401 (token actually rejected) is a hard abort even with --yes — installing
80
+ // a known-broken token gives the user a silently-failing MCP. Network errors
81
+ // (timeout / DNS) only abort interactively, since VPN-only installs may
82
+ // legitimately fail to reach the URL from the install machine.
83
+ const isAuthFailure = (auth.error || "").includes("401");
84
+ if (isAuthFailure)
85
+ return abort("Install aborted — token did not authenticate.");
86
+ if (!opts.yes)
87
+ return abort("Install aborted — fix the token and re-run.");
88
+ process.stdout.write(" " + warn("continuing anyway (--yes); make sure DEPLOYIK_TOKEN is valid before using.\n"));
89
+ }
33
90
  }
34
- // Confirmation
91
+ // ─── Step 3: Scope ────────────────────────────────────────────
92
+ let scope = opts.scope;
35
93
  if (!opts.yes) {
36
- process.stdout.write(`\nAbout to perform:\n`);
37
- if (!opts.skipMcp)
38
- process.stdout.write(` Register MCP server 'deployik' (${scope}) pointing at ${url}\n`);
39
- if (!opts.skipSkill)
40
- process.stdout.write(` • Copy Deployik skill files (${scope})\n`);
41
- process.stdout.write(`\n`);
42
- const ok = await promptYesNo("Proceed? [y/N] ");
43
- if (!ok) {
44
- process.stdout.write("Aborted.\n");
45
- return 0;
94
+ process.stdout.write(section(3, 4, "Install scope"));
95
+ process.stdout.write(`\n ${bold("g")} = global ${dim("(recommended) — every project + every Claude window")}`);
96
+ process.stdout.write(`\n ${bold("l")} = local ${dim("— only when Claude is opened in this folder (writes ./.mcp.json)")}\n\n`);
97
+ const def = scope === "local" ? "l" : "g";
98
+ const picked = await promptChoice("Scope", [["g", "global"], ["l", "local"]], def);
99
+ scope = picked === "l" ? "local" : "global";
100
+ process.stdout.write(" " + ok(`scope: ${bold(scope)}\n`));
101
+ }
102
+ // ─── Step 4: Confirm ──────────────────────────────────────────
103
+ if (!opts.yes) {
104
+ process.stdout.write(section(4, 4, "Confirm"));
105
+ process.stdout.write(`\n ${info("About to:")}`);
106
+ if (!opts.skipMcp) {
107
+ process.stdout.write(`\n • register MCP server '${bold("deployik")}' (${scope}) → ${url}`);
108
+ if (user?.username)
109
+ process.stdout.write(`\n authenticated as ${user.username}`);
110
+ }
111
+ if (!opts.skipSkill) {
112
+ process.stdout.write(`\n • copy Deployik skill files (${scope})`);
46
113
  }
114
+ if (scope === "global")
115
+ process.stdout.write(`\n ${dim("Backups of any existing config files will be made automatically.")}`);
116
+ process.stdout.write(`\n\n`);
117
+ // Treat empty input (just Enter) as Y since the prompt explicitly says [Y/n].
118
+ const answer = (await prompt("Proceed?", "y")).toLowerCase();
119
+ if (answer === "n" || answer === "no")
120
+ return abort("Aborted.");
47
121
  }
48
- // 1. MCP registration
122
+ // ─── Execute ─────────────────────────────────────────────────
123
+ process.stdout.write(`\n${dim("─".repeat(60))}\n`);
49
124
  if (!opts.skipMcp) {
50
- process.stdout.write(`\n--- MCP server registration ---\n`);
125
+ process.stdout.write(`${bold("Writing MCP config…")}\n`);
51
126
  const res = installMcp({ scope, url, token, cwd });
52
- for (const w of res.written) {
53
- process.stdout.write(` ${w.created ? "created" : "updated"} ${w.path}${w.backupPath ? ` (backup → ${w.backupPath})` : ""}\n`);
54
- }
55
- for (const s of res.skipped) {
56
- process.stdout.write(` · skipped ${s.path} (${s.reason})\n`);
57
- }
58
- if (res.written.length === 0) {
59
- process.stderr.write(` ! no MCP config targets were writable — nothing changed.\n`);
60
- }
127
+ for (const w of res.written)
128
+ process.stdout.write(" " + ok(`${w.created ? "created" : "updated"} ${w.path}${w.backupPath ? ` ${dim("backup → " + w.backupPath)}` : ""}\n`));
129
+ for (const s of res.skipped)
130
+ process.stdout.write(" " + dim(`skipped ${s.path} (${s.reason})\n`));
131
+ if (res.written.length === 0)
132
+ process.stderr.write(" " + fail("no MCP config targets were writable\n"));
61
133
  }
62
- // 2. Skill files
63
134
  if (!opts.skipSkill) {
64
- process.stdout.write(`\n--- Skill files ---\n`);
135
+ process.stdout.write(`${bold("Writing skill files…")}\n`);
65
136
  const r = await installSkillResult({ scope, yes: true, cwd });
66
- if (r) {
67
- process.stdout.write(` wrote ${r.files.length} files to ${r.target}${r.alreadyExisted ? " (overwrote existing)" : ""}\n`);
68
- }
69
- else {
70
- process.stdout.write(` · skill install was skipped\n`);
71
- }
72
- }
73
- process.stdout.write(`\nDone. Restart Claude Code / Claude Desktop to pick up the new MCP server.\n`);
74
- if (scope === "local") {
75
- process.stdout.write(`\nNote: with --local scope, the .mcp.json and .claude/skills/deployik-howto/ are written into\n` +
76
- `the current directory. The MCP server only fires when Claude is opened in this folder.\n`);
137
+ if (r)
138
+ process.stdout.write(" " + ok(`wrote ${r.files.length} files to ${r.target}${r.alreadyExisted ? dim(" (overwrote existing)") : ""}\n`));
77
139
  }
140
+ process.stdout.write(`\n${ok("Done.")} Restart Claude Code or Claude Desktop to load the MCP server.\n`);
141
+ if (scope === "local")
142
+ process.stdout.write(`\n${dim("Note: with --local, the MCP only fires when Claude is opened in this folder.")}\n`);
143
+ closeReadline();
78
144
  return 0;
79
145
  }
146
+ function abort(msg) {
147
+ process.stdout.write(`\n${fail(msg)}\n`);
148
+ closeReadline();
149
+ return 1;
150
+ }
151
+ async function probeHealth(url) {
152
+ const target = url.replace(/\/+$/, "") + "/api/health";
153
+ try {
154
+ const ctrl = new AbortController();
155
+ const t = setTimeout(() => ctrl.abort(), 5000);
156
+ const res = await fetch(target, { signal: ctrl.signal });
157
+ clearTimeout(t);
158
+ if (!res.ok)
159
+ return { ok: false, error: `HTTP ${res.status}` };
160
+ const body = (await res.json().catch(() => null));
161
+ return { ok: true, version: body?.version?.git_sha?.slice(0, 7) };
162
+ }
163
+ catch (err) {
164
+ return { ok: false, error: err.name === "AbortError" ? "timeout (5s)" : err.message };
165
+ }
166
+ }
167
+ async function probeWhoami(url, token) {
168
+ const target = url.replace(/\/+$/, "") + "/api/auth/me";
169
+ try {
170
+ const ctrl = new AbortController();
171
+ const t = setTimeout(() => ctrl.abort(), 8000);
172
+ const res = await fetch(target, {
173
+ headers: { Authorization: `Bearer ${token}`, Accept: "application/json" },
174
+ signal: ctrl.signal,
175
+ });
176
+ clearTimeout(t);
177
+ if (res.status === 401)
178
+ return { ok: false, user: {}, error: "401 unauthorized — token revoked, expired, or wrong" };
179
+ if (!res.ok)
180
+ return { ok: false, user: {}, error: `HTTP ${res.status}` };
181
+ const body = (await res.json().catch(() => null));
182
+ return { ok: true, user: { username: body?.username, role: body?.role } };
183
+ }
184
+ catch (err) {
185
+ return { ok: false, user: {}, error: err.name === "AbortError" ? "timeout (8s)" : err.message };
186
+ }
187
+ }
80
188
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}