@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.
Files changed (79) hide show
  1. package/CHANGELOG.md +125 -2
  2. package/LICENSE +657 -7
  3. package/README.md +148 -25
  4. package/dist/clients/claude-code.d.ts.map +1 -1
  5. package/dist/clients/claude-code.js +3 -1
  6. package/dist/clients/claude-code.js.map +1 -1
  7. package/dist/clients/claude-desktop.d.ts.map +1 -1
  8. package/dist/clients/claude-desktop.js +3 -1
  9. package/dist/clients/claude-desktop.js.map +1 -1
  10. package/dist/clients/cursor.d.ts.map +1 -1
  11. package/dist/clients/cursor.js +3 -1
  12. package/dist/clients/cursor.js.map +1 -1
  13. package/dist/clients/index.d.ts.map +1 -1
  14. package/dist/clients/index.js.map +1 -1
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +59 -4
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/examples.d.ts +28 -0
  19. package/dist/commands/examples.d.ts.map +1 -0
  20. package/dist/commands/examples.js +168 -0
  21. package/dist/commands/examples.js.map +1 -0
  22. package/dist/commands/host.d.ts +11 -0
  23. package/dist/commands/host.d.ts.map +1 -0
  24. package/dist/commands/host.js +63 -0
  25. package/dist/commands/host.js.map +1 -0
  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/plugin.d.ts +122 -0
  34. package/dist/commands/plugin.d.ts.map +1 -0
  35. package/dist/commands/plugin.js +545 -0
  36. package/dist/commands/plugin.js.map +1 -0
  37. package/dist/commands/profile.d.ts.map +1 -1
  38. package/dist/commands/profile.js +11 -2
  39. package/dist/commands/profile.js.map +1 -1
  40. package/dist/commands/uninstall.d.ts +36 -0
  41. package/dist/commands/uninstall.d.ts.map +1 -0
  42. package/dist/commands/uninstall.js +188 -0
  43. package/dist/commands/uninstall.js.map +1 -0
  44. package/dist/commands/update.d.ts +24 -0
  45. package/dist/commands/update.d.ts.map +1 -0
  46. package/dist/commands/update.js +179 -0
  47. package/dist/commands/update.js.map +1 -0
  48. package/dist/commands/validate.d.ts +24 -0
  49. package/dist/commands/validate.d.ts.map +1 -0
  50. package/dist/commands/validate.js +163 -0
  51. package/dist/commands/validate.js.map +1 -0
  52. package/dist/index.d.ts +1 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +236 -6
  55. package/dist/index.js.map +1 -1
  56. package/dist/lib/json-patch.d.ts.map +1 -1
  57. package/dist/lib/json-patch.js +1 -1
  58. package/dist/lib/json-patch.js.map +1 -1
  59. package/dist/lib/mcp-entries.d.ts.map +1 -1
  60. package/dist/lib/mcp-entries.js +25 -3
  61. package/dist/lib/mcp-entries.js.map +1 -1
  62. package/dist/lib/paths.d.ts +10 -0
  63. package/dist/lib/paths.d.ts.map +1 -1
  64. package/dist/lib/paths.js +19 -2
  65. package/dist/lib/paths.js.map +1 -1
  66. package/dist/lib/plugin-schema.d.ts +12 -0
  67. package/dist/lib/plugin-schema.d.ts.map +1 -0
  68. package/dist/lib/plugin-schema.js +71 -0
  69. package/dist/lib/plugin-schema.js.map +1 -0
  70. package/dist/profile/defaults.d.ts.map +1 -1
  71. package/dist/profile/defaults.js +3 -1
  72. package/dist/profile/defaults.js.map +1 -1
  73. package/dist/profile/loader.d.ts.map +1 -1
  74. package/dist/profile/loader.js +3 -1
  75. package/dist/profile/loader.js.map +1 -1
  76. package/dist/profile/validator.d.ts.map +1 -1
  77. package/dist/profile/validator.js +5 -1
  78. package/dist/profile/validator.js.map +1 -1
  79. package/package.json +24 -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: Phase 1 (v0.1 developer preview).
5
+ Status: **v0.4.3**.
6
6
 
7
7
  ## Quickstart
8
8
 
9
9
  ```bash
10
- # From a published package once it lands on npm:
11
- npx neurodock init
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,22 +19,55 @@ pnpm --filter @neurodock/cli build
16
19
  node packages/cli/dist/index.js init
17
20
  ```
