@neurodock/cli 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/assets/hooks/neurodock_daemon.py +2 -0
  3. package/dist/assets/hooks/proactive_guardrail.py +2 -0
  4. package/dist/assets/hooks/test_daemon_escape.py +2 -0
  5. package/dist/assets/schemas/plugin.example.yaml +193 -0
  6. package/dist/assets/schemas/plugin.minimal.yaml +30 -0
  7. package/dist/assets/schemas/plugin.schema.json +391 -0
  8. package/dist/assets/schemas/profile.example.yaml +151 -0
  9. package/dist/assets/schemas/profile.minimal.yaml +34 -0
  10. package/dist/assets/schemas/profile.schema.json +211 -0
  11. package/dist/clients/claude-code.d.ts.map +1 -1
  12. package/dist/clients/claude-code.js.map +1 -1
  13. package/dist/clients/claude-desktop.d.ts.map +1 -1
  14. package/dist/clients/claude-desktop.js.map +1 -1
  15. package/dist/clients/cursor.d.ts.map +1 -1
  16. package/dist/clients/cursor.js.map +1 -1
  17. package/dist/clients/index.d.ts.map +1 -1
  18. package/dist/clients/index.js.map +1 -1
  19. package/dist/commands/doctor.d.ts.map +1 -1
  20. package/dist/commands/doctor.js +4 -0
  21. package/dist/commands/doctor.js.map +1 -1
  22. package/dist/commands/examples.d.ts.map +1 -1
  23. package/dist/commands/examples.js +4 -0
  24. package/dist/commands/examples.js.map +1 -1
  25. package/dist/commands/host.d.ts.map +1 -1
  26. package/dist/commands/host.js +4 -0
  27. package/dist/commands/host.js.map +1 -1
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +8 -0
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/install-all.d.ts.map +1 -1
  32. package/dist/commands/install-all.js +4 -0
  33. package/dist/commands/install-all.js.map +1 -1
  34. package/dist/commands/install-hooks.d.ts.map +1 -1
  35. package/dist/commands/install-hooks.js +4 -0
  36. package/dist/commands/install-hooks.js.map +1 -1
  37. package/dist/commands/plugin.d.ts.map +1 -1
  38. package/dist/commands/plugin.js +4 -0
  39. package/dist/commands/plugin.js.map +1 -1
  40. package/dist/commands/profile.d.ts.map +1 -1
  41. package/dist/commands/profile.js +4 -0
  42. package/dist/commands/profile.js.map +1 -1
  43. package/dist/commands/setup.d.ts +53 -0
  44. package/dist/commands/setup.d.ts.map +1 -0
  45. package/dist/commands/setup.js +87 -0
  46. package/dist/commands/setup.js.map +1 -0
  47. package/dist/commands/sync.d.ts.map +1 -1
  48. package/dist/commands/sync.js +4 -0
  49. package/dist/commands/sync.js.map +1 -1
  50. package/dist/commands/uninstall.d.ts.map +1 -1
  51. package/dist/commands/uninstall.js +4 -0
  52. package/dist/commands/uninstall.js.map +1 -1
  53. package/dist/commands/update.d.ts.map +1 -1
  54. package/dist/commands/update.js +4 -0
  55. package/dist/commands/update.js.map +1 -1
  56. package/dist/commands/validate.d.ts.map +1 -1
  57. package/dist/commands/validate.js +4 -0
  58. package/dist/commands/validate.js.map +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +37 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/env.d.ts.map +1 -1
  63. package/dist/lib/env.js +4 -0
  64. package/dist/lib/env.js.map +1 -1
  65. package/dist/lib/json-patch.d.ts.map +1 -1
  66. package/dist/lib/json-patch.js.map +1 -1
  67. package/dist/lib/mcp-entries.d.ts.map +1 -1
  68. package/dist/lib/mcp-entries.js +4 -0
  69. package/dist/lib/mcp-entries.js.map +1 -1
  70. package/dist/lib/paths.d.ts.map +1 -1
  71. package/dist/lib/paths.js +4 -0
  72. package/dist/lib/paths.js.map +1 -1
  73. package/dist/lib/plugin-schema.d.ts.map +1 -1
  74. package/dist/lib/plugin-schema.js +7 -0
  75. package/dist/lib/plugin-schema.js.map +1 -1
  76. package/dist/profile/defaults.d.ts.map +1 -1
  77. package/dist/profile/defaults.js +4 -0
  78. package/dist/profile/defaults.js.map +1 -1
  79. package/dist/profile/loader.d.ts.map +1 -1
  80. package/dist/profile/loader.js +4 -0
  81. package/dist/profile/loader.js.map +1 -1
  82. package/dist/profile/validator.d.ts.map +1 -1
  83. package/dist/profile/validator.js +7 -1
  84. package/dist/profile/validator.js.map +1 -1
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/types.js +4 -0
  87. package/dist/types.js.map +1 -1
  88. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @neurodock/cli changelog
