@dungle-scrubs/harness-cli-normalizer 0.3.1 → 0.4.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.
Files changed (112) hide show
  1. package/README.md +64 -86
  2. package/dist/cli/args.d.ts +12 -0
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +44 -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 +147 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/help.d.ts +1 -1
  11. package/dist/cli/help.d.ts.map +1 -1
  12. package/dist/cli/help.js +17 -1
  13. package/dist/cli/help.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 +175 -5
  22. package/dist/cli/run.js.map +1 -1
  23. package/dist/cli/skills-root.d.ts +4 -0
  24. package/dist/cli/skills-root.d.ts.map +1 -0
  25. package/dist/cli/skills-root.js +45 -0
  26. package/dist/cli/skills-root.js.map +1 -0
  27. package/dist/execution/failure.d.ts +24 -4
  28. package/dist/execution/failure.d.ts.map +1 -1
  29. package/dist/execution/failure.js +39 -3
  30. package/dist/execution/failure.js.map +1 -1
  31. package/dist/execution/stream-turn.d.ts +4 -0
  32. package/dist/execution/stream-turn.d.ts.map +1 -1
  33. package/dist/execution/stream-turn.js +43 -6
  34. package/dist/execution/stream-turn.js.map +1 -1
  35. package/dist/interpretation/argv.d.ts +6 -0
  36. package/dist/interpretation/argv.d.ts.map +1 -1
  37. package/dist/interpretation/argv.js +17 -19
  38. package/dist/interpretation/argv.js.map +1 -1
  39. package/dist/interpretation/hints.d.ts +22 -0
  40. package/dist/interpretation/hints.d.ts.map +1 -0
  41. package/dist/interpretation/hints.js +59 -0
  42. package/dist/interpretation/hints.js.map +1 -0
  43. package/dist/interpretation/refusal.d.ts +25 -4
  44. package/dist/interpretation/refusal.d.ts.map +1 -1
  45. package/dist/interpretation/refusal.js +16 -0
  46. package/dist/interpretation/refusal.js.map +1 -1
  47. package/dist/interpretation/resolve-options.d.ts +42 -0
  48. package/dist/interpretation/resolve-options.d.ts.map +1 -0
  49. package/dist/interpretation/resolve-options.js +162 -0
  50. package/dist/interpretation/resolve-options.js.map +1 -0
  51. package/dist/interpretation/skills-selection.d.ts +22 -0
  52. package/dist/interpretation/skills-selection.d.ts.map +1 -0
  53. package/dist/interpretation/skills-selection.js +49 -0
  54. package/dist/interpretation/skills-selection.js.map +1 -0
  55. package/dist/interpretation/support.d.ts +32 -0
  56. package/dist/interpretation/support.d.ts.map +1 -0
  57. package/dist/interpretation/support.js +107 -0
  58. package/dist/interpretation/support.js.map +1 -0
  59. package/dist/interpretation/tool-selection.d.ts +29 -0
  60. package/dist/interpretation/tool-selection.d.ts.map +1 -0
  61. package/dist/interpretation/tool-selection.js +122 -0
  62. package/dist/interpretation/tool-selection.js.map +1 -0
  63. package/dist/interpretation/turn-options.d.ts.map +1 -1
  64. package/dist/interpretation/turn-options.js +4 -0
  65. package/dist/interpretation/turn-options.js.map +1 -1
  66. package/dist/knowledge/claude-code.d.ts.map +1 -1
  67. package/dist/knowledge/claude-code.js +35 -1
  68. package/dist/knowledge/claude-code.js.map +1 -1
  69. package/dist/knowledge/codex.d.ts.map +1 -1
  70. package/dist/knowledge/codex.js +20 -0
  71. package/dist/knowledge/codex.js.map +1 -1
  72. package/dist/knowledge/descriptor.d.ts +39 -0
  73. package/dist/knowledge/descriptor.d.ts.map +1 -1
  74. package/dist/knowledge/muse.d.ts.map +1 -1
  75. package/dist/knowledge/muse.js +20 -0
  76. package/dist/knowledge/muse.js.map +1 -1
  77. package/dist/knowledge/pi.d.ts.map +1 -1
  78. package/dist/knowledge/pi.js +22 -0
  79. package/dist/knowledge/pi.js.map +1 -1
  80. package/dist/knowledge/profile.d.ts +16 -0
  81. package/dist/knowledge/profile.d.ts.map +1 -0
  82. package/dist/knowledge/profile.js +51 -0
  83. package/dist/knowledge/profile.js.map +1 -0
  84. package/package.json +2 -23
  85. package/src/cli/args.ts +64 -3
  86. package/src/cli/config.ts +176 -0
  87. package/src/cli/help.ts +17 -1
  88. package/src/cli/inspect.ts +34 -1
  89. package/src/cli/render.ts +10 -1
  90. package/src/cli/run.ts +203 -6
  91. package/src/cli/skills-root.ts +47 -0
  92. package/src/execution/failure.ts +58 -5
  93. package/src/execution/stream-turn.ts +50 -5
  94. package/src/interpretation/argv.ts +23 -19
  95. package/src/interpretation/hints.ts +99 -0
  96. package/src/interpretation/refusal.ts +33 -3
  97. package/src/interpretation/resolve-options.ts +214 -0
  98. package/src/interpretation/skills-selection.ts +73 -0
  99. package/src/interpretation/support.ts +119 -0
  100. package/src/interpretation/tool-selection.ts +161 -0
  101. package/src/interpretation/turn-options.ts +4 -0
  102. package/src/knowledge/claude-code.ts +35 -1
  103. package/src/knowledge/codex.ts +20 -0
  104. package/src/knowledge/descriptor.ts +39 -0
  105. package/src/knowledge/muse.ts +20 -0
  106. package/src/knowledge/pi.ts +22 -0
  107. package/src/knowledge/profile.ts +53 -0
  108. package/dist/index.d.ts +0 -8
  109. package/dist/index.d.ts.map +0 -1
  110. package/dist/index.js +0 -8
  111. package/dist/index.js.map +0 -1
  112. 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 (npm harnesses via registry; `muse` via local `muse --version`, skipped in CI where not installed - see Version-pinning and drift).
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
@@ -75,7 +75,9 @@ Flag table (maps to `TurnOptions` / `TurnRunOptions`):
75
75
  | `--effort <value>` | `effort` | Validated via `validateEffort` |
