@lannguyensi/harness 0.64.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 (710) hide show
  1. package/CHANGELOG.md +64 -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 -345
  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 -713
  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 -387
  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 +9 -2131
  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 -245
  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/{delegate/register.d.ts → register-gate-group.d.ts} +1 -1
  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 +1 -1
  145. package/dist/cli/register-operator-lifecycle.js +3 -100
  146. package/dist/cli/register-operator-lifecycle.js.map +1 -1
  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-audit-group.d.ts → register-setup-group.d.ts} +1 -1
  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.js +2 -19
  160. package/dist/cli/remove/register.js.map +1 -1
  161. package/dist/cli/shell-quote.d.ts +7 -0
  162. package/dist/cli/shell-quote.js +17 -0
  163. package/dist/cli/shell-quote.js.map +1 -0
  164. package/dist/cli/uninstall/index.d.ts +4 -2
  165. package/dist/cli/uninstall/index.js +15 -7
  166. package/dist/cli/uninstall/index.js.map +1 -1
  167. package/dist/cli/uninstall/register.js +6 -4
  168. package/dist/cli/uninstall/register.js.map +1 -1
  169. package/dist/cli/uninstall/snapshot.d.ts +15 -0
  170. package/dist/cli/uninstall/snapshot.js +38 -0
  171. package/dist/cli/uninstall/snapshot.js.map +1 -1
  172. package/dist/cli/validate/checks.d.ts +0 -77
  173. package/dist/cli/validate/checks.js +3 -1049
  174. package/dist/cli/validate/checks.js.map +1 -1
  175. package/dist/cli/validate/index.js +19 -15
  176. package/dist/cli/validate/index.js.map +1 -1
  177. package/dist/index.d.ts +0 -3
  178. package/dist/index.js +0 -3
  179. package/dist/index.js.map +1 -1
  180. package/dist/io/claude-mcp.d.ts +1 -1
  181. package/dist/io/claude-mcp.js +27 -14
  182. package/dist/io/claude-mcp.js.map +1 -1
  183. package/dist/io/harness-lock.js +2 -2
  184. package/dist/io/harness-lock.js.map +1 -1
  185. package/dist/io/lock.d.ts +0 -26
  186. package/dist/io/lock.js +10 -27
  187. package/dist/io/lock.js.map +1 -1
  188. package/dist/io/merge-settings.js +6 -4
  189. package/dist/io/merge-settings.js.map +1 -1
  190. package/dist/io/project-name.d.ts +22 -39
  191. package/dist/io/project-name.js +25 -42
  192. package/dist/io/project-name.js.map +1 -1
  193. package/dist/io/read-regular-file.d.ts +103 -40
  194. package/dist/io/read-regular-file.js +196 -35
  195. package/dist/io/read-regular-file.js.map +1 -1
  196. package/dist/io/restart-hints.js +3 -6
  197. package/dist/io/restart-hints.js.map +1 -1
  198. package/dist/io/version-compare.d.ts +1 -3
  199. package/dist/io/version-compare.js +1 -3
  200. package/dist/io/version-compare.js.map +1 -1
  201. package/dist/io/write-regular-file.d.ts +30 -0
  202. package/dist/io/write-regular-file.js +85 -0
  203. package/dist/io/write-regular-file.js.map +1 -0
  204. package/dist/overrides/index.d.ts +1 -0
  205. package/dist/overrides/index.js +1 -0
  206. package/dist/overrides/index.js.map +1 -1
  207. package/dist/overrides/merge-layers.d.ts +43 -0
  208. package/dist/overrides/merge-layers.js +76 -0
  209. package/dist/overrides/merge-layers.js.map +1 -0
  210. package/dist/overrides/merge.d.ts +16 -0
  211. package/dist/overrides/merge.js +21 -8
  212. package/dist/overrides/merge.js.map +1 -1
  213. package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
  214. package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
  215. package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
  216. package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
  217. package/dist/policy-packs/builtin/branch-protection.js +56 -89
  218. package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
  219. package/dist/policy-packs/config-check.d.ts +7 -5
  220. package/dist/policy-packs/config-check.js +2 -2
  221. package/dist/policy-packs/config-check.js.map +1 -1
  222. package/dist/policy-packs/expand.d.ts +1 -3
  223. package/dist/policy-packs/expand.js +5 -42
  224. package/dist/policy-packs/expand.js.map +1 -1
  225. package/dist/policy-packs/index.d.ts +3 -3
  226. package/dist/policy-packs/index.js +2 -2
  227. package/dist/policy-packs/index.js.map +1 -1
  228. package/dist/policy-packs/registry.d.ts +9 -38
  229. package/dist/policy-packs/registry.js +5 -65
  230. package/dist/policy-packs/registry.js.map +1 -1
  231. package/dist/policy-packs/runtime.d.ts +0 -4
  232. package/dist/policy-packs/runtime.js +9 -22
  233. package/dist/policy-packs/runtime.js.map +1 -1
  234. package/dist/policy-packs/types.d.ts +0 -19
  235. package/dist/policy-packs/ux-compare.d.ts +1 -11
  236. package/dist/policy-packs/ux-compare.js +6 -42
  237. package/dist/policy-packs/ux-compare.js.map +1 -1
  238. package/dist/policy-packs/ux-drift-check.d.ts +5 -5
  239. package/dist/policy-packs/ux-drift-check.js +17 -22
  240. package/dist/policy-packs/ux-drift-check.js.map +1 -1
  241. package/dist/policy-packs/version-check.d.ts +5 -26
  242. package/dist/policy-packs/version-check.js +19 -74
  243. package/dist/policy-packs/version-check.js.map +1 -1
  244. package/dist/probes/memory.d.ts +1 -1
  245. package/dist/probes/memory.js +1 -1
  246. package/dist/probes/memory.js.map +1 -1
  247. package/dist/runtime/agent-facing.d.ts +9 -0
  248. package/dist/runtime/agent-facing.js +28 -14
  249. package/dist/runtime/agent-facing.js.map +1 -1
  250. package/dist/runtime/bounded-text.d.ts +15 -0
  251. package/dist/runtime/bounded-text.js +27 -0
  252. package/dist/runtime/bounded-text.js.map +1 -0
  253. package/dist/runtime/git-branch.d.ts +125 -0
  254. package/dist/runtime/git-branch.js +381 -0
  255. package/dist/runtime/git-branch.js.map +1 -0
  256. package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
  257. package/dist/runtime/hermetic-spawn-guard.js +24 -34
  258. package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
  259. package/dist/runtime/home-dir.js +3 -2
  260. package/dist/runtime/home-dir.js.map +1 -1
  261. package/dist/runtime/tool-name-aliases.d.ts +0 -6
  262. package/dist/runtime/tool-name-aliases.js +5 -18
  263. package/dist/runtime/tool-name-aliases.js.map +1 -1
  264. package/dist/schema/grounding.d.ts +7 -54
  265. package/dist/schema/grounding.js +10 -12
  266. package/dist/schema/grounding.js.map +1 -1
  267. package/dist/schema/hooks.d.ts +39 -136
  268. package/dist/schema/hooks.js +3 -6
  269. package/dist/schema/hooks.js.map +1 -1
  270. package/dist/schema/index.d.ts +114 -3828
  271. package/dist/schema/index.js +41 -80
  272. package/dist/schema/index.js.map +1 -1
  273. package/dist/schema/memory.d.ts +54 -131
  274. package/dist/schema/memory.js +2 -2
  275. package/dist/schema/memory.js.map +1 -1
  276. package/dist/schema/policy-packs.d.ts +3 -45
  277. package/dist/schema/policy-packs.js +7 -13
  278. package/dist/schema/policy-packs.js.map +1 -1
  279. package/dist/schema/policy-ux.d.ts +7 -0
  280. package/dist/schema/policy-ux.js +18 -0
  281. package/dist/schema/policy-ux.js.map +1 -0
  282. package/dist/schema/removed-keys.d.ts +185 -0
  283. package/dist/schema/removed-keys.js +531 -0
  284. package/dist/schema/removed-keys.js.map +1 -0
  285. package/dist/schema/tools.d.ts +30 -268
  286. package/dist/schema/tools.js +4 -4
  287. package/dist/schema/tools.js.map +1 -1
  288. package/package.json +5 -16
  289. package/dist/cli/approve/branch-protection.d.ts +0 -69
  290. package/dist/cli/approve/branch-protection.js +0 -144
  291. package/dist/cli/approve/branch-protection.js.map +0 -1
  292. package/dist/cli/approve/risk.d.ts +0 -112
  293. package/dist/cli/approve/risk.js +0 -197
  294. package/dist/cli/approve/risk.js.map +0 -1
  295. package/dist/cli/approve/stdin-report.d.ts +0 -57
  296. package/dist/cli/approve/stdin-report.js +0 -145
  297. package/dist/cli/approve/stdin-report.js.map +0 -1
  298. package/dist/cli/approve/understanding.d.ts +0 -410
  299. package/dist/cli/approve/understanding.js +0 -996
  300. package/dist/cli/approve/understanding.js.map +0 -1
  301. package/dist/cli/audit.d.ts +0 -80
  302. package/dist/cli/audit.js +0 -252
  303. package/dist/cli/audit.js.map +0 -1
  304. package/dist/cli/delegate/index.d.ts +0 -76
  305. package/dist/cli/delegate/index.js +0 -444
  306. package/dist/cli/delegate/index.js.map +0 -1
  307. package/dist/cli/delegate/register.js +0 -90
  308. package/dist/cli/delegate/register.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/expire-on-tool-match.d.ts +0 -15
  319. package/dist/cli/doctor/expire-on-tool-match.js +0 -58
  320. package/dist/cli/doctor/expire-on-tool-match.js.map +0 -1
  321. package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
  322. package/dist/cli/doctor/rogue-ledger.js +0 -153
  323. package/dist/cli/doctor/rogue-ledger.js.map +0 -1
  324. package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
  325. package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
  326. package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
  327. package/dist/cli/doctor/settings-drift.d.ts +0 -25
  328. package/dist/cli/doctor/settings-drift.js +0 -213
  329. package/dist/cli/doctor/settings-drift.js.map +0 -1
  330. package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
  331. package/dist/cli/doctor/toolchain-parity.js +0 -154
  332. package/dist/cli/doctor/toolchain-parity.js.map +0 -1
  333. package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
  334. package/dist/cli/doctor/ug-auto-approvals.js +0 -91
  335. package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
  336. package/dist/cli/doctor/ug-delegations.d.ts +0 -26
  337. package/dist/cli/doctor/ug-delegations.js +0 -121
  338. package/dist/cli/doctor/ug-delegations.js.map +0 -1
  339. package/dist/cli/doctor/ug-inflight.d.ts +0 -35
  340. package/dist/cli/doctor/ug-inflight.js +0 -57
  341. package/dist/cli/doctor/ug-inflight.js.map +0 -1
  342. package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
  343. package/dist/cli/doctor/understanding-mode-env.js +0 -98
  344. package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
  345. package/dist/cli/dry-run.d.ts +0 -58
  346. package/dist/cli/dry-run.js +0 -283
  347. package/dist/cli/dry-run.js.map +0 -1
  348. package/dist/cli/enriched-event.d.ts +0 -35
  349. package/dist/cli/enriched-event.js +0 -60
  350. package/dist/cli/enriched-event.js.map +0 -1
  351. package/dist/cli/event-input.d.ts +0 -28
  352. package/dist/cli/event-input.js +0 -73
  353. package/dist/cli/event-input.js.map +0 -1
  354. package/dist/cli/explain-action.d.ts +0 -25
  355. package/dist/cli/explain-action.js +0 -57
  356. package/dist/cli/explain-action.js.map +0 -1
  357. package/dist/cli/explain-policy.d.ts +0 -147
  358. package/dist/cli/explain-policy.js +0 -248
  359. package/dist/cli/explain-policy.js.map +0 -1
  360. package/dist/cli/explain.d.ts +0 -31
  361. package/dist/cli/explain.js +0 -159
  362. package/dist/cli/explain.js.map +0 -1
  363. package/dist/cli/gc/index.d.ts +0 -63
  364. package/dist/cli/gc/index.js +0 -566
  365. package/dist/cli/gc/index.js.map +0 -1
  366. package/dist/cli/pack/approve-escape.d.ts +0 -19
  367. package/dist/cli/pack/approve-escape.js +0 -190
  368. package/dist/cli/pack/approve-escape.js.map +0 -1
  369. package/dist/cli/pack/auto-approve-path.d.ts +0 -146
  370. package/dist/cli/pack/auto-approve-path.js +0 -462
  371. package/dist/cli/pack/auto-approve-path.js.map +0 -1
  372. package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
  373. package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
  374. package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
  375. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
  376. package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
  377. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
  378. package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
  379. package/dist/cli/pack/hook-codex-stop.js +0 -329
  380. package/dist/cli/pack/hook-codex-stop.js.map +0 -1
  381. package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
  382. package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
  383. package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
  384. package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
  385. package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
  386. package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
  387. package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
  388. package/dist/cli/pack/hook-post-merge-gate.js +0 -277
  389. package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
  390. package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
  391. package/dist/cli/pack/hook-post-tool-use.js +0 -137
  392. package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
  393. package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
  394. package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
  395. package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
  396. package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
  397. package/dist/cli/pack/hook-runtime-reality.js +0 -210
  398. package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
  399. package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
  400. package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -438
  401. package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
  402. package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
  403. package/dist/cli/pack/hook-solution-acceptance.js +0 -530
  404. package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
  405. package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
  406. package/dist/cli/pack/hook-stay-in-scope.js +0 -128
  407. package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
  408. package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
  409. package/dist/cli/pack/hook-subagent-start.js +0 -88
  410. package/dist/cli/pack/hook-subagent-start.js.map +0 -1
  411. package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
  412. package/dist/cli/pack/hook-subagent-stop.js +0 -41
  413. package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
  414. package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
  415. package/dist/cli/pack/hook-track-active-claim.js +0 -275
  416. package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
  417. package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
  418. package/dist/cli/pack/transcript-report-scan.js +0 -359
  419. package/dist/cli/pack/transcript-report-scan.js.map +0 -1
  420. package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
  421. package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
  422. package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
  423. package/dist/cli/pack/upgrade.d.ts +0 -32
  424. package/dist/cli/pack/upgrade.js +0 -273
  425. package/dist/cli/pack/upgrade.js.map +0 -1
  426. package/dist/cli/pause/index.d.ts +0 -113
  427. package/dist/cli/pause/index.js +0 -251
  428. package/dist/cli/pause/index.js.map +0 -1
  429. package/dist/cli/pause-check.d.ts +0 -22
  430. package/dist/cli/pause-check.js +0 -54
  431. package/dist/cli/pause-check.js.map +0 -1
  432. package/dist/cli/policy/intercept.d.ts +0 -233
  433. package/dist/cli/policy/intercept.js +0 -1022
  434. package/dist/cli/policy/intercept.js.map +0 -1
  435. package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
  436. package/dist/cli/policy/risk-envelope-enrichment.js +0 -110
  437. package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
  438. package/dist/cli/record/index.d.ts +0 -81
  439. package/dist/cli/record/index.js +0 -348
  440. package/dist/cli/record/index.js.map +0 -1
  441. package/dist/cli/register-audit-group.js +0 -91
  442. package/dist/cli/register-audit-group.js.map +0 -1
  443. package/dist/cli/resolve-env.d.ts +0 -32
  444. package/dist/cli/resolve-env.js +0 -46
  445. package/dist/cli/resolve-env.js.map +0 -1
  446. package/dist/cli/session-export/index.d.ts +0 -46
  447. package/dist/cli/session-export/index.js +0 -169
  448. package/dist/cli/session-export/index.js.map +0 -1
  449. package/dist/cli/session-export/redact.d.ts +0 -22
  450. package/dist/cli/session-export/redact.js +0 -47
  451. package/dist/cli/session-export/redact.js.map +0 -1
  452. package/dist/cli/session-export/transcript.d.ts +0 -24
  453. package/dist/cli/session-export/transcript.js +0 -164
  454. package/dist/cli/session-export/transcript.js.map +0 -1
  455. package/dist/cli/session-start/branch-check.d.ts +0 -18
  456. package/dist/cli/session-start/branch-check.js +0 -140
  457. package/dist/cli/session-start/branch-check.js.map +0 -1
  458. package/dist/cli/session-start/index.d.ts +0 -121
  459. package/dist/cli/session-start/index.js +0 -591
  460. package/dist/cli/session-start/index.js.map +0 -1
  461. package/dist/cli/session-start/shared-options.d.ts +0 -103
  462. package/dist/cli/session-start/shared-options.js +0 -107
  463. package/dist/cli/session-start/shared-options.js.map +0 -1
  464. package/dist/cli/session-start/stale-base-check.d.ts +0 -46
  465. package/dist/cli/session-start/stale-base-check.js +0 -352
  466. package/dist/cli/session-start/stale-base-check.js.map +0 -1
  467. package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
  468. package/dist/cli/session-start/toolchain-parity.js +0 -797
  469. package/dist/cli/session-start/toolchain-parity.js.map +0 -1
  470. package/dist/cli/smoke/assertions.d.ts +0 -46
  471. package/dist/cli/smoke/assertions.js +0 -170
  472. package/dist/cli/smoke/assertions.js.map +0 -1
  473. package/dist/cli/smoke/index.d.ts +0 -76
  474. package/dist/cli/smoke/index.js +0 -245
  475. package/dist/cli/smoke/index.js.map +0 -1
  476. package/dist/cli/smoke/runner.d.ts +0 -55
  477. package/dist/cli/smoke/runner.js +0 -134
  478. package/dist/cli/smoke/runner.js.map +0 -1
  479. package/dist/cli/smoke/stream-parser.d.ts +0 -65
  480. package/dist/cli/smoke/stream-parser.js +0 -115
  481. package/dist/cli/smoke/stream-parser.js.map +0 -1
  482. package/dist/cli/test-risk.d.ts +0 -27
  483. package/dist/cli/test-risk.js +0 -38
  484. package/dist/cli/test-risk.js.map +0 -1
  485. package/dist/io/display-path.d.ts +0 -11
  486. package/dist/io/display-path.js +0 -29
  487. package/dist/io/display-path.js.map +0 -1
  488. package/dist/io/duration.d.ts +0 -5
  489. package/dist/io/duration.js +0 -50
  490. package/dist/io/duration.js.map +0 -1
  491. package/dist/io/extract.d.ts +0 -79
  492. package/dist/io/extract.js +0 -226
  493. package/dist/io/extract.js.map +0 -1
  494. package/dist/io/ledger-record.d.ts +0 -83
  495. package/dist/io/ledger-record.js +0 -301
  496. package/dist/io/ledger-record.js.map +0 -1
  497. package/dist/io/read-json-dir-entries.d.ts +0 -36
  498. package/dist/io/read-json-dir-entries.js +0 -48
  499. package/dist/io/read-json-dir-entries.js.map +0 -1
  500. package/dist/io/safe-json-parse.d.ts +0 -5
  501. package/dist/io/safe-json-parse.js +0 -21
  502. package/dist/io/safe-json-parse.js.map +0 -1
  503. package/dist/policies/index.d.ts +0 -5
  504. package/dist/policies/index.js +0 -6
  505. package/dist/policies/index.js.map +0 -1
  506. package/dist/policies/ledger-client.d.ts +0 -113
  507. package/dist/policies/ledger-client.js +0 -500
  508. package/dist/policies/ledger-client.js.map +0 -1
  509. package/dist/policies/producers.d.ts +0 -12
  510. package/dist/policies/producers.js +0 -61
  511. package/dist/policies/producers.js.map +0 -1
  512. package/dist/policies/requires.d.ts +0 -75
  513. package/dist/policies/requires.js +0 -240
  514. package/dist/policies/requires.js.map +0 -1
  515. package/dist/policies/timestamp.d.ts +0 -14
  516. package/dist/policies/timestamp.js +0 -36
  517. package/dist/policies/timestamp.js.map +0 -1
  518. package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
  519. package/dist/policy-packs/builtin/permission-profiles.js +0 -74
  520. package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
  521. package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
  522. package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
  523. package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
  524. package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
  525. package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
  526. package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
  527. package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
  528. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
  529. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
  530. package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
  531. package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
  532. package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
  533. package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
  534. package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
  535. package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
  536. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
  537. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
  538. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
  539. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
  540. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
  541. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
  542. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
  543. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
  544. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
  545. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
  546. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
  547. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
  548. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
  549. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
  550. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
  551. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
  552. package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
  553. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
  554. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
  555. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -643
  556. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
  557. package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
  558. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
  559. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
  560. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
  561. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -106
  562. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
  563. package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
  564. package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
  565. package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
  566. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
  567. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
  568. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
  569. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
  570. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
  571. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
  572. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -625
  573. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1076
  574. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
  575. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
  576. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
  577. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
  578. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
  579. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
  580. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
  581. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
  582. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
  583. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
  584. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
  585. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
  586. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
  587. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
  588. package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1078
  589. package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
  590. package/dist/policy-packs/permission-translator.d.ts +0 -9
  591. package/dist/policy-packs/permission-translator.js +0 -76
  592. package/dist/policy-packs/permission-translator.js.map +0 -1
  593. package/dist/runtime/action-envelope.d.ts +0 -64
  594. package/dist/runtime/action-envelope.js +0 -46
  595. package/dist/runtime/action-envelope.js.map +0 -1
  596. package/dist/runtime/approval-signing.d.ts +0 -111
  597. package/dist/runtime/approval-signing.js +0 -384
  598. package/dist/runtime/approval-signing.js.map +0 -1
  599. package/dist/runtime/bash-match-facts.d.ts +0 -60
  600. package/dist/runtime/bash-match-facts.js +0 -196
  601. package/dist/runtime/bash-match-facts.js.map +0 -1
  602. package/dist/runtime/bash-match-registry.d.ts +0 -112
  603. package/dist/runtime/bash-match-registry.js +0 -406
  604. package/dist/runtime/bash-match-registry.js.map +0 -1
  605. package/dist/runtime/bash-prefix-parse.d.ts +0 -31
  606. package/dist/runtime/bash-prefix-parse.js +0 -576
  607. package/dist/runtime/bash-prefix-parse.js.map +0 -1
  608. package/dist/runtime/command-normalize.d.ts +0 -658
  609. package/dist/runtime/command-normalize.js +0 -2410
  610. package/dist/runtime/command-normalize.js.map +0 -1
  611. package/dist/runtime/deletion-target-resolve.d.ts +0 -28
  612. package/dist/runtime/deletion-target-resolve.js +0 -1078
  613. package/dist/runtime/deletion-target-resolve.js.map +0 -1
  614. package/dist/runtime/destructive-shell-floor.d.ts +0 -19
  615. package/dist/runtime/destructive-shell-floor.js +0 -611
  616. package/dist/runtime/destructive-shell-floor.js.map +0 -1
  617. package/dist/runtime/environment-resolver.d.ts +0 -36
  618. package/dist/runtime/environment-resolver.js +0 -138
  619. package/dist/runtime/environment-resolver.js.map +0 -1
  620. package/dist/runtime/git-context.d.ts +0 -201
  621. package/dist/runtime/git-context.js +0 -422
  622. package/dist/runtime/git-context.js.map +0 -1
  623. package/dist/runtime/index.d.ts +0 -12
  624. package/dist/runtime/index.js +0 -13
  625. package/dist/runtime/index.js.map +0 -1
  626. package/dist/runtime/intercept.d.ts +0 -623
  627. package/dist/runtime/intercept.js +0 -1384
  628. package/dist/runtime/intercept.js.map +0 -1
  629. package/dist/runtime/kube-context.d.ts +0 -16
  630. package/dist/runtime/kube-context.js +0 -63
  631. package/dist/runtime/kube-context.js.map +0 -1
  632. package/dist/runtime/kubectl-target-parse.d.ts +0 -31
  633. package/dist/runtime/kubectl-target-parse.js +0 -249
  634. package/dist/runtime/kubectl-target-parse.js.map +0 -1
  635. package/dist/runtime/ledger-add.d.ts +0 -16
  636. package/dist/runtime/ledger-add.js +0 -150
  637. package/dist/runtime/ledger-add.js.map +0 -1
  638. package/dist/runtime/ledger-writer.d.ts +0 -27
  639. package/dist/runtime/ledger-writer.js +0 -46
  640. package/dist/runtime/ledger-writer.js.map +0 -1
  641. package/dist/runtime/pause-sentinel.d.ts +0 -60
  642. package/dist/runtime/pause-sentinel.js +0 -156
  643. package/dist/runtime/pause-sentinel.js.map +0 -1
  644. package/dist/runtime/pending-approval.d.ts +0 -23
  645. package/dist/runtime/pending-approval.js +0 -67
  646. package/dist/runtime/pending-approval.js.map +0 -1
  647. package/dist/runtime/read-only-bash.d.ts +0 -141
  648. package/dist/runtime/read-only-bash.js +0 -2204
  649. package/dist/runtime/read-only-bash.js.map +0 -1
  650. package/dist/runtime/recovery-git-commit.d.ts +0 -22
  651. package/dist/runtime/recovery-git-commit.js +0 -284
  652. package/dist/runtime/recovery-git-commit.js.map +0 -1
  653. package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
  654. package/dist/runtime/reject-malformed-session-id.js +0 -16
  655. package/dist/runtime/reject-malformed-session-id.js.map +0 -1
  656. package/dist/runtime/risk-classifier.d.ts +0 -38
  657. package/dist/runtime/risk-classifier.js +0 -311
  658. package/dist/runtime/risk-classifier.js.map +0 -1
  659. package/dist/runtime/session-id.d.ts +0 -113
  660. package/dist/runtime/session-id.js +0 -193
  661. package/dist/runtime/session-id.js.map +0 -1
  662. package/dist/runtime/shell-word.d.ts +0 -62
  663. package/dist/runtime/shell-word.js +0 -410
  664. package/dist/runtime/shell-word.js.map +0 -1
  665. package/dist/runtime/task-providers/agent-tasks.d.ts +0 -105
  666. package/dist/runtime/task-providers/agent-tasks.js +0 -247
  667. package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
  668. package/dist/runtime/when-eval.d.ts +0 -62
  669. package/dist/runtime/when-eval.js +0 -212
  670. package/dist/runtime/when-eval.js.map +0 -1
  671. package/dist/runtime/workflow-policies.d.ts +0 -207
  672. package/dist/runtime/workflow-policies.js +0 -596
  673. package/dist/runtime/workflow-policies.js.map +0 -1
  674. package/dist/schema/audit.d.ts +0 -71
  675. package/dist/schema/audit.js +0 -32
  676. package/dist/schema/audit.js.map +0 -1
  677. package/dist/schema/doctor.d.ts +0 -25
  678. package/dist/schema/doctor.js +0 -23
  679. package/dist/schema/doctor.js.map +0 -1
  680. package/dist/schema/environments.d.ts +0 -215
  681. package/dist/schema/environments.js +0 -101
  682. package/dist/schema/environments.js.map +0 -1
  683. package/dist/schema/extract.d.ts +0 -9
  684. package/dist/schema/extract.js +0 -86
  685. package/dist/schema/extract.js.map +0 -1
  686. package/dist/schema/permission-profiles.d.ts +0 -2292
  687. package/dist/schema/permission-profiles.js +0 -60
  688. package/dist/schema/permission-profiles.js.map +0 -1
  689. package/dist/schema/policies.d.ts +0 -974
  690. package/dist/schema/policies.js +0 -298
  691. package/dist/schema/policies.js.map +0 -1
  692. package/dist/schema/requires.d.ts +0 -131
  693. package/dist/schema/requires.js +0 -88
  694. package/dist/schema/requires.js.map +0 -1
  695. package/dist/schema/risk.d.ts +0 -144
  696. package/dist/schema/risk.js +0 -194
  697. package/dist/schema/risk.js.map +0 -1
  698. package/dist/schema/session-start-preflight.d.ts +0 -10
  699. package/dist/schema/session-start-preflight.js +0 -106
  700. package/dist/schema/session-start-preflight.js.map +0 -1
  701. package/dist/schema/stale-base-check.d.ts +0 -18
  702. package/dist/schema/stale-base-check.js +0 -37
  703. package/dist/schema/stale-base-check.js.map +0 -1
  704. package/dist/schema/toolchain-parity.d.ts +0 -21
  705. package/dist/schema/toolchain-parity.js +0 -48
  706. package/dist/schema/toolchain-parity.js.map +0 -1
  707. package/dist/schema/workflows.d.ts +0 -519
  708. package/dist/schema/workflows.js +0 -81
  709. package/dist/schema/workflows.js.map +0 -1
  710. package/scripts/runtime-reality-docker-probe.mjs +0 -71
