@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,63 +0,0 @@
1
- import type { Manifest } from "../../schema/index.js";
2
- import { type CollectNodeVersionResult, type CollectNpmGlobalsResult, type DriftItem } from "../session-start/toolchain-parity.js";
3
- /** One peer comparison, ready to render. Mirrors `PeerComparison` (session-start) plus a `status` roll-up for `countDiagnostics`. */
4
- export interface ToolchainParityPeerReport {
5
- peerProfile: string;
6
- /** `"drift"` is the only status that rolls into `warningCount` (see `countDiagnostics` in index.ts). */
7
- status: "ok" | "drift";
8
- driftCount: number;
9
- ageMs: number;
10
- /** `formatSnapshotAge(ageMs)` — human-scannable ("just now" / "3h" / "2d"). */
11
- ageLabel: string;
12
- drift: DriftItem[];
13
- }
14
- export interface ToolchainParitySection {
15
- /**
16
- * `"skipped"`: `--shallow` suppressed the live collection (no spawn).
17
- * `"no-peers"`: configured, but no comparable peer snapshot exists yet
18
- * (none present, or every present peer file was unreadable/corrupt).
19
- * `"ok"` / `"drift"`: at least one peer was compared.
20
- * All four are advisory — only `"drift"` peers roll into warningCount;
21
- * none of the four ever roll into errorCount.
22
- */
23
- status: "skipped" | "no-peers" | "ok" | "drift";
24
- message: string;
25
- /** This machine's resolved `toolchain_parity.profile` (post-sanitization). */
26
- profile: string;
27
- /** Empty for `"skipped"` / `"no-peers"`. */
28
- peers: ToolchainParityPeerReport[];
29
- /** Sum of `peers[].driftCount`. */
30
- driftTotal: number;
31
- /**
32
- * Peer files present in the machine-state directory that failed to
33
- * parse as a valid snapshot (informational only — never rolls into
34
- * `driftTotal` or any diagnostic counter, mirroring the producer's own
35
- * `unparseablePeerCount` treatment).
36
- */
37
- unparseablePeers: string[];
38
- }
39
- export interface RunDoctorToolchainParityOptions {
40
- /** Skips the live collection (no `node`/`npm` spawn) — mirrors `npmGlobalBin` / `claudeMcp`'s shallow behaviour. */
41
- shallow?: boolean;
42
- /** Overrides `toolchain_parity.workspace_root`'s fallback. Defaults to `process.cwd()`. */
43
- cwd?: string;
44
- /** Overrides "now" for deterministic snapshot-age tests. */
45
- now?: Date;
46
- nodeTimeoutMs?: number;
47
- npmTimeoutMs?: number;
48
- /** Inject the `node --version` collector (tests) — see `realNodeVersionSpawn`'s doc in the session-start module. */
49
- runNodeVersion?: (timeoutMs: number) => Promise<CollectNodeVersionResult>;
50
- /** Inject the `npm ls -g` collector (tests) — see `realNpmGlobalsSpawn`'s doc in the session-start module. */
51
- runNpmGlobals?: (timeoutMs: number) => Promise<CollectNpmGlobalsResult>;
52
- /** Inject the OW-Kit-version file reader (tests). */
53
- readOwKitVersion?: (workspaceRoot: string) => {
54
- version?: string;
55
- error?: string;
56
- };
57
- /** Inject the MCP-server-names file reader (tests). */
58
- readMcpServerNames?: () => {
59
- names: string[];
60
- error?: string;
61
- };
62
- }
63
- export declare function runDoctorToolchainParity(manifest: Manifest, opts?: RunDoctorToolchainParityOptions): Promise<ToolchainParitySection>;
@@ -1,154 +0,0 @@
1
- // Toolchain-parity doctor section (task 13919613, doctor companion to
2
- // `harness session-start toolchain-parity`). Reuses the Collector +
3
- // Comparator core straight from src/cli/session-start/toolchain-parity.ts
4
- // (`collectLocalSnapshot`, `compareToPeer`, `parseSnapshotJson`,
5
- // `formatSnapshotAge`, the real collectors, `sanitizeProfileName`,
6
- // `defaultMachineStateDir`) — see that module's header for the full
7
- // rationale of what each collected field means and how a peer comparison
8
- // is computed. No comparison logic is re-implemented here.
9
- //
10
- // Unlike the SessionStart producer, this check is READ-ONLY: it never
11
- // writes a snapshot file (that stays the producer's job — the thing that
12
- // actually keeps the machine-state directory populated for every OTHER
13
- // machine to compare against) and never touches the ledger. It only
14
- // answers "if I compared my current live toolchain against whatever peer
15
- // snapshots already exist, right now, what would I see?" — an on-demand
16
- // read of the same comparison SessionStart runs automatically.
17
- //
18
- // Advisory only: drift is always a warning, never an error, and this is
19
- // not any kind of gate (constraint carried over verbatim from the
20
- // producer's own contract).
21
- import * as fs from "node:fs";
22
- import * as os from "node:os";
23
- import * as path from "node:path";
24
- import { collectLocalSnapshot, compareToPeer, defaultMachineStateDir, formatSnapshotAge, parseSnapshotJson, realNodeVersionSpawn, realNpmGlobalsSpawn, realReadMcpServerNames, realReadOwKitVersion, sanitizeProfileName, } from "../session-start/toolchain-parity.js";
25
- // Same ceilings as the producer's own defaults (see that module's
26
- // timeout-constants comment for the full budget derivation) — doctor
27
- // pays the same worst-case spawn cost when it actually collects.
28
- const DEFAULT_NODE_TIMEOUT_MS = 2_000;
29
- const DEFAULT_NPM_GLOBALS_TIMEOUT_MS = 4_000;
30
- /**
31
- * A peer JSON filename (minus its `.json` suffix) is untrusted,
32
- * cross-machine-synced content (agent-memory-sync populates this
33
- * directory from other machines) — the same class of content the
34
- * producer's `note()` choke point CR/LF-strips before ever reaching a
35
- * stderr line (task c1b5ade5 R2b). This module hands its section back as
36
- * STRUCTURED data (profile strings, drift `message` strings assembled by
37
- * the reused `compareToPeer`), so the equivalent choke point lives at the
38
- * doctor FORMAT layer (`formatToolchainParitySection` in format.ts) —
39
- * every string this section produces that could carry a peer-controlled
40
- * value gets CR/LF-stripped there, at the point it actually becomes
41
- * terminal output, not here.
42
- */
43
- function peerLabelFromFileName(fileName) {
44
- return fileName.replace(/\.json$/, "") || fileName;
45
- }
46
- export async function runDoctorToolchainParity(manifest, opts = {}) {
47
- const config = manifest.toolchain_parity;
48
- const now = opts.now ?? new Date();
49
- const cwd = opts.cwd ?? process.cwd();
50
- const machineStateDir = config.machine_state_dir ?? defaultMachineStateDir();
51
- const profile = config.profile ?? sanitizeProfileName(os.hostname());
52
- const sanitizedProfile = sanitizeProfileName(profile);
53
- const ownFileName = `${sanitizedProfile}.json`;
54
- const workspaceRoot = config.workspace_root ?? cwd;
55
- const noPeers = (message) => ({
56
- status: "no-peers",
57
- message,
58
- profile,
59
- peers: [],
60
- driftTotal: 0,
61
- unparseablePeers: [],
62
- });
63
- // Peer-existence check runs BEFORE any collection: there is nothing to
64
- // compare the local live snapshot against without at least one peer
65
- // file, so this order avoids paying the node/npm spawn cost (and, in
66
- // `--shallow` mode, avoids the spawn-skip branch entirely having to be
67
- // reached) in the common "first machine, no peer has run session-start
68
- // toolchain-parity yet" case.
69
- let entries;
70
- try {
71
- entries = fs.readdirSync(machineStateDir);
72
- }
73
- catch {
74
- return noPeers(`no peer snapshots found (machine-state dir ${machineStateDir} does not exist yet); ` +
75
- "normal for the first machine, or before any peer has run `harness session-start toolchain-parity`");
76
- }
77
- const peerFiles = entries.filter((name) => name.endsWith(".json") && name !== ownFileName).sort();
78
- if (peerFiles.length === 0) {
79
- return noPeers(`no peer snapshots found in ${machineStateDir}; nothing to compare (normal for the first ` +
80
- "machine, or before any peer has run `harness session-start toolchain-parity`)");
81
- }
82
- if (opts.shallow) {
83
- return {
84
- status: "skipped",
85
- message: "harness doctor --shallow does not collect a live toolchain snapshot to compare",
86
- profile,
87
- peers: [],
88
- driftTotal: 0,
89
- unparseablePeers: [],
90
- };
91
- }
92
- const runNodeVersion = opts.runNodeVersion ?? realNodeVersionSpawn;
93
- const runNpmGlobals = opts.runNpmGlobals ?? realNpmGlobalsSpawn;
94
- const readOwKitVersion = opts.readOwKitVersion ?? realReadOwKitVersion;
95
- const readMcpServerNames = opts.readMcpServerNames ?? realReadMcpServerNames;
96
- const { snapshot: localSnapshot } = await collectLocalSnapshot({
97
- profile,
98
- now,
99
- workspaceRoot,
100
- nodeTimeoutMs: opts.nodeTimeoutMs ?? DEFAULT_NODE_TIMEOUT_MS,
101
- npmTimeoutMs: opts.npmTimeoutMs ?? DEFAULT_NPM_GLOBALS_TIMEOUT_MS,
102
- runNodeVersion,
103
- runNpmGlobals,
104
- readOwKitVersion,
105
- readMcpServerNames,
106
- });
107
- const peers = [];
108
- const unparseablePeers = [];
109
- let driftTotal = 0;
110
- for (const fileName of peerFiles) {
111
- const filePath = path.join(machineStateDir, fileName);
112
- let raw;
113
- try {
114
- raw = fs.readFileSync(filePath, "utf8");
115
- }
116
- catch {
117
- unparseablePeers.push(peerLabelFromFileName(fileName));
118
- continue;
119
- }
120
- const parsed = parseSnapshotJson(raw);
121
- if (!parsed.ok) {
122
- unparseablePeers.push(peerLabelFromFileName(fileName));
123
- continue;
124
- }
125
- const comparison = compareToPeer(localSnapshot, parsed.snapshot, now);
126
- driftTotal += comparison.drift.length;
127
- peers.push({
128
- peerProfile: comparison.peerProfile,
129
- status: comparison.drift.length === 0 ? "ok" : "drift",
130
- driftCount: comparison.drift.length,
131
- ageMs: comparison.ageMs,
132
- ageLabel: formatSnapshotAge(comparison.ageMs),
133
- drift: comparison.drift,
134
- });
135
- }
136
- if (peers.length === 0) {
137
- return {
138
- ...noPeers(`no comparable peer snapshots (all ${peerFiles.length} peer file(s) in ${machineStateDir} ` +
139
- "were unreadable/corrupt)"),
140
- unparseablePeers,
141
- };
142
- }
143
- return {
144
- status: driftTotal === 0 ? "ok" : "drift",
145
- message: driftTotal === 0
146
- ? `toolchain parity ok against ${peers.length} peer(s)`
147
- : `${driftTotal} drift item(s) found across ${peers.length} peer(s)`,
148
- profile,
149
- peers,
150
- driftTotal,
151
- unparseablePeers,
152
- };
153
- }
154
- //# sourceMappingURL=toolchain-parity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolchain-parity.js","sourceRoot":"","sources":["../../../src/cli/doctor/toolchain-parity.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- /** Default doctor window when `--recent-sessions` is not passed. */
2
- export declare const DEFAULT_RECENT_SESSIONS = 20;
3
- export interface AutoApprovalListingEntry {
4
- sessionId: string;
5
- mode: string;
6
- harness: string;
7
- approvedAt: string;
8
- }
9
- export interface UgAutoApprovalsSection {
10
- /** Whether `<generatedDir>/.approvals/` exists at all. */
11
- approvalsDirPresent: boolean;
12
- /** The `recentSessions` window that was applied. */
13
- windowSize: number;
14
- /** Auto approvals among the newest `windowSize` session markers. */
15
- autoApprovedCount: number;
16
- /** Per-mode breakdown of `autoApprovedCount` (e.g. `{bypassPermissions: 3}`). */
17
- byMode: Record<string, number>;
18
- /** Per-harness breakdown of `autoApprovedCount` (e.g. `{"claude-code": 3}`). */
19
- byHarness: Record<string, number>;
20
- /** `(sessionId, mode, approvedAt)` for each auto approval in the window, newest first. */
21
- entries: AutoApprovalListingEntry[];
22
- /**
23
- * Session markers whose body could not be read as JSON with a
24
- * parseable `approvedAt` (corrupt file, non-JSON content, missing
25
- * `approvedAt`). Excluded from the window (there is no timestamp to
26
- * sort them by) and never counted as auto approvals; surfaced as a
27
- * single summary count instead of per-file noise.
28
- */
29
- unreadableCount: number;
30
- }
31
- /**
32
- * Build the auto-approval listing + last-N metric. Pure filesystem read;
33
- * never throws for ordinary "nothing to see" states (missing
34
- * `.approvals/`, empty directory, every marker unreadable) — those all
35
- * resolve to an empty-ish section rather than an exception, mirroring
36
- * the rest of doctor's read-only checks.
37
- */
38
- export declare function buildUgAutoApprovals(generatedDir: string, opts: {
39
- recentSessions: number;
40
- }): UgAutoApprovalsSection;
@@ -1,91 +0,0 @@
1
- // Doctor visibility half of ADR docs/decisions/2026-08-27-ug-auto-mode-approval.md
2
- // slice 1 (agent-tasks 74b4b17d): the "auto approvals in the last N
3
- // sessions" listing named in the ADR's "Audit and doctor" section and
4
- // slice 1 acceptance criterion 7.
5
- //
6
- // Scans `<generatedDir>/.approvals/` for SESSION markers (skips the
7
- // per-task markers named `task-<id>` and the branch-protection markers
8
- // named `branch-protection-<sid>`, neither of which is a session
9
- // approval), sorts the readable ones newest-first by `approvedAt`,
10
- // takes the newest `recentSessions` of them, and reports how many of
11
- // THOSE were minted by the auto path (`approvedBy` starting with
12
- // `auto-mode:`, see auto-approve.ts's `parseAutoApprovedBy`).
13
- //
14
- // This is an AUDIT SURFACE, not a security check: it never verifies a
15
- // marker's HMAC signature (that is `checkApprovalMarker`'s job at gate
16
- // time; a forged marker still gets rejected there regardless of what
17
- // this listing shows) and it never blocks or writes anything.
18
- import * as path from "node:path";
19
- import { readJsonDirEntriesRejectingSymlinks } from "../../io/read-json-dir-entries.js";
20
- import { BRANCH_PROTECTION_MARKER_PREFIX } from "../../policy-packs/builtin/branch-protection-runtime.js";
21
- import { APPROVAL_MARKER_DIRNAME, APPROVAL_MARKER_TASK_PREFIX, parseAutoApprovedBy, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
22
- /** Default doctor window when `--recent-sessions` is not passed. */
23
- export const DEFAULT_RECENT_SESSIONS = 20;
24
- function emptySection(windowSize) {
25
- return {
26
- approvalsDirPresent: false,
27
- windowSize,
28
- autoApprovedCount: 0,
29
- byMode: {},
30
- byHarness: {},
31
- entries: [],
32
- unreadableCount: 0,
33
- };
34
- }
35
- /**
36
- * Build the auto-approval listing + last-N metric. Pure filesystem read;
37
- * never throws for ordinary "nothing to see" states (missing
38
- * `.approvals/`, empty directory, every marker unreadable) — those all
39
- * resolve to an empty-ish section rather than an exception, mirroring
40
- * the rest of doctor's read-only checks.
41
- */
42
- export function buildUgAutoApprovals(generatedDir, opts) {
43
- const windowSize = opts.recentSessions;
44
- const dir = path.join(generatedDir, APPROVAL_MARKER_DIRNAME);
45
- // A symlink / non-regular / raced-away entry is not a session marker this
46
- // listing owns an opinion about; the shared reader skips it silently
47
- // rather than counting it as "unreadable" (that count is for a FILE we
48
- // expected to be a marker but could not parse).
49
- const { dirPresent, entries: readable, unreadableCount } = readJsonDirEntriesRejectingSymlinks(dir, {
50
- skip: (name) => name.startsWith(APPROVAL_MARKER_TASK_PREFIX) || name.startsWith(BRANCH_PROTECTION_MARKER_PREFIX),
51
- parse: (raw, name) => {
52
- if (raw === null || typeof raw !== "object" || Array.isArray(raw))
53
- return null;
54
- const obj = raw;
55
- const approvedAt = obj["approvedAt"];
56
- if (typeof approvedAt !== "string" || Number.isNaN(Date.parse(approvedAt)))
57
- return null;
58
- return { sessionId: name, approvedAt, approvedBy: obj["approvedBy"] };
59
- },
60
- });
61
- if (!dirPresent)
62
- return emptySection(windowSize);
63
- readable.sort((a, b) => Date.parse(b.approvedAt) - Date.parse(a.approvedAt));
64
- const windowed = readable.slice(0, windowSize);
65
- const byMode = {};
66
- const byHarness = {};
67
- const entries = [];
68
- for (const m of windowed) {
69
- const parsedAuto = parseAutoApprovedBy(m.approvedBy);
70
- if (parsedAuto === null)
71
- continue;
72
- byMode[parsedAuto.mode] = (byMode[parsedAuto.mode] ?? 0) + 1;
73
- byHarness[parsedAuto.harness] = (byHarness[parsedAuto.harness] ?? 0) + 1;
74
- entries.push({
75
- sessionId: m.sessionId,
76
- mode: parsedAuto.mode,
77
- harness: parsedAuto.harness,
78
- approvedAt: m.approvedAt,
79
- });
80
- }
81
- return {
82
- approvalsDirPresent: true,
83
- windowSize,
84
- autoApprovedCount: entries.length,
85
- byMode,
86
- byHarness,
87
- entries,
88
- unreadableCount,
89
- };
90
- }
91
- //# sourceMappingURL=ug-auto-approvals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ug-auto-approvals.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-auto-approvals.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,oEAAoE;AACpE,sEAAsE;AACtE,kCAAkC;AAClC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,iEAAiE;AACjE,mEAAmE;AACnE,qEAAqE;AACrE,iEAAiE;AACjE,8DAA8D;AAC9D,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,8DAA8D;AAE9D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,mCAAmC,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,yDAAyD,CAAC;AAC1G,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,oEAAoE,CAAC;AAE5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAgC1C,SAAS,YAAY,CAAC,UAAkB;IACtC,OAAO;QACL,mBAAmB,EAAE,KAAK;QAC1B,UAAU;QACV,iBAAiB,EAAE,CAAC;QACpB,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,eAAe,EAAE,CAAC;KACnB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,IAAgC;IAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;IAE7D,0EAA0E;IAC1E,qEAAqE;IACrE,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,mCAAmC,CAI3F,GAAG,EAAE;QACN,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC;QAClG,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACnB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/E,MAAM,GAAG,GAAG,GAA8B,CAAC;YAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YACrC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACxE,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU;QAAE,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;IAEjD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,KAAK,IAAI;YAAE,SAAS;QAClC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7D,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,mBAAmB,EAAE,IAAI;QACzB,UAAU;QACV,iBAAiB,EAAE,OAAO,CAAC,MAAM;QACjC,MAAM;QACN,SAAS;QACT,OAAO;QACP,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -1,26 +0,0 @@
1
- export interface UgDelegationsSection {
2
- /** Whether `<generatedDir>/.delegations/` exists at all. */
3
- delegationsDirPresent: boolean;
4
- /** Delegation files found in `.delegations/`, readable or not. */
5
- total: number;
6
- /** Of `total`, how many parsed with an `expires` segment in the past. */
7
- expired: number;
8
- /** Of `total`, how many were not valid JSON, or failed `parseDelegationApprovedBy`. */
9
- unreadable: number;
10
- }
11
- /**
12
- * Build the delegations-on-disk doctor metric. Pure filesystem read;
13
- * never throws for "nothing to see" states (missing `.delegations/`,
14
- * empty directory, every file unreadable), those all resolve to a
15
- * zero-ish section, mirroring `buildUgAutoApprovals`. `total`/`expired`/
16
- * `unreadable` read `0` for both an EMPTY and a MISSING directory; only
17
- * `delegationsDirPresent` tells them apart, the same way
18
- * `approvalsDirPresent` does for `buildUgAutoApprovals`, doctor's
19
- * render layer uses it to stay silent when there is truly nothing on
20
- * disk (`format.ts`'s own "no line for a check that found nothing"
21
- * convention) while still rendering the zero-count line for a
22
- * `harness delegate`-touched, now-empty directory.
23
- */
24
- export declare function buildUgDelegations(generatedDir: string, opts?: {
25
- now?: Date;
26
- }): UgDelegationsSection;
@@ -1,121 +0,0 @@
1
- // Doctor visibility for slice 3 delegations (ADR
2
- // docs/decisions/2026-08-27-ug-auto-mode-approval.md, "Audit and
3
- // doctor", agent-tasks 37ad0b05): "delegations on disk: <count>
4
- // (<count> expired)" from `<generatedDir>/.delegations/`, distinct from
5
- // the `.approvals/` auto-approval listing in `ug-auto-approvals.ts`.
6
- //
7
- // SEPARATE DIRECTORY, DELIBERATELY: a delegation never lands in
8
- // `.approvals/` (delegation-markers.ts's module header), so this scan
9
- // reads `DELEGATION_MARKER_DIRNAME` (".delegations") only and never
10
- // touches the approvals directory `ug-auto-approvals.ts` owns. Mirrors
11
- // that module's read-only-audit shape (no signature verification here
12
- // either; a forged delegation still gets rejected by the dedicated
13
- // verifier at gate time, `delegation-markers.ts`'s `verifyDelegation`)
14
- // but does not share its code: the two scans read different
15
- // directories, filter differently (no task-marker / branch-protection
16
- // prefix skip here), and count differently (an approval count vs. an
17
- // expiry count), so a shared helper would mostly be parameters threading
18
- // through an otherwise-empty shell. `npm run check:duplication` is the
19
- // backstop if that stops being true.
20
- import * as fs from "node:fs";
21
- import * as path from "node:path";
22
- import { readRegularFileRejectingSymlink } from "../../io/read-regular-file.js";
23
- import { safeJsonParse } from "../../io/safe-json-parse.js";
24
- import { DELEGATION_MARKER_DIRNAME, parseDelegationApprovedBy, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
25
- function emptySection() {
26
- return { delegationsDirPresent: false, total: 0, expired: 0, unreadable: 0 };
27
- }
28
- /**
29
- * A delegation filename is always a session id: a UUID handed out by
30
- * Claude Code or Codex, or (in this repo's own test fixtures) a short
31
- * alnum/hyphen placeholder. Neither ever contains a literal `.` or
32
- * starts with one. Filtering on that BEFORE the read is what keeps
33
- * filesystem debris that happens to sit next to `.delegations/` files
34
- * (macOS's `.DS_Store`, a stray `foo.txt`) from counting toward `total`
35
- * at all: without it, such a file reads as valid-but-not-JSON and rolls
36
- * into `unreadable`, which flips this metric's doctor line from
37
- * informational (ℹ) straight to a WARNING (⚠) for debris that was never
38
- * a delegation to begin with. Mirrors the same non-empty/no-traversal
39
- * shape family `rejectMalformedSessionId` pins for a delegation's own
40
- * filename on the write side (`delegationMarkerPathFor`), tightened to
41
- * additionally exclude a dot, which is the part that actually
42
- * discriminates a stray dotfile from a real session id.
43
- */
44
- const SESSION_ID_BASENAME_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
45
- /**
46
- * Build the delegations-on-disk doctor metric. Pure filesystem read;
47
- * never throws for "nothing to see" states (missing `.delegations/`,
48
- * empty directory, every file unreadable), those all resolve to a
49
- * zero-ish section, mirroring `buildUgAutoApprovals`. `total`/`expired`/
50
- * `unreadable` read `0` for both an EMPTY and a MISSING directory; only
51
- * `delegationsDirPresent` tells them apart, the same way
52
- * `approvalsDirPresent` does for `buildUgAutoApprovals`, doctor's
53
- * render layer uses it to stay silent when there is truly nothing on
54
- * disk (`format.ts`'s own "no line for a check that found nothing"
55
- * convention) while still rendering the zero-count line for a
56
- * `harness delegate`-touched, now-empty directory.
57
- */
58
- export function buildUgDelegations(generatedDir, opts = {}) {
59
- const now = opts.now ?? new Date();
60
- const dir = path.join(generatedDir, DELEGATION_MARKER_DIRNAME);
61
- let dirStat;
62
- try {
63
- dirStat = fs.lstatSync(dir);
64
- }
65
- catch {
66
- return emptySection();
67
- }
68
- if (!dirStat.isDirectory())
69
- return emptySection();
70
- let dirents;
71
- try {
72
- dirents = fs.readdirSync(dir, { withFileTypes: true });
73
- }
74
- catch {
75
- return emptySection();
76
- }
77
- let total = 0;
78
- let expired = 0;
79
- let unreadable = 0;
80
- for (const d of dirents) {
81
- // Not a session-id-shaped basename: never a delegation file (a
82
- // stray dotfile, an extensioned file, a directory, ...), skip
83
- // before even reading it. The once-per-session adoption ledger is
84
- // never nested under here: `.delegation-adoptions/` is a SIBLING of
85
- // `.delegations/` (see delegation-markers.ts's module header), so
86
- // this filter has no ledger-shaped entry to reason about; an
87
- // ordinary session-id-named directory would still fall through to
88
- // the `not-regular` skip below, same as any other directory would.
89
- if (!SESSION_ID_BASENAME_RE.test(d.name))
90
- continue;
91
- const full = path.join(dir, d.name);
92
- const read = readRegularFileRejectingSymlink(full);
93
- // A symlink / non-regular / raced-away entry is not a delegation
94
- // file this metric owns an opinion about; skip silently, same
95
- // reasoning as `buildUgAutoApprovals`.
96
- if (read.kind === "symlink" || read.kind === "not-regular" || read.kind === "missing") {
97
- continue;
98
- }
99
- total++;
100
- if (read.kind === "unreadable") {
101
- unreadable++;
102
- continue;
103
- }
104
- const parsed = safeJsonParse(read.content);
105
- if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
106
- unreadable++;
107
- continue;
108
- }
109
- const obj = parsed;
110
- const segments = parseDelegationApprovedBy(obj["approvedBy"]);
111
- if (!segments.ok) {
112
- unreadable++;
113
- continue;
114
- }
115
- if (Date.parse(segments.value.expiresAt) <= now.getTime()) {
116
- expired++;
117
- }
118
- }
119
- return { delegationsDirPresent: true, total, expired, unreadable };
120
- }
121
- //# sourceMappingURL=ug-delegations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ug-delegations.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-delegations.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- export interface UgInflightSection {
2
- /** Whether `<generatedDir>/.inflight/` exists at all. */
3
- inflightDirPresent: boolean;
4
- /** Records found and readable, across every session directory. */
5
- total: number;
6
- /**
7
- * Of `total`, how many have an `approvedAt` older than the staleness
8
- * window, or dated implausibly far in the future (clock skew or
9
- * tampering — this is an audit listing, not a trust decision, so
10
- * either counts as stale, mirroring `listInflightRecords`'s own doc).
11
- */
12
- stale: number;
13
- /** Entries gc/doctor could not make sense of (debris, unreadable, missing/bad approvedAt). */
14
- skipped: number;
15
- }
16
- /**
17
- * Build the in-flight-records-on-disk doctor metric. Pure filesystem
18
- * read, never throws: a missing or empty `.inflight/` resolves to a
19
- * zero-ish section, mirroring `buildUgDelegations`. `inflightDirPresent`
20
- * is the only field that tells "missing" and "present but empty" apart,
21
- * same convention `delegationsDirPresent` follows — doctor's render
22
- * layer uses it to stay silent when there is truly nothing on disk.
23
- *
24
- * lstat, not `existsSync` (which follows a symlink to whatever it
25
- * points at): a symlinked `.inflight/` reads as absent here, the same
26
- * way a symlinked record file already reads as absent one level down.
27
- * Still needed even though `listInflightRecords` now applies the same
28
- * lstat guard internally: this function's own check is what decides
29
- * `inflightDirPresent`, a flag `listInflightRecords`'s return shape has
30
- * no room for, and that doctor's render layer needs to tell "absent"
31
- * apart from "present but empty".
32
- */
33
- export declare function buildUgInflight(generatedDir: string, opts?: {
34
- now?: Date;
35
- }): UgInflightSection;
@@ -1,57 +0,0 @@
1
- // Doctor visibility for in-flight subagent records (subagent-gate
2
- // slice 1, docs/decisions/2026-08-27-ug-auto-mode-approval.md
3
- // "Invariants", "Threat model", "Delegation marker shape"): "in-flight
4
- // subagent records on disk: <count> (<count> stale)" from
5
- // `<generatedDir>/.inflight/`, distinct from the `.delegations/`
6
- // listing in `ug-delegations.ts` and the `.approvals/` one in
7
- // `ug-auto-approvals.ts`.
8
- //
9
- // Thin wrapper around `listInflightRecords`, which already owns the
10
- // filesystem walk, the staleness computation and the tolerant-of-
11
- // debris posture; this file only shapes that result into the section
12
- // `harness doctor`'s report type expects, mirroring how
13
- // `ug-delegations.ts` sits beside `delegation-markers.ts`'s own reader.
14
- import * as fs from "node:fs";
15
- import * as path from "node:path";
16
- import { INFLIGHT_RECORD_DIRNAME, listInflightRecords, } from "../../policy-packs/builtin/understanding-before-execution/index.js";
17
- function emptySection() {
18
- return { inflightDirPresent: false, total: 0, stale: 0, skipped: 0 };
19
- }
20
- /**
21
- * Build the in-flight-records-on-disk doctor metric. Pure filesystem
22
- * read, never throws: a missing or empty `.inflight/` resolves to a
23
- * zero-ish section, mirroring `buildUgDelegations`. `inflightDirPresent`
24
- * is the only field that tells "missing" and "present but empty" apart,
25
- * same convention `delegationsDirPresent` follows — doctor's render
26
- * layer uses it to stay silent when there is truly nothing on disk.
27
- *
28
- * lstat, not `existsSync` (which follows a symlink to whatever it
29
- * points at): a symlinked `.inflight/` reads as absent here, the same
30
- * way a symlinked record file already reads as absent one level down.
31
- * Still needed even though `listInflightRecords` now applies the same
32
- * lstat guard internally: this function's own check is what decides
33
- * `inflightDirPresent`, a flag `listInflightRecords`'s return shape has
34
- * no room for, and that doctor's render layer needs to tell "absent"
35
- * apart from "present but empty".
36
- */
37
- export function buildUgInflight(generatedDir, opts = {}) {
38
- const dir = path.join(generatedDir, INFLIGHT_RECORD_DIRNAME);
39
- let stat;
40
- try {
41
- stat = fs.lstatSync(dir);
42
- }
43
- catch {
44
- return emptySection();
45
- }
46
- if (!stat.isDirectory()) {
47
- return emptySection();
48
- }
49
- const result = listInflightRecords(generatedDir, opts.now);
50
- return {
51
- inflightDirPresent: true,
52
- total: result.total,
53
- stale: result.stale,
54
- skipped: result.skipped.length,
55
- };
56
- }
57
- //# sourceMappingURL=ug-inflight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ug-inflight.js","sourceRoot":"","sources":["../../../src/cli/doctor/ug-inflight.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8DAA8D;AAC9D,uEAAuE;AACvE,0DAA0D;AAC1D,iEAAiE;AACjE,8DAA8D;AAC9D,0BAA0B;AAC1B,EAAE;AACF,oEAAoE;AACpE,kEAAkE;AAClE,qEAAqE;AACrE,wDAAwD;AACxD,wEAAwE;AAExE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,oEAAoE,CAAC;AAkB5E,SAAS,YAAY;IACnB,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,OAAuB,EAAE;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;IAC7D,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO;QACL,kBAAkB,EAAE,IAAI;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC"}