76
76
  | `--sandbox <value>` | `sandbox` | Codex only |
77
77
  | `--provider <value>` | `provider` | pi only |
78
- | `--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) |
79
81
  | `--autonomy` / `--no-autonomy` | `autonomy` | |
80
82
  | `--write` / `--no-write` | `write` | Muse |
81
83
  | `--shell` / `--no-shell` | `shell` | Muse |
@@ -88,106 +90,69 @@ Flag table (maps to `TurnOptions` / `TurnRunOptions`):
88
90
 
89
91
  For development, `bun run demo claude "hi"` remains as a live-rendering alternative.
90
92
 
91
- ## TypeScript library
93
+ ## Defaults, config, provenance
92
94
 
93
- If you need the library, the same `hcn` commands are available as a typed `HarnessEvent` stream. Prefer the CLI above unless you are building an orchestrator, observer, or benchmark rig that must consume events in-process.
95
+ Every launch resolves through one precedence chain:
94
96
 
95
- One-shot headless turn, the simplest path:
96
-
97
- ```ts
98
- import {
99
- claudeCode,
100
- nodeRunnerDeps,
101
- streamTurn,
102
- } from "@dungle-scrubs/harness-cli-normalizer";
103
-
104
- for await (const event of streamTurn(
105
- claudeCode,
106
- { prompt: "explain a monad in one sentence", cwd: process.cwd() },
107
- nodeRunnerDeps(),
108
- )) {
109
- if (event.kind === "message") console.log(event.text);
110
- if (event.kind === "done") console.log(`exit: ${event.cause}`);
111
- }
97
+ ```
98
+ args > .hcn/config.json (git root, auto-discovered) > ~/.config/hcn/config.json (XDG) > built-in profile > harness default
112
99
  ```
