@neurodock/cli 0.7.2 → 0.8.1
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 +45 -0
- package/dist/assets/hooks/proactive_guardrail.py +313 -30
- package/dist/commands/setup.d.ts +53 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +87 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# @neurodock/cli changelog
|
|
2
2
|
|
|
3
|
+
## 0.8.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- proactive-guardrail hook: surface banners inline and honour profile.yaml
|
|
8
|
+
|
|
9
|
+
The bundled Claude Code hook (`proactive_guardrail.py`) now surfaces its
|
|
10
|
+
hyperfocus / rumination / late-night / sycophancy banners through Claude
|
|
11
|
+
Code's structured `systemMessage` output (a single JSON object on stdout,
|
|
12
|
+
exit 0) instead of writing to stderr. The pre-0.0.2 hook exited 0 with the
|
|
13
|
+
banner on stderr, which only appears in transcript/verbose mode — so every
|
|
14
|
+
fired banner was effectively invisible during normal use. The hook still
|
|
15
|
+
never exits 2, so it never blocks a tool call.
|
|
16
|
+
|
|
17
|
+
The hook is also now profile-driven: it reads
|
|
18
|
+
`chronometric.hyperfocus_break_minutes`, `chronometric.end_of_day_local`,
|
|
19
|
+
`guardrails.rumination_threshold`, `guardrails.rumination_window_minutes`,
|
|
20
|
+
and `guardrails.sycophancy_check` from `~/.neurodock/profile.yaml`
|
|
21
|
+
(stdlib-only scalar extraction, honouring `$NEURODOCK_PROFILE_PATH` and
|
|
22
|
+
`$XDG_CONFIG_HOME`). Missing or out-of-range values fall back to the schema
|
|
23
|
+
defaults. Previously every threshold was hardcoded, contradicting the
|
|
24
|
+
documented opt-out matrix.
|
|
25
|
+
|
|
26
|
+
After upgrading, re-run `neurodock install-hooks` to copy the updated
|
|
27
|
+
script into `~/.neurodock/hooks/`.
|
|
28
|
+
|
|
29
|
+
## 0.8.0 - 2026-06-11
|
|
30
|
+
|
|
31
|
+
### Added — `neurodock setup`: install-all + install-hooks in one command
|
|
32
|
+
|
|
33
|
+
The "turn on full NeuroDock" path the browser extension advertises is
|
|
34
|
+
now a single command. `neurodock setup` runs the existing `install-all`
|
|
35
|
+
runner (6 Python MCP servers, MCP client wiring, native-messaging host)
|
|
36
|
+
followed by the existing `install-hooks` runner (proactive-guardrail
|
|
37
|
+
hooks in `~/.claude/settings.json`) — a thin orchestrator, no duplicated
|
|
38
|
+
install logic. Mirrors `install-all`'s flags (`--client`, `--profile`,
|
|
39
|
+
`--installer`, `--skip-install`, `--yes`, `--dry-run`,
|
|
40
|
+
`--no-native-host`). The standalone Phase 3 daemon stays opt-in via
|
|
41
|
+
`--daemon`, matching `install-hooks --install-daemon`, because the
|
|
42
|
+
daemon is the optional piece — the Claude Code hook covers the common
|
|
43
|
+
cases and `setup` should not register login autostart by default. The
|
|
44
|
+
hooks step runs even when install-all reports a PATH problem (the
|
|
45
|
+
guardrails only need Python); the exit code preserves install-all's
|
|
46
|
+
failure first, else reports the hooks failure.
|
|
47
|
+
|
|
3
48
|
## 0.7.2
|
|
4
49
|
|
|
5
50
|
### Fixed — `npx @neurodock/cli install-all` failed on `init` with "Could not locate template: profile.example.yaml"
|
|
@@ -17,6 +17,28 @@ Hook events handled (Claude Code subcommand args):
|
|
|
17
17
|
post-tool Detect sycophancy patterns in assistant responses.
|
|
18
18
|
stop Mark session end; clear in-flight state.
|
|
19
19
|
|
|
20
|
+
How banners reach the user (0.0.2):
|
|
21
|
+
|
|
22
|
+
Banners are surfaced through Claude Code's structured hook output —
|
|
23
|
+
a single JSON object printed to STDOUT carrying a `systemMessage`
|
|
24
|
+
field, with the process exiting 0. That is the documented
|
|
25
|
+
non-blocking, user-visible channel. The pre-0.0.2 hook wrote the
|
|
26
|
+
banner to stderr and exited 0, which only shows in transcript/verbose
|
|
27
|
+
mode — so every fired banner was effectively invisible during normal
|
|
28
|
+
use. We never use exit 2 (that BLOCKS the tool call) — the guardrail
|
|
29
|
+
must never block the user's work.
|
|
30
|
+
|
|
31
|
+
Profile-driven thresholds (0.0.2):
|
|
32
|
+
|
|
33
|
+
The hook reads `~/.neurodock/profile.yaml` (honouring
|
|
34
|
+
$NEURODOCK_PROFILE_PATH and $XDG_CONFIG_HOME like the CLI) and uses
|
|
35
|
+
the user's own `chronometric.hyperfocus_break_minutes`,
|
|
36
|
+
`chronometric.end_of_day_local`, `guardrails.rumination_threshold`,
|
|
37
|
+
`guardrails.rumination_window_minutes`, and
|
|
38
|
+
`guardrails.sycophancy_check`. Pure-stdlib scalar extraction — no
|
|
39
|
+
YAML dependency. Missing/invalid values fall back to the defaults
|
|
40
|
+
below.
|
|
41
|
+
|
|
20
42
|
Wire-up in `~/.claude/settings.json`:
|
|
21
43
|
|
|
22
44
|
{
|
|
@@ -64,12 +86,25 @@ from typing import Any
|
|
|
64
86
|
|
|
65
87
|
# ── Configuration ────────────────────────────────────────────────────────
|
|
66
88
|
|
|
67
|
-
VERSION = "0.0.
|
|
89
|
+
VERSION = "0.0.2"
|
|
68
90
|
STATE_DIR = Path.home() / ".neurodock" / "state"
|
|
69
91
|
LOG_FILE = STATE_DIR / "guardrail-log.jsonl"
|
|
70
92
|
SESSION_FILE = STATE_DIR / "guardrail-session.json"
|
|
71
93
|
PROMPTS_FILE = STATE_DIR / "guardrail-prompts.json"
|
|
72
94
|
|
|
95
|
+
# Banners accumulated during a single hook invocation. A hook fires once
|
|
96
|
+
# per event and may produce more than one banner (e.g. pre-tool can trip
|
|
97
|
+
# both hyperfocus and rumination), but Claude Code accepts exactly one
|
|
98
|
+
# JSON object on stdout — so we collect here and flush once in main().
|
|
99
|
+
_PENDING_BANNERS: list[str] = []
|
|
100
|
+
|
|
101
|
+
# Valid profile ranges (mirrors packages/core/schemas/profile.example.yaml).
|
|
102
|
+
# Out-of-range values are clamped, not rejected — the hook stays charitable
|
|
103
|
+
# and predictable; `neurodock profile validate` is where ranges are enforced.
|
|
104
|
+
HYPERFOCUS_BREAK_MIN_RANGE = (15, 240)
|
|
105
|
+
RUMINATION_THRESHOLD_RANGE = (1, 20)
|
|
106
|
+
RUMINATION_WINDOW_RANGE = (5, 1440)
|
|
107
|
+
|
|
73
108
|
# Hyperfocus heuristic — mirrors packages/mcp-guardrail/heuristics/hyperfocus.py
|
|
74
109
|
HYPERFOCUS_BREAK_MINUTES_DEFAULT = 90
|
|
75
110
|
HYPERFOCUS_GENTLE_RATIO = 0.60 # 54 min
|
|
@@ -103,47 +138,55 @@ def main() -> int:
|
|
|
103
138
|
if len(sys.argv) < 2:
|
|
104
139
|
return 0
|
|
105
140
|
kind = sys.argv[1]
|
|
141
|
+
# Self-test is a standalone diagnostic — no stdin payload, no state
|
|
142
|
+
# directory, no banner flush. Handle it before anything else.
|
|
143
|
+
if kind == "self-test":
|
|
144
|
+
return _self_test()
|
|
106
145
|
payload = _read_stdin_payload()
|
|
107
146
|
try:
|
|
108
147
|
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
|
109
148
|
except OSError:
|
|
110
149
|
return 0 # filesystem unavailable — fail silent
|
|
150
|
+
settings = _load_profile_settings()
|
|
111
151
|
try:
|
|
112
152
|
if kind == "session-start":
|
|
113
|
-
_on_session_start(payload)
|
|
153
|
+
_on_session_start(payload, settings)
|
|
114
154
|
elif kind == "pre-tool":
|
|
115
|
-
_on_pre_tool(payload)
|
|
155
|
+
_on_pre_tool(payload, settings)
|
|
116
156
|
elif kind == "post-tool":
|
|
117
|
-
_on_post_tool(payload)
|
|
157
|
+
_on_post_tool(payload, settings)
|
|
118
158
|
elif kind == "stop":
|
|
119
159
|
_on_stop(payload)
|
|
120
|
-
elif kind == "self-test":
|
|
121
|
-
return _self_test()
|
|
122
160
|
except Exception as exc:
|
|
123
161
|
_log("error", {"kind": kind, "error": str(exc)})
|
|
162
|
+
# Flush any banners the handlers queued, as one JSON object on stdout.
|
|
163
|
+
_flush_banners()
|
|
124
164
|
return 0
|
|
125
165
|
|
|
126
166
|
|
|
127
167
|
# ── Hook handlers ────────────────────────────────────────────────────────
|
|
128
168
|
|
|
129
169
|
|
|
130
|
-
def _on_session_start(_payload: dict[str, Any]) -> None:
|
|
170
|
+
def _on_session_start(_payload: dict[str, Any], settings: dict[str, Any]) -> None:
|
|
131
171
|
now = _now()
|
|
132
172
|
state = _load_session()
|
|
133
173
|
state["started_at"] = now.isoformat()
|
|
134
174
|
state["tool_count"] = 0
|
|
135
175
|
_save_session(state)
|
|
136
176
|
band = _clock_band(now)
|
|
177
|
+
break_minutes = settings.get(
|
|
178
|
+
"hyperfocus_break_minutes", HYPERFOCUS_BREAK_MINUTES_DEFAULT
|
|
179
|
+
)
|
|
137
180
|
if band in ("deep_night", "late_night"):
|
|
138
181
|
_emit_banner(
|
|
139
182
|
f"NeuroDock: it's {band.replace('_', ' ')} local time. "
|
|
140
183
|
f"I'll nudge you toward stopping every "
|
|
141
|
-
f"{
|
|
184
|
+
f"{break_minutes} minutes."
|
|
142
185
|
)
|
|
143
186
|
_log("session-start", {"band": band})
|
|
144
187
|
|
|
145
188
|
|
|
146
|
-
def _on_pre_tool(payload: dict[str, Any]) -> None:
|
|
189
|
+
def _on_pre_tool(payload: dict[str, Any], settings: dict[str, Any]) -> None:
|
|
147
190
|
state = _load_session()
|
|
148
191
|
# Defensive bootstrap: if SessionStart never fired (e.g. hook installed
|
|
149
192
|
# mid-session, or the Claude Code event is suppressed in a given client),
|
|
@@ -165,15 +208,28 @@ def _on_pre_tool(payload: dict[str, Any]) -> None:
|
|
|
165
208
|
if state["tool_count"] % PRETOOL_CHECK_EVERY_N != 0:
|
|
166
209
|
return
|
|
167
210
|
|
|
168
|
-
|
|
211
|
+
break_minutes = settings.get(
|
|
212
|
+
"hyperfocus_break_minutes", HYPERFOCUS_BREAK_MINUTES_DEFAULT
|
|
213
|
+
)
|
|
214
|
+
end_of_day = settings.get("end_of_day_local")
|
|
215
|
+
hyperfocus_banner = _evaluate_hyperfocus(state, break_minutes, end_of_day)
|
|
169
216
|
if hyperfocus_banner:
|
|
170
217
|
_emit_banner(hyperfocus_banner)
|
|
171
|
-
|
|
218
|
+
threshold = settings.get("rumination_threshold", RUMINATION_THRESHOLD_DEFAULT)
|
|
219
|
+
window = settings.get(
|
|
220
|
+
"rumination_window_minutes", RUMINATION_WINDOW_MINUTES_DEFAULT
|
|
221
|
+
)
|
|
222
|
+
rumination_banner = _evaluate_rumination(threshold, window)
|
|
172
223
|
if rumination_banner:
|
|
173
224
|
_emit_banner(rumination_banner)
|
|
174
225
|
|
|
175
226
|
|
|
176
|
-
def _on_post_tool(payload: dict[str, Any]) -> None:
|
|
227
|
+
def _on_post_tool(payload: dict[str, Any], settings: dict[str, Any]) -> None:
|
|
228
|
+
# Honour the user's sycophancy preference: "off" means never flag.
|
|
229
|
+
# "warn"/"refuse" both surface the advisory banner (the hook never
|
|
230
|
+
# refuses a send — that's a client-side decision).
|
|
231
|
+
if settings.get("sycophancy_check") == "off":
|
|
232
|
+
return
|
|
177
233
|
response = _extract_assistant_response(payload)
|
|
178
234
|
if not response:
|
|
179
235
|
return
|
|
@@ -199,8 +255,18 @@ def _on_stop(_payload: dict[str, Any]) -> None:
|
|
|
199
255
|
# ── Heuristics (vendored from packages/mcp-guardrail) ────────────────────
|
|
200
256
|
|
|
201
257
|
|
|
202
|
-
def _evaluate_hyperfocus(
|
|
203
|
-
|
|
258
|
+
def _evaluate_hyperfocus(
|
|
259
|
+
state: dict[str, Any],
|
|
260
|
+
break_minutes: int = HYPERFOCUS_BREAK_MINUTES_DEFAULT,
|
|
261
|
+
end_of_day_local: str | None = None,
|
|
262
|
+
) -> str | None:
|
|
263
|
+
"""Elapsed-threshold heuristic; mirrors mcp-guardrail's structure.
|
|
264
|
+
|
|
265
|
+
`break_minutes` re-anchors the escalation ladder (from
|
|
266
|
+
`chronometric.hyperfocus_break_minutes`). `end_of_day_local`
|
|
267
|
+
("HH:MM") makes the nudge stricter after the user's clock-out time;
|
|
268
|
+
when absent we fall back to the deep/late-night clock band.
|
|
269
|
+
"""
|
|
204
270
|
started_iso = state.get("started_at")
|
|
205
271
|
if not isinstance(started_iso, str):
|
|
206
272
|
return None
|
|
@@ -212,12 +278,11 @@ def _evaluate_hyperfocus(state: dict[str, Any]) -> str | None:
|
|
|
212
278
|
elapsed = now - started
|
|
213
279
|
elapsed_min = elapsed.total_seconds() / 60.0
|
|
214
280
|
|
|
215
|
-
gentle =
|
|
216
|
-
nudge =
|
|
217
|
-
hard =
|
|
281
|
+
gentle = break_minutes * HYPERFOCUS_GENTLE_RATIO
|
|
282
|
+
nudge = break_minutes * HYPERFOCUS_NUDGE_RATIO
|
|
283
|
+
hard = break_minutes * HYPERFOCUS_HARD_RATIO
|
|
218
284
|
|
|
219
|
-
|
|
220
|
-
past_eod = band in ("late_night", "deep_night")
|
|
285
|
+
past_eod = _is_past_end_of_day(now, end_of_day_local)
|
|
221
286
|
|
|
222
287
|
level: str
|
|
223
288
|
if elapsed_min < gentle:
|
|
@@ -254,14 +319,21 @@ def _evaluate_hyperfocus(state: dict[str, Any]) -> str | None:
|
|
|
254
319
|
)
|
|
255
320
|
|
|
256
321
|
|
|
257
|
-
def _evaluate_rumination(
|
|
258
|
-
|
|
322
|
+
def _evaluate_rumination(
|
|
323
|
+
threshold: int = RUMINATION_THRESHOLD_DEFAULT,
|
|
324
|
+
window_minutes: int = RUMINATION_WINDOW_MINUTES_DEFAULT,
|
|
325
|
+
) -> str | None:
|
|
326
|
+
"""Jaccard-similarity rumination detector across recent prompts.
|
|
327
|
+
|
|
328
|
+
`threshold` and `window_minutes` come from `guardrails.*` in the
|
|
329
|
+
profile; both fall back to the module defaults.
|
|
330
|
+
"""
|
|
259
331
|
prompts = _load_prompts()
|
|
260
|
-
if len(prompts) <
|
|
332
|
+
if len(prompts) < threshold:
|
|
261
333
|
return None
|
|
262
|
-
window_start = _now() - timedelta(minutes=
|
|
334
|
+
window_start = _now() - timedelta(minutes=window_minutes)
|
|
263
335
|
recent = [p for p in prompts if _parse_iso(p.get("at", "")) >= window_start]
|
|
264
|
-
if len(recent) <
|
|
336
|
+
if len(recent) < threshold:
|
|
265
337
|
return None
|
|
266
338
|
# Compare the latest prompt to the others.
|
|
267
339
|
latest = recent[-1]["text"]
|
|
@@ -270,11 +342,11 @@ def _evaluate_rumination() -> str | None:
|
|
|
270
342
|
sim = _jaccard_similarity(latest, prior["text"])
|
|
271
343
|
if sim >= RUMINATION_SIMILARITY_DEFAULT:
|
|
272
344
|
matches += 1
|
|
273
|
-
if matches <
|
|
345
|
+
if matches < threshold - 1:
|
|
274
346
|
return None
|
|
275
347
|
return (
|
|
276
348
|
f"NeuroDock rumination check: you've asked a variant of this question "
|
|
277
|
-
f"{matches + 1} times in the last {
|
|
349
|
+
f"{matches + 1} times in the last {window_minutes} "
|
|
278
350
|
"minutes. Want to step back, or are you finding what you need?"
|
|
279
351
|
)
|
|
280
352
|
|
|
@@ -430,6 +502,129 @@ def _now() -> datetime:
|
|
|
430
502
|
return datetime.now(UTC).astimezone()
|
|
431
503
|
|
|
432
504
|
|
|
505
|
+
def _is_past_end_of_day(now: datetime, end_of_day_local: str | None) -> bool:
|
|
506
|
+
"""True if `now` is at/after the user's clock-out time, or in deep night.
|
|
507
|
+
|
|
508
|
+
When `end_of_day_local` ("HH:MM") is set, the hyperfocus nudge gets
|
|
509
|
+
stricter after that time (documented behaviour). When it is absent or
|
|
510
|
+
malformed, fall back to the deep/late-night clock band so behaviour is
|
|
511
|
+
unchanged for users who never set it.
|
|
512
|
+
"""
|
|
513
|
+
if not isinstance(end_of_day_local, str):
|
|
514
|
+
return _clock_band(now) in ("late_night", "deep_night")
|
|
515
|
+
match = re.match(r"^\s*(\d{1,2}):(\d{2})\s*$", end_of_day_local)
|
|
516
|
+
if match is None:
|
|
517
|
+
return _clock_band(now) in ("late_night", "deep_night")
|
|
518
|
+
hour, minute = int(match.group(1)), int(match.group(2))
|
|
519
|
+
if not (0 <= hour <= 23 and 0 <= minute <= 59):
|
|
520
|
+
return _clock_band(now) in ("late_night", "deep_night")
|
|
521
|
+
# Deep night (00:00–05:59) is always "past end of day" regardless of the
|
|
522
|
+
# configured clock-out — nobody sets end_of_day to 03:00 and means it.
|
|
523
|
+
if now.hour < 6:
|
|
524
|
+
return True
|
|
525
|
+
eod_minutes = hour * 60 + minute
|
|
526
|
+
now_minutes = now.hour * 60 + now.minute
|
|
527
|
+
return now_minutes >= eod_minutes
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
# ── Profile (stdlib-only scalar extraction from profile.yaml) ────────────
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
def _profile_path() -> Path:
|
|
534
|
+
"""Resolve profile.yaml with the same precedence as the CLI
|
|
535
|
+
(packages/cli/src/lib/paths.ts):
|
|
536
|
+
1. $NEURODOCK_PROFILE_PATH
|
|
537
|
+
2. $XDG_CONFIG_HOME/neurodock/profile.yaml
|
|
538
|
+
3. ~/.neurodock/profile.yaml
|
|
539
|
+
"""
|
|
540
|
+
override = os.environ.get("NEURODOCK_PROFILE_PATH", "").strip()
|
|
541
|
+
if override:
|
|
542
|
+
return Path(override)
|
|
543
|
+
xdg = os.environ.get("XDG_CONFIG_HOME", "").strip()
|
|
544
|
+
if xdg:
|
|
545
|
+
return Path(xdg) / "neurodock" / "profile.yaml"
|
|
546
|
+
return Path.home() / ".neurodock" / "profile.yaml"
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
def _load_profile_settings() -> dict[str, Any]:
|
|
550
|
+
"""Read the user's profile and return the guardrail-relevant scalars.
|
|
551
|
+
|
|
552
|
+
Never raises: a missing/unreadable/invalid profile yields {} and the
|
|
553
|
+
callers fall back to the module defaults.
|
|
554
|
+
"""
|
|
555
|
+
try:
|
|
556
|
+
path = _profile_path()
|
|
557
|
+
text = path.read_text(encoding="utf-8")
|
|
558
|
+
except (OSError, ValueError):
|
|
559
|
+
return {}
|
|
560
|
+
try:
|
|
561
|
+
return _parse_profile_text(text)
|
|
562
|
+
except Exception as exc: # never let a parse bug break a tool call
|
|
563
|
+
_log("profile-parse-error", {"error": str(exc)})
|
|
564
|
+
return {}
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
def _parse_profile_text(text: str) -> dict[str, Any]:
|
|
568
|
+
"""Pure scalar extraction from profile YAML — no YAML dependency.
|
|
569
|
+
|
|
570
|
+
The hook is stdlib-only (no pip install), and we only need a handful
|
|
571
|
+
of leaf scalars whose keys are unique across the schema, so a targeted
|
|
572
|
+
line-anchored regex is sufficient and robust against comment lines
|
|
573
|
+
(which begin with `#` and never match `^\\s*<key>:`).
|
|
574
|
+
"""
|
|
575
|
+
settings: dict[str, Any] = {}
|
|
576
|
+
|
|
577
|
+
hyperfocus = _extract_int(text, "hyperfocus_break_minutes")
|
|
578
|
+
if hyperfocus is not None:
|
|
579
|
+
settings["hyperfocus_break_minutes"] = _clamp(
|
|
580
|
+
hyperfocus, *HYPERFOCUS_BREAK_MIN_RANGE
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
threshold = _extract_int(text, "rumination_threshold")
|
|
584
|
+
if threshold is not None:
|
|
585
|
+
settings["rumination_threshold"] = _clamp(
|
|
586
|
+
threshold, *RUMINATION_THRESHOLD_RANGE
|
|
587
|
+
)
|
|
588
|
+
|
|
589
|
+
window = _extract_int(text, "rumination_window_minutes")
|
|
590
|
+
if window is not None:
|
|
591
|
+
settings["rumination_window_minutes"] = _clamp(
|
|
592
|
+
window, *RUMINATION_WINDOW_RANGE
|
|
593
|
+
)
|
|
594
|
+
|
|
595
|
+
eod = _extract_str(text, "end_of_day_local")
|
|
596
|
+
if eod is not None and re.match(r"^\d{1,2}:\d{2}$", eod):
|
|
597
|
+
settings["end_of_day_local"] = eod
|
|
598
|
+
|
|
599
|
+
syco = _extract_str(text, "sycophancy_check")
|
|
600
|
+
if syco in ("off", "warn", "refuse"):
|
|
601
|
+
settings["sycophancy_check"] = syco
|
|
602
|
+
|
|
603
|
+
return settings
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
def _extract_int(text: str, key: str) -> int | None:
|
|
607
|
+
match = re.search(
|
|
608
|
+
rf"^[ \t]*{re.escape(key)}[ \t]*:[ \t]*(\d+)\b",
|
|
609
|
+
text,
|
|
610
|
+
re.MULTILINE,
|
|
611
|
+
)
|
|
612
|
+
return int(match.group(1)) if match else None
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
def _extract_str(text: str, key: str) -> str | None:
|
|
616
|
+
match = re.search(
|
|
617
|
+
rf"^[ \t]*{re.escape(key)}[ \t]*:[ \t]*[\"']?([^\"'#\r\n]+?)[\"']?[ \t]*(?:#.*)?$",
|
|
618
|
+
text,
|
|
619
|
+
re.MULTILINE,
|
|
620
|
+
)
|
|
621
|
+
return match.group(1).strip() if match else None
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def _clamp(value: int, low: int, high: int) -> int:
|
|
625
|
+
return max(low, min(high, value))
|
|
626
|
+
|
|
627
|
+
|
|
433
628
|
# ── Payload extraction (best-effort against Claude Code shape) ───────────
|
|
434
629
|
|
|
435
630
|
|
|
@@ -515,12 +710,36 @@ def _parse_iso(value: str) -> datetime:
|
|
|
515
710
|
|
|
516
711
|
|
|
517
712
|
def _emit_banner(message: str) -> None:
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
713
|
+
"""Queue a banner for the end-of-invocation flush and record it in the
|
|
714
|
+
audit log. Surfacing happens in `_flush_banners` via Claude Code's
|
|
715
|
+
structured `systemMessage` output — NOT stderr, which only shows in
|
|
716
|
+
transcript/verbose mode (the pre-0.0.2 invisibility bug)."""
|
|
717
|
+
_PENDING_BANNERS.append(message)
|
|
521
718
|
_log("banner", {"message": message[:200]})
|
|
522
719
|
|
|
523
720
|
|
|
721
|
+
def _flush_banners() -> None:
|
|
722
|
+
"""Emit all queued banners as a single JSON object on stdout, exit 0.
|
|
723
|
+
|
|
724
|
+
`systemMessage` is Claude Code's documented non-blocking, user-visible
|
|
725
|
+
hook channel. We deliberately do NOT set any permission decision, so
|
|
726
|
+
the tool call proceeds untouched — the guardrail never blocks work.
|
|
727
|
+
Failures here are swallowed: a guardrail must never break a tool call.
|
|
728
|
+
"""
|
|
729
|
+
if not _PENDING_BANNERS:
|
|
730
|
+
return
|
|
731
|
+
try:
|
|
732
|
+
sys.stdout.write(_render_banner_payload(_PENDING_BANNERS))
|
|
733
|
+
sys.stdout.flush()
|
|
734
|
+
except Exception as exc:
|
|
735
|
+
_log("banner-flush-error", {"error": str(exc)})
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
def _render_banner_payload(banners: list[str]) -> str:
|
|
739
|
+
"""Build the JSON string Claude Code reads from stdout. Pure + testable."""
|
|
740
|
+
return json.dumps({"systemMessage": "\n".join(banners)})
|
|
741
|
+
|
|
742
|
+
|
|
524
743
|
def _log(event: str, data: dict[str, Any]) -> None:
|
|
525
744
|
try:
|
|
526
745
|
entry = {
|
|
@@ -556,7 +775,7 @@ def _self_test() -> int:
|
|
|
556
775
|
"""Smoke-test each heuristic against a known-trip and known-skip input."""
|
|
557
776
|
ok = True
|
|
558
777
|
|
|
559
|
-
# Hyperfocus: 200 min elapsed → hard level
|
|
778
|
+
# Hyperfocus: 200 min elapsed → hard level (default 90-min ladder)
|
|
560
779
|
fake_state = {
|
|
561
780
|
"started_at": (_now() - timedelta(minutes=200)).isoformat(),
|
|
562
781
|
"tool_count": 5,
|
|
@@ -572,6 +791,70 @@ def _self_test() -> int:
|
|
|
572
791
|
sys.stderr.write("FAIL: hyperfocus should not fire at 10 min\n")
|
|
573
792
|
ok = False
|
|
574
793
|
|
|
794
|
+
# Profile-driven threshold: a 60-min break setting must fire at 70 min
|
|
795
|
+
# elapsed (which is below the default 90-min gentle threshold of 54…
|
|
796
|
+
# wait: 54<70 so it would fire by default too — use 45 min vs a 30-min
|
|
797
|
+
# setting to prove the profile value, not the default, drives it).
|
|
798
|
+
short_state = {"started_at": (_now() - timedelta(minutes=45)).isoformat()}
|
|
799
|
+
if _evaluate_hyperfocus(short_state, break_minutes=90) is not None:
|
|
800
|
+
sys.stderr.write("FAIL: 45 min should NOT fire on a 90-min break\n")
|
|
801
|
+
ok = False
|
|
802
|
+
if _evaluate_hyperfocus(short_state, break_minutes=30) is None:
|
|
803
|
+
sys.stderr.write("FAIL: 45 min SHOULD fire on a 30-min break\n")
|
|
804
|
+
ok = False
|
|
805
|
+
|
|
806
|
+
# Profile parsing: extract scalars from a representative profile snippet.
|
|
807
|
+
sample_profile = (
|
|
808
|
+
"schema_version: \"0.1.0\"\n"
|
|
809
|
+
"chronometric:\n"
|
|
810
|
+
" # how long before a nudge\n"
|
|
811
|
+
" hyperfocus_break_minutes: 60\n"
|
|
812
|
+
" end_of_day_local: \"18:30\"\n"
|
|
813
|
+
"guardrails:\n"
|
|
814
|
+
" rumination_threshold: 4\n"
|
|
815
|
+
" rumination_window_minutes: 120\n"
|
|
816
|
+
" sycophancy_check: \"off\"\n"
|
|
817
|
+
)
|
|
818
|
+
parsed = _parse_profile_text(sample_profile)
|
|
819
|
+
expected = {
|
|
820
|
+
"hyperfocus_break_minutes": 60,
|
|
821
|
+
"end_of_day_local": "18:30",
|
|
822
|
+
"rumination_threshold": 4,
|
|
823
|
+
"rumination_window_minutes": 120,
|
|
824
|
+
"sycophancy_check": "off",
|
|
825
|
+
}
|
|
826
|
+
if parsed != expected:
|
|
827
|
+
sys.stderr.write(f"FAIL: profile parse: got {parsed!r}\n")
|
|
828
|
+
ok = False
|
|
829
|
+
|
|
830
|
+
# Profile parsing: out-of-range values are clamped to the valid range.
|
|
831
|
+
clamped = _parse_profile_text("hyperfocus_break_minutes: 9999\n")
|
|
832
|
+
if clamped.get("hyperfocus_break_minutes") != HYPERFOCUS_BREAK_MIN_RANGE[1]:
|
|
833
|
+
sys.stderr.write(f"FAIL: clamp out-of-range: {clamped!r}\n")
|
|
834
|
+
ok = False
|
|
835
|
+
|
|
836
|
+
# Profile parsing: an empty / commented profile yields no overrides.
|
|
837
|
+
if _parse_profile_text("# just a comment\nschema_version: \"0.1.0\"\n") != {}:
|
|
838
|
+
sys.stderr.write("FAIL: bare profile should yield no overrides\n")
|
|
839
|
+
ok = False
|
|
840
|
+
|
|
841
|
+
# End-of-day: 19:00 with an 18:30 clock-out is "past end of day".
|
|
842
|
+
evening = _now().replace(hour=19, minute=0, second=0, microsecond=0)
|
|
843
|
+
if not _is_past_end_of_day(evening, "18:30"):
|
|
844
|
+
sys.stderr.write("FAIL: 19:00 should be past an 18:30 end-of-day\n")
|
|
845
|
+
ok = False
|
|
846
|
+
midday = _now().replace(hour=12, minute=0, second=0, microsecond=0)
|
|
847
|
+
if _is_past_end_of_day(midday, "18:30"):
|
|
848
|
+
sys.stderr.write("FAIL: 12:00 should NOT be past an 18:30 end-of-day\n")
|
|
849
|
+
ok = False
|
|
850
|
+
|
|
851
|
+
# Banner payload: combined banners render as valid JSON with systemMessage.
|
|
852
|
+
payload = _render_banner_payload(["first banner", "second banner"])
|
|
853
|
+
decoded = json.loads(payload)
|
|
854
|
+
if decoded.get("systemMessage") != "first banner\nsecond banner":
|
|
855
|
+
sys.stderr.write(f"FAIL: banner payload shape: {payload!r}\n")
|
|
856
|
+
ok = False
|
|
857
|
+
|
|
575
858
|
# Sycophancy: positive case
|
|
576
859
|
sycophancy_text = "Absolutely! You're 100% right about this approach."
|
|
577
860
|
if _evaluate_sycophancy(sycophancy_text * 3) is None:
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neurodock setup` — the "turn on full NeuroDock" command the browser
|
|
3
|
+
* extension advertises. A thin orchestrator over the two existing
|
|
4
|
+
* installers, in order:
|
|
5
|
+
*
|
|
6
|
+
* 1. `runInstallAll` — install the 6 Python MCP servers, wire the
|
|
7
|
+
* MCP clients, and register the native-messaging host (unless
|
|
8
|
+
* `--no-native-host`).
|
|
9
|
+
* 2. `runInstallHooks` — wire the proactive-guardrail hooks into
|
|
10
|
+
* `~/.claude/settings.json`.
|
|
11
|
+
*
|
|
12
|
+
* The standalone Phase 3 daemon stays opt-in (`--daemon`), mirroring
|
|
13
|
+
* `install-hooks --install-daemon`: the daemon is documented there as
|
|
14
|
+
* optional — the Phase 1 Claude Code hook plus the Phase 2 extension
|
|
15
|
+
* watchdog cover the common cases, so the default `setup` path does not
|
|
16
|
+
* register login autostart on the user's machine.
|
|
17
|
+
*
|
|
18
|
+
* No installation logic lives here — both steps call the same runners
|
|
19
|
+
* the standalone `install-all` / `install-hooks` commands use, so the
|
|
20
|
+
* behaviours can never drift apart.
|
|
21
|
+
*/
|
|
22
|
+
import { runInstallAll as defaultRunInstallAll, type InstallAllResult, type InstallerChoice } from "./install-all.js";
|
|
23
|
+
import { runInstallHooks as defaultRunInstallHooks, type InstallHooksResult } from "./install-hooks.js";
|
|
24
|
+
import type { ClientId } from "../types.js";
|
|
25
|
+
export interface SetupOptions {
|
|
26
|
+
readonly client: ClientId | "all";
|
|
27
|
+
readonly profile: "minimal" | "example";
|
|
28
|
+
readonly installer: InstallerChoice;
|
|
29
|
+
readonly skipInstall: boolean;
|
|
30
|
+
readonly yes: boolean;
|
|
31
|
+
readonly dryRun: boolean;
|
|
32
|
+
readonly noNativeHost: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Opt-in: also register the standalone guardrail daemon at user-login
|
|
35
|
+
* autostart. Off by default — see the module comment above.
|
|
36
|
+
*/
|
|
37
|
+
readonly daemon: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface SetupDependencies {
|
|
40
|
+
/** Override the install-all runner. Tests inject a stub. */
|
|
41
|
+
readonly runInstallAll?: typeof defaultRunInstallAll;
|
|
42
|
+
/** Override the install-hooks runner. Tests inject a stub. */
|
|
43
|
+
readonly runInstallHooks?: typeof defaultRunInstallHooks;
|
|
44
|
+
}
|
|
45
|
+
export interface SetupResult {
|
|
46
|
+
readonly installAll: InstallAllResult;
|
|
47
|
+
readonly hooks: InstallHooksResult;
|
|
48
|
+
readonly messages: ReadonlyArray<string>;
|
|
49
|
+
/** install-all's exit code wins when non-zero; else 1 if hooks failed. */
|
|
50
|
+
readonly exitCode: number;
|
|
51
|
+
}
|
|
52
|
+
export declare function runSetup(options: SetupOptions, deps?: SetupDependencies): Promise<SetupResult>;
|
|
53
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACL,aAAa,IAAI,oBAAoB,EACrC,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,IAAI,sBAAsB,EACzC,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,oBAAoB,CAAC;IACrD,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAuEtB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
* Copyright (c) 2026 NeuroDock contributors.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `neurodock setup` — the "turn on full NeuroDock" command the browser
|
|
7
|
+
* extension advertises. A thin orchestrator over the two existing
|
|
8
|
+
* installers, in order:
|
|
9
|
+
*
|
|
10
|
+
* 1. `runInstallAll` — install the 6 Python MCP servers, wire the
|
|
11
|
+
* MCP clients, and register the native-messaging host (unless
|
|
12
|
+
* `--no-native-host`).
|
|
13
|
+
* 2. `runInstallHooks` — wire the proactive-guardrail hooks into
|
|
14
|
+
* `~/.claude/settings.json`.
|
|
15
|
+
*
|
|
16
|
+
* The standalone Phase 3 daemon stays opt-in (`--daemon`), mirroring
|
|
17
|
+
* `install-hooks --install-daemon`: the daemon is documented there as
|
|
18
|
+
* optional — the Phase 1 Claude Code hook plus the Phase 2 extension
|
|
19
|
+
* watchdog cover the common cases, so the default `setup` path does not
|
|
20
|
+
* register login autostart on the user's machine.
|
|
21
|
+
*
|
|
22
|
+
* No installation logic lives here — both steps call the same runners
|
|
23
|
+
* the standalone `install-all` / `install-hooks` commands use, so the
|
|
24
|
+
* behaviours can never drift apart.
|
|
25
|
+
*/
|
|
26
|
+
import { runInstallAll as defaultRunInstallAll, } from "./install-all.js";
|
|
27
|
+
import { runInstallHooks as defaultRunInstallHooks, } from "./install-hooks.js";
|
|
28
|
+
export async function runSetup(options, deps = {}) {
|
|
29
|
+
const installAll = deps.runInstallAll ?? defaultRunInstallAll;
|
|
30
|
+
const installHooks = deps.runInstallHooks ?? defaultRunInstallHooks;
|
|
31
|
+
const messages = [];
|
|
32
|
+
messages.push("Step 1/2: install MCP servers, wire clients, register native host");
|
|
33
|
+
messages.push("");
|
|
34
|
+
const installAllResult = await installAll({
|
|
35
|
+
client: options.client,
|
|
36
|
+
profile: options.profile,
|
|
37
|
+
installer: options.installer,
|
|
38
|
+
skipInstall: options.skipInstall,
|
|
39
|
+
yes: options.yes,
|
|
40
|
+
dryRun: options.dryRun,
|
|
41
|
+
noNativeHost: options.noNativeHost,
|
|
42
|
+
});
|
|
43
|
+
messages.push(...installAllResult.messages);
|
|
44
|
+
// Run the hooks step even when install-all reported a problem: the
|
|
45
|
+
// guardrail hooks only need Python, so a PATH hiccup with the MCP
|
|
46
|
+
// entrypoints should not leave the user without proactive guardrails.
|
|
47
|
+
messages.push("");
|
|
48
|
+
messages.push("Step 2/2: install Claude Code guardrail hooks");
|
|
49
|
+
messages.push("");
|
|
50
|
+
const hooksResult = await installHooks({
|
|
51
|
+
dryRun: options.dryRun,
|
|
52
|
+
selfTest: false,
|
|
53
|
+
uninstall: false,
|
|
54
|
+
installDaemon: options.daemon,
|
|
55
|
+
});
|
|
56
|
+
messages.push(...hooksResult.messages);
|
|
57
|
+
const exitCode = installAllResult.exitCode !== 0
|
|
58
|
+
? installAllResult.exitCode
|
|
59
|
+
: hooksResult.exitCode !== 0
|
|
60
|
+
? 1
|
|
61
|
+
: 0;
|
|
62
|
+
messages.push("");
|
|
63
|
+
if (exitCode === 0) {
|
|
64
|
+
messages.push(options.dryRun
|
|
65
|
+
? "Dry run finished — nothing was written."
|
|
66
|
+
: "Setup complete. NeuroDock is fully wired.");
|
|
67
|
+
if (!options.daemon) {
|
|
68
|
+
messages.push("Optional: 'neurodock setup --daemon' also registers the standalone guardrail daemon at login.");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
messages.push("Setup finished with problems — see the messages above. Re-run the failing step directly:");
|
|
73
|
+
if (installAllResult.exitCode !== 0) {
|
|
74
|
+
messages.push(" neurodock install-all");
|
|
75
|
+
}
|
|
76
|
+
if (hooksResult.exitCode !== 0) {
|
|
77
|
+
messages.push(" neurodock install-hooks");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
installAll: installAllResult,
|
|
82
|
+
hooks: hooksResult,
|
|
83
|
+
messages,
|
|
84
|
+
exitCode,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACL,aAAa,IAAI,oBAAoB,GAGtC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,IAAI,sBAAsB,GAE1C,MAAM,oBAAoB,CAAC;AAiC5B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAqB,EACrB,OAA0B,EAAE;IAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC;IACpE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CACX,mEAAmE,CACpE,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE5C,mEAAmE;IACnE,kEAAkE;IAClE,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,OAAO,CAAC,MAAM;KAC9B,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GACZ,gBAAgB,CAAC,QAAQ,KAAK,CAAC;QAC7B,CAAC,CAAC,gBAAgB,CAAC,QAAQ;QAC3B,CAAC,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,CAAC,CAAC;IAEV,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC,MAAM;YACZ,CAAC,CAAC,yCAAyC;YAC3C,CAAC,CAAC,2CAA2C,CAChD,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,+FAA+F,CAChG,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CACX,0FAA0F,CAC3F,CAAC;QACF,IAAI,gBAAgB,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,WAAW,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,KAAK,EAAE,WAAW;QAClB,QAAQ;QACR,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,eAAO,MAAM,WAAW,QAAsB,CAAC;AAE/C,wBAAgB,YAAY,IAAI,OAAO,CAkmBtC"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { runHostInstall, runHostUninstall } from "./commands/host.js";
|
|
|
19
19
|
import { runInstallHooks } from "./commands/install-hooks.js";
|
|
20
20
|
import { runGuardrailStatus } from "./commands/guardrail.js";
|
|
21
21
|
import { runInstallAll } from "./commands/install-all.js";
|
|
22
|
+
import { runSetup } from "./commands/setup.js";
|
|
22
23
|
import { runExamples } from "./commands/examples.js";
|
|
23
24
|
import { runPluginAdd, runPluginRemove, runPluginList, runPluginEnable, runPluginDisable, runPluginValidate, } from "./commands/plugin.js";
|
|
24
25
|
import { colorEnabled } from "./lib/env.js";
|
|
@@ -98,6 +99,38 @@ export function buildProgram() {
|
|
|
98
99
|
print(m);
|
|
99
100
|
process.exit(r.exitCode);
|
|
100
101
|
});
|
|
102
|
+
program
|
|
103
|
+
.command("setup")
|
|
104
|
+
.description("full setup in one command: runs install-all (6 MCP servers + client " +
|
|
105
|
+
"wiring + native-messaging host) then install-hooks (Claude Code " +
|
|
106
|
+
"guardrail hooks); the standalone daemon is opt-in via --daemon")
|
|
107
|
+
.option("--client <id>", "claude-desktop | claude-code | cursor | all", "all")
|
|
108
|
+
.option("--profile <id>", "minimal | example", "example")
|
|
109
|
+
.option("--installer <id>", "uv | pip | auto", "auto")
|
|
110
|
+
.option("--skip-install", "skip the Python install step (only wire clients + hooks)", false)
|
|
111
|
+
.option("--yes", "answer yes to all prompts (idempotent re-runs, collisions)", false)
|
|
112
|
+
.option("--dry-run", "print what would happen without writing anything", false)
|
|
113
|
+
.option("--no-native-host", "skip registering the optional native-messaging host (browser extension <-> profile.yaml)")
|
|
114
|
+
.option("--daemon", "also register the optional standalone guardrail daemon at user-login " +
|
|
115
|
+
"autostart (off by default — the Claude Code hook covers the common cases)", false)
|
|
116
|
+
.action(async (opts) => {
|
|
117
|
+
const client = validateClient(opts.client);
|
|
118
|
+
const profile = validateProfile(opts.profile);
|
|
119
|
+
const installer = validateInstaller(opts.installer);
|
|
120
|
+
const r = await runSetup({
|
|
121
|
+
client,
|
|
122
|
+
profile,
|
|
123
|
+
installer,
|
|
124
|
+
skipInstall: opts.skipInstall === true,
|
|
125
|
+
yes: opts.yes === true,
|
|
126
|
+
dryRun: opts.dryRun === true,
|
|
127
|
+
noNativeHost: opts.nativeHost === false,
|
|
128
|
+
daemon: opts.daemon === true,
|
|
129
|
+
});
|
|
130
|
+
for (const m of r.messages)
|
|
131
|
+
print(m);
|
|
132
|
+
process.exit(r.exitCode);
|
|
133
|
+
});
|
|
101
134
|
program
|
|
102
135
|
.command("examples")
|
|
103
136
|
.description("print copy-pasteable prompts that exercise every wired NeuroDock MCP tool")
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neurodock/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "NeuroDock installer and diagnostic CLI — wires the MCP servers, manages plugins, and validates your profile.",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"type": "module",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"yaml": "^2.6.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@types/node": "^22.
|
|
53
|
+
"@types/node": "^22.19.20",
|
|
54
54
|
"@types/prompts": "^2.4.9",
|
|
55
55
|
"rimraf": "^6.0.1",
|
|
56
|
-
"tsx": "^4.
|
|
56
|
+
"tsx": "^4.22.4",
|
|
57
57
|
"typescript": "^5.7.2",
|
|
58
|
-
"vitest": "^3.2.
|
|
58
|
+
"vitest": "^3.2.6"
|
|
59
59
|
},
|
|
60
60
|
"engines": {
|
|
61
61
|
"node": ">=22"
|