@lannguyensi/harness 0.63.0 → 1.0.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.
Files changed (702) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +46 -42
  3. package/dist/cli/add/index.js +17 -21
  4. package/dist/cli/add/index.js.map +1 -1
  5. package/dist/cli/adopt/derive.d.ts +2 -2
  6. package/dist/cli/adopt/derive.js +2 -19
  7. package/dist/cli/adopt/derive.js.map +1 -1
  8. package/dist/cli/adopt/index.d.ts +1 -1
  9. package/dist/cli/adopt/index.js +1 -12
  10. package/dist/cli/adopt/index.js.map +1 -1
  11. package/dist/cli/apply/apply.d.ts +20 -35
  12. package/dist/cli/apply/apply.js +61 -136
  13. package/dist/cli/apply/apply.js.map +1 -1
  14. package/dist/cli/apply/generate-codex-config.js +10 -58
  15. package/dist/cli/apply/generate-codex-config.js.map +1 -1
  16. package/dist/cli/apply/generate-memory-index.js +1 -2
  17. package/dist/cli/apply/generate-memory-index.js.map +1 -1
  18. package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
  19. package/dist/cli/apply/generate-opencode-config.js +74 -113
  20. package/dist/cli/apply/generate-opencode-config.js.map +1 -1
  21. package/dist/cli/apply/generate-settings.d.ts +11 -64
  22. package/dist/cli/apply/generate-settings.js +27 -132
  23. package/dist/cli/apply/generate-settings.js.map +1 -1
  24. package/dist/cli/apply/index.d.ts +1 -1
  25. package/dist/cli/apply/index.js +1 -1
  26. package/dist/cli/apply/index.js.map +1 -1
  27. package/dist/cli/apply/install-codex-config.d.ts +153 -1
  28. package/dist/cli/apply/install-codex-config.js +445 -70
  29. package/dist/cli/apply/install-codex-config.js.map +1 -1
  30. package/dist/cli/apply/next-steps.d.ts +7 -0
  31. package/dist/cli/apply/next-steps.js +13 -1
  32. package/dist/cli/apply/next-steps.js.map +1 -1
  33. package/dist/cli/bounded-stdin.d.ts +0 -23
  34. package/dist/cli/bounded-stdin.js +2 -49
  35. package/dist/cli/bounded-stdin.js.map +1 -1
  36. package/dist/cli/describe.d.ts +1 -1
  37. package/dist/cli/describe.js +0 -3
  38. package/dist/cli/describe.js.map +1 -1
  39. package/dist/cli/diff/engine.d.ts +0 -11
  40. package/dist/cli/diff/engine.js +1 -17
  41. package/dist/cli/diff/engine.js.map +1 -1
  42. package/dist/cli/diff/index.js +14 -25
  43. package/dist/cli/diff/index.js.map +1 -1
  44. package/dist/cli/doctor/claude-mcp.d.ts +4 -19
  45. package/dist/cli/doctor/claude-mcp.js +11 -22
  46. package/dist/cli/doctor/claude-mcp.js.map +1 -1
  47. package/dist/cli/doctor/codex.d.ts +12 -14
  48. package/dist/cli/doctor/codex.js +31 -144
  49. package/dist/cli/doctor/codex.js.map +1 -1
  50. package/dist/cli/doctor/format.js +23 -338
  51. package/dist/cli/doctor/format.js.map +1 -1
  52. package/dist/cli/doctor/hook-liveness.d.ts +56 -0
  53. package/dist/cli/doctor/hook-liveness.js +455 -0
  54. package/dist/cli/doctor/hook-liveness.js.map +1 -0
  55. package/dist/cli/doctor/index.d.ts +13 -87
  56. package/dist/cli/doctor/index.js +57 -705
  57. package/dist/cli/doctor/index.js.map +1 -1
  58. package/dist/cli/doctor/opencode.d.ts +2 -1
  59. package/dist/cli/doctor/opencode.js.map +1 -1
  60. package/dist/cli/doctor/types.d.ts +21 -378
  61. package/dist/cli/doctor/types.js.map +1 -1
  62. package/dist/cli/drain-stdio.d.ts +31 -0
  63. package/dist/cli/drain-stdio.js +76 -0
  64. package/dist/cli/drain-stdio.js.map +1 -0
  65. package/dist/cli/export.d.ts +3 -1
  66. package/dist/cli/export.js +7 -16
  67. package/dist/cli/export.js.map +1 -1
  68. package/dist/cli/gate/codex-disable.d.ts +29 -0
  69. package/dist/cli/gate/codex-disable.js +195 -0
  70. package/dist/cli/gate/codex-disable.js.map +1 -0
  71. package/dist/cli/gate/codex-enable.d.ts +41 -0
  72. package/dist/cli/gate/codex-enable.js +127 -0
  73. package/dist/cli/gate/codex-enable.js.map +1 -0
  74. package/dist/cli/gate/codex-snapshot.d.ts +208 -0
  75. package/dist/cli/gate/codex-snapshot.js +402 -0
  76. package/dist/cli/gate/codex-snapshot.js.map +1 -0
  77. package/dist/cli/gate/disable.d.ts +9 -0
  78. package/dist/cli/gate/disable.js +263 -28
  79. package/dist/cli/gate/disable.js.map +1 -1
  80. package/dist/cli/gate/enable.d.ts +26 -6
  81. package/dist/cli/gate/enable.js +152 -80
  82. package/dist/cli/gate/enable.js.map +1 -1
  83. package/dist/cli/gate/link-chain.d.ts +53 -0
  84. package/dist/cli/gate/link-chain.js +122 -0
  85. package/dist/cli/gate/link-chain.js.map +1 -0
  86. package/dist/cli/gate/snapshot.d.ts +289 -12
  87. package/dist/cli/gate/snapshot.js +481 -22
  88. package/dist/cli/gate/snapshot.js.map +1 -1
  89. package/dist/cli/index.d.ts +0 -9
  90. package/dist/cli/index.js +15 -2607
  91. package/dist/cli/index.js.map +1 -1
  92. package/dist/cli/init/composer.d.ts +3 -6
  93. package/dist/cli/init/composer.js +6 -370
  94. package/dist/cli/init/composer.js.map +1 -1
  95. package/dist/cli/init/dependencies.d.ts +1 -2
  96. package/dist/cli/init/dependencies.js +4 -80
  97. package/dist/cli/init/dependencies.js.map +1 -1
  98. package/dist/cli/init/detect.js +5 -4
  99. package/dist/cli/init/detect.js.map +1 -1
  100. package/dist/cli/init/interactive.d.ts +1 -23
  101. package/dist/cli/init/interactive.js +33 -247
  102. package/dist/cli/init/interactive.js.map +1 -1
  103. package/dist/cli/init/profiles.d.ts +2 -2
  104. package/dist/cli/init/profiles.js +51 -243
  105. package/dist/cli/init/profiles.js.map +1 -1
  106. package/dist/cli/init/templates.d.ts +2 -37
  107. package/dist/cli/init/templates.js +25 -1237
  108. package/dist/cli/init/templates.js.map +1 -1
  109. package/dist/cli/list.d.ts +1 -1
  110. package/dist/cli/list.js +1 -38
  111. package/dist/cli/list.js.map +1 -1
  112. package/dist/cli/loader.d.ts +15 -1
  113. package/dist/cli/loader.js +56 -39
  114. package/dist/cli/loader.js.map +1 -1
  115. package/dist/cli/main.js +7 -2
  116. package/dist/cli/main.js.map +1 -1
  117. package/dist/cli/migrate-home/index.js +2 -2
  118. package/dist/cli/migrate-home/index.js.map +1 -1
  119. package/dist/cli/pack/add.js +1 -1
  120. package/dist/cli/pack/add.js.map +1 -1
  121. package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
  122. package/dist/cli/pack/hook-bootstrap.js +15 -291
  123. package/dist/cli/pack/hook-bootstrap.js.map +1 -1
  124. package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
  125. package/dist/cli/pack/hook-branch-protection.js +365 -340
  126. package/dist/cli/pack/hook-branch-protection.js.map +1 -1
  127. package/dist/cli/pack/index.d.ts +0 -1
  128. package/dist/cli/pack/index.js +0 -1
  129. package/dist/cli/pack/index.js.map +1 -1
  130. package/dist/cli/pack/list.js +1 -6
  131. package/dist/cli/pack/list.js.map +1 -1
  132. package/dist/cli/pack/mutate.d.ts +7 -9
  133. package/dist/cli/pack/mutate.js +6 -9
  134. package/dist/cli/pack/mutate.js.map +1 -1
  135. package/dist/cli/pack/reseed.d.ts +2 -2
  136. package/dist/cli/pack/reseed.js +16 -22
  137. package/dist/cli/pack/reseed.js.map +1 -1
  138. package/dist/cli/register-gate-group.d.ts +5 -0
  139. package/dist/cli/register-gate-group.js +348 -0
  140. package/dist/cli/register-gate-group.js.map +1 -0
  141. package/dist/cli/register-inspect-group.d.ts +6 -0
  142. package/dist/cli/register-inspect-group.js +189 -0
  143. package/dist/cli/register-inspect-group.js.map +1 -0
  144. package/dist/cli/register-operator-lifecycle.d.ts +5 -0
  145. package/dist/cli/register-operator-lifecycle.js +20 -0
  146. package/dist/cli/register-operator-lifecycle.js.map +1 -0
  147. package/dist/cli/register-pack-group.d.ts +5 -0
  148. package/dist/cli/register-pack-group.js +134 -0
  149. package/dist/cli/register-pack-group.js.map +1 -0
  150. package/dist/cli/register-setup-group.d.ts +5 -0
  151. package/dist/cli/register-setup-group.js +495 -0
  152. package/dist/cli/register-setup-group.js.map +1 -0
  153. package/dist/cli/remove/index.d.ts +0 -14
  154. package/dist/cli/remove/index.js +2 -115
  155. package/dist/cli/remove/index.js.map +1 -1
  156. package/dist/cli/remove/mutate.d.ts +0 -2
  157. package/dist/cli/remove/mutate.js +1 -19
  158. package/dist/cli/remove/mutate.js.map +1 -1
  159. package/dist/cli/remove/register.d.ts +5 -0
  160. package/dist/cli/remove/register.js +25 -0
  161. package/dist/cli/remove/register.js.map +1 -0
  162. package/dist/cli/shell-quote.d.ts +7 -0
  163. package/dist/cli/shell-quote.js +17 -0
  164. package/dist/cli/shell-quote.js.map +1 -0
  165. package/dist/cli/uninstall/index.d.ts +4 -2
  166. package/dist/cli/uninstall/index.js +15 -7
  167. package/dist/cli/uninstall/index.js.map +1 -1
  168. package/dist/cli/uninstall/register.d.ts +5 -0
  169. package/dist/cli/uninstall/register.js +171 -0
  170. package/dist/cli/uninstall/register.js.map +1 -0
  171. package/dist/cli/uninstall/snapshot.d.ts +15 -0
  172. package/dist/cli/uninstall/snapshot.js +38 -0
  173. package/dist/cli/uninstall/snapshot.js.map +1 -1
  174. package/dist/cli/validate/checks.d.ts +0 -77
  175. package/dist/cli/validate/checks.js +3 -1049
  176. package/dist/cli/validate/checks.js.map +1 -1
  177. package/dist/cli/validate/index.js +19 -15
  178. package/dist/cli/validate/index.js.map +1 -1
  179. package/dist/index.d.ts +0 -3
  180. package/dist/index.js +0 -3
  181. package/dist/index.js.map +1 -1
  182. package/dist/io/claude-mcp.d.ts +1 -1
  183. package/dist/io/claude-mcp.js +27 -14
  184. package/dist/io/claude-mcp.js.map +1 -1
  185. package/dist/io/harness-lock.js +2 -2
  186. package/dist/io/harness-lock.js.map +1 -1
  187. package/dist/io/lock.d.ts +0 -26
  188. package/dist/io/lock.js +10 -27
  189. package/dist/io/lock.js.map +1 -1
  190. package/dist/io/merge-settings.js +6 -4
  191. package/dist/io/merge-settings.js.map +1 -1
  192. package/dist/io/project-name.d.ts +22 -39
  193. package/dist/io/project-name.js +25 -42
  194. package/dist/io/project-name.js.map +1 -1
  195. package/dist/io/read-regular-file.d.ts +103 -40
  196. package/dist/io/read-regular-file.js +196 -35
  197. package/dist/io/read-regular-file.js.map +1 -1
  198. package/dist/io/restart-hints.js +3 -6
  199. package/dist/io/restart-hints.js.map +1 -1
  200. package/dist/io/version-compare.d.ts +1 -3
  201. package/dist/io/version-compare.js +1 -3
  202. package/dist/io/version-compare.js.map +1 -1
  203. package/dist/io/write-regular-file.d.ts +30 -0
  204. package/dist/io/write-regular-file.js +85 -0
  205. package/dist/io/write-regular-file.js.map +1 -0
  206. package/dist/overrides/index.d.ts +1 -0
  207. package/dist/overrides/index.js +1 -0
  208. package/dist/overrides/index.js.map +1 -1
  209. package/dist/overrides/merge-layers.d.ts +43 -0
  210. package/dist/overrides/merge-layers.js +76 -0
  211. package/dist/overrides/merge-layers.js.map +1 -0
  212. package/dist/overrides/merge.d.ts +16 -0
  213. package/dist/overrides/merge.js +21 -8
  214. package/dist/overrides/merge.js.map +1 -1
  215. package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
  216. package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
  217. package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
  218. package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
  219. package/dist/policy-packs/builtin/branch-protection.js +56 -89
  220. package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
  221. package/dist/policy-packs/config-check.d.ts +7 -5
  222. package/dist/policy-packs/config-check.js +2 -2
  223. package/dist/policy-packs/config-check.js.map +1 -1
  224. package/dist/policy-packs/expand.d.ts +1 -3
  225. package/dist/policy-packs/expand.js +5 -42
  226. package/dist/policy-packs/expand.js.map +1 -1
  227. package/dist/policy-packs/index.d.ts +3 -3
  228. package/dist/policy-packs/index.js +2 -2
  229. package/dist/policy-packs/index.js.map +1 -1
  230. package/dist/policy-packs/registry.d.ts +9 -38
  231. package/dist/policy-packs/registry.js +5 -65
  232. package/dist/policy-packs/registry.js.map +1 -1
  233. package/dist/policy-packs/runtime.d.ts +0 -4
  234. package/dist/policy-packs/runtime.js +9 -22
  235. package/dist/policy-packs/runtime.js.map +1 -1
  236. package/dist/policy-packs/types.d.ts +0 -19
  237. package/dist/policy-packs/ux-compare.d.ts +1 -11
  238. package/dist/policy-packs/ux-compare.js +6 -42
  239. package/dist/policy-packs/ux-compare.js.map +1 -1
  240. package/dist/policy-packs/ux-drift-check.d.ts +5 -5
  241. package/dist/policy-packs/ux-drift-check.js +17 -22
  242. package/dist/policy-packs/ux-drift-check.js.map +1 -1
  243. package/dist/policy-packs/version-check.d.ts +5 -26
  244. package/dist/policy-packs/version-check.js +19 -74
  245. package/dist/policy-packs/version-check.js.map +1 -1
  246. package/dist/probes/memory.d.ts +1 -1
  247. package/dist/probes/memory.js +1 -1
  248. package/dist/probes/memory.js.map +1 -1
  249. package/dist/runtime/agent-facing.d.ts +9 -0
  250. package/dist/runtime/agent-facing.js +28 -14
  251. package/dist/runtime/agent-facing.js.map +1 -1
  252. package/dist/runtime/bounded-text.d.ts +15 -0
  253. package/dist/runtime/bounded-text.js +27 -0
  254. package/dist/runtime/bounded-text.js.map +1 -0
  255. package/dist/runtime/git-branch.d.ts +125 -0
  256. package/dist/runtime/git-branch.js +381 -0
  257. package/dist/runtime/git-branch.js.map +1 -0
  258. package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
  259. package/dist/runtime/hermetic-spawn-guard.js +24 -34
  260. package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
  261. package/dist/runtime/home-dir.js +3 -2
  262. package/dist/runtime/home-dir.js.map +1 -1
  263. package/dist/runtime/tool-name-aliases.d.ts +0 -6
  264. package/dist/runtime/tool-name-aliases.js +5 -18
  265. package/dist/runtime/tool-name-aliases.js.map +1 -1
  266. package/dist/schema/grounding.d.ts +7 -54
  267. package/dist/schema/grounding.js +10 -12
  268. package/dist/schema/grounding.js.map +1 -1
  269. package/dist/schema/hooks.d.ts +39 -136
  270. package/dist/schema/hooks.js +3 -6
  271. package/dist/schema/hooks.js.map +1 -1
  272. package/dist/schema/index.d.ts +114 -3828
  273. package/dist/schema/index.js +41 -80
  274. package/dist/schema/index.js.map +1 -1
  275. package/dist/schema/memory.d.ts +54 -131
  276. package/dist/schema/memory.js +2 -2
  277. package/dist/schema/memory.js.map +1 -1
  278. package/dist/schema/policy-packs.d.ts +3 -45
  279. package/dist/schema/policy-packs.js +7 -13
  280. package/dist/schema/policy-packs.js.map +1 -1
  281. package/dist/schema/policy-ux.d.ts +7 -0
  282. package/dist/schema/policy-ux.js +18 -0
  283. package/dist/schema/policy-ux.js.map +1 -0
  284. package/dist/schema/removed-keys.d.ts +185 -0
  285. package/dist/schema/removed-keys.js +531 -0
  286. package/dist/schema/removed-keys.js.map +1 -0
  287. package/dist/schema/tools.d.ts +30 -268
  288. package/dist/schema/tools.js +4 -4
  289. package/dist/schema/tools.js.map +1 -1
  290. package/package.json +5 -16
  291. package/dist/cli/approve/branch-protection.d.ts +0 -69
  292. package/dist/cli/approve/branch-protection.js +0 -144
  293. package/dist/cli/approve/branch-protection.js.map +0 -1
  294. package/dist/cli/approve/risk.d.ts +0 -112
  295. package/dist/cli/approve/risk.js +0 -197
  296. package/dist/cli/approve/risk.js.map +0 -1
  297. package/dist/cli/approve/stdin-report.d.ts +0 -57
  298. package/dist/cli/approve/stdin-report.js +0 -145
  299. package/dist/cli/approve/stdin-report.js.map +0 -1
  300. package/dist/cli/approve/understanding.d.ts +0 -410
  301. package/dist/cli/approve/understanding.js +0 -996
  302. package/dist/cli/approve/understanding.js.map +0 -1
  303. package/dist/cli/audit.d.ts +0 -80
  304. package/dist/cli/audit.js +0 -252
  305. package/dist/cli/audit.js.map +0 -1
  306. package/dist/cli/delegate/index.d.ts +0 -76
  307. package/dist/cli/delegate/index.js +0 -443
  308. package/dist/cli/delegate/index.js.map +0 -1
  309. package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
  310. package/dist/cli/doctor/auto-approve-mode.js +0 -80
  311. package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
  312. package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
  313. package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
  314. package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
  315. package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
  316. package/dist/cli/doctor/codex-config-drift.js +0 -240
  317. package/dist/cli/doctor/codex-config-drift.js.map +0 -1
  318. package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
  319. package/dist/cli/doctor/rogue-ledger.js +0 -153
  320. package/dist/cli/doctor/rogue-ledger.js.map +0 -1
  321. package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
  322. package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
  323. package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
  324. package/dist/cli/doctor/settings-drift.d.ts +0 -25
  325. package/dist/cli/doctor/settings-drift.js +0 -213
  326. package/dist/cli/doctor/settings-drift.js.map +0 -1
  327. package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
  328. package/dist/cli/doctor/toolchain-parity.js +0 -154
  329. package/dist/cli/doctor/toolchain-parity.js.map +0 -1
  330. package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
  331. package/dist/cli/doctor/ug-auto-approvals.js +0 -91
  332. package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
  333. package/dist/cli/doctor/ug-delegations.d.ts +0 -26
  334. package/dist/cli/doctor/ug-delegations.js +0 -121
  335. package/dist/cli/doctor/ug-delegations.js.map +0 -1
  336. package/dist/cli/doctor/ug-inflight.d.ts +0 -35
  337. package/dist/cli/doctor/ug-inflight.js +0 -57
  338. package/dist/cli/doctor/ug-inflight.js.map +0 -1
  339. package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
  340. package/dist/cli/doctor/understanding-mode-env.js +0 -98
  341. package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
  342. package/dist/cli/dry-run.d.ts +0 -46
  343. package/dist/cli/dry-run.js +0 -250
  344. package/dist/cli/dry-run.js.map +0 -1
  345. package/dist/cli/event-input.d.ts +0 -28
  346. package/dist/cli/event-input.js +0 -73
  347. package/dist/cli/event-input.js.map +0 -1
  348. package/dist/cli/explain-action.d.ts +0 -20
  349. package/dist/cli/explain-action.js +0 -27
  350. package/dist/cli/explain-action.js.map +0 -1
  351. package/dist/cli/explain-policy.d.ts +0 -135
  352. package/dist/cli/explain-policy.js +0 -266
  353. package/dist/cli/explain-policy.js.map +0 -1
  354. package/dist/cli/explain.d.ts +0 -31
  355. package/dist/cli/explain.js +0 -159
  356. package/dist/cli/explain.js.map +0 -1
  357. package/dist/cli/gc/index.d.ts +0 -63
  358. package/dist/cli/gc/index.js +0 -566
  359. package/dist/cli/gc/index.js.map +0 -1
  360. package/dist/cli/pack/approve-escape.d.ts +0 -19
  361. package/dist/cli/pack/approve-escape.js +0 -190
  362. package/dist/cli/pack/approve-escape.js.map +0 -1
  363. package/dist/cli/pack/auto-approve-path.d.ts +0 -146
  364. package/dist/cli/pack/auto-approve-path.js +0 -462
  365. package/dist/cli/pack/auto-approve-path.js.map +0 -1
  366. package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
  367. package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
  368. package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
  369. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
  370. package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
  371. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
  372. package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
  373. package/dist/cli/pack/hook-codex-stop.js +0 -329
  374. package/dist/cli/pack/hook-codex-stop.js.map +0 -1
  375. package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
  376. package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
  377. package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
  378. package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
  379. package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
  380. package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
  381. package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
  382. package/dist/cli/pack/hook-post-merge-gate.js +0 -277
  383. package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
  384. package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
  385. package/dist/cli/pack/hook-post-tool-use.js +0 -137
  386. package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
  387. package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
  388. package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
  389. package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
  390. package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
  391. package/dist/cli/pack/hook-runtime-reality.js +0 -210
  392. package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
  393. package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
  394. package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -337
  395. package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
  396. package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
  397. package/dist/cli/pack/hook-solution-acceptance.js +0 -530
  398. package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
  399. package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
  400. package/dist/cli/pack/hook-stay-in-scope.js +0 -128
  401. package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
  402. package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
  403. package/dist/cli/pack/hook-subagent-start.js +0 -88
  404. package/dist/cli/pack/hook-subagent-start.js.map +0 -1
  405. package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
  406. package/dist/cli/pack/hook-subagent-stop.js +0 -41
  407. package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
  408. package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
  409. package/dist/cli/pack/hook-track-active-claim.js +0 -275
  410. package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
  411. package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
  412. package/dist/cli/pack/transcript-report-scan.js +0 -359
  413. package/dist/cli/pack/transcript-report-scan.js.map +0 -1
  414. package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
  415. package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
  416. package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
  417. package/dist/cli/pack/upgrade.d.ts +0 -32
  418. package/dist/cli/pack/upgrade.js +0 -273
  419. package/dist/cli/pack/upgrade.js.map +0 -1
  420. package/dist/cli/pause/index.d.ts +0 -113
  421. package/dist/cli/pause/index.js +0 -251
  422. package/dist/cli/pause/index.js.map +0 -1
  423. package/dist/cli/pause-check.d.ts +0 -22
  424. package/dist/cli/pause-check.js +0 -54
  425. package/dist/cli/pause-check.js.map +0 -1
  426. package/dist/cli/policy/intercept.d.ts +0 -233
  427. package/dist/cli/policy/intercept.js +0 -1020
  428. package/dist/cli/policy/intercept.js.map +0 -1
  429. package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
  430. package/dist/cli/policy/risk-envelope-enrichment.js +0 -108
  431. package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
  432. package/dist/cli/record/index.d.ts +0 -81
  433. package/dist/cli/record/index.js +0 -348
  434. package/dist/cli/record/index.js.map +0 -1
  435. package/dist/cli/resolve-env.d.ts +0 -32
  436. package/dist/cli/resolve-env.js +0 -47
  437. package/dist/cli/resolve-env.js.map +0 -1
  438. package/dist/cli/session-export/index.d.ts +0 -46
  439. package/dist/cli/session-export/index.js +0 -169
  440. package/dist/cli/session-export/index.js.map +0 -1
  441. package/dist/cli/session-export/redact.d.ts +0 -22
  442. package/dist/cli/session-export/redact.js +0 -47
  443. package/dist/cli/session-export/redact.js.map +0 -1
  444. package/dist/cli/session-export/transcript.d.ts +0 -24
  445. package/dist/cli/session-export/transcript.js +0 -164
  446. package/dist/cli/session-export/transcript.js.map +0 -1
  447. package/dist/cli/session-start/branch-check.d.ts +0 -18
  448. package/dist/cli/session-start/branch-check.js +0 -140
  449. package/dist/cli/session-start/branch-check.js.map +0 -1
  450. package/dist/cli/session-start/index.d.ts +0 -121
  451. package/dist/cli/session-start/index.js +0 -591
  452. package/dist/cli/session-start/index.js.map +0 -1
  453. package/dist/cli/session-start/shared-options.d.ts +0 -103
  454. package/dist/cli/session-start/shared-options.js +0 -107
  455. package/dist/cli/session-start/shared-options.js.map +0 -1
  456. package/dist/cli/session-start/stale-base-check.d.ts +0 -46
  457. package/dist/cli/session-start/stale-base-check.js +0 -352
  458. package/dist/cli/session-start/stale-base-check.js.map +0 -1
  459. package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
  460. package/dist/cli/session-start/toolchain-parity.js +0 -797
  461. package/dist/cli/session-start/toolchain-parity.js.map +0 -1
  462. package/dist/cli/smoke/assertions.d.ts +0 -46
  463. package/dist/cli/smoke/assertions.js +0 -170
  464. package/dist/cli/smoke/assertions.js.map +0 -1
  465. package/dist/cli/smoke/index.d.ts +0 -76
  466. package/dist/cli/smoke/index.js +0 -245
  467. package/dist/cli/smoke/index.js.map +0 -1
  468. package/dist/cli/smoke/runner.d.ts +0 -55
  469. package/dist/cli/smoke/runner.js +0 -134
  470. package/dist/cli/smoke/runner.js.map +0 -1
  471. package/dist/cli/smoke/stream-parser.d.ts +0 -65
  472. package/dist/cli/smoke/stream-parser.js +0 -115
  473. package/dist/cli/smoke/stream-parser.js.map +0 -1
  474. package/dist/cli/test-risk.d.ts +0 -26
  475. package/dist/cli/test-risk.js +0 -34
  476. package/dist/cli/test-risk.js.map +0 -1
  477. package/dist/io/display-path.d.ts +0 -11
  478. package/dist/io/display-path.js +0 -29
  479. package/dist/io/display-path.js.map +0 -1
  480. package/dist/io/duration.d.ts +0 -5
  481. package/dist/io/duration.js +0 -50
  482. package/dist/io/duration.js.map +0 -1
  483. package/dist/io/extract.d.ts +0 -79
  484. package/dist/io/extract.js +0 -226
  485. package/dist/io/extract.js.map +0 -1
  486. package/dist/io/ledger-record.d.ts +0 -83
  487. package/dist/io/ledger-record.js +0 -301
  488. package/dist/io/ledger-record.js.map +0 -1
  489. package/dist/io/read-json-dir-entries.d.ts +0 -36
  490. package/dist/io/read-json-dir-entries.js +0 -48
  491. package/dist/io/read-json-dir-entries.js.map +0 -1
  492. package/dist/io/safe-json-parse.d.ts +0 -5
  493. package/dist/io/safe-json-parse.js +0 -21
  494. package/dist/io/safe-json-parse.js.map +0 -1
  495. package/dist/policies/index.d.ts +0 -5
  496. package/dist/policies/index.js +0 -6
  497. package/dist/policies/index.js.map +0 -1
  498. package/dist/policies/ledger-client.d.ts +0 -113
  499. package/dist/policies/ledger-client.js +0 -500
  500. package/dist/policies/ledger-client.js.map +0 -1
  501. package/dist/policies/producers.d.ts +0 -12
  502. package/dist/policies/producers.js +0 -61
  503. package/dist/policies/producers.js.map +0 -1
  504. package/dist/policies/requires.d.ts +0 -75
  505. package/dist/policies/requires.js +0 -240
  506. package/dist/policies/requires.js.map +0 -1
  507. package/dist/policies/timestamp.d.ts +0 -14
  508. package/dist/policies/timestamp.js +0 -36
  509. package/dist/policies/timestamp.js.map +0 -1
  510. package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
  511. package/dist/policy-packs/builtin/permission-profiles.js +0 -74
  512. package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
  513. package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
  514. package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
  515. package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
  516. package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
  517. package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
  518. package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
  519. package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
  520. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
  521. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
  522. package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
  523. package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
  524. package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
  525. package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
  526. package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
  527. package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
  528. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
  529. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
  530. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
  531. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
  532. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
  533. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
  534. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
  535. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
  536. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
  537. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
  538. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
  539. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
  540. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
  541. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
  542. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
  543. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
  544. package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
  545. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
  546. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
  547. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -618
  548. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
  549. package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
  550. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
  551. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
  552. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
  553. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -93
  554. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
  555. package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
  556. package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
  557. package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
  558. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
  559. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
  560. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
  561. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
  562. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
  563. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
  564. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -620
  565. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
  566. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
  567. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
  568. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
  569. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
  570. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
  571. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
  572. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
  573. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
  574. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
  575. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
  576. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
  577. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
  578. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
  579. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
  580. package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1074
  581. package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
  582. package/dist/policy-packs/permission-translator.d.ts +0 -9
  583. package/dist/policy-packs/permission-translator.js +0 -76
  584. package/dist/policy-packs/permission-translator.js.map +0 -1
  585. package/dist/runtime/action-envelope.d.ts +0 -64
  586. package/dist/runtime/action-envelope.js +0 -46
  587. package/dist/runtime/action-envelope.js.map +0 -1
  588. package/dist/runtime/approval-signing.d.ts +0 -111
  589. package/dist/runtime/approval-signing.js +0 -384
  590. package/dist/runtime/approval-signing.js.map +0 -1
  591. package/dist/runtime/bash-match-facts.d.ts +0 -60
  592. package/dist/runtime/bash-match-facts.js +0 -196
  593. package/dist/runtime/bash-match-facts.js.map +0 -1
  594. package/dist/runtime/bash-match-registry.d.ts +0 -112
  595. package/dist/runtime/bash-match-registry.js +0 -406
  596. package/dist/runtime/bash-match-registry.js.map +0 -1
  597. package/dist/runtime/bash-prefix-parse.d.ts +0 -31
  598. package/dist/runtime/bash-prefix-parse.js +0 -576
  599. package/dist/runtime/bash-prefix-parse.js.map +0 -1
  600. package/dist/runtime/command-normalize.d.ts +0 -658
  601. package/dist/runtime/command-normalize.js +0 -2410
  602. package/dist/runtime/command-normalize.js.map +0 -1
  603. package/dist/runtime/deletion-target-resolve.d.ts +0 -28
  604. package/dist/runtime/deletion-target-resolve.js +0 -1078
  605. package/dist/runtime/deletion-target-resolve.js.map +0 -1
  606. package/dist/runtime/destructive-shell-floor.d.ts +0 -19
  607. package/dist/runtime/destructive-shell-floor.js +0 -611
  608. package/dist/runtime/destructive-shell-floor.js.map +0 -1
  609. package/dist/runtime/environment-resolver.d.ts +0 -36
  610. package/dist/runtime/environment-resolver.js +0 -138
  611. package/dist/runtime/environment-resolver.js.map +0 -1
  612. package/dist/runtime/git-context.d.ts +0 -201
  613. package/dist/runtime/git-context.js +0 -422
  614. package/dist/runtime/git-context.js.map +0 -1
  615. package/dist/runtime/index.d.ts +0 -12
  616. package/dist/runtime/index.js +0 -13
  617. package/dist/runtime/index.js.map +0 -1
  618. package/dist/runtime/intercept.d.ts +0 -494
  619. package/dist/runtime/intercept.js +0 -1313
  620. package/dist/runtime/intercept.js.map +0 -1
  621. package/dist/runtime/kube-context.d.ts +0 -16
  622. package/dist/runtime/kube-context.js +0 -63
  623. package/dist/runtime/kube-context.js.map +0 -1
  624. package/dist/runtime/kubectl-target-parse.d.ts +0 -31
  625. package/dist/runtime/kubectl-target-parse.js +0 -249
  626. package/dist/runtime/kubectl-target-parse.js.map +0 -1
  627. package/dist/runtime/ledger-add.d.ts +0 -16
  628. package/dist/runtime/ledger-add.js +0 -150
  629. package/dist/runtime/ledger-add.js.map +0 -1
  630. package/dist/runtime/ledger-writer.d.ts +0 -27
  631. package/dist/runtime/ledger-writer.js +0 -46
  632. package/dist/runtime/ledger-writer.js.map +0 -1
  633. package/dist/runtime/pause-sentinel.d.ts +0 -60
  634. package/dist/runtime/pause-sentinel.js +0 -156
  635. package/dist/runtime/pause-sentinel.js.map +0 -1
  636. package/dist/runtime/pending-approval.d.ts +0 -23
  637. package/dist/runtime/pending-approval.js +0 -67
  638. package/dist/runtime/pending-approval.js.map +0 -1
  639. package/dist/runtime/read-only-bash.d.ts +0 -141
  640. package/dist/runtime/read-only-bash.js +0 -2204
  641. package/dist/runtime/read-only-bash.js.map +0 -1
  642. package/dist/runtime/recovery-git-commit.d.ts +0 -22
  643. package/dist/runtime/recovery-git-commit.js +0 -284
  644. package/dist/runtime/recovery-git-commit.js.map +0 -1
  645. package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
  646. package/dist/runtime/reject-malformed-session-id.js +0 -16
  647. package/dist/runtime/reject-malformed-session-id.js.map +0 -1
  648. package/dist/runtime/risk-classifier.d.ts +0 -38
  649. package/dist/runtime/risk-classifier.js +0 -311
  650. package/dist/runtime/risk-classifier.js.map +0 -1
  651. package/dist/runtime/session-id.d.ts +0 -113
  652. package/dist/runtime/session-id.js +0 -193
  653. package/dist/runtime/session-id.js.map +0 -1
  654. package/dist/runtime/shell-word.d.ts +0 -62
  655. package/dist/runtime/shell-word.js +0 -410
  656. package/dist/runtime/shell-word.js.map +0 -1
  657. package/dist/runtime/task-providers/agent-tasks.d.ts +0 -103
  658. package/dist/runtime/task-providers/agent-tasks.js +0 -245
  659. package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
  660. package/dist/runtime/when-eval.d.ts +0 -62
  661. package/dist/runtime/when-eval.js +0 -212
  662. package/dist/runtime/when-eval.js.map +0 -1
  663. package/dist/runtime/workflow-policies.d.ts +0 -207
  664. package/dist/runtime/workflow-policies.js +0 -596
  665. package/dist/runtime/workflow-policies.js.map +0 -1
  666. package/dist/schema/audit.d.ts +0 -71
  667. package/dist/schema/audit.js +0 -32
  668. package/dist/schema/audit.js.map +0 -1
  669. package/dist/schema/doctor.d.ts +0 -25
  670. package/dist/schema/doctor.js +0 -23
  671. package/dist/schema/doctor.js.map +0 -1
  672. package/dist/schema/environments.d.ts +0 -215
  673. package/dist/schema/environments.js +0 -101
  674. package/dist/schema/environments.js.map +0 -1
  675. package/dist/schema/extract.d.ts +0 -9
  676. package/dist/schema/extract.js +0 -86
  677. package/dist/schema/extract.js.map +0 -1
  678. package/dist/schema/permission-profiles.d.ts +0 -2292
  679. package/dist/schema/permission-profiles.js +0 -60
  680. package/dist/schema/permission-profiles.js.map +0 -1
  681. package/dist/schema/policies.d.ts +0 -974
  682. package/dist/schema/policies.js +0 -298
  683. package/dist/schema/policies.js.map +0 -1
  684. package/dist/schema/requires.d.ts +0 -131
  685. package/dist/schema/requires.js +0 -88
  686. package/dist/schema/requires.js.map +0 -1
  687. package/dist/schema/risk.d.ts +0 -144
  688. package/dist/schema/risk.js +0 -194
  689. package/dist/schema/risk.js.map +0 -1
  690. package/dist/schema/session-start-preflight.d.ts +0 -10
  691. package/dist/schema/session-start-preflight.js +0 -106
  692. package/dist/schema/session-start-preflight.js.map +0 -1
  693. package/dist/schema/stale-base-check.d.ts +0 -18
  694. package/dist/schema/stale-base-check.js +0 -37
  695. package/dist/schema/stale-base-check.js.map +0 -1
  696. package/dist/schema/toolchain-parity.d.ts +0 -21
  697. package/dist/schema/toolchain-parity.js +0 -48
  698. package/dist/schema/toolchain-parity.js.map +0 -1
  699. package/dist/schema/workflows.d.ts +0 -519
  700. package/dist/schema/workflows.js +0 -81
  701. package/dist/schema/workflows.js.map +0 -1
  702. package/scripts/runtime-reality-docker-probe.mjs +0 -71
