@dungle-scrubs/harness-cli-normalizer 0.3.0 → 0.4.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 (107) hide show
  1. package/README.md +70 -86
  2. package/dist/cli/args.d.ts +11 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +23 -5
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/config.d.ts +25 -0
  7. package/dist/cli/config.d.ts.map +1 -0
  8. package/dist/cli/config.js +139 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/index.d.ts +2 -0
  11. package/dist/cli/index.d.ts.map +1 -1
  12. package/dist/cli/index.js +25 -9
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/cli/inspect.d.ts.map +1 -1
  15. package/dist/cli/inspect.js +35 -1
  16. package/dist/cli/inspect.js.map +1 -1
  17. package/dist/cli/render.d.ts.map +1 -1
  18. package/dist/cli/render.js +10 -1
  19. package/dist/cli/render.js.map +1 -1
  20. package/dist/cli/run.d.ts.map +1 -1
  21. package/dist/cli/run.js +134 -4
  22. package/dist/cli/run.js.map +1 -1
  23. package/dist/cli.js +2 -1
  24. package/dist/execution/failure.d.ts +21 -4
  25. package/dist/execution/failure.d.ts.map +1 -1
  26. package/dist/execution/failure.js +26 -3
  27. package/dist/execution/failure.js.map +1 -1
  28. package/dist/execution/stream-turn.d.ts +7 -1
  29. package/dist/execution/stream-turn.d.ts.map +1 -1
  30. package/dist/execution/stream-turn.js +43 -20
  31. package/dist/execution/stream-turn.js.map +1 -1
  32. package/dist/interpretation/argv.d.ts +1 -0
  33. package/dist/interpretation/argv.d.ts.map +1 -1
  34. package/dist/interpretation/argv.js +13 -19
  35. package/dist/interpretation/argv.js.map +1 -1
  36. package/dist/interpretation/hints.d.ts +22 -0
  37. package/dist/interpretation/hints.d.ts.map +1 -0
  38. package/dist/interpretation/hints.js +59 -0
  39. package/dist/interpretation/hints.js.map +1 -0
  40. package/dist/interpretation/refusal.d.ts +25 -4
  41. package/dist/interpretation/refusal.d.ts.map +1 -1
  42. package/dist/interpretation/refusal.js +16 -0
  43. package/dist/interpretation/refusal.js.map +1 -1
  44. package/dist/interpretation/resolve-options.d.ts +42 -0
  45. package/dist/interpretation/resolve-options.d.ts.map +1 -0
  46. package/dist/interpretation/resolve-options.js +140 -0
  47. package/dist/interpretation/resolve-options.js.map +1 -0
  48. package/dist/interpretation/store.js +1 -1
  49. package/dist/interpretation/support.d.ts +32 -0
  50. package/dist/interpretation/support.d.ts.map +1 -0
  51. package/dist/interpretation/support.js +107 -0
  52. package/dist/interpretation/support.js.map +1 -0
  53. package/dist/interpretation/tool-selection.d.ts +29 -0
  54. package/dist/interpretation/tool-selection.d.ts.map +1 -0
  55. package/dist/interpretation/tool-selection.js +122 -0
  56. package/dist/interpretation/tool-selection.js.map +1 -0
  57. package/dist/interpretation/turn-options.d.ts.map +1 -1
  58. package/dist/interpretation/turn-options.js +4 -0
  59. package/dist/interpretation/turn-options.js.map +1 -1
  60. package/dist/knowledge/claude-code.d.ts +2 -2
  61. package/dist/knowledge/claude-code.d.ts.map +1 -1
  62. package/dist/knowledge/claude-code.js +37 -4
  63. package/dist/knowledge/claude-code.js.map +1 -1
  64. package/dist/knowledge/codex.d.ts.map +1 -1
  65. package/dist/knowledge/codex.js +19 -0
  66. package/dist/knowledge/codex.js.map +1 -1
  67. package/dist/knowledge/descriptor.d.ts +32 -0
  68. package/dist/knowledge/descriptor.d.ts.map +1 -1
  69. package/dist/knowledge/muse.d.ts.map +1 -1
  70. package/dist/knowledge/muse.js +22 -0
  71. package/dist/knowledge/muse.js.map +1 -1
  72. package/dist/knowledge/pi.d.ts +1 -1
  73. package/dist/knowledge/pi.d.ts.map +1 -1
  74. package/dist/knowledge/pi.js +29 -6
  75. package/dist/knowledge/pi.js.map +1 -1
  76. package/dist/knowledge/profile.d.ts +13 -0
  77. package/dist/knowledge/profile.d.ts.map +1 -0
  78. package/dist/knowledge/profile.js +31 -0
  79. package/dist/knowledge/profile.js.map +1 -0
  80. package/package.json +2 -23
  81. package/src/cli/args.ts +31 -1
  82. package/src/cli/config.ts +166 -0
  83. package/src/cli/index.ts +25 -12
  84. package/src/cli/inspect.ts +34 -1
  85. package/src/cli/render.ts +10 -1
  86. package/src/cli/run.ts +161 -5
  87. package/src/execution/failure.ts +44 -5
  88. package/src/execution/stream-turn.ts +43 -14
  89. package/src/interpretation/argv.ts +14 -19
  90. package/src/interpretation/hints.ts +99 -0
  91. package/src/interpretation/refusal.ts +32 -3
  92. package/src/interpretation/resolve-options.ts +190 -0
  93. package/src/interpretation/store.ts +1 -1
  94. package/src/interpretation/support.ts +119 -0
  95. package/src/interpretation/tool-selection.ts +161 -0
  96. package/src/interpretation/turn-options.ts +4 -0
  97. package/src/knowledge/claude-code.ts +37 -4
  98. package/src/knowledge/codex.ts +19 -0
  99. package/src/knowledge/descriptor.ts +32 -0
  100. package/src/knowledge/muse.ts +22 -0
  101. package/src/knowledge/pi.ts +29 -6
  102. package/src/knowledge/profile.ts +33 -0
  103. package/dist/index.d.ts +0 -8
  104. package/dist/index.d.ts.map +0 -1
  105. package/dist/index.js +0 -8
  106. package/dist/index.js.map +0 -1
  107. package/src/index.ts +0 -7