18
21
 
19
- `neurodock init` wires three Python MCP servers (chronometric, cognitive-graph,
20
- task-fractionator) into every MCP-aware client it can detect.
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. From a clone
23
- run `uv sync` (or `pip install -e packages/mcp-chronometric` etc.) so the
24
- `neurodock-mcp-*` console entry points are on `$PATH` for `uv run`. From a
25
- published install this matures into `uv tool install neurodock-mcp-*`.
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 | What it does |
30
- |---|---|
31
- | `neurodock init` | Install MCP servers into Claude Desktop / Claude Code / Cursor. |
32
- | `neurodock doctor` | Diagnose your install profile validity, client wiring, tool availability. |
33
- | `neurodock profile validate` | Validate `~/.neurodock/profile.yaml` against the v0.1 schema. |
34
- | `neurodock profile show` | Print the resolved profile with loader defaults applied. |
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.
35
71
 
36
72
  ### `neurodock init`
37
73
 
@@ -50,21 +86,98 @@ What `init` does, in order:
50
86
 
51
87
  1. Detects supported clients per platform (see "Detection locations" below).
52
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%`.
53
- 3. Adds three `mcpServers` entries (`neurodock-chronometric`, `neurodock-cognitive-graph`, `neurodock-task-fractionator`) to each detected client's config.
89
+ 3. Adds `mcpServers` entries for each NeuroDock server to each detected client's config.
54
90
  4. Preserves all unrelated keys, comments, and unknown server entries already in those configs.
55
91
 
56
92
  Idempotent. Re-running with no changes is a no-op. Collisions on a previous
57
93
  key are skipped unless `--yes` is supplied.
58
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
+
59
122
  ### Detection locations
60
123
 
61
- | Client | Platform | Path |
62
- |---|---|---|
63
- | Claude Desktop | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
64
- | Claude Desktop | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
65
- | Claude Desktop | Linux | `~/.config/Claude/claude_desktop_config.json` |
66
- | Claude Code | All | `./.claude/settings.json` (project, preferred) then `~/.claude/settings.json` (user) |
67
- | Cursor | All | `./.cursor/mcp.json` (project, preferred) then `~/.cursor/mcp.json` (user) |
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) |
131
+
132
+ ### `neurodock host install` / `uninstall`
133
+
134
+ ```
135
+ neurodock host install [--extension-id <id>]
136
+ neurodock host uninstall
137
+ ```
138
+
139
+ `host install` registers `com.neurodock.profile` (a Chrome Native
140
+ Messaging host shipped as `@neurodock/native-host`) with every supported
141
+ browser on the machine. After install, the browser extension reads and
142
+ writes `~/.neurodock/profile.yaml` directly instead of maintaining a
143
+ duplicate in `chrome.storage.local`.
144
+
145
+ `--extension-id` is repeatable. Pass the published extension id once it
146
+ is allocated by the store; while the package is unpublished the default
147
+ is a placeholder.
148
+
149
+ The host is OPTIONAL. The extension keeps working without it — the
150
+ popup just shows `Profile sync: extension-local`.
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.
68
181
 
69
182
  ### Profile precedence
70
183
 
@@ -94,7 +207,17 @@ node dist/index.js --help
94
207
  - All loader defaults live in `src/profile/defaults.ts` and mirror
95
208
  `profile.schema.json` — JSON Schema validation does not apply defaults
96
209
  itself, so the loader does.
97
- - No telemetry, no remote calls, no auto-install of Python packages.
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)
98
221
 
99
222
  ## License
100
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,aAgB/B,CAAC"}
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"]) ? 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,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,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
+ {"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,aAYlC,CAAC"}
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"]) ? 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,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,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
+ {"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,aAgB3B,CAAC"}
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"}
@@ -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"]) ? 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,CAAC,CAAE,IAAI,CAAC,YAAY,CAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,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
+ {"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,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC;CACrF;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
+ {"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;AAgB5C,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
+ {"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,CA8EvD"}
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"}
@@ -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(checkCommandAvailable("python3", ["--version"], "python3 or python >= 3.11"));
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.map((v) => `${v.path}: ${v.message}`).join("; "),
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, { stdio: ["ignore", "pipe", "pipe"], timeout: 4000 });
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 ? err.message.split("\n")[0] ?? "unknown error" : String(err);
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":"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"}
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