@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,128 +0,0 @@
1
- // `harness pack hook stay-in-scope` is an optional, informational
2
- // PostToolUse integration. It reads its complete behavior from the current
3
- // pack configuration so a stale generated hook safely no-ops after disable.
4
- import * as fs from "node:fs";
5
- import * as path from "node:path";
6
- import { resolveHomeDir } from "../../runtime/home-dir.js";
7
- import { toolNameMatchesAny } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
8
- import { taskIdFromToolResponse } from "../../runtime/task-providers/agent-tasks.js";
9
- import { evaluateStayInScopeMatch, extractConfiguredParentUrl, resolveStayInScopeConfig, } from "../../policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js";
10
- import { checkHookPause, loadManifestOrInjected, pickString, readStdin, resolveToolInput, } from "./hook-bootstrap.js";
11
- const PACK_NAME = "understanding-before-execution";
12
- export const STAY_IN_SCOPE_DISABLED_ENV = "STAY_IN_SCOPE_DISABLED";
13
- export const STAY_IN_SCOPE_LOG_ENV = "STAY_IN_SCOPE_LOG";
14
- export const REMINDERS_SUBDIR = "reminders";
15
- export const STAY_IN_SCOPE_LOG_BASENAME = "stay-in-scope.log";
16
- function noop(diagnostic, stderr, partial = {}) {
17
- stderr.write(`${diagnostic}\n`);
18
- return { exitCode: 0, matched: false, matchedRule: "none", logged: false, secondOrder: false, logPath: null, diagnostic, ...partial };
19
- }
20
- function objectValue(input, key) {
21
- return typeof input === "object" && input !== null && !Array.isArray(input)
22
- ? input[key]
23
- : undefined;
24
- }
25
- function extractLabels(toolInput) {
26
- const labels = objectValue(toolInput, "labels");
27
- return Array.isArray(labels) ? labels.filter((value) => typeof value === "string") : [];
28
- }
29
- function extractDescription(toolInput) {
30
- const description = objectValue(toolInput, "description");
31
- return typeof description === "string" ? description : "";
32
- }
33
- function extractTitle(toolInput) {
34
- const title = objectValue(toolInput, "title");
35
- return typeof title === "string" && title.length > 0 ? title : null;
36
- }
37
- // Reuses the shared MCP tool_response unwrap (taskIdFromToolResponse) so
38
- // this hook reads the real Claude Code content-block shape the same way
39
- // the active-claim tracker does, instead of a second, plain-object-only
40
- // parser (harness task b5e65f5e).
41
- function extractTaskId(toolInput, toolResponse) {
42
- const taskId = objectValue(toolInput, "taskId");
43
- if (typeof taskId === "string" && taskId.length > 0)
44
- return taskId;
45
- const wrappedId = taskIdFromToolResponse(toolResponse);
46
- return wrappedId.length > 0 ? wrappedId : null;
47
- }
48
- function resolveLogPath(opts, env) {
49
- if (typeof opts.logPath === "string" && opts.logPath.length > 0)
50
- return opts.logPath;
51
- const configured = env[STAY_IN_SCOPE_LOG_ENV];
52
- if (typeof configured === "string" && configured.length > 0)
53
- return configured;
54
- const home = resolveHomeDir(opts.homeDir === undefined ? {} : { homeDir: opts.homeDir });
55
- return path.join(home.path, REMINDERS_SUBDIR, STAY_IN_SCOPE_LOG_BASENAME);
56
- }
57
- function appendAuditRow(logPath, record) {
58
- try {
59
- fs.mkdirSync(path.dirname(logPath), { recursive: true });
60
- fs.appendFileSync(logPath, `${JSON.stringify(record)}\n`, "utf8");
61
- return { ok: true };
62
- }
63
- catch (error) {
64
- return { ok: false, reason: error.message };
65
- }
66
- }
67
- export async function runPackHookStayInScopeCli(opts = {}) {
68
- const stdin = opts.stdin ?? process.stdin;
69
- const stderr = opts.stderr ?? process.stderr;
70
- const env = opts.env ?? process.env;
71
- let event;
72
- try {
73
- const parsed = JSON.parse((await readStdin(stdin)).trim() || "{}");
74
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
75
- return noop("harness pack hook stay-in-scope: malformed event JSON, skipping", stderr);
76
- }
77
- event = parsed;
78
- }
79
- catch {
80
- return noop("harness pack hook stay-in-scope: malformed event JSON, skipping", stderr);
81
- }
82
- if (checkHookPause("stay-in-scope", stderr, opts, opts.generatedDir).paused) {
83
- return noop("harness paused; stay-in-scope skipping without evaluating.", stderr);
84
- }
85
- if (env[STAY_IN_SCOPE_DISABLED_ENV] === "1") {
86
- return noop(`harness pack hook stay-in-scope: ${STAY_IN_SCOPE_DISABLED_ENV}=1, skipping`, stderr);
87
- }
88
- let manifest;
89
- try {
90
- ({ manifest } = loadManifestOrInjected(opts, opts.manifest));
91
- }
92
- catch (error) {
93
- return noop(`harness pack hook stay-in-scope: manifest load failed (${error.message}), skipping`, stderr);
94
- }
95
- const declared = manifest.policy_packs.find((pack) => pack.name === (opts.pack ?? PACK_NAME));
96
- const config = declared?.enabled ? resolveStayInScopeConfig(declared.config["stay_in_scope"]) : null;
97
- if (config === null) {
98
- return noop("harness pack hook stay-in-scope: integration absent, disabled, or invalid, skipping", stderr);
99
- }
100
- const toolName = pickString(event.tool_name, event.tool) ?? "";
101
- if (!toolNameMatchesAny(toolName, config.tools)) {
102
- return noop(`harness pack hook stay-in-scope: tool ${toolName || "(missing)"} not in watch list, skipping`, stderr);
103
- }
104
- const toolInput = resolveToolInput(event);
105
- const labels = extractLabels(toolInput);
106
- const description = extractDescription(toolInput);
107
- const evaluation = evaluateStayInScopeMatch(config, labels, description);
108
- if (!evaluation.matched) {
109
- return noop(`harness pack hook stay-in-scope: ${toolName} payload carries no configured marker, skipping`, stderr);
110
- }
111
- const taskId = extractTaskId(toolInput, event.tool_response);
112
- const record = {
113
- ts: (opts.now ?? new Date()).toISOString(), taskId, title: extractTitle(toolInput), labels,
114
- parentPrUrl: extractConfiguredParentUrl(config, description, evaluation.parentReference),
115
- secondOrder: evaluation.secondOrder, matchedRule: evaluation.matchedRule,
116
- };
117
- const logPath = resolveLogPath(opts, env);
118
- const appendResult = appendAuditRow(logPath, record);
119
- const prefix = evaluation.secondOrder ? "[stay-in-scope: SECOND-ORDER]" : "[stay-in-scope]";
120
- const taskIdNote = taskId === null ? "" : ` task=${taskId}`;
121
- const configuredMessage = evaluation.secondOrder ? config.messages.secondOrder : config.messages.reminder;
122
- stderr.write(`${prefix} follow-up created from review context${taskIdNote}. ${configuredMessage}\n`);
123
- const logNote = appendResult.ok ? `; audit appended to ${logPath}` : `; audit append FAILED (${appendResult.reason})`;
124
- const diagnostic = `harness pack hook stay-in-scope: matched=${evaluation.matchedRule} secondOrder=${evaluation.secondOrder}${logNote}`;
125
- stderr.write(`${diagnostic}\n`);
126
- return { exitCode: 0, matched: true, matchedRule: evaluation.matchedRule, logged: appendResult.ok, secondOrder: evaluation.secondOrder, logPath: appendResult.ok ? logPath : null, diagnostic };
127
- }
128
- //# sourceMappingURL=hook-stay-in-scope.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-stay-in-scope.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-stay-in-scope.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,2EAA2E;AAC3E,4EAA4E;AAE5E,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sEAAsE,CAAC;AAC1G,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GAEzB,MAAM,mFAAmF,CAAC;AAE3F,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,CAAC,MAAM,0BAA0B,GAAG,wBAAwB,CAAC;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAC5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,mBAAmB,CAAC;AA2C9D,SAAS,IAAI,CAAC,UAAkB,EAAE,MAA6B,EAAE,UAA8C,EAAE;IAC/G,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;AACxI,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,SAAkB;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAkB;IAC5C,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAC1D,OAAO,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,SAAkB;IACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,yEAAyE;AACzE,wEAAwE;AACxE,wEAAwE;AACxE,kCAAkC;AAClC,SAAS,aAAa,CAAC,SAAkB,EAAE,YAAqB;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnE,MAAM,SAAS,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,IAAgC,EAAE,GAAsB;IAC9E,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACrF,MAAM,UAAU,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC9C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAC/E,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,MAA8B;IACrE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAAmC,EAAE;IACnF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5E,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC,iEAAiE,EAAE,MAAM,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,GAAG,MAAuB,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,iEAAiE,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,4DAA4D,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,GAAG,CAAC,0BAA0B,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,oCAAoC,0BAA0B,cAAc,EAAE,MAAM,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,CAAC,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,0DAA2D,KAAe,CAAC,OAAO,aAAa,EAAE,MAAM,CAAC,CAAC;IACvH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrG,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,qFAAqF,EAAE,MAAM,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,yCAAyC,QAAQ,IAAI,WAAW,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,oCAAoC,QAAQ,iDAAiD,EAAE,MAAM,CAAC,CAAC;IACrH,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,MAAM,GAA2B;QACrC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM;QAC1F,WAAW,EAAE,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,eAAe,CAAC;QACxF,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW;KACzE,CAAC;IACF,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC5F,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1G,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,yCAAyC,UAAU,KAAK,iBAAiB,IAAI,CAAC,CAAC;IACrG,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAC,0BAA0B,YAAY,CAAC,MAAM,GAAG,CAAC;IACtH,MAAM,UAAU,GAAG,4CAA4C,UAAU,CAAC,WAAW,gBAAgB,UAAU,CAAC,WAAW,GAAG,OAAO,EAAE,CAAC;IACxI,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;AAClM,CAAC"}
@@ -1,23 +0,0 @@
1
- import type { Manifest } from "../../schema/index.js";
2
- import { type LoaderOptions } from "../loader.js";
3
- export interface PackHookSubagentStartOptions extends LoaderOptions {
4
- pack?: string;
5
- generatedDir?: string;
6
- stdin?: NodeJS.ReadableStream;
7
- stderr?: NodeJS.WritableStream;
8
- manifest?: Manifest;
9
- /** Override the persisted-report directory (test injection). */
10
- reportsDir?: string;
11
- /** Override the issue timestamp for deterministic tests. */
12
- now?: Date;
13
- }
14
- export interface PackHookSubagentStartResult {
15
- exitCode: number;
16
- /** Was an in-flight record actually written? */
17
- recordWritten: boolean;
18
- sessionId: string | null;
19
- agentId: string | null;
20
- /** Diagnostic line emitted to stderr. */
21
- diagnostic: string;
22
- }
23
- export declare function runPackHookSubagentStartCli(opts?: PackHookSubagentStartOptions): Promise<PackHookSubagentStartResult>;
@@ -1,88 +0,0 @@
1
- // `harness pack hook subagent-start` — write an in-flight record for a
2
- // newly-started Agent-tool subagent (docs/decisions/2026-08-27-ug-auto-
3
- // mode-approval.md "TTL, cwd, and subagents").
4
- //
5
- // SubagentStart fires on the PARENT session's `session_id` (subagents
6
- // share it, they never get one of their own); Claude Code additionally
7
- // carries `agent_id` and `agent_type` on this event. This hook consults
8
- // the same operator-approval authority the PreToolUse blocker does
9
- // (`checkOperatorApprovalMarkers`) and, only when it matches, copies
10
- // that approval into a signed in-flight record keyed by
11
- // `(session_id, agent_id)` — see inflight-records.ts's module header
12
- // for why this is a COPY of authority already granted, never a new
13
- // grant. When the parent holds no valid approval at spawn time, nothing
14
- // is written and the subagent gets no record to present later. A matched
15
- // marker whose signed report hash no longer matches any persisted report
16
- // (the approved report was edited after approval, the same cross-check
17
- // both PreToolUse hooks apply after a match) counts as no valid
18
- // approval: the PreToolUse hooks refuse that marker, so a record minted
19
- // under it would outlive the refusal and open the gate for the subagent.
20
- //
21
- // Never blocks: this hook has no gating role of its own (a later slice
22
- // teaches the PreToolUse blocker to consult the record it produces
23
- // here). Every error and refusal path resolves to exit 0 + stderr
24
- // diagnostic, mirroring every other hook in this pack.
25
- import { checkOperatorApprovalMarkers, defaultReportsDir, rejectMalformedAgentId, verifyMatchedMarkerReport, writeInflightRecord, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
26
- import { pickString, readStdin, resolveSubagentHookContext, } from "./hook-bootstrap.js";
27
- const PACK_NAME = "understanding-before-execution";
28
- const HOOK_LABEL = "harness pack hook: subagent-start";
29
- function noop(diagnostic, stderr, sessionId = null, agentId = null) {
30
- stderr.write(`${diagnostic}\n`);
31
- return { exitCode: 0, recordWritten: false, sessionId, agentId, diagnostic };
32
- }
33
- export async function runPackHookSubagentStartCli(opts = {}) {
34
- const stdin = opts.stdin ?? process.stdin;
35
- const stderr = opts.stderr ?? process.stderr;
36
- const packName = opts.pack ?? PACK_NAME;
37
- const raw = await readStdin(stdin);
38
- let event = {};
39
- try {
40
- event = JSON.parse(raw.trim() || "{}");
41
- }
42
- catch {
43
- return noop(`${HOOK_LABEL}: malformed event JSON, skipping`, stderr);
44
- }
45
- // Pause sentinel checked before anything else, ids resolved, then pack
46
- // context resolved — same as every other hook in this pack.
47
- const ctxResult = resolveSubagentHookContext(HOOK_LABEL, "subagent-start", packName, event, rejectMalformedAgentId, { ...opts, stderr });
48
- if (!ctxResult.ok) {
49
- return noop(ctxResult.diagnostic, stderr, ctxResult.sessionId, ctxResult.agentId);
50
- }
51
- const { sessionId, agentId, declared, generatedDir } = ctxResult.context;
52
- const agentType = pickString(event.agent_type) ?? "unknown";
53
- const approval = checkOperatorApprovalMarkers(generatedDir, sessionId, declared.config, stderr);
54
- if (!approval.matched) {
55
- const diagnostic = `${HOOK_LABEL}: parent session ${sessionId} holds no valid approval; no in-flight record for agent ${agentId}`;
56
- stderr.write(`${diagnostic}\n`);
57
- return { exitCode: 0, recordWritten: false, sessionId, agentId, diagnostic };
58
- }
59
- // Same gate-read cross-check as both PreToolUse hooks: a marker whose
60
- // signed report content is no longer on disk is not an approval, so no
61
- // record may be copied from it.
62
- const reportsDir = opts.reportsDir ?? defaultReportsDir();
63
- const reportHash = verifyMatchedMarkerReport(reportsDir, approval);
64
- if (!reportHash.ok) {
65
- const diagnostic = `${HOOK_LABEL}: parent session ${sessionId} approval refused, ${reportHash.detail}; no in-flight record for agent ${agentId}`;
66
- stderr.write(`${diagnostic}\n`);
67
- return { exitCode: 0, recordWritten: false, sessionId, agentId, diagnostic };
68
- }
69
- const writeOpts = {
70
- generatedDir,
71
- sessionId,
72
- agentId,
73
- agentType,
74
- // The marker that actually verified (the session marker when a task
75
- // marker failed the check and the session marker behind it held).
76
- parent: { ...approval, source: reportHash.source, detail: reportHash.detail },
77
- };
78
- if (opts.now)
79
- writeOpts.now = opts.now;
80
- const result = writeInflightRecord(writeOpts);
81
- if (!result.ok) {
82
- return noop(`${HOOK_LABEL}: writeInflightRecord failed for agent ${agentId} (${result.reason}: ${result.detail})`, stderr, sessionId, agentId);
83
- }
84
- const diagnostic = `${HOOK_LABEL}: wrote in-flight record for agent ${agentId} (parent=${reportHash.source})`;
85
- stderr.write(`${diagnostic}\n`);
86
- return { exitCode: 0, recordWritten: true, sessionId, agentId, diagnostic };
87
- }
88
- //# sourceMappingURL=hook-subagent-start.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-subagent-start.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-subagent-start.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import type { Manifest } from "../../schema/index.js";
2
- import { type LoaderOptions } from "../loader.js";
3
- export interface PackHookSubagentStopOptions extends LoaderOptions {
4
- pack?: string;
5
- generatedDir?: string;
6
- stdin?: NodeJS.ReadableStream;
7
- stderr?: NodeJS.WritableStream;
8
- manifest?: Manifest;
9
- }
10
- export interface PackHookSubagentStopResult {
11
- exitCode: number;
12
- /** Was clearInflightRecord actually invoked (ids valid, pack enabled)? */
13
- cleared: boolean;
14
- sessionId: string | null;
15
- agentId: string | null;
16
- /** Diagnostic line emitted to stderr. */
17
- diagnostic: string;
18
- }
19
- export declare function runPackHookSubagentStopCli(opts?: PackHookSubagentStopOptions): Promise<PackHookSubagentStopResult>;
@@ -1,41 +0,0 @@
1
- // `harness pack hook subagent-stop` — remove the in-flight record a
2
- // `subagent-start` invocation wrote for this `(session_id, agent_id)`
3
- // pair (docs/decisions/2026-08-27-ug-auto-mode-approval.md "TTL, cwd,
4
- // and subagents"). The subagent has finished; its copy of the parent's
5
- // approval no longer has anything to authorize.
6
- //
7
- // Idempotent and never blocks: a missing record (never written, already
8
- // cleared, or the parent never had approval to copy) is a no-op, same
9
- // as `clearInflightRecord` itself. Every path resolves to exit 0 +
10
- // stderr diagnostic.
11
- import { clearInflightRecord, rejectMalformedAgentId, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
12
- import { readStdin, resolveSubagentHookContext } from "./hook-bootstrap.js";
13
- const PACK_NAME = "understanding-before-execution";
14
- const HOOK_LABEL = "harness pack hook: subagent-stop";
15
- function noop(diagnostic, stderr, sessionId = null, agentId = null) {
16
- stderr.write(`${diagnostic}\n`);
17
- return { exitCode: 0, cleared: false, sessionId, agentId, diagnostic };
18
- }
19
- export async function runPackHookSubagentStopCli(opts = {}) {
20
- const stdin = opts.stdin ?? process.stdin;
21
- const stderr = opts.stderr ?? process.stderr;
22
- const packName = opts.pack ?? PACK_NAME;
23
- const raw = await readStdin(stdin);
24
- let event = {};
25
- try {
26
- event = JSON.parse(raw.trim() || "{}");
27
- }
28
- catch {
29
- return noop(`${HOOK_LABEL}: malformed event JSON, skipping`, stderr);
30
- }
31
- const ctxResult = resolveSubagentHookContext(HOOK_LABEL, "subagent-stop", packName, event, rejectMalformedAgentId, { ...opts, stderr });
32
- if (!ctxResult.ok) {
33
- return noop(ctxResult.diagnostic, stderr, ctxResult.sessionId, ctxResult.agentId);
34
- }
35
- const { sessionId, agentId, generatedDir } = ctxResult.context;
36
- clearInflightRecord(generatedDir, sessionId, agentId);
37
- const diagnostic = `${HOOK_LABEL}: cleared in-flight record for agent ${agentId}`;
38
- stderr.write(`${diagnostic}\n`);
39
- return { exitCode: 0, cleared: true, sessionId, agentId, diagnostic };
40
- }
41
- //# sourceMappingURL=hook-subagent-stop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-subagent-stop.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-subagent-stop.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,gDAAgD;AAChD,EAAE;AACF,wEAAwE;AACxE,sEAAsE;AACtE,mEAAmE;AACnE,qBAAqB;AAErB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,sEAAsE,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,UAAU,GAAG,kCAAkC,CAAC;AAyBtD,SAAS,IAAI,CACX,UAAkB,EAClB,MAA6B,EAC7B,YAA2B,IAAI,EAC/B,UAAyB,IAAI;IAE7B,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IAExC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,GAA0B,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAA0B,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,GAAG,UAAU,kCAAkC,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,SAAS,GAAG,0BAA0B,CAC1C,UAAU,EACV,eAAe,EACf,QAAQ,EACR,KAAK,EACL,sBAAsB,EACtB,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CACpB,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;IAE/D,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,GAAG,UAAU,wCAAwC,OAAO,EAAE,CAAC;IAClF,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACxE,CAAC"}
@@ -1,27 +0,0 @@
1
- import type { Manifest } from "../../schema/index.js";
2
- import { type LoaderOptions } from "../loader.js";
3
- export declare const TOOL_NAME_TASK_START = "mcp__agent-tasks__task_start";
4
- export declare const TOOL_NAME_TASK_FINISH = "mcp__agent-tasks__task_finish";
5
- export declare const TOOL_NAME_TASK_ABANDON = "mcp__agent-tasks__task_abandon";
6
- export declare const TOOL_NAME_TASKS_TRANSITION = "mcp__agent-tasks__tasks_transition";
7
- export declare const TOOL_NAME_TASK_MERGE = "mcp__agent-tasks__task_merge";
8
- export declare const TRACK_ACTIVE_CLAIM_TOOLS: readonly string[];
9
- export interface PackHookTrackActiveClaimOptions extends LoaderOptions {
10
- pack?: string;
11
- generatedDir?: string;
12
- stdin?: NodeJS.ReadableStream;
13
- stderr?: NodeJS.WritableStream;
14
- manifest?: Manifest;
15
- }
16
- export interface PackHookTrackActiveClaimResult {
17
- exitCode: number;
18
- /** Was the active-claim file written (task_start path)? */
19
- claimWritten: boolean;
20
- /** Was the active-claim file cleared (task_finish / abandon path)? */
21
- claimCleared: boolean;
22
- /** The taskId acted on, or null when the event carried none. */
23
- taskId: string | null;
24
- /** Diagnostic line emitted to stderr. */
25
- diagnostic: string;
26
- }
27
- export declare function runPackHookTrackActiveClaimCli(opts?: PackHookTrackActiveClaimOptions): Promise<PackHookTrackActiveClaimResult>;
@@ -1,275 +0,0 @@
1
- // `harness pack hook track-active-claim` — agent-tasks claim tracking.
2
- //
3
- // PostToolUse hook for the understanding-before-execution pack
4
- // (harness/494fd1e5). Maintains a small file at
5
- // `<generatedDir>/active-claim` that names the currently-claimed
6
- // agent-tasks task id. The file lets `harness approve understanding`
7
- // auto-resolve the task id when --task is absent, so the operator
8
- // does not have to type the UUID by hand on every approval.
9
- //
10
- // File lifecycle:
11
- // - `mcp__agent-tasks__task_start` with `tool_input.taskId` → write
12
- // the taskId into the file (atomic).
13
- // - `mcp__agent-tasks__task_finish` → remove the file UNLESS the
14
- // resulting status is `review` (v2 semantics keep the work claim
15
- // there); `mcp__agent-tasks__task_abandon` / `task_merge` → always
16
- // remove it (idempotent), but ONLY when the current file already
17
- // names the task id this call acted on (a release verb on an
18
- // UNRELATED task id keeps the file instead of clearing it, see
19
- // `releaseResult` below). The release/keep decision is made in ONE
20
- // place, `claimEffectForAgentTasksTool` (`src/runtime/
21
- // task-providers/agent-tasks.ts`), which this hook only presents
22
- // (task c86e3c4a); the id-equality guard and the fail-safe-shape
23
- // diagnostic are this hook's own presentation detail on top of that
24
- // decision, not a re-derivation of it.
25
- //
26
- // The hook is intentionally separate from `hook-post-tool-use` because
27
- // the existing marker-expiry hook fires on a configurable list of
28
- // task-boundary verbs (`expire_on_tool_match`) that does NOT include
29
- // `task_start`. Folding task_start in there would either expand that
30
- // matcher's semantics (now "boundary + start") or require a parallel
31
- // config field. A dedicated hook keeps each surface single-purpose.
32
- //
33
- // Failure mode mirrors `hook-post-tool-use`: every error path resolves
34
- // to no-op + stderr log. The active-claim file is an ergonomic shortcut,
35
- // not a security-relevant signal — `harness approve understanding`
36
- // still treats explicit --task as authoritative, and falls back to
37
- // session-scoped marker when no claim is resolved.
38
- //
39
- // Hardcoded agent-tasks tool names: the v2 contract is agent-tasks
40
- // specific. Operators on Linear / JIRA can ignore this hook (the
41
- // matcher will never fire for them); a config-driven extension can
42
- // land later if a second tasking system asks for it.
43
- //
44
- // Codex parity (task cf4cdc93): this hook is now also wired on the
45
- // Codex adapter (`understanding-before-execution.ts`, `runtime ===
46
- // "codex"` branch), reusing this exact command — no Codex-specific
47
- // CLI verb needed. The tool-name comparisons below are alias-aware
48
- // (through the task-provider adapter): a Codex session can emit an
49
- // MCP tool name in a variant form for the identical tool (server
50
- // hyphen/underscore swap, the `mcp__server__.tool` dotted form), and
51
- // the emitted Codex matcher is alias-EXPANDED at `harness apply` time
52
- // (`expandCodexHookMatchPattern`) so the dispatcher DOES invoke this
53
- // hook for a variant — a raw `===` here would then silently miss it,
54
- // the exact bug class task a1348c89 fixed once already for the
55
- // marker-expiry PostToolUse hook.
56
- //
57
- // Review finding on task cf4cdc93 (empirically confirmed, MEDIUM): the
58
- // event envelope's field NAMES also vary across the tolerated Codex
59
- // synonyms — `tool` as well as `tool_name`, `raw_input` as well as
60
- // `tool_input` (`hook-codex-post-tool-use.ts`'s own doc comment and
61
- // `docs/policy-packs/understanding-before-execution.md`'s wire-format
62
- // block both document this). A payload shaped `{ tool, raw_input }`
63
- // (or any mix) used to silently no-op here while the sibling
64
- // `codex-post-tool-use` hook already handled it via its own
65
- // `pickString(event.tool_name, event.tool)` / `resolveToolInput`. Now
66
- // mirrored via the same shared helpers (`hook-bootstrap.ts`).
67
- import { clearActiveClaim, readActiveClaim, writeActiveClaim, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
68
- import { ACTIVE_CLAIM_TOOL_NAMES, claimEffectForAgentTasksTool, describeToolResponseShape, matchesAgentTasksRuntimeVerb, taskFinishReleaseIsUnreadable, taskIdFromInput, taskIdFromToolResponse, tasksTransitionStatusFromInput, TASK_ABANDON_TOOL, TASK_FINISH_TOOL, TASK_MERGE_TOOL, TASK_START_TOOL, TASKS_TRANSITION_TOOL, } from "../../runtime/task-providers/agent-tasks.js";
69
- import { resolveGeneratedDir } from "../../runtime/pending-approval.js";
70
- import { checkHookPause, loadManifestOrInjected, pickString, readStdin, resolveToolInput, } from "./hook-bootstrap.js";
71
- const PACK_NAME = "understanding-before-execution";
72
- export const TOOL_NAME_TASK_START = TASK_START_TOOL;
73
- export const TOOL_NAME_TASK_FINISH = TASK_FINISH_TOOL;
74
- export const TOOL_NAME_TASK_ABANDON = TASK_ABANDON_TOOL;
75
- // Legacy v1 verb: takes an explicit `status` param ("open" | "in_progress" |
76
- // "review" | "done"). Only `done` is a terminal "work claim released" state
77
- // in v2 semantics (per task_finish docs: "The work claim is cleared when
78
- // going to done and kept when going to review"). open / review / in_progress
79
- // keep the claim, so the hook treats them as no-op (PR #200, agent-tasks
80
- // 9e06175f). Adding this verb closes the marker-GC gap left by PR #198,
81
- // which fixed the auto-bypass but did not GC the stale markers themselves.
82
- export const TOOL_NAME_TASKS_TRANSITION = TASKS_TRANSITION_TOOL;
83
- export const TOOL_NAME_TASK_MERGE = TASK_MERGE_TOOL;
84
- export const TRACK_ACTIVE_CLAIM_TOOLS = ACTIVE_CLAIM_TOOL_NAMES;
85
- function noop(diagnostic, stderr) {
86
- stderr.write(`${diagnostic}\n`);
87
- return {
88
- exitCode: 0,
89
- claimWritten: false,
90
- claimCleared: false,
91
- taskId: null,
92
- diagnostic,
93
- };
94
- }
95
- /**
96
- * Clear (or keep) the active-claim file after a release-effect verb
97
- * (task_finish -> non-review, task_abandon, task_merge) and return the
98
- * standard result shape. Shared by all three, which otherwise
99
- * byte-duplicate this body.
100
- *
101
- * Task c86e3c4a: a release verb used to
102
- * clear the marker unconditionally, so a caller holding an active-claim
103
- * WORK marker for task B who then ran task_merge (or finished / abandoned)
104
- * an UNRELATED task A lost marker B -- including the case of finishing a
105
- * REVIEW claim on A while B's work claim is what the marker names. Fixed
106
- * by reading the current marker before clearing and comparing it against
107
- * the task id this call actually acted on (`tool_input.taskId`, falling
108
- * back to the tool RESULT's `task.id` when the input carried none): only
109
- * a match clears. A mismatch keeps the marker and reports the near-miss
110
- * (`kept active-claim <B>: <verb> on <A>`) instead of silently losing it.
111
- * When the current marker is absent, or the acted-on id cannot be
112
- * resolved at all, the comparison is skipped and the old behaviour
113
- * applies (idempotent clear-of-nothing, or "cannot prove this call is for
114
- * a different task" -- both favor releasing, matching
115
- * `claimEffectForAgentTasksTool`'s own fail-safe direction, see its
116
- * doc comment for what that costs).
117
- *
118
- * Also, task c86e3c4a: when the clear is itself the
119
- * classifier's fail-safe fallback for an unreadable task_finish result
120
- * (rather than an intentional `done` release), the diagnostic says so by
121
- * name (`unreadable tool_response, shape=...`) instead of looking
122
- * identical to a normal release in the operator's stderr trail. This
123
- * reads `taskFinishReleaseIsUnreadable`/`describeToolResponseShape`
124
- * purely to LABEL the decision the classifier already made; it does not
125
- * re-derive the decision itself.
126
- */
127
- function releaseResult(toolName, toolInput, toolResponse, generatedDir, stderr) {
128
- const actedOnTaskId = taskIdFromInput(toolInput) || taskIdFromToolResponse(toolResponse);
129
- const currentClaim = readActiveClaim(generatedDir);
130
- if (currentClaim !== null && actedOnTaskId !== "" && currentClaim !== actedOnTaskId) {
131
- const diagnostic = `harness pack hook track-active-claim: kept active-claim ${currentClaim}: ${toolName} on ${actedOnTaskId}`;
132
- stderr.write(`${diagnostic}\n`);
133
- return {
134
- exitCode: 0,
135
- claimWritten: false,
136
- claimCleared: false,
137
- taskId: currentClaim,
138
- diagnostic,
139
- };
140
- }
141
- clearActiveClaim(generatedDir);
142
- const unreadable = matchesAgentTasksRuntimeVerb(toolName, ["task_finish"]) &&
143
- taskFinishReleaseIsUnreadable(toolResponse);
144
- const diagnostic = unreadable
145
- ? `harness pack hook track-active-claim: cleared active-claim after ${toolName} (unreadable tool_response, shape=${describeToolResponseShape(toolResponse)}, fail-safe release)`
146
- : `harness pack hook track-active-claim: cleared active-claim after ${toolName}`;
147
- stderr.write(`${diagnostic}\n`);
148
- return {
149
- exitCode: 0,
150
- claimWritten: false,
151
- claimCleared: true,
152
- taskId: actedOnTaskId === "" ? null : actedOnTaskId,
153
- diagnostic,
154
- };
155
- }
156
- export async function runPackHookTrackActiveClaimCli(opts = {}) {
157
- const stdin = opts.stdin ?? process.stdin;
158
- const stderr = opts.stderr ?? process.stderr;
159
- const packName = opts.pack ?? PACK_NAME;
160
- const raw = await readStdin(stdin);
161
- let event = {};
162
- try {
163
- event = JSON.parse(raw.trim() || "{}");
164
- }
165
- catch {
166
- return noop("harness pack hook track-active-claim: malformed event JSON, skipping", stderr);
167
- }
168
- // Pause sentinel — skip claim-file mutations while paused.
169
- if (checkHookPause("track-active-claim", stderr, opts, opts.generatedDir).paused) {
170
- return noop("harness paused; track-active-claim skipping without evaluating.", stderr);
171
- }
172
- const toolName = pickString(event.tool_name, event.tool) ?? "";
173
- if (toolName === "") {
174
- return noop("harness pack hook track-active-claim: missing tool_name, skipping", stderr);
175
- }
176
- // Loader gate: pack must exist and be enabled. Mirrors the same
177
- // structure as hook-post-tool-use so a single disabled-pack opt-out
178
- // suppresses BOTH hooks.
179
- let manifest;
180
- let manifestPath;
181
- try {
182
- ({ manifest, manifestPath } = loadManifestOrInjected(opts, opts.manifest));
183
- }
184
- catch (err) {
185
- return noop(`harness pack hook track-active-claim: manifest load failed (${err.message}), skipping`, stderr);
186
- }
187
- const declared = manifest.policy_packs.find((p) => p.name === packName);
188
- if (!declared) {
189
- return noop(`harness pack hook track-active-claim: pack "${packName}" not declared in manifest, skipping`, stderr);
190
- }
191
- if (!declared.enabled) {
192
- return noop(`harness pack hook track-active-claim: pack "${packName}" is enabled:false, skipping`, stderr);
193
- }
194
- const generatedDir = opts.generatedDir ??
195
- (manifestPath !== undefined
196
- ? resolveGeneratedDir({
197
- ...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
198
- manifestPath,
199
- })
200
- : undefined);
201
- if (generatedDir === undefined) {
202
- return noop("harness pack hook track-active-claim: generatedDir unresolvable, skipping", stderr);
203
- }
204
- const toolInput = resolveToolInput(event);
205
- const taskId = taskIdFromInput(toolInput);
206
- // Single decider: claimEffectForAgentTasksTool (agent-tasks.ts) reads
207
- // the tool RESULT for task_finish (task.status) to tell a finish that
208
- // landed on `review` (work claim kept) apart from `done`/anything else
209
- // (released); task_abandon and task_merge always release; task_start
210
- // always acquires. This hook only presents that decision below, it
211
- // does not re-derive it (task c86e3c4a).
212
- const claimEffect = claimEffectForAgentTasksTool(toolName, toolInput, event.tool_response);
213
- if (claimEffect === "acquire") {
214
- if (taskId === "") {
215
- return noop(`harness pack hook track-active-claim: task_start without tool_input.taskId, skipping`, stderr);
216
- }
217
- try {
218
- writeActiveClaim(generatedDir, taskId);
219
- }
220
- catch (err) {
221
- return noop(`harness pack hook track-active-claim: writeActiveClaim failed for ${taskId}: ${err.message}`, stderr);
222
- }
223
- const diagnostic = `harness pack hook track-active-claim: wrote active-claim for ${taskId}`;
224
- stderr.write(`${diagnostic}\n`);
225
- return {
226
- exitCode: 0,
227
- claimWritten: true,
228
- claimCleared: false,
229
- taskId,
230
- diagnostic,
231
- };
232
- }
233
- if (claimEffect === "release" &&
234
- !matchesTransition(toolName)) {
235
- return releaseResult(toolName, toolInput, event.tool_response, generatedDir, stderr);
236
- }
237
- if (matchesAgentTasksRuntimeVerb(toolName, ["task_finish"])) {
238
- // claimEffect is "none" here (a "release" task_finish already
239
- // returned above): the decider only returns "none" for task_finish
240
- // when the resulting status was `review`.
241
- const diagnostic = `harness pack hook track-active-claim: kept active-claim after ${toolName} (resulting status=review)`;
242
- stderr.write(`${diagnostic}\n`);
243
- return {
244
- exitCode: 0,
245
- claimWritten: false,
246
- claimCleared: false,
247
- taskId: taskId === "" ? null : taskId,
248
- diagnostic,
249
- };
250
- }
251
- if (matchesTransition(toolName)) {
252
- const status = tasksTransitionStatusFromInput(toolInput);
253
- if (claimEffect !== "release") {
254
- // open / in_progress / review keep the work claim per v2 semantics
255
- // (see task_finish docs). Malformed / missing status also falls
256
- // here, since we cannot prove the agent meant to release.
257
- return noop(`harness pack hook track-active-claim: tasks_transition status=${status || "(missing)"} keeps claim, skipping`, stderr);
258
- }
259
- clearActiveClaim(generatedDir);
260
- const diagnostic = `harness pack hook track-active-claim: cleared active-claim after tasks_transition status=${status}`;
261
- stderr.write(`${diagnostic}\n`);
262
- return {
263
- exitCode: 0,
264
- claimWritten: false,
265
- claimCleared: true,
266
- taskId: taskId === "" ? null : taskId,
267
- diagnostic,
268
- };
269
- }
270
- return noop(`harness pack hook track-active-claim: tool ${toolName} not tracked, skipping`, stderr);
271
- }
272
- function matchesTransition(toolName) {
273
- return matchesAgentTasksRuntimeVerb(toolName, ["tasks_transition"]);
274
- }
275
- //# sourceMappingURL=hook-track-active-claim.js.map