@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.
Files changed (154) hide show
  1. package/README.md +156 -13
  2. package/dist/cli/args.d.ts +74 -0
  3. package/dist/cli/args.d.ts.map +1 -0
  4. package/dist/cli/args.js +339 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/check.d.ts +2 -0
  7. package/dist/cli/check.d.ts.map +1 -0
  8. package/dist/cli/check.js +110 -0
  9. package/dist/cli/check.js.map +1 -0
  10. package/dist/cli/exit-codes.d.ts +7 -0
  11. package/dist/cli/exit-codes.d.ts.map +1 -0
  12. package/dist/cli/exit-codes.js +11 -0
  13. package/dist/cli/exit-codes.js.map +1 -0
  14. package/dist/cli/help.d.ts +7 -0
  15. package/dist/cli/help.d.ts.map +1 -0
  16. package/dist/cli/help.js +110 -0
  17. package/dist/cli/help.js.map +1 -0
  18. package/dist/cli/index.d.ts +6 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +186 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/cli/inspect.d.ts +3 -0
  23. package/dist/cli/inspect.d.ts.map +1 -0
  24. package/dist/cli/inspect.js +170 -0
  25. package/dist/cli/inspect.js.map +1 -0
  26. package/dist/cli/ls.d.ts +2 -0
  27. package/dist/cli/ls.d.ts.map +1 -0
  28. package/dist/cli/ls.js +10 -0
  29. package/dist/cli/ls.js.map +1 -0
  30. package/dist/cli/render.d.ts +8 -0
  31. package/dist/cli/render.d.ts.map +1 -0
  32. package/dist/cli/render.js +55 -0
  33. package/dist/cli/render.js.map +1 -0
  34. package/dist/cli/resolve-harness.d.ts +4 -0
  35. package/dist/cli/resolve-harness.d.ts.map +1 -0
  36. package/dist/cli/resolve-harness.js +31 -0
  37. package/dist/cli/resolve-harness.js.map +1 -0
  38. package/dist/cli/run.d.ts +2 -0
  39. package/dist/cli/run.d.ts.map +1 -0
  40. package/dist/cli/run.js +280 -0
  41. package/dist/cli/run.js.map +1 -0
  42. package/dist/cli/session.d.ts +2 -0
  43. package/dist/cli/session.d.ts.map +1 -0
  44. package/dist/cli/session.js +128 -0
  45. package/dist/cli/session.js.map +1 -0
  46. package/dist/cli/version.d.ts +2 -0
  47. package/dist/cli/version.d.ts.map +1 -0
  48. package/dist/cli/version.js +34 -0
  49. package/dist/cli/version.js.map +1 -0
  50. package/dist/cli.js +3 -0
  51. package/dist/execution/decode.d.ts.map +1 -1
  52. package/dist/execution/decode.js +32 -0
  53. package/dist/execution/decode.js.map +1 -1
  54. package/dist/execution/deps.d.ts +7 -1
  55. package/dist/execution/deps.d.ts.map +1 -1
  56. package/dist/execution/events.d.ts +6 -2
  57. package/dist/execution/events.d.ts.map +1 -1
  58. package/dist/execution/events.js.map +1 -1
  59. package/dist/execution/failure.d.ts +45 -0
  60. package/dist/execution/failure.d.ts.map +1 -0
  61. package/dist/execution/failure.js +121 -0
  62. package/dist/execution/failure.js.map +1 -0
  63. package/dist/execution/node-deps.d.ts.map +1 -1
  64. package/dist/execution/node-deps.js +19 -0
  65. package/dist/execution/node-deps.js.map +1 -1
  66. package/dist/execution/stream-turn.d.ts +5 -1
  67. package/dist/execution/stream-turn.d.ts.map +1 -1
  68. package/dist/execution/stream-turn.js +188 -24
  69. package/dist/execution/stream-turn.js.map +1 -1
  70. package/dist/interpretation/argv.d.ts +16 -4
  71. package/dist/interpretation/argv.d.ts.map +1 -1
  72. package/dist/interpretation/argv.js +68 -19
  73. package/dist/interpretation/argv.js.map +1 -1
  74. package/dist/interpretation/dimensions.d.ts +0 -2
  75. package/dist/interpretation/dimensions.d.ts.map +1 -1
  76. package/dist/interpretation/dimensions.js +0 -2
  77. package/dist/interpretation/dimensions.js.map +1 -1
  78. package/dist/interpretation/limits.d.ts +10 -1
  79. package/dist/interpretation/limits.d.ts.map +1 -1
  80. package/dist/interpretation/limits.js +84 -5
  81. package/dist/interpretation/limits.js.map +1 -1
  82. package/dist/interpretation/refusal.d.ts +31 -0
  83. package/dist/interpretation/refusal.d.ts.map +1 -0
  84. package/dist/interpretation/refusal.js +87 -0
  85. package/dist/interpretation/refusal.js.map +1 -0
  86. package/dist/interpretation/store.js +1 -1
  87. package/dist/interpretation/turn-options.d.ts +18 -0
  88. package/dist/interpretation/turn-options.d.ts.map +1 -0
  89. package/dist/interpretation/turn-options.js +417 -0
  90. package/dist/interpretation/turn-options.js.map +1 -0
  91. package/dist/interpretation/vocabulary.d.ts +5 -0
  92. package/dist/interpretation/vocabulary.d.ts.map +1 -1
  93. package/dist/interpretation/vocabulary.js +1 -1
  94. package/dist/interpretation/vocabulary.js.map +1 -1
  95. package/dist/knowledge/claude-code.d.ts +13 -1
  96. package/dist/knowledge/claude-code.d.ts.map +1 -1
  97. package/dist/knowledge/claude-code.js +35 -13
  98. package/dist/knowledge/claude-code.js.map +1 -1
  99. package/dist/knowledge/codex.d.ts.map +1 -1
  100. package/dist/knowledge/codex.js +25 -14
  101. package/dist/knowledge/codex.js.map +1 -1
  102. package/dist/knowledge/descriptor.d.ts +118 -14
  103. package/dist/knowledge/descriptor.d.ts.map +1 -1
  104. package/dist/knowledge/descriptor.js +58 -0
  105. package/dist/knowledge/descriptor.js.map +1 -1
  106. package/dist/knowledge/matchers.d.ts +3 -3
  107. package/dist/knowledge/matchers.d.ts.map +1 -1
  108. package/dist/knowledge/matchers.js +19 -6
  109. package/dist/knowledge/matchers.js.map +1 -1
  110. package/dist/knowledge/muse.d.ts +2 -2
  111. package/dist/knowledge/muse.d.ts.map +1 -1
  112. package/dist/knowledge/muse.js +25 -6
  113. package/dist/knowledge/muse.js.map +1 -1
  114. package/dist/knowledge/overrides.d.ts +7 -0
  115. package/dist/knowledge/overrides.d.ts.map +1 -1
  116. package/dist/knowledge/overrides.js +76 -0
  117. package/dist/knowledge/overrides.js.map +1 -1
  118. package/dist/knowledge/pi.d.ts +1 -1
  119. package/dist/knowledge/pi.d.ts.map +1 -1
  120. package/dist/knowledge/pi.js +33 -9
  121. package/dist/knowledge/pi.js.map +1 -1
  122. package/package.json +5 -2
  123. package/src/cli/args.ts +381 -0
  124. package/src/cli/check.ts +136 -0
  125. package/src/cli/exit-codes.ts +13 -0
  126. package/src/cli/help.ts +114 -0
  127. package/src/cli/index.ts +190 -0
  128. package/src/cli/inspect.ts +174 -0
  129. package/src/cli/ls.ts +14 -0
  130. package/src/cli/render.ts +62 -0
  131. package/src/cli/resolve-harness.ts +33 -0
  132. package/src/cli/run.ts +280 -0
  133. package/src/cli/session.ts +137 -0
  134. package/src/cli/version.ts +32 -0
  135. package/src/execution/decode.ts +32 -0
  136. package/src/execution/deps.ts +7 -1
  137. package/src/execution/events.ts +9 -2
  138. package/src/execution/failure.ts +159 -0
  139. package/src/execution/node-deps.ts +17 -0
  140. package/src/execution/stream-turn.ts +192 -21
  141. package/src/interpretation/argv.ts +85 -27
  142. package/src/interpretation/dimensions.ts +0 -6
  143. package/src/interpretation/limits.ts +97 -6
  144. package/src/interpretation/refusal.ts +116 -0
  145. package/src/interpretation/store.ts +1 -1
  146. package/src/interpretation/turn-options.ts +424 -0
  147. package/src/interpretation/vocabulary.ts +1 -1
  148. package/src/knowledge/claude-code.ts +35 -13
  149. package/src/knowledge/codex.ts +25 -14
  150. package/src/knowledge/descriptor.ts +138 -12
  151. package/src/knowledge/matchers.ts +22 -9
  152. package/src/knowledge/muse.ts +25 -6
  153. package/src/knowledge/overrides.ts +97 -0
  154. 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":"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"}
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/knowledge/overrides.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The pi descriptor: facts about the `pi` CLI as data, verified against
3
- * pi 0.84.1. Descriptor groundwork only (D-003). The load-bearing scars:
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,iBAqFlB,CAAC"}
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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The pi descriptor: facts about the `pi` CLI as data, verified against
3
- * pi 0.84.1. Descriptor groundwork only (D-003). The load-bearing scars:
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.1",
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.1).
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.1 but its session semantics are unverified
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.1),
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.1: ~/.pi/sessions/<slug>/<ISO-stamp>_<uuid>.jsonl
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
@@ -1 +1 @@
1
- {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/knowledge/pi.ts"],"names":[],"mappings":"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"}
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,oEAAoE;QACpE,oEAAoE;QACpE,yDAAyD;QACzD,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;QACnC,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,YAAY;QACzB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,cAAc;KACvB;IACD,MAAM,EAAE;QACN,uEAAuE;QACvE,qEAAqE;QACrE,yDAAyD;QACzD,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;KACrC;IACD,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,UAAU;IACV,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE;QACN,mEAAmE;QACnE,uEAAuE;QACvE,4DAA4D;QAC5D,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC3D,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,EAAE;KAChB;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,iBAAiB;QAC5B,wEAAwE;QACxE,0EAA0E;QAC1E,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;KACxD;IACD,aAAa,EAAE,CAAC,GAAG,qBAAqB,CAAC;IACzC,YAAY,EAAE,CAAC,GAAG,oBAAoB,CAAC;IACvC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE;QACV,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,CAAC,aAAa,CAAC;QACvB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QACpE,sEAAsE;QACtE,sEAAsE;QACtE,oDAAoD;QACpD,UAAU,EAAE,IAAI;KACjB;IACD,KAAK,EAAE;QACL,wEAAwE;QACxE,kEAAkE;QAClE,sEAAsE;QACtE,4CAA4C;QAC5C,QAAQ,EAAE,+BAA+B;QACzC,OAAO,EAAE,iBAAiB;KAC3B;IACD,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE;QACR,eAAe,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;KACnC;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,eAAe,EAAE;YACf,eAAe,EAAE,OAAO;YACxB,kBAAkB,EAAE,MAAM;YAC1B,WAAW,EAAE,MAAM;SACpB;QACD,OAAO,EAAE,KAAK;KACf;IACD,WAAW,EAAE;QACX,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;QAC9E,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;QAClF,SAAS,EAAE;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;iBAC9C;gBACD,gBAAgB,EAAE;oBAChB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;iBAC9C;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;iBAC9C;gBACD,MAAM,EAAE;oBACN,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;iBAC9C;aACF;SACF;KACF;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dungle-scrubs/harness-cli-normalizer",
3
- "version": "0.1.3",
4
- "description": "One stable interface to four coding-agent CLIs that survives their updates.",
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": {
@@ -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
+ };