@neurodock/cli 0.2.0 → 0.6.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 (86) hide show
  1. package/CHANGELOG.md +198 -1
  2. package/README.md +155 -27
  3. package/dist/assets/hooks/neurodock_daemon.py +506 -0
  4. package/dist/assets/hooks/proactive_guardrail.py +520 -0
  5. package/dist/clients/claude-code.d.ts.map +1 -1
  6. package/dist/clients/claude-code.js +3 -1
  7. package/dist/clients/claude-code.js.map +1 -1
  8. package/dist/clients/claude-desktop.d.ts.map +1 -1
  9. package/dist/clients/claude-desktop.js +3 -1
  10. package/dist/clients/claude-desktop.js.map +1 -1
  11. package/dist/clients/cursor.d.ts.map +1 -1
  12. package/dist/clients/cursor.js +3 -1
  13. package/dist/clients/cursor.js.map +1 -1
  14. package/dist/clients/index.d.ts.map +1 -1
  15. package/dist/clients/index.js.map +1 -1
  16. package/dist/commands/doctor.d.ts.map +1 -1
  17. package/dist/commands/doctor.js +59 -4
  18. package/dist/commands/doctor.js.map +1 -1
  19. package/dist/commands/examples.d.ts +28 -0
  20. package/dist/commands/examples.d.ts.map +1 -0
  21. package/dist/commands/examples.js +168 -0
  22. package/dist/commands/examples.js.map +1 -0
  23. package/dist/commands/host.d.ts.map +1 -1
  24. package/dist/commands/host.js +1 -1
  25. package/dist/commands/host.js.map +1 -1
  26. package/dist/commands/init.d.ts.map +1 -1
  27. package/dist/commands/init.js +14 -4
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/install-all.d.ts +78 -0
  30. package/dist/commands/install-all.d.ts.map +1 -0
  31. package/dist/commands/install-all.js +283 -0
  32. package/dist/commands/install-all.js.map +1 -0
  33. package/dist/commands/install-hooks.d.ts +20 -0
  34. package/dist/commands/install-hooks.d.ts.map +1 -0
  35. package/dist/commands/install-hooks.js +356 -0
  36. package/dist/commands/install-hooks.js.map +1 -0
  37. package/dist/commands/plugin.d.ts +122 -0
  38. package/dist/commands/plugin.d.ts.map +1 -0
  39. package/dist/commands/plugin.js +545 -0
  40. package/dist/commands/plugin.js.map +1 -0
  41. package/dist/commands/profile.d.ts.map +1 -1
  42. package/dist/commands/profile.js +11 -2
  43. package/dist/commands/profile.js.map +1 -1
  44. package/dist/commands/sync.d.ts +24 -0
  45. package/dist/commands/sync.d.ts.map +1 -0
  46. package/dist/commands/sync.js +179 -0
  47. package/dist/commands/sync.js.map +1 -0
  48. package/dist/commands/uninstall.d.ts.map +1 -1
  49. package/dist/commands/uninstall.js +11 -3
  50. package/dist/commands/uninstall.js.map +1 -1
  51. package/dist/commands/update.d.ts +13 -22
  52. package/dist/commands/update.d.ts.map +1 -1
  53. package/dist/commands/update.js +11 -172
  54. package/dist/commands/update.js.map +1 -1
  55. package/dist/commands/validate.d.ts.map +1 -1
  56. package/dist/commands/validate.js +12 -3
  57. package/dist/commands/validate.js.map +1 -1
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +196 -8
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/json-patch.d.ts.map +1 -1
  63. package/dist/lib/json-patch.js +1 -1
  64. package/dist/lib/json-patch.js.map +1 -1
  65. package/dist/lib/mcp-entries.d.ts.map +1 -1
  66. package/dist/lib/mcp-entries.js +25 -3
  67. package/dist/lib/mcp-entries.js.map +1 -1
  68. package/dist/lib/paths.d.ts +10 -0
  69. package/dist/lib/paths.d.ts.map +1 -1
  70. package/dist/lib/paths.js +19 -2
  71. package/dist/lib/paths.js.map +1 -1
  72. package/dist/lib/plugin-schema.d.ts +12 -0
  73. package/dist/lib/plugin-schema.d.ts.map +1 -0
  74. package/dist/lib/plugin-schema.js +71 -0
  75. package/dist/lib/plugin-schema.js.map +1 -0
  76. package/dist/profile/defaults.d.ts.map +1 -1
  77. package/dist/profile/defaults.js +3 -1
  78. package/dist/profile/defaults.js.map +1 -1
  79. package/dist/profile/loader.d.ts.map +1 -1
  80. package/dist/profile/loader.js +3 -1
  81. package/dist/profile/loader.js.map +1 -1
  82. package/dist/profile/validator.d.ts.map +1 -1
  83. package/dist/profile/validator.js +5 -1
  84. package/dist/profile/validator.js.map +1 -1
  85. package/package.json +31 -14
  86. package/LICENSE +0 -11
