@neurodock/cli 0.1.2 → 0.4.3
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/CHANGELOG.md +125 -2
- package/LICENSE +657 -7
- package/README.md +148 -25
- package/dist/clients/claude-code.d.ts.map +1 -1
- package/dist/clients/claude-code.js +3 -1
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/claude-desktop.d.ts.map +1 -1
- package/dist/clients/claude-desktop.js +3 -1
- package/dist/clients/claude-desktop.js.map +1 -1
- package/dist/clients/cursor.d.ts.map +1 -1
- package/dist/clients/cursor.js +3 -1
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +59 -4
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/examples.d.ts +28 -0
- package/dist/commands/examples.d.ts.map +1 -0
- package/dist/commands/examples.js +168 -0
- package/dist/commands/examples.js.map +1 -0
- package/dist/commands/host.d.ts +11 -0
- package/dist/commands/host.d.ts.map +1 -0
- package/dist/commands/host.js +63 -0
- package/dist/commands/host.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-all.d.ts +78 -0
- package/dist/commands/install-all.d.ts.map +1 -0
- package/dist/commands/install-all.js +283 -0
- package/dist/commands/install-all.js.map +1 -0
- package/dist/commands/plugin.d.ts +122 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +545 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +11 -2
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/uninstall.d.ts +36 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +188 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +24 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +179 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +24 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +163 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +236 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/json-patch.d.ts.map +1 -1
- package/dist/lib/json-patch.js +1 -1
- package/dist/lib/json-patch.js.map +1 -1
- package/dist/lib/mcp-entries.d.ts.map +1 -1
- package/dist/lib/mcp-entries.js +25 -3
- package/dist/lib/mcp-entries.js.map +1 -1
- package/dist/lib/paths.d.ts +10 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +19 -2
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/plugin-schema.d.ts +12 -0
- package/dist/lib/plugin-schema.d.ts.map +1 -0
- package/dist/lib/plugin-schema.js +71 -0
- package/dist/lib/plugin-schema.js.map +1 -0
- package/dist/profile/defaults.d.ts.map +1 -1
- package/dist/profile/defaults.js +3 -1
- package/dist/profile/defaults.js.map +1 -1
- package/dist/profile/loader.d.ts.map +1 -1
- package/dist/profile/loader.js +3 -1
- package/dist/profile/loader.js.map +1 -1
- package/dist/profile/validator.d.ts.map +1 -1
- package/dist/profile/validator.js +5 -1
- package/dist/profile/validator.js.map +1 -1
- package/package.json +24 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/commands/examples.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { RegistrationOutcome } from "@neurodock/native-host/dist/registration/index.js";
|
|
2
|
+
export interface HostInstallOptions {
|
|
3
|
+
readonly extensionIds: ReadonlyArray<string>;
|
|
4
|
+
}
|
|
5
|
+
export interface HostCommandResult {
|
|
6
|
+
readonly platform: string;
|
|
7
|
+
readonly outcomes: ReadonlyArray<RegistrationOutcome>;
|
|
8
|
+
}
|
|
9
|
+
export declare function runHostInstall(opts: HostInstallOptions): HostCommandResult;
|
|
10
|
+
export declare function runHostUninstall(): HostCommandResult;
|
|
11
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/commands/host.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAO7F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CACvD;AAoDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,CAO1E;AAED,wBAAgB,gBAAgB,IAAI,iBAAiB,CAIpD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neurodock host` subcommands.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper that delegates to `@neurodock/native-host`'s registration
|
|
5
|
+
* module. We do not re-implement the per-OS dispatch here — the host
|
|
6
|
+
* package owns it and exposes register / unregister functions.
|
|
7
|
+
*
|
|
8
|
+
* The host package's bin (`neurodock-native-host run`) is the script Chrome
|
|
9
|
+
* actually launches; this CLI subcommand only handles registering /
|
|
10
|
+
* deregistering manifests and registry pointers.
|
|
11
|
+
*/
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
14
|
+
import { join, resolve, dirname } from "node:path";
|
|
15
|
+
import { register, unregister, detectPlatform, } from "@neurodock/native-host/dist/registration/index.js";
|
|
16
|
+
const DEFAULT_EXTENSION_IDS = [
|
|
17
|
+
// Placeholder until the Chrome Web Store ID is allocated.
|
|
18
|
+
"__NEURODOCK_EXTENSION_ID__",
|
|
19
|
+
];
|
|
20
|
+
function resolveHostBinPath() {
|
|
21
|
+
// The bin lives at `<native-host package>/dist/cli.js`. We resolve it
|
|
22
|
+
// relative to this module so the path works both from a checkout
|
|
23
|
+
// (where the file is under packages/native-host/dist) and from a
|
|
24
|
+
// published install (where it is under node_modules/@neurodock/native-host/dist).
|
|
25
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
26
|
+
const candidates = [
|
|
27
|
+
// dist/commands/host.js -> ../../node_modules/@neurodock/native-host/dist/cli.js
|
|
28
|
+
resolve(here, "..", "..", "node_modules", "@neurodock", "native-host", "dist", "cli.js"),
|
|
29
|
+
// monorepo: dist/commands/host.js -> ../../../native-host/dist/cli.js
|
|
30
|
+
resolve(here, "..", "..", "..", "native-host", "dist", "cli.js"),
|
|
31
|
+
// monorepo sibling: dist/commands/host.js (cli) -> ../../../packages/native-host/dist/cli.js
|
|
32
|
+
resolve(here, "..", "..", "..", "..", "packages", "native-host", "dist", "cli.js"),
|
|
33
|
+
// From cwd
|
|
34
|
+
join(process.cwd(), "packages", "native-host", "dist", "cli.js"),
|
|
35
|
+
];
|
|
36
|
+
for (const c of candidates) {
|
|
37
|
+
if (existsSync(c)) {
|
|
38
|
+
try {
|
|
39
|
+
return realpathSync(c);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return c;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Fall back to "neurodock-native-host" on PATH; reg/manifest will still
|
|
47
|
+
// be written but the actual host path may be unresolvable. Surface that
|
|
48
|
+
// to the caller via the outcome rather than crashing.
|
|
49
|
+
return "neurodock-native-host";
|
|
50
|
+
}
|
|
51
|
+
export function runHostInstall(opts) {
|
|
52
|
+
const ids = opts.extensionIds.length > 0 ? opts.extensionIds : DEFAULT_EXTENSION_IDS;
|
|
53
|
+
const platform = detectPlatform();
|
|
54
|
+
const hostPath = resolveHostBinPath();
|
|
55
|
+
const outcomes = register({ hostPath, allowedExtensionIds: ids });
|
|
56
|
+
return { platform, outcomes };
|
|
57
|
+
}
|
|
58
|
+
export function runHostUninstall() {
|
|
59
|
+
const platform = detectPlatform();
|
|
60
|
+
const outcomes = unregister();
|
|
61
|
+
return { platform, outcomes };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/commands/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,cAAc,GACf,MAAM,mDAAmD,CAAC;AAG3D,MAAM,qBAAqB,GAA0B;IACnD,0DAA0D;IAC1D,4BAA4B;CAC7B,CAAC;AAWF,SAAS,kBAAkB;IACzB,sEAAsE;IACtE,iEAAiE;IACjE,iEAAiE;IACjE,kFAAkF;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG;QACjB,iFAAiF;QACjF,OAAO,CACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,MAAM,EACN,QAAQ,CACT;QACD,sEAAsE;QACtE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC;QAChE,6FAA6F;QAC7F,OAAO,CACL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,aAAa,EACb,MAAM,EACN,QAAQ,CACT;QACD,WAAW;QACX,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC;KACjE,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,wEAAwE;IACxE,sDAAsD;IACtD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAwB;IACrD,MAAM,GAAG,GACP,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC3E,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,QAAQ,EACR,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,QAAQ,EACR,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,WAAW,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAgHxB"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,7 +2,7 @@ import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
|
2
2
|
import { dirname, join, resolve } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { readEnv } from "../lib/env.js";
|
|
5
|
-
import { profilePath, detectClients } from "../lib/paths.js";
|
|
5
|
+
import { profilePath, detectClients, } from "../lib/paths.js";
|
|
6
6
|
import { adapterFor } from "../clients/index.js";
|
|
7
7
|
import { mergeMcpServers, parseJsonSafely } from "../lib/json-patch.js";
|
|
8
8
|
import { writeProfileFromTemplate } from "../profile/loader.js";
|
|
@@ -25,7 +25,11 @@ export async function runInit(options, deps = {}) {
|
|
|
25
25
|
}
|
|
26
26
|
messages.push("See: https://docs.neurodock.org/install#supported-clients");
|
|
27
27
|
return {
|
|
28
|
-
diff: {
|
|
28
|
+
diff: {
|
|
29
|
+
profileAction: "skipped",
|
|
30
|
+
profilePath: profilePath(env),
|
|
31
|
+
clients: [],
|
|
32
|
+
},
|
|
29
33
|
applied: false,
|
|
30
34
|
messages,
|
|
31
35
|
};
|
|
@@ -37,7 +41,9 @@ export async function runInit(options, deps = {}) {
|
|
|
37
41
|
});
|
|
38
42
|
// 3. Profile.
|
|
39
43
|
const pPath = profilePath(env);
|
|
40
|
-
const profileAction = existsSync(pPath)
|
|
44
|
+
const profileAction = existsSync(pPath)
|
|
45
|
+
? "exists"
|
|
46
|
+
: "create";
|
|
41
47
|
// 4. Per-client diff.
|
|
42
48
|
const clientDiffs = [];
|
|
43
49
|
// For "all" mode, only act on already-existing locations; for explicit
|
|
@@ -56,7 +62,11 @@ export async function runInit(options, deps = {}) {
|
|
|
56
62
|
return {
|
|
57
63
|
diff,
|
|
58
64
|
applied: false,
|
|
59
|
-
messages: [
|
|
65
|
+
messages: [
|
|
66
|
+
"Dry run. No changes written.",
|
|
67
|
+
...messages,
|
|
68
|
+
...formatDiff(diff),
|
|
69
|
+
],
|
|
60
70
|
};
|
|
61
71
|
}
|
|
62
72
|
// 5. Apply.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { readEnv } from "../lib/env.js";
|
|
2
|
+
import { runInit, type InitRunResult } from "./init.js";
|
|
3
|
+
import { runHostInstall as defaultRunHostInstall, type HostCommandResult } from "./host.js";
|
|
4
|
+
import type { ClientId } from "../types.js";
|
|
5
|
+
export type InstallerKind = "uv" | "pip";
|
|
6
|
+
export type InstallerChoice = InstallerKind | "auto";
|
|
7
|
+
export interface InstallAllOptions {
|
|
8
|
+
readonly client: ClientId | "all";
|
|
9
|
+
readonly profile: "minimal" | "example";
|
|
10
|
+
readonly installer: InstallerChoice;
|
|
11
|
+
readonly skipInstall: boolean;
|
|
12
|
+
readonly yes: boolean;
|
|
13
|
+
readonly dryRun: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* When true, skip the native-messaging host registration step. The host
|
|
16
|
+
* is optional — it only matters if the user also installs the browser
|
|
17
|
+
* extension — but we install it by default so the happy path is one
|
|
18
|
+
* command.
|
|
19
|
+
*/
|
|
20
|
+
readonly noNativeHost: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface NativeHostOutcome {
|
|
23
|
+
/** "installed" = ran, "skipped" = --no-native-host or dry-run, "failed" = error caught. */
|
|
24
|
+
readonly status: "installed" | "skipped" | "failed";
|
|
25
|
+
readonly result?: HostCommandResult;
|
|
26
|
+
readonly error?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface PackageOutcome {
|
|
29
|
+
readonly pkg: string;
|
|
30
|
+
readonly entrypoint: string;
|
|
31
|
+
/** install step succeeded (exit 0) or was skipped */
|
|
32
|
+
readonly installed: boolean;
|
|
33
|
+
/** entrypoint --help returned exit 0 */
|
|
34
|
+
readonly onPath: boolean;
|
|
35
|
+
/** install command stderr (if any) */
|
|
36
|
+
readonly installError?: string;
|
|
37
|
+
/** path-check stderr (if any) */
|
|
38
|
+
readonly pathError?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface InstallAllResult {
|
|
41
|
+
/** "uv", "pip", or "skipped" / "dry-run" */
|
|
42
|
+
readonly installer: InstallerKind | "skipped" | "dry-run";
|
|
43
|
+
readonly packages: ReadonlyArray<PackageOutcome>;
|
|
44
|
+
readonly initResult: InitRunResult | null;
|
|
45
|
+
readonly nativeHost: NativeHostOutcome;
|
|
46
|
+
readonly messages: ReadonlyArray<string>;
|
|
47
|
+
/** 0 = ok, 1 = install/path failure, 2 = init failure */
|
|
48
|
+
readonly exitCode: 0 | 1 | 2;
|
|
49
|
+
}
|
|
50
|
+
export interface InstallAllDependencies {
|
|
51
|
+
readonly envOverrides?: Parameters<typeof readEnv>[0];
|
|
52
|
+
/**
|
|
53
|
+
* Override the spawn used to run install + --help commands. Defaults to
|
|
54
|
+
* `child_process.spawnSync`. Tests inject a fake.
|
|
55
|
+
*/
|
|
56
|
+
readonly spawn?: SpawnFn;
|
|
57
|
+
/**
|
|
58
|
+
* Override the init runner. Defaults to runInit. Tests can stub.
|
|
59
|
+
*/
|
|
60
|
+
readonly runInit?: typeof runInit;
|
|
61
|
+
/**
|
|
62
|
+
* Override the native-host install step. Defaults to the real
|
|
63
|
+
* `runHostInstall` from ./host.js. Tests inject a stub so they don't
|
|
64
|
+
* touch the user's registry / config dirs.
|
|
65
|
+
*/
|
|
66
|
+
readonly runHostInstall?: typeof defaultRunHostInstall;
|
|
67
|
+
}
|
|
68
|
+
export type SpawnFn = (command: string, args: ReadonlyArray<string>, options: {
|
|
69
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
70
|
+
}) => SpawnResult;
|
|
71
|
+
export interface SpawnResult {
|
|
72
|
+
readonly status: number | null;
|
|
73
|
+
readonly stdout: string;
|
|
74
|
+
readonly stderr: string;
|
|
75
|
+
readonly error?: NodeJS.ErrnoException;
|
|
76
|
+
}
|
|
77
|
+
export declare function runInstallAll(options: InstallAllOptions, deps?: InstallAllDependencies): Promise<InstallAllResult>;
|
|
78
|
+
//# sourceMappingURL=install-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-all.d.ts","sourceRoot":"","sources":["../../src/commands/install-all.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|