113
100
 
114
- Swap `claudeCode` for `codexCli`, `piCli`, or `museCode` and the consumer code does not change for one-shot turns (`streamTurn`). The
115
- three layers are also available as `@dungle-scrubs/harness-cli-normalizer/knowledge`,
116
- `@dungle-scrubs/harness-cli-normalizer/interpretation`, and
117
- `@dungle-scrubs/harness-cli-normalizer/execution` for narrower imports. Persistent multi-turn sessions (`openSession`, `sessionMode`) are Claude-only - the other three harnesses have `sessionMode: null` and `openSession`/`hcn session` refuse with `no-session-mode`.
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.
118
107
 
119
- To watch the normalized stream render live against a real harness:
108
+ User config (`~/.config/hcn/config.json`, `$XDG_CONFIG_HOME` respected):
120
109
 
121
- ```bash
122
- bun run demo claude "explain a monad in one sentence"
123
- bun run demo codex "what is 2+2"
124
- bun run demo pi "name three primes"
125
- bun run demo muse "say hi"
126
- bun run demo --chat claude # interactive session (claude only)
110
+ ```json
111
+ { "version": 1, "effort": "high" }
127
112
  ```
128
113
 
129
- For a persistent multi-turn session (Claude-only), `openSession` returns a handle whose `turns` you iterate and whose `send()` you call between turns. Other harnesses do not support this mode. See `scripts/demo.ts` for the working pattern.
114
+ Project config (`.hcn/config.json` at the git root, code-reviewed with the
115
+ repo) also carries tool floors and named toolsets:
130
116
 
131
- ## Concepts
132
-
133
- ### Descriptors are data, not behavior
117
+ ```json
118
+ {
119
+ "version": 1,
120
+ "effort": "low",
121
+ "tools": ["read", "grep", "find", "ls"],
122
+ "toolsets": { "review": ["read", "grep"] }
123
+ }
124
+ ```
134
125
 
135
- 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.
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.
136
131
 
137
- ### Three layers, one direction
132
+ Every resolved setting prints its provenance to stderr:
138
133
 
139
134
  ```
140
- knowledge (pure data) -> interpretation (pure functions) -> execution (child process)
135
+ provenance: effort = "high" (user-config)
136
+ provenance: discovery = {"tools":true,...} (profile)
137
+ divergence: profile "sandbox" not expressible on pi; harness default applies
141
138
  ```
142
139
 
143
- `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.
144
-
145
- ### Version-pinning and drift
146
-
147
- 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 (`bun run smoke:seven`) and re-capturing fixtures.
148
-
149
- For the three npm harnesses (Claude Code, Codex, pi) the check queries the registry and is credential-free. Muse ships as an installed shell script (`versionSource: { kind: "installed" }`), so there is no registry to poll - `hcn check` falls back to `muse --version` locally and is skipped in CI where the binary is absent. A quarter of the matrix is therefore exempt from automated drift detection, and a stale Muse descriptor will not surface until a manual re-verification.
150
-
151
- Four harnesses are hand-verified by one maintainer. Claude Code alone ships more often than the pin is bumped, and the weekly issue only tells you the descriptor is stale - it does not re-capture the fixtures. Treat `verifiedAgainst` bumps as manual work, and expect Claude + Codex to carry most of the usage while pi and Muse double the verification surface for a smaller slice of value.
140
+ ## Concepts
152
141
 
153
- ## Turn options
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.
154
149
 
