@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,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":"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"}
@@ -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"}
@@ -1,51 +0,0 @@
1
- import { type Mode } from "../../policy-packs/builtin/understanding-before-execution.js";
2
- import type { Manifest } from "../../schema/index.js";
3
- import type { PolicyPack } from "../../schema/policy-packs.js";
4
- export interface UnderstandingModeEnvDivergence {
5
- /** `UNDERSTANDING_GATE_MODE`, normalised (trim + lowercase, mirrors `resolveMode`'s own normalisation). */
6
- envMode: Mode;
7
- /** `policy_packs[understanding-before-execution].config.mode`, resolved via the config-only (GENERATION-path) resolver. */
8
- configMode: Mode;
9
- /**
10
- * Short headline, rendered as the `⚠` line itself. Mirrors the
11
- * npm-global-bin-off-PATH advisory's rendering idiom (`format.ts`'s
12
- * Environment section): a one-line headline plus indented {@link detail}
13
- * lines underneath, instead of one long sentence crammed onto the `⚠`
14
- * line.
15
- */
16
- message: string;
17
- /**
18
- * 2-3 indented lines rendered directly under {@link message} by
19
- * `format.ts`. Carries the explanation and remediation the old
20
- * single-line `message` used to carry inline.
21
- */
22
- detail: string[];
23
- }
24
- /**
25
- * Pure: manifest + env in, a divergence report out (or `undefined` when
26
- * there is nothing to flag). Only fires when:
27
- * - the `understanding-before-execution` pack is declared AND enabled
28
- * (a pack that never runs has no live mode for the env to diverge
29
- * from — mirrors the enabled-gate other doctor sections use, e.g.
30
- * `buildGrounding`'s `groundingServer` lookup in `index.ts`);
31
- * - `UNDERSTANDING_GATE_MODE` is set to a non-empty value AND, once
32
- * trimmed/lower-cased the same way `resolveMode` normalises it,
33
- * resolves to a recognised {@link Mode}. An env value the live
34
- * runtime would itself reject (unset, empty, or unrecognised) cannot
35
- * diverge from anything — the live resolver falls back to
36
- * `config.mode` in that case too, so there is no enforcement gap to
37
- * warn about.
38
- * - the normalised env mode differs from the resolved `config.mode`.
39
- */
40
- /**
41
- * Shared gate for the understanding-gate doctor sub-checks that only
42
- * make sense when the pack is actually live: this divergence advisory,
43
- * and (ADR docs/decisions/2026-08-27-ug-auto-mode-approval.md slice 1,
44
- * agent-tasks 74b4b17d) the auto-approval listing and settings-drift
45
- * checks. Declared-but-disabled counts as not enabled, mirroring the
46
- * `p.enabled !== false` gate `checkUnderstandingModeEnvDivergence` uses
47
- * inline below.
48
- */
49
- export declare function findEnabledUnderstandingPack(manifest: Manifest): PolicyPack | undefined;
50
- export declare function isUnderstandingPackEnabled(manifest: Manifest): boolean;
51
- export declare function checkUnderstandingModeEnvDivergence(manifest: Manifest, env: NodeJS.ProcessEnv): UnderstandingModeEnvDivergence | undefined;