@neurodock/cli 0.2.0 → 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 +105 -1
- package/LICENSE +657 -7
- package/README.md +128 -27
- 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.map +1 -1
- package/dist/commands/host.js +1 -1
- package/dist/commands/host.js.map +1 -1
- 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.map +1 -1
- package/dist/commands/uninstall.js +11 -3
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +5 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +12 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +145 -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 +21 -4
package/README.md
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
# @neurodock/cli
|
|
2
2
|
|
|
3
|
-
The `neurodock` installer and diagnostic CLI.
|
|
3
|
+
The `neurodock` installer and diagnostic CLI for [NeuroDock](https://neurodock.org/) — a local-first cognitive substrate for neurodivergent professionals.
|
|
4
4
|
|
|
5
|
-
Status:
|
|
5
|
+
Status: **v0.4.3**.
|
|
6
6
|
|
|
7
7
|
## Quickstart
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
# From a published package
|
|
11
|
-
npx neurodock
|
|
10
|
+
# From a published package:
|
|
11
|
+
npx --yes @neurodock/cli install-all
|
|
12
|
+
|
|
13
|
+
# Or step-by-step, also from npm:
|
|
14
|
+
npx --yes @neurodock/cli init
|
|
12
15
|
|
|
13
16
|
# From a fresh clone of the monorepo:
|
|
14
17
|
pnpm install
|
|
@@ -16,24 +19,55 @@ pnpm --filter @neurodock/cli build
|
|
|
16
19
|
node packages/cli/dist/index.js init
|
|
17
20
|
```
|
|
18
21
|
|
|
19
|
-
`neurodock init` wires
|
|
20
|
-
task-fractionator) into every
|
|
22
|
+
`neurodock init` wires five Python MCP servers (chronometric,
|
|
23
|
+
cognitive-graph, task-fractionator, translation, guardrail) into every
|
|
24
|
+
MCP-aware client it can detect. A sixth, the optional native messaging
|
|
25
|
+
host, is wired separately via `neurodock host install`.
|
|
21
26
|
|
|
22
|
-
**Prerequisite:** the CLI does not install Python deps for you
|
|
23
|
-
run `uv sync` (or
|
|
24
|
-
`
|
|
25
|
-
|
|
27
|
+
**Prerequisite:** the CLI does not install Python deps for you unless you
|
|
28
|
+
use `install-all`. From a clone run `uv sync` (or
|
|
29
|
+
`pip install -e packages/mcp-chronometric` etc.) so the
|
|
30
|
+
`neurodock-mcp-*` console entry points are on `$PATH`. From a published
|
|
31
|
+
install, `install-all` runs the `pip install` step automatically.
|
|
26
32
|
|
|
27
33
|
## Commands
|
|
28
34
|
|
|
29
|
-
| Command
|
|
30
|
-
|
|
31
|
-
| `neurodock
|
|
32
|
-
| `neurodock
|
|
33
|
-
| `neurodock
|
|
34
|
-
| `neurodock
|
|
35
|
-
| `neurodock
|
|
36
|
-
| `neurodock
|
|
35
|
+
| Command | What it does |
|
|
36
|
+
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
37
|
+
| `neurodock install-all` | One-command first-time install: pip-install the six servers, wire every detected client, copy the starter profile. |
|
|
38
|
+
| `neurodock init` | Install MCP servers into Claude Desktop / Claude Code / Cursor (the wiring half of `install-all`). |
|
|
39
|
+
| `neurodock doctor` | Diagnose your install — profile validity, client wiring, tool availability. |
|
|
40
|
+
| `neurodock validate` | Schema-validate a profile file (`~/.neurodock/profile.yaml` by default). |
|
|
41
|
+
| `neurodock update` | Re-run install adapters; rewrite stale NeuroDock MCP entries in client configs. Non-NeuroDock entries are preserved. |
|
|
42
|
+
| `neurodock uninstall` | Reverse `init` — remove NeuroDock MCP entries from each client config. Optionally purge `~/.neurodock/`. |
|
|
43
|
+
| `neurodock examples` | Print a copy-pasteable prompt cheat-sheet that exercises every wired NeuroDock MCP tool. |
|
|
44
|
+
| `neurodock host install` | Register the optional Chrome Native Messaging host so the browser extension can read `~/.neurodock/profile.yaml` directly. |
|
|
45
|
+
| `neurodock host uninstall` | Remove all NeuroDock native-host manifests and registry pointers. |
|
|
46
|
+
| `neurodock profile show` | Print the resolved profile with loader defaults applied. |
|
|
47
|
+
| `neurodock profile validate` | Validate `~/.neurodock/profile.yaml` against the v0.1 schema. |
|
|
48
|
+
| `neurodock plugin add` | Install a plugin from a local directory into `~/.neurodock/plugins/`. |
|
|
49
|
+
| `neurodock plugin remove` | Uninstall a plugin (alias: `plugin uninstall`). |
|
|
50
|
+
| `neurodock plugin list` | List installed plugins and their enabled state. `--json` for scripting. |
|
|
51
|
+
| `neurodock plugin enable` | Activate an installed plugin (writes a `.enabled` marker file). |
|
|
52
|
+
| `neurodock plugin disable` | Deactivate an installed plugin without deleting its files. |
|
|
53
|
+
| `neurodock plugin validate` | Schema-validate a plugin manifest without installing. |
|
|
54
|
+
|
|
55
|
+
### `neurodock install-all`
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
neurodock install-all [--client=claude-desktop|claude-code|cursor|all] \
|
|
59
|
+
[--profile=minimal|example] \
|
|
60
|
+
[--installer=uv|pip|auto] \
|
|
61
|
+
[--skip-install] [--yes] [--dry-run]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Single-command first-time install. Prefers `uv` if it is on PATH; falls
|
|
65
|
+
back to `python -m pip`. After install, verifies each server entrypoint
|
|
66
|
+
is on PATH with `<command> --help`, then delegates to `init` to wire
|
|
67
|
+
clients.
|
|
68
|
+
|
|
69
|
+
Exit codes: `0` ok, `1` an entrypoint is missing from PATH after
|
|
70
|
+
install, `2` init failed.
|
|
37
71
|
|
|
38
72
|
### `neurodock init`
|
|
39
73
|
|
|
@@ -52,21 +86,48 @@ What `init` does, in order:
|
|
|
52
86
|
|
|
53
87
|
1. Detects supported clients per platform (see "Detection locations" below).
|
|
54
88
|
2. Copies `profile.example.yaml` or `profile.minimal.yaml` to `~/.neurodock/profile.yaml` if it does not already exist. Sets `identity.display_name` from `$USER` / `%USERNAME%`.
|
|
55
|
-
3. Adds
|
|
89
|
+
3. Adds `mcpServers` entries for each NeuroDock server to each detected client's config.
|
|
56
90
|
4. Preserves all unrelated keys, comments, and unknown server entries already in those configs.
|
|
57
91
|
|
|
58
92
|
Idempotent. Re-running with no changes is a no-op. Collisions on a previous
|
|
59
93
|
key are skipped unless `--yes` is supplied.
|
|
60
94
|
|
|
95
|
+
### `neurodock validate` / `update` / `uninstall`
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
neurodock validate [--file <path>] [--strict]
|
|
99
|
+
neurodock update [--client <id>] [--dry-run]
|
|
100
|
+
neurodock uninstall [--client <id>] [--yes] [--purge] [--dry-run]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`validate` runs Ajv against `profile.schema.json` and reports field-path
|
|
104
|
+
violations. `update` rewrites stale NeuroDock MCP entries (version drift,
|
|
105
|
+
command/args/cwd changes); non-NeuroDock entries round-trip untouched.
|
|
106
|
+
`uninstall` removes NeuroDock entries from every detected client config;
|
|
107
|
+
asks (interactively) whether to delete `~/.neurodock/profile.yaml` and
|
|
108
|
+
`~/.neurodock/cognitive-graph.sqlite` (default: no). `--purge` deletes
|
|
109
|
+
those without prompting.
|
|
110
|
+
|
|
111
|
+
### `neurodock examples`
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
neurodock examples [--server <name>] [--json]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Detects which NeuroDock servers are wired across all detected client
|
|
118
|
+
configs and prints 2–3 example prompts per server, each annotated with
|
|
119
|
+
the underlying tool name. `--server` filters to one server; `--json`
|
|
120
|
+
emits machine-readable output. Honors `NO_COLOR` / `FORCE_COLOR`.
|
|
121
|
+
|
|
61
122
|
### Detection locations
|
|
62
123
|
|
|
63
|
-
| Client
|
|
64
|
-
|
|
65
|
-
| Claude Desktop | macOS
|
|
66
|
-
| Claude Desktop | Windows
|
|
67
|
-
| Claude Desktop | Linux
|
|
68
|
-
| Claude Code
|
|
69
|
-
| Cursor
|
|
124
|
+
| Client | Platform | Path |
|
|
125
|
+
| -------------- | -------- | ------------------------------------------------------------------------------------ |
|
|
126
|
+
| Claude Desktop | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
|
|
127
|
+
| Claude Desktop | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
|
|
128
|
+
| Claude Desktop | Linux | `~/.config/Claude/claude_desktop_config.json` |
|
|
129
|
+
| Claude Code | All | `./.claude/settings.json` (project, preferred) then `~/.claude/settings.json` (user) |
|
|
130
|
+
| Cursor | All | `./.cursor/mcp.json` (project, preferred) then `~/.cursor/mcp.json` (user) |
|
|
70
131
|
|
|
71
132
|
### `neurodock host install` / `uninstall`
|
|
72
133
|
|
|
@@ -88,6 +149,36 @@ is a placeholder.
|
|
|
88
149
|
The host is OPTIONAL. The extension keeps working without it — the
|
|
89
150
|
popup just shows `Profile sync: extension-local`.
|
|
90
151
|
|
|
152
|
+
### `neurodock profile show` / `validate`
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
neurodock profile show
|
|
156
|
+
neurodock profile validate [--file <path>]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`show` prints the resolved profile with loader defaults applied (per
|
|
160
|
+
ADR 0004 §15). `validate` runs Ajv against the profile schema.
|
|
161
|
+
|
|
162
|
+
### `neurodock plugin` group
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
neurodock plugin add <source> [--yes] [--dry-run] [--force]
|
|
166
|
+
neurodock plugin remove <name> [--yes] [--dry-run]
|
|
167
|
+
neurodock plugin list [--json]
|
|
168
|
+
neurodock plugin enable <name>
|
|
169
|
+
neurodock plugin disable <name>
|
|
170
|
+
neurodock plugin validate <source> [--json]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`add` validates `plugin.yaml` against `plugin.schema.json` before copying
|
|
174
|
+
into `~/.neurodock/plugins/<name>/`. Enablement is tracked via a
|
|
175
|
+
`.enabled` marker file inside each plugin directory — the substrate's
|
|
176
|
+
filesystem walk treats marker presence as the single source of truth
|
|
177
|
+
(per ADR 0007).
|
|
178
|
+
|
|
179
|
+
Exit codes for `add`: `0` ok, `1` source invalid, `2` already installed
|
|
180
|
+
without `--force`, `3` schema validation failure.
|
|
181
|
+
|
|
91
182
|
### Profile precedence
|
|
92
183
|
|
|
93
184
|
Loader precedence (highest first):
|
|
@@ -116,7 +207,17 @@ node dist/index.js --help
|
|
|
116
207
|
- All loader defaults live in `src/profile/defaults.ts` and mirror
|
|
117
208
|
`profile.schema.json` — JSON Schema validation does not apply defaults
|
|
118
209
|
itself, so the loader does.
|
|
119
|
-
- No telemetry, no remote calls
|
|
210
|
+
- No telemetry, no remote calls. `install-all` is the only command that
|
|
211
|
+
shells out to a package manager, and it does so only when invoked.
|
|
212
|
+
|
|
213
|
+
## Links
|
|
214
|
+
|
|
215
|
+
- **Home:** [neurodock.org](https://neurodock.org/)
|
|
216
|
+
- **Documentation:** [docs.neurodock.org](https://docs.neurodock.org/)
|
|
217
|
+
- **Repository:** [github.com/tlennon-ie/neurodock](https://github.com/tlennon-ie/neurodock) (monorepo; this package lives at `packages/cli/`)
|
|
218
|
+
- **Issues:** [github.com/tlennon-ie/neurodock/issues](https://github.com/tlennon-ie/neurodock/issues)
|
|
219
|
+
- **Changelog:** [`packages/cli/CHANGELOG.md`](https://github.com/tlennon-ie/neurodock/blob/main/packages/cli/CHANGELOG.md)
|
|
220
|
+
- **Manifesto + ethics:** [`MANIFESTO.md`](https://github.com/tlennon-ie/neurodock/blob/main/MANIFESTO.md), [`ETHICS.md`](https://github.com/tlennon-ie/neurodock/blob/main/ETHICS.md)
|
|
120
221
|
|
|
121
222
|
## License
|
|
122
223
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,iBAAiB,EAAE,aAkB/B,CAAC"}
|
|
@@ -11,7 +11,9 @@ export const claudeCodeAdapter = {
|
|
|
11
11
|
},
|
|
12
12
|
shapeConfig(existing, mcpServers) {
|
|
13
13
|
const base = isObject(existing) ? { ...existing } : {};
|
|
14
|
-
const prev = isObject(base["mcpServers"])
|
|
14
|
+
const prev = isObject(base["mcpServers"])
|
|
15
|
+
? base["mcpServers"]
|
|
16
|
+
: {};
|
|
15
17
|
base["mcpServers"] = { ...prev, ...mcpServers };
|
|
16
18
|
return base;
|
|
17
19
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,aAAa;IAC1B,WAAW,CAAC,GAAG;QACb,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;YACL,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YACzC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,EAAE,EAAE,aAAa;IACjB,WAAW,EAAE,aAAa;IAC1B,WAAW,CAAC,GAAG;QACb,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;YACL,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YACzC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,oBAAoB,EAAE,aAclC,CAAC"}
|
|
@@ -7,7 +7,9 @@ export const claudeDesktopAdapter = {
|
|
|
7
7
|
},
|
|
8
8
|
shapeConfig(existing, mcpServers) {
|
|
9
9
|
const base = isObject(existing) ? { ...existing } : {};
|
|
10
|
-
const prev = isObject(base["mcpServers"])
|
|
10
|
+
const prev = isObject(base["mcpServers"])
|
|
11
|
+
? base["mcpServers"]
|
|
12
|
+
: {};
|
|
11
13
|
base["mcpServers"] = { ...prev, ...mcpServers };
|
|
12
14
|
return base;
|
|
13
15
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,EAAE,EAAE,gBAAgB;IACpB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,CAAC,GAAG;QACb,OAAO,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/clients/claude-desktop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,EAAE,EAAE,gBAAgB;IACpB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,CAAC,GAAG;QACb,OAAO,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,eAAO,MAAM,aAAa,EAAE,aAkB3B,CAAC"}
|
package/dist/clients/cursor.js
CHANGED
|
@@ -11,7 +11,9 @@ export const cursorAdapter = {
|
|
|
11
11
|
},
|
|
12
12
|
shapeConfig(existing, mcpServers) {
|
|
13
13
|
const base = isObject(existing) ? { ...existing } : {};
|
|
14
|
-
const prev = isObject(base["mcpServers"])
|
|
14
|
+
const prev = isObject(base["mcpServers"])
|
|
15
|
+
? base["mcpServers"]
|
|
16
|
+
: {};
|
|
15
17
|
base["mcpServers"] = { ...prev, ...mcpServers };
|
|
16
18
|
return base;
|
|
17
19
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,QAAQ;IACrB,WAAW,CAAC,GAAG;QACb,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO;YACL,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YACzC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,QAAQ;IACrB,WAAW,CAAC,GAAG;QACb,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO;YACL,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;YACzC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;SACpC,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,QAAQ,EAAE,UAAU;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9D,iEAAiE;IACjE,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IAC9D,iEAAiE;IACjE,WAAW,CACT,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACzC,OAAO,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,aAAa,CAIpD,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,aAAa,CAMtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmB5C,MAAM,CAAC,MAAM,WAAW,GAAiC;IACvD,oBAAoB;IACpB,iBAAiB;IACjB,aAAa;CACd,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAY;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAqFvD"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -10,7 +10,7 @@ export async function runDoctor() {
|
|
|
10
10
|
const checks = [];
|
|
11
11
|
checks.push(checkNodeVersion());
|
|
12
12
|
checks.push(checkCommandAvailable("uv", ["--version"]));
|
|
13
|
-
checks.push(
|
|
13
|
+
checks.push(checkPython());
|
|
14
14
|
// Profile presence + validity.
|
|
15
15
|
const pPath = profilePath(env);
|
|
16
16
|
if (!existsSync(pPath)) {
|
|
@@ -32,7 +32,9 @@ export async function runDoctor() {
|
|
|
32
32
|
checks.push({
|
|
33
33
|
name: "Profile schema valid",
|
|
34
34
|
status: "FAIL",
|
|
35
|
-
detail: result.violations
|
|
35
|
+
detail: result.violations
|
|
36
|
+
.map((v) => `${v.path}: ${v.message}`)
|
|
37
|
+
.join("; "),
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -95,13 +97,66 @@ function checkNodeVersion() {
|
|
|
95
97
|
function checkCommandAvailable(cmd, args, label) {
|
|
96
98
|
const name = label ?? `${cmd} available`;
|
|
97
99
|
try {
|
|
98
|
-
const out = execFileSync(cmd, args, {
|
|
100
|
+
const out = execFileSync(cmd, args, {
|
|
101
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
102
|
+
timeout: 4000,
|
|
103
|
+
});
|
|
99
104
|
const text = out.toString().trim().split("\n")[0] ?? "";
|
|
100
105
|
return { name, status: "PASS", detail: text };
|
|
101
106
|
}
|
|
102
107
|
catch (err) {
|
|
103
|
-
const detail = err instanceof Error
|
|
108
|
+
const detail = err instanceof Error
|
|
109
|
+
? err.message.split("\n")[0] ?? "unknown error"
|
|
110
|
+
: String(err);
|
|
104
111
|
return { name, status: "FAIL", detail };
|
|
105
112
|
}
|
|
106
113
|
}
|
|
114
|
+
const PYTHON_CANDIDATES = [
|
|
115
|
+
// Most Unix installs (and explicit pyenv shims).
|
|
116
|
+
{ cmd: "python3", args: ["--version"] },
|
|
117
|
+
// Most Windows installs (and Conda / venvs everywhere).
|
|
118
|
+
{ cmd: "python", args: ["--version"] },
|
|
119
|
+
// Windows Python launcher selecting >=3.x.
|
|
120
|
+
{ cmd: "py", args: ["-3", "--version"] },
|
|
121
|
+
];
|
|
122
|
+
function checkPython() {
|
|
123
|
+
const name = "Python >= 3.11";
|
|
124
|
+
const errors = [];
|
|
125
|
+
for (const { cmd, args } of PYTHON_CANDIDATES) {
|
|
126
|
+
try {
|
|
127
|
+
const out = execFileSync(cmd, args, {
|
|
128
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
129
|
+
timeout: 4000,
|
|
130
|
+
});
|
|
131
|
+
const text = out.toString().trim().split("\n")[0] ?? "";
|
|
132
|
+
const match = text.match(/(\d+)\.(\d+)/);
|
|
133
|
+
if (!match) {
|
|
134
|
+
errors.push(`${cmd}: unexpected version output "${text}"`);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const major = Number(match[1]);
|
|
138
|
+
const minor = Number(match[2]);
|
|
139
|
+
const tooOld = major < 3 || (major === 3 && minor < 11);
|
|
140
|
+
const detail = `${cmd} ${match[0]} (${text})`;
|
|
141
|
+
return tooOld
|
|
142
|
+
? {
|
|
143
|
+
name,
|
|
144
|
+
status: "FAIL",
|
|
145
|
+
detail: `${detail} is below 3.11. Upgrade Python.`,
|
|
146
|
+
}
|
|
147
|
+
: { name, status: "PASS", detail };
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
const message = err instanceof Error
|
|
151
|
+
? err.message.split("\n")[0] ?? "unknown error"
|
|
152
|
+
: String(err);
|
|
153
|
+
errors.push(`${cmd}: ${message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
name,
|
|
158
|
+
status: "FAIL",
|
|
159
|
+
detail: `No Python interpreter found on PATH (tried python3, python, py -3). Errors: ${errors.join("; ")}`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
107
162
|
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAOvD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readEnv } from "../lib/env.js";
|
|
2
|
+
export type ServerName = "neurodock-chronometric" | "neurodock-cognitive-graph" | "neurodock-task-fractionator" | "neurodock-translation" | "neurodock-guardrail";
|
|
3
|
+
export interface ExamplePrompt {
|
|
4
|
+
readonly prompt: string;
|
|
5
|
+
readonly tool: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ServerExamples {
|
|
8
|
+
readonly server: ServerName;
|
|
9
|
+
readonly label: string;
|
|
10
|
+
readonly prompts: ReadonlyArray<ExamplePrompt>;
|
|
11
|
+
}
|
|
12
|
+
export interface ExamplesOptions {
|
|
13
|
+
readonly server?: string;
|
|
14
|
+
readonly json: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface ExamplesResult {
|
|
17
|
+
/** which servers are wired anywhere across detected client configs */
|
|
18
|
+
readonly wired: ReadonlyArray<ServerName>;
|
|
19
|
+
readonly groups: ReadonlyArray<ServerExamples>;
|
|
20
|
+
readonly messages: ReadonlyArray<string>;
|
|
21
|
+
}
|
|
22
|
+
export interface ExamplesDependencies {
|
|
23
|
+
readonly envOverrides?: Parameters<typeof readEnv>[0];
|
|
24
|
+
/** Override the color check (defaults to colorEnabled() from env). */
|
|
25
|
+
readonly colorEnabled?: () => boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function runExamples(options: ExamplesOptions, deps?: ExamplesDependencies): Promise<ExamplesResult>;
|
|
28
|
+
//# sourceMappingURL=examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/commands/examples.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAgB,MAAM,eAAe,CAAC;AAItD,MAAM,MAAM,UAAU,GAClB,wBAAwB,GACxB,2BAA2B,GAC3B,6BAA6B,GAC7B,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CACvC;AAoGD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,oBAAyB,GAC9B,OAAO,CAAC,cAAc,CAAC,CA+DzB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { readEnv, colorEnabled } from "../lib/env.js";
|
|
4
|
+
import { detectClients } from "../lib/paths.js";
|
|
5
|
+
import { parseJsonSafely } from "../lib/json-patch.js";
|
|
6
|
+
const ALL_GROUPS = [
|
|
7
|
+
{
|
|
8
|
+
server: "neurodock-chronometric",
|
|
9
|
+
label: "mcp-chronometric (time, sessions, energy zone)",
|
|
10
|
+
prompts: [
|
|
11
|
+
{
|
|
12
|
+
prompt: "What time is it and what's my energy zone?",
|
|
13
|
+
tool: "get_time_context",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
prompt: "Start a session — I'm working on emails for the next 30 minutes.",
|
|
17
|
+
tool: "mark_session_start",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
prompt: "I'm done. End my session and summarise what I got through.",
|
|
21
|
+
tool: "mark_session_end",
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
server: "neurodock-cognitive-graph",
|
|
27
|
+
label: "mcp-cognitive-graph (memory, facts, decisions)",
|
|
28
|
+
prompts: [
|
|
29
|
+
{
|
|
30
|
+
prompt: "Remember: my dev box is Windows 11, Python 3.11, Node 22.",
|
|
31
|
+
tool: "record_fact",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
prompt: "What do you know about my dev environment?",
|
|
35
|
+
tool: "recall_entity",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
prompt: "What decisions have I made about the auth refactor in the last 30 days?",
|
|
39
|
+
tool: "recall_decisions",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
prompt: "Give me a weekly rollup on the marketing site project.",
|
|
43
|
+
tool: "weekly_rollup",
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
server: "neurodock-task-fractionator",
|
|
49
|
+
label: "mcp-task-fractionator (decompose goals, pick next step)",
|
|
50
|
+
prompts: [
|
|
51
|
+
{
|
|
52
|
+
prompt: "Decompose this goal into atomic tasks with a PT3H budget: 'Get the changelog ready for v1.0.'",
|
|
53
|
+
tool: "decompose",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
prompt: "What should I do next on the auth refactor?",
|
|
57
|
+
tool: "next_one",
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
server: "neurodock-translation",
|
|
63
|
+
label: "mcp-translation (incoming/outgoing tone, meeting briefs)",
|
|
64
|
+
prompts: [
|
|
65
|
+
{
|
|
66
|
+
prompt: "Translate this incoming Slack message — what is the explicit ask and what's the subtext: 'Hey, can we revisit the timeline next week?'",
|
|
67
|
+
tool: "translate_incoming",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
prompt: "Tone-check this PR comment before I send it: 'this needs a rewrite — let me know'",
|
|
71
|
+
tool: "check_tone",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
prompt: "Rewrite this for a 'warm' register without losing the technical detail: 'Fix the GraphQL N+1 in /api/users.'",
|
|
75
|
+
tool: "rewrite_outgoing",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
prompt: "Brief this 30-minute meeting transcript — pull out my asks, others' asks, decisions, and ambiguous items. [paste transcript]",
|
|
79
|
+
tool: "brief_meeting",
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
server: "neurodock-guardrail",
|
|
85
|
+
label: "mcp-guardrail (rumination + loop checks — mostly invoked via skills)",
|
|
86
|
+
prompts: [
|
|
87
|
+
{
|
|
88
|
+
prompt: "Check whether my last 5 questions about Postgres count as a rumination loop: [list of questions]",
|
|
89
|
+
tool: "check_rumination",
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
export async function runExamples(options, deps = {}) {
|
|
95
|
+
const env = readEnv(deps.envOverrides ?? {});
|
|
96
|
+
const messages = [];
|
|
97
|
+
// Probe which servers are wired across all detected client configs.
|
|
98
|
+
const wired = detectWiredServers(env);
|
|
99
|
+
// Filter by --server if supplied.
|
|
100
|
+
const requested = options.server ?? null;
|
|
101
|
+
if (requested !== null && !isKnownServer(requested)) {
|
|
102
|
+
messages.push(`Unknown --server '${requested}'. Known: ${ALL_GROUPS.map((g) => g.server).join(", ")}.`);
|
|
103
|
+
return { wired, groups: [], messages };
|
|
104
|
+
}
|
|
105
|
+
const groups = ALL_GROUPS.filter((g) => {
|
|
106
|
+
if (requested !== null && g.server !== requested)
|
|
107
|
+
return false;
|
|
108
|
+
return wired.includes(g.server);
|
|
109
|
+
});
|
|
110
|
+
if (groups.length === 0) {
|
|
111
|
+
if (requested !== null) {
|
|
112
|
+
messages.push(`Server '${requested}' is not wired in any detected MCP client config.`);
|
|
113
|
+
messages.push("Run 'neurodock init' (or 'neurodock install-all') to wire it.");
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
messages.push("No NeuroDock servers detected in any client config.");
|
|
117
|
+
messages.push("Run 'neurodock init' (or 'neurodock install-all') to wire them.");
|
|
118
|
+
}
|
|
119
|
+
return { wired, groups: [], messages };
|
|
120
|
+
}
|
|
121
|
+
if (options.json) {
|
|
122
|
+
messages.push(JSON.stringify({ wired, groups }, null, 2));
|
|
123
|
+
return { wired, groups, messages };
|
|
124
|
+
}
|
|
125
|
+
// Pretty output.
|
|
126
|
+
const useColor = (deps.colorEnabled ?? colorEnabled)();
|
|
127
|
+
for (const g of groups) {
|
|
128
|
+
messages.push("");
|
|
129
|
+
messages.push(useColor ? chalk.bold(g.label) : g.label);
|
|
130
|
+
for (const p of g.prompts) {
|
|
131
|
+
const promptLine = useColor
|
|
132
|
+
? chalk.cyan(`"${p.prompt}"`)
|
|
133
|
+
: `"${p.prompt}"`;
|
|
134
|
+
const toolLine = useColor ? chalk.dim(`→ ${p.tool}`) : `→ ${p.tool}`;
|
|
135
|
+
messages.push(` ${promptLine}`);
|
|
136
|
+
messages.push(` ${toolLine}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
messages.push("");
|
|
140
|
+
messages.push(`Wired servers: ${wired.join(", ") || "(none)"}`);
|
|
141
|
+
return { wired, groups, messages };
|
|
142
|
+
}
|
|
143
|
+
function detectWiredServers(env) {
|
|
144
|
+
const detections = detectClients(env).filter((d) => d.exists);
|
|
145
|
+
const seen = new Set();
|
|
146
|
+
for (const d of detections) {
|
|
147
|
+
try {
|
|
148
|
+
const raw = readFileSync(d.path, "utf8");
|
|
149
|
+
const parsed = parseJsonSafely(raw);
|
|
150
|
+
if (!parsed.ok)
|
|
151
|
+
continue;
|
|
152
|
+
const cfg = (parsed.value ?? {});
|
|
153
|
+
for (const key of Object.keys(cfg.mcpServers ?? {})) {
|
|
154
|
+
if (isKnownServer(key))
|
|
155
|
+
seen.add(key);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// unreadable config: skip silently.
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Preserve canonical order from ALL_GROUPS so output is deterministic.
|
|
163
|
+
return ALL_GROUPS.map((g) => g.server).filter((s) => seen.has(s));
|
|
164
|
+
}
|
|
165
|
+
function isKnownServer(key) {
|
|
166
|
+
return ALL_GROUPS.some((g) => g.server === key);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/commands/examples.ts"],"names":[],"mappings":"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"}
|