155
- Every `streamTurn` call can now shape the turn per-call without touching the descriptor:
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.
156
155
 
157
- ```ts
158
- await streamTurn(claudeCode, {
159
- prompt: "explain a monad",
160
- effort: "high", // --effort (claude), -c model_reasoning_effort (codex), --thinking (pi), --reasoning-effort (muse)
161
- provider: "zai/glm-5.2", // --provider (pi only)
162
- discovery: { tools: false, instructionFiles: false, extensions: false, skills: false }, // -nt/-nc/-ne/-ns (pi) or --setting-sources project (claude)
163
- write: false, // --disable-write (muse)
164
- shell: false, // --disable-shell (muse)
165
- maxSteps: 50, // --max-model-steps (muse)
166
- sandbox: "read-only", // --sandbox (codex, launch only)
167
- }, deps);
168
- ```
169
-
170
- Support matrix (anything not marked refuses with a typed `ArgvRefusalError` naming what the harness does support):
171
-
172
- | Option | claude | codex | pi | muse |
173
- | --- | --- | --- | --- | --- |
174
- | `effort` | `--effort` | `-c model_reasoning_effort=` | `--thinking` | `--reasoning-effort` |
175
- | `sandbox` | - | `--sandbox` (launch only) | - | - |
176
- | `provider` | - | - | `--provider` | - |
177
- | `discovery.tools` | - | - | `-nt` | - |
178
- | `discovery.instructionFiles` | - | - | `-nc` | - |
179
- | `discovery.extensions` | `--setting-sources project` | - | `-ne` | - |
180
- | `discovery.skills` | `--setting-sources project` | - | `-ns` | - |
181
- | `write` | - | - | - | `--disable-write` |
182
- | `shell` | - | - | - | `--disable-shell` |
183
- | `maxSteps` | - | - | - | `--max-model-steps` |
184
- | `tools` | `--allowedTools` | - | - | - |
185
-
186
- Per-call `env` is merged over the parent environment (`""` deletes) and never appears in logs:
187
-
188
- ```ts
189
- streamTurn(harness, { prompt, env: { FOO: "bar", OLD: "" } }, deps);
190
- ```
191
156
 
192
157
  ## Failure taxonomy
193
158
 
@@ -235,7 +200,20 @@ See [CONTRIBUTING.md](CONTRIBUTING.md). The short version: run `pnpm check` befo
235
200
 
236
201
  ## Status
237
202
 
238
- Pre-1.0. Four harnesses are described (Claude Code, Codex, pi, Muse). One-shot turns (`streamTurn`) are normalized across all four; persistent sessions (`openSession` / `sessionMode`) are Claude-only - other harnesses return `no-session-mode`. Drift detection runs weekly in CI for the three npm harnesses; Muse is `installed` and only checked locally via `muse --version`. Re-verifying a descriptor's capability claims against a new CLI version is a local, manual step (`bun run smoke:seven`) plus fixture re-capture, 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
+
239
217
 
240
218
  ## Prior art
241
219
 
@@ -58,6 +58,7 @@ export declare const parseRunExtra: (values: Record<string, unknown>) => {
58
58
  cwd?: string;
59
59
  env?: Record<string, string>;
60
60
  resume?: string;
61
+ timeoutSeconds?: number;
61
62
  };
