@lannguyensi/harness 0.63.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +46 -42
  3. package/dist/cli/add/index.js +17 -21
  4. package/dist/cli/add/index.js.map +1 -1
  5. package/dist/cli/adopt/derive.d.ts +2 -2
  6. package/dist/cli/adopt/derive.js +2 -19
  7. package/dist/cli/adopt/derive.js.map +1 -1
  8. package/dist/cli/adopt/index.d.ts +1 -1
  9. package/dist/cli/adopt/index.js +1 -12
  10. package/dist/cli/adopt/index.js.map +1 -1
  11. package/dist/cli/apply/apply.d.ts +20 -35
  12. package/dist/cli/apply/apply.js +61 -136
  13. package/dist/cli/apply/apply.js.map +1 -1
  14. package/dist/cli/apply/generate-codex-config.js +10 -58
  15. package/dist/cli/apply/generate-codex-config.js.map +1 -1
  16. package/dist/cli/apply/generate-memory-index.js +1 -2
  17. package/dist/cli/apply/generate-memory-index.js.map +1 -1
  18. package/dist/cli/apply/generate-opencode-config.d.ts +2 -10
  19. package/dist/cli/apply/generate-opencode-config.js +74 -113
  20. package/dist/cli/apply/generate-opencode-config.js.map +1 -1
  21. package/dist/cli/apply/generate-settings.d.ts +11 -64
  22. package/dist/cli/apply/generate-settings.js +27 -132
  23. package/dist/cli/apply/generate-settings.js.map +1 -1
  24. package/dist/cli/apply/index.d.ts +1 -1
  25. package/dist/cli/apply/index.js +1 -1
  26. package/dist/cli/apply/index.js.map +1 -1
  27. package/dist/cli/apply/install-codex-config.d.ts +153 -1
  28. package/dist/cli/apply/install-codex-config.js +445 -70
  29. package/dist/cli/apply/install-codex-config.js.map +1 -1
  30. package/dist/cli/apply/next-steps.d.ts +7 -0
  31. package/dist/cli/apply/next-steps.js +13 -1
  32. package/dist/cli/apply/next-steps.js.map +1 -1
  33. package/dist/cli/bounded-stdin.d.ts +0 -23
  34. package/dist/cli/bounded-stdin.js +2 -49
  35. package/dist/cli/bounded-stdin.js.map +1 -1
  36. package/dist/cli/describe.d.ts +1 -1
  37. package/dist/cli/describe.js +0 -3
  38. package/dist/cli/describe.js.map +1 -1
  39. package/dist/cli/diff/engine.d.ts +0 -11
  40. package/dist/cli/diff/engine.js +1 -17
  41. package/dist/cli/diff/engine.js.map +1 -1
  42. package/dist/cli/diff/index.js +14 -25
  43. package/dist/cli/diff/index.js.map +1 -1
  44. package/dist/cli/doctor/claude-mcp.d.ts +4 -19
  45. package/dist/cli/doctor/claude-mcp.js +11 -22
  46. package/dist/cli/doctor/claude-mcp.js.map +1 -1
  47. package/dist/cli/doctor/codex.d.ts +12 -14
  48. package/dist/cli/doctor/codex.js +31 -144
  49. package/dist/cli/doctor/codex.js.map +1 -1
  50. package/dist/cli/doctor/format.js +23 -338
  51. package/dist/cli/doctor/format.js.map +1 -1
  52. package/dist/cli/doctor/hook-liveness.d.ts +56 -0
  53. package/dist/cli/doctor/hook-liveness.js +455 -0
  54. package/dist/cli/doctor/hook-liveness.js.map +1 -0
  55. package/dist/cli/doctor/index.d.ts +13 -87
  56. package/dist/cli/doctor/index.js +57 -705
  57. package/dist/cli/doctor/index.js.map +1 -1
  58. package/dist/cli/doctor/opencode.d.ts +2 -1
  59. package/dist/cli/doctor/opencode.js.map +1 -1
  60. package/dist/cli/doctor/types.d.ts +21 -378
  61. package/dist/cli/doctor/types.js.map +1 -1
  62. package/dist/cli/drain-stdio.d.ts +31 -0
  63. package/dist/cli/drain-stdio.js +76 -0
  64. package/dist/cli/drain-stdio.js.map +1 -0
  65. package/dist/cli/export.d.ts +3 -1
  66. package/dist/cli/export.js +7 -16
  67. package/dist/cli/export.js.map +1 -1
  68. package/dist/cli/gate/codex-disable.d.ts +29 -0
  69. package/dist/cli/gate/codex-disable.js +195 -0
  70. package/dist/cli/gate/codex-disable.js.map +1 -0
  71. package/dist/cli/gate/codex-enable.d.ts +41 -0
  72. package/dist/cli/gate/codex-enable.js +127 -0
  73. package/dist/cli/gate/codex-enable.js.map +1 -0
  74. package/dist/cli/gate/codex-snapshot.d.ts +208 -0
  75. package/dist/cli/gate/codex-snapshot.js +402 -0
  76. package/dist/cli/gate/codex-snapshot.js.map +1 -0
  77. package/dist/cli/gate/disable.d.ts +9 -0
  78. package/dist/cli/gate/disable.js +263 -28
  79. package/dist/cli/gate/disable.js.map +1 -1
  80. package/dist/cli/gate/enable.d.ts +26 -6
  81. package/dist/cli/gate/enable.js +152 -80
  82. package/dist/cli/gate/enable.js.map +1 -1
  83. package/dist/cli/gate/link-chain.d.ts +53 -0
  84. package/dist/cli/gate/link-chain.js +122 -0
  85. package/dist/cli/gate/link-chain.js.map +1 -0
  86. package/dist/cli/gate/snapshot.d.ts +289 -12
  87. package/dist/cli/gate/snapshot.js +481 -22
  88. package/dist/cli/gate/snapshot.js.map +1 -1
  89. package/dist/cli/index.d.ts +0 -9
  90. package/dist/cli/index.js +15 -2607
  91. package/dist/cli/index.js.map +1 -1
  92. package/dist/cli/init/composer.d.ts +3 -6
  93. package/dist/cli/init/composer.js +6 -370
  94. package/dist/cli/init/composer.js.map +1 -1
  95. package/dist/cli/init/dependencies.d.ts +1 -2
  96. package/dist/cli/init/dependencies.js +4 -80
  97. package/dist/cli/init/dependencies.js.map +1 -1
  98. package/dist/cli/init/detect.js +5 -4
  99. package/dist/cli/init/detect.js.map +1 -1
  100. package/dist/cli/init/interactive.d.ts +1 -23
  101. package/dist/cli/init/interactive.js +33 -247
  102. package/dist/cli/init/interactive.js.map +1 -1
  103. package/dist/cli/init/profiles.d.ts +2 -2
  104. package/dist/cli/init/profiles.js +51 -243
  105. package/dist/cli/init/profiles.js.map +1 -1
  106. package/dist/cli/init/templates.d.ts +2 -37
  107. package/dist/cli/init/templates.js +25 -1237
  108. package/dist/cli/init/templates.js.map +1 -1
  109. package/dist/cli/list.d.ts +1 -1
  110. package/dist/cli/list.js +1 -38
  111. package/dist/cli/list.js.map +1 -1
  112. package/dist/cli/loader.d.ts +15 -1
  113. package/dist/cli/loader.js +56 -39
  114. package/dist/cli/loader.js.map +1 -1
  115. package/dist/cli/main.js +7 -2
  116. package/dist/cli/main.js.map +1 -1
  117. package/dist/cli/migrate-home/index.js +2 -2
  118. package/dist/cli/migrate-home/index.js.map +1 -1
  119. package/dist/cli/pack/add.js +1 -1
  120. package/dist/cli/pack/add.js.map +1 -1
  121. package/dist/cli/pack/hook-bootstrap.d.ts +5 -164
  122. package/dist/cli/pack/hook-bootstrap.js +15 -291
  123. package/dist/cli/pack/hook-bootstrap.js.map +1 -1
  124. package/dist/cli/pack/hook-branch-protection.d.ts +28 -21
  125. package/dist/cli/pack/hook-branch-protection.js +365 -340
  126. package/dist/cli/pack/hook-branch-protection.js.map +1 -1
  127. package/dist/cli/pack/index.d.ts +0 -1
  128. package/dist/cli/pack/index.js +0 -1
  129. package/dist/cli/pack/index.js.map +1 -1
  130. package/dist/cli/pack/list.js +1 -6
  131. package/dist/cli/pack/list.js.map +1 -1
  132. package/dist/cli/pack/mutate.d.ts +7 -9
  133. package/dist/cli/pack/mutate.js +6 -9
  134. package/dist/cli/pack/mutate.js.map +1 -1
  135. package/dist/cli/pack/reseed.d.ts +2 -2
  136. package/dist/cli/pack/reseed.js +16 -22
  137. package/dist/cli/pack/reseed.js.map +1 -1
  138. package/dist/cli/register-gate-group.d.ts +5 -0
  139. package/dist/cli/register-gate-group.js +348 -0
  140. package/dist/cli/register-gate-group.js.map +1 -0
  141. package/dist/cli/register-inspect-group.d.ts +6 -0
  142. package/dist/cli/register-inspect-group.js +189 -0
  143. package/dist/cli/register-inspect-group.js.map +1 -0
  144. package/dist/cli/register-operator-lifecycle.d.ts +5 -0
  145. package/dist/cli/register-operator-lifecycle.js +20 -0
  146. package/dist/cli/register-operator-lifecycle.js.map +1 -0
  147. package/dist/cli/register-pack-group.d.ts +5 -0
  148. package/dist/cli/register-pack-group.js +134 -0
  149. package/dist/cli/register-pack-group.js.map +1 -0
  150. package/dist/cli/register-setup-group.d.ts +5 -0
  151. package/dist/cli/register-setup-group.js +495 -0
  152. package/dist/cli/register-setup-group.js.map +1 -0
  153. package/dist/cli/remove/index.d.ts +0 -14
  154. package/dist/cli/remove/index.js +2 -115
  155. package/dist/cli/remove/index.js.map +1 -1
  156. package/dist/cli/remove/mutate.d.ts +0 -2
  157. package/dist/cli/remove/mutate.js +1 -19
  158. package/dist/cli/remove/mutate.js.map +1 -1
  159. package/dist/cli/remove/register.d.ts +5 -0
  160. package/dist/cli/remove/register.js +25 -0
  161. package/dist/cli/remove/register.js.map +1 -0
  162. package/dist/cli/shell-quote.d.ts +7 -0
  163. package/dist/cli/shell-quote.js +17 -0
  164. package/dist/cli/shell-quote.js.map +1 -0
  165. package/dist/cli/uninstall/index.d.ts +4 -2
  166. package/dist/cli/uninstall/index.js +15 -7
  167. package/dist/cli/uninstall/index.js.map +1 -1
  168. package/dist/cli/uninstall/register.d.ts +5 -0
  169. package/dist/cli/uninstall/register.js +171 -0
  170. package/dist/cli/uninstall/register.js.map +1 -0
  171. package/dist/cli/uninstall/snapshot.d.ts +15 -0
  172. package/dist/cli/uninstall/snapshot.js +38 -0
  173. package/dist/cli/uninstall/snapshot.js.map +1 -1
  174. package/dist/cli/validate/checks.d.ts +0 -77
  175. package/dist/cli/validate/checks.js +3 -1049
  176. package/dist/cli/validate/checks.js.map +1 -1
  177. package/dist/cli/validate/index.js +19 -15
  178. package/dist/cli/validate/index.js.map +1 -1
  179. package/dist/index.d.ts +0 -3
  180. package/dist/index.js +0 -3
  181. package/dist/index.js.map +1 -1
  182. package/dist/io/claude-mcp.d.ts +1 -1
  183. package/dist/io/claude-mcp.js +27 -14
  184. package/dist/io/claude-mcp.js.map +1 -1
  185. package/dist/io/harness-lock.js +2 -2
  186. package/dist/io/harness-lock.js.map +1 -1
  187. package/dist/io/lock.d.ts +0 -26
  188. package/dist/io/lock.js +10 -27
  189. package/dist/io/lock.js.map +1 -1
  190. package/dist/io/merge-settings.js +6 -4
  191. package/dist/io/merge-settings.js.map +1 -1
  192. package/dist/io/project-name.d.ts +22 -39
  193. package/dist/io/project-name.js +25 -42
  194. package/dist/io/project-name.js.map +1 -1
  195. package/dist/io/read-regular-file.d.ts +103 -40
  196. package/dist/io/read-regular-file.js +196 -35
  197. package/dist/io/read-regular-file.js.map +1 -1
  198. package/dist/io/restart-hints.js +3 -6
  199. package/dist/io/restart-hints.js.map +1 -1
  200. package/dist/io/version-compare.d.ts +1 -3
  201. package/dist/io/version-compare.js +1 -3
  202. package/dist/io/version-compare.js.map +1 -1
  203. package/dist/io/write-regular-file.d.ts +30 -0
  204. package/dist/io/write-regular-file.js +85 -0
  205. package/dist/io/write-regular-file.js.map +1 -0
  206. package/dist/overrides/index.d.ts +1 -0
  207. package/dist/overrides/index.js +1 -0
  208. package/dist/overrides/index.js.map +1 -1
  209. package/dist/overrides/merge-layers.d.ts +43 -0
  210. package/dist/overrides/merge-layers.js +76 -0
  211. package/dist/overrides/merge-layers.js.map +1 -0
  212. package/dist/overrides/merge.d.ts +16 -0
  213. package/dist/overrides/merge.js +21 -8
  214. package/dist/overrides/merge.js.map +1 -1
  215. package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -69
  216. package/dist/policy-packs/builtin/branch-protection-runtime.js +12 -84
  217. package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
  218. package/dist/policy-packs/builtin/branch-protection.d.ts +7 -30
  219. package/dist/policy-packs/builtin/branch-protection.js +56 -89
  220. package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
  221. package/dist/policy-packs/config-check.d.ts +7 -5
  222. package/dist/policy-packs/config-check.js +2 -2
  223. package/dist/policy-packs/config-check.js.map +1 -1
  224. package/dist/policy-packs/expand.d.ts +1 -3
  225. package/dist/policy-packs/expand.js +5 -42
  226. package/dist/policy-packs/expand.js.map +1 -1
  227. package/dist/policy-packs/index.d.ts +3 -3
  228. package/dist/policy-packs/index.js +2 -2
  229. package/dist/policy-packs/index.js.map +1 -1
  230. package/dist/policy-packs/registry.d.ts +9 -38
  231. package/dist/policy-packs/registry.js +5 -65
  232. package/dist/policy-packs/registry.js.map +1 -1
  233. package/dist/policy-packs/runtime.d.ts +0 -4
  234. package/dist/policy-packs/runtime.js +9 -22
  235. package/dist/policy-packs/runtime.js.map +1 -1
  236. package/dist/policy-packs/types.d.ts +0 -19
  237. package/dist/policy-packs/ux-compare.d.ts +1 -11
  238. package/dist/policy-packs/ux-compare.js +6 -42
  239. package/dist/policy-packs/ux-compare.js.map +1 -1
  240. package/dist/policy-packs/ux-drift-check.d.ts +5 -5
  241. package/dist/policy-packs/ux-drift-check.js +17 -22
  242. package/dist/policy-packs/ux-drift-check.js.map +1 -1
  243. package/dist/policy-packs/version-check.d.ts +5 -26
  244. package/dist/policy-packs/version-check.js +19 -74
  245. package/dist/policy-packs/version-check.js.map +1 -1
  246. package/dist/probes/memory.d.ts +1 -1
  247. package/dist/probes/memory.js +1 -1
  248. package/dist/probes/memory.js.map +1 -1
  249. package/dist/runtime/agent-facing.d.ts +9 -0
  250. package/dist/runtime/agent-facing.js +28 -14
  251. package/dist/runtime/agent-facing.js.map +1 -1
  252. package/dist/runtime/bounded-text.d.ts +15 -0
  253. package/dist/runtime/bounded-text.js +27 -0
  254. package/dist/runtime/bounded-text.js.map +1 -0
  255. package/dist/runtime/git-branch.d.ts +125 -0
  256. package/dist/runtime/git-branch.js +381 -0
  257. package/dist/runtime/git-branch.js.map +1 -0
  258. package/dist/runtime/hermetic-spawn-guard.d.ts +2 -2
  259. package/dist/runtime/hermetic-spawn-guard.js +24 -34
  260. package/dist/runtime/hermetic-spawn-guard.js.map +1 -1
  261. package/dist/runtime/home-dir.js +3 -2
  262. package/dist/runtime/home-dir.js.map +1 -1
  263. package/dist/runtime/tool-name-aliases.d.ts +0 -6
  264. package/dist/runtime/tool-name-aliases.js +5 -18
  265. package/dist/runtime/tool-name-aliases.js.map +1 -1
  266. package/dist/schema/grounding.d.ts +7 -54
  267. package/dist/schema/grounding.js +10 -12
  268. package/dist/schema/grounding.js.map +1 -1
  269. package/dist/schema/hooks.d.ts +39 -136
  270. package/dist/schema/hooks.js +3 -6
  271. package/dist/schema/hooks.js.map +1 -1
  272. package/dist/schema/index.d.ts +114 -3828
  273. package/dist/schema/index.js +41 -80
  274. package/dist/schema/index.js.map +1 -1
  275. package/dist/schema/memory.d.ts +54 -131
  276. package/dist/schema/memory.js +2 -2
  277. package/dist/schema/memory.js.map +1 -1
  278. package/dist/schema/policy-packs.d.ts +3 -45
  279. package/dist/schema/policy-packs.js +7 -13
  280. package/dist/schema/policy-packs.js.map +1 -1
  281. package/dist/schema/policy-ux.d.ts +7 -0
  282. package/dist/schema/policy-ux.js +18 -0
  283. package/dist/schema/policy-ux.js.map +1 -0
  284. package/dist/schema/removed-keys.d.ts +185 -0
  285. package/dist/schema/removed-keys.js +531 -0
  286. package/dist/schema/removed-keys.js.map +1 -0
  287. package/dist/schema/tools.d.ts +30 -268
  288. package/dist/schema/tools.js +4 -4
  289. package/dist/schema/tools.js.map +1 -1
  290. package/package.json +5 -16
  291. package/dist/cli/approve/branch-protection.d.ts +0 -69
  292. package/dist/cli/approve/branch-protection.js +0 -144
  293. package/dist/cli/approve/branch-protection.js.map +0 -1
  294. package/dist/cli/approve/risk.d.ts +0 -112
  295. package/dist/cli/approve/risk.js +0 -197
  296. package/dist/cli/approve/risk.js.map +0 -1
  297. package/dist/cli/approve/stdin-report.d.ts +0 -57
  298. package/dist/cli/approve/stdin-report.js +0 -145
  299. package/dist/cli/approve/stdin-report.js.map +0 -1
  300. package/dist/cli/approve/understanding.d.ts +0 -410
  301. package/dist/cli/approve/understanding.js +0 -996
  302. package/dist/cli/approve/understanding.js.map +0 -1
  303. package/dist/cli/audit.d.ts +0 -80
  304. package/dist/cli/audit.js +0 -252
  305. package/dist/cli/audit.js.map +0 -1
  306. package/dist/cli/delegate/index.d.ts +0 -76
  307. package/dist/cli/delegate/index.js +0 -443
  308. package/dist/cli/delegate/index.js.map +0 -1
  309. package/dist/cli/doctor/auto-approve-mode.d.ts +0 -37
  310. package/dist/cli/doctor/auto-approve-mode.js +0 -80
  311. package/dist/cli/doctor/auto-approve-mode.js.map +0 -1
  312. package/dist/cli/doctor/bypass-without-auto-approve.d.ts +0 -38
  313. package/dist/cli/doctor/bypass-without-auto-approve.js +0 -95
  314. package/dist/cli/doctor/bypass-without-auto-approve.js.map +0 -1
  315. package/dist/cli/doctor/codex-config-drift.d.ts +0 -28
  316. package/dist/cli/doctor/codex-config-drift.js +0 -240
  317. package/dist/cli/doctor/codex-config-drift.js.map +0 -1
  318. package/dist/cli/doctor/rogue-ledger.d.ts +0 -53
  319. package/dist/cli/doctor/rogue-ledger.js +0 -153
  320. package/dist/cli/doctor/rogue-ledger.js.map +0 -1
  321. package/dist/cli/doctor/session-start-preflight-setup-version.d.ts +0 -83
  322. package/dist/cli/doctor/session-start-preflight-setup-version.js +0 -114
  323. package/dist/cli/doctor/session-start-preflight-setup-version.js.map +0 -1
  324. package/dist/cli/doctor/settings-drift.d.ts +0 -25
  325. package/dist/cli/doctor/settings-drift.js +0 -213
  326. package/dist/cli/doctor/settings-drift.js.map +0 -1
  327. package/dist/cli/doctor/toolchain-parity.d.ts +0 -63
  328. package/dist/cli/doctor/toolchain-parity.js +0 -154
  329. package/dist/cli/doctor/toolchain-parity.js.map +0 -1
  330. package/dist/cli/doctor/ug-auto-approvals.d.ts +0 -40
  331. package/dist/cli/doctor/ug-auto-approvals.js +0 -91
  332. package/dist/cli/doctor/ug-auto-approvals.js.map +0 -1
  333. package/dist/cli/doctor/ug-delegations.d.ts +0 -26
  334. package/dist/cli/doctor/ug-delegations.js +0 -121
  335. package/dist/cli/doctor/ug-delegations.js.map +0 -1
  336. package/dist/cli/doctor/ug-inflight.d.ts +0 -35
  337. package/dist/cli/doctor/ug-inflight.js +0 -57
  338. package/dist/cli/doctor/ug-inflight.js.map +0 -1
  339. package/dist/cli/doctor/understanding-mode-env.d.ts +0 -51
  340. package/dist/cli/doctor/understanding-mode-env.js +0 -98
  341. package/dist/cli/doctor/understanding-mode-env.js.map +0 -1
  342. package/dist/cli/dry-run.d.ts +0 -46
  343. package/dist/cli/dry-run.js +0 -250
  344. package/dist/cli/dry-run.js.map +0 -1
  345. package/dist/cli/event-input.d.ts +0 -28
  346. package/dist/cli/event-input.js +0 -73
  347. package/dist/cli/event-input.js.map +0 -1
  348. package/dist/cli/explain-action.d.ts +0 -20
  349. package/dist/cli/explain-action.js +0 -27
  350. package/dist/cli/explain-action.js.map +0 -1
  351. package/dist/cli/explain-policy.d.ts +0 -135
  352. package/dist/cli/explain-policy.js +0 -266
  353. package/dist/cli/explain-policy.js.map +0 -1
  354. package/dist/cli/explain.d.ts +0 -31
  355. package/dist/cli/explain.js +0 -159
  356. package/dist/cli/explain.js.map +0 -1
  357. package/dist/cli/gc/index.d.ts +0 -63
  358. package/dist/cli/gc/index.js +0 -566
  359. package/dist/cli/gc/index.js.map +0 -1
  360. package/dist/cli/pack/approve-escape.d.ts +0 -19
  361. package/dist/cli/pack/approve-escape.js +0 -190
  362. package/dist/cli/pack/approve-escape.js.map +0 -1
  363. package/dist/cli/pack/auto-approve-path.d.ts +0 -146
  364. package/dist/cli/pack/auto-approve-path.js +0 -462
  365. package/dist/cli/pack/auto-approve-path.js.map +0 -1
  366. package/dist/cli/pack/hook-codex-post-tool-use.d.ts +0 -25
  367. package/dist/cli/pack/hook-codex-post-tool-use.js +0 -160
  368. package/dist/cli/pack/hook-codex-post-tool-use.js.map +0 -1
  369. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +0 -48
  370. package/dist/cli/pack/hook-codex-pre-tool-use.js +0 -474
  371. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +0 -1
  372. package/dist/cli/pack/hook-codex-stop.d.ts +0 -35
  373. package/dist/cli/pack/hook-codex-stop.js +0 -329
  374. package/dist/cli/pack/hook-codex-stop.js.map +0 -1
  375. package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +0 -24
  376. package/dist/cli/pack/hook-codex-user-prompt-submit.js +0 -93
  377. package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +0 -1
  378. package/dist/cli/pack/hook-post-merge-gate-record.d.ts +0 -37
  379. package/dist/cli/pack/hook-post-merge-gate-record.js +0 -190
  380. package/dist/cli/pack/hook-post-merge-gate-record.js.map +0 -1
  381. package/dist/cli/pack/hook-post-merge-gate.d.ts +0 -34
  382. package/dist/cli/pack/hook-post-merge-gate.js +0 -277
  383. package/dist/cli/pack/hook-post-merge-gate.js.map +0 -1
  384. package/dist/cli/pack/hook-post-tool-use.d.ts +0 -45
  385. package/dist/cli/pack/hook-post-tool-use.js +0 -137
  386. package/dist/cli/pack/hook-post-tool-use.js.map +0 -1
  387. package/dist/cli/pack/hook-pre-tool-use.d.ts +0 -92
  388. package/dist/cli/pack/hook-pre-tool-use.js +0 -1328
  389. package/dist/cli/pack/hook-pre-tool-use.js.map +0 -1
  390. package/dist/cli/pack/hook-runtime-reality.d.ts +0 -63
  391. package/dist/cli/pack/hook-runtime-reality.js +0 -210
  392. package/dist/cli/pack/hook-runtime-reality.js.map +0 -1
  393. package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +0 -32
  394. package/dist/cli/pack/hook-solution-acceptance-writeguard.js +0 -337
  395. package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +0 -1
  396. package/dist/cli/pack/hook-solution-acceptance.d.ts +0 -157
  397. package/dist/cli/pack/hook-solution-acceptance.js +0 -530
  398. package/dist/cli/pack/hook-solution-acceptance.js.map +0 -1
  399. package/dist/cli/pack/hook-stay-in-scope.d.ts +0 -37
  400. package/dist/cli/pack/hook-stay-in-scope.js +0 -128
  401. package/dist/cli/pack/hook-stay-in-scope.js.map +0 -1
  402. package/dist/cli/pack/hook-subagent-start.d.ts +0 -23
  403. package/dist/cli/pack/hook-subagent-start.js +0 -88
  404. package/dist/cli/pack/hook-subagent-start.js.map +0 -1
  405. package/dist/cli/pack/hook-subagent-stop.d.ts +0 -19
  406. package/dist/cli/pack/hook-subagent-stop.js +0 -41
  407. package/dist/cli/pack/hook-subagent-stop.js.map +0 -1
  408. package/dist/cli/pack/hook-track-active-claim.d.ts +0 -27
  409. package/dist/cli/pack/hook-track-active-claim.js +0 -275
  410. package/dist/cli/pack/hook-track-active-claim.js.map +0 -1
  411. package/dist/cli/pack/transcript-report-scan.d.ts +0 -71
  412. package/dist/cli/pack/transcript-report-scan.js +0 -359
  413. package/dist/cli/pack/transcript-report-scan.js.map +0 -1
  414. package/dist/cli/pack/understanding-report-schema-hint.d.ts +0 -26
  415. package/dist/cli/pack/understanding-report-schema-hint.js +0 -120
  416. package/dist/cli/pack/understanding-report-schema-hint.js.map +0 -1
  417. package/dist/cli/pack/upgrade.d.ts +0 -32
  418. package/dist/cli/pack/upgrade.js +0 -273
  419. package/dist/cli/pack/upgrade.js.map +0 -1
  420. package/dist/cli/pause/index.d.ts +0 -113
  421. package/dist/cli/pause/index.js +0 -251
  422. package/dist/cli/pause/index.js.map +0 -1
  423. package/dist/cli/pause-check.d.ts +0 -22
  424. package/dist/cli/pause-check.js +0 -54
  425. package/dist/cli/pause-check.js.map +0 -1
  426. package/dist/cli/policy/intercept.d.ts +0 -233
  427. package/dist/cli/policy/intercept.js +0 -1020
  428. package/dist/cli/policy/intercept.js.map +0 -1
  429. package/dist/cli/policy/risk-envelope-enrichment.d.ts +0 -40
  430. package/dist/cli/policy/risk-envelope-enrichment.js +0 -108
  431. package/dist/cli/policy/risk-envelope-enrichment.js.map +0 -1
  432. package/dist/cli/record/index.d.ts +0 -81
  433. package/dist/cli/record/index.js +0 -348
  434. package/dist/cli/record/index.js.map +0 -1
  435. package/dist/cli/resolve-env.d.ts +0 -32
  436. package/dist/cli/resolve-env.js +0 -47
  437. package/dist/cli/resolve-env.js.map +0 -1
  438. package/dist/cli/session-export/index.d.ts +0 -46
  439. package/dist/cli/session-export/index.js +0 -169
  440. package/dist/cli/session-export/index.js.map +0 -1
  441. package/dist/cli/session-export/redact.d.ts +0 -22
  442. package/dist/cli/session-export/redact.js +0 -47
  443. package/dist/cli/session-export/redact.js.map +0 -1
  444. package/dist/cli/session-export/transcript.d.ts +0 -24
  445. package/dist/cli/session-export/transcript.js +0 -164
  446. package/dist/cli/session-export/transcript.js.map +0 -1
  447. package/dist/cli/session-start/branch-check.d.ts +0 -18
  448. package/dist/cli/session-start/branch-check.js +0 -140
  449. package/dist/cli/session-start/branch-check.js.map +0 -1
  450. package/dist/cli/session-start/index.d.ts +0 -121
  451. package/dist/cli/session-start/index.js +0 -591
  452. package/dist/cli/session-start/index.js.map +0 -1
  453. package/dist/cli/session-start/shared-options.d.ts +0 -103
  454. package/dist/cli/session-start/shared-options.js +0 -107
  455. package/dist/cli/session-start/shared-options.js.map +0 -1
  456. package/dist/cli/session-start/stale-base-check.d.ts +0 -46
  457. package/dist/cli/session-start/stale-base-check.js +0 -352
  458. package/dist/cli/session-start/stale-base-check.js.map +0 -1
  459. package/dist/cli/session-start/toolchain-parity.d.ts +0 -267
  460. package/dist/cli/session-start/toolchain-parity.js +0 -797
  461. package/dist/cli/session-start/toolchain-parity.js.map +0 -1
  462. package/dist/cli/smoke/assertions.d.ts +0 -46
  463. package/dist/cli/smoke/assertions.js +0 -170
  464. package/dist/cli/smoke/assertions.js.map +0 -1
  465. package/dist/cli/smoke/index.d.ts +0 -76
  466. package/dist/cli/smoke/index.js +0 -245
  467. package/dist/cli/smoke/index.js.map +0 -1
  468. package/dist/cli/smoke/runner.d.ts +0 -55
  469. package/dist/cli/smoke/runner.js +0 -134
  470. package/dist/cli/smoke/runner.js.map +0 -1
  471. package/dist/cli/smoke/stream-parser.d.ts +0 -65
  472. package/dist/cli/smoke/stream-parser.js +0 -115
  473. package/dist/cli/smoke/stream-parser.js.map +0 -1
  474. package/dist/cli/test-risk.d.ts +0 -26
  475. package/dist/cli/test-risk.js +0 -34
  476. package/dist/cli/test-risk.js.map +0 -1
  477. package/dist/io/display-path.d.ts +0 -11
  478. package/dist/io/display-path.js +0 -29
  479. package/dist/io/display-path.js.map +0 -1
  480. package/dist/io/duration.d.ts +0 -5
  481. package/dist/io/duration.js +0 -50
  482. package/dist/io/duration.js.map +0 -1
  483. package/dist/io/extract.d.ts +0 -79
  484. package/dist/io/extract.js +0 -226
  485. package/dist/io/extract.js.map +0 -1
  486. package/dist/io/ledger-record.d.ts +0 -83
  487. package/dist/io/ledger-record.js +0 -301
  488. package/dist/io/ledger-record.js.map +0 -1
  489. package/dist/io/read-json-dir-entries.d.ts +0 -36
  490. package/dist/io/read-json-dir-entries.js +0 -48
  491. package/dist/io/read-json-dir-entries.js.map +0 -1
  492. package/dist/io/safe-json-parse.d.ts +0 -5
  493. package/dist/io/safe-json-parse.js +0 -21
  494. package/dist/io/safe-json-parse.js.map +0 -1
  495. package/dist/policies/index.d.ts +0 -5
  496. package/dist/policies/index.js +0 -6
  497. package/dist/policies/index.js.map +0 -1
  498. package/dist/policies/ledger-client.d.ts +0 -113
  499. package/dist/policies/ledger-client.js +0 -500
  500. package/dist/policies/ledger-client.js.map +0 -1
  501. package/dist/policies/producers.d.ts +0 -12
  502. package/dist/policies/producers.js +0 -61
  503. package/dist/policies/producers.js.map +0 -1
  504. package/dist/policies/requires.d.ts +0 -75
  505. package/dist/policies/requires.js +0 -240
  506. package/dist/policies/requires.js.map +0 -1
  507. package/dist/policies/timestamp.d.ts +0 -14
  508. package/dist/policies/timestamp.js +0 -36
  509. package/dist/policies/timestamp.js.map +0 -1
  510. package/dist/policy-packs/builtin/permission-profiles.d.ts +0 -11
  511. package/dist/policy-packs/builtin/permission-profiles.js +0 -74
  512. package/dist/policy-packs/builtin/permission-profiles.js.map +0 -1
  513. package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +0 -286
  514. package/dist/policy-packs/builtin/post-merge-gate-runtime.js +0 -397
  515. package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +0 -1
  516. package/dist/policy-packs/builtin/post-merge-gate.d.ts +0 -56
  517. package/dist/policy-packs/builtin/post-merge-gate.js +0 -347
  518. package/dist/policy-packs/builtin/post-merge-gate.js.map +0 -1
  519. package/dist/policy-packs/builtin/solution-acceptance-reconnect.d.ts +0 -50
  520. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js +0 -151
  521. package/dist/policy-packs/builtin/solution-acceptance-reconnect.js.map +0 -1
  522. package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +0 -323
  523. package/dist/policy-packs/builtin/solution-acceptance-runtime.js +0 -672
  524. package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +0 -1
  525. package/dist/policy-packs/builtin/solution-acceptance.d.ts +0 -45
  526. package/dist/policy-packs/builtin/solution-acceptance.js +0 -226
  527. package/dist/policy-packs/builtin/solution-acceptance.js.map +0 -1
  528. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.d.ts +0 -25
  529. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js +0 -94
  530. package/dist/policy-packs/builtin/understanding-before-execution/active-claim.js.map +0 -1
  531. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.d.ts +0 -35
  532. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js +0 -86
  533. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve-default.js.map +0 -1
  534. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.d.ts +0 -210
  535. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js +0 -361
  536. package/dist/policy-packs/builtin/understanding-before-execution/auto-approve.js.map +0 -1
  537. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.d.ts +0 -304
  538. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js +0 -734
  539. package/dist/policy-packs/builtin/understanding-before-execution/delegation-markers.js.map +0 -1
  540. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.d.ts +0 -36
  541. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js +0 -73
  542. package/dist/policy-packs/builtin/understanding-before-execution/expiry-reason.js.map +0 -1
  543. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +0 -19
  544. package/dist/policy-packs/builtin/understanding-before-execution/index.js +0 -83
  545. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +0 -1
  546. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.d.ts +0 -135
  547. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js +0 -618
  548. package/dist/policy-packs/builtin/understanding-before-execution/inflight-records.js.map +0 -1
  549. package/dist/policy-packs/builtin/understanding-before-execution/ledger.d.ts +0 -25
  550. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js +0 -56
  551. package/dist/policy-packs/builtin/understanding-before-execution/ledger.js.map +0 -1
  552. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.d.ts +0 -20
  553. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js +0 -93
  554. package/dist/policy-packs/builtin/understanding-before-execution/lifecycle.js.map +0 -1
  555. package/dist/policy-packs/builtin/understanding-before-execution/markers.d.ts +0 -126
  556. package/dist/policy-packs/builtin/understanding-before-execution/markers.js +0 -245
  557. package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +0 -1
  558. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.d.ts +0 -29
  559. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js +0 -82
  560. package/dist/policy-packs/builtin/understanding-before-execution/measured-permission-modes.js.map +0 -1
  561. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.d.ts +0 -71
  562. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js +0 -175
  563. package/dist/policy-packs/builtin/understanding-before-execution/permission-mode-observations.js.map +0 -1
  564. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -620
  565. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +0 -1047
  566. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +0 -1
  567. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.d.ts +0 -128
  568. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js +0 -213
  569. package/dist/policy-packs/builtin/understanding-before-execution/post-tool-use-boundary.js.map +0 -1
  570. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.d.ts +0 -129
  571. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js +0 -166
  572. package/dist/policy-packs/builtin/understanding-before-execution/stay-in-scope-config.js.map +0 -1
  573. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.d.ts +0 -164
  574. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js +0 -275
  575. package/dist/policy-packs/builtin/understanding-before-execution/task-markers.js.map +0 -1
  576. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +0 -1
  577. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +0 -10
  578. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +0 -1
  579. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +0 -526
  580. package/dist/policy-packs/builtin/understanding-before-execution.js +0 -1074
  581. package/dist/policy-packs/builtin/understanding-before-execution.js.map +0 -1
  582. package/dist/policy-packs/permission-translator.d.ts +0 -9
  583. package/dist/policy-packs/permission-translator.js +0 -76
  584. package/dist/policy-packs/permission-translator.js.map +0 -1
  585. package/dist/runtime/action-envelope.d.ts +0 -64
  586. package/dist/runtime/action-envelope.js +0 -46
  587. package/dist/runtime/action-envelope.js.map +0 -1
  588. package/dist/runtime/approval-signing.d.ts +0 -111
  589. package/dist/runtime/approval-signing.js +0 -384
  590. package/dist/runtime/approval-signing.js.map +0 -1
  591. package/dist/runtime/bash-match-facts.d.ts +0 -60
  592. package/dist/runtime/bash-match-facts.js +0 -196
  593. package/dist/runtime/bash-match-facts.js.map +0 -1
  594. package/dist/runtime/bash-match-registry.d.ts +0 -112
  595. package/dist/runtime/bash-match-registry.js +0 -406
  596. package/dist/runtime/bash-match-registry.js.map +0 -1
  597. package/dist/runtime/bash-prefix-parse.d.ts +0 -31
  598. package/dist/runtime/bash-prefix-parse.js +0 -576
  599. package/dist/runtime/bash-prefix-parse.js.map +0 -1
  600. package/dist/runtime/command-normalize.d.ts +0 -658
  601. package/dist/runtime/command-normalize.js +0 -2410
  602. package/dist/runtime/command-normalize.js.map +0 -1
  603. package/dist/runtime/deletion-target-resolve.d.ts +0 -28
  604. package/dist/runtime/deletion-target-resolve.js +0 -1078
  605. package/dist/runtime/deletion-target-resolve.js.map +0 -1
  606. package/dist/runtime/destructive-shell-floor.d.ts +0 -19
  607. package/dist/runtime/destructive-shell-floor.js +0 -611
  608. package/dist/runtime/destructive-shell-floor.js.map +0 -1
  609. package/dist/runtime/environment-resolver.d.ts +0 -36
  610. package/dist/runtime/environment-resolver.js +0 -138
  611. package/dist/runtime/environment-resolver.js.map +0 -1
  612. package/dist/runtime/git-context.d.ts +0 -201
  613. package/dist/runtime/git-context.js +0 -422
  614. package/dist/runtime/git-context.js.map +0 -1
  615. package/dist/runtime/index.d.ts +0 -12
  616. package/dist/runtime/index.js +0 -13
  617. package/dist/runtime/index.js.map +0 -1
  618. package/dist/runtime/intercept.d.ts +0 -494
  619. package/dist/runtime/intercept.js +0 -1313
  620. package/dist/runtime/intercept.js.map +0 -1
  621. package/dist/runtime/kube-context.d.ts +0 -16
  622. package/dist/runtime/kube-context.js +0 -63
  623. package/dist/runtime/kube-context.js.map +0 -1
  624. package/dist/runtime/kubectl-target-parse.d.ts +0 -31
  625. package/dist/runtime/kubectl-target-parse.js +0 -249
  626. package/dist/runtime/kubectl-target-parse.js.map +0 -1
  627. package/dist/runtime/ledger-add.d.ts +0 -16
  628. package/dist/runtime/ledger-add.js +0 -150
  629. package/dist/runtime/ledger-add.js.map +0 -1
  630. package/dist/runtime/ledger-writer.d.ts +0 -27
  631. package/dist/runtime/ledger-writer.js +0 -46
  632. package/dist/runtime/ledger-writer.js.map +0 -1
  633. package/dist/runtime/pause-sentinel.d.ts +0 -60
  634. package/dist/runtime/pause-sentinel.js +0 -156
  635. package/dist/runtime/pause-sentinel.js.map +0 -1
  636. package/dist/runtime/pending-approval.d.ts +0 -23
  637. package/dist/runtime/pending-approval.js +0 -67
  638. package/dist/runtime/pending-approval.js.map +0 -1
  639. package/dist/runtime/read-only-bash.d.ts +0 -141
  640. package/dist/runtime/read-only-bash.js +0 -2204
  641. package/dist/runtime/read-only-bash.js.map +0 -1
  642. package/dist/runtime/recovery-git-commit.d.ts +0 -22
  643. package/dist/runtime/recovery-git-commit.js +0 -284
  644. package/dist/runtime/recovery-git-commit.js.map +0 -1
  645. package/dist/runtime/reject-malformed-session-id.d.ts +0 -8
  646. package/dist/runtime/reject-malformed-session-id.js +0 -16
  647. package/dist/runtime/reject-malformed-session-id.js.map +0 -1
  648. package/dist/runtime/risk-classifier.d.ts +0 -38
  649. package/dist/runtime/risk-classifier.js +0 -311
  650. package/dist/runtime/risk-classifier.js.map +0 -1
  651. package/dist/runtime/session-id.d.ts +0 -113
  652. package/dist/runtime/session-id.js +0 -193
  653. package/dist/runtime/session-id.js.map +0 -1
  654. package/dist/runtime/shell-word.d.ts +0 -62
  655. package/dist/runtime/shell-word.js +0 -410
  656. package/dist/runtime/shell-word.js.map +0 -1
  657. package/dist/runtime/task-providers/agent-tasks.d.ts +0 -103
  658. package/dist/runtime/task-providers/agent-tasks.js +0 -245
  659. package/dist/runtime/task-providers/agent-tasks.js.map +0 -1
  660. package/dist/runtime/when-eval.d.ts +0 -62
  661. package/dist/runtime/when-eval.js +0 -212
  662. package/dist/runtime/when-eval.js.map +0 -1
  663. package/dist/runtime/workflow-policies.d.ts +0 -207
  664. package/dist/runtime/workflow-policies.js +0 -596
  665. package/dist/runtime/workflow-policies.js.map +0 -1
  666. package/dist/schema/audit.d.ts +0 -71
  667. package/dist/schema/audit.js +0 -32
  668. package/dist/schema/audit.js.map +0 -1
  669. package/dist/schema/doctor.d.ts +0 -25
  670. package/dist/schema/doctor.js +0 -23
  671. package/dist/schema/doctor.js.map +0 -1
  672. package/dist/schema/environments.d.ts +0 -215
  673. package/dist/schema/environments.js +0 -101
  674. package/dist/schema/environments.js.map +0 -1
  675. package/dist/schema/extract.d.ts +0 -9
  676. package/dist/schema/extract.js +0 -86
  677. package/dist/schema/extract.js.map +0 -1
  678. package/dist/schema/permission-profiles.d.ts +0 -2292
  679. package/dist/schema/permission-profiles.js +0 -60
  680. package/dist/schema/permission-profiles.js.map +0 -1
  681. package/dist/schema/policies.d.ts +0 -974
  682. package/dist/schema/policies.js +0 -298
  683. package/dist/schema/policies.js.map +0 -1
  684. package/dist/schema/requires.d.ts +0 -131
  685. package/dist/schema/requires.js +0 -88
  686. package/dist/schema/requires.js.map +0 -1
  687. package/dist/schema/risk.d.ts +0 -144
  688. package/dist/schema/risk.js +0 -194
  689. package/dist/schema/risk.js.map +0 -1
  690. package/dist/schema/session-start-preflight.d.ts +0 -10
  691. package/dist/schema/session-start-preflight.js +0 -106
  692. package/dist/schema/session-start-preflight.js.map +0 -1
  693. package/dist/schema/stale-base-check.d.ts +0 -18
  694. package/dist/schema/stale-base-check.js +0 -37
  695. package/dist/schema/stale-base-check.js.map +0 -1
  696. package/dist/schema/toolchain-parity.d.ts +0 -21
  697. package/dist/schema/toolchain-parity.js +0 -48
  698. package/dist/schema/toolchain-parity.js.map +0 -1
  699. package/dist/schema/workflows.d.ts +0 -519
  700. package/dist/schema/workflows.js +0 -81
  701. package/dist/schema/workflows.js.map +0 -1
  702. package/scripts/runtime-reality-docker-probe.mjs +0 -71
@@ -1,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":"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"}
@@ -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