package/README.md CHANGED
@@ -4,8 +4,8 @@ One stable interface to four coding-agent CLIs.
4
4
 
5
5
  [![CI](https://github.com/dungle-scrubs/harness-cli-normalizer/actions/workflows/ci.yml/badge.svg)](https://github.com/dungle-scrubs/harness-cli-normalizer/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/@dungle-scrubs/harness-cli-normalizer.svg)](https://www.npmjs.com/package/@dungle-scrubs/harness-cli-normalizer) [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
6
6
 
7
- <!-- D-001 -->
8
- harness-cli-normalizer describes Claude Code, Codex, pi, and Muse as pure data and normalizes their headless output to a single `HarnessEvent` stream. You build one consumer against that stream instead of a separate spawn-and-parse path per CLI - the execution layer spawns the harness and emits the events. Use it for multi-agent work like an orchestrator, observer, benchmark rig, or to swap agents. Descriptors are pinned to their verified CLI version and a weekly check flags when a harness has moved ahead.
7
+ <!-- D-001 / v1: CLI-only -->
8
+ harness-cli-normalizer is a CLI, `hcn`, that normalizes four coding-agent harnesses - Claude Code, Codex, pi, and Muse - into one surface: normalized flags, ratified behavior defaults, a single `HarnessEvent` NDJSON stream, and one exit-code contract. It normalizes the interface and the defaults, and reports divergence where a harness cannot express a dimension - it does not pretend parity. There is no library API; the `hcn` binary is the product. Descriptors are pinned to their verified CLI version and a weekly check flags when a harness has moved ahead (npm harnesses via registry; `muse` via local `muse --version`, skipped in CI where not installed - see Version-pinning and drift).
9
9
 
10
10
  ```bash
11
11
  pnpm add @dungle-scrubs/harness-cli-normalizer
@@ -22,47 +22,9 @@ pnpm add @dungle-scrubs/harness-cli-normalizer
22
22
  The repository uses pnpm and Bun for development and its dual-runtime test lane. Consumers do not
23
23
  need either one unless their application runs on Bun.
24
24
 
25
- ## Use it
26
-
27
- One-shot headless turn, the simplest path:
28
-
29
- ```ts
30
- import {
31
- claudeCode,
32
- nodeRunnerDeps,
33
- streamTurn,
34
- } from "@dungle-scrubs/harness-cli-normalizer";
35
-
36
- for await (const event of streamTurn(
37
- claudeCode,
38
- { prompt: "explain a monad in one sentence", cwd: process.cwd() },
39
- nodeRunnerDeps(),
40
- )) {
41
- if (event.kind === "message") console.log(event.text);
42
- if (event.kind === "done") console.log(`exit: ${event.cause}`);
43
- }
44
- ```
45
-
46
- Swap `claudeCode` for `codexCli`, `piCli`, or `museCode` and the consumer code does not change. The
47
- three layers are also available as `@dungle-scrubs/harness-cli-normalizer/knowledge`,
48
- `@dungle-scrubs/harness-cli-normalizer/interpretation`, and
49
- `@dungle-scrubs/harness-cli-normalizer/execution` for narrower imports.
50
-
51
- To watch the normalized stream render live against a real harness:
52
-
53
- ```bash
54
- bun run demo claude "explain a monad in one sentence"
55
- bun run demo codex "what is 2+2"
56
- bun run demo pi "name three primes"
57
- bun run demo muse "say hi"
58
- bun run demo --chat claude # interactive session (claude only)
59
- ```
60
-
61
- For a multi-turn session you drive yourself, `openSession` returns a handle whose `turns` you iterate and whose `send()` you call between turns. See `scripts/demo.ts` for the working pattern.
62
-
63
25
  ## CLI
64
26
 
65
- The package ships a `hcn` binary for shell and CI use. Install it with your package manager or run it ad-hoc with `npx`:
27
+ The package ships a `hcn` binary for shell and CI use. This is the primary interface - use it for one-off turns, sessions, and inspection without writing TypeScript. Install it with your package manager or run it ad-hoc with `npx`:
66
28
 
67
29
  ```bash
68
30
  pnpm add @dungle-scrubs/harness-cli-normalizer
@@ -113,7 +75,9 @@ Flag table (maps to `TurnOptions` / `TurnRunOptions`):
113
75
  | `--effort <value>` | `effort` | Validated via `validateEffort` |
114
76
  | `--sandbox <value>` | `sandbox` | Codex only |
115
77
  | `--provider <value>` | `provider` | pi only |
116
- | `--tools <a,b>` | `tools` | Claude only, comma-separated |
78
+ | `--tools <a,b>` | `tools` | Per-tool allowlist; claude and pi (pi strict, claude via grant + deny-complement). A bare name matching a configured toolset expands to it |
79
+ | `--exclude-tools <a,b>` | `excludeTools` | Complement over known tool names; mutually exclusive with `--tools` |
80
+ | `-- <harness args>` | `passthrough` | Verbatim harness tokens; failures surface as labeled native errors (hcn exit 1, native exit code as data) |
117
81
  | `--autonomy` / `--no-autonomy` | `autonomy` | |
118
82
  | `--write` / `--no-write` | `write` | Muse |
119
83
  | `--shell` / `--no-shell` | `shell` | Muse |
@@ -126,62 +90,69 @@ Flag table (maps to `TurnOptions` / `TurnRunOptions`):
126
90
 
127
91
  For development, `bun run demo claude "hi"` remains as a live-rendering alternative.
128
92
 
129
- ## Concepts
93
+ ## Defaults, config, provenance
130
94
 
131
- ### Descriptors are data, not behavior
95
+ Every launch resolves through one precedence chain:
132
96
 
133
- Each harness is a frozen record of facts: its binary, its argv shapes, its stream flags, its session and resume grammar, its capability claims, and the CLI version those facts were checked against. You read a descriptor; you do not configure or subclass it. Adding a fifth harness means writing a new data file, not editing branching logic.
97
+ ```
98
+ args > .hcn/config.json (git root, auto-discovered) > ~/.config/hcn/config.json (XDG) > built-in profile > harness default
99
+ ```
134
100
 
135
- ### Three layers, one direction
101
+ The built-in profile pins the ratified defaults: effort `medium` (the only
102
+ value in all four ladders), sandbox `workspace-write` (codex-only; reported
103
+ as divergence elsewhere), discovery fully on, autonomy off. A dimension a
104
+ harness cannot express is reported as divergence, never a silent skip and
105
+ never a refusal. Resume turns bypass resolution entirely - a session keeps
106
+ its own settings.
136
107
 
108
+ User config (`~/.config/hcn/config.json`, `$XDG_CONFIG_HOME` respected):
109
+
110
+ ```json
111
+ { "version": 1, "effort": "high" }
137
112
  ```
138
- knowledge (pure data) -> interpretation (pure functions) -> execution (child process)
113
+
114
+ Project config (`.hcn/config.json` at the git root, code-reviewed with the
115
+ repo) also carries tool floors and named toolsets:
116
+
117
+ ```json
118
+ {
119
+ "version": 1,
120
+ "effort": "low",
121
+ "tools": ["read", "grep", "find", "ls"],
122
+ "toolsets": { "review": ["read", "grep"] }
123
+ }
139
124
  ```
140
125
 
141
- `knowledge` and `interpretation` are 100% pure: no `node:` imports, no `process.env`, no clock, no randomness. Tests enforce this, not comments. Keep your own logic in the pure layers and reach `execution` only for actual process I/O. The execution layer never imports `child_process`; spawning, timing, and signalling arrive as injected primitives, so it runs the same on Node and Bun.
126
+ The project `tools` key is both the default grant and the FLOOR: a `--tools`
127
+ arg exceeding it refuses with exit 2 naming both sets - never a silent
128
+ clamp. An empty floor refuses every grant (the turn-everything-off
129
+ workflow). Config parsing is hard-fail: unknown keys, malformed JSON, or a
130
+ version mismatch exit 2 naming the offender.
142
131
 
143
- ### Version-pinning and drift
132
+ Every resolved setting prints its provenance to stderr:
144
133
 
145
- Every descriptor carries a `verifiedAgainst` version, the anchor for all of its facts. A weekly CI job compares each harness's published version to its descriptor and opens a tracking issue when one has moved ahead. Trust a descriptor only at its pinned version, and bump `verifiedAgainst` only after re-running the capability checks locally.
134
+ ```
135
+ provenance: effort = "high" (user-config)
136
+ provenance: discovery = {"tools":true,...} (profile)
137
+ divergence: profile "sandbox" not expressible on pi; harness default applies
138
+ ```
146
139
 
147
- ## Turn options
140
+ ## Concepts
148
141
 
149
- Every `streamTurn` call can now shape the turn per-call without touching the descriptor:
142
+ Three layers, one direction: `knowledge` (frozen descriptors - facts about
143
+ each CLI, stamped to `verifiedAgainst`) feeds `interpretation` (pure
144
+ functions - argv construction, validation, refusals, option resolution)
145
+ feeds `execution` (process lifecycle - the only impure layer, through an
146
+ injected `{ spawn, clock, signal }` adapter). The source is public and the
147
+ layers are real, but they are internal structure, not an install surface:
148
+ from 1.0 the `hcn` CLI is the only supported interface.
150
149
 
151
- ```ts
152
- await streamTurn(claudeCode, {
153
- prompt: "explain a monad",
154
- effort: "high", // --effort (claude), -c model_reasoning_effort (codex), --thinking (pi), --reasoning-effort (muse)
155
- provider: "zai/glm-5.2", // --provider (pi only)
156
- discovery: { tools: false, instructionFiles: false, extensions: false, skills: false }, // -nt/-nc/-ne/-ns (pi) or --setting-sources project (claude)
157
- write: false, // --disable-write (muse)
158
- shell: false, // --disable-shell (muse)
159
- maxSteps: 50, // --max-model-steps (muse)
160
- sandbox: "read-only", // --sandbox (codex, launch only)
161
- }, deps);
162
- ```
163
-
164
- Support matrix (anything not marked refuses with a typed `ArgvRefusalError` naming what the harness does support):
165
-
166
- | Option | claude | codex | pi | muse |
167
- | --- | --- | --- | --- | --- |
168
- | `effort` | `--effort` | `-c model_reasoning_effort=` | `--thinking` | `--reasoning-effort` |
169
- | `sandbox` | - | `--sandbox` (launch only) | - | - |
170
- | `provider` | - | - | `--provider` | - |
171
- | `discovery.tools` | - | - | `-nt` | - |
172
- | `discovery.instructionFiles` | - | - | `-nc` | - |
173
- | `discovery.extensions` | `--setting-sources project` | - | `-ne` | - |
174
- | `discovery.skills` | `--setting-sources project` | - | `-ns` | - |
175
- | `write` | - | - | - | `--disable-write` |
176
- | `shell` | - | - | - | `--disable-shell` |
177
- | `maxSteps` | - | - | - | `--max-model-steps` |
178
- | `tools` | `--allowedTools` | - | - | - |
179
-
180
- Per-call `env` is merged over the parent environment (`""` deletes) and never appears in logs:
150
+ A harness that cannot express an option REFUSES rather than guessing -
151
+ refusals carry structured fields (`supportedBy`: which harnesses express
152
+ it, with native spellings; `hint`: the nearest alternative on your current
153
+ harness). A native flag typed before `--` is recognized and redirected to
154
+ its normalized spelling.
181
155
 
182
- ```ts
183
- streamTurn(harness, { prompt, env: { FOO: "bar", OLD: "" } }, deps);
184
- ```
185
156
 
186
157
  ## Failure taxonomy
187
158
 
@@ -229,7 +200,20 @@ See [CONTRIBUTING.md](CONTRIBUTING.md). The short version: run `pnpm check` befo
229
200
 
230
201
  ## Status
231
202
 
232
- Pre-1.0. Four harnesses are described (Claude Code, Codex, pi, Muse). Drift detection runs weekly in CI; re-verifying a descriptor's capability claims against a new CLI version is a local, manual step (`bun run smoke:seven`), not CI. Authentication and usage-limit signals are parsed from each harness's stream, but this library never holds or ships credentials; each harness authenticates under the end user's own session.
203
+ 1.0. CLI-only surface. Four harnesses are described (Claude Code, Codex,
204
+ pi, Muse); one-shot turns are normalized across all four with a ratified
205
+ defaults profile, user and project config tiers, tool selection
206
+ (include/exclude with floors and named toolsets), passthrough with native
207
+ error labeling, and provenance on every resolved setting. Persistent
208
+ sessions (`hcn session`) remain Claude-only. Drift detection runs weekly
209
+ in CI for the three npm harnesses; Muse is `installed` and only checked
210
+ locally via `muse --version`. Re-verifying a descriptor's capability
211
+ claims against a new CLI version is a local, manual step
212
+ (`bun run smoke:seven`) plus fixture re-capture, not CI. Authentication
213
+ and usage-limit signals are parsed from each harness's stream, but hcn
214
+ never holds or ships credentials; each harness authenticates under the
215
+ end user's own session.
216
+
233
217
 
234
218
  ## Prior art
235
219
 
@@ -68,6 +68,17 @@ export declare const detectPositionalPromptInjection: (argv: string[]) => string
68
68
  * Wrapper around node:util parseArgs for the common flag table.
69
69
  * Throws with exit code 2 on unknown flag.
70
70
  */
71
+ export interface SplitPassthrough {
72
+ /** Tokens before the separator - hcn's normalized surface. */
73
+ readonly normalized: string[];
74
+ /** Tokens after the separator - verbatim passthrough to the harness,
75
+ * empty when no separator was present. */
76
+ readonly passthrough: readonly string[];
77
+ }
78
+ /** D6: split argv at the first bare `--`. Everything after it belongs to
79
+ * the harness, not to hcn - wrong-harness flags there fail in the harness
80
+ * itself and surface as native errors, never as hcn refusals. */
81
+ export declare const splitPassthrough: (argv: readonly string[]) => SplitPassthrough;
71
82
  export declare const parseCommonFlags: (argv: string[], opts?: {
72
83
  strict?: boolean;
73
84
  }) => ReturnType<typeof parseArgs>;
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG/E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,cAAe,SAAQ,WAAW;CAElD;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AASD;;GAEG;AACH,eAAO,MAAM,eAAe,YACjB,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,KACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SA4B3B,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAA;CAkCvD,CAAC;AAEF,eAAO,MAAM,kBAAkB,SAAgB;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAA;CAAE,CAiCjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,WAyDlE,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAW/D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAgDD,eAAO,MAAM,+BAA+B,SAAU,MAAM,EAAE,KAAG,MAAM,GAAG,IAmCzE,CAAC;AAwBF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,SACrB,MAAM,EAAE,SACR;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,KACzB,UAAU,CAAC,OAAO,SAAS,CAoC7B,CAAC"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
package/dist/cli/args.js CHANGED
@@ -130,6 +130,10 @@ export const parseTurnOptions = (values) => {
130
130
  const raw = String(values.tools);
131
131
  opts.tools = raw.length === 0 ? [] : raw.split(",").map((s) => s.trim());
132
132
  }
133
+ if (values["exclude-tools"] !== undefined) {
134
+ const raw = String(values["exclude-tools"]);
135
+ opts.excludeTools = raw.length === 0 ? [] : raw.split(",").map((s) => s.trim());
136
+ }
133
137
  if (values.autonomy === true)
134
138
  opts.autonomy = true;
135
139
  else if (values["no-autonomy"] === true)
@@ -204,6 +208,7 @@ const KNOWN_FLAGS = new Set([
204
208
  "--sandbox",
205
209
  "--provider",
206
210
  "--tools",
211
+ "--exclude-tools",
207
212
  "--autonomy",
208
213
  "--no-autonomy",
209
214
  "--write",
@@ -234,6 +239,7 @@ const FLAGS_WITH_VALUE = new Set([
234
239
  "--sandbox",
235
240
  "--provider",
236
241
  "--tools",
242
+ "--exclude-tools",
237
243
  "--max-steps",
238
244
  "--cwd",
239
245
  "--env",
@@ -295,12 +301,23 @@ const preprocessPromptArgs = (argv) => {
295
301
  }
296
302
  return out;
297
303
  };
298
- /**
299
- * Wrapper around node:util parseArgs for the common flag table.
300
- * Throws with exit code 2 on unknown flag.
301
- */
304
+ /** D6: split argv at the first bare `--`. Everything after it belongs to
305
+ * the harness, not to hcn - wrong-harness flags there fail in the harness
306
+ * itself and surface as native errors, never as hcn refusals. */
307
+ export const splitPassthrough = (argv) => {
308
+ const idx = argv.indexOf("--");
309
+ if (idx === -1)
310
+ return { normalized: [...argv], passthrough: [] };
311
+ return {
312
+ normalized: argv.slice(0, idx),
313
+ passthrough: argv.slice(idx + 1),
314
+ };
315
+ };
302
316
  export const parseCommonFlags = (argv, opts = {}) => {
303
- const normalized = preprocessPromptArgs(argv);
317
+ // The separator itself never reaches parseArgs: passthrough tokens may
318
+ // be unknown to hcn by design (that is their purpose).
319
+ const { normalized: withoutPassthrough } = splitPassthrough(argv);
320
+ const normalized = preprocessPromptArgs(withoutPassthrough);
304
321
  const config = {
305
322
  allowPositionals: true,
306
323
  strict: opts.strict ?? true,
@@ -312,6 +329,7 @@ export const parseCommonFlags = (argv, opts = {}) => {
312
329
  sandbox: { type: "string" },
313
330
  provider: { type: "string" },
314
331
  tools: { type: "string" },
332
+ "exclude-tools": { type: "string" },
315
333
  autonomy: { type: "boolean" },
316
334
  "no-autonomy": { type: "boolean" },
317
335
  write: { type: "boolean" },
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { TurnOptions } from "../interpretation/argv.js";
2
+ export declare class ConfigError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare const userConfigPath: () => string;
6
+ /** Project config: `.hcn/config.json` at the git root (P4 ratified as A -
7
+ * auto-discover, no trust gate; the config is code-reviewed like AGENTS.md
8
+ * and every project-tier provenance line names its path). Null outside a
9
+ * repo or when the repo declares none. */
10
+ export declare const projectConfigPath: (startDir?: string) => string | null;
11
+ /** Parse + validate config text. Throws ConfigError with the offending key
12
+ * named on any violation - never warns and continues. */
13
+ export declare const parseUserConfig: (text: string) => Partial<TurnOptions>;
14
+ /** Load the user config if the file exists; absent file is an empty config
15
+ * (no tiers engaged), unreadable or invalid file is a hard error. */
16
+ export declare const loadUserConfig: () => {
17
+ config: Partial<TurnOptions>;
18
+ path: string;
19
+ } | null;
20
+ /** Load the project config (git-root auto-discovery, ratified A). */
21
+ export declare const loadProjectConfig: (startDir?: string) => {
22
+ config: Partial<TurnOptions>;
23
+ path: string;
24
+ } | null;
25
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAI7D,qBAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,eAAO,MAAM,cAAc,QAAO,MAK/B,CAAC;AAEJ;;;0CAG0C;AAC1C,eAAO,MAAM,iBAAiB,cAAc,MAAM,KAAmB,MAAM,GAAG,IAY7E,CAAC;AAuBF;yDACyD;AACzD,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAAO,CAAC,WAAW,CAiEjE,CAAC;AAEF;qEACqE;AACrE,eAAO,MAAM,cAAc,QAAO;IAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IACnD,CAAC;AAEjC,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,cACjB,MAAM,KAChB;IAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAInD,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * User-level config: ~/.config/hcn/config.json (or $HCN_CONFIG_DIR for
3
+ * tests). Hard-fail discipline: unknown keys, malformed JSON, and schema
4
+ * version mismatches exit 2 naming the offender - a config that silently
5
+ * no-ops is a safety hole in a tool whose config can tighten a sandbox.
6
+ *
7
+ * Schema is intentionally minimal and mirrors the normalized option
8
+ * surface; it grows as dimensions ratify. The parser validates SHAPE
9
+ * (key known, value type plausible); value legality (effort in ladder,
10
+ * model in vocabulary) is enforced by the same renderers as args, so
11
+ * config and CLI can never disagree about what is legal.
12
+ */
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ import { homedir } from "node:os";
15
+ import { dirname, join, resolve } from "node:path";
16
+ const SCHEMA_VERSION = 1;
17
+ export class ConfigError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "ConfigError";
21
+ }
22
+ }
23
+ export const userConfigPath = () => join(process.env.HCN_CONFIG_DIR ??
24
+ join(process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config"), "hcn"), "config.json");
25
+ /** Project config: `.hcn/config.json` at the git root (P4 ratified as A -
26
+ * auto-discover, no trust gate; the config is code-reviewed like AGENTS.md
27
+ * and every project-tier provenance line names its path). Null outside a
28
+ * repo or when the repo declares none. */
29
+ export const projectConfigPath = (startDir = process.cwd()) => {
30
+ let dir = resolve(startDir);
31
+ for (;;) {
32
+ if (existsSync(join(dir, ".hcn", "config.json")))
33
+ return join(dir, ".hcn", "config.json");
34
+ const parent = dirname(dir);
35
+ if (parent === dir)
36
+ return null;
37
+ // stop at the git root: above it is not this project
38
+ if (existsSync(join(dir, ".git")) && !existsSync(join(parent, ".git"))) {
39
+ return null;
40
+ }
41
+ dir = parent;
42
+ }
43
+ };
44
+ const KNOWN_KEYS = new Set([
45
+ "effort",
46
+ "model",
47
+ "provider",
48
+ "sandbox",
49
+ "tools",
50
+ "excludeTools",
51
+ "autonomy",
52
+ "write",
53
+ "shell",
54
+ "maxSteps",
55
+ "toolsets",
56
+ ]);
57
+ const LIST_KEYS = new Set(["tools", "excludeTools"]);
58
+ const BOOL_KEYS = new Set(["autonomy", "write", "shell"]);
59
+ /** Parse + validate config text. Throws ConfigError with the offending key
60
+ * named on any violation - never warns and continues. */
61
+ export const parseUserConfig = (text) => {
62
+ let raw;
63
+ try {
64
+ raw = JSON.parse(text);
65
+ }
66
+ catch (e) {
67
+ throw new ConfigError(`config is not valid JSON: ${e.message}`);
68
+ }
69
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
70
+ throw new ConfigError("config root must be a JSON object");
71
+ }
72
+ const obj = raw;
73
+ if (obj.version === undefined) {
74
+ throw new ConfigError("config missing required field: version");
75
+ }
76
+ if (obj.version !== SCHEMA_VERSION) {
77
+ throw new ConfigError(`config version ${JSON.stringify(obj.version)} not supported (expected ${SCHEMA_VERSION})`);
78
+ }
79
+ delete obj.version;
80
+ const out = {};
81
+ for (const [key, value] of Object.entries(obj)) {
82
+ if (!KNOWN_KEYS.has(key)) {
83
+ throw new ConfigError(`unknown config key: ${JSON.stringify(key)}`);
84
+ }
85
+ if (key === "toolsets") {
86
+ if (typeof value !== "object" ||
87
+ value === null ||
88
+ Array.isArray(value) ||
89
+ Object.entries(value).some(([, v]) => !Array.isArray(v) || v.some((t) => typeof t !== "string" || t.trim() === ""))) {
90
+ throw new ConfigError('config key "toolsets" must be an object of name -> non-empty string array');
91
+ }
92
+ out[key] = value;
93
+ continue;
94
+ }
95
+ if (LIST_KEYS.has(key)) {
96
+ if (!Array.isArray(value) || value.some((v) => typeof v !== "string")) {
97
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be an array of strings`);
98
+ }
99
+ out[key] = value;
100
+ continue;
101
+ }
102
+ if (BOOL_KEYS.has(key)) {
103
+ if (typeof value !== "boolean") {
104
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be a boolean`);
105
+ }
106
+ out[key] = value;
107
+ continue;
108
+ }
109
+ if (typeof value !== "string" && typeof value !== "number") {
110
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be a string or number, got ${typeof value}`);
111
+ }
112
+ out[key] = value;
113
+ }
114
+ return out;
115
+ };
116
+ /** Load the user config if the file exists; absent file is an empty config
117
+ * (no tiers engaged), unreadable or invalid file is a hard error. */
118
+ export const loadUserConfig = () => loadConfigAt(userConfigPath());
119
+ /** Load the project config (git-root auto-discovery, ratified A). */
120
+ export const loadProjectConfig = (startDir) => {
121
+ const path = projectConfigPath(startDir);
122
+ if (path === null)
123
+ return null;
124
+ return loadConfigAt(path);
125
+ };
126
+ const loadConfigAt = (path) => {
127
+ let text;
128
+ try {
129
+ text = readFileSync(path, "utf8");
130
+ }
131
+ catch (e) {
132
+ const code = e.code;
133
+ if (code === "ENOENT")
134
+ return null;
135
+ throw new ConfigError(`cannot read config at ${path}: ${e.message}`);
136
+ }
137
+ return { config: parseUserConfig(text), path };
138
+ };
139
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  export declare const failUnknownHarness: (name: string) => never;
3
3
  export declare const dispatch: (raw: string[]) => Promise<void>;
4
+ export declare const main: () => Promise<void>;
5
+ export declare const run: () => void;
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAwBA,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,KAQjD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAe,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAyH1D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AA2BA,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,KAQjD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAe,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAyH1D,CAAC;AAEF,eAAO,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CAEzC,CAAC;AAIF,eAAO,MAAM,GAAG,QAAO,IAOtB,CAAC"}
package/dist/cli/index.js CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { pathToFileURL } from "node:url";
2
5
  import { TOP_LEVEL_HELP } from "./help.js";
3
6
  import { getVersion } from "./version.js";
4
7
  const SUPPORTED = ["claude", "codex", "pi", "muse"];
@@ -149,22 +152,35 @@ export const dispatch = async (raw) => {
149
152
  }
150
153
  }
151
154
  };
152
- const main = async () => {
155
+ export const main = async () => {
153
156
  await dispatch(process.argv.slice(2));
154
157
  };
155
- const shouldAutoRun = (() => {
156
- const entry = process.argv[1] ?? "";
157
- return (entry.endsWith("cli.js") || entry.endsWith("cli/index.js") || entry.endsWith("src/cli/index.ts"));
158
- })();
159
- if (shouldAutoRun) {
158
+ // The bin entry invokes this directly. Auto-run below covers direct
159
+ // execution of this module itself (node dist/cli/index.js, bun src/cli/index.ts).
160
+ export const run = () => {
160
161
  main().catch((err) => {
161
162
  const message = err instanceof Error ? err.message : String(err);
162
163
  process.stderr.write(`fatal: ${message}\n`);
163
164
  if (err instanceof Error && err.stack)
164
165
  process.stderr.write(`${err.stack}\n`);
165
166
  process.exitCode = 1;
166
- if (process.exitCode === 0)
167
- process.exitCode = 1;
168
167
  });
169
- }
168
+ };
169
+ // Run only when this module is the process main entry. process.argv[1] is
170
+ // the path as invoked - a bin symlink such as npm's `hcn` keeps its link
171
+ // name - while import.meta.url is this file's realpath, so resolving argv[1]
172
+ // the same way survives symlinks. Filename suffix sniffing cannot (issue #33).
173
+ const isMainEntry = (() => {
174
+ const entry = process.argv[1];
175
+ if (!entry)
176
+ return false;
177
+ try {
178
+ return import.meta.url === pathToFileURL(realpathSync(resolve(entry))).href;
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ })();
184
+ if (isMainEntry)
185
+ run();
170
186
  //# sourceMappingURL=index.js.map