62
63
  export interface CommonParseConfig {
63
64
  allowPrompt: boolean;
@@ -68,6 +69,17 @@ export declare const detectPositionalPromptInjection: (argv: string[]) => string
68
69
  * Wrapper around node:util parseArgs for the common flag table.
69
70
  * Throws with exit code 2 on unknown flag.
70
71
  */
72
+ export interface SplitPassthrough {
73
+ /** Tokens before the separator - hcn's normalized surface. */
74
+ readonly normalized: string[];
75
+ /** Tokens after the separator - verbatim passthrough to the harness,
76
+ * empty when no separator was present. */
77
+ readonly passthrough: readonly string[];
78
+ }
79
+ /** D6: split argv at the first bare `--`. Everything after it belongs to
80
+ * the harness, not to hcn - wrong-harness flags there fail in the harness
81
+ * itself and surface as native errors, never as hcn refusals. */
82
+ export declare const splitPassthrough: (argv: readonly string[]) => SplitPassthrough;
71
83
  export declare const parseCommonFlags: (argv: string[], opts?: {
72
84
  strict?: boolean;
73
85
  }) => 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,15 @@ 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
+ }
137
+ if (values.skills !== undefined) {
138
+ const raw = String(values.skills);
139
+ opts.skills =
140
+ raw.length === 0 ? [] : raw.split(",").map((s) => s.trim());
141
+ }
133
142
  if (values.autonomy === true)
134
143
  opts.autonomy = true;
135
144
  else if (values["no-autonomy"] === true)
@@ -183,6 +192,19 @@ export const parseTurnOptions = (values) => {
183
192
  };