2
2
 
3
+ ## 0.8.0 - 2026-06-11
4
+
5
+ ### Added — `neurodock setup`: install-all + install-hooks in one command
6
+
7
+ The "turn on full NeuroDock" path the browser extension advertises is
8
+ now a single command. `neurodock setup` runs the existing `install-all`
9
+ runner (6 Python MCP servers, MCP client wiring, native-messaging host)
10
+ followed by the existing `install-hooks` runner (proactive-guardrail
11
+ hooks in `~/.claude/settings.json`) — a thin orchestrator, no duplicated
12
+ install logic. Mirrors `install-all`'s flags (`--client`, `--profile`,
13
+ `--installer`, `--skip-install`, `--yes`, `--dry-run`,
14
+ `--no-native-host`). The standalone Phase 3 daemon stays opt-in via
15
+ `--daemon`, matching `install-hooks --install-daemon`, because the
16
+ daemon is the optional piece — the Claude Code hook covers the common
17
+ cases and `setup` should not register login autostart by default. The
18
+ hooks step runs even when install-all reports a PATH problem (the
19
+ guardrails only need Python); the exit code preserves install-all's
20
+ failure first, else reports the hooks failure.
21
+
22
+ ## 0.7.2
23
+
24
+ ### Fixed — `npx @neurodock/cli install-all` failed on `init` with "Could not locate template: profile.example.yaml"
25
+
26
+ The 0.7.x tarball only shipped `dist/`, but `init`, `validate`, and
27
+ `plugin validate` all resolved their templates and JSON schemas through
28
+ relative paths into the workspace `packages/core/schemas/` folder. That
29
+ folder is not part of the cli tarball, so every fresh `npx` install
30
+ failed the moment `install-all` finished wiring the MCP servers and
31
+ tried to scaffold a profile.
32
+
33
+ Fix: `scripts/copy-assets.mjs` now also copies `packages/core/schemas/`
34
+ into `dist/assets/schemas/` at build time, and the three resolvers
35
+ (`commands/init.ts`, `profile/validator.ts`, `lib/plugin-schema.ts`)
36
+ check that bundled location first before falling back to the workspace
37
+ candidates used during local development. No behaviour change in the
38
+ monorepo; published tarball now contains the schemas required by every
39
+ first-run code path.
40
+
3
41
  ## 0.7.1
4
42
 
5
43
  ### Fixed — Windows: daemon autostart no longer flashes a black console window
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env python3
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+ # Copyright (c) 2026 NeuroDock contributors.
2
4
  """NeuroDock proactive-guardrail daemon (Phase 3).
3
5
 
4
6
  A long-running poller that watches the same state files the Phase 1
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env python3
2
+ # SPDX-License-Identifier: AGPL-3.0-or-later
3
+ # Copyright (c) 2026 NeuroDock contributors.
2
4
  """NeuroDock proactive guardrail — Claude Code hook (self-contained).
3
5
 
4
6
  Bundled with `@neurodock/cli`; copied to `~/.neurodock/hooks/` by
