@dungle-scrubs/harness-cli-normalizer 0.1.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -13
- 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 +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +186 -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 +3 -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 +5 -1
- package/dist/execution/stream-turn.d.ts.map +1 -1
- package/dist/execution/stream-turn.js +188 -24
- 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/store.js +1 -1
- 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 +25 -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 +1 -1
- package/dist/knowledge/pi.d.ts.map +1 -1
- package/dist/knowledge/pi.js +33 -9
- 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 +190 -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 +192 -21
- 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/store.ts +1 -1
- 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 +25 -6
- package/src/knowledge/overrides.ts +97 -0
- package/src/knowledge/pi.ts +33 -9
|
@@ -23,6 +23,10 @@ export const defaultDescriptors = () => ({
|
|
|
23
23
|
pi: piCli,
|
|
24
24
|
muse: museCode,
|
|
25
25
|
});
|
|
26
|
+
/** Tracks which descriptors were produced by an override file and what their
|
|
27
|
+
* matcher counts are, so the execution layer can emit `matcherOverrides` on
|
|
28
|
+
* the spawn boundary event without re-deriving it. */
|
|
29
|
+
export const matcherOverridesOf = new WeakMap();
|
|
26
30
|
export class OverrideRefusalError extends Error {
|
|
27
31
|
path;
|
|
28
32
|
harness;
|
|
@@ -130,6 +134,62 @@ const mergeValue = (base, override, keyPath, refuse) => {
|
|
|
130
134
|
}
|
|
131
135
|
return override;
|
|
132
136
|
};
|
|
137
|
+
const validateMatcherPattern = (pattern, flags, path, harness) => {
|
|
138
|
+
const f = flags ?? "i";
|
|
139
|
+
if (pattern.length > 200) {
|
|
140
|
+
throw new OverrideRefusalError(path, `pattern over 200 characters: ${JSON.stringify(pattern.slice(0, 40))}`, harness);
|
|
141
|
+
}
|
|
142
|
+
if (pattern.length === 0) {
|
|
143
|
+
throw new OverrideRefusalError(path, `pattern must not be empty`, harness);
|
|
144
|
+
}
|
|
145
|
+
if (f.includes("g") || f.includes("y")) {
|
|
146
|
+
throw new OverrideRefusalError(path, `flags must not contain g or y (got ${JSON.stringify(f)})`, harness);
|
|
147
|
+
}
|
|
148
|
+
for (const ch of f) {
|
|
149
|
+
if (!"imsu".includes(ch))
|
|
150
|
+
throw new OverrideRefusalError(path, `flag ${JSON.stringify(ch)} outside imsu`, harness);
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
new RegExp(pattern, f);
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
throw new OverrideRefusalError(path, `uncompilable pattern ${JSON.stringify(pattern)}: ${e.message}`, harness);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const validateMatchers = (desc, path, harness) => {
|
|
160
|
+
const limitMatchers = desc.limitMatchers;
|
|
161
|
+
const authMatchers = desc.authMatchers;
|
|
162
|
+
if (Array.isArray(limitMatchers)) {
|
|
163
|
+
if (limitMatchers.length > 64) {
|
|
164
|
+
throw new OverrideRefusalError(path, `more than 64 limit matchers`, harness);
|
|
165
|
+
}
|
|
166
|
+
for (const m of limitMatchers) {
|
|
167
|
+
if (!isPlain(m)) {
|
|
168
|
+
throw new OverrideRefusalError(path, `limit matcher must be an object`, harness);
|
|
169
|
+
}
|
|
170
|
+
const obj = m;
|
|
171
|
+
if (typeof obj.pattern !== "string" || typeof obj.code !== "string") {
|
|
172
|
+
throw new OverrideRefusalError(path, `limit matcher must have pattern and code`, harness);
|
|
173
|
+
}
|
|
174
|
+
validateMatcherPattern(obj.pattern, obj.flags, path, harness);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (Array.isArray(authMatchers)) {
|
|
178
|
+
if (authMatchers.length > 64) {
|
|
179
|
+
throw new OverrideRefusalError(path, `more than 64 auth matchers`, harness);
|
|
180
|
+
}
|
|
181
|
+
for (const m of authMatchers) {
|
|
182
|
+
if (!isPlain(m)) {
|
|
183
|
+
throw new OverrideRefusalError(path, `auth matcher must be an object`, harness);
|
|
184
|
+
}
|
|
185
|
+
const obj = m;
|
|
186
|
+
if (typeof obj.pattern !== "string" || typeof obj.kind !== "string") {
|
|
187
|
+
throw new OverrideRefusalError(path, `auth matcher must have pattern and kind`, harness);
|
|
188
|
+
}
|
|
189
|
+
validateMatcherPattern(obj.pattern, obj.flags, path, harness);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
};
|
|
133
193
|
/** Parse an override document and merge it over the code defaults. */
|
|
134
194
|
export const parseOverrides = (jsonText, path) => {
|
|
135
195
|
let doc;
|
|
@@ -159,6 +219,22 @@ export const parseOverrides = (jsonText, path) => {
|
|
|
159
219
|
if (next.store.template.includes("..")) {
|
|
160
220
|
refuse('store.template must not contain ".."');
|
|
161
221
|
}
|
|
222
|
+
// Validate matcher compilation at load time, not at first line
|
|
223
|
+
validateMatchers(next, path, name);
|
|
224
|
+
// Record matcher counts for the spawn boundary event when this descriptor was overridden
|
|
225
|
+
const defaultsForHarness = defaults[name];
|
|
226
|
+
const limitChanged = next.limitMatchers.length !==
|
|
227
|
+
defaultsForHarness.limitMatchers.length ||
|
|
228
|
+
JSON.stringify(next.limitMatchers) !== JSON.stringify(defaultsForHarness.limitMatchers);
|
|
229
|
+
const authChanged = next.authMatchers.length !==
|
|
230
|
+
defaultsForHarness.authMatchers.length ||
|
|
231
|
+
JSON.stringify(next.authMatchers) !== JSON.stringify(defaultsForHarness.authMatchers);
|
|
232
|
+
if (limitChanged || authChanged) {
|
|
233
|
+
matcherOverridesOf.set(next, {
|
|
234
|
+
limit: next.limitMatchers.length,
|
|
235
|
+
auth: next.authMatchers.length,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
162
238
|
merged[name] = next;
|
|
163
239
|
}
|
|
164
240
|
return merged;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/knowledge/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,aAAa,EAGb,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAkB,EAAE,CAAC,CAAC;IACtD,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,QAAQ;IACf,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,QAAQ;CACf,CAAC,CAAC;AAEH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC,IAAI;IAEJ,OAAO;IAHlB,YACW,IAAY,EACrB,MAAc,EACL,OAAgB;QAEzB,KAAK,CACH,iCAAiC,IAAI,KAAK,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CACzH,CAAC;oBANO,IAAI;uBAEJ,OAAO;QAKhB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,GAAG,CAAC,CAAU,EAAgC,EAAE,CAC3D,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC;AAErF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E,MAAM,aAAa,GAAG,CAAC,KAAc,EAAW,EAAE;IAChD,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACpE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;2EAC2E;AAC3E,MAAM,MAAM,GAAG,CAAC,OAA0B,EAA4B,EAAE;IACtE,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;QACtE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACvC,KAAK,eAAe;YAClB,OAAO,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAC5D,KAAK,cAAc;YACjB,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAChC,KAAK,oBAAoB;YACvB,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAC/C,KAAK,cAAc;YACjB,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,oBAAoB;YACvB,OAAO,CAAC,YAAY,CAAC,CAAC;QACxB,KAAK,wBAAwB;YAC3B,OAAO,mBAAmB,CAAC;QAC7B;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACjB,IAAa,EACb,QAAiB,EACjB,OAA0B,EAC1B,MAAiC,EACxB,EAAE;IACX,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAChG,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,EAAE,kEAAkE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,EAAE,uEAAuE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAC1D,MAAM,MAAM,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACvF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBAC3C,MAAM,CAAC,+DAA+D,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,GAAG,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,EAAE,iEAAiE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,gEAAgE;YAChE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,iEAAiE;YACjE,qEAAqE;YACrE,oCAAoC;YACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,OAAO,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,GAAG,EAAE,wBAAwB,OAAO,OAAO,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,cAAc,OAAO,IAAI,SAAS,OAAO,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAkB,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,GAAG,EAAE,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAiB,EAAE;IAC9E,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,mBAAoB,KAAe,CAAC,OAAO,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,mDAAmD,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,CAAC,MAAc,EAAS,EAAE;YACvC,MAAM,IAAI,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,2BAA2B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAmB,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,mDAAmD,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAsB,CAAC;QACzE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,sCAAsC,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,CAAC,IAAmB,CAAC,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/knowledge/overrides.ts"],"names":[],"mappings":"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"}
|
package/dist/knowledge/pi.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The pi descriptor: facts about the `pi` CLI as data, verified against
|
|
3
|
-
* pi 0.84.
|
|
3
|
+
* pi 0.84.2. Descriptor groundwork only (D-003). The load-bearing scars:
|
|
4
4
|
* pi reads stdin even in -p mode (a backgrounded call without `< /dev/null`
|
|
5
5
|
* hangs forever), it auto-discovers instruction files/skills/extensions
|
|
6
6
|
* unless disabled, and its model registry is runtime-extensible (D-008) -
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/knowledge/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAc,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAGjF,eAAO,MAAM,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/knowledge/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAc,KAAK,iBAAiB,EAAc,MAAM,iBAAiB,CAAC;AAGjF,eAAO,MAAM,KAAK,EAAE,iBA6GlB,CAAC"}
|
package/dist/knowledge/pi.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The pi descriptor: facts about the `pi` CLI as data, verified against
|
|
3
|
-
* pi 0.84.
|
|
3
|
+
* pi 0.84.2. Descriptor groundwork only (D-003). The load-bearing scars:
|
|
4
4
|
* pi reads stdin even in -p mode (a backgrounded call without `< /dev/null`
|
|
5
5
|
* hangs forever), it auto-discovers instruction files/skills/extensions
|
|
6
6
|
* unless disabled, and its model registry is runtime-extensible (D-008) -
|
|
@@ -11,11 +11,13 @@ import { SHARED_AUTH_MATCHERS, SHARED_LIMIT_MATCHERS } from "./matchers.js";
|
|
|
11
11
|
export const piCli = deepFreeze({
|
|
12
12
|
name: "pi",
|
|
13
13
|
bin: "pi",
|
|
14
|
-
verifiedAgainst: "0.84.
|
|
14
|
+
verifiedAgainst: "0.84.2",
|
|
15
15
|
versionSource: { kind: "npm", package: "@earendil-works/pi-coding-agent" },
|
|
16
16
|
launch: {
|
|
17
17
|
// -p --mode json: bare -p prints plain text; --mode json emits the
|
|
18
|
-
// structured v3 records the runner decodes (verified 0.84.
|
|
18
|
+
// structured v3 records the runner decodes (verified 0.84.2; 0.84.2
|
|
19
|
+
// additionally nests a usage object inside message_update alongside
|
|
20
|
+
// assistantMessageEvent - additive, decoder unaffected).
|
|
19
21
|
baseFlags: ["-p", "--mode", "json"],
|
|
20
22
|
subcommands: [],
|
|
21
23
|
promptStyle: "positional",
|
|
@@ -34,14 +36,14 @@ export const piCli = deepFreeze({
|
|
|
34
36
|
onMissing: "create",
|
|
35
37
|
extraFlags: ["-p", "--mode", "json"],
|
|
36
38
|
},
|
|
37
|
-
// --mode rpc exists on 0.84.
|
|
39
|
+
// --mode rpc exists on 0.84.2 but its session semantics are unverified
|
|
38
40
|
// against a live run; per the truthfulness rule it stays null until a
|
|
39
41
|
// spike proves the contract (the claude slice is the proven vertical -
|
|
40
42
|
// D-003).
|
|
41
43
|
sessionMode: null,
|
|
42
44
|
output: {
|
|
43
45
|
// pi -p prints plain text; --mode json emits structured v3 records
|
|
44
|
-
// INCLUDING assistantMessageEvent text_delta tokens (verified 0.84.
|
|
46
|
+
// INCLUDING assistantMessageEvent text_delta tokens (verified 0.84.2),
|
|
45
47
|
// so this invocation is token-granular, not merely message.
|
|
46
48
|
pins: [{ flags: ["--mode", "json"], granularity: "token" }],
|
|
47
49
|
floor: "none",
|
|
@@ -61,14 +63,13 @@ export const piCli = deepFreeze({
|
|
|
61
63
|
models: ["zai/glm-5.2"],
|
|
62
64
|
aliases: {},
|
|
63
65
|
efforts: ["off", "minimal", "low", "medium", "high", "xhigh", "max"],
|
|
64
|
-
effortFlag: "--thinking",
|
|
65
66
|
// D-008: providers register models at runtime (~/.pi/models.json), so
|
|
66
67
|
// the vocabulary is open - validation accepts clean unknown selectors
|
|
67
68
|
// and capability claims degrade to unknown instead.
|
|
68
69
|
extensible: true,
|
|
69
70
|
},
|
|
70
71
|
store: {
|
|
71
|
-
// Verified on pi 0.84.
|
|
72
|
+
// Verified on pi 0.84.2: ~/.pi/sessions/<slug>/<ISO-stamp>_<uuid>.jsonl
|
|
72
73
|
// where the slug is the cwd dash-flattened and dash-wrapped, dots
|
|
73
74
|
// preserved (--Users-kevin-dev-x--). The stamp needs a store scan, so
|
|
74
75
|
// the template names the per-cwd directory.
|
|
@@ -77,9 +78,7 @@ export const piCli = deepFreeze({
|
|
|
77
78
|
},
|
|
78
79
|
contextHook: null,
|
|
79
80
|
resumeLast: null,
|
|
80
|
-
provider: { flag: "--provider" },
|
|
81
81
|
stdin: "close-required",
|
|
82
|
-
discoveryDisableFlags: ["-nt", "-nc", "-ne", "-ns"],
|
|
83
82
|
presence: {
|
|
84
83
|
headlessMarkers: ["-p", "--print"],
|
|
85
84
|
},
|
|
@@ -93,5 +92,30 @@ export const piCli = deepFreeze({
|
|
|
93
92
|
},
|
|
94
93
|
session: false,
|
|
95
94
|
},
|
|
95
|
+
turnOptions: {
|
|
96
|
+
effort: { kind: "effort", render: { kind: "flag-value", flag: "--thinking" } },
|
|
97
|
+
provider: { kind: "selector", render: { kind: "flag-value", flag: "--provider" } },
|
|
98
|
+
discovery: {
|
|
99
|
+
kind: "discovery",
|
|
100
|
+
facets: {
|
|
101
|
+
tools: {
|
|
102
|
+
polarity: "disables",
|
|
103
|
+
render: { kind: "flag-list", flags: ["-nt"] },
|
|
104
|
+
},
|
|
105
|
+
instructionFiles: {
|
|
106
|
+
polarity: "disables",
|
|
107
|
+
render: { kind: "flag-list", flags: ["-nc"] },
|
|
108
|
+
},
|
|
109
|
+
extensions: {
|
|
110
|
+
polarity: "disables",
|
|
111
|
+
render: { kind: "flag-list", flags: ["-ne"] },
|
|
112
|
+
},
|
|
113
|
+
skills: {
|
|
114
|
+
polarity: "disables",
|
|
115
|
+
render: { kind: "flag-list", flags: ["-ns"] },
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
96
120
|
});
|
|
97
121
|
//# sourceMappingURL=pi.js.map
|
package/dist/knowledge/pi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/knowledge/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAA0B,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,CAAC,MAAM,KAAK,GAAsB,UAAU,CAAC;IACjD,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC1E,MAAM,EAAE;QACN,mEAAmE;QACnE,
|
|
1
|
+
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/knowledge/pi.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dungle-scrubs/harness-cli-normalizer",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "One stable interface to four coding-agent CLIs
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "One stable interface to four coding-agent CLIs.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Kevin Frilot",
|
|
7
7
|
"repository": {
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://github.com/dungle-scrubs/harness-cli-normalizer#readme",
|
|
12
12
|
"type": "module",
|
|
13
|
+
"bin": {
|
|
14
|
+
"hcn": "./dist/cli.js"
|
|
15
|
+
},
|
|
13
16
|
"main": "./dist/index.js",
|
|
14
17
|
"types": "./dist/index.d.ts",
|
|
15
18
|
"exports": {
|
package/src/cli/args.ts
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
import type { DiscoveryOptions, TurnOptions } from "../interpretation/argv.js";
|
|
4
|
+
import { ArgvRefusalError } from "../interpretation/refusal.js";
|
|
5
|
+
|
|
6
|
+
export type ParsedPromptSource =
|
|
7
|
+
| { kind: "positional"; prompt: string }
|
|
8
|
+
| { kind: "prompt-flag"; prompt: string }
|
|
9
|
+
| { kind: "prompt-file"; prompt: string }
|
|
10
|
+
| { kind: "none" };
|
|
11
|
+
|
|
12
|
+
export interface CliTurnOptions extends TurnOptions {
|
|
13
|
+
// TurnOptions already has prompt, model, effort, etc.
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface CliRunOptions extends CliTurnOptions {
|
|
17
|
+
readonly cwd?: string;
|
|
18
|
+
readonly env?: Record<string, string>;
|
|
19
|
+
readonly resume?: string;
|
|
20
|
+
readonly json?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ParseCommonResult {
|
|
24
|
+
prompt: string | undefined;
|
|
25
|
+
promptSource: ParsedPromptSource["kind"];
|
|
26
|
+
turnOptions: TurnOptions;
|
|
27
|
+
runOptions: { cwd?: string; env?: Record<string, string>; resume?: string };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const _DISCOVERY_FLAGS = {
|
|
31
|
+
tools: "no-tools",
|
|
32
|
+
instructionFiles: "no-instruction-files",
|
|
33
|
+
extensions: "no-extensions",
|
|
34
|
+
skills: "no-skills",
|
|
35
|
+
} as const;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Parse --env KEY=VAL entries into env record. "" value means delete.
|
|
39
|
+
*/
|
|
40
|
+
export const parseEnvEntries = (
|
|
41
|
+
entries: string[] | string | undefined,
|
|
42
|
+
): Record<string, string> | undefined => {
|
|
43
|
+
if (entries === undefined) return undefined;
|
|
44
|
+
const list = Array.isArray(entries) ? entries : [entries];
|
|
45
|
+
if (list.length === 0) return undefined;
|
|
46
|
+
const env: Record<string, string> = {};
|
|
47
|
+
for (const entry of list) {
|
|
48
|
+
const eq = entry.indexOf("=");
|
|
49
|
+
if (eq === -1) {
|
|
50
|
+
throw new ArgvRefusalError({
|
|
51
|
+
issue: "invalid-env",
|
|
52
|
+
harness: "claude",
|
|
53
|
+
supported: ["KEY=VAL"],
|
|
54
|
+
detail: entry,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const key = entry.slice(0, eq);
|
|
58
|
+
const value = entry.slice(eq + 1);
|
|
59
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key) || value.includes("\0") || key.includes("\0")) {
|
|
60
|
+
throw new ArgvRefusalError({
|
|
61
|
+
issue: "invalid-env",
|
|
62
|
+
harness: "claude",
|
|
63
|
+
supported: ["keys must match ^[A-Za-z_][A-Za-z0-9_]*$ and contain no NUL"],
|
|
64
|
+
detail: entry,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
env[key] = value;
|
|
68
|
+
}
|
|
69
|
+
return env;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const resolvePrompt = (args: {
|
|
73
|
+
positionalPrompt?: string;
|
|
74
|
+
promptFlag?: string;
|
|
75
|
+
promptFile?: string;
|
|
76
|
+
}): { prompt: string; source: ParsedPromptSource["kind"] } => {
|
|
77
|
+
const hasPositional = args.positionalPrompt !== undefined && args.positionalPrompt !== "";
|
|
78
|
+
const hasPrompt = args.promptFlag !== undefined;
|
|
79
|
+
const hasFile = args.promptFile !== undefined;
|
|
80
|
+
|
|
81
|
+
const count = Number(hasPositional) + Number(hasPrompt) + Number(hasFile);
|
|
82
|
+
if (count === 0) {
|
|
83
|
+
throw new ArgvRefusalError({
|
|
84
|
+
issue: "invalid-option-value",
|
|
85
|
+
harness: "claude",
|
|
86
|
+
supported: ["provide prompt via positional, --prompt, or --prompt-file"],
|
|
87
|
+
detail: "missing prompt",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (count > 1) {
|
|
91
|
+
throw new ArgvRefusalError({
|
|
92
|
+
issue: "invalid-option-value",
|
|
93
|
+
harness: "claude",
|
|
94
|
+
supported: ["use one of positional, --prompt, or --prompt-file"],
|
|
95
|
+
detail: "mutual exclusion",
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (hasPositional) return { prompt: args.positionalPrompt!, source: "positional" };
|
|
99
|
+
if (hasPrompt) return { prompt: args.promptFlag!, source: "prompt-flag" };
|
|
100
|
+
// --prompt-file
|
|
101
|
+
const file = args.promptFile!;
|
|
102
|
+
if (file === "-") {
|
|
103
|
+
// read from stdin sync - caller may provide content differently for async path.
|
|
104
|
+
// For sync path, read stdin fd 0.
|
|
105
|
+
const content = readFileSync(0, "utf8");
|
|
106
|
+
return { prompt: content, source: "prompt-file" };
|
|
107
|
+
}
|
|
108
|
+
const content = readFileSync(file, "utf8");
|
|
109
|
+
return { prompt: content, source: "prompt-file" };
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const resolvePromptAsync = async (args: {
|
|
113
|
+
positionalPrompt?: string;
|
|
114
|
+
promptFlag?: string;
|
|
115
|
+
promptFile?: string;
|
|
116
|
+
}): Promise<{ prompt: string; source: ParsedPromptSource["kind"] }> => {
|
|
117
|
+
const hasPositional = args.positionalPrompt !== undefined && args.positionalPrompt !== "";
|
|
118
|
+
const hasPrompt = args.promptFlag !== undefined;
|
|
119
|
+
const hasFile = args.promptFile !== undefined;
|
|
120
|
+
|
|
121
|
+
const count = Number(hasPositional) + Number(hasPrompt) + Number(hasFile);
|
|
122
|
+
if (count === 0) {
|
|
123
|
+
throw new ArgvRefusalError({
|
|
124
|
+
issue: "invalid-option-value",
|
|
125
|
+
harness: "claude",
|
|
126
|
+
supported: ["provide prompt via positional, --prompt, or --prompt-file"],
|
|
127
|
+
detail: "missing prompt",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (count > 1) {
|
|
131
|
+
throw new ArgvRefusalError({
|
|
132
|
+
issue: "invalid-option-value",
|
|
133
|
+
harness: "claude",
|
|
134
|
+
supported: ["use one of positional, --prompt, or --prompt-file"],
|
|
135
|
+
detail: "mutual exclusion",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (hasPositional) return { prompt: args.positionalPrompt!, source: "positional" };
|
|
139
|
+
if (hasPrompt) return { prompt: args.promptFlag!, source: "prompt-flag" };
|
|
140
|
+
const file = args.promptFile!;
|
|
141
|
+
if (file === "-") {
|
|
142
|
+
const chunks: Buffer[] = [];
|
|
143
|
+
for await (const chunk of process.stdin) chunks.push(chunk as Buffer);
|
|
144
|
+
return { prompt: Buffer.concat(chunks).toString("utf8"), source: "prompt-file" };
|
|
145
|
+
}
|
|
146
|
+
const { readFile } = await import("node:fs/promises");
|
|
147
|
+
const content = await readFile(file, "utf8");
|
|
148
|
+
return { prompt: content, source: "prompt-file" };
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Build TurnOptions from parsed flag values. Shared between run and inspect --argv.
|
|
153
|
+
*/
|
|
154
|
+
export const parseTurnOptions = (values: Record<string, unknown>): TurnOptions => {
|
|
155
|
+
const opts: Record<string, unknown> = {};
|
|
156
|
+
|
|
157
|
+
if (values.model !== undefined) opts.model = values.model;
|
|
158
|
+
if (values.effort !== undefined) opts.effort = values.effort;
|
|
159
|
+
if (values.sandbox !== undefined) opts.sandbox = values.sandbox;
|
|
160
|
+
if (values.provider !== undefined) opts.provider = values.provider;
|
|
161
|
+
if (values.tools !== undefined) {
|
|
162
|
+
const raw = String(values.tools);
|
|
163
|
+
opts.tools = raw.length === 0 ? [] : raw.split(",").map((s) => s.trim());
|
|
164
|
+
}
|
|
165
|
+
if (values.autonomy === true) opts.autonomy = true;
|
|
166
|
+
else if (values["no-autonomy"] === true) opts.autonomy = false;
|
|
167
|
+
else if (values.autonomy === false) opts.autonomy = false; // for completeness
|
|
168
|
+
|
|
169
|
+
if (values.write === true) opts.write = true;
|
|
170
|
+
else if (values["no-write"] === true) opts.write = false;
|
|
171
|
+
if (values.shell === true) opts.shell = true;
|
|
172
|
+
else if (values["no-shell"] === true) opts.shell = false;
|
|
173
|
+
|
|
174
|
+
if (values["max-steps"] !== undefined) {
|
|
175
|
+
const n = Number(values["max-steps"]);
|
|
176
|
+
if (!Number.isFinite(n)) {
|
|
177
|
+
throw new ArgvRefusalError({
|
|
178
|
+
issue: "invalid-option-value",
|
|
179
|
+
harness: "claude",
|
|
180
|
+
option: "maxSteps",
|
|
181
|
+
supported: ["integer 1-10000"],
|
|
182
|
+
detail: String(values["max-steps"]),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
opts.maxSteps = n;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// discovery facets: --no-* means false, otherwise undefined (no-op)
|
|
189
|
+
const discovery: Record<string, boolean> = {};
|
|
190
|
+
let hasDiscovery = false;
|
|
191
|
+
if (values["no-tools"] === true) {
|
|
192
|
+
discovery.tools = false;
|
|
193
|
+
hasDiscovery = true;
|
|
194
|
+
}
|
|
195
|
+
if (values["no-instruction-files"] === true) {
|
|
196
|
+
discovery.instructionFiles = false;
|
|
197
|
+
hasDiscovery = true;
|
|
198
|
+
}
|
|
199
|
+
if (values["no-extensions"] === true) {
|
|
200
|
+
discovery.extensions = false;
|
|
201
|
+
hasDiscovery = true;
|
|
202
|
+
}
|
|
203
|
+
if (values["no-skills"] === true) {
|
|
204
|
+
discovery.skills = false;
|
|
205
|
+
hasDiscovery = true;
|
|
206
|
+
}
|
|
207
|
+
if (hasDiscovery) (opts as Record<string, unknown>).discovery = discovery as DiscoveryOptions;
|
|
208
|
+
|
|
209
|
+
// prompt will be set by caller after resolvePrompt
|
|
210
|
+
return opts as unknown as TurnOptions;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export const parseRunExtra = (
|
|
214
|
+
values: Record<string, unknown>,
|
|
215
|
+
): { cwd?: string; env?: Record<string, string>; resume?: string } => {
|
|
216
|
+
const extra: { cwd?: string; env?: Record<string, string>; resume?: string } = {};
|
|
217
|
+
if (values.cwd !== undefined) extra.cwd = String(values.cwd);
|
|
218
|
+
if (values.resume !== undefined) extra.resume = String(values.resume);
|
|
219
|
+
if (values["session-id"] !== undefined) extra.resume = String(values["session-id"]);
|
|
220
|
+
if (values.env !== undefined) {
|
|
221
|
+
// parseArgs with multiple:true gives string[] ; else string
|
|
222
|
+
const list = values.env as string | string[];
|
|
223
|
+
extra.env = parseEnvEntries(list);
|
|
224
|
+
}
|
|
225
|
+
return extra;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
export interface CommonParseConfig {
|
|
229
|
+
allowPrompt: boolean;
|
|
230
|
+
allowPromptFile: boolean;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const KNOWN_FLAGS = new Set([
|
|
234
|
+
"--prompt",
|
|
235
|
+
"--prompt-file",
|
|
236
|
+
"--model",
|
|
237
|
+
"--effort",
|
|
238
|
+
"--sandbox",
|
|
239
|
+
"--provider",
|
|
240
|
+
"--tools",
|
|
241
|
+
"--autonomy",
|
|
242
|
+
"--no-autonomy",
|
|
243
|
+
"--write",
|
|
244
|
+
"--no-write",
|
|
245
|
+
"--shell",
|
|
246
|
+
"--no-shell",
|
|
247
|
+
"--max-steps",
|
|
248
|
+
"--no-tools",
|
|
249
|
+
"--no-instruction-files",
|
|
250
|
+
"--no-extensions",
|
|
251
|
+
"--no-skills",
|
|
252
|
+
"--cwd",
|
|
253
|
+
"--env",
|
|
254
|
+
"--resume",
|
|
255
|
+
"--session-id",
|
|
256
|
+
"--json",
|
|
257
|
+
"--argv",
|
|
258
|
+
"--help",
|
|
259
|
+
"-h",
|
|
260
|
+
"--version",
|
|
261
|
+
"-V",
|
|
262
|
+
]);
|
|
263
|
+
|
|
264
|
+
const FLAGS_WITH_VALUE = new Set([
|
|
265
|
+
"--prompt",
|
|
266
|
+
"--prompt-file",
|
|
267
|
+
"--model",
|
|
268
|
+
"--effort",
|
|
269
|
+
"--sandbox",
|
|
270
|
+
"--provider",
|
|
271
|
+
"--tools",
|
|
272
|
+
"--max-steps",
|
|
273
|
+
"--cwd",
|
|
274
|
+
"--env",
|
|
275
|
+
"--resume",
|
|
276
|
+
"--session-id",
|
|
277
|
+
]);
|
|
278
|
+
|
|
279
|
+
export const detectPositionalPromptInjection = (argv: string[]): string | null => {
|
|
280
|
+
const hasExplicitPrompt = argv.some(
|
|
281
|
+
(a) =>
|
|
282
|
+
a === "--prompt" ||
|
|
283
|
+
a.startsWith("--prompt=") ||
|
|
284
|
+
a === "--prompt-file" ||
|
|
285
|
+
a.startsWith("--prompt-file="),
|
|
286
|
+
);
|
|
287
|
+
if (hasExplicitPrompt) return null;
|
|
288
|
+
let expectValue = false;
|
|
289
|
+
for (const token of argv) {
|
|
290
|
+
if (expectValue) {
|
|
291
|
+
expectValue = false;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
if (FLAGS_WITH_VALUE.has(token)) {
|
|
295
|
+
expectValue = true;
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (token.startsWith("--") && token.includes("=")) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (KNOWN_FLAGS.has(token)) {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
if (token === "--") {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
// Only single-dash tokens are considered prompt injection candidates
|
|
308
|
+
// Double-dash unknown flags (e.g. --unknown) are handled as unknown flag errors by parseArgs
|
|
309
|
+
if (token.startsWith("-") && !token.startsWith("--")) {
|
|
310
|
+
return token;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return null;
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
const preprocessPromptArgs = (argv: string[]): string[] => {
|
|
317
|
+
const out: string[] = [];
|
|
318
|
+
for (let i = 0; i < argv.length; i++) {
|
|
319
|
+
const token = argv[i] as string;
|
|
320
|
+
if (token === "--prompt" && i + 1 < argv.length) {
|
|
321
|
+
const next = argv[i + 1] as string;
|
|
322
|
+
// If next starts with '-' and isn't '--', convert to --prompt=-value form so parseArgs accepts it
|
|
323
|
+
if (next.startsWith("-") && next !== "--" && !next.startsWith("--prompt")) {
|
|
324
|
+
out.push(`--prompt=${next}`);
|
|
325
|
+
i++;
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (token.startsWith("--prompt=")) {
|
|
330
|
+
out.push(token);
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
out.push(token);
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Wrapper around node:util parseArgs for the common flag table.
|
|
340
|
+
* Throws with exit code 2 on unknown flag.
|
|
341
|
+
*/
|
|
342
|
+
export const parseCommonFlags = (
|
|
343
|
+
argv: string[],
|
|
344
|
+
opts: { strict?: boolean } = {},
|
|
345
|
+
): ReturnType<typeof parseArgs> => {
|
|
346
|
+
const normalized = preprocessPromptArgs(argv);
|
|
347
|
+
const config = {
|
|
348
|
+
allowPositionals: true,
|
|
349
|
+
strict: opts.strict ?? true,
|
|
350
|
+
options: {
|
|
351
|
+
prompt: { type: "string" as const },
|
|
352
|
+
"prompt-file": { type: "string" as const },
|
|
353
|
+
model: { type: "string" as const },
|
|
354
|
+
effort: { type: "string" as const },
|
|
355
|
+
sandbox: { type: "string" as const },
|
|
356
|
+
provider: { type: "string" as const },
|
|
357
|
+
tools: { type: "string" as const },
|
|
358
|
+
autonomy: { type: "boolean" as const },
|
|
359
|
+
"no-autonomy": { type: "boolean" as const },
|
|
360
|
+
write: { type: "boolean" as const },
|
|
361
|
+
"no-write": { type: "boolean" as const },
|
|
362
|
+
shell: { type: "boolean" as const },
|
|
363
|
+
"no-shell": { type: "boolean" as const },
|
|
364
|
+
"max-steps": { type: "string" as const },
|
|
365
|
+
"no-tools": { type: "boolean" as const },
|
|
366
|
+
"no-instruction-files": { type: "boolean" as const },
|
|
367
|
+
"no-extensions": { type: "boolean" as const },
|
|
368
|
+
"no-skills": { type: "boolean" as const },
|
|
369
|
+
cwd: { type: "string" as const },
|
|
370
|
+
env: { type: "string" as const, multiple: true },
|
|
371
|
+
resume: { type: "string" as const },
|
|
372
|
+
"session-id": { type: "string" as const },
|
|
373
|
+
json: { type: "boolean" as const },
|
|
374
|
+
argv: { type: "boolean" as const },
|
|
375
|
+
help: { type: "boolean" as const },
|
|
376
|
+
version: { type: "boolean" as const },
|
|
377
|
+
},
|
|
378
|
+
} as const;
|
|
379
|
+
// parseArgs throws on unknown flag when strict true - we let it bubble and caller maps to exit 2
|
|
380
|
+
return parseArgs({ ...config, args: normalized });
|
|
381
|
+
};
|