@@ -0,0 +1,283 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { readEnv } from "../lib/env.js";
3
+ import { runInit } from "./init.js";
4
+ import { runHostInstall as defaultRunHostInstall, } from "./host.js";
5
+ const PACKAGES = [
6
+ {
7
+ pkg: "neurodock-mcp-chronometric",
8
+ entrypoint: "neurodock-mcp-chronometric",
9
+ },
10
+ {
11
+ pkg: "neurodock-mcp-cognitive-graph",
12
+ entrypoint: "neurodock-mcp-cognitive-graph",
13
+ },
14
+ {
15
+ pkg: "neurodock-mcp-task-fractionator",
16
+ entrypoint: "neurodock-mcp-task-fractionator",
17
+ },
18
+ { pkg: "neurodock-mcp-translation", entrypoint: "neurodock-mcp-translation" },
19
+ { pkg: "neurodock-mcp-guardrail", entrypoint: "neurodock-mcp-guardrail" },
20
+ { pkg: "neurodock-evals", entrypoint: "neurodock-evals" },
21
+ ];
22
+ const SUGGESTED_PROMPTS = [
23
+ "What time is it and what's my energy zone?",
24
+ "Remember: my dev box is Windows 11, Python 3.11, Node 22.",
25
+ "Decompose this goal into atomic tasks with a PT3H budget: 'Get the changelog ready for v1.0.'",
26
+ ];
27
+ export async function runInstallAll(options, deps = {}) {
28
+ const env = readEnv(deps.envOverrides ?? {});
29
+ const spawn = deps.spawn ?? defaultSpawn;
30
+ const init = deps.runInit ?? runInit;
31
+ const hostInstall = deps.runHostInstall ?? defaultRunHostInstall;
32
+ const messages = [];
33
+ // Phase 1: pick installer.
34
+ const installer = resolveInstaller(options.installer, env, spawn);
35
+ if (options.skipInstall) {
36
+ messages.push("Skipping Python package install (--skip-install).");
37
+ }
38
+ else if (options.dryRun) {
39
+ messages.push("Dry run. No packages installed and no client configs touched.");
40
+ messages.push(`Would install ${PACKAGES.length} packages using ${installer ?? "<no installer found>"}:`);
41
+ for (const p of PACKAGES) {
42
+ messages.push(` + ${p.pkg}`);
43
+ }
44
+ messages.push("");
45
+ messages.push("Would then run 'neurodock init' equivalent:");
46
+ messages.push(` --client ${options.client} --profile ${options.profile}`);
47
+ if (options.noNativeHost) {
48
+ messages.push("Would skip native-messaging host install (--no-native-host).");
49
+ }
50
+ else {
51
+ messages.push("Would register the optional native-messaging host (browser extension <-> profile.yaml).");
52
+ }
53
+ return {
54
+ installer: "dry-run",
55
+ packages: [],
56
+ initResult: null,
57
+ nativeHost: { status: "skipped" },
58
+ messages,
59
+ exitCode: 0,
60
+ };
61
+ }
62
+ else if (installer === null) {
63
+ messages.push("Could not find an installer. Install 'uv' (https://docs.astral.sh/uv/) or ensure 'python3' / 'pip' is on PATH.");
64
+ return {
65
+ installer: "skipped",
66
+ packages: [],
67
+ initResult: null,
68
+ nativeHost: { status: "skipped" },
69
+ messages,
70
+ exitCode: 1,
71
+ };
72
+ }
73
+ // Phase 2: install + verify each package (unless skipped).
74
+ const outcomes = [];
75
+ if (!options.skipInstall && installer !== null) {
76
+ messages.push(`Installing ${PACKAGES.length} Python MCP servers via '${installer}'...`);
77
+ for (const spec of PACKAGES) {
78
+ const outcome = installAndVerify(spec, installer, spawn);
79
+ outcomes.push(outcome);
80
+ messages.push(formatPackageLine(outcome));
81
+ }
82
+ }
83
+ else if (options.skipInstall) {
84
+ // Still verify path so the summary tells the truth.
85
+ for (const spec of PACKAGES) {
86
+ const onPath = checkOnPath(spec.entrypoint, spawn);
87
+ outcomes.push({
88
+ pkg: spec.pkg,
89
+ entrypoint: spec.entrypoint,
90
+ installed: true,
91
+ onPath: onPath.ok,
92
+ ...(onPath.error !== undefined ? { pathError: onPath.error } : {}),
93
+ });
94
+ messages.push(formatPackageLine(outcomes[outcomes.length - 1]));
95
+ }
96
+ }
97
+ const allOnPath = outcomes.every((o) => o.onPath);
98
+ // Phase 3: run init.
99
+ messages.push("");
100
+ messages.push("Wiring MCP clients...");
101
+ let initResult = null;
102
+ try {
103
+ initResult = await init({
104
+ client: options.client,
105
+ profile: options.profile,
106
+ dryRun: false,
107
+ yes: options.yes,
108
+ }, deps.envOverrides ? { envOverrides: deps.envOverrides } : {});
109
+ for (const m of initResult.messages)
110
+ messages.push(m);
111
+ }
112
+ catch (err) {
113
+ const detail = err instanceof Error ? err.message : String(err);
114
+ messages.push(`init failed: ${detail}`);
115
+ return {
116
+ installer: options.skipInstall ? "skipped" : installer ?? "skipped",
117
+ packages: outcomes,
118
+ initResult: null,
119
+ nativeHost: { status: "skipped" },
120
+ messages,
121
+ exitCode: 2,
122
+ };
123
+ }
124
+ // Phase 3.5: install the native-messaging host (optional, opt-out).
125
+ // Failure here is non-fatal — the host only matters if the user also
126
+ // installs the browser extension, and surfacing a warning is friendlier
127
+ // than failing the whole "first-time install" command.
128
+ const nativeHost = installNativeHost(options, hostInstall, messages);
129
+ // Phase 4: summary + suggested prompts.
130
+ const installedCount = outcomes.filter((o) => o.installed).length;
131
+ const onPathCount = outcomes.filter((o) => o.onPath).length;
132
+ const totalCount = outcomes.length;
133
+ messages.push("");
134
+ if (options.skipInstall) {
135
+ messages.push(`Summary: skipped install. ${onPathCount}/${totalCount} on PATH. Wired clients.`);
136
+ }
137
+ else {
138
+ messages.push(`Summary: ${installedCount}/${totalCount} installed, ${onPathCount}/${totalCount} on PATH. Wired clients.`);
139
+ }
140
+ messages.push("");
141
+ messages.push("What this just did:");
142
+ messages.push(" - Installed 6 MCP servers via " +
143
+ (options.skipInstall
144
+ ? "pip (skipped)"
145
+ : installer === "uv"
146
+ ? "uv"
147
+ : "pip"));
148
+ messages.push(" - Wired your MCP-aware clients (Claude Desktop / Claude Code / Cursor)");
149
+ messages.push(` - ${describeNativeHostBullet(nativeHost)}`);
150
+ messages.push("");
151
+ messages.push("Try one of these in your MCP client:");
152
+ for (const p of SUGGESTED_PROMPTS) {
153
+ messages.push(` - ${p}`);
154
+ }
155
+ messages.push("");
156
+ messages.push("See 'neurodock examples' for the full prompt cheat-sheet.");
157
+ const exitCode = allOnPath ? 0 : 1;
158
+ return {
159
+ installer: options.skipInstall ? "skipped" : installer ?? "skipped",
160
+ packages: outcomes,
161
+ initResult,
162
+ nativeHost,
163
+ messages,
164
+ exitCode,
165
+ };
166
+ }
167
+ function installNativeHost(options, hostInstall, messages) {
168
+ messages.push("");
169
+ if (options.noNativeHost) {
170
+ messages.push("Skipping native-messaging host install (--no-native-host).");
171
+ return { status: "skipped" };
172
+ }
173
+ messages.push("Installing native-messaging host (browser extension <-> profile.yaml)...");
174
+ try {
175
+ const result = hostInstall({ extensionIds: [] });
176
+ for (const o of result.outcomes) {
177
+ const detail = o.detail ? ` — ${o.detail}` : "";
178
+ messages.push(` [${o.action.padEnd(6)}] ${o.browser.padEnd(10)} ${o.manifestPath}${detail}`);
179
+ }
180
+ return { status: "installed", result };
181
+ }
182
+ catch (err) {
183
+ const detail = err instanceof Error ? err.message : String(err);
184
+ messages.push(` [warn] native-messaging host install failed: ${truncate(detail)}`);
185
+ messages.push(" This is optional — only the browser extension uses it. Re-run 'neurodock host install' later if you want it.");
186
+ return { status: "failed", error: detail };
187
+ }
188
+ }
189
+ function describeNativeHostBullet(outcome) {
190
+ if (outcome.status === "installed") {
191
+ return "Installed the native-messaging host (lets the optional browser extension read your profile)";
192
+ }
193
+ if (outcome.status === "failed") {
194
+ return "Native-messaging host install failed (optional — re-run 'neurodock host install' later)";
195
+ }
196
+ return "Skipped the native-messaging host (optional — run 'neurodock host install' if you want the browser extension to read your profile)";
197
+ }
198
+ function resolveInstaller(choice, env, spawn) {
199
+ if (choice === "uv")
200
+ return uvAvailable(spawn) ? "uv" : null;
201
+ if (choice === "pip")
202
+ return pipAvailable(env, spawn) ? "pip" : null;
203
+ // auto
204
+ if (uvAvailable(spawn))
205
+ return "uv";
206
+ if (pipAvailable(env, spawn))
207
+ return "pip";
208
+ return null;
209
+ }
210
+ function uvAvailable(spawn) {
211
+ const r = spawn("uv", ["--version"], {});
212
+ return r.status === 0;
213
+ }
214
+ function pipAvailable(_env, spawn) {
215
+ const r = spawn(pythonExe(), ["-m", "pip", "--version"], {});
216
+ return r.status === 0;
217
+ }
218
+ function pythonExe() {
219
+ // Prefer python3 on POSIX, but python on Windows where there is no python3.exe by default.
220
+ return process.platform === "win32" ? "python" : "python3";
221
+ }
222
+ function installAndVerify(spec, installer, spawn) {
223
+ let installed = false;
224
+ let installError;
225
+ if (installer === "uv") {
226
+ const r = spawn("uv", ["tool", "install", spec.pkg], {});
227
+ installed = r.status === 0;
228
+ if (!installed)
229
+ installError = (r.stderr || r.stdout || "uv tool install failed").trim();
230
+ }
231
+ else {
232
+ const r = spawn(pythonExe(), ["-m", "pip", "install", "--upgrade", spec.pkg], {});
233
+ installed = r.status === 0;
234
+ if (!installed)
235
+ installError = (r.stderr || r.stdout || "pip install failed").trim();
236
+ }
237
+ const pathCheck = checkOnPath(spec.entrypoint, spawn);
238
+ return {
239
+ pkg: spec.pkg,
240
+ entrypoint: spec.entrypoint,
241
+ installed,
242
+ onPath: pathCheck.ok,
243
+ ...(installError !== undefined ? { installError } : {}),
244
+ ...(pathCheck.error !== undefined ? { pathError: pathCheck.error } : {}),
245
+ };
246
+ }
247
+ function checkOnPath(entrypoint, spawn) {
248
+ const r = spawn(entrypoint, ["--help"], {});
249
+ if (r.status === 0)
250
+ return { ok: true };
251
+ const err = (r.stderr ||
252
+ r.stdout ||
253
+ r.error?.message ||
254
+ "command not found").trim();
255
+ return { ok: false, error: err };
256
+ }
257
+ function formatPackageLine(o) {
258
+ if (o.onPath) {
259
+ return ` [ok] ${o.pkg}`;
260
+ }
261
+ if (!o.installed) {
262
+ return ` [fail] ${o.pkg} — install failed: ${truncate(o.installError ?? "unknown")}`;
263
+ }
264
+ return ` [warn] ${o.pkg} — installed but '${o.entrypoint}' not on PATH`;
265
+ }
266
+ function truncate(s, max = 120) {
267
+ const first = s.split("\n")[0] ?? "";
268
+ return first.length > max ? `${first.slice(0, max - 1)}…` : first;
269
+ }
270
+ function defaultSpawn(command, args, options) {
271
+ const r = spawnSync(command, args, {
272
+ env: options.env ?? process.env,
273
+ stdio: ["ignore", "pipe", "pipe"],
274
+ timeout: 120_000,
275
+ });
276
+ return {
277
+ status: r.status,
278
+ stdout: r.stdout ? r.stdout.toString("utf8") : "",
279
+ stderr: r.stderr ? r.stderr.toString("utf8") : "",
280
+ ...(r.error ? { error: r.error } : {}),
281
+ };
282
+ }
283
+ //# sourceMappingURL=install-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-all.js","sourceRoot":"","sources":["../../src/commands/install-all.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface InstallHooksOptions {
2
+ readonly dryRun: boolean;
3
+ readonly selfTest: boolean;
4
+ readonly uninstall: boolean;
5
+ /**
6
+ * 0.0.23: also wire the long-running Phase 3 daemon at user-login
7
+ * autostart (HKCU Run on Windows, LaunchAgent on macOS, systemd
8
+ * --user unit on Linux). Off by default — the daemon is optional;
9
+ * the Phase 1 Claude Code hook + Phase 2 extension watchdog cover
10
+ * the common cases. The daemon adds host-agnostic coverage (catches
11
+ * you working in the terminal at 02:00 too).
12
+ */
13
+ readonly installDaemon?: boolean;
14
+ }
15
+ export interface InstallHooksResult {
16
+ readonly messages: string[];
17
+ readonly exitCode: number;
18
+ }
19
+ export declare function runInstallHooks(options: InstallHooksOptions): Promise<InstallHooksResult>;
20
+ //# sourceMappingURL=install-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-hooks.d.ts","sourceRoot":"","sources":["../../src/commands/install-hooks.ts"],"names":[],"mappings":"AAwCA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAoBD,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAwH7B"}