@dungle-scrubs/harness-cli-normalizer 0.1.2 → 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
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { versionStatus } from "../interpretation/versions.js";
|
|
3
|
+
import { defaultDescriptors } from "../knowledge/overrides.js";
|
|
4
|
+
const npmLatest = async (pkg) => {
|
|
5
|
+
try {
|
|
6
|
+
const res = await fetch(`https://registry.npmjs.org/${pkg}`, {
|
|
7
|
+
headers: { accept: "application/vnd.npm.install-v1+json" },
|
|
8
|
+
signal: AbortSignal.timeout(10_000),
|
|
9
|
+
});
|
|
10
|
+
if (!res.ok)
|
|
11
|
+
return null;
|
|
12
|
+
const body = (await res.json());
|
|
13
|
+
const latest = body["dist-tags"]?.latest;
|
|
14
|
+
return typeof latest === "string" ? latest : null;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const installedVersion = (bin) => {
|
|
21
|
+
try {
|
|
22
|
+
const out = execFileSync(bin, ["--version"], { encoding: "utf8", timeout: 10_000 });
|
|
23
|
+
const match = out.match(/\d+\.\d+\.\d+(?:[.+-][0-9A-Za-z.-]+)?/);
|
|
24
|
+
return match ? match[0] : null;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const resolveLatest = async (h) => {
|
|
31
|
+
if (h.versionSource.kind === "npm") {
|
|
32
|
+
return {
|
|
33
|
+
latest: await npmLatest(h.versionSource.package),
|
|
34
|
+
source: `npm:${h.versionSource.package}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return { latest: installedVersion(h.bin), source: `installed:${h.bin}` };
|
|
38
|
+
};
|
|
39
|
+
export const check = async (rawArgs) => {
|
|
40
|
+
const wantJson = rawArgs.includes("--json");
|
|
41
|
+
const wantHelp = rawArgs.includes("--help") || rawArgs.includes("-h");
|
|
42
|
+
if (wantHelp) {
|
|
43
|
+
const { CHECK_HELP } = await import("./help.js");
|
|
44
|
+
process.stdout.write(CHECK_HELP);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const descriptors = Object.values(defaultDescriptors()).filter((d) => d !== undefined);
|
|
48
|
+
const rows = await Promise.all(descriptors.map(async (h) => {
|
|
49
|
+
const { latest, source } = await resolveLatest(h);
|
|
50
|
+
return {
|
|
51
|
+
harness: h.name,
|
|
52
|
+
bin: h.bin,
|
|
53
|
+
verifiedAgainst: h.verifiedAgainst,
|
|
54
|
+
latest,
|
|
55
|
+
source,
|
|
56
|
+
status: versionStatus(h.verifiedAgainst, latest),
|
|
57
|
+
};
|
|
58
|
+
}));
|
|
59
|
+
const behind = rows.filter((r) => r.status === "behind");
|
|
60
|
+
const unknown = rows.filter((r) => r.status === "unknown");
|
|
61
|
+
if (wantJson) {
|
|
62
|
+
process.stdout.write(`${JSON.stringify({ checkedAt: new Date().toISOString(), rows, behind: behind.map((r) => r.harness) }, null, 2)}\n`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const mark = (s) => s === "ok" ? "✓ ok" : s === "behind" ? "⬆ NEW" : s === "ahead" ? "? ahead" : "– unknown";
|
|
66
|
+
process.stdout.write(`\n${"harness".padEnd(9)}${"verified".padEnd(12)}${"latest".padEnd(12)}status\n`);
|
|
67
|
+
for (const r of rows) {
|
|
68
|
+
process.stdout.write(`${r.harness.padEnd(9)}${r.verifiedAgainst.padEnd(12)}${(r.latest ?? "?").padEnd(12)}${mark(r.status)}\n`);
|
|
69
|
+
}
|
|
70
|
+
if (behind.length > 0) {
|
|
71
|
+
process.stdout.write(`\n${behind.length} harness(es) behind: ${behind.map((r) => `${r.harness} ${r.verifiedAgainst}→${r.latest}`).join(", ")}\n`);
|
|
72
|
+
process.stdout.write("Run the local capability tripwires (smoke:seven) against the new version, then file an issue + bump verifiedAgainst.\n");
|
|
73
|
+
}
|
|
74
|
+
else if (unknown.length > 0) {
|
|
75
|
+
process.stdout.write(`\n${unknown.length} harness(es) unknown (network or missing bin)\n`);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
process.stdout.write("\nall descriptors current with their published versions.\n");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Exit logic: behind => 1, unknown (network failure) => 1 with partial results, else 0
|
|
82
|
+
// But we must not exit 1 for unknown if behind already counts? We'll handle:
|
|
83
|
+
if (behind.length > 0) {
|
|
84
|
+
process.exitCode = 1;
|
|
85
|
+
}
|
|
86
|
+
else if (unknown.length > 0 && rows.some((r) => r.latest === null)) {
|
|
87
|
+
// network failure at least one
|
|
88
|
+
// Per spec: network failure prints warning and exits 1 with partial results
|
|
89
|
+
// We'll check if any latest is null and that we attempted npm fetch (could be network)
|
|
90
|
+
// Simpler: if unknown and not all ok, exit 1
|
|
91
|
+
// But spec says check should reuse versions.ts and not crash; exit 1 with partial results
|
|
92
|
+
// We'll exit 1 if any harness has unknown and at least one npm source failed - but we can't distinguish installed missing vs network.
|
|
93
|
+
// For now, exit 1 if unknown.length >0 and at least one behind==0? Actually spec says network failure => exit 1.
|
|
94
|
+
// We'll exit 1 if unknown includes npm harnesses (they shouldn't be unknown without network).
|
|
95
|
+
const npmUnknown = rows.filter((r) => r.source.startsWith("npm:") && r.status === "unknown");
|
|
96
|
+
if (npmUnknown.length > 0)
|
|
97
|
+
process.exitCode = 1;
|
|
98
|
+
else if (behind.length === 0 && unknown.length > 0) {
|
|
99
|
+
// installed unknown (muse missing) is not necessarily failure? But spec says network failure case is 1.
|
|
100
|
+
// For installed missing, we treat as unknown but not failure - keep 0 to not break CI where muse not installed.
|
|
101
|
+
// However spec says check prints partial results and exits 1 on network failure.
|
|
102
|
+
// We'll only exit 1 for npmUnknown, otherwise 0.
|
|
103
|
+
process.exitCode = 0;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
process.exitCode = 0;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/cli/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExitCause } from "../execution/events.js";
|
|
2
|
+
export declare const EXIT_CLEAN = 0;
|
|
3
|
+
export declare const EXIT_REFUSAL = 2;
|
|
4
|
+
export declare const EXIT_FAILURE = 1;
|
|
5
|
+
export declare const exitCodeForCause: (cause: ExitCause) => number;
|
|
6
|
+
export declare const exitCodeForRefusal: () => number;
|
|
7
|
+
//# sourceMappingURL=exit-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/cli/exit-codes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,eAAO,MAAM,gBAAgB,UAAW,SAAS,KAAG,MAInD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAAsB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const EXIT_CLEAN = 0;
|
|
2
|
+
export const EXIT_REFUSAL = 2;
|
|
3
|
+
export const EXIT_FAILURE = 1;
|
|
4
|
+
export const exitCodeForCause = (cause) => {
|
|
5
|
+
if (cause === "clean")
|
|
6
|
+
return EXIT_CLEAN;
|
|
7
|
+
// All non-clean causes are failures that should be exit 1, except refusal is already handled separately
|
|
8
|
+
return EXIT_FAILURE;
|
|
9
|
+
};
|
|
10
|
+
export const exitCodeForRefusal = () => EXIT_REFUSAL;
|
|
11
|
+
//# sourceMappingURL=exit-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/cli/exit-codes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAU,EAAE;IAC3D,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC;IACzC,wGAAwG;IACxG,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
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";
|
|
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
|
+
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
|
+
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";
|
|
6
|
+
export declare const CHECK_HELP = "hcn check - Drift check\n\nUsage: hcn check [--json]\n\nCompares each harness's verifiedAgainst against the latest published version.\nExits 0 when no drift, 1 when drift found, 1 on network failure with partial results.\n\nOptions:\n --json Machine-readable output\n -h, --help Show help\n";
|
|
7
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export const TOP_LEVEL_HELP = `hcn - One stable interface to four coding-agent CLIs
|
|
2
|
+
|
|
3
|
+
Usage: hcn <command> [options] [prompt]
|
|
4
|
+
|
|
5
|
+
Commands:
|
|
6
|
+
run <harness> [prompt] One-shot headless turn (streamTurn)
|
|
7
|
+
session <harness> Interactive session (openSession, Claude-only)
|
|
8
|
+
inspect <harness> Descriptor / argv / capability inspection (no spawn)
|
|
9
|
+
ls List harnesses with verifiedAgainst versions
|
|
10
|
+
check Drift check (published version vs verifiedAgainst)
|
|
11
|
+
|
|
12
|
+
Options:
|
|
13
|
+
-h, --help Show help
|
|
14
|
+
-V, --version Show version
|
|
15
|
+
|
|
16
|
+
Run 'hcn <command> --help' for command-specific help.
|
|
17
|
+
`;
|
|
18
|
+
export const RUN_HELP = `hcn run - One-shot headless turn
|
|
19
|
+
|
|
20
|
+
Usage: hcn run <harness> [prompt] [options]
|
|
21
|
+
|
|
22
|
+
Arguments:
|
|
23
|
+
<harness> claude | codex | pi | muse
|
|
24
|
+
[prompt] Prompt text (positional). Must not start with '-'.
|
|
25
|
+
Use --prompt or --prompt-file for leading '-' or multi-line.
|
|
26
|
+
|
|
27
|
+
Options:
|
|
28
|
+
--prompt <text> Prompt text (alternative to positional)
|
|
29
|
+
--prompt-file <path|-> Read prompt from file, or stdin when '-'
|
|
30
|
+
--model <id> Model id (validated per harness)
|
|
31
|
+
--effort <value> Effort level (validated per harness/model)
|
|
32
|
+
--sandbox <value> Sandbox mode (codex only)
|
|
33
|
+
--provider <value> Provider (pi only)
|
|
34
|
+
--tools <a,b> Tool grants (claude only, comma-separated)
|
|
35
|
+
--autonomy Enable autonomy flag (claude/codex/muse)
|
|
36
|
+
--no-autonomy Disable autonomy
|
|
37
|
+
--write Enable write (muse)
|
|
38
|
+
--no-write Disable write
|
|
39
|
+
--shell Enable shell (muse)
|
|
40
|
+
--no-shell Disable shell
|
|
41
|
+
--max-steps <n> Max steps (muse, 1-10000)
|
|
42
|
+
--no-tools Disable tools discovery facet
|
|
43
|
+
--no-instruction-files Disable instructionFiles discovery facet
|
|
44
|
+
--no-extensions Disable extensions discovery facet
|
|
45
|
+
--no-skills Disable skills discovery facet
|
|
46
|
+
--cwd <path> Working directory for spawn
|
|
47
|
+
--env KEY=VAL Environment (repeatable; KEY= deletes)
|
|
48
|
+
--resume <uuid> Resume session id (UUID)
|
|
49
|
+
--json NDJSON HarnessEvent to stdout
|
|
50
|
+
-h, --help Show help
|
|
51
|
+
-V, --version Show version
|
|
52
|
+
`;
|
|
53
|
+
export const SESSION_HELP = `hcn session - Interactive session (Claude-only)
|
|
54
|
+
|
|
55
|
+
Usage: hcn session <harness> [options]
|
|
56
|
+
|
|
57
|
+
Arguments:
|
|
58
|
+
<harness> Must be 'claude' (other harnesses have no sessionMode)
|
|
59
|
+
|
|
60
|
+
Options:
|
|
61
|
+
--model <id> Model for the session
|
|
62
|
+
--session-id <uuid> Session id (UUID, else random)
|
|
63
|
+
--cwd <path> Working directory
|
|
64
|
+
--help Show help
|
|
65
|
+
--version Show version
|
|
66
|
+
`;
|
|
67
|
+
export const INSPECT_HELP = `hcn inspect - Descriptor / argv inspection
|
|
68
|
+
|
|
69
|
+
Usage: hcn inspect <harness> [options]
|
|
70
|
+
|
|
71
|
+
Arguments:
|
|
72
|
+
<harness> claude | codex | pi | muse
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--argv Preview argv that would be spawned
|
|
76
|
+
--prompt <text> Prompt for argv preview
|
|
77
|
+
--prompt-file <path|-> Read prompt from file
|
|
78
|
+
--model <id> Model
|
|
79
|
+
--effort <value> Effort
|
|
80
|
+
--sandbox <value> Sandbox
|
|
81
|
+
--provider <value> Provider
|
|
82
|
+
--tools <a,b> Tools
|
|
83
|
+
--autonomy / --no-autonomy
|
|
84
|
+
--write / --no-write
|
|
85
|
+
--shell / --no-shell
|
|
86
|
+
--max-steps <n>
|
|
87
|
+
--no-tools, --no-instruction-files, --no-extensions, --no-skills
|
|
88
|
+
--cwd <path>
|
|
89
|
+
--env KEY=VAL
|
|
90
|
+
--resume <uuid>
|
|
91
|
+
-h, --help Show help
|
|
92
|
+
`;
|
|
93
|
+
export const LS_HELP = `hcn ls - List harnesses
|
|
94
|
+
|
|
95
|
+
Usage: hcn ls
|
|
96
|
+
|
|
97
|
+
Prints each harness name with its verifiedAgainst version and versionSource.
|
|
98
|
+
`;
|
|
99
|
+
export const CHECK_HELP = `hcn check - Drift check
|
|
100
|
+
|
|
101
|
+
Usage: hcn check [--json]
|
|
102
|
+
|
|
103
|
+
Compares each harness's verifiedAgainst against the latest published version.
|
|
104
|
+
Exits 0 when no drift, 1 when drift found, 1 on network failure with partial results.
|
|
105
|
+
|
|
106
|
+
Options:
|
|
107
|
+
--json Machine-readable output
|
|
108
|
+
-h, --help Show help
|
|
109
|
+
`;
|
|
110
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCvB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;CAa3B,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB3B,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;CAKtB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;CAUzB,CAAC"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { TOP_LEVEL_HELP } from "./help.js";
|
|
3
|
+
import { getVersion } from "./version.js";
|
|
4
|
+
const SUPPORTED = ["claude", "codex", "pi", "muse"];
|
|
5
|
+
// Prevent EPIPE crashes when piped to head/grep -q (e.g., hcn ls | head, hcn run --json | head)
|
|
6
|
+
process.stdout.on("error", (err) => {
|
|
7
|
+
const code = err.code;
|
|
8
|
+
if (code === "EPIPE")
|
|
9
|
+
process.exit(0);
|
|
10
|
+
});
|
|
11
|
+
process.stderr.on("error", (err) => {
|
|
12
|
+
const code = err.code;
|
|
13
|
+
if (code === "EPIPE")
|
|
14
|
+
process.exit(0);
|
|
15
|
+
});
|
|
16
|
+
const printVersion = () => {
|
|
17
|
+
process.stdout.write(`${getVersion()}\n`);
|
|
18
|
+
};
|
|
19
|
+
const printTopHelp = () => {
|
|
20
|
+
process.stdout.write(TOP_LEVEL_HELP);
|
|
21
|
+
};
|
|
22
|
+
export const failUnknownHarness = (name) => {
|
|
23
|
+
process.stderr.write(`unknown harness ${JSON.stringify(name)}; supported: ${SUPPORTED.join(", ")}\n`);
|
|
24
|
+
process.stderr.write(`supported: ${SUPPORTED.join(", ")}\n`);
|
|
25
|
+
process.exitCode = 2;
|
|
26
|
+
// Use process.exit to ensure exit code is set even if async
|
|
27
|
+
process.exit(2);
|
|
28
|
+
};
|
|
29
|
+
export const dispatch = async (raw) => {
|
|
30
|
+
// Shared dispatch for programmatic use (tests) - mirrors main but takes argv slice
|
|
31
|
+
// Global --help / --version without command
|
|
32
|
+
if (raw.length === 0 || raw[0] === "--help" || raw[0] === "-h") {
|
|
33
|
+
if (raw.includes("--version") || raw.includes("-V")) {
|
|
34
|
+
printVersion();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
printTopHelp();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (raw[0] === "--version" || raw[0] === "-V") {
|
|
41
|
+
printVersion();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const cmd = raw[0];
|
|
45
|
+
switch (cmd) {
|
|
46
|
+
case "ls": {
|
|
47
|
+
if (raw.includes("--help") || raw.includes("-h")) {
|
|
48
|
+
const { LS_HELP } = await import("./help.js");
|
|
49
|
+
process.stdout.write(LS_HELP);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (raw.includes("--version") || raw.includes("-V")) {
|
|
53
|
+
printVersion();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (raw.length > 1) {
|
|
57
|
+
const extra = raw.slice(1);
|
|
58
|
+
const hasUnknown = extra.some((a) => a.startsWith("-"));
|
|
59
|
+
if (hasUnknown) {
|
|
60
|
+
process.stderr.write(`unknown flag for ls: ${extra.join(" ")}\n`);
|
|
61
|
+
process.exitCode = 2;
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const { ls } = await import("./ls.js");
|
|
66
|
+
ls();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
case "check": {
|
|
70
|
+
const { check } = await import("./check.js");
|
|
71
|
+
await check(raw.slice(1));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
case "inspect": {
|
|
75
|
+
if (raw.slice(1).includes("--help") || raw.slice(1).includes("-h")) {
|
|
76
|
+
const { INSPECT_HELP } = await import("./help.js");
|
|
77
|
+
process.stdout.write(INSPECT_HELP);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const harness = raw[1];
|
|
81
|
+
if (!harness || harness.startsWith("-")) {
|
|
82
|
+
process.stderr.write(`inspect requires <harness>; supported: ${SUPPORTED.join(", ")}\n`);
|
|
83
|
+
process.exitCode = 2;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (!SUPPORTED.includes(harness))
|
|
87
|
+
failUnknownHarness(harness);
|
|
88
|
+
const { inspect } = await import("./inspect.js");
|
|
89
|
+
await inspect(harness, raw.slice(2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
case "run": {
|
|
93
|
+
if (raw.slice(1).includes("--help") || raw.slice(1).includes("-h")) {
|
|
94
|
+
const { RUN_HELP } = await import("./help.js");
|
|
95
|
+
process.stdout.write(RUN_HELP);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (raw.slice(1).includes("--version") || raw.slice(1).includes("-V")) {
|
|
99
|
+
printVersion();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const harness = raw[1];
|
|
103
|
+
if (!harness || harness.startsWith("-")) {
|
|
104
|
+
process.stderr.write(`run requires <harness>; supported: ${SUPPORTED.join(", ")}\n`);
|
|
105
|
+
process.exitCode = 2;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!SUPPORTED.includes(harness))
|
|
109
|
+
failUnknownHarness(harness);
|
|
110
|
+
const { run } = await import("./run.js");
|
|
111
|
+
await run(harness, raw.slice(2));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
case "session": {
|
|
115
|
+
if (raw.slice(1).includes("--help") || raw.slice(1).includes("-h")) {
|
|
116
|
+
const { SESSION_HELP } = await import("./help.js");
|
|
117
|
+
process.stdout.write(SESSION_HELP);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const harness = raw[1];
|
|
121
|
+
if (!harness || harness.startsWith("-")) {
|
|
122
|
+
process.stderr.write(`session requires <harness>; supported: ${SUPPORTED.join(", ")}\n`);
|
|
123
|
+
process.exitCode = 2;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!SUPPORTED.includes(harness))
|
|
127
|
+
failUnknownHarness(harness);
|
|
128
|
+
const { session } = await import("./session.js");
|
|
129
|
+
await session(harness, raw.slice(2));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
case "help":
|
|
133
|
+
case "--help":
|
|
134
|
+
case "-h": {
|
|
135
|
+
printTopHelp();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
default: {
|
|
139
|
+
if (SUPPORTED.includes(cmd)) {
|
|
140
|
+
process.stderr.write(`missing command; did you mean 'hcn run ${cmd} <prompt>'?\n`);
|
|
141
|
+
process.stderr.write(TOP_LEVEL_HELP);
|
|
142
|
+
process.exitCode = 2;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
process.stderr.write(`unknown command ${JSON.stringify(cmd)}\n`);
|
|
146
|
+
process.stderr.write(TOP_LEVEL_HELP);
|
|
147
|
+
process.exitCode = 2;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const main = async () => {
|
|
153
|
+
await dispatch(process.argv.slice(2));
|
|
154
|
+
};
|
|
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) {
|
|
160
|
+
main().catch((err) => {
|
|
161
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
162
|
+
process.stderr.write(`fatal: ${message}\n`);
|
|
163
|
+
if (err instanceof Error && err.stack)
|
|
164
|
+
process.stderr.write(`${err.stack}\n`);
|
|
165
|
+
process.exitCode = 1;
|
|
166
|
+
if (process.exitCode === 0)
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/cli/inspect.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,gBAAuB,MAAM,WAAW,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAqKlF,CAAC;AAEF,eAAO,MAAM,cAAc,gBAAU,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { redactArgv } from "../execution/stream-turn.js";
|
|
2
|
+
import { buildLaunchArgv } from "../interpretation/argv.js";
|
|
3
|
+
import { ArgvRefusalError } from "../interpretation/refusal.js";
|
|
4
|
+
import { parseTurnOptions, resolvePromptAsync } from "./args.js";
|
|
5
|
+
import { resolveHarness } from "./resolve-harness.js";
|
|
6
|
+
export const inspect = async (harnessName, rawArgs) => {
|
|
7
|
+
const h = resolveHarness(harnessName);
|
|
8
|
+
// Check for --help
|
|
9
|
+
if (rawArgs.includes("--help") || rawArgs.includes("-h")) {
|
|
10
|
+
const { INSPECT_HELP } = await import("./help.js");
|
|
11
|
+
process.stdout.write(INSPECT_HELP);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
// Check for positional prompt injection before parse (only when --argv and no explicit prompt)
|
|
15
|
+
const { parseCommonFlags, detectPositionalPromptInjection } = await import("./args.js");
|
|
16
|
+
if (rawArgs.includes("--argv")) {
|
|
17
|
+
const injection = detectPositionalPromptInjection(rawArgs.filter((a) => a !== "--argv"));
|
|
18
|
+
if (injection) {
|
|
19
|
+
const err = new ArgvRefusalError({
|
|
20
|
+
issue: "prompt-flag-injection",
|
|
21
|
+
harness: h.name,
|
|
22
|
+
supported: ["prompt must not start with '-'"],
|
|
23
|
+
detail: `it would be parsed as a flag by ${h.bin}`,
|
|
24
|
+
});
|
|
25
|
+
process.stderr.write(`${err.message}\n`);
|
|
26
|
+
process.stderr.write(`supported: prompt must not start with '-'\n`);
|
|
27
|
+
process.exitCode = 2;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Parse flags for inspect
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = parseCommonFlags(rawArgs);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
38
|
+
process.stderr.write(`unknown flag: ${message}\n`);
|
|
39
|
+
process.stderr.write(`Run 'hcn inspect --help' for usage.\n`);
|
|
40
|
+
process.exitCode = 2;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const values = parsed.values;
|
|
44
|
+
const wantArgv = values.argv === true;
|
|
45
|
+
if (!wantArgv) {
|
|
46
|
+
// Pure descriptor dump
|
|
47
|
+
const out = {
|
|
48
|
+
name: h.name,
|
|
49
|
+
bin: h.bin,
|
|
50
|
+
verifiedAgainst: h.verifiedAgainst,
|
|
51
|
+
versionSource: h.versionSource,
|
|
52
|
+
launch: {
|
|
53
|
+
baseFlags: h.launch.baseFlags,
|
|
54
|
+
subcommands: h.launch.subcommands,
|
|
55
|
+
streamFlags: h.launch.streamFlags,
|
|
56
|
+
promptStyle: h.launch.promptStyle,
|
|
57
|
+
toolsFlag: h.launch.toolsFlag,
|
|
58
|
+
idFlag: h.launch.idFlag,
|
|
59
|
+
},
|
|
60
|
+
resume: h.resume,
|
|
61
|
+
sessionMode: h.sessionMode,
|
|
62
|
+
vocabulary: {
|
|
63
|
+
models: h.vocabulary.models,
|
|
64
|
+
aliases: h.vocabulary.aliases,
|
|
65
|
+
efforts: h.vocabulary.efforts,
|
|
66
|
+
effortsByModel: h.vocabulary.effortsByModel,
|
|
67
|
+
extensible: h.vocabulary.extensible,
|
|
68
|
+
modelFlag: h.vocabulary.modelFlag,
|
|
69
|
+
},
|
|
70
|
+
turnOptions: h.turnOptions,
|
|
71
|
+
};
|
|
72
|
+
process.stdout.write(`${JSON.stringify(out, null, 2)}\n`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// --argv preview path: need prompt + turn options
|
|
76
|
+
const positional = parsed.positionals;
|
|
77
|
+
// positional[0] would be harness already consumed, but we passed rawArgs without harness - check: caller passes remaining after harness
|
|
78
|
+
// So positionals are potential prompt positional if not using --prompt
|
|
79
|
+
const positionalPrompt = positional.length > 0 ? positional[0] : undefined;
|
|
80
|
+
if (positional.length > 1) {
|
|
81
|
+
process.stderr.write(`too many positionals for inspect --argv\n`);
|
|
82
|
+
process.exitCode = 2;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
let prompt;
|
|
86
|
+
let promptSource;
|
|
87
|
+
try {
|
|
88
|
+
const resolved = await resolvePromptAsync({
|
|
89
|
+
positionalPrompt,
|
|
90
|
+
promptFlag: values.prompt,
|
|
91
|
+
promptFile: values["prompt-file"],
|
|
92
|
+
});
|
|
93
|
+
prompt = resolved.prompt;
|
|
94
|
+
promptSource = resolved.source;
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err instanceof ArgvRefusalError) {
|
|
98
|
+
process.stderr.write(`${err.message}\n`);
|
|
99
|
+
if (err.supported.length)
|
|
100
|
+
process.stderr.write(`supported: ${err.supported.join(", ")}\n`);
|
|
101
|
+
process.exitCode = 2;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
// Build TurnOptions from flags
|
|
107
|
+
let turnOpts;
|
|
108
|
+
try {
|
|
109
|
+
turnOpts = parseTurnOptions(values);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err instanceof ArgvRefusalError) {
|
|
113
|
+
process.stderr.write(`${err.message}\n`);
|
|
114
|
+
if (err.supported.length)
|
|
115
|
+
process.stderr.write(`supported: ${err.supported.join(", ")}\n`);
|
|
116
|
+
process.exitCode = 2;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
throw err;
|
|
120
|
+
}
|
|
121
|
+
const fullOpts = {
|
|
122
|
+
...turnOpts,
|
|
123
|
+
prompt,
|
|
124
|
+
...(promptSource !== "positional" ? { __explicitPrompt: true } : {}),
|
|
125
|
+
};
|
|
126
|
+
let argv;
|
|
127
|
+
try {
|
|
128
|
+
argv = buildLaunchArgv(h, fullOpts);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err instanceof ArgvRefusalError) {
|
|
132
|
+
process.stderr.write(`${err.message}\n`);
|
|
133
|
+
if (err.supported.length)
|
|
134
|
+
process.stderr.write(`supported: ${err.supported.join(", ")}\n`);
|
|
135
|
+
process.exitCode = 2;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
throw err;
|
|
139
|
+
}
|
|
140
|
+
// Redact prompt for display, but keep structure
|
|
141
|
+
const redacted = redactArgv(argv, prompt);
|
|
142
|
+
// Also handle --resume case: need to use buildResumeArgv if resume present
|
|
143
|
+
if (values.resume !== undefined || values["session-id"] !== undefined) {
|
|
144
|
+
// For inspect --argv with --resume, show resume argv
|
|
145
|
+
const { buildResumeArgv } = await import("../interpretation/argv.js");
|
|
146
|
+
const resumeId = String(values.resume ?? values["session-id"]);
|
|
147
|
+
try {
|
|
148
|
+
const resumeOpts = { ...fullOpts, sessionId: resumeId };
|
|
149
|
+
const resumeArgv = buildResumeArgv(h, resumeOpts);
|
|
150
|
+
const redactedResume = redactArgv(resumeArgv, prompt);
|
|
151
|
+
process.stdout.write(`${JSON.stringify(redactedResume)}\n`);
|
|
152
|
+
process.stderr.write(`argv: ${redactedResume.join(" ")}\n`);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
if (err instanceof ArgvRefusalError) {
|
|
157
|
+
process.stderr.write(`${err.message}\n`);
|
|
158
|
+
if (err.supported.length)
|
|
159
|
+
process.stderr.write(`supported: ${err.supported.join(", ")}\n`);
|
|
160
|
+
process.exitCode = 2;
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
process.stdout.write(`${JSON.stringify(redacted)}\n`);
|
|
167
|
+
process.stderr.write(`argv: ${redacted.join(" ")}\n`);
|
|
168
|
+
};
|
|
169
|
+
export const inspectCommand = inspect;
|
|
170
|
+
//# sourceMappingURL=inspect.js.map
|