@@ -1,658 +0,0 @@
1
- export interface NormalizedCommand {
2
- /**
3
- * The command with wrapper prefixes peeled and git invocations
4
- * canonicalised to `git <subcommand>`. Shell boundary characters
5
- * (`\n ; | && ( )`) are preserved verbatim so a boundary-anchored
6
- * regex still matches. Byte-identical to the input when nothing
7
- * recognisable was found anywhere in the command.
8
- */
9
- normalized: string;
10
- /**
11
- * The effective target directory of the command's git invocation, or
12
- * `null` when the command names none, the command names invocations
13
- * that disagree, or the only named value is `~`-prefixed (see the
14
- * module header's target-directory-extraction rules).
15
- *
16
- * STILL NOT WIRED TO ANY GATE (see the module header's STATUS
17
- * paragraph): extracted and fully tested, but task `98ad072f`'s
18
- * per-policy redesign (T-003) attributes a target from the per-segment
19
- * `segmentViewOf` view below instead of this whole-command aggregate —
20
- * a single per-event `targetDir` cannot express "this invocation
21
- * targets repo B, but the gated verb after it runs in the caller's
22
- * cwd," which is exactly the property the redesign needs.
23
- */
24
- targetDir: string | null;
25
- /**
26
- * When `targetDir` is a RELATIVE path, the directory it should be
27
- * resolved against instead of the caller's own cwd — the wrapping
28
- * `env -C` on the same invocation, or a leading `cd` prefix (see the
29
- * module header). `null` when `targetDir` is absolute, `null` itself,
30
- * or no more specific base was found.
31
- *
32
- * Same unconsumed status as `targetDir` above — see the module
33
- * header's STATUS paragraph.
34
- */
35
- targetBase: string | null;
36
- /**
37
- * `true` when the input exceeded `MAX_NORMALIZE_LENGTH` and
38
- * normalisation was skipped entirely (G4 fix, review round 2,
39
- * 2026-07-27): the caller previously had no way to tell "nothing
40
- * recognisable was found" apart from "normalisation never ran at all",
41
- * so the skip carried no audit signal. `false` whenever the input WAS
42
- * run through `normalizeCommandInner` (including when nothing
43
- * recognisable was found there either — that case is still `false`,
44
- * only the length-bound short-circuit sets this).
45
- */
46
- truncated: boolean;
47
- }
48
- /**
49
- * One boundary-delimited segment's canonicalised text plus its own and
50
- * "effective" target directory (task `98ad072f`, T-002 of run
51
- * `2026-08-02-per-repo-gate-scoping-redesign`) — attributes a target to
52
- * the SPECIFIC segment satisfying a policy's own `bash_match` trigger,
53
- * instead of the single, whole-command `targetDir` / `targetBase` on
54
- * `NormalizedCommand` above. Produced by `segmentViewOf`. WIRED as of
55
- * T-003, this run: `src/runtime/intercept.ts`'s `attributeTriggerSegments`
56
- * / `resolveAttributedContexts` are the consumer (see the module header's
57
- * STATUS/UPDATE note for the exact contract).
58
- */
59
- export interface CommandSegment {
60
- /**
61
- * This segment's canonicalised text — the same rewrite
62
- * `NormalizedCommand.normalized` applies to the corresponding span,
63
- * boundary tokens EXCLUDED (they sit between segments, never inside
64
- * one). Every shipped `bash_match` pattern's boundary alternation
65
- * includes a `^` branch, so testing such a pattern against THIS string
66
- * alone (no leading boundary character) is well-defined — see
67
- * `01-plan.md`'s Proposed Approach item 2 for how a future consumer
68
- * uses this.
69
- */
70
- text: string;
71
- /**
72
- * D-021 (UNIVERSAL-ADDITIVE, run 2026-08-02-per-repo-gate-scoping-
73
- * redesign): the only remaining consumer of this field is
74
- * `computeSegmentTarget`'s own internal `effectiveTarget` derivation
75
- * (below) — `src/runtime/intercept.ts`'s `resolveAttributedContexts`
76
- * (the gate) reads `effectiveTarget` only and no longer consults
77
- * `ownTarget` at all. Kept as a public, separately-populated field
78
- * (part of the T-002 API) rather than folded away, since a future
79
- * consumer distinguishing "this segment's OWN explicit target" from
80
- * "the directory it composes to once an incoming `cd` basis is
81
- * accounted for" is exactly what the two-field split exists for.
82
- *
83
- * This segment's OWN explicit target, named by ITS OWN invocation
84
- * only — a git invocation's REPO-RELOCATING global option ONLY: `-C` /
85
- * `--git-dir` (or the SAME invocation's wrapping `env -C`, git-own-
86
- * target-prioritised the same way `NormalizedCommand.targetDir` already
87
- * is) — or, for a recognised bare `cd <path>` segment, the parsed path.
88
- * Deliberately EXCLUDES `--work-tree` (D-017, fix round 2, run
89
- * `2026-08-02-per-repo-gate-scoping-redesign`): `--work-tree` sets a
90
- * git invocation's working tree but does NOT relocate its `--git-dir`
91
- * search, so `git --work-tree=<B> push`/`log`/`status` still operate on
92
- * whatever repo the invocation's ACTUAL directory names, never `<B>`
93
- * alone — folding it into this field as though it were repo-identity-
94
- * bearing (the pre-fix behaviour) let `resolveAttributedContexts`
95
- * (`src/runtime/intercept.ts`, D-011) REPLACE the cwd demand with `<B>`'s
96
- * on the strength of a flag that never moved the invocation there,
97
- * measured as a live cross-repo fail-open. `null` when this segment
98
- * names no repo-relocating target of its own (not a git invocation, not
99
- * a `cd` segment, a bare git invocation, or a git invocation whose ONLY
100
- * target-bearing flag is `--work-tree`) OR the named value is one of
101
- * this view's unattributable forms: `~`-prefixed, carrying a stray quote
102
- * character (the tokeniser is not quote-aware — a quoted value is
103
- * captured WITH its quote character(s) still attached, not a real
104
- * path), containing a command-substitution marker (`$(` or a backtick),
105
- * or — for `cd` specifically — a bare `cd` with no argument or a `cd`
106
- * with a flag (`cd -P /x`, three tokens instead of two). ALSO `null`
107
- * when the SAME invocation names a git target via BOTH a relative own
108
- * `-C` / `--git-dir` AND a wrapping `env -C` / `--chdir` base (`env -C
109
- * /tmp/base git -C sub status`) — a mixed, internally ambiguous
110
- * composition, unattributable for the same reason a relative own target
111
- * after a preceding `cd` is (see `effectiveTarget` below); this is the
112
- * ONE case where `ownTarget` itself, not just `effectiveTarget`, is
113
- * nulled by a composition rule rather than by the raw value being
114
- * unrecognisable on its own. A relative value (including `-C .`) and an
115
- * absolute value are both otherwise preserved here verbatim, unresolved
116
- * against any cwd — that resolution is a future consumer's job, not
117
- * this module's. `git --git-dir=<A>/.git --work-tree=<B> ...`: this
118
- * field is `<A>` (the `.git` parent) — `--git-dir` wins regardless of
119
- * which flag appears first in the invocation, because `--work-tree`
120
- * never contributes to this field at all, not because of any ordering
121
- * rule between the two.
122
- *
123
- * ALSO `null` (D-018, fix round 3, pass-3 CRITICAL) when the invocation
124
- * carries MORE THAN ONE recognised, resolved repo-relocating option:
125
- * two-or-more `-C`, `-C` combined with `--git-dir`, `--git-dir` twice,
126
- * or a same-invocation `env -C`/`--chdir` wrap whose target diverges
127
- * from git's own ABSOLUTE `-C`/`--git-dir` target. Real git composes
128
- * every one of these cumulatively (a later absolute value wins); this
129
- * module does not encode that composition (same "not this module's
130
- * job" reasoning as the relative-mix case above) and instead falls back
131
- * to unattributable rather than trust the first flag it saw — `git -C
132
- * <forge> -C <realA> push` actually runs in `<realA>`, but a first-
133
- * flag-wins reading named `<forge>`, letting an agent redirect a gate's
134
- * demanded evidence away from the repo the verb truly targets (measured
135
- * against real git 2.34.1). An EXACT repeat of the same already-
136
- * recorded value (`-C X -C X`, `env -C X git -C X`) is not new
137
- * information and does not trigger this — see `peelGitGlobalOptions`'s
138
- * `noteRelocatingOption` for the precise counting rule.
139
- *
140
- * D-021 (UNIVERSAL-ADDITIVE, operator decision, run 2026-08-02-per-
141
- * repo-gate-scoping-redesign): the D-017/D-018 exclusions above (only a
142
- * SINGLE recognised repo-relocating flag sets this field; `--work-tree`
143
- * never does) are PRECISION, not the safety mechanism, since
144
- * `src/runtime/intercept.ts`'s `resolveAttributedContexts` no longer
145
- * REPLACES the cwd demand with this field's value — it ADDS to it, and
146
- * the cwd demand is never dropped regardless of what this field
147
- * resolves to. What these exclusions still prevent is a SPURIOUS extra
148
- * demand (over-attributing a target the invocation does not actually,
149
- * unambiguously name), not a dropped one — see that function's own doc
150
- * comment for the full D-021 rationale.
151
- */
152
- ownTarget: string | null;
153
- /**
154
- * The directory this segment's own invocation actually runs in, once
155
- * composed with the LAST PRECEDING recognised `cd <path>` segment in the
156
- * same command (not necessarily the immediately preceding segment — any
157
- * non-`cd` segment in between leaves the running cd-basis unchanged, the
158
- * same way a non-`cd` shell command never itself changes the directory).
159
- * Composition rules (`01-plan.md`, Proposed Approach item 1, verbatim):
160
- * - `ownTarget === null` → inherits the incoming cd-basis as-is
161
- * (including `null` when nothing preceding named one either).
162
- * - `ownTarget` absolute → itself, unconditionally — an absolute
163
- * value is never "relative to" anything a preceding `cd` named.
164
- * - `ownTarget` relative AND a preceding `cd` basis is known
165
- * (non-`null`) → `null`. This is the K1 divergence case
166
- * (`docs/okf/quote-model-divergence.md`): `cd T && git -C sub
167
- * status` does NOT become `T/sub` here — that would need real
168
- * filesystem-shaped path joining this module deliberately does not
169
- * perform — so it is UNATTRIBUTABLE rather than guessed at.
170
- * - `ownTarget` relative AND no preceding `cd` basis is known → the
171
- * raw relative value itself (deferred to a future consumer to
172
- * resolve against the real cwd).
173
- * A same-invocation mixed `env -C <base>` + relative own `-C`/
174
- * `--git-dir` composition (see `ownTarget` above — `--work-tree` is
175
- * EXCLUDED from this mix entirely, D-017: it never sets `ownTarget`, so
176
- * it can never trigger this ambiguity either) is `null` here TOO —
177
- * checked BEFORE the cd-basis rules above and
178
- * independently of them: `env -C /tmp/base git -C sub status` never
179
- * becomes `/tmp/base/sub` (real path joining, deliberately not this
180
- * module's job — same reasoning as the cd-basis K1 case) NOR does it
181
- * fall through to the "relative, no cd basis, stays raw" branch above
182
- * (that would hand a future consumer resolving relatives against ITS
183
- * OWN cwd a CONFIDENTLY WRONG repository whenever the caller's cwd
184
- * differs from `/tmp/base` — the "relative and `~` target dirs resolve
185
- * to a confidently wrong repo" class named in the 07-27 review). A bare
186
- * `env -C <base> git status` (no relative own target) is UNAFFECTED —
187
- * `ownTarget` is `<base>` as usual, composed the ordinary way below.
188
- * A recognised `cd <path>` segment whose OWN value is one of the
189
- * unattributable forms above (e.g. `cd ~`) still RESETS the running
190
- * cd-basis to `null` for every LATER segment — a later segment must not
191
- * silently keep inheriting whatever basis existed BEFORE that `cd`,
192
- * since the shell genuinely changed directory to somewhere this module
193
- * cannot name.
194
- *
195
- * FULL reset-trigger list (D-014, fix round, run 2026-08-02-per-repo-
196
- * gate-scoping-redesign — corrects this comment, which previously named
197
- * only the unattributable-`cd`-value case above): the running basis
198
- * resets to `null` — rather than the pre-fix behaviour of silently
199
- * carrying an earlier basis forward unchanged — for ALL of: a bare `cd`
200
- * with no argument, `cd -`, any other flagged `cd` (`cd -P /tmp/x`),
201
- * `pushd`, `popd` (see `classifyCdSegment`), and the unattributable-
202
- * `cd`-value case documented above. TWO of the reset triggers are NOT
203
- * decided by this per-segment composition at all — they depend on the
204
- * BOUNDARY a segment sits behind, which only the caller
205
- * (`segmentAndCanonicalize`'s own walk) can see: the basis never
206
- * crosses a bare `|` (each side of a pipe is bash's own subshell), and
207
- * it resets after any segment whose text contains a `)` (a subshell
208
- * close — `BOUNDARY_RE` has no `)` boundary of its own, so this is a
209
- * substring check on the segment that happens to end there, not paren-
210
- * depth tracking). See `segmentAndCanonicalize`'s own comment at its
211
- * `computeSegmentTarget` call site for those two. NOT covered by any of
212
- * this (same ceiling as before this fix round, unchanged): a `cd`
213
- * inside a NESTED subshell that never closes within the command
214
- * string's visible boundaries, and any construct outside this module's
215
- * documented NOT-SUPPORTED list in the module header.
216
- */
217
- effectiveTarget: string | null;
218
- }
219
- /**
220
- * The minimal shape `peelWrapperPrefixes` and every individual `peelX`
221
- * wrapper-peeler actually need — `.text` only, never `.start`/`.end`
222
- * (task d03af8f6, review round 3). Exported so
223
- * `src/runtime/deletion-target-resolve.ts` can hand these SAME peelers a
224
- * decoded token array of its own (built from ITS quote-aware tokenizer,
225
- * not this module's `tokenizeWithOffsets`) without fabricating fake
226
- * offsets: `Token` (with real offsets) is structurally assignable to
227
- * `WrapperPeelToken[]` already, so `canonicalizeSegment`'s own call sites
228
- * below need no change at all — this is a widening of the peelers'
229
- * PARAMETER types only, not a behaviour change (none of them ever read
230
- * `.start`/`.end`).
231
- */
232
- export interface WrapperPeelToken {
233
- text: string;
234
- }
235
- /**
236
- * The `git` token itself, matched by BASENAME so a path-qualified
237
- * invocation (`/usr/bin/git`, `./git`) is recognised too (F4 fix).
238
- * Anchored to the WHOLE token (not a substring) so `mygit` / `git-foo`
239
- * still correctly fail to match — `\S*` only ever contributes characters
240
- * immediately before a literal `/`, never before `git` directly.
241
- * Exported (fix round 2, finding F3) so
242
- * `tests/runtime/bash-match-head-token-drift.test.ts` can couple this
243
- * module's covered set to what FULL_TEMPLATE's shipped `bash_match`
244
- * policies actually key on today, instead of a test-owned duplicate.
245
- */
246
- export declare const GIT_TOKEN_RE: RegExp;
247
- /**
248
- * git global options that this module's `peelGitGlobalOptions` skips over
249
- * to find the subcommand. Exported so `read-only-bash.ts` can share the same
250
- * source of truth; each module keeps its own decision about what a matched
251
- * option means.
252
- *
253
- * Flags that consume a value (separate token or glued via `=`): `-C`,
254
- * `--git-dir`, `--work-tree`, `-c`, `--namespace`.
255
- *
256
- * Flags without a value: `--no-pager`, `-p`, `--paginate`, `--exec-path`,
257
- * `--literal-pathspecs`, `--no-replace-objects`.
258
- */
259
- /**
260
- * git global options that take a value, excluding `-c` for security.
261
- * `-c KEY=VALUE` can inject arbitrary git config that executes code
262
- * (core.fsmonitor, core.pager, core.editor, protocol.*.allow run
263
- * arbitrary programs); fail-closed by not skipping it. read-only-bash.ts
264
- * uses this set to skip only the safe value-taking options.
265
- *
266
- * Flags: `-C`, `--git-dir`, `--work-tree`, `--namespace` (recognized both
267
- * standalone and glued with `=`).
268
- */
269
- export declare const GIT_GLOBAL_VALUE_TAKING_FLAGS: ReadonlySet<string>;
270
- /**
271
- * git global options that take no value.
272
- * Flags: `--no-pager`, `-p`, `--paginate`, `--exec-path`,
273
- * `--literal-pathspecs`, `--no-replace-objects`.
274
- */
275
- export declare const GIT_GLOBAL_NO_VALUE_FLAGS: ReadonlySet<string>;
276
- /**
277
- * The three OTHER head tokens this module covers (D-001, run
278
- * 2026-07-28-nongit-trigger-wrappers) — `gh` (`gh pr merge` / `gh pr
279
- * create`), `npm` (`npm publish`), `harness` (the kill-switch verbs). A
280
- * closed set, deliberately NOT a general "any head token" rule (see the
281
- * module header): matched by EXACT literal equality, unlike `GIT_TOKEN_RE`'s
282
- * basename match, so a path-qualified spelling of any of these three stays
283
- * out of scope (named residual, module header NOT-SUPPORTED list). This is
284
- * NOT the complete set of head tokens a shipped `bash_match` trigger keys
285
- * on — see the module header's "SHIPPED BUT NOT COVERED" paragraph (fix
286
- * round 2, finding F1) for the four that are NOT in this set (`env`,
287
- * `unset`, `tee`, `cp`) and why. Exported (fix round 2, finding F3) for the
288
- * same drift-guard reason as `GIT_TOKEN_RE` above.
289
- */
290
- export declare const NON_GIT_HEAD_TOKENS: ReadonlySet<string>;
291
- /**
292
- * Above this length, normalisation is skipped entirely and the command
293
- * is returned unchanged (F3 fix — see the module header for why command
294
- * SIZE must be bounded even after `findNextBoundary` was made linear).
295
- * 100k characters comfortably covers any command a human or agent would
296
- * plausibly type, while keeping the worst case a small constant instead
297
- * of scaling with whatever ends up pasted into a single Bash call.
298
- * Exported (G4 fix, review round 2) so a caller reporting the skip (see
299
- * `NormalizedCommand.truncated`) can reference the same number instead of
300
- * hand-copying it into a diagnostic message.
301
- */
302
- export declare const MAX_NORMALIZE_LENGTH = 100000;
303
- /**
304
- * Second boundary alphabet (task aabbad63): identical to `BOUNDARY_RE`
305
- * plus a bare `&` — bash's OWN "start a new command here" token, which
306
- * every shipped `bash_match` trigger regex has treated as one of its own
307
- * anchor characters since task `d834a065`, but which `BOUNDARY_RE` above
308
- * has never recognised as a NORMALISATION-time boundary (see its comment
309
- * for the reverted, measured-140/140-regression attempt to add it there
310
- * directly).
311
- *
312
- * ALTERNATION ORDER IS LOAD-BEARING: `&&` MUST be listed to the LEFT of
313
- * the bare `&` alternative. JS regex alternation is leftmost-FIRST, not
314
- * leftmost-longest — with `&` tried before `&&`, every `&&` in a command
315
- * would tokenise as TWO consecutive one-character `&` boundary MATCHES
316
- * instead of a single two-character `&&` boundary match.
317
- *
318
- * MEASURED, NOT ASSUMED (do not "simplify" the pin below to an
319
- * end-to-end `.normalized` string assertion): for THIS module's segment-
320
- * and-rejoin architecture specifically, that reordering is, perhaps
321
- * counter-intuitively, INVISIBLE in `normalizeCommandAmpAware`'s own
322
- * output string. Two adjacent single-`&` matches sandwich a genuinely
323
- * zero-length segment between them (the two `&` characters of a real
324
- * `&&` are, by definition, adjacent), `canonicalizeSegment("")` is a
325
- * verbatim no-op, and `parts.join("")` reassembles the exact same bytes
326
- * either way — verified directly (not merely reasoned about) by
327
- * temporarily swapping this alternation's order, rebuilding, and
328
- * diffing `normalizeCommandAmpAware(...).normalized` across several
329
- * `&&`-bearing commands (including this comment's own `git -C
330
- * /tmp/repoB status && git -C /tmp/repoB log` example): byte-identical
331
- * output both ways. So a test asserting on the OUTPUT STRING alone
332
- * cannot distinguish the two orderings for this architecture — the pin
333
- * in `tests/runtime/command-normalize.test.ts` therefore execs this
334
- * regex object DIRECTLY against a `&&`-bearing string and asserts the
335
- * match text is `"&&"`, not `"&"`, which DOES fail under a swap. The
336
- * order is still specified exactly as documented above (leftmost-first
337
- * is real JS semantics, and the internal `segmentAndCanonicalize`
338
- * bookkeeping this alphabet ALSO drives — `hasAmbiguousNonGitSegment`,
339
- * discarded by `normalizeCommandAmpAware` but not by a hypothetical
340
- * future consumer of `segmentAndCanonicalize` under this alphabet —
341
- * would still see a spurious extra "non-git segment" under the wrong
342
- * order), it just cannot be pinned through this module's ONE exposed
343
- * string alone.
344
- *
345
- * Used ONLY by `normalizeCommandAmpAware` below, which is consulted ONLY
346
- * as `policyMatchesEvent`'s third, additional matching arm — see that
347
- * function's own comment for why its result never carries a `targetDir`/
348
- * `targetBase`, and `src/runtime/intercept.ts` for the memoised-thunk
349
- * threading that keeps this off the common (raw-or-normalised-already-
350
- * matched) path. Exported (mirrors `GIT_TOKEN_RE` / `NON_GIT_HEAD_TOKENS`
351
- * / `MAX_NORMALIZE_LENGTH` above) solely so the ordering pin test can
352
- * exec it directly instead of re-declaring an equivalent regex literal
353
- * that would test JS semantics in general, not THIS source's actual
354
- * alternation.
355
- */
356
- export declare const AMP_BOUNDARY_RE: RegExp;
357
- /**
358
- * Given a Bash command string, return its normalised form and the target
359
- * directory (and base, if relative) of its git invocation. Never throws:
360
- * any internal failure (there should be none — this is a defensive
361
- * backstop matching the fail-safe shape used elsewhere in this codebase,
362
- * e.g. `policyMatchesEvent`'s `try/catch` around `new RegExp`) falls back
363
- * to the input unchanged.
364
- */
365
- export declare function normalizeCommand(command: string): NormalizedCommand;
366
- /**
367
- * Given a Bash command string, return its per-segment view (task
368
- * `98ad072f` groundwork, T-002) — see `CommandSegment`'s own doc comment
369
- * for the field-level composition rules. `null` when the input exceeded
370
- * `MAX_NORMALIZE_LENGTH` (mirrors `NormalizedCommand.truncated`, but as
371
- * the ABSENCE of a view rather than a boolean flag alongside one, since
372
- * there is no meaningful per-segment view to return for an input whose
373
- * normalisation itself was skipped). `[]` for an empty or non-string
374
- * command, and as the never-throws fallback (mirrors `normalizeCommand`'s
375
- * own defensive backstop — see its doc comment above).
376
- *
377
- * THIS function's OWN call into `segmentAndCanonicalize` (`collectSegments:
378
- * true`) is one walk, O(length) — the "no additional pass" claim is scoped
379
- * to that ONE call, not to a caller's total work. CORRECTED (D-015, fix
380
- * round, run 2026-08-02-per-repo-gate-scoping-redesign) — the prior wording
381
- * here read "no additional pass over the command string" without that
382
- * scoping, which a reader could take as "calling this costs nothing beyond
383
- * `normalizeCommand`'s own walk." Measured false: `normalizeCommand(cmd)`
384
- * and `segmentViewOf(cmd)` are two SEPARATE top-level calls, each running
385
- * its own full `segmentAndCanonicalize` pass over the SAME string — a
386
- * caller needing both (as `src/cli/policy/intercept.ts` does, for
387
- * `normalized`/`truncated` and the segment view respectively) pays TWO
388
- * walks, not one; measured +206% at the `MAX_NORMALIZE_LENGTH` bound
389
- * (2.73 → 8.36 ms), harmless against the 1000 ms hook budget but not free.
390
- * As of the same fix round, the one production caller only pays this
391
- * second walk lazily, when some matching policy actually needs it (see
392
- * `InterceptOptions.commandSegmentsThunk` in `src/runtime/intercept.ts`) —
393
- * but that laziness lives in the CALLER, not in this function, which still
394
- * does exactly one walk every time it runs. The ampersand-aware second pass
395
- * (`normalizeCommandAmpAware`) NEVER collects a segment view (always calls
396
- * `segmentAndCanonicalize` with `collectSegments: false`) — see that
397
- * function's own comment for why a directory extracted under the
398
- * ampersand-aware alphabet would be unreliable in the first place; the
399
- * same reasoning applies here, so this module offers no amp-aware variant
400
- * of this function at all.
401
- */
402
- export declare function segmentViewOf(command: string): CommandSegment[] | null;
403
- /**
404
- * Ampersand-aware sibling of `segmentViewOf` (task d03af8f6, review
405
- * round 3): the same per-segment view, but segmented under
406
- * `AMP_BOUNDARY_RE` (`BOUNDARY_RE` plus a bare `&`) instead of
407
- * `BOUNDARY_RE` — closing the same bare-`&` gap `normalizeCommandAmpAware`
408
- * closes for trigger matching (`echo hi & rm -rf /home/x`), but as a
409
- * segment VIEW rather than a rejoined string, for
410
- * `src/runtime/deletion-target-resolve.ts`'s multi-segment scan. Uses the
411
- * SAME shared walk (`segmentAndCanonicalize`, parameterised on
412
- * `boundaryRe` since task aabbad63) as every other pass in this module —
413
- * no new segmentation logic. `CommandSegment.effectiveTarget`'s own
414
- * composition rules are UNCHANGED by which alphabet drove the split; a
415
- * caller that only needs `.text` per segment (as the deletion resolver
416
- * does) is unaffected by the same directory-extraction reliability
417
- * caveat `normalizeCommandAmpAware`'s own comment names for `targetDir`/
418
- * `targetBase` — this function returns the FULL `CommandSegment` shape,
419
- * `effectiveTarget` included, so a future caller relying on THAT field
420
- * under this alphabet should read `normalizeCommandAmpAware`'s comment
421
- * first. `null` under the same `MAX_NORMALIZE_LENGTH` condition
422
- * `segmentViewOf` uses; `[]` for an empty/non-string command or the
423
- * never-throws fallback.
424
- */
425
- export declare function segmentViewOfAmpAware(command: string): CommandSegment[] | null;
426
- /**
427
- * Return type of `normalizeCommandAmpAware` — deliberately NOT
428
- * `NormalizedCommand` (task aabbad63, hard constraint). It carries only
429
- * `normalized`/`truncated`; there is no `targetDir`/`targetBase` field at
430
- * all, so a future caller cannot wire one up to a gate by mistake — see
431
- * `normalizeCommandAmpAware`'s own comment for why a directory extracted
432
- * under the ampersand-aware alphabet would be unreliable in the first
433
- * place, not merely "unwired today".
434
- */
435
- export interface AmpAwareNormalizedCommand {
436
- /** Same contract as `NormalizedCommand.normalized`, under `AMP_BOUNDARY_RE`. */
437
- normalized: string;
438
- /** Same contract as `NormalizedCommand.truncated`. */
439
- truncated: boolean;
440
- }
441
- /**
442
- * Ampersand-aware SECOND normalisation pass (task aabbad63). Segments the
443
- * command under `AMP_BOUNDARY_RE` (`BOUNDARY_RE` plus a bare `&`) instead
444
- * of `BOUNDARY_RE`, then canonicalises exactly like the primary pass
445
- * (same `canonicalizeSegment`, same wrapper-peeling rules, same
446
- * `MAX_NORMALIZE_LENGTH` bound). Closes the gap `BOUNDARY_RE`'s own
447
- * comment names: `A=x&env -C /tmp git status` and `echo hi & nice git
448
- * status` were ungated because a wrapper can only be peeled after a
449
- * recognised boundary, and a bare `&` was not one.
450
- *
451
- * Return type deliberately has NO `targetDir`/`targetBase` — not merely
452
- * "always null under this alphabet", genuinely ABSENT from the type, so
453
- * no consumer can read one by mistake. Reason: a bare `&` is ALSO how
454
- * bash spells a background job (`git -C /x push &`) and how a redirect
455
- * merges streams (`git -C /x log 2>&1`, `... &> out`). Under THIS
456
- * alphabet each of those splits into a spurious extra "segment", which
457
- * `segmentAndCanonicalize`'s own non-git-segment ambiguity rule (a
458
- * segment that starts a new command and is not itself a git invocation
459
- * forces `targetDir` to `null` — see its G1 comment) would turn into a
460
- * wrong-shaped loss for a case the PRIMARY pass still resolves correctly
461
- * today. Pinned in `tests/runtime/command-normalize.test.ts`'s "aabbad63
462
- * groundwork" describe block, which exercises ONLY `normalizeCommand`
463
- * (the primary pass), never this function — `targetDir`/`targetBase`
464
- * stay the primary pass's property alone.
465
- *
466
- * Only consulted by `policyMatchesEvent`'s third arm
467
- * (`src/runtime/intercept.ts`), and only when a policy's `bash_match`
468
- * regex has already missed BOTH the raw command and the primary
469
- * normalised form — see that module and `src/cli/policy/intercept.ts`
470
- * for the memoised-thunk threading that keeps this computation off the
471
- * common (already-matched) path.
472
- */
473
- export declare function normalizeCommandAmpAware(command: string): AmpAwareNormalizedCommand;
474
- /**
475
- * Return type of `normalizeCommandQuoteAware` — same shape and same
476
- * reasoning as `AmpAwareNormalizedCommand` above: no `targetDir`/
477
- * `targetBase`, so no consumer can read one extracted under quote-aware
478
- * segmentation by mistake. Unlike the amp-aware pass, THIS alphabet is
479
- * exactly `BOUNDARY_RE`'s own (no new boundary characters, only new
480
- * quote-tracking around the existing ones), so the reason for omitting
481
- * these fields is different: `computeSegmentTarget` / `classifyCdSegment`
482
- * / `canonicalizeSegment` all assume `tokenizeWithOffsets`'s whitespace
483
- * tokenisation lines up with the segment boundaries `findNextBoundary`
484
- * produces, which is still true for the boundary ALPHABET itself but is
485
- * now also entangled with `consumeAssignment`'s OWN, separate quote
486
- * tracking (per-token, inside one segment) once segments can be wider and
487
- * carry an unbalanced quote at their edges in new ways this task's own
488
- * corpus does not exhaustively characterise for `targetDir` purposes —
489
- * left unexplored rather than guessed at, mirroring the amp-aware pass's
490
- * own "not this task's job" scoping.
491
- */
492
- export interface QuoteAwareNormalizedCommand {
493
- /** Same contract as `NormalizedCommand.normalized`, under quote-aware segmentation. */
494
- normalized: string;
495
- /** Same contract as `NormalizedCommand.truncated`. */
496
- truncated: boolean;
497
- }
498
- /**
499
- * Quote-aware THIRD normalisation pass (task cf3dff51). Segments the
500
- * command under `BOUNDARY_RE`'s own alphabet — same characters as the
501
- * primary pass, no widening — but tracks single/double-quote state while
502
- * scanning (`findNextBoundaryQuoteAware` below) so a boundary character
503
- * sitting INSIDE a quoted assignment value is no longer treated as a real
504
- * segment split. Closes the gap the module header's "DELIBERATELY NOT
505
- * SUPPORTED" list and `BOUNDARY_RE`'s own comment both name: `VAR='a; b'
506
- * git push` (task 13e55484's pinned residual) — `BOUNDARY_RE` used to cut
507
- * the segment at the `;`, landing squarely between the two halves of one
508
- * quoted value, so neither resulting piece carried a recognisable
509
- * invocation and `consumeAssignment`'s own multi-token quote continuation
510
- * (built for exactly this shape) never got the chance to run: it operates
511
- * AFTER segmentation, on tokens WITHIN one segment, and the quoted value
512
- * was never in one segment to begin with. Once quote-aware segmentation
513
- * keeps the value whole, `consumeAssignment` needs no changes at all — it
514
- * already reconstructs a multi-token quoted value correctly; this pass
515
- * only fixes what gets handed to it as ONE segment in the first place.
516
- *
517
- * BUILT AS A NEW, INDEPENDENT PASS RATHER THAN AN IN-PLACE EDIT OF
518
- * `BOUNDARY_RE` / `segmentAndCanonicalize` — this is the module header's
519
- * HALT CRITERION, restated here at the point it governs: quote-aware
520
- * segmentation can MERGE a segment the primary pass currently splits, and
521
- * that merge cuts in BOTH directions — it can turn a previously-missed
522
- * bypass into a match (the fix), but it can just as easily turn a
523
- * previously-accepted, ALREADY-WIRED over-block into a miss (a
524
- * regression). Measured, not hypothetical: `tests/runtime/command-
525
- * normalize.test.ts`'s "accepted over-block: a quoted assignment inside
526
- * TEXT after a boundary char now matches" pin — `echo "a; VAR='x y' git
527
- * push"` — matches via `normalizeCommand` TODAY only because `BOUNDARY_RE`
528
- * splits it at the `;`, landing `VAR='x y' git push` at a segment start
529
- * where the assignment continuation turns it into a match. An in-place
530
- * quote-aware edit of THAT pass would un-split it back into the outer
531
- * `echo "..."` segment — not itself a recognised invocation — and flip
532
- * that pin to a lost match, in violation of the raw-OR-normalised-OR-amp-
533
- * aware-OR-(this) never-lose-a-match discipline every other pass in this
534
- * module already honours. Building this as a SEPARATE pass instead means
535
- * `normalizeCommand`'s own segmentation, and every test resting on it —
536
- * including that exact one — is untouched by this task; see this file's
537
- * own test suite for the differential proof (every case the first three
538
- * arms already matched still matches, by construction, because none of
539
- * those three arms' code changed at all).
540
- *
541
- * WIRED to `policyMatchesEvent` (`src/runtime/intercept.ts`) as its
542
- * FOURTH arm — same shape as `normalizeCommandAmpAware`'s own third-arm
543
- * wiring (task aabbad63): consulted only after the raw command,
544
- * `normalizedCommand`, and the amp-aware pass have all missed, via a
545
- * memoised thunk (`InterceptOptions.quoteNormalizedCommandThunk`,
546
- * `src/cli/policy/intercept.ts`'s `quoteNormalizedCommandThunk`) so the
547
- * segmentation cost is paid at most once per event, on the common
548
- * (already-matched) path it costs nothing at all. Wiring landed in a
549
- * SECOND round of this task, after the orchestrator extended the first
550
- * round's file scope specifically for this one wiring point — the first
551
- * round shipped this function fully built and tested but genuinely
552
- * unwired (an inert security fix, called out explicitly as the wrong
553
- * shipped state in that round's own report) — `src/cli/dry-run.ts`'s own,
554
- * independently-copied matcher was deliberately NOT extended in the same
555
- * round (out of the extended scope too) and stayed a named residual until
556
- * task f561e44c closed it by adding the same fourth OR-arm there too — see
557
- * that file's own comment.
558
- *
559
- * THIS PASS'S OWN OVER-BLOCK SURFACE is measured and named in the test
560
- * file rather than assumed — and the measurement CORRECTS an earlier,
561
- * pre-measurement guess that used to sit in this comment: it does NOT
562
- * reproduce the `echo "a; VAR='x y' git push"` accepted over-block named
563
- * above. Quote-aware merging keeps that whole `echo "..."` segment
564
- * together, starting with the unrecognised head token `echo`, so this
565
- * function's output for it is byte-identical to the raw input
566
- * (`normalizeCommand`'s OWN, separate, unchanged-by-this-task match for
567
- * that same string is unaffected either way). Measured against a broader
568
- * adversarial probe, both at this function's own level and again at
569
- * `policyMatchesEvent`'s wired level (a bash-shim-verified corpus of
570
- * chained/prefixed/subshell-wrapped genuine invocations plus candidate
571
- * over-block shapes — entirely quoted `echo`/`printf` arguments that only
572
- * PRINT the spelling): every additional match this pass adds beyond raw /
573
- * `normalizeCommand` / `normalizeCommandAmpAware` is a TRUE positive (a
574
- * real invocation bash would actually execute); no NEW over-block class
575
- * distinct from `consumeAssignment`'s own, already-reviewed precision
576
- * limits was found. This function shares `canonicalizeSegment` /
577
- * `consumeAssignment` completely unchanged with the other passes — only
578
- * the segmentation boundary decision differs — which is also the
579
- * structural reason a longer (merged) segment can only REVEAL a match
580
- * those functions would already accept from a shorter view, never
581
- * fabricate a new kind of one; see the module header's cf3dff51 UPDATE
582
- * paragraph for the fuller statement of this reasoning and its
583
- * "not a formal proof" caveat.
584
- */
585
- export declare function normalizeCommandQuoteAware(command: string): QuoteAwareNormalizedCommand;
586
- /** Return type of `peelWrapperPrefixes` — see that function's own comment. */
587
- export interface WrapperPeelResult {
588
- /** Index of the first token after every recognised wrapper prefix this
589
- * loop peeled — the wrapped invocation's own head token, or (if
590
- * `tokens.length`) no head token survived at all. */
591
- idx: number;
592
- /**
593
- * The `env -C <dir>` / `--chdir <dir>` target directory, when this
594
- * chain peeled an `env` wrapper naming one (excluding a `~`-prefixed
595
- * value — F5, treated as if absent). `null` when no `env -C`/`--chdir`
596
- * was peeled. Consumed only by `canonicalizeSegment`'s own
597
- * `targetDir`/`targetBase` bookkeeping —
598
- * `src/runtime/deletion-target-resolve.ts` (the other caller, task
599
- * d03af8f6, review round 3) has no analogous need and ignores it.
600
- */
601
- envTargetDir: string | null;
602
- }
603
- /**
604
- * Peel a leading wrapper-command chain: `VAR=value` tokens (any number,
605
- * in sequence), `env` (+ its own flags/assignments, capturing `-C`/
606
- * `--chdir`), `command` (+ its own flags), `nice` (+ its own flags),
607
- * `sudo` / `doas` / `time` / `timeout` / `stdbuf` / `setsid` / `exec` /
608
- * `nohup` (+ each one's own flags — F4 fix; `exec`/`nohup` added task
609
- * d03af8f6, review round 3). Bounded by `tokens.length` so a
610
- * pathological input cannot spin. Returns the cursor position of
611
- * whatever token (if any) survives the peel — the caller decides what to
612
- * do with it; this function never itself inspects the survivor.
613
- *
614
- * SHARED (task d03af8f6, review round 3) between `canonicalizeSegment`
615
- * below — this module's own `git`/`gh`/`npm`/`harness` trigger
616
- * recognition — and `src/runtime/deletion-target-resolve.ts`'s deletion-
617
- * verb recognition (`rm`/`find`/`git clean`), which used to hand-roll an
618
- * independent, narrower copy of this exact peeling vocabulary
619
- * (`peelWrapperHeads`, missing `-u`/`-i`/`-C` on `env`, the duration-
620
- * consuming shape of `timeout`, `nice`'s glued/`--adjustment=` forms,
621
- * and `exec`/`nohup` entirely). Reusing this ONE loop instead of
622
- * maintaining two means a future wrapper added here (or a flag fix to an
623
- * existing one) benefits both gates automatically, and
624
- * `npm run check:duplication`'s clone-count fitness function has one
625
- * fewer near-duplicate block to flag. `deletion-target-resolve.ts` hands
626
- * this a decoded token array built from ITS OWN quote-aware tokenizer
627
- * (`WrapperPeelToken[]`, `.text` only — see that interface's own
628
- * comment for why the offset-carrying `Token[]` this module's own
629
- * `tokenizeWithOffsets` produces is not required here), then layers its
630
- * own `xargs` handling on top (this loop deliberately does NOT recognise
631
- * `xargs` — see the module header's NOT-SUPPORTED list for why `xargs`
632
- * is architecturally different from every wrapper peeled here: its own
633
- * argv is not simply "the command to run").
634
- */
635
- export declare function peelWrapperPrefixes(tokens: readonly WrapperPeelToken[], startIdx?: number): WrapperPeelResult;
636
- /**
637
- * Generic "peel this wrapper's own flags" loop shared by the small,
638
- * bounded-vocabulary runners added for F4 (`sudo`, `doas`, `time`,
639
- * `stdbuf`, `setsid`, `exec`, `nohup`): consume `--`, any flag in
640
- * `valueFlags` (+ its following token), any glued short/long form
641
- * matching `gluedRe`, then any OTHER `-`-prefixed token treated as
642
- * boolean (mirrors `peelCommand` above — safe because an unrecognised
643
- * flag is either genuinely boolean, in which case this is correct, or
644
- * value-taking, in which case its VALUE token is left for the next
645
- * iteration and — not being `git`, a known wrapper, or another flag —
646
- * simply causes a clean, safe bail-out a token late rather than a false
647
- * match). Does NOT capture flag VALUES: none of these wrappers have a
648
- * "run in a different directory" semantic this module tracks as a
649
- * target directory — only `env -C`/`--chdir` does, and that stays
650
- * hand-written in `peelEnv`. Exported (task d03af8f6, review round 3) so
651
- * `src/runtime/deletion-target-resolve.ts` can reuse this SAME loop for
652
- * `xargs`'s own flags (`-0`, `-n1`, ...) instead of a third
653
- * independently-drifting copy — that module is the reason this needs no
654
- * value-flag vocabulary of its own either: `xargs`'s own value-taking
655
- * flags are not modelled there, matching this function's existing
656
- * effort level for the boolean-only wrappers above.
657
- */
658
- export declare function peelGenericFlags(tokens: readonly WrapperPeelToken[], startIdx: number, valueFlags: ReadonlySet<string>, gluedRe: RegExp | null): number;