@@ -1,623 +0,0 @@
1
- import { type ExtractBuiltins, type ExtractEventContext, type LedgerQueryResult } from "../policies/index.js";
2
- import type { Manifest, Policy } from "../schema/index.js";
3
- import { type AmpAwareNormalizedCommand, type CommandSegment, type NormalizedCommand, type QuoteAwareNormalizedCommand } from "./command-normalize.js";
4
- import { type EnvironmentResolution } from "./environment-resolver.js";
5
- import { type GitRepoContext } from "./git-context.js";
6
- import { type RiskProfile } from "./risk-classifier.js";
7
- export interface ToolEvent {
8
- hook_event_name?: string;
9
- tool_name?: string;
10
- tool_input?: unknown;
11
- session_id?: string;
12
- cwd?: string;
13
- [key: string]: unknown;
14
- }
15
- export type PolicyOutcome = "allow" | "warn" | "require_approval" | "deny" | "warn-degraded" | "deny-degraded";
16
- export interface PolicyDecision {
17
- policyName: string;
18
- enforcement: Policy["enforcement"];
19
- outcome: PolicyOutcome;
20
- reason: string;
21
- extractValues: Record<string, string>;
22
- ledgerTag: string;
23
- requiresEval?: {
24
- matchedCount: number;
25
- reason: string;
26
- };
27
- /**
28
- * Risk Classifier verdict for the action this decision was made
29
- * about. Present only when the Risk Gate was active for the event
30
- * (the manifest declared at least one `when:`-bearing policy); absent
31
- * for a pure Phase-4 manifest, keeping its decisions byte-identical.
32
- * Recorded to the audit ledger so `harness explain --trace` can
33
- * replay the classification.
34
- */
35
- risk?: RiskProfile;
36
- /** Context Resolver verdict, present under the same condition as `risk`. */
37
- environment?: EnvironmentResolution;
38
- /**
39
- * One-line "to satisfy" hint synthesised from the policy's `requires`
40
- * spec. Carried on the live decision so the deny-envelope formatter
41
- * can append it to the user-facing reason text together with the
42
- * session id. Optional because the warn-degraded path (requires eval
43
- * threw) skips the requires evaluator and has no hint to forward.
44
- */
45
- recordHint?: string;
46
- /**
47
- * True when the policy's `when:` block matched because the action was
48
- * unclassified (the fail-close rule in `when-eval.ts`: "unknown is not
49
- * safe" for `risk.category_in` / `action.reversible`, the "treated as
50
- * high" rung for `risk.severity_at_least`). Absent when the policy has
51
- * no `when:` block, when the match was a genuine classification hit,
52
- * or when `unclassifiedFallback` was false. Present in the audit
53
- * record, the non-ux block-time deny message, AND (task 2929c5b7) the
54
- * ux-declared `cannot:` deny message, so an operator — or the agent
55
- * reading its own deny — can distinguish a real critical-severity
56
- * match from a fail-closed unclassified command at a glance.
57
- */
58
- whenUnclassifiedFallback?: boolean;
59
- /**
60
- * Set when the policy's `ledger_tag` references `${REPO}` / `${BRANCH}`
61
- * and the value resolved for this context was empty (cwd outside every
62
- * git repository, detached HEAD, or an empty override), so the engine
63
- * decided per enforcement WITHOUT rendering or querying a ledger tag.
64
- * In-memory only: it is not part of the serialised audit row (the
65
- * `reason` and the placeholder `ledgerTag` already carry the cause).
66
- * The agent envelope renders `reason` with precedence over the policy's
67
- * `ux:` / `producers:` text when this is set.
68
- */
69
- emptyIdentifier?: EmptyIdentifier;
70
- /**
71
- * Set when this decision was made for a FOREIGN attributed context: the
72
- * repository a target-naming command (`git -C <dir>`, `cd <dir> &&`)
73
- * resolved to, as opposed to the working directory's own. Absent for
74
- * every cwd-context decision. In-memory only (not part of the serialised
75
- * audit row); the block message uses it to name the repository and
76
- * directory whose evidence is missing.
77
- */
78
- foreignTarget?: ForeignTarget;
79
- evaluatedAt: string;
80
- }
81
- /** The repository name and directory a foreign attributed context resolved to. */
82
- export interface ForeignTarget {
83
- repo: string;
84
- dir: string;
85
- }
86
- /**
87
- * Claude Code hook "block" output. The top-level `decision: "block"` /
88
- * `reason` pair is the form every hook event accepts (UserPromptSubmit,
89
- * PostToolUse, Stop, ...). The `hookSpecificOutput.permissionDecision`
90
- * envelope is PreToolUse-only per Anthropic's hook protocol, so it is
91
- * present only when the inbound event is PreToolUse and absent
92
- * otherwise. Emitting both keys for a PreToolUse event keeps the deny
93
- * JSON readable by older Claude Code CLIs (which look at top-level
94
- * `decision`) and current 2.1+ ones (which prefer the envelope).
95
- *
96
- * The legacy `decision` value MUST be `"block"`, not `"deny"`: Claude
97
- * Code never recognised `"deny"` at the top level, so an emitter that
98
- * shipped that value silently let the tool call through.
99
- */
100
- export interface ClaudeDenyJson {
101
- decision: "block";
102
- reason: string;
103
- hookSpecificOutput?: {
104
- hookEventName: "PreToolUse";
105
- permissionDecision: "deny";
106
- permissionDecisionReason: string;
107
- };
108
- }
109
- export interface InterceptResult {
110
- decisions: PolicyDecision[];
111
- /** non-null iff at least one matching policy with enforcement=block denied. */
112
- blockJson: ClaudeDenyJson | null;
113
- }
114
- export interface LedgerClient {
115
- query(tag: string, sessionId: string, timeoutMs?: number): Promise<LedgerQueryResult>;
116
- /**
117
- * Record a `policy_decision` entry to the evidence ledger. Implementations
118
- * MUST be best-effort: failures bubble back as `null`/false so a degraded
119
- * audit log doesn't itself block the tool call.
120
- */
121
- record(decision: PolicyDecision, sessionId: string): Promise<void>;
122
- /**
123
- * Release any pooled connection (the real client holds one grounding-mcp
124
- * subprocess across all queries + records of an intercept invocation).
125
- * Owned by the CLI wrapper that constructed the client — `intercept()`
126
- * itself never calls it. Optional so injected test doubles and the
127
- * degraded no-op client don't have to implement it.
128
- */
129
- dispose?(): void;
130
- }
131
- export interface InterceptOptions {
132
- manifest: Manifest;
133
- event: ToolEvent;
134
- ledger: LedgerClient;
135
- builtins: ExtractBuiltins;
136
- /** Timeout passed through to the ledger client. */
137
- ledgerTimeoutMs?: number;
138
- /** Override "now" for deterministic tests. */
139
- now?: Date;
140
- /**
141
- * Current git HEAD sha for the event's cwd, resolved by the CLI
142
- * wrapper. Threaded through to `evaluateRequires` so the `at_head`
143
- * branch can compare against ledger entries' `head:<sha>` token.
144
- * Optional: omitted on non-git events, in which case the at_head
145
- * branch falls through to the standard time-window check.
146
- */
147
- currentHeadSha?: string;
148
- /**
149
- * Ambient context for the Risk Gate stages — the Action Envelope
150
- * build (#2) and the environment resolution (#4). Resolved by the CLI
151
- * wrapper (git / user / host / kube-config / env reads) and threaded
152
- * in, keeping `intercept()` itself I/O-free, the same
153
- * resolved-by-the-wrapper pattern as `currentHeadSha` and `builtins`.
154
- *
155
- * Optional: omitted by Phase-4-era callers and by unit tests that do
156
- * not exercise `when:`. When omitted, the envelope is built from the
157
- * event alone — risk then classifies as unclassified and the
158
- * environment resolves to `unknown`. A manifest with no `when:`
159
- * policy never reads any of this regardless (see `intercept`).
160
- */
161
- riskContext?: RiskGateContext;
162
- /**
163
- * Precomputed `NormalizedCommand` for a Bash event's
164
- * `tool_input.command`. `runInterceptCli` already calls
165
- * `normalizeCommand` once (for `bash_match` trigger normalisation);
166
- * threading the SAME result in here lets `policyMatchesEvent` reuse it
167
- * for every policy in the `matching` loop below instead of recomputing
168
- * it — same resolved-by-the-wrapper pattern as `currentHeadSha`,
169
- * `builtins`, and `riskContext`. Optional: omitted by non-Bash events
170
- * and by callers/tests that don't supply one, in which case
171
- * `policyMatchesEvent` computes it lazily per policy (correct, just
172
- * not de-duplicated).
173
- *
174
- * INVARIANT: this is NOT checked against `event` at runtime — nothing
175
- * verifies the `NormalizedCommand`
176
- * passed in was actually derived from THIS event's own
177
- * `tool_input.command`. Safe today because there is exactly one
178
- * production caller (`runInterceptCli`, `src/cli/policy/intercept.ts`),
179
- * which computes it from the SAME `event` it then passes to
180
- * `intercept()`. A future second caller that threads a mismatched
181
- * `NormalizedCommand` (e.g. reused across two different events) would
182
- * silently apply the wrong command's `bash_match` normalisation with
183
- * no error — keep this pairing manual-but-obvious at every call site
184
- * rather than assuming it self-enforces.
185
- */
186
- normalizedCommand?: NormalizedCommand;
187
- /**
188
- * Memoised thunk resolving the ampersand-aware SECOND normalisation
189
- * pass for the SAME Bash event's `tool_input.command` (task aabbad63,
190
- * `src/runtime/command-normalize.ts`'s `normalizeCommandAmpAware`).
191
- * `policyMatchesEvent`'s third arm calls this ONLY when a policy's
192
- * regex has already missed BOTH the raw command and `normalizedCommand`
193
- * above — most events never reach it. Threaded as a THUNK rather than
194
- * a precomputed value (unlike `normalizedCommand`) specifically so that
195
- * "compute at most once per event" can be achieved WITHOUT paying the
196
- * cost on the common (already-matched) path: `runInterceptCli`
197
- * constructs one self-memoising closure per event and hands it here;
198
- * every policy in the `matching` loop below that still needs the amp
199
- * form calls the SAME thunk, and only the FIRST such call does the
200
- * actual work.
201
- *
202
- * Optional: omitted by non-Bash events and by callers/tests that don't
203
- * supply one, in which case `policyMatchesEvent` falls back to calling
204
- * `normalizeCommandAmpAware` directly per policy (correct, just not
205
- * de-duplicated) — the same fallback shape `normalizedCommand` already
206
- * has.
207
- *
208
- * SAME INVARIANT as `normalizedCommand` above: this is NOT checked
209
- * against `event` at runtime. Nothing verifies the thunk passed in was
210
- * actually derived from THIS event's own `tool_input.command`. Safe
211
- * today because there is exactly one production caller
212
- * (`runInterceptCli`), which builds the thunk from the SAME `event` it
213
- * then passes to `intercept()` — keep this pairing manual-but-obvious
214
- * at every call site rather than assuming it self-enforces.
215
- */
216
- ampNormalizedCommandThunk?: () => AmpAwareNormalizedCommand;
217
- /**
218
- * Memoised thunk resolving the quote-aware THIRD normalisation pass for
219
- * the SAME Bash event's `tool_input.command` (task cf3dff51,
220
- * `src/runtime/command-normalize.ts`'s `normalizeCommandQuoteAware`).
221
- * `policyMatchesEvent`'s FOURTH arm calls this ONLY when a policy's
222
- * regex has already missed the raw command, `normalizedCommand`, AND
223
- * `ampNormalizedCommandThunk` above — mirrors `ampNormalizedCommandThunk`
224
- * exactly (same memoise-once-per-event-via-thunk shape, same reason:
225
- * "compute at most once per event" without paying the cost on the
226
- * common, already-matched path).
227
- *
228
- * Optional: omitted by non-Bash events and by callers/tests that don't
229
- * supply one, in which case `policyMatchesEvent` falls back to calling
230
- * `normalizeCommandQuoteAware` directly per policy (correct, just not
231
- * de-duplicated) — the same fallback shape `normalizedCommand` /
232
- * `ampNormalizedCommandThunk` already have.
233
- *
234
- * SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
235
- * above: this is NOT checked against `event` at runtime. Nothing
236
- * verifies the thunk passed in was actually derived from THIS event's
237
- * own `tool_input.command`. Safe today because there is exactly one
238
- * production caller (`runInterceptCli`), which builds the thunk from
239
- * the SAME `event` it then passes to `intercept()` — keep this pairing
240
- * manual-but-obvious at every call site rather than assuming it
241
- * self-enforces.
242
- */
243
- quoteNormalizedCommandThunk?: () => QuoteAwareNormalizedCommand;
244
- /**
245
- * Precomputed per-segment view (`command-normalize.ts`'s
246
- * `segmentViewOf`) of a Bash event's `tool_input.command`, EAGERLY
247
- * supplied (task `98ad072f`, T-003). `null` mirrors `segmentViewOf`'s
248
- * own contract: the command exceeded `MAX_NORMALIZE_LENGTH`, so no
249
- * segment view exists (treated as `[]` — unattributable, cwd builtins,
250
- * identical to a command with no `bash_match` trigger at all).
251
- *
252
- * CORRECTED (D-015, fix round, run 2026-08-02-per-repo-gate-scoping-
253
- * redesign): the prior wording here claimed a manifest with no
254
- * `${REPO}`/`${BRANCH}`/`at_head` policy "never pays this cost even
255
- * when uninjected" — true only for a caller that omits BOTH this field
256
- * AND `commandSegmentsThunk` below. The one production caller
257
- * (`runInterceptCli`) previously injected THIS field eagerly, computed
258
- * unconditionally for every Bash event regardless of whether any policy
259
- * needed it — measured a real, avoidable second segmentation walk (see
260
- * `segmentViewOf`'s own doc comment in `command-normalize.ts` for the
261
- * +206% number). It now injects `commandSegmentsThunk` instead, which
262
- * IS deferred until first use. This eager field still exists for a
263
- * caller that already has a segment view in hand (or a test asserting
264
- * against a specific one) and wants to skip `intercept()`'s own lazy
265
- * resolution entirely — it is simply not, by itself, a laziness
266
- * guarantee. Optional: omitted by non-Bash events and by callers/tests
267
- * that don't supply one, in which case `resolveCommandSegments` falls
268
- * through to `commandSegmentsThunk`, then to computing it lazily itself.
269
- *
270
- * SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
271
- * above: not checked against `event` at runtime; the one production
272
- * caller derives it from the identical event, same as those two.
273
- */
274
- commandSegments?: CommandSegment[] | null;
275
- /**
276
- * Memoised thunk resolving the per-segment view (task `98ad072f`,
277
- * T-003; D-015 fix round) — the SAME resolved-by-the-wrapper,
278
- * compute-at-most-once-per-event pattern `ampNormalizedCommandThunk`
279
- * above already uses, applied to `commandSegments` so the segmentation
280
- * walk it wraps is deferred until some matching policy actually needs
281
- * it (`usesPerRepoBuiltins` below), not paid on every Bash event
282
- * regardless. Preferred over the eager `commandSegments` field above
283
- * when both are supplied. Optional: omitted by non-Bash events and by
284
- * callers/tests that don't supply one, in which case
285
- * `resolveCommandSegments` falls back to `commandSegments`, then to
286
- * computing it lazily itself — same fallback chain shape as
287
- * `normalizedCommand` / `ampNormalizedCommandThunk`.
288
- *
289
- * SAME INVARIANT as `normalizedCommand` / `ampNormalizedCommandThunk`
290
- * above: not checked against `event` at runtime.
291
- */
292
- commandSegmentsThunk?: () => CommandSegment[] | null;
293
- /**
294
- * Whether `options.builtins.REPO` / `.BRANCH` were set by an explicit
295
- * operator override (`HARNESS_REPO` / `HARNESS_BRANCH` env vars) rather
296
- * than derived from the cwd's git context (D-015 fix round, run
297
- * 2026-08-02-per-repo-gate-scoping-redesign). `src/cli/policy/
298
- * intercept.ts`'s own comment on its `builtins` object says "an
299
- * explicit env var still wins" — true for the cwd context, but a
300
- * per-policy ATTRIBUTED context (a foreign target's resolved
301
- * `${REPO}`/`${BRANCH}`) unconditionally overwrote REPO/BRANCH with the
302
- * target repo's own identity, discarding the override — measured.
303
- * When true here, `resolveAttributedContexts` keeps
304
- * `options.builtins.REPO` (already the override value — see the CLI
305
- * wrapper) instead of substituting the attributed target's own repo
306
- * name; independently for BRANCH via `branchOverridden`. `false` /
307
- * absent — the default for every caller that does not set this,
308
- * including every existing test — when the corresponding builtin was
309
- * derived, not overridden.
310
- */
311
- repoOverridden?: boolean;
312
- /** See `repoOverridden` above; the same override for `${BRANCH}`. */
313
- branchOverridden?: boolean;
314
- /**
315
- * Destination for audit-write failure diagnostics. Defaults to
316
- * `process.stderr` when omitted. Goes to stderr so Claude Code's
317
- * stdout deny-JSON contract is unaffected.
318
- *
319
- * Injected by callers (tests, CLI wrapper) so the function stays
320
- * deterministic and testable without capturing process.stderr.
321
- */
322
- stderr?: NodeJS.WritableStream;
323
- }
324
- /**
325
- * Ambient inputs the Risk Gate needs that the CLI wrapper resolves from
326
- * the host (filesystem + process). Mirrors the `EnvelopeContext` /
327
- * `SignalInputs` split the debug verbs already use.
328
- */
329
- export interface RiskGateContext {
330
- /** Git context resolved against the event's cwd. */
331
- git: GitRepoContext;
332
- /** Working directory the action runs in. */
333
- cwd: string;
334
- /** OS user, or "" when unavailable. */
335
- user: string;
336
- /** Host name, or "" when unavailable. */
337
- host: string;
338
- /** Environment variables, for resolver `env_var_patterns`. */
339
- env: Record<string, string | undefined>;
340
- /** Current kube context name, or "" when unknown. */
341
- kubeContext: string;
342
- /** Current kube namespace, or "" when unknown. */
343
- kubeNamespace: string;
344
- }
345
- /**
346
- * Does a policy's `trigger:` match this event? This is the WHICH-tool-
347
- * calls filter; the WHETHER-it-applies filter is `policy.when:`,
348
- * evaluated separately (`evaluateWhen`). A policy fires only when both
349
- * hold. Exported so `harness explain-policy` can report the trigger
350
- * verdict on its own.
351
- *
352
- * `precomputedNormalizedCommand` is an optional caller-supplied
353
- * `NormalizedCommand` for the event's command: `intercept()` below
354
- * resolves ONE `NormalizedCommand` per event (via
355
- * `options.normalizedCommand`, itself computed once by
356
- * `runInterceptCli`) and threads it into every `policyMatchesEvent`
357
- * call in its `matching` loop, so a raw-miss event normalises the
358
- * command exactly ONCE across the whole manifest instead of once per
359
- * policy. Omitted by standalone callers (`harness explain-policy`, most
360
- * tests), which fall back to computing it lazily right here — correct
361
- * either way, since `normalizeCommand` is a pure function of the
362
- * command string alone.
363
- *
364
- * `ampNormalizedCommandThunk` (task aabbad63) is the SAME
365
- * resolved-by-the-wrapper pattern for the ampersand-aware SECOND
366
- * normalisation pass, but threaded as a memoised THUNK rather than a
367
- * precomputed value — see `InterceptOptions.ampNormalizedCommandThunk`
368
- * for why laziness matters here specifically. Omitted callers fall back
369
- * to calling `normalizeCommandAmpAware` directly, same shape as the
370
- * `precomputedNormalizedCommand` fallback above.
371
- *
372
- * `quoteNormalizedCommandThunk` (task cf3dff51) is the SAME thunk pattern
373
- * again, for the quote-aware THIRD normalisation pass — see
374
- * `InterceptOptions.quoteNormalizedCommandThunk`. Omitted callers fall
375
- * back to calling `normalizeCommandQuoteAware` directly, same shape as
376
- * the two fallbacks above.
377
- */
378
- export declare function policyMatchesEvent(policy: Policy, event: ToolEvent, precomputedNormalizedCommand?: NormalizedCommand, ampNormalizedCommandThunk?: () => AmpAwareNormalizedCommand, quoteNormalizedCommandThunk?: () => QuoteAwareNormalizedCommand): boolean;
379
- /**
380
- * Does a decision abort the tool call? Phase 7 #6 makes the Risk Gate
381
- * authoritative at the `PreToolUse` boundary:
382
- * - `deny` aborts (a `block`-enforcement policy whose requires failed,
383
- * the Phase 4 mechanism, unchanged).
384
- * - `require_approval` aborts until the approval evidence exists. In
385
- * Phase 7 #5 this outcome was returned but did not block; #6 makes
386
- * it block. The approval tag is satisfiable through the policy's
387
- * `requires:` (an operator runs `harness approve risk`); once the
388
- * tag is on record the requires evaluation passes and the outcome
389
- * is `allow` instead.
390
- * - `deny-degraded` aborts (task f1aea826): it is only ever produced
391
- * for `block` / `require_approval` policies under the default
392
- * `preserve_enforcement` posture (see `degradedOutcome`), so its
393
- * presence alone means "an incident-preventing gate could not read
394
- * its evidence" — fail closed.
395
- * - `allow` / `warn` / `warn-degraded` never abort.
396
- *
397
- * Exported for the CLI wrapper's pending-approval staging
398
- * (`src/cli/policy/intercept.ts`), which must agree with the runtime on
399
- * WHICH decision is the first blocking one — a hand-rolled copy there
400
- * drifted when `deny-degraded` was added (review 2026-08-08, low
401
- * finding). Keep this the single definition.
402
- */
403
- export declare function isBlockingDecision(d: PolicyDecision): boolean;
404
- /**
405
- * Bound and clean a transport-level reason before it is interpolated
406
- * into the agent-facing deny-degraded envelope. The string can embed
407
- * output captured from the grounding-mcp SUBPROCESS (`exitDiagnostic`
408
- * in `src/policies/ledger-client.ts` appends the child's last stderr
409
- * line), i.e. untrusted content that previously only reached stderr
410
- * and the audit ledger, never model-visible text. The full, untouched
411
- * string still goes to the audit row and the verbose diagnostic; only
412
- * the envelope interpolation and the default-verbosity operator hint
413
- * are bounded.
414
- *
415
- * Exported for the CLI wrapper's deny-degraded operator hint (review
416
- * 2026-08-08, round 3; default-verbosity only, suppressed under
417
- * verbose), which interpolates the same untrusted reason into its
418
- * one-line stderr surface.
419
- */
420
- export declare function sanitizeEnvelopeReason(reason: string): string;
421
- /** Which per-repo builtin resolved to an empty value; see {@link emptyIdentifierGuard}. */
422
- export type EmptyIdentifier = "REPO" | "BRANCH";
423
- export interface EmptyIdentifierGuard {
424
- identifier: EmptyIdentifier;
425
- /** Agent-facing text naming a state the agent can establish itself. */
426
- message: string;
427
- }
428
- /**
429
- * Does `ledgerTagTemplate` reference `${REPO}` / `${BRANCH}` while the
430
- * value resolved for this context is empty? An empty identifier must
431
- * never be rendered into a ledger tag: `preflight:` is a substring of
432
- * EVERY preflight fact, so a blank tag lets any unrelated fact satisfy
433
- * the gate (and `preflight-before-push` would render "You cannot push
434
- * branch yet."). The caller decides per enforcement with
435
- * `message` instead of querying the ledger.
436
- *
437
- * `REPO` wins over `BRANCH`, and a branch-only template evaluated where
438
- * REPO is empty too (no repository at all) gets the no-repository text,
439
- * since "HEAD is detached" would be false there. The messages name a
440
- * state the agent can establish (`cd` / `git -C` / `git switch`), never
441
- * a tag to produce, so there is no producer trap, and never an opt-out
442
- * (a block that names its own disable path is not a gate).
443
- *
444
- * Exported so `harness dry-run` shows the same hint instead of a blank
445
- * tag (`src/cli/dry-run.ts`).
446
- */
447
- export declare function emptyIdentifierGuard(ledgerTagTemplate: string, values: Record<string, string>): EmptyIdentifierGuard | null;
448
- /**
449
- * Which of a policy's own trigger-satisfying segments name a target — the
450
- * attribution sibling of `policyMatchesEvent` (task `98ad072f`, T-003).
451
- * Re-tests the policy's OWN `bash_match` regex against each segment's
452
- * `text` in isolation: every shipped `bash_match` alternation includes a
453
- * `^` branch, so testing it against one segment's canonicalised text
454
- * alone (no leading boundary character — see `CommandSegment.text`'s own
455
- * doc comment) is well-defined. Returns every segment that matches on its
456
- * own — usually one, occasionally several (D-004: a decoy read and a cwd
457
- * read chained in one command can each independently satisfy the SAME
458
- * trigger).
459
- *
460
- * Never changes WHETHER a policy matches — `policyMatchesEvent` already
461
- * decided that from the WHOLE command (raw-or-normalised-or-amp-
462
- * normalised), unchanged by this function. This only narrows down WHICH
463
- * segment(s), if any, are individually responsible for the match, so
464
- * `intercept()` below knows which segment's target — if any — to resolve
465
- * the `${REPO}`/`${BRANCH}`/`currentHeadSha` builtins from instead of the
466
- * event's own cwd. `[]` when the policy has no `bash_match` trigger (an
467
- * MCP-tool-name-triggered policy — no segment concept applies), when its
468
- * regex is malformed (mirrors `policyMatchesEvent`'s own defensive
469
- * `try/catch`), or when the whole-command match came ONLY from the
470
- * ampersand-aware third arm: `segments` here is always built from the
471
- * PRIMARY (`BOUNDARY_RE`) segmentation, which — by construction — cannot
472
- * itself contain the bare-`&` split the amp arm relies on, so an amp-
473
- * only match finds no individually-matching segment and this returns
474
- * `[]` (D-003: cwd builtins, identical to shipped).
475
- */
476
- export declare function attributeTriggerSegments(policy: Policy, segments: readonly CommandSegment[]): CommandSegment[];
477
- /**
478
- * Does a policy's `requires:` reference the per-repo `${REPO}`/`${BRANCH}`
479
- * builtins, or ask for `at_head`? Only these policies pay the per-policy
480
- * attribution cost below — every other matching policy keeps the plain,
481
- * per-event cwd builtins `options.builtins` already carries, byte-
482
- * identical to before this task. D-005: `at_head` is included even when
483
- * `ledger_tag` itself doesn't reference `${REPO}`/`${BRANCH}`, because
484
- * `at_head` compares against `currentHeadSha`, which this task resolves
485
- * from the SAME per-policy context — splitting the two would check
486
- * `at_head` against the cwd's HEAD while `${REPO}` (if present elsewhere)
487
- * named a different repo, the worse inconsistency D-005 rejects.
488
- */
489
- export declare function usesPerRepoBuiltins(policy: Policy): boolean;
490
- /** One `${REPO}`/`${BRANCH}`/`currentHeadSha` context a policy is evaluated against. */
491
- interface AttributedContext {
492
- builtins: ExtractBuiltins;
493
- currentHeadSha: string | undefined;
494
- /** Set only on a foreign context; the cwd context never carries it. */
495
- foreignTarget?: ForeignTarget;
496
- }
497
- /**
498
- * Bound on the number of DISTINCT attributed contexts one policy is
499
- * evaluated against for one event (D-013, fix round, run
500
- * 2026-08-02-per-repo-gate-scoping-redesign). Each distinct context costs
501
- * one ledger query and one audit write in `intercept()`'s evaluation loop
502
- * below; on a manifest with several per-repo-builtins policies (the
503
- * shipped `FULL_TEMPLATE` has four), an event naming K distinct targets
504
- * amplifies to 4K queries/writes, unbounded by `MAX_NORMALIZE_LENGTH` —
505
- * measured 200/200 at K=200 by reviewer 2, on a hook budget whose timeout
506
- * is ALLOW (same class as the 07-27 quadratic hot-path fail-open: a slow
507
- * enough event silently passes). `resolveAttributedContexts` returns a
508
- * `"bounded"` result instead of a `contexts` array once a policy's DISTINCT
509
- * targets would exceed this constant; `intercept()` denies that policy
510
- * directly (naming the ambiguity) without querying the ledger for any of
511
- * them, rather than silently evaluating all of them.
512
- */
513
- export declare const MAX_ATTRIBUTED_CONTEXTS = 4;
514
- /** Discriminated result of `resolveAttributedContexts` (D-013). */
515
- export type AttributedContextsResult = {
516
- kind: "contexts";
517
- contexts: AttributedContext[];
518
- } | {
519
- kind: "bounded";
520
- distinctCount: number;
521
- };
522
- /**
523
- * Resolve the distinct `${REPO}`/`${BRANCH}`/`currentHeadSha` contexts a
524
- * `usesPerRepoBuiltins` policy must be evaluated against (task `98ad072f`,
525
- * T-003, `01-plan.md` Proposed Approach items 2-4). The engine trusts a
526
- * trigger-satisfying segment's `effectiveTarget` UNIFORMLY as the
527
- * directory that segment's own invocation genuinely runs in (bash
528
- * semantics) — orchestrator decision D-010, 2026-08-02: an earlier
529
- * revision of this function additionally distrusted an inherited target
530
- * whenever a DIFFERENT invocation intervened between the `cd` and the
531
- * satisfying segment — REJECTED: that coupling has no basis in bash's own
532
- * semantics, is dodgeable by inserting any harmless read between the `cd`
533
- * and the gated verb, and carried its own unverified `cd`-recognition
534
- * gap. The `cd <B> && git log && git push` shape this was meant to guard
535
- * is not a regression at all under this design — `git push` genuinely
536
- * runs inside B — see `tests/runtime/intercept-cli.test.ts`'s "leading-cd
537
- * is now a deliverable" block.
538
- *
539
- * D-021 (UNIVERSAL-ADDITIVE, operator decision, fix round, run
540
- * 2026-08-02-per-repo-gate-scoping-redesign): attribution is uniformly
541
- * ADDITIVE, never REPLACE. Every satisfying segment with an attributable
542
- * target — `seg.effectiveTarget !== null`, whether it came from the
543
- * segment's OWN explicit repo-relocating flag (`-C`/`env -C`/`--git-dir`;
544
- * `--work-tree` is excluded from ever producing a target at all, D-017)
545
- * or was INHERITED from a preceding `cd` — demands the cwd context AND
546
- * that target's own context, side by side; `seg.ownTarget` is not
547
- * consulted for this decision. Any unsatisfied context blocks the whole
548
- * event (the existing per-context evaluation machinery below is
549
- * unchanged). `seg.effectiveTarget === null` (fully unattributable —
550
- * D-003) still adds ONLY the cwd context — there is no foreign target to
551
- * be additive WITH.
552
- *
553
- * Demanding cwd unconditionally makes the engine structurally immune to
554
- * misattribution of the foreign target: no gap in `command-normalize.ts`'s
555
- * static, string-only model of shell control flow (subshells, pipes,
556
- * `cd -`, a later `cd`, an unmodeled git flag composition) can ever make a
557
- * gate WEAKER than the shipped, cwd-only engine, because cwd's own demand
558
- * is never dropped — only added to. This replaces an earlier REPLACE-for-
559
- * own-target design (D-011) that trusted a statically extracted own
560
- * target as proof of "this one invocation operates there"; four
561
- * independent review passes each measured a live bypass of that
562
- * invariant against the shipped binary (a forged `.git/HEAD` directory
563
- * reached through, respectively, a non-persisting `cd`, `--work-tree`,
564
- * more than one repo-relocating flag, and a tilde-valued flag not counted
565
- * by the multi-flag guard) — see `03-decisions.md` D-011/D-017/D-018/
566
- * D-019/D-020/D-021 for the full history. The static-analysis-proves-it
567
- * invariant those bypasses each disproved is not carried forward here.
568
- * Cost accepted by the operator: a legitimate `git -C B` from cwd A now
569
- * demands BOTH A's and B's context, where the pre-D-021 engine demanded
570
- * only B's.
571
- *
572
- * One exception to "never dropped": when the working directory is outside
573
- * every git repository (a blank `${REPO}` for the policy, as the guard
574
- * sees it), its cwd context is not demanded next to a segment whose own
575
- * target resolved to a real repository (see the loop body). That
576
- * exception relies on two static models: the target attribution, whose
577
- * known misattribution (a `GIT_DIR=` prefix or a third repository reached
578
- * through another construct) exists for every cwd, and the check that the
579
- * cwd is outside every repository, which errs toward inside: it holds only
580
- * when neither the cwd nor any ancestor has an entry named `HEAD` or
581
- * `.git` (`mayBeInsideRepository`). A detached cwd and every other
582
- * non-blank cwd context are still never dropped.
583
- *
584
- * D-012: a target reached through a symlink resolves to its REAL
585
- * (realpath'd) repository identity, not the symlink's own lexical
586
- * basename — `resolveGitContext` derives `repo` from the basename of
587
- * wherever it's pointed, and never itself realpaths, so an agent could
588
- * otherwise pick the demanded repo identity by naming a symlink.
589
- *
590
- * D-013: distinct contexts are bounded at `MAX_ATTRIBUTED_CONTEXTS`; see
591
- * that constant's own comment.
592
- *
593
- * D-015: the cwd context is deduped by its OWN `[REPO, BRANCH, sha]`
594
- * signature (not the literal string `"cwd"`), so a foreign path that
595
- * resolves to the SAME repository identity as cwd (e.g. a subdirectory of
596
- * the cwd repo reached via an explicit `-C`) collapses into the cwd
597
- * context instead of producing a spurious duplicate decision/audit write.
598
- * `repoOverridden` / `branchOverridden` (from `InterceptOptions`, both
599
- * default `false`) keep an operator's `HARNESS_REPO`/`HARNESS_BRANCH`
600
- * override intact in an attributed foreign context instead of letting the
601
- * target repo's own identity silently overwrite it — independently per
602
- * field. `satisfying` is a `Set` (not `Array.includes` per segment) for
603
- * O(1) membership tests instead of O(n) per segment.
604
- *
605
- * A policy with no attributable foreign target (no `bash_match`, no
606
- * individually-matching segment, only an amp-arm-only match, an
607
- * unattributable composition, a target resolving to the SAME repository
608
- * identity as cwd, or a target outside any git repo — D-003) is evaluated
609
- * EXACTLY as it is today, with the EXACT SAME `options.builtins` object
610
- * reference (no clone) when nothing attributed, keeping that the
611
- * byte-identical common case.
612
- *
613
- * `resolveGitContextMemo` is a per-`intercept()`-call cache keyed by the
614
- * REALPATH'D absolute path (never module-level state — no cross-event
615
- * caching), so several policies (or several satisfying segments) naming
616
- * the same foreign path within one event pay the `fs` cost once, not
617
- * once per policy per segment. `mayBeInsideRepositoryMemo` is the same
618
- * kind of per-call cache for the cwd's own outside-every-repository
619
- * check, keyed by the cwd's real path, so that walk runs once per event.
620
- */
621
- export declare function resolveAttributedContexts(policy: Policy, segments: readonly CommandSegment[], cwdBuiltins: ExtractBuiltins, cwdCurrentHeadSha: string | undefined, resolveGitContextMemo: Map<string, GitRepoContext>, mayBeInsideRepositoryMemo: Map<string, boolean>, repoOverridden: boolean, branchOverridden: boolean, extractContext: ExtractEventContext): AttributedContextsResult;
622
- export declare function intercept(options: InterceptOptions): Promise<InterceptResult>;
623
- export {};