@@ -1,3 +1,5 @@
1
+ # SPDX-License-Identifier: AGPL-3.0-or-later
2
+ # Copyright (c) 2026 NeuroDock contributors.
1
3
  """Tests for the M5 notification-text escape functions in neurodock_daemon.py.
2
4
 
3
5
  Security regression test: verify that shell-injection characters in title/
@@ -0,0 +1,193 @@
1
+ # ==============================================================================
2
+ # WELCOME — THIS IS A WORKED EXAMPLE OF A PLUGIN MANIFEST
3
+ # ==============================================================================
4
+ # Plugins are how NeuroDock grows without us having to change the core. This
5
+ # file shows every field you can put in your own plugin's "plugin.yaml" file.
6
+ #
7
+ # You don't need to use every field. Most of them are optional. Copy this
8
+ # file as a starting point and delete anything you don't need.
9
+ #
10
+ # WHERE THE CONTRACT LIVES (for the curious):
11
+ # packages/core/schemas/plugin.schema.json — the machine-checkable rules
12
+ # docs/decisions/0007-plugin-protocol.md — the "why" behind the rules
13
+ #
14
+ # HOW PLUGINS GET FOUND:
15
+ # When NeuroDock starts, it looks in two places for plugins:
16
+ # 1. plugins/<your-plugin>/plugin.yaml (lives inside this repo)
17
+ # 2. ~/.local/share/neurodock/plugins/<your-plugin>/plugin.yaml
18
+ # (lives on your own computer, just for you)
19
+ # No central server. No sign-up. No registry to publish to.
20
+ #
21
+ # WILL UPGRADING BREAK MY PLUGIN?
22
+ # No. If we add new fields in a future version, older versions of NeuroDock
23
+ # will leave them alone instead of stripping them out. You can edit your
24
+ # plugin on a new install, swap back to an old one, and not lose anything.
25
+ # ==============================================================================
26
+
27
+ # Leave this as "0.1.0". It just tells NeuroDock which version of the plugin
28
+ # format you're using. If you're newer than NeuroDock, you'll get a warning,
29
+ # not an error.
30
+ schema_version: "0.1.0"
31
+
32
+ # ------------------------------------------------------------------------------
33
+ # 1. WHO THIS PLUGIN IS (Required)
34
+ # ------------------------------------------------------------------------------
35
+ # A short, unique name. Lowercase, dashes between words.
36
+ # Tip: starting it with your handle (e.g. "org-eobrien-...") helps avoid
37
+ # clashes with other contributors' plugins. Not required.
38
+ name: "ie-corporate-translation"
39
+
40
+ # What kind of plugin is this? Pick one:
41
+ # skill — adds a Claude skill (a markdown file with triggers)
42
+ # mcp-server — adds a new MCP server with new tools
43
+ # profile — adds a profile preset users can copy
44
+ # translation-pack — adds translation prompts for a domain (legal, sales...)
45
+ # language-pack — adds prompts for a non-US-English workplace culture
46
+ # theme — adds a visual theme for UI surfaces
47
+ type: "language-pack"
48
+
49
+ # Your plugin's version number. Use semver (e.g. "0.2.1"). Bumping the
50
+ # patch (third) number means "small fix, nothing broke". Bumping the minor
51
+ # (middle) means "added a new feature, nothing broke". Bumping the major
52
+ # (first) means "I changed something that might break people". Try not to
53
+ # bump the major in 0.1.x unless you really have to.
54
+ version: "0.2.1"
55
+
56
+ # A one-sentence description of what this plugin does. This is what people
57
+ # see in plugin listings. Don't make clinical claims here — say what the
58
+ # plugin DOES, not what it TREATS.
59
+ description: "Hiberno-English to neutral corporate English for ND professionals — direct decoding of indirect Irish workplace register without flattening voice."
60
+
61
+ # ------------------------------------------------------------------------------
62
+ # 2. WHO MADE IT (Optional but appreciated)
63
+ # ------------------------------------------------------------------------------
64
+ # Listing at least one maintainer helps when something needs fixing.
65
+ # "role" is whatever makes sense — maintainer, reviewer, lived-experience reviewer.
66
+ authors:
67
+ - name: "Eoin O'Brien"
68
+ handle: "@eobrien"
69
+ role: "maintainer"
70
+ - name: "Síofra Ní Bhriain"
71
+ handle: "@sionb"
72
+ role: "reviewer" # lived-experience reviewer
73
+
74
+ # ------------------------------------------------------------------------------
75
+ # 3. WHO IS THIS PLUGIN FOR? (Optional)
76
+ # ------------------------------------------------------------------------------
77
+ # Which neurotypes does this plugin help? Leave the list empty (or remove
78
+ # this block) if it works for everyone — most plugins do.
79
+ #
80
+ # If a user's profile lists any of these neurotypes, NeuroDock turns this
81
+ # plugin on for them automatically. If not, they can still turn it on by
82
+ # hand — your plugin isn't blocked, just not on by default.
83
+ neurotypes:
84
+ - "adhd"
85
+ - "audhd"
86
+ - "asd"
87
+
88
+ # Which spoken-language / workplace cultures is this plugin for?
89
+ # REQUIRED if type is "language-pack" or "translation-pack".
90
+ # Use BCP 47 tags ("en-IE" = Irish English, "ja-JP" = Japanese, etc.)
91
+ locale:
92
+ - "en-IE"
93
+ - "en-GB" # Irish-English register often shows up in UK workplaces too
94
+
95
+ # ------------------------------------------------------------------------------
96
+ # 4. WHAT THIS PLUGIN NEEDS TO RUN (Optional)
97
+ # ------------------------------------------------------------------------------
98
+ # If your plugin needs a specific version of NeuroDock or another MCP server,
99
+ # say so here. NeuroDock will skip loading your plugin (cleanly) if any of
100
+ # these aren't around.
101
+ requires:
102
+ substrate_version: ">=0.1.0"
103
+ mcp_servers:
104
+ - name: "mcp-translation"
105
+ version: ">=0.1.0"
106
+ skills: []
107
+ plugins: []
108
+
109
+ # ------------------------------------------------------------------------------
110
+ # 5. WHAT YOUR PLUGIN PROVIDES
111
+ # ------------------------------------------------------------------------------
112
+ # This is the actual content your plugin ships. Each entry points at a file
113
+ # inside your plugin's directory. All paths are relative — your plugin can't
114
+ # reach outside its own folder. That's a deliberate safety rule.
115
+ provides:
116
+ - type: "language-prompt-override"
117
+ id: "translate-incoming-en-ie"
118
+ path: "./prompts/translate-incoming.md"
119
+ # You can narrow when a single file applies, separate from the
120
+ # whole-plugin neurotypes/locale settings above.
121
+ applies_to:
122
+ locale: ["en-IE", "en-GB"]
123
+
124
+ - type: "language-prompt-override"
125
+ id: "check-tone-en-ie"
126
+ path: "./prompts/check-tone.md"
127
+
128
+ - type: "language-prompt-override"
129
+ id: "brief-meeting-en-ie"
130
+ path: "./prompts/brief-meeting.md"
131
+
132
+ - type: "translation-prompt"
133
+ id: "decode-grand"
134
+ path: "./prompts/idioms/decode-grand.md"
135
+ # "Grand" in Hiberno-English can mean anything from "excellent" to
136
+ # "this is not fine and we are not going to discuss it further." It
137
+ # earns its own prompt.
138
+
139
+ # ------------------------------------------------------------------------------
140
+ # 6. WHERE THIS PLUGIN CAME FROM (Required)
141
+ # ------------------------------------------------------------------------------
142
+ # This is the "trust" block. It tells NeuroDock how much social process has
143
+ # touched this plugin so it knows whether to prompt the user before activating.
144
+ #
145
+ # Levels:
146
+ # official — published by the NeuroDock maintainer; installs silently
147
+ # verified — signed against the maintainer keyring; installs silently
148
+ # community — your own plugin, author-signed; user gets a one-time prompt
149
+ # experimental — unsigned; NeuroDock refuses by default unless user opts in
150
+ #
151
+ # Most contributor plugins are "community". That's a good thing.
152
+ trust:
153
+ level: "community"
154
+ signature: |
155
+ -----BEGIN PGP SIGNATURE-----
156
+ (detached signature over sha256(plugin.yaml + provides[].path contents))
157
+ -----END PGP SIGNATURE-----
158
+ keyring_fingerprint: "A1B2 C3D4 E5F6 7890 1234 5678 9ABC DEF0 1234 5678"
159
+ source_url: "https://github.com/eobrien/ie-corporate-translation"
160
+
161
+ # ------------------------------------------------------------------------------
162
+ # 7. LICENSE (Required)
163
+ # ------------------------------------------------------------------------------
164
+ # Your plugin's licence. Must be one of the allowed-list licences (they all
165
+ # play nicely with AGPL-3.0). If you pick one that isn't on the list,
166
+ # NeuroDock will refuse to load the plugin with a clear "license_not_allowed"
167
+ # error so nothing silently fails.
168
+ license: "AGPL-3.0-or-later"
169
+
170
+ # ------------------------------------------------------------------------------
171
+ # 8. WHERE PEOPLE CAN LEARN MORE (Optional)
172
+ # ------------------------------------------------------------------------------
173
+ homepage: "https://hiberno-translate.example.org"
174
+ repository: "https://github.com/eobrien/ie-corporate-translation"
175
+ keywords:
176
+ - "translation"
177
+ - "hiberno-english"
178
+ - "corporate"
179
+ - "indirect-speech"
180
+
181
+ # ------------------------------------------------------------------------------
182
+ # 9. LIFECYCLE HOOKS (Optional, advanced)
183
+ # ------------------------------------------------------------------------------
184
+ # Scripts that run on install/uninstall. For safety, NeuroDock will only
185
+ # run these for "official" or "verified" plugins right now. You can declare
186
+ # them for a community plugin — they'll just sit there politely ignored
187
+ # until the safer hook sandbox lands.
188
+ hooks:
189
+ on_install: "./install.sh" # idempotent; no network, no writing outside the plugin dir
190
+ on_uninstall: "./uninstall.sh" # clean up anything you created locally
191
+
192
+ # Reserved for future use. Leave empty.
193
+ compatibility: {}
@@ -0,0 +1,30 @@
1
+ # ==============================================================================
2
+ # THE SMALLEST POSSIBLE PLUGIN MANIFEST
3
+ # ==============================================================================
4
+ # This file contains ONLY the required fields for a NeuroDock plugin. Every
5
+ # other field is optional. If you're just starting out, this is the shape to
6
+ # copy.
7
+ #
8
+ # For the full version with every option explained, see:
9
+ # packages/core/schemas/plugin.example.yaml
10
+ #
11
+ # For the design rationale behind why these fields exist:
12
+ # docs/decisions/0007-plugin-protocol.md
13
+ #
14
+ # The "neurodock plugin scaffold" command would write something close to
15
+ # this file. Every required field is present, no optional ones are.
16
+ # ==============================================================================
17
+
18
+ schema_version: "0.1.0"
19
+ name: "minimal-example"
20
+ type: "skill"
21
+ version: "0.1.0"
22
+ description: "Minimal valid plugin manifest — replace with your one-sentence summary."
23
+ license: "AGPL-3.0-or-later"
24
+ trust:
25
+ level: "experimental"
26
+ # Heads up: with trust.level = "experimental" NeuroDock will refuse to
27
+ # load this plugin by default — that's a safety feature, not a bug.
28
+ # To get it loading, do one of:
29
+ # (a) bump trust.level to "community" and add a "source_url", or
30
+ # (b) opt in just this once: `neurodock plugin trust <name> --once`