@dungle-scrubs/harness-cli-normalizer 0.1.3 → 0.3.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.
- package/README.md +144 -7
- package/dist/cli/args.d.ts +74 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +339 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/check.d.ts +2 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +110 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/exit-codes.d.ts +7 -0
- package/dist/cli/exit-codes.d.ts.map +1 -0
- package/dist/cli/exit-codes.js +11 -0
- package/dist/cli/exit-codes.js.map +1 -0
- package/dist/cli/help.d.ts +7 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +110 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +170 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/inspect.d.ts +3 -0
- package/dist/cli/inspect.d.ts.map +1 -0
- package/dist/cli/inspect.js +170 -0
- package/dist/cli/inspect.js.map +1 -0
- package/dist/cli/ls.d.ts +2 -0
- package/dist/cli/ls.d.ts.map +1 -0
- package/dist/cli/ls.js +10 -0
- package/dist/cli/ls.js.map +1 -0
- package/dist/cli/render.d.ts +8 -0
- package/dist/cli/render.d.ts.map +1 -0
- package/dist/cli/render.js +55 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/cli/resolve-harness.d.ts +4 -0
- package/dist/cli/resolve-harness.d.ts.map +1 -0
- package/dist/cli/resolve-harness.js +31 -0
- package/dist/cli/resolve-harness.js.map +1 -0
- package/dist/cli/run.d.ts +2 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +280 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/session.d.ts +2 -0
- package/dist/cli/session.d.ts.map +1 -0
- package/dist/cli/session.js +128 -0
- package/dist/cli/session.js.map +1 -0
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +34 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli.js +2 -0
- package/dist/execution/decode.d.ts.map +1 -1
- package/dist/execution/decode.js +32 -0
- package/dist/execution/decode.js.map +1 -1
- package/dist/execution/deps.d.ts +7 -1
- package/dist/execution/deps.d.ts.map +1 -1
- package/dist/execution/events.d.ts +6 -2
- package/dist/execution/events.d.ts.map +1 -1
- package/dist/execution/events.js.map +1 -1
- package/dist/execution/failure.d.ts +45 -0
- package/dist/execution/failure.d.ts.map +1 -0
- package/dist/execution/failure.js +121 -0
- package/dist/execution/failure.js.map +1 -0
- package/dist/execution/node-deps.d.ts.map +1 -1
- package/dist/execution/node-deps.js +19 -0
- package/dist/execution/node-deps.js.map +1 -1
- package/dist/execution/stream-turn.d.ts +2 -0
- package/dist/execution/stream-turn.d.ts.map +1 -1
- package/dist/execution/stream-turn.js +181 -16
- package/dist/execution/stream-turn.js.map +1 -1
- package/dist/interpretation/argv.d.ts +16 -4
- package/dist/interpretation/argv.d.ts.map +1 -1
- package/dist/interpretation/argv.js +68 -19
- package/dist/interpretation/argv.js.map +1 -1
- package/dist/interpretation/dimensions.d.ts +0 -2
- package/dist/interpretation/dimensions.d.ts.map +1 -1
- package/dist/interpretation/dimensions.js +0 -2
- package/dist/interpretation/dimensions.js.map +1 -1
- package/dist/interpretation/limits.d.ts +10 -1
- package/dist/interpretation/limits.d.ts.map +1 -1
- package/dist/interpretation/limits.js +84 -5
- package/dist/interpretation/limits.js.map +1 -1
- package/dist/interpretation/refusal.d.ts +31 -0
- package/dist/interpretation/refusal.d.ts.map +1 -0
- package/dist/interpretation/refusal.js +87 -0
- package/dist/interpretation/refusal.js.map +1 -0
- package/dist/interpretation/turn-options.d.ts +18 -0
- package/dist/interpretation/turn-options.d.ts.map +1 -0
- package/dist/interpretation/turn-options.js +417 -0
- package/dist/interpretation/turn-options.js.map +1 -0
- package/dist/interpretation/vocabulary.d.ts +5 -0
- package/dist/interpretation/vocabulary.d.ts.map +1 -1
- package/dist/interpretation/vocabulary.js +1 -1
- package/dist/interpretation/vocabulary.js.map +1 -1
- package/dist/knowledge/claude-code.d.ts +13 -1
- package/dist/knowledge/claude-code.d.ts.map +1 -1
- package/dist/knowledge/claude-code.js +35 -13
- package/dist/knowledge/claude-code.js.map +1 -1
- package/dist/knowledge/codex.d.ts.map +1 -1
- package/dist/knowledge/codex.js +25 -14
- package/dist/knowledge/codex.js.map +1 -1
- package/dist/knowledge/descriptor.d.ts +118 -14
- package/dist/knowledge/descriptor.d.ts.map +1 -1
- package/dist/knowledge/descriptor.js +58 -0
- package/dist/knowledge/descriptor.js.map +1 -1
- package/dist/knowledge/matchers.d.ts +3 -3
- package/dist/knowledge/matchers.d.ts.map +1 -1
- package/dist/knowledge/matchers.js +19 -6
- package/dist/knowledge/matchers.js.map +1 -1
- package/dist/knowledge/muse.d.ts +2 -2
- package/dist/knowledge/muse.d.ts.map +1 -1
- package/dist/knowledge/muse.js +22 -6
- package/dist/knowledge/muse.js.map +1 -1
- package/dist/knowledge/overrides.d.ts +7 -0
- package/dist/knowledge/overrides.d.ts.map +1 -1
- package/dist/knowledge/overrides.js +76 -0
- package/dist/knowledge/overrides.js.map +1 -1
- package/dist/knowledge/pi.d.ts.map +1 -1
- package/dist/knowledge/pi.js +25 -3
- package/dist/knowledge/pi.js.map +1 -1
- package/package.json +5 -2
- package/src/cli/args.ts +381 -0
- package/src/cli/check.ts +136 -0
- package/src/cli/exit-codes.ts +13 -0
- package/src/cli/help.ts +114 -0
- package/src/cli/index.ts +177 -0
- package/src/cli/inspect.ts +174 -0
- package/src/cli/ls.ts +14 -0
- package/src/cli/render.ts +62 -0
- package/src/cli/resolve-harness.ts +33 -0
- package/src/cli/run.ts +280 -0
- package/src/cli/session.ts +137 -0
- package/src/cli/version.ts +32 -0
- package/src/execution/decode.ts +32 -0
- package/src/execution/deps.ts +7 -1
- package/src/execution/events.ts +9 -2
- package/src/execution/failure.ts +159 -0
- package/src/execution/node-deps.ts +17 -0
- package/src/execution/stream-turn.ts +189 -17
- package/src/interpretation/argv.ts +85 -27
- package/src/interpretation/dimensions.ts +0 -6
- package/src/interpretation/limits.ts +97 -6
- package/src/interpretation/refusal.ts +116 -0
- package/src/interpretation/turn-options.ts +424 -0
- package/src/interpretation/vocabulary.ts +1 -1
- package/src/knowledge/claude-code.ts +35 -13
- package/src/knowledge/codex.ts +25 -14
- package/src/knowledge/descriptor.ts +138 -12
- package/src/knowledge/matchers.ts +22 -9
- package/src/knowledge/muse.ts +22 -6
- package/src/knowledge/overrides.ts +97 -0
- package/src/knowledge/pi.ts +25 -3
package/README.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
# harness-cli-normalizer
|
|
2
2
|
|
|
3
|
-
One stable interface to four coding-agent CLIs
|
|
3
|
+
One stable interface to four coding-agent CLIs.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/dungle-scrubs/harness-cli-normalizer/actions/workflows/ci.yml) [](https://www.npmjs.com/package/@dungle-scrubs/harness-cli-normalizer) [](LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
You reach for this when you are building on top of more than one coding agent: an orchestrator, an observer, a benchmark rig, or a way to switch which agent does a job. Each descriptor is pinned to the CLI version its facts were verified against, and a weekly check flags when a harness has shipped ahead of its descriptor. You learn drift is possible from a check, not from a crash.
|
|
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.
|
|
10
9
|
|
|
11
10
|
```bash
|
|
12
11
|
pnpm add @dungle-scrubs/harness-cli-normalizer
|
|
@@ -61,6 +60,72 @@ bun run demo --chat claude # interactive session (claude only)
|
|
|
61
60
|
|
|
62
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.
|
|
63
62
|
|
|
63
|
+
## CLI
|
|
64
|
+
|
|
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`:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pnpm add @dungle-scrubs/harness-cli-normalizer
|
|
69
|
+
npx hcn --help
|
|
70
|
+
npm install -g @dungle-scrubs/harness-cli-normalizer # global
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
One-shot turn:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
hcn run claude "explain a monad in one sentence"
|
|
77
|
+
hcn run codex "what is 2+2" --model gpt-5.6-sol
|
|
78
|
+
hcn run pi "name three primes" --provider zai/glm-5.2
|
|
79
|
+
hcn run muse "say hi" --no-write
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Piped JSON for programmatic use:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
hcn run claude "say hi" --json | jq .
|
|
86
|
+
hcn run claude "hi" --json | head -n 5 # abandonment-safe, no hanging handles
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Session (Claude-only):
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
hcn session claude
|
|
93
|
+
hcn session claude --model opus --session-id 550e8400-e29b-41d4-a716-446655440000
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Inspection and drift (no spawn):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
hcn ls
|
|
100
|
+
hcn inspect claude
|
|
101
|
+
hcn inspect claude --argv --prompt "hi" --effort high
|
|
102
|
+
hcn check
|
|
103
|
+
hcn check --json
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Flag table (maps to `TurnOptions` / `TurnRunOptions`):
|
|
107
|
+
|
|
108
|
+
| CLI flag | TurnOptions field | Notes |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `--prompt <text>` | `prompt` | Alternative to positional; mutual exclusion |
|
|
111
|
+
| `--prompt-file <path\|->` | `prompt` | Reads UTF-8 file or stdin (`-`) |
|
|
112
|
+
| `--model <id>` | `model` | Validated via `validateModel` |
|
|
113
|
+
| `--effort <value>` | `effort` | Validated via `validateEffort` |
|
|
114
|
+
| `--sandbox <value>` | `sandbox` | Codex only |
|
|
115
|
+
| `--provider <value>` | `provider` | pi only |
|
|
116
|
+
| `--tools <a,b>` | `tools` | Claude only, comma-separated |
|
|
117
|
+
| `--autonomy` / `--no-autonomy` | `autonomy` | |
|
|
118
|
+
| `--write` / `--no-write` | `write` | Muse |
|
|
119
|
+
| `--shell` / `--no-shell` | `shell` | Muse |
|
|
120
|
+
| `--max-steps <n>` | `maxSteps` | Muse, 1-10000 |
|
|
121
|
+
| `--no-tools, --no-instruction-files, --no-extensions, --no-skills` | `discovery` | |
|
|
122
|
+
| `--cwd <path>` | `cwd` | Working directory |
|
|
123
|
+
| `--env KEY=VAL` | `env` | Repeatable; `KEY=` deletes |
|
|
124
|
+
| `--resume <uuid>` | `resume` | Resume session |
|
|
125
|
+
| `--json` | output mode | NDJSON `HarnessEvent` to stdout |
|
|
126
|
+
|
|
127
|
+
For development, `bun run demo claude "hi"` remains as a live-rendering alternative.
|
|
128
|
+
|
|
64
129
|
## Concepts
|
|
65
130
|
|
|
66
131
|
### Descriptors are data, not behavior
|
|
@@ -79,12 +144,84 @@ knowledge (pure data) -> interpretation (pure functions) -> execution (child pro
|
|
|
79
144
|
|
|
80
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.
|
|
81
146
|
|
|
147
|
+
## Turn options
|
|
148
|
+
|
|
149
|
+
Every `streamTurn` call can now shape the turn per-call without touching the descriptor:
|
|
150
|
+
|
|
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:
|
|
181
|
+
|
|
182
|
+
```ts
|
|
183
|
+
streamTurn(harness, { prompt, env: { FOO: "bar", OLD: "" } }, deps);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Failure taxonomy
|
|
187
|
+
|
|
188
|
+
Every failure - provider, work, transport, or refusal - arrives as a typed `failure` event and reduces to one self-sufficient summary on `done`:
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
type FailureClass = "rate-limit" | "usage-limit" | "quota" | "auth" | "budget" | "task" | "transport" | "rejected";
|
|
192
|
+
interface FailureSummary { class: FailureClass; retryable: boolean; message: string; code?: LimitCode; authKind?: AuthFailureKind; resetsAt?: number; issue?: RefusalIssue; option?: TurnOptionKey; facet?: DiscoveryFacet; supported?: readonly string[]; }
|
|
193
|
+
type HarnessEvent = ... | ({ kind: "failure" } & FailureSummary) | { kind: "done"; exitCode: number | null; cause: ExitCause; failure?: FailureSummary };
|
|
194
|
+
type ExitCause = "clean" | "limit" | "crash" | "stall" | "killed" | "failed";
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The canonical consumer check, identical for a deterministic router and an agent:
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
if (done.failure) {
|
|
201
|
+
if (done.failure.retryable) descendFallbackChain(done.failure);
|
|
202
|
+
else pivot(done.failure); // rejected -> change options; budget -> raise cap; task -> surface
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
`retryable` is `false` for `task`, `budget`, `rejected` and `true` for the rest. `rejected` is non-retryable across the whole model chain because the remedy is different options or a different harness.
|
|
207
|
+
|
|
208
|
+
## Refusals
|
|
209
|
+
|
|
210
|
+
An unexpressible option throws `ArgvRefusalError` from the builders and is also delivered as `failure class=rejected` + `done cause=failed` from `streamTurn` (which never throws out of its first `next()`):
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
class ArgvRefusalError extends Error { issue: RefusalIssue; harness: HarnessName; option?: TurnOptionKey; facet?: DiscoveryFacet; supported: readonly string[]; }
|
|
214
|
+
type RefusalIssue = "unsupported-option" | "unsupported-option-facet" | "unsupported-on-resume" | "invalid-option-value" | "unknown-effort" | "unknown-model" | "invalid-env" | "invalid-tool-grant" | "prompt-flag-injection" | "no-autonomy-mode" | "no-session-mode";
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Every refusal names an alternative in `supported` and `message`, not only a negation.
|
|
218
|
+
|
|
82
219
|
## Reference
|
|
83
220
|
|
|
84
221
|
- Descriptors live in `src/knowledge/` (`claude-code.ts`, `codex.ts`, `pi.ts`, `muse.ts`), with shared types in `descriptor.ts`.
|
|
85
|
-
- The normalized event surface is `HarnessEvent` in `src/execution/events.ts`: `identity`, `token`, `message`, `progress`, `tool`, `context`, `limit`, `error`, `done
|
|
86
|
-
- Narrow or override a descriptor's facts with `parseOverrides` (`src/knowledge/overrides.ts`). An override a harness cannot satisfy throws `OverrideRefusalError` instead of producing a broken argv.
|
|
87
|
-
- `DROPPABLE_KINDS` (`token`, `progress`, `context`) marks events safe to drop when you only need the full messages.
|
|
222
|
+
- The normalized event surface is `HarnessEvent` in `src/execution/events.ts`: `identity`, `token`, `message`, `progress`, `tool`, `context`, `limit`, `error`, `failure`, `done` (with `done.failure`).
|
|
223
|
+
- Narrow or override a descriptor's facts with `parseOverrides` (`src/knowledge/overrides.ts`). An override a harness cannot satisfy throws `OverrideRefusalError` instead of producing a broken argv. `limitMatchers`/`authMatchers` are now serializable `{pattern, flags, code/kind}` objects so they can be overridden from JSON; bad patterns are refused at load with file and harness named.
|
|
224
|
+
- `DROPPABLE_KINDS` (`token`, `progress`, `context`) marks events safe to drop when you only need the full messages. `failure` is never droppable.
|
|
88
225
|
|
|
89
226
|
## Contributing
|
|
90
227
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { parseArgs } from "node:util";
|
|
2
|
+
import type { TurnOptions } from "../interpretation/argv.js";
|
|
3
|
+
export type ParsedPromptSource = {
|
|
4
|
+
kind: "positional";
|
|
5
|
+
prompt: string;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "prompt-flag";
|
|
8
|
+
prompt: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: "prompt-file";
|
|
11
|
+
prompt: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "none";
|
|
14
|
+
};
|
|
15
|
+
export interface CliTurnOptions extends TurnOptions {
|
|
16
|
+
}
|
|
17
|
+
export interface CliRunOptions extends CliTurnOptions {
|
|
18
|
+
readonly cwd?: string;
|
|
19
|
+
readonly env?: Record<string, string>;
|
|
20
|
+
readonly resume?: string;
|
|
21
|
+
readonly json?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface ParseCommonResult {
|
|
24
|
+
prompt: string | undefined;
|
|
25
|
+
promptSource: ParsedPromptSource["kind"];
|
|
26
|
+
turnOptions: TurnOptions;
|
|
27
|
+
runOptions: {
|
|
28
|
+
cwd?: string;
|
|
29
|
+
env?: Record<string, string>;
|
|
30
|
+
resume?: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse --env KEY=VAL entries into env record. "" value means delete.
|
|
35
|
+
*/
|
|
36
|
+
export declare const parseEnvEntries: (entries: string[] | string | undefined) => Record<string, string> | undefined;
|
|
37
|
+
export declare const resolvePrompt: (args: {
|
|
38
|
+
positionalPrompt?: string;
|
|
39
|
+
promptFlag?: string;
|
|
40
|
+
promptFile?: string;
|
|
41
|
+
}) => {
|
|
42
|
+
prompt: string;
|
|
43
|
+
source: ParsedPromptSource["kind"];
|
|
44
|
+
};
|
|
45
|
+
export declare const resolvePromptAsync: (args: {
|
|
46
|
+
positionalPrompt?: string;
|
|
47
|
+
promptFlag?: string;
|
|
48
|
+
promptFile?: string;
|
|
49
|
+
}) => Promise<{
|
|
50
|
+
prompt: string;
|
|
51
|
+
source: ParsedPromptSource["kind"];
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Build TurnOptions from parsed flag values. Shared between run and inspect --argv.
|
|
55
|
+
*/
|
|
56
|
+
export declare const parseTurnOptions: (values: Record<string, unknown>) => TurnOptions;
|
|
57
|
+
export declare const parseRunExtra: (values: Record<string, unknown>) => {
|
|
58
|
+
cwd?: string;
|
|
59
|
+
env?: Record<string, string>;
|
|
60
|
+
resume?: string;
|
|
61
|
+
};
|
|
62
|
+
export interface CommonParseConfig {
|
|
63
|
+
allowPrompt: boolean;
|
|
64
|
+
allowPromptFile: boolean;
|
|
65
|
+
}
|
|
66
|
+
export declare const detectPositionalPromptInjection: (argv: string[]) => string | null;
|
|
67
|
+
/**
|
|
68
|
+
* Wrapper around node:util parseArgs for the common flag table.
|
|
69
|
+
* Throws with exit code 2 on unknown flag.
|
|
70
|
+
*/
|
|
71
|
+
export declare const parseCommonFlags: (argv: string[], opts?: {
|
|
72
|
+
strict?: boolean;
|
|
73
|
+
}) => ReturnType<typeof parseArgs>;
|
|
74
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
import { ArgvRefusalError } from "../interpretation/refusal.js";
|
|
4
|
+
const _DISCOVERY_FLAGS = {
|
|
5
|
+
tools: "no-tools",
|
|
6
|
+
instructionFiles: "no-instruction-files",
|
|
7
|
+
extensions: "no-extensions",
|
|
8
|
+
skills: "no-skills",
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parse --env KEY=VAL entries into env record. "" value means delete.
|
|
12
|
+
*/
|
|
13
|
+
export const parseEnvEntries = (entries) => {
|
|
14
|
+
if (entries === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
const list = Array.isArray(entries) ? entries : [entries];
|
|
17
|
+
if (list.length === 0)
|
|
18
|
+
return undefined;
|
|
19
|
+
const env = {};
|
|
20
|
+
for (const entry of list) {
|
|
21
|
+
const eq = entry.indexOf("=");
|
|
22
|
+
if (eq === -1) {
|
|
23
|
+
throw new ArgvRefusalError({
|
|
24
|
+
issue: "invalid-env",
|
|
25
|
+
harness: "claude",
|
|
26
|
+
supported: ["KEY=VAL"],
|
|
27
|
+
detail: entry,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const key = entry.slice(0, eq);
|
|
31
|
+
const value = entry.slice(eq + 1);
|
|
32
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || value.includes("\0") || key.includes("\0")) {
|
|
33
|
+
throw new ArgvRefusalError({
|
|
34
|
+
issue: "invalid-env",
|
|
35
|
+
harness: "claude",
|
|
36
|
+
supported: ["keys must match ^[A-Za-z_][A-Za-z0-9_]*$ and contain no NUL"],
|
|
37
|
+
detail: entry,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
env[key] = value;
|
|
41
|
+
}
|
|
42
|
+
return env;
|
|
43
|
+
};
|
|
44
|
+
export const resolvePrompt = (args) => {
|
|
45
|
+
const hasPositional = args.positionalPrompt !== undefined && args.positionalPrompt !== "";
|
|
46
|
+
const hasPrompt = args.promptFlag !== undefined;
|
|
47
|
+
const hasFile = args.promptFile !== undefined;
|
|
48
|
+
const count = Number(hasPositional) + Number(hasPrompt) + Number(hasFile);
|
|
49
|
+
if (count === 0) {
|
|
50
|
+
throw new ArgvRefusalError({
|
|
51
|
+
issue: "invalid-option-value",
|
|
52
|
+
harness: "claude",
|
|
53
|
+
supported: ["provide prompt via positional, --prompt, or --prompt-file"],
|
|
54
|
+
detail: "missing prompt",
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (count > 1) {
|
|
58
|
+
throw new ArgvRefusalError({
|
|
59
|
+
issue: "invalid-option-value",
|
|
60
|
+
harness: "claude",
|
|
61
|
+
supported: ["use one of positional, --prompt, or --prompt-file"],
|
|
62
|
+
detail: "mutual exclusion",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (hasPositional)
|
|
66
|
+
return { prompt: args.positionalPrompt, source: "positional" };
|
|
67
|
+
if (hasPrompt)
|
|
68
|
+
return { prompt: args.promptFlag, source: "prompt-flag" };
|
|
69
|
+
// --prompt-file
|
|
70
|
+
const file = args.promptFile;
|
|
71
|
+
if (file === "-") {
|
|
72
|
+
// read from stdin sync - caller may provide content differently for async path.
|
|
73
|
+
// For sync path, read stdin fd 0.
|
|
74
|
+
const content = readFileSync(0, "utf8");
|
|
75
|
+
return { prompt: content, source: "prompt-file" };
|
|
76
|
+
}
|
|
77
|
+
const content = readFileSync(file, "utf8");
|
|
78
|
+
return { prompt: content, source: "prompt-file" };
|
|
79
|
+
};
|
|
80
|
+
export const resolvePromptAsync = async (args) => {
|
|
81
|
+
const hasPositional = args.positionalPrompt !== undefined && args.positionalPrompt !== "";
|
|
82
|
+
const hasPrompt = args.promptFlag !== undefined;
|
|
83
|
+
const hasFile = args.promptFile !== undefined;
|
|
84
|
+
const count = Number(hasPositional) + Number(hasPrompt) + Number(hasFile);
|
|
85
|
+
if (count === 0) {
|
|
86
|
+
throw new ArgvRefusalError({
|
|
87
|
+
issue: "invalid-option-value",
|
|
88
|
+
harness: "claude",
|
|
89
|
+
supported: ["provide prompt via positional, --prompt, or --prompt-file"],
|
|
90
|
+
detail: "missing prompt",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (count > 1) {
|
|
94
|
+
throw new ArgvRefusalError({
|
|
95
|
+
issue: "invalid-option-value",
|
|
96
|
+
harness: "claude",
|
|
97
|
+
supported: ["use one of positional, --prompt, or --prompt-file"],
|
|
98
|
+
detail: "mutual exclusion",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (hasPositional)
|
|
102
|
+
return { prompt: args.positionalPrompt, source: "positional" };
|
|
103
|
+
if (hasPrompt)
|
|
104
|
+
return { prompt: args.promptFlag, source: "prompt-flag" };
|
|
105
|
+
const file = args.promptFile;
|
|
106
|
+
if (file === "-") {
|
|
107
|
+
const chunks = [];
|
|
108
|
+
for await (const chunk of process.stdin)
|
|
109
|
+
chunks.push(chunk);
|
|
110
|
+
return { prompt: Buffer.concat(chunks).toString("utf8"), source: "prompt-file" };
|
|
111
|
+
}
|
|
112
|
+
const { readFile } = await import("node:fs/promises");
|
|
113
|
+
const content = await readFile(file, "utf8");
|
|
114
|
+
return { prompt: content, source: "prompt-file" };
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Build TurnOptions from parsed flag values. Shared between run and inspect --argv.
|
|
118
|
+
*/
|
|
119
|
+
export const parseTurnOptions = (values) => {
|
|
120
|
+
const opts = {};
|
|
121
|
+
if (values.model !== undefined)
|
|
122
|
+
opts.model = values.model;
|
|
123
|
+
if (values.effort !== undefined)
|
|
124
|
+
opts.effort = values.effort;
|
|
125
|
+
if (values.sandbox !== undefined)
|
|
126
|
+
opts.sandbox = values.sandbox;
|
|
127
|
+
if (values.provider !== undefined)
|
|
128
|
+
opts.provider = values.provider;
|
|
129
|
+
if (values.tools !== undefined) {
|
|
130
|
+
const raw = String(values.tools);
|
|
131
|
+
opts.tools = raw.length === 0 ? [] : raw.split(",").map((s) => s.trim());
|
|
132
|
+
}
|
|
133
|
+
if (values.autonomy === true)
|
|
134
|
+
opts.autonomy = true;
|
|
135
|
+
else if (values["no-autonomy"] === true)
|
|
136
|
+
opts.autonomy = false;
|
|
137
|
+
else if (values.autonomy === false)
|
|
138
|
+
opts.autonomy = false; // for completeness
|
|
139
|
+
if (values.write === true)
|
|
140
|
+
opts.write = true;
|
|
141
|
+
else if (values["no-write"] === true)
|
|
142
|
+
opts.write = false;
|
|
143
|
+
if (values.shell === true)
|
|
144
|
+
opts.shell = true;
|
|
145
|
+
else if (values["no-shell"] === true)
|
|
146
|
+
opts.shell = false;
|
|
147
|
+
if (values["max-steps"] !== undefined) {
|
|
148
|
+
const n = Number(values["max-steps"]);
|
|
149
|
+
if (!Number.isFinite(n)) {
|
|
150
|
+
throw new ArgvRefusalError({
|
|
151
|
+
issue: "invalid-option-value",
|
|
152
|
+
harness: "claude",
|
|
153
|
+
option: "maxSteps",
|
|
154
|
+
supported: ["integer 1-10000"],
|
|
155
|
+
detail: String(values["max-steps"]),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
opts.maxSteps = n;
|
|
159
|
+
}
|
|
160
|
+
// discovery facets: --no-* means false, otherwise undefined (no-op)
|
|
161
|
+
const discovery = {};
|
|
162
|
+
let hasDiscovery = false;
|
|
163
|
+
if (values["no-tools"] === true) {
|
|
164
|
+
discovery.tools = false;
|
|
165
|
+
hasDiscovery = true;
|
|
166
|
+
}
|
|
167
|
+
if (values["no-instruction-files"] === true) {
|
|
168
|
+
discovery.instructionFiles = false;
|
|
169
|
+
hasDiscovery = true;
|
|
170
|
+
}
|
|
171
|
+
if (values["no-extensions"] === true) {
|
|
172
|
+
discovery.extensions = false;
|
|
173
|
+
hasDiscovery = true;
|
|
174
|
+
}
|
|
175
|
+
if (values["no-skills"] === true) {
|
|
176
|
+
discovery.skills = false;
|
|
177
|
+
hasDiscovery = true;
|
|
178
|
+
}
|
|
179
|
+
if (hasDiscovery)
|
|
180
|
+
opts.discovery = discovery;
|
|
181
|
+
// prompt will be set by caller after resolvePrompt
|
|
182
|
+
return opts;
|
|
183
|
+
};
|
|
184
|
+
export const parseRunExtra = (values) => {
|
|
185
|
+
const extra = {};
|
|
186
|
+
if (values.cwd !== undefined)
|
|
187
|
+
extra.cwd = String(values.cwd);
|
|
188
|
+
if (values.resume !== undefined)
|
|
189
|
+
extra.resume = String(values.resume);
|
|
190
|
+
if (values["session-id"] !== undefined)
|
|
191
|
+
extra.resume = String(values["session-id"]);
|
|
192
|
+
if (values.env !== undefined) {
|
|
193
|
+
// parseArgs with multiple:true gives string[] ; else string
|
|
194
|
+
const list = values.env;
|
|
195
|
+
extra.env = parseEnvEntries(list);
|
|
196
|
+
}
|
|
197
|
+
return extra;
|
|
198
|
+
};
|
|
199
|
+
const KNOWN_FLAGS = new Set([
|
|
200
|
+
"--prompt",
|
|
201
|
+
"--prompt-file",
|
|
202
|
+
"--model",
|
|
203
|
+
"--effort",
|
|
204
|
+
"--sandbox",
|
|
205
|
+
"--provider",
|
|
206
|
+
"--tools",
|
|
207
|
+
"--autonomy",
|
|
208
|
+
"--no-autonomy",
|
|
209
|
+
"--write",
|
|
210
|
+
"--no-write",
|
|
211
|
+
"--shell",
|
|
212
|
+
"--no-shell",
|
|
213
|
+
"--max-steps",
|
|
214
|
+
"--no-tools",
|
|
215
|
+
"--no-instruction-files",
|
|
216
|
+
"--no-extensions",
|
|
217
|
+
"--no-skills",
|
|
218
|
+
"--cwd",
|
|
219
|
+
"--env",
|
|
220
|
+
"--resume",
|
|
221
|
+
"--session-id",
|
|
222
|
+
"--json",
|
|
223
|
+
"--argv",
|
|
224
|
+
"--help",
|
|
225
|
+
"-h",
|
|
226
|
+
"--version",
|
|
227
|
+
"-V",
|
|
228
|
+
]);
|
|
229
|
+
const FLAGS_WITH_VALUE = new Set([
|
|
230
|
+
"--prompt",
|
|
231
|
+
"--prompt-file",
|
|
232
|
+
"--model",
|
|
233
|
+
"--effort",
|
|
234
|
+
"--sandbox",
|
|
235
|
+
"--provider",
|
|
236
|
+
"--tools",
|
|
237
|
+
"--max-steps",
|
|
238
|
+
"--cwd",
|
|
239
|
+
"--env",
|
|
240
|
+
"--resume",
|
|
241
|
+
"--session-id",
|
|
242
|
+
]);
|
|
243
|
+
export const detectPositionalPromptInjection = (argv) => {
|
|
244
|
+
const hasExplicitPrompt = argv.some((a) => a === "--prompt" ||
|
|
245
|
+
a.startsWith("--prompt=") ||
|
|
246
|
+
a === "--prompt-file" ||
|
|
247
|
+
a.startsWith("--prompt-file="));
|
|
248
|
+
if (hasExplicitPrompt)
|
|
249
|
+
return null;
|
|
250
|
+
let expectValue = false;
|
|
251
|
+
for (const token of argv) {
|
|
252
|
+
if (expectValue) {
|
|
253
|
+
expectValue = false;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (FLAGS_WITH_VALUE.has(token)) {
|
|
257
|
+
expectValue = true;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
if (token.startsWith("--") && token.includes("=")) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (KNOWN_FLAGS.has(token)) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (token === "--") {
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
// Only single-dash tokens are considered prompt injection candidates
|
|
270
|
+
// Double-dash unknown flags (e.g. --unknown) are handled as unknown flag errors by parseArgs
|
|
271
|
+
if (token.startsWith("-") && !token.startsWith("--")) {
|
|
272
|
+
return token;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
};
|
|
277
|
+
const preprocessPromptArgs = (argv) => {
|
|
278
|
+
const out = [];
|
|
279
|
+
for (let i = 0; i < argv.length; i++) {
|
|
280
|
+
const token = argv[i];
|
|
281
|
+
if (token === "--prompt" && i + 1 < argv.length) {
|
|
282
|
+
const next = argv[i + 1];
|
|
283
|
+
// If next starts with '-' and isn't '--', convert to --prompt=-value form so parseArgs accepts it
|
|
284
|
+
if (next.startsWith("-") && next !== "--" && !next.startsWith("--prompt")) {
|
|
285
|
+
out.push(`--prompt=${next}`);
|
|
286
|
+
i++;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (token.startsWith("--prompt=")) {
|
|
291
|
+
out.push(token);
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
out.push(token);
|
|
295
|
+
}
|
|
296
|
+
return out;
|
|
297
|
+
};
|
|
298
|
+
/**
|
|
299
|
+
* Wrapper around node:util parseArgs for the common flag table.
|
|
300
|
+
* Throws with exit code 2 on unknown flag.
|
|
301
|
+
*/
|
|
302
|
+
export const parseCommonFlags = (argv, opts = {}) => {
|
|
303
|
+
const normalized = preprocessPromptArgs(argv);
|
|
304
|
+
const config = {
|
|
305
|
+
allowPositionals: true,
|
|
306
|
+
strict: opts.strict ?? true,
|
|
307
|
+
options: {
|
|
308
|
+
prompt: { type: "string" },
|
|
309
|
+
"prompt-file": { type: "string" },
|
|
310
|
+
model: { type: "string" },
|
|
311
|
+
effort: { type: "string" },
|
|
312
|
+
sandbox: { type: "string" },
|
|
313
|
+
provider: { type: "string" },
|
|
314
|
+
tools: { type: "string" },
|
|
315
|
+
autonomy: { type: "boolean" },
|
|
316
|
+
"no-autonomy": { type: "boolean" },
|
|
317
|
+
write: { type: "boolean" },
|
|
318
|
+
"no-write": { type: "boolean" },
|
|
319
|
+
shell: { type: "boolean" },
|
|
320
|
+
"no-shell": { type: "boolean" },
|
|
321
|
+
"max-steps": { type: "string" },
|
|
322
|
+
"no-tools": { type: "boolean" },
|
|
323
|
+
"no-instruction-files": { type: "boolean" },
|
|
324
|
+
"no-extensions": { type: "boolean" },
|
|
325
|
+
"no-skills": { type: "boolean" },
|
|
326
|
+
cwd: { type: "string" },
|
|
327
|
+
env: { type: "string", multiple: true },
|
|
328
|
+
resume: { type: "string" },
|
|
329
|
+
"session-id": { type: "string" },
|
|
330
|
+
json: { type: "boolean" },
|
|
331
|
+
argv: { type: "boolean" },
|
|
332
|
+
help: { type: "boolean" },
|
|
333
|
+
version: { type: "boolean" },
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
// parseArgs throws on unknown flag when strict true - we let it bubble and caller maps to exit 2
|
|
337
|
+
return parseArgs({ ...config, args: normalized });
|
|
338
|
+
};
|
|
339
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"AAmDA,eAAO,MAAM,KAAK,YAAmB,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAoF3D,CAAC"}
|