184
193
  export const parseRunExtra = (values) => {
185
194
  const extra = {};
195
+ if (values.timeout !== undefined) {
196
+ const n = Number(values.timeout);
197
+ if (!Number.isFinite(n) || n < 0 || !Number.isInteger(n)) {
198
+ throw new ArgvRefusalError({
199
+ issue: "invalid-option-value",
200
+ harness: "claude",
201
+ option: "maxSteps",
202
+ supported: ["whole seconds, >= 0 (0 disables)"],
203
+ detail: String(values.timeout),
204
+ });
205
+ }
206
+ extra.timeoutSeconds = n;
207
+ }
186
208
  if (values.cwd !== undefined)
187
209
  extra.cwd = String(values.cwd);
188
210
  if (values.resume !== undefined)
@@ -204,6 +226,7 @@ const KNOWN_FLAGS = new Set([
204
226
  "--sandbox",
205
227
  "--provider",
206
228
  "--tools",
229
+ "--exclude-tools",
207
230
  "--autonomy",
208
231
  "--no-autonomy",
209
232
  "--write",
@@ -234,11 +257,13 @@ const FLAGS_WITH_VALUE = new Set([
234
257
  "--sandbox",
235
258
  "--provider",
236
259
  "--tools",
260
+ "--exclude-tools",
237
261
  "--max-steps",
238
262
  "--cwd",
239
263
  "--env",
240
264
  "--resume",
241
265
  "--session-id",
266
+ "--timeout",
242
267
  ]);
243
268
  export const detectPositionalPromptInjection = (argv) => {
244
269
  const hasExplicitPrompt = argv.some((a) => a === "--prompt" ||
@@ -295,12 +320,23 @@ const preprocessPromptArgs = (argv) => {
295
320
  }
296
321
  return out;
297
322
  };
298
- /**
299
- * Wrapper around node:util parseArgs for the common flag table.
300
- * Throws with exit code 2 on unknown flag.
301
- */
323
+ /** D6: split argv at the first bare `--`. Everything after it belongs to
324
+ * the harness, not to hcn - wrong-harness flags there fail in the harness
325
+ * itself and surface as native errors, never as hcn refusals. */
326
+ export const splitPassthrough = (argv) => {
327
+ const idx = argv.indexOf("--");
328
+ if (idx === -1)
329
+ return { normalized: [...argv], passthrough: [] };
330
+ return {
331
+ normalized: argv.slice(0, idx),
332
+ passthrough: argv.slice(idx + 1),
333
+ };
334
+ };
302
335
  export const parseCommonFlags = (argv, opts = {}) => {
303
- const normalized = preprocessPromptArgs(argv);
336
+ // The separator itself never reaches parseArgs: passthrough tokens may
337
+ // be unknown to hcn by design (that is their purpose).
338
+ const { normalized: withoutPassthrough } = splitPassthrough(argv);
339
+ const normalized = preprocessPromptArgs(withoutPassthrough);
304
340
  const config = {
305
341
  allowPositionals: true,
306
342
  strict: opts.strict ?? true,
@@ -312,6 +348,8 @@ export const parseCommonFlags = (argv, opts = {}) => {
312
348
  sandbox: { type: "string" },
313
349
  provider: { type: "string" },
314
350
  tools: { type: "string" },
351
+ "exclude-tools": { type: "string" },
352
+ skills: { type: "string" },
315
353
  autonomy: { type: "boolean" },
316
354
  "no-autonomy": { type: "boolean" },
317
355
  write: { type: "boolean" },
@@ -327,6 +365,7 @@ export const parseCommonFlags = (argv, opts = {}) => {
327
365
  env: { type: "string", multiple: true },
328
366
  resume: { type: "string" },
329
367
  "session-id": { type: "string" },
368
+ timeout: { type: "string" },
330
369
  json: { type: "boolean" },
331
370
  argv: { type: "boolean" },
332
371
  help: { 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;AAwBF;yDACyD;AACzD,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAAO,CAAC,WAAW,CA0EjE,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,147 @@
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
+ "timeout",
57
+ ]);
58
+ const LIST_KEYS = new Set(["tools", "excludeTools"]);
59
+ const BOOL_KEYS = new Set(["autonomy", "write", "shell"]);
60
+ /** Parse + validate config text. Throws ConfigError with the offending key
61
+ * named on any violation - never warns and continues. */
62
+ export const parseUserConfig = (text) => {
63
+ let raw;
64
+ try {
65
+ raw = JSON.parse(text);
66
+ }
67
+ catch (e) {
68
+ throw new ConfigError(`config is not valid JSON: ${e.message}`);
69
+ }
70
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
71
+ throw new ConfigError("config root must be a JSON object");
72
+ }
73
+ const obj = raw;
74
+ if (obj.version === undefined) {
75
+ throw new ConfigError("config missing required field: version");
76
+ }
77
+ if (obj.version !== SCHEMA_VERSION) {
78
+ throw new ConfigError(`config version ${JSON.stringify(obj.version)} not supported (expected ${SCHEMA_VERSION})`);
79
+ }
80
+ delete obj.version;
81
+ const out = {};
82
+ for (const [key, value] of Object.entries(obj)) {
83
+ if (!KNOWN_KEYS.has(key)) {
84
+ throw new ConfigError(`unknown config key: ${JSON.stringify(key)}`);
85
+ }
86
+ if (key === "toolsets") {
87
+ if (typeof value !== "object" ||
88
+ value === null ||
89
+ Array.isArray(value) ||
90
+ Object.entries(value).some(([, v]) => !Array.isArray(v) || v.some((t) => typeof t !== "string" || t.trim() === ""))) {
91
+ throw new ConfigError('config key "toolsets" must be an object of name -> non-empty string array');
92
+ }
93
+ out[key] = value;
94
+ continue;
95
+ }
96
+ if (key === "timeout") {
97
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
98
+ throw new ConfigError('config key "timeout" must be a whole number of seconds, >= 0 (0 disables)');
99
+ }
100
+ out[key] = value;
101
+ continue;
102
+ }
103
+ if (LIST_KEYS.has(key)) {
104
+ if (!Array.isArray(value) || value.some((v) => typeof v !== "string")) {
105
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be an array of strings`);
106
+ }
107
+ out[key] = value;
108
+ continue;
109
+ }
110
+ if (BOOL_KEYS.has(key)) {
111
+ if (typeof value !== "boolean") {
112
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be a boolean`);
113
+ }
114
+ out[key] = value;
115
+ continue;
116
+ }
117
+ if (typeof value !== "string" && typeof value !== "number") {
118
+ throw new ConfigError(`config key ${JSON.stringify(key)} must be a string or number, got ${typeof value}`);
119
+ }
120
+ out[key] = value;
121
+ }
122
+ return out;
123
+ };
124
+ /** Load the user config if the file exists; absent file is an empty config
125
+ * (no tiers engaged), unreadable or invalid file is a hard error. */
126
+ export const loadUserConfig = () => loadConfigAt(userConfigPath());
127
+ /** Load the project config (git-root auto-discovery, ratified A). */
128
+ export const loadProjectConfig = (startDir) => {
129
+ const path = projectConfigPath(startDir);
130
+ if (path === null)
131
+ return null;
132
+ return loadConfigAt(path);
133
+ };
134
+ const loadConfigAt = (path) => {
135
+ let text;
136
+ try {
137
+ text = readFileSync(path, "utf8");
138
+ }
139
+ catch (e) {
140
+ const code = e.code;
141
+ if (code === "ENOENT")
142
+ return null;
143
+ throw new ConfigError(`cannot read config at ${path}: ${e.message}`);
144
+ }
145
+ return { config: parseUserConfig(text), path };
146
+ };
147
+ //# 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,5 +1,5 @@
1
1
  export declare const TOP_LEVEL_HELP = "hcn - One stable interface to four coding-agent CLIs\n\nUsage: hcn <command> [options] [prompt]\n\nCommands:\n run <harness> [prompt] One-shot headless turn (streamTurn)\n session <harness> Interactive session (openSession, Claude-only)\n inspect <harness> Descriptor / argv / capability inspection (no spawn)\n ls List harnesses with verifiedAgainst versions\n check Drift check (published version vs verifiedAgainst)\n\nOptions:\n -h, --help Show help\n -V, --version Show version\n\nRun 'hcn <command> --help' for command-specific help.\n";
2
- export declare const RUN_HELP = "hcn run - One-shot headless turn\n\nUsage: hcn run <harness> [prompt] [options]\n\nArguments:\n <harness> claude | codex | pi | muse\n [prompt] Prompt text (positional). Must not start with '-'.\n Use --prompt or --prompt-file for leading '-' or multi-line.\n\nOptions:\n --prompt <text> Prompt text (alternative to positional)\n --prompt-file <path|-> Read prompt from file, or stdin when '-'\n --model <id> Model id (validated per harness)\n --effort <value> Effort level (validated per harness/model)\n --sandbox <value> Sandbox mode (codex only)\n --provider <value> Provider (pi only)\n --tools <a,b> Tool grants (claude only, comma-separated)\n --autonomy Enable autonomy flag (claude/codex/muse)\n --no-autonomy Disable autonomy\n --write Enable write (muse)\n --no-write Disable write\n --shell Enable shell (muse)\n --no-shell Disable shell\n --max-steps <n> Max steps (muse, 1-10000)\n --no-tools Disable tools discovery facet\n --no-instruction-files Disable instructionFiles discovery facet\n --no-extensions Disable extensions discovery facet\n --no-skills Disable skills discovery facet\n --cwd <path> Working directory for spawn\n --env KEY=VAL Environment (repeatable; KEY= deletes)\n --resume <uuid> Resume session id (UUID)\n --json NDJSON HarnessEvent to stdout\n -h, --help Show help\n -V, --version Show version\n";
2
+ export declare const RUN_HELP = "hcn run - One-shot headless turn\n\nUsage: hcn run <harness> [prompt] [options]\n\nArguments:\n <harness> claude | codex | pi | muse\n [prompt] Prompt text (positional). Must not start with '-'.\n Use --prompt or --prompt-file for leading '-' or multi-line.\n\nOptions:\n --prompt <text> Prompt text (alternative to positional)\n --prompt-file <path|-> Read prompt from file, or stdin when '-'\n --model <id> Model id (validated per harness)\n --effort <value> Effort level (validated per harness/model)\n --sandbox <value> Sandbox mode (codex only)\n --provider <value> Provider (pi only)\n --tools <a,b> Tool grant allowlist (claude, pi; a bare name\n matching a configured toolset expands to it)\n --exclude-tools <a,b> Complement over known tools (claude, pi;\n mutually exclusive with --tools)\n --autonomy Enable autonomy flag (claude/codex/muse)\n --no-autonomy Disable autonomy\n --write Enable write (muse)\n --no-write Disable write\n --shell Enable shell (muse)\n --no-shell Disable shell\n --max-steps <n> Max steps (muse, 1-10000)\n --timeout <seconds> Wall-clock budget for the run (all harnesses,\n hcn-enforced; 0 disables; no default)\n --no-tools Disable tools discovery facet\n --no-instruction-files Disable instructionFiles discovery facet\n --no-extensions Disable extensions discovery facet\n --no-skills Disable skills discovery facet\n --cwd <path> Working directory for spawn\n --env KEY=VAL Environment (repeatable; KEY= deletes)\n --resume <uuid> Resume session id (UUID)\n -- Passthrough: native harness args verbatim\n (failures surface as labeled native errors)\n --json NDJSON HarnessEvent to stdout\n -h, --help Show help\n -V, --version Show version\n\nDefaults with no flags:\n Every launch resolves args > project config (.hcn/config.json at the\n git root) > user config (~/.config/hcn/config.json) > built-in profile\n > harness default. The profile pins: effort medium, sandbox\n workspace-write (codex only; other harnesses report divergence),\n discovery on, autonomy off, write/shell on. timeout and max-steps have\n no default. Provenance prints to stderr on every run; see\n 'hcn inspect <harness>' for the resolved argv of a bare run.\n";
3
3
  export declare const SESSION_HELP = "hcn session - Interactive session (Claude-only)\n\nUsage: hcn session <harness> [options]\n\nArguments:\n <harness> Must be 'claude' (other harnesses have no sessionMode)\n\nOptions:\n --model <id> Model for the session\n --session-id <uuid> Session id (UUID, else random)\n --cwd <path> Working directory\n --help Show help\n --version Show version\n";
4
4
  export declare const INSPECT_HELP = "hcn inspect - Descriptor / argv inspection\n\nUsage: hcn inspect <harness> [options]\n\nArguments:\n <harness> claude | codex | pi | muse\n\nOptions:\n --argv Preview argv that would be spawned\n --prompt <text> Prompt for argv preview\n --prompt-file <path|-> Read prompt from file\n --model <id> Model\n --effort <value> Effort\n --sandbox <value> Sandbox\n --provider <value> Provider\n --tools <a,b> Tools\n --autonomy / --no-autonomy\n --write / --no-write\n --shell / --no-shell\n --max-steps <n>\n --no-tools, --no-instruction-files, --no-extensions, --no-skills\n --cwd <path>\n --env KEY=VAL\n --resume <uuid>\n -h, --help Show help\n";
5
5
  export declare const LS_HELP = "hcn ls - List harnesses\n\nUsage: hcn ls\n\nPrints each harness name with its verifiedAgainst version and versionSource.\n";
@@ -1 +1 @@
1
- {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,koBAgB1B,CAAC;AAEF,eAAO,MAAM,QAAQ,irDAkCpB,CAAC;AAEF,eAAO,MAAM,YAAY,6bAaxB,CAAC;AAEF,eAAO,MAAM,YAAY,0wBAyBxB,CAAC;AAEF,eAAO,MAAM,OAAO,+HAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,2UAUtB,CAAC"}
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,koBAgB1B,CAAC;AAEF,eAAO,MAAM,QAAQ,upFAkDpB,CAAC;AAEF,eAAO,MAAM,YAAY,6bAaxB,CAAC;AAEF,eAAO,MAAM,YAAY,0wBAyBxB,CAAC;AAEF,eAAO,MAAM,OAAO,+HAKnB,CAAC;AAEF,eAAO,MAAM,UAAU,2UAUtB,CAAC"}