@red-codes/agentguard 1.0.0 → 1.1.1

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 (434) hide show
  1. package/dist/args.d.ts.map +1 -0
  2. package/dist/args.js.map +1 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +29190 -0
  5. package/dist/bin.js.map +7 -0
  6. package/dist/colors.d.ts.map +1 -0
  7. package/dist/colors.js.map +1 -0
  8. package/dist/commands/adoption.d.ts +2 -0
  9. package/dist/commands/adoption.d.ts.map +1 -0
  10. package/dist/commands/adoption.js +172 -0
  11. package/dist/commands/adoption.js.map +1 -0
  12. package/dist/commands/analytics.d.ts +3 -0
  13. package/dist/commands/analytics.d.ts.map +1 -0
  14. package/dist/commands/analytics.js +7 -0
  15. package/dist/commands/analytics.js.map +1 -0
  16. package/dist/commands/audit-verify.d.ts +3 -0
  17. package/dist/commands/audit-verify.d.ts.map +1 -0
  18. package/dist/commands/audit-verify.js +94 -0
  19. package/dist/commands/audit-verify.js.map +1 -0
  20. package/dist/commands/auto-setup.d.ts +28 -0
  21. package/dist/commands/auto-setup.d.ts.map +1 -0
  22. package/dist/commands/auto-setup.js +146 -0
  23. package/dist/commands/auto-setup.js.map +1 -0
  24. package/dist/commands/ci-check.d.ts +13 -0
  25. package/dist/commands/ci-check.d.ts.map +1 -0
  26. package/dist/commands/ci-check.js +286 -0
  27. package/dist/commands/ci-check.js.map +1 -0
  28. package/dist/commands/claude-hook.d.ts +2 -0
  29. package/dist/commands/claude-hook.d.ts.map +1 -0
  30. package/dist/commands/claude-hook.js +254 -0
  31. package/dist/commands/claude-hook.js.map +1 -0
  32. package/dist/commands/claude-init.d.ts.map +1 -0
  33. package/dist/commands/claude-init.js +401 -0
  34. package/dist/commands/claude-init.js.map +1 -0
  35. package/dist/commands/config.d.ts +39 -0
  36. package/dist/commands/config.d.ts.map +1 -0
  37. package/dist/commands/config.js +368 -0
  38. package/dist/commands/config.js.map +1 -0
  39. package/dist/commands/demo.d.ts +2 -0
  40. package/dist/commands/demo.d.ts.map +1 -0
  41. package/dist/commands/demo.js +100 -0
  42. package/dist/commands/demo.js.map +1 -0
  43. package/dist/commands/diff.d.ts +3 -0
  44. package/dist/commands/diff.d.ts.map +1 -0
  45. package/dist/commands/diff.js +364 -0
  46. package/dist/commands/diff.js.map +1 -0
  47. package/dist/commands/evidence-pr.d.ts +3 -0
  48. package/dist/commands/evidence-pr.d.ts.map +1 -0
  49. package/dist/commands/evidence-pr.js +162 -0
  50. package/dist/commands/evidence-pr.js.map +1 -0
  51. package/dist/commands/export.d.ts +22 -0
  52. package/dist/commands/export.d.ts.map +1 -0
  53. package/dist/commands/export.js +92 -0
  54. package/dist/commands/export.js.map +1 -0
  55. package/dist/commands/guard.d.ts +21 -0
  56. package/dist/commands/guard.d.ts.map +1 -0
  57. package/dist/commands/guard.js +272 -0
  58. package/dist/commands/guard.js.map +1 -0
  59. package/dist/commands/import.d.ts +3 -0
  60. package/dist/commands/import.d.ts.map +1 -0
  61. package/dist/{cli/commands → commands}/import.js +25 -26
  62. package/dist/commands/import.js.map +1 -0
  63. package/dist/commands/init.d.ts +5 -0
  64. package/dist/commands/init.d.ts.map +1 -0
  65. package/dist/commands/init.js +1288 -0
  66. package/dist/commands/init.js.map +1 -0
  67. package/dist/commands/inspect.d.ts +4 -0
  68. package/dist/commands/inspect.d.ts.map +1 -0
  69. package/dist/{cli/commands → commands}/inspect.js +97 -70
  70. package/dist/commands/inspect.js.map +1 -0
  71. package/dist/commands/learn.d.ts +2 -0
  72. package/dist/commands/learn.d.ts.map +1 -0
  73. package/dist/commands/learn.js +264 -0
  74. package/dist/commands/learn.js.map +1 -0
  75. package/dist/commands/migrate.d.ts +3 -0
  76. package/dist/commands/migrate.d.ts.map +1 -0
  77. package/dist/commands/migrate.js +270 -0
  78. package/dist/commands/migrate.js.map +1 -0
  79. package/dist/commands/plugin.d.ts.map +1 -0
  80. package/dist/{cli/commands → commands}/plugin.js +2 -2
  81. package/dist/commands/plugin.js.map +1 -0
  82. package/dist/commands/policy-verify.d.ts +46 -0
  83. package/dist/commands/policy-verify.d.ts.map +1 -0
  84. package/dist/commands/policy-verify.js +173 -0
  85. package/dist/commands/policy-verify.js.map +1 -0
  86. package/dist/commands/policy.d.ts +27 -0
  87. package/dist/commands/policy.d.ts.map +1 -0
  88. package/dist/commands/policy.js +590 -0
  89. package/dist/commands/policy.js.map +1 -0
  90. package/dist/{cli/commands → commands}/replay.d.ts +2 -1
  91. package/dist/commands/replay.d.ts.map +1 -0
  92. package/dist/{cli/commands → commands}/replay.js +78 -12
  93. package/dist/commands/replay.js.map +1 -0
  94. package/dist/commands/session-viewer.d.ts +5 -0
  95. package/dist/commands/session-viewer.d.ts.map +1 -0
  96. package/dist/commands/session-viewer.js +462 -0
  97. package/dist/commands/session-viewer.js.map +1 -0
  98. package/dist/commands/simulate.d.ts +7 -0
  99. package/dist/commands/simulate.d.ts.map +1 -0
  100. package/dist/commands/simulate.js +505 -0
  101. package/dist/commands/simulate.js.map +1 -0
  102. package/dist/commands/status.d.ts +2 -0
  103. package/dist/commands/status.d.ts.map +1 -0
  104. package/dist/commands/status.js +212 -0
  105. package/dist/commands/status.js.map +1 -0
  106. package/dist/commands/traces.d.ts +24 -0
  107. package/dist/commands/traces.d.ts.map +1 -0
  108. package/dist/commands/traces.js +282 -0
  109. package/dist/commands/traces.js.map +1 -0
  110. package/dist/commands/trust.d.ts +6 -0
  111. package/dist/commands/trust.d.ts.map +1 -0
  112. package/dist/commands/trust.js +129 -0
  113. package/dist/commands/trust.js.map +1 -0
  114. package/dist/evidence-summary.d.ts +35 -0
  115. package/dist/evidence-summary.d.ts.map +1 -0
  116. package/dist/evidence-summary.js +202 -0
  117. package/dist/evidence-summary.js.map +1 -0
  118. package/dist/{cli/file-event-store.d.ts → file-event-store.d.ts} +1 -1
  119. package/dist/file-event-store.d.ts.map +1 -0
  120. package/dist/{cli/file-event-store.js → file-event-store.js} +1 -1
  121. package/dist/file-event-store.js.map +1 -0
  122. package/{hooks → dist/hooks}/post-commit +3 -1
  123. package/{hooks → dist/hooks}/post-merge +3 -1
  124. package/dist/hooks/pre-commit +29 -0
  125. package/dist/policy-resolver.d.ts +32 -0
  126. package/dist/policy-resolver.d.ts.map +1 -0
  127. package/dist/policy-resolver.js +171 -0
  128. package/dist/policy-resolver.js.map +1 -0
  129. package/dist/{cli/recorder.d.ts → recorder.d.ts} +1 -1
  130. package/dist/recorder.d.ts.map +1 -0
  131. package/dist/{cli/recorder.js → recorder.js} +1 -1
  132. package/dist/recorder.js.map +1 -0
  133. package/dist/replay-timeline-html.d.ts +21 -0
  134. package/dist/replay-timeline-html.d.ts.map +1 -0
  135. package/dist/replay-timeline-html.js +414 -0
  136. package/dist/replay-timeline-html.js.map +1 -0
  137. package/dist/replay.d.ts.map +1 -0
  138. package/dist/{cli/replay.js → replay.js} +92 -1
  139. package/dist/replay.js.map +1 -0
  140. package/dist/{cli/session-store.d.ts → session-store.d.ts} +5 -0
  141. package/dist/session-store.d.ts.map +1 -0
  142. package/dist/{cli/session-store.js → session-store.js} +1 -0
  143. package/dist/session-store.js.map +1 -0
  144. package/dist/session-viewer-html.d.ts +10 -0
  145. package/dist/session-viewer-html.d.ts.map +1 -0
  146. package/dist/session-viewer-html.js +737 -0
  147. package/dist/session-viewer-html.js.map +1 -0
  148. package/dist/templates/ci-only.yaml +103 -0
  149. package/dist/templates/development.yaml +107 -0
  150. package/dist/templates/permissive.yaml +87 -0
  151. package/dist/templates/strict.yaml +112 -0
  152. package/dist/tui.d.ts +3 -0
  153. package/dist/tui.d.ts.map +1 -0
  154. package/dist/tui.js +2 -0
  155. package/dist/tui.js.map +1 -0
  156. package/package.json +42 -53
  157. package/README.md +0 -298
  158. package/dist/adapters/claude-code.d.ts +0 -24
  159. package/dist/adapters/claude-code.d.ts.map +0 -1
  160. package/dist/adapters/claude-code.js +0 -99
  161. package/dist/adapters/claude-code.js.map +0 -1
  162. package/dist/adapters/file.d.ts +0 -3
  163. package/dist/adapters/file.d.ts.map +0 -1
  164. package/dist/adapters/file.js +0 -35
  165. package/dist/adapters/file.js.map +0 -1
  166. package/dist/adapters/git.d.ts +0 -3
  167. package/dist/adapters/git.d.ts.map +0 -1
  168. package/dist/adapters/git.js +0 -61
  169. package/dist/adapters/git.js.map +0 -1
  170. package/dist/adapters/registry.d.ts +0 -5
  171. package/dist/adapters/registry.d.ts.map +0 -1
  172. package/dist/adapters/registry.js +0 -15
  173. package/dist/adapters/registry.js.map +0 -1
  174. package/dist/adapters/shell.d.ts +0 -8
  175. package/dist/adapters/shell.d.ts.map +0 -1
  176. package/dist/adapters/shell.js +0 -27
  177. package/dist/adapters/shell.js.map +0 -1
  178. package/dist/cli/args.d.ts.map +0 -1
  179. package/dist/cli/args.js.map +0 -1
  180. package/dist/cli/bin.d.ts.map +0 -1
  181. package/dist/cli/bin.js +0 -5769
  182. package/dist/cli/bin.js.map +0 -7
  183. package/dist/cli/colors.d.ts.map +0 -1
  184. package/dist/cli/colors.js.map +0 -1
  185. package/dist/cli/commands/claude-hook.d.ts +0 -2
  186. package/dist/cli/commands/claude-hook.d.ts.map +0 -1
  187. package/dist/cli/commands/claude-hook.js +0 -110
  188. package/dist/cli/commands/claude-hook.js.map +0 -1
  189. package/dist/cli/commands/claude-init.d.ts.map +0 -1
  190. package/dist/cli/commands/claude-init.js +0 -150
  191. package/dist/cli/commands/claude-init.js.map +0 -1
  192. package/dist/cli/commands/export.d.ts +0 -11
  193. package/dist/cli/commands/export.d.ts.map +0 -1
  194. package/dist/cli/commands/export.js +0 -113
  195. package/dist/cli/commands/export.js.map +0 -1
  196. package/dist/cli/commands/guard.d.ts +0 -12
  197. package/dist/cli/commands/guard.d.ts.map +0 -1
  198. package/dist/cli/commands/guard.js +0 -145
  199. package/dist/cli/commands/guard.js.map +0 -1
  200. package/dist/cli/commands/import.d.ts +0 -2
  201. package/dist/cli/commands/import.d.ts.map +0 -1
  202. package/dist/cli/commands/import.js.map +0 -1
  203. package/dist/cli/commands/inspect.d.ts +0 -3
  204. package/dist/cli/commands/inspect.d.ts.map +0 -1
  205. package/dist/cli/commands/inspect.js.map +0 -1
  206. package/dist/cli/commands/plugin.d.ts.map +0 -1
  207. package/dist/cli/commands/plugin.js.map +0 -1
  208. package/dist/cli/commands/replay.d.ts.map +0 -1
  209. package/dist/cli/commands/replay.js.map +0 -1
  210. package/dist/cli/file-event-store.d.ts.map +0 -1
  211. package/dist/cli/file-event-store.js.map +0 -1
  212. package/dist/cli/policy-resolver.d.ts +0 -4
  213. package/dist/cli/policy-resolver.d.ts.map +0 -1
  214. package/dist/cli/policy-resolver.js +0 -62
  215. package/dist/cli/policy-resolver.js.map +0 -1
  216. package/dist/cli/recorder.d.ts.map +0 -1
  217. package/dist/cli/recorder.js.map +0 -1
  218. package/dist/cli/replay.d.ts.map +0 -1
  219. package/dist/cli/replay.js.map +0 -1
  220. package/dist/cli/session-store.d.ts.map +0 -1
  221. package/dist/cli/session-store.js.map +0 -1
  222. package/dist/cli/tui.d.ts +0 -24
  223. package/dist/cli/tui.d.ts.map +0 -1
  224. package/dist/cli/tui.js +0 -197
  225. package/dist/cli/tui.js.map +0 -1
  226. package/dist/core/actions.d.ts +0 -11
  227. package/dist/core/actions.d.ts.map +0 -1
  228. package/dist/core/actions.js +0 -112
  229. package/dist/core/actions.js.map +0 -1
  230. package/dist/core/adapters.d.ts +0 -19
  231. package/dist/core/adapters.d.ts.map +0 -1
  232. package/dist/core/adapters.js +0 -85
  233. package/dist/core/adapters.js.map +0 -1
  234. package/dist/core/execution-log/bridge.d.ts +0 -12
  235. package/dist/core/execution-log/bridge.d.ts.map +0 -1
  236. package/dist/core/execution-log/bridge.js +0 -112
  237. package/dist/core/execution-log/bridge.js.map +0 -1
  238. package/dist/core/execution-log/event-log.d.ts +0 -7
  239. package/dist/core/execution-log/event-log.d.ts.map +0 -1
  240. package/dist/core/execution-log/event-log.js +0 -103
  241. package/dist/core/execution-log/event-log.js.map +0 -1
  242. package/dist/core/execution-log/event-projections.d.ts +0 -28
  243. package/dist/core/execution-log/event-projections.d.ts.map +0 -1
  244. package/dist/core/execution-log/event-projections.js +0 -272
  245. package/dist/core/execution-log/event-projections.js.map +0 -1
  246. package/dist/core/execution-log/event-schema.d.ts +0 -56
  247. package/dist/core/execution-log/event-schema.d.ts.map +0 -1
  248. package/dist/core/execution-log/event-schema.js +0 -160
  249. package/dist/core/execution-log/event-schema.js.map +0 -1
  250. package/dist/core/execution-log/index.d.ts +0 -7
  251. package/dist/core/execution-log/index.d.ts.map +0 -1
  252. package/dist/core/execution-log/index.js +0 -13
  253. package/dist/core/execution-log/index.js.map +0 -1
  254. package/dist/core/hash.d.ts +0 -5
  255. package/dist/core/hash.d.ts.map +0 -1
  256. package/dist/core/hash.js +0 -13
  257. package/dist/core/hash.js.map +0 -1
  258. package/dist/core/rng.d.ts +0 -29
  259. package/dist/core/rng.d.ts.map +0 -1
  260. package/dist/core/rng.js +0 -48
  261. package/dist/core/rng.js.map +0 -1
  262. package/dist/core/types.d.ts +0 -746
  263. package/dist/core/types.d.ts.map +0 -1
  264. package/dist/core/types.js +0 -8
  265. package/dist/core/types.js.map +0 -1
  266. package/dist/events/bus.d.ts +0 -24
  267. package/dist/events/bus.d.ts.map +0 -1
  268. package/dist/events/bus.js +0 -64
  269. package/dist/events/bus.js.map +0 -1
  270. package/dist/events/decision-jsonl.d.ts +0 -8
  271. package/dist/events/decision-jsonl.d.ts.map +0 -1
  272. package/dist/events/decision-jsonl.js +0 -44
  273. package/dist/events/decision-jsonl.js.map +0 -1
  274. package/dist/events/jsonl.d.ts +0 -8
  275. package/dist/events/jsonl.d.ts.map +0 -1
  276. package/dist/events/jsonl.js +0 -46
  277. package/dist/events/jsonl.js.map +0 -1
  278. package/dist/events/schema.d.ts +0 -59
  279. package/dist/events/schema.d.ts.map +0 -1
  280. package/dist/events/schema.js +0 -296
  281. package/dist/events/schema.js.map +0 -1
  282. package/dist/events/store.d.ts +0 -7
  283. package/dist/events/store.d.ts.map +0 -1
  284. package/dist/events/store.js +0 -64
  285. package/dist/events/store.js.map +0 -1
  286. package/dist/invariants/checker.d.ts +0 -15
  287. package/dist/invariants/checker.d.ts.map +0 -1
  288. package/dist/invariants/checker.js +0 -52
  289. package/dist/invariants/checker.js.map +0 -1
  290. package/dist/invariants/definitions.d.ts +0 -33
  291. package/dist/invariants/definitions.d.ts.map +0 -1
  292. package/dist/invariants/definitions.js +0 -168
  293. package/dist/invariants/definitions.js.map +0 -1
  294. package/dist/kernel/aab.d.ts +0 -26
  295. package/dist/kernel/aab.d.ts.map +0 -1
  296. package/dist/kernel/aab.js +0 -149
  297. package/dist/kernel/aab.js.map +0 -1
  298. package/dist/kernel/blast-radius.d.ts +0 -60
  299. package/dist/kernel/blast-radius.d.ts.map +0 -1
  300. package/dist/kernel/blast-radius.js +0 -146
  301. package/dist/kernel/blast-radius.js.map +0 -1
  302. package/dist/kernel/decision.d.ts +0 -40
  303. package/dist/kernel/decision.d.ts.map +0 -1
  304. package/dist/kernel/decision.js +0 -92
  305. package/dist/kernel/decision.js.map +0 -1
  306. package/dist/kernel/decisions/factory.d.ts +0 -12
  307. package/dist/kernel/decisions/factory.d.ts.map +0 -1
  308. package/dist/kernel/decisions/factory.js +0 -56
  309. package/dist/kernel/decisions/factory.js.map +0 -1
  310. package/dist/kernel/decisions/types.d.ts +0 -70
  311. package/dist/kernel/decisions/types.d.ts.map +0 -1
  312. package/dist/kernel/decisions/types.js +0 -5
  313. package/dist/kernel/decisions/types.js.map +0 -1
  314. package/dist/kernel/evidence.d.ts +0 -29
  315. package/dist/kernel/evidence.d.ts.map +0 -1
  316. package/dist/kernel/evidence.js +0 -61
  317. package/dist/kernel/evidence.js.map +0 -1
  318. package/dist/kernel/kernel.d.ts +0 -47
  319. package/dist/kernel/kernel.d.ts.map +0 -1
  320. package/dist/kernel/kernel.js +0 -377
  321. package/dist/kernel/kernel.js.map +0 -1
  322. package/dist/kernel/monitor.d.ts +0 -35
  323. package/dist/kernel/monitor.d.ts.map +0 -1
  324. package/dist/kernel/monitor.js +0 -144
  325. package/dist/kernel/monitor.js.map +0 -1
  326. package/dist/kernel/replay-comparator.d.ts +0 -72
  327. package/dist/kernel/replay-comparator.d.ts.map +0 -1
  328. package/dist/kernel/replay-comparator.js +0 -251
  329. package/dist/kernel/replay-comparator.js.map +0 -1
  330. package/dist/kernel/replay-engine.d.ts +0 -108
  331. package/dist/kernel/replay-engine.d.ts.map +0 -1
  332. package/dist/kernel/replay-engine.js +0 -241
  333. package/dist/kernel/replay-engine.js.map +0 -1
  334. package/dist/kernel/replay-processor.d.ts +0 -109
  335. package/dist/kernel/replay-processor.d.ts.map +0 -1
  336. package/dist/kernel/replay-processor.js +0 -118
  337. package/dist/kernel/replay-processor.js.map +0 -1
  338. package/dist/kernel/simulation/filesystem-simulator.d.ts +0 -3
  339. package/dist/kernel/simulation/filesystem-simulator.d.ts.map +0 -1
  340. package/dist/kernel/simulation/filesystem-simulator.js +0 -81
  341. package/dist/kernel/simulation/filesystem-simulator.js.map +0 -1
  342. package/dist/kernel/simulation/git-simulator.d.ts +0 -5
  343. package/dist/kernel/simulation/git-simulator.d.ts.map +0 -1
  344. package/dist/kernel/simulation/git-simulator.js +0 -115
  345. package/dist/kernel/simulation/git-simulator.js.map +0 -1
  346. package/dist/kernel/simulation/package-simulator.d.ts +0 -5
  347. package/dist/kernel/simulation/package-simulator.d.ts.map +0 -1
  348. package/dist/kernel/simulation/package-simulator.js +0 -164
  349. package/dist/kernel/simulation/package-simulator.js.map +0 -1
  350. package/dist/kernel/simulation/registry.d.ts +0 -3
  351. package/dist/kernel/simulation/registry.d.ts.map +0 -1
  352. package/dist/kernel/simulation/registry.js +0 -24
  353. package/dist/kernel/simulation/registry.js.map +0 -1
  354. package/dist/kernel/simulation/types.d.ts +0 -35
  355. package/dist/kernel/simulation/types.d.ts.map +0 -1
  356. package/dist/kernel/simulation/types.js +0 -4
  357. package/dist/kernel/simulation/types.js.map +0 -1
  358. package/dist/plugins/discovery.d.ts +0 -45
  359. package/dist/plugins/discovery.d.ts.map +0 -1
  360. package/dist/plugins/discovery.js +0 -89
  361. package/dist/plugins/discovery.js.map +0 -1
  362. package/dist/plugins/index.d.ts +0 -10
  363. package/dist/plugins/index.d.ts.map +0 -1
  364. package/dist/plugins/index.js +0 -7
  365. package/dist/plugins/index.js.map +0 -1
  366. package/dist/plugins/registry.d.ts +0 -52
  367. package/dist/plugins/registry.d.ts.map +0 -1
  368. package/dist/plugins/registry.js +0 -148
  369. package/dist/plugins/registry.js.map +0 -1
  370. package/dist/plugins/sandbox.d.ts +0 -87
  371. package/dist/plugins/sandbox.d.ts.map +0 -1
  372. package/dist/plugins/sandbox.js +0 -122
  373. package/dist/plugins/sandbox.js.map +0 -1
  374. package/dist/plugins/types.d.ts +0 -61
  375. package/dist/plugins/types.d.ts.map +0 -1
  376. package/dist/plugins/types.js +0 -16
  377. package/dist/plugins/types.js.map +0 -1
  378. package/dist/plugins/validator.d.ts +0 -36
  379. package/dist/plugins/validator.d.ts.map +0 -1
  380. package/dist/plugins/validator.js +0 -276
  381. package/dist/plugins/validator.js.map +0 -1
  382. package/dist/policy/evaluator.d.ts +0 -41
  383. package/dist/policy/evaluator.d.ts.map +0 -1
  384. package/dist/policy/evaluator.js +0 -111
  385. package/dist/policy/evaluator.js.map +0 -1
  386. package/dist/policy/loader.d.ts +0 -13
  387. package/dist/policy/loader.d.ts.map +0 -1
  388. package/dist/policy/loader.js +0 -118
  389. package/dist/policy/loader.js.map +0 -1
  390. package/dist/policy/pack-loader.d.ts +0 -40
  391. package/dist/policy/pack-loader.d.ts.map +0 -1
  392. package/dist/policy/pack-loader.js +0 -138
  393. package/dist/policy/pack-loader.js.map +0 -1
  394. package/dist/policy/yaml-loader.d.ts +0 -23
  395. package/dist/policy/yaml-loader.d.ts.map +0 -1
  396. package/dist/policy/yaml-loader.js +0 -222
  397. package/dist/policy/yaml-loader.js.map +0 -1
  398. package/dist/renderers/index.d.ts +0 -6
  399. package/dist/renderers/index.d.ts.map +0 -1
  400. package/dist/renderers/index.js +0 -4
  401. package/dist/renderers/index.js.map +0 -1
  402. package/dist/renderers/registry.d.ts +0 -39
  403. package/dist/renderers/registry.d.ts.map +0 -1
  404. package/dist/renderers/registry.js +0 -97
  405. package/dist/renderers/registry.js.map +0 -1
  406. package/dist/renderers/tui-renderer.d.ts +0 -18
  407. package/dist/renderers/tui-renderer.d.ts.map +0 -1
  408. package/dist/renderers/tui-renderer.js +0 -57
  409. package/dist/renderers/tui-renderer.js.map +0 -1
  410. package/dist/renderers/types.d.ts +0 -52
  411. package/dist/renderers/types.d.ts.map +0 -1
  412. package/dist/renderers/types.js +0 -4
  413. package/dist/renderers/types.js.map +0 -1
  414. package/dist/telemetry/index.d.ts +0 -3
  415. package/dist/telemetry/index.d.ts.map +0 -1
  416. package/dist/telemetry/index.js +0 -2
  417. package/dist/telemetry/index.js.map +0 -1
  418. package/dist/telemetry/runtimeLogger.d.ts +0 -9
  419. package/dist/telemetry/runtimeLogger.d.ts.map +0 -1
  420. package/dist/telemetry/runtimeLogger.js +0 -68
  421. package/dist/telemetry/runtimeLogger.js.map +0 -1
  422. package/dist/telemetry/types.d.ts +0 -22
  423. package/dist/telemetry/types.d.ts.map +0 -1
  424. package/dist/telemetry/types.js +0 -4
  425. package/dist/telemetry/types.js.map +0 -1
  426. package/hooks/pre-commit +0 -28
  427. /package/dist/{cli/args.d.ts → args.d.ts} +0 -0
  428. /package/dist/{cli/args.js → args.js} +0 -0
  429. /package/dist/{cli/bin.d.ts → bin.d.ts} +0 -0
  430. /package/dist/{cli/colors.d.ts → colors.d.ts} +0 -0
  431. /package/dist/{cli/colors.js → colors.js} +0 -0
  432. /package/dist/{cli/commands → commands}/claude-init.d.ts +0 -0
  433. /package/dist/{cli/commands → commands}/plugin.d.ts +0 -0
  434. /package/dist/{cli/replay.d.ts → replay.d.ts} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/cli/args.ts", "../../src/policy/evaluator.ts", "../../src/core/hash.ts", "../../src/events/schema.ts", "../../src/kernel/blast-radius.ts", "../../src/kernel/aab.ts", "../../src/invariants/checker.ts", "../../src/kernel/evidence.ts", "../../src/policy/loader.ts", "../../src/invariants/definitions.ts", "../../src/kernel/decision.ts", "../../src/events/bus.ts", "../../src/events/store.ts", "../../src/kernel/monitor.ts", "../../src/core/actions.ts", "../../src/core/adapters.ts", "../../src/kernel/decisions/factory.ts", "../../src/core/rng.ts", "../../src/kernel/kernel.ts", "../../src/adapters/file.ts", "../../src/adapters/shell.ts", "../../src/adapters/git.ts", "../../src/adapters/registry.ts", "../../src/events/jsonl.ts", "../../src/events/decision-jsonl.ts", "../../src/telemetry/runtimeLogger.ts", "../../src/policy/yaml-loader.ts", "../../src/policy/pack-loader.ts", "../../src/cli/policy-resolver.ts", "../../src/kernel/simulation/registry.ts", "../../src/kernel/simulation/git-simulator.ts", "../../src/kernel/simulation/filesystem-simulator.ts", "../../src/kernel/simulation/package-simulator.ts", "../../src/renderers/registry.ts", "../../src/cli/tui.ts", "../../src/renderers/tui-renderer.ts", "../../src/cli/commands/guard.ts", "../../src/cli/commands/inspect.ts", "../../src/cli/session-store.ts", "../../src/cli/colors.ts", "../../src/cli/replay.ts", "../../src/cli/commands/export.ts", "../../src/cli/commands/import.ts", "../../src/plugins/types.ts", "../../src/plugins/validator.ts", "../../src/plugins/registry.ts", "../../src/plugins/discovery.ts", "../../src/cli/commands/plugin.ts", "../../src/cli/commands/claude-init.ts", "../../src/adapters/claude-code.ts", "../../src/cli/commands/claude-hook.ts", "../../src/cli/bin.ts"],
4
- "sourcesContent": ["// Lightweight CLI argument parser \u2014 zero dependencies.\n\ninterface ArgSpec {\n boolean?: string[];\n string?: string[];\n alias?: Record<string, string>;\n stopAt?: string;\n}\n\ninterface ParseResult {\n flags: Record<string, string | boolean | null>;\n positional: string[];\n rest: string[];\n}\n\nexport function parseArgs(argv: string[], spec: ArgSpec = {}): ParseResult {\n const booleans = new Set(spec.boolean || []);\n const strings = new Set(spec.string || []);\n const alias = spec.alias || {};\n const stopAt = spec.stopAt || null;\n\n const flags: Record<string, string | boolean | null> = {};\n const positional: string[] = [];\n let rest: string[] = [];\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n\n if (stopAt && arg === stopAt) {\n rest = argv.slice(i + 1);\n break;\n }\n\n const resolved = alias[arg] || arg;\n\n if (booleans.has(resolved) || booleans.has(arg)) {\n flags[resolved.replace(/^-+/, '')] = true;\n } else if (strings.has(resolved) || strings.has(arg)) {\n const key = resolved.replace(/^-+/, '');\n const value = argv[i + 1];\n if (!value || value.startsWith('-')) {\n flags[key] = null;\n } else {\n flags[key] = value;\n i++;\n }\n } else if (arg.startsWith('-')) {\n flags[arg.replace(/^-+/, '')] = true;\n } else {\n positional.push(arg);\n }\n }\n\n return { flags, positional, rest };\n}\n\ninterface CommandHelp {\n name: string;\n description: string;\n usage: string;\n flags?: Array<{ flag: string; description: string }>;\n examples?: string[];\n}\n\nexport function formatHelp(cmd: CommandHelp): string {\n const lines: string[] = [];\n lines.push(` \\x1b[1m${cmd.name}\\x1b[0m \u2014 ${cmd.description}`);\n lines.push('');\n lines.push(` \\x1b[1mUsage:\\x1b[0m ${cmd.usage}`);\n\n if (cmd.flags && cmd.flags.length > 0) {\n lines.push('');\n lines.push(' \\x1b[1mFlags:\\x1b[0m');\n const maxLen = Math.max(...cmd.flags.map((f) => f.flag.length));\n for (const f of cmd.flags) {\n lines.push(` ${f.flag.padEnd(maxLen + 2)} ${f.description}`);\n }\n }\n\n if (cmd.examples && cmd.examples.length > 0) {\n lines.push('');\n lines.push(' \\x1b[1mExamples:\\x1b[0m');\n for (const ex of cmd.examples) {\n lines.push(` ${ex}`);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n", "// Policy evaluator \u2014 matches actions against loaded policies.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nexport interface PolicyRule {\n action: string | string[];\n effect: 'allow' | 'deny';\n conditions?: {\n scope?: string[];\n limit?: number;\n branches?: string[];\n requireTests?: boolean;\n };\n reason?: string;\n}\n\nexport interface LoadedPolicy {\n id: string;\n name: string;\n description?: string;\n rules: PolicyRule[];\n severity: number;\n}\n\nexport interface NormalizedIntent {\n action: string;\n target: string;\n agent: string;\n branch?: string;\n command?: string;\n filesAffected?: number;\n metadata?: Record<string, unknown>;\n destructive: boolean;\n}\n\nexport interface EvalResult {\n allowed: boolean;\n decision: 'allow' | 'deny';\n matchedRule: PolicyRule | null;\n matchedPolicy: LoadedPolicy | null;\n reason: string;\n severity: number;\n}\n\nfunction matchAction(pattern: string, action: string): boolean {\n if (pattern === '*') return true;\n if (pattern === action) return true;\n\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -2);\n return action.startsWith(prefix + '.');\n }\n\n return false;\n}\n\nfunction matchScope(scopePatterns: string[], target: string): boolean {\n if (!scopePatterns || scopePatterns.length === 0) return true;\n if (!target) return true;\n\n for (const pattern of scopePatterns) {\n if (pattern === '*') return true;\n if (pattern === target) return true;\n if (pattern.endsWith('/') && target.startsWith(pattern)) return true;\n if (pattern.startsWith('*')) {\n const suffix = pattern.slice(1);\n if (target.endsWith(suffix)) return true;\n }\n }\n\n return false;\n}\n\nfunction matchConditions(conditions: PolicyRule['conditions'], intent: NormalizedIntent): boolean {\n if (!conditions) return true;\n\n if (conditions.scope && !matchScope(conditions.scope, intent.target)) {\n return false;\n }\n\n if (conditions.limit !== undefined && intent.filesAffected !== undefined) {\n if (intent.filesAffected > conditions.limit) {\n return true;\n }\n }\n\n if (conditions.branches && intent.branch) {\n if (conditions.branches.includes(intent.branch)) {\n return true;\n }\n }\n\n return true;\n}\n\nexport function evaluate(intent: NormalizedIntent, policies: LoadedPolicy[]): EvalResult {\n if (!intent || !intent.action) {\n return {\n allowed: false,\n decision: 'deny',\n matchedRule: null,\n matchedPolicy: null,\n reason: 'Intent is missing required field: action',\n severity: 5,\n };\n }\n\n for (const policy of policies) {\n for (const rule of policy.rules) {\n if (rule.effect !== 'deny') continue;\n\n const actions = Array.isArray(rule.action) ? rule.action : [rule.action];\n const actionMatches = actions.some((pattern) => matchAction(pattern, intent.action));\n\n if (!actionMatches) continue;\n\n if (matchConditions(rule.conditions, intent)) {\n return {\n allowed: false,\n decision: 'deny',\n matchedRule: rule,\n matchedPolicy: policy,\n reason: rule.reason || `Denied by policy \"${policy.name}\"`,\n severity: policy.severity,\n };\n }\n }\n }\n\n for (const policy of policies) {\n for (const rule of policy.rules) {\n if (rule.effect !== 'allow') continue;\n\n const actions = Array.isArray(rule.action) ? rule.action : [rule.action];\n const actionMatches = actions.some((pattern) => matchAction(pattern, intent.action));\n\n if (actionMatches && matchConditions(rule.conditions, intent)) {\n return {\n allowed: true,\n decision: 'allow',\n matchedRule: rule,\n matchedPolicy: policy,\n reason: rule.reason || `Allowed by policy \"${policy.name}\"`,\n severity: 0,\n };\n }\n }\n }\n\n return {\n allowed: true,\n decision: 'allow',\n matchedRule: null,\n matchedPolicy: null,\n reason: 'No matching policy \u2014 default allow',\n severity: 0,\n };\n}\n\nexport { matchAction, matchScope };\n", "// Shared hash utility \u2014 lightweight string hashing for fingerprints and event IDs\n// No DOM, no Node.js APIs \u2014 pure function.\n\n/**\n * Simple string hash returning a base-36 string.\n */\nexport function simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;\n }\n return Math.abs(hash).toString(36);\n}\n", "// Canonical domain events for AgentGuard\n// All systems emit and consume these event types.\n// No DOM, no Node.js APIs \u2014 pure data definitions.\n\nimport type { EventKind, EventSchema, DomainEvent, ValidationResult } from '../core/types.js';\nimport { simpleHash } from '../core/hash.js';\n\n// --- Event Kinds ---\n// Ingestion pipeline\nexport const ERROR_OBSERVED: EventKind = 'ErrorObserved';\nexport const BUG_CLASSIFIED: EventKind = 'BugClassified';\n\n// Battle lifecycle \u2014 values match existing battle-core.js event strings\nexport const ENCOUNTER_STARTED: EventKind = 'ENCOUNTER_STARTED';\nexport const MOVE_USED: EventKind = 'MOVE_USED';\nexport const DAMAGE_DEALT: EventKind = 'DAMAGE_DEALT';\nexport const HEALING_APPLIED: EventKind = 'HEALING_APPLIED';\nexport const PASSIVE_ACTIVATED: EventKind = 'PASSIVE_ACTIVATED';\nexport const BUGMON_FAINTED: EventKind = 'BUGMON_FAINTED';\nexport const CACHE_ATTEMPTED: EventKind = 'CACHE_ATTEMPTED';\nexport const CACHE_SUCCESS: EventKind = 'CACHE_SUCCESS';\nexport const BATTLE_ENDED: EventKind = 'BATTLE_ENDED';\n\n// Progression\nexport const ACTIVITY_RECORDED: EventKind = 'ActivityRecorded';\nexport const EVOLUTION_TRIGGERED: EventKind = 'EvolutionTriggered';\n\n// Session\nexport const STATE_CHANGED: EventKind = 'StateChanged';\nexport const RUN_STARTED: EventKind = 'RunStarted';\nexport const RUN_ENDED: EventKind = 'RunEnded';\nexport const CHECKPOINT_REACHED: EventKind = 'CheckpointReached';\n\n// Governance\nexport const POLICY_DENIED: EventKind = 'PolicyDenied';\nexport const UNAUTHORIZED_ACTION: EventKind = 'UnauthorizedAction';\nexport const INVARIANT_VIOLATION: EventKind = 'InvariantViolation';\nexport const BLAST_RADIUS_EXCEEDED: EventKind = 'BlastRadiusExceeded';\nexport const MERGE_GUARD_FAILURE: EventKind = 'MergeGuardFailure';\nexport const EVIDENCE_PACK_GENERATED: EventKind = 'EvidencePackGenerated';\n\n// Reference Monitor (Agent Action Boundary)\nexport const ACTION_REQUESTED: EventKind = 'ActionRequested';\nexport const ACTION_ALLOWED: EventKind = 'ActionAllowed';\nexport const ACTION_DENIED: EventKind = 'ActionDenied';\nexport const ACTION_ESCALATED: EventKind = 'ActionEscalated';\nexport const ACTION_EXECUTED: EventKind = 'ActionExecuted';\nexport const ACTION_FAILED: EventKind = 'ActionFailed';\n\n// Decision Records\nexport const DECISION_RECORDED: EventKind = 'DecisionRecorded';\n\n// Simulation\nexport const SIMULATION_COMPLETED: EventKind = 'SimulationCompleted';\n\n// Pipeline\nexport const PIPELINE_STARTED: EventKind = 'PipelineStarted';\nexport const STAGE_COMPLETED: EventKind = 'StageCompleted';\nexport const STAGE_FAILED: EventKind = 'StageFailed';\nexport const PIPELINE_COMPLETED: EventKind = 'PipelineCompleted';\nexport const PIPELINE_FAILED: EventKind = 'PipelineFailed';\nexport const FILE_SCOPE_VIOLATION: EventKind = 'FileScopeViolation';\n\n// Developer Signals\nexport const FILE_SAVED: EventKind = 'FileSaved';\nexport const TEST_COMPLETED: EventKind = 'TestCompleted';\nexport const BUILD_COMPLETED: EventKind = 'BuildCompleted';\nexport const COMMIT_CREATED: EventKind = 'CommitCreated';\nexport const CODE_REVIEWED: EventKind = 'CodeReviewed';\nexport const DEPLOY_COMPLETED: EventKind = 'DeployCompleted';\nexport const LINT_COMPLETED: EventKind = 'LintCompleted';\n\n// --- Event Schemas ---\nconst EVENT_SCHEMAS: Record<string, EventSchema> = {\n [ERROR_OBSERVED]: {\n required: ['message'],\n optional: ['source', 'errorType', 'file', 'line', 'severity', 'fingerprint', 'bugEvent'],\n },\n [BUG_CLASSIFIED]: {\n required: ['severity', 'speciesId'],\n optional: ['fingerprint', 'name'],\n },\n [ENCOUNTER_STARTED]: {\n required: ['enemy'],\n optional: ['playerLevel'],\n },\n [MOVE_USED]: {\n required: ['move', 'attacker'],\n optional: ['defender'],\n },\n [DAMAGE_DEALT]: {\n required: ['amount', 'target'],\n optional: ['effectiveness'],\n },\n [HEALING_APPLIED]: {\n required: ['amount', 'target'],\n optional: [],\n },\n [PASSIVE_ACTIVATED]: {\n required: ['passive', 'owner'],\n optional: [],\n },\n [BUGMON_FAINTED]: {\n required: ['bugmon'],\n optional: [],\n },\n [CACHE_ATTEMPTED]: {\n required: ['target'],\n optional: [],\n },\n [CACHE_SUCCESS]: {\n required: ['target'],\n optional: [],\n },\n [BATTLE_ENDED]: {\n required: ['result'],\n optional: [],\n },\n [ACTIVITY_RECORDED]: {\n required: ['activity'],\n optional: [],\n },\n [EVOLUTION_TRIGGERED]: {\n required: ['from', 'to'],\n optional: [],\n },\n [STATE_CHANGED]: {\n required: ['from', 'to'],\n optional: [],\n },\n [RUN_STARTED]: {\n required: ['runId'],\n optional: ['seed', 'sessionStart', 'playerLevel'],\n },\n [RUN_ENDED]: {\n required: ['runId', 'result'],\n optional: ['score', 'encounterCount', 'duration', 'defeatedBosses'],\n },\n [CHECKPOINT_REACHED]: {\n required: ['runId', 'checkpoint'],\n optional: ['encounterCount', 'playerHp', 'score'],\n },\n [POLICY_DENIED]: {\n required: ['policy', 'action', 'reason'],\n optional: ['agentId', 'file', 'line', 'metadata'],\n },\n [UNAUTHORIZED_ACTION]: {\n required: ['action', 'reason'],\n optional: ['agentId', 'scope', 'file', 'line', 'metadata'],\n },\n [INVARIANT_VIOLATION]: {\n required: ['invariant', 'expected', 'actual'],\n optional: ['file', 'line', 'metadata'],\n },\n [BLAST_RADIUS_EXCEEDED]: {\n required: ['filesAffected', 'limit'],\n optional: ['files', 'action', 'metadata'],\n },\n [MERGE_GUARD_FAILURE]: {\n required: ['branch', 'reason'],\n optional: ['protectedBranches', 'metadata'],\n },\n [EVIDENCE_PACK_GENERATED]: {\n required: ['packId', 'eventIds'],\n optional: ['summary', 'metadata'],\n },\n [ACTION_REQUESTED]: {\n required: ['actionType', 'target', 'justification'],\n optional: ['actionId', 'agentId', 'metadata'],\n },\n [ACTION_ALLOWED]: {\n required: ['actionType', 'target', 'capability'],\n optional: ['actionId', 'reason', 'policyHash', 'metadata'],\n },\n [ACTION_DENIED]: {\n required: ['actionType', 'target', 'reason'],\n optional: ['actionId', 'policyHash', 'metadata'],\n },\n [ACTION_ESCALATED]: {\n required: ['actionType', 'target', 'reason'],\n optional: ['actionId', 'policyHash', 'metadata'],\n },\n [ACTION_EXECUTED]: {\n required: ['actionType', 'target', 'result'],\n optional: ['actionId', 'duration', 'metadata'],\n },\n [ACTION_FAILED]: {\n required: ['actionType', 'target', 'error'],\n optional: ['actionId', 'duration', 'metadata'],\n },\n [DECISION_RECORDED]: {\n required: ['recordId', 'outcome', 'actionType'],\n optional: ['target', 'reason', 'metadata'],\n },\n [SIMULATION_COMPLETED]: {\n required: ['simulatorId', 'riskLevel', 'blastRadius'],\n optional: ['predictedChanges', 'durationMs', 'metadata'],\n },\n [PIPELINE_STARTED]: {\n required: ['runId', 'task'],\n optional: ['agentRoles', 'stageCount'],\n },\n [STAGE_COMPLETED]: {\n required: ['runId', 'stageId', 'status'],\n optional: ['duration', 'outputKeys', 'agentRole'],\n },\n [STAGE_FAILED]: {\n required: ['runId', 'stageId', 'errors'],\n optional: ['agentRole', 'duration'],\n },\n [PIPELINE_COMPLETED]: {\n required: ['runId', 'result'],\n optional: ['duration', 'stagesCompleted', 'task'],\n },\n [PIPELINE_FAILED]: {\n required: ['runId', 'failedStage', 'errors'],\n optional: ['duration', 'stagesCompleted', 'task'],\n },\n [FILE_SCOPE_VIOLATION]: {\n required: ['runId', 'files'],\n optional: ['allowedFiles', 'agentRole'],\n },\n [FILE_SAVED]: {\n required: ['file'],\n optional: ['language', 'linesChanged'],\n },\n [TEST_COMPLETED]: {\n required: ['result'],\n optional: ['suite', 'duration', 'passed', 'failed', 'total'],\n },\n [BUILD_COMPLETED]: {\n required: ['result'],\n optional: ['duration', 'tool', 'exitCode'],\n },\n [COMMIT_CREATED]: {\n required: ['hash'],\n optional: ['message', 'filesChanged', 'additions', 'deletions'],\n },\n [CODE_REVIEWED]: {\n required: ['action'],\n optional: ['prId', 'file', 'comment'],\n },\n [DEPLOY_COMPLETED]: {\n required: ['result'],\n optional: ['environment', 'duration', 'version'],\n },\n [LINT_COMPLETED]: {\n required: ['result'],\n optional: ['tool', 'errors', 'warnings', 'fixed'],\n },\n};\n\nexport const ALL_EVENT_KINDS = new Set<string>(Object.keys(EVENT_SCHEMAS));\n\n// --- Event Factory ---\nlet eventCounter = 0;\n\n/** Reset the event counter. Exported for test determinism. */\nexport function resetEventCounter(): void {\n eventCounter = 0;\n}\n\nfunction generateEventId(timestamp: number): string {\n return `evt_${timestamp}_${++eventCounter}`;\n}\n\nfunction fingerprintEvent(kind: string, data: Record<string, unknown>): string {\n const keys = Object.keys(data).sort();\n const parts = keys.map((k) => `${k}=${JSON.stringify(data[k])}`);\n return simpleHash(`${kind}:${parts.join(',')}`);\n}\n\n/**\n * Validate an event object against its schema.\n */\nexport function validateEvent(event: Record<string, unknown>): ValidationResult {\n const errors: string[] = [];\n\n if (!event || typeof event !== 'object') {\n return { valid: false, errors: ['Event must be a non-null object'] };\n }\n\n if (!event.kind) {\n errors.push('Event is missing required field: kind');\n return { valid: false, errors };\n }\n\n const schema = EVENT_SCHEMAS[event.kind as string];\n if (!schema) {\n errors.push(`Unknown event kind: ${event.kind as string}`);\n return { valid: false, errors };\n }\n\n for (const field of schema.required) {\n if (event[field] === undefined) {\n errors.push(`Event \"${event.kind as string}\" is missing required field: ${field}`);\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Create a canonical domain event.\n * Validates that the kind is known and required fields are present.\n * Assigns a unique ID and content fingerprint.\n */\nexport function createEvent(kind: EventKind, data: Record<string, unknown> = {}): DomainEvent {\n const timestamp = Date.now();\n const event: Record<string, unknown> = { kind, timestamp, ...data };\n const { valid, errors } = validateEvent(event);\n if (!valid) {\n throw new Error(`Invalid event: ${errors.join('; ')}`);\n }\n event.id = generateEventId(timestamp);\n if (event.fingerprint === undefined) {\n event.fingerprint = fingerprintEvent(kind, data);\n }\n return event as unknown as DomainEvent;\n}\n", "// Blast radius computation engine \u2014 Phase 2 implementation.\n// Pure domain logic: computes a weighted blast radius score from action metadata.\n// No I/O, no Node.js-specific APIs. Suitable for use inside the synchronous authorize() flow.\n\nimport type { NormalizedIntent } from '../policy/evaluator.js';\n\n/** Weights applied to different action categories */\nexport interface BlastRadiusWeights {\n /** Multiplier for delete operations (default: 3.0) */\n delete: number;\n /** Multiplier for write operations (default: 1.5) */\n write: number;\n /** Multiplier for read operations (default: 0.1) */\n read: number;\n /** Multiplier for git operations (default: 2.0) */\n git: number;\n /** Multiplier for shell exec (default: 1.0) */\n shell: number;\n /** Multiplier for sensitive path matches (default: 5.0) */\n sensitivePath: number;\n /** Multiplier for config file matches (default: 2.0) */\n configPath: number;\n}\n\n/** Result of blast radius computation */\nexport interface BlastRadiusResult {\n /** Raw count of files/entities affected */\n rawCount: number;\n /** Weighted score after applying action and path multipliers */\n weightedScore: number;\n /** Risk level derived from weighted score */\n riskLevel: 'low' | 'medium' | 'high';\n /** Which factors contributed to the score */\n factors: BlastRadiusFactor[];\n /** Whether the weighted score exceeds the given threshold */\n exceeded: boolean;\n /** The threshold that was checked against */\n threshold: number;\n}\n\n/** A single factor contributing to the blast radius score */\nexport interface BlastRadiusFactor {\n name: string;\n multiplier: number;\n reason: string;\n}\n\nconst DEFAULT_WEIGHTS: BlastRadiusWeights = {\n delete: 3.0,\n write: 1.5,\n read: 0.1,\n git: 2.0,\n shell: 1.0,\n sensitivePath: 5.0,\n configPath: 2.0,\n};\n\nconst SENSITIVE_PATTERNS = ['.env', 'credentials', '.pem', '.key', 'secret', 'token', '.password'];\n\nconst CONFIG_PATTERNS = [\n 'package.json',\n 'tsconfig.json',\n 'eslint',\n '.prettierrc',\n 'webpack.config',\n 'vite.config',\n 'next.config',\n 'jest.config',\n 'vitest.config',\n '.babelrc',\n 'babel.config',\n 'Dockerfile',\n 'docker-compose',\n '.github/',\n '.gitlab-ci',\n 'Jenkinsfile',\n '.circleci/',\n];\n\n/** Determine the action weight multiplier based on action type */\nfunction getActionMultiplier(\n action: string,\n weights: BlastRadiusWeights\n): BlastRadiusFactor | null {\n if (action.startsWith('file.delete')) {\n return { name: 'delete-action', multiplier: weights.delete, reason: 'File deletion' };\n }\n if (action.startsWith('file.write') || action === 'file.move') {\n return { name: 'write-action', multiplier: weights.write, reason: 'File write/move' };\n }\n if (action.startsWith('file.read')) {\n return { name: 'read-action', multiplier: weights.read, reason: 'File read (low impact)' };\n }\n if (action.startsWith('git.')) {\n if (action === 'git.force-push') {\n return {\n name: 'force-push',\n multiplier: weights.git * 2,\n reason: 'Git force push (history rewrite)',\n };\n }\n if (action === 'git.branch.delete') {\n return {\n name: 'branch-delete',\n multiplier: weights.git * 1.5,\n reason: 'Git branch deletion',\n };\n }\n return { name: 'git-action', multiplier: weights.git, reason: `Git operation: ${action}` };\n }\n if (action === 'shell.exec') {\n return { name: 'shell-exec', multiplier: weights.shell, reason: 'Shell execution' };\n }\n return null;\n}\n\n/** Check if the target path matches sensitive patterns */\nfunction getSensitivePathFactor(\n target: string,\n weights: BlastRadiusWeights\n): BlastRadiusFactor | null {\n if (!target) return null;\n const lower = target.toLowerCase();\n if (SENSITIVE_PATTERNS.some((p) => lower.includes(p))) {\n return {\n name: 'sensitive-path',\n multiplier: weights.sensitivePath,\n reason: `Sensitive file path: ${target}`,\n };\n }\n return null;\n}\n\n/** Check if the target path matches config file patterns */\nfunction getConfigPathFactor(\n target: string,\n weights: BlastRadiusWeights\n): BlastRadiusFactor | null {\n if (!target) return null;\n const lower = target.toLowerCase();\n if (CONFIG_PATTERNS.some((p) => lower.includes(p))) {\n return {\n name: 'config-path',\n multiplier: weights.configPath,\n reason: `Config/CI file: ${target}`,\n };\n }\n return null;\n}\n\n/** Derive risk level from a weighted score */\nfunction deriveRiskLevel(weightedScore: number): 'low' | 'medium' | 'high' {\n if (weightedScore >= 50) return 'high';\n if (weightedScore >= 15) return 'medium';\n return 'low';\n}\n\n/**\n * Compute the blast radius for a normalized intent.\n *\n * The engine applies multipliers for:\n * - Action type (delete > write > git > shell > read)\n * - Path sensitivity (secrets, credentials)\n * - Config file impact (package.json, CI configs, etc.)\n *\n * The final weighted score is the raw file count multiplied by\n * the highest applicable multiplier from each factor category.\n *\n * @param intent The normalized action intent\n * @param threshold The policy limit to check against\n * @param weights Optional custom weights (defaults provided)\n */\nexport function computeBlastRadius(\n intent: NormalizedIntent,\n threshold: number,\n weights: BlastRadiusWeights = DEFAULT_WEIGHTS\n): BlastRadiusResult {\n const rawCount = intent.filesAffected ?? 1;\n const factors: BlastRadiusFactor[] = [];\n\n // Collect applicable factors\n const actionFactor = getActionMultiplier(intent.action, weights);\n if (actionFactor) factors.push(actionFactor);\n\n const sensitiveFactor = getSensitivePathFactor(intent.target, weights);\n if (sensitiveFactor) factors.push(sensitiveFactor);\n\n const configFactor = getConfigPathFactor(intent.target, weights);\n if (configFactor) factors.push(configFactor);\n\n // Compute weighted score: raw count * product of all factor multipliers\n // Each factor category contributes independently (multiplicative)\n const totalMultiplier = factors.reduce((acc, f) => acc * f.multiplier, 1);\n const weightedScore = Math.round(rawCount * totalMultiplier * 100) / 100;\n\n const riskLevel = deriveRiskLevel(weightedScore);\n const exceeded = weightedScore > threshold;\n\n return {\n rawCount,\n weightedScore,\n riskLevel,\n factors,\n exceeded,\n threshold,\n };\n}\n\nexport { DEFAULT_WEIGHTS, SENSITIVE_PATTERNS, CONFIG_PATTERNS };\n", "// Action Authorization Boundary (AAB)\n// The central gatekeeper in the Runtime Assurance Architecture.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nimport type { DomainEvent } from '../core/types.js';\nimport { evaluate } from '../policy/evaluator.js';\nimport type { NormalizedIntent, EvalResult, LoadedPolicy } from '../policy/evaluator.js';\nimport {\n createEvent,\n POLICY_DENIED,\n UNAUTHORIZED_ACTION,\n BLAST_RADIUS_EXCEEDED,\n} from '../events/schema.js';\nimport { computeBlastRadius } from './blast-radius.js';\nimport type { BlastRadiusResult } from './blast-radius.js';\n\nexport interface RawAgentAction {\n tool?: string;\n command?: string;\n file?: string;\n target?: string;\n content?: string;\n branch?: string;\n agent?: string;\n filesAffected?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface AuthorizationResult {\n intent: NormalizedIntent;\n result: EvalResult;\n events: DomainEvent[];\n blastRadius?: BlastRadiusResult;\n}\n\nconst TOOL_ACTION_MAP: Record<string, string> = {\n Write: 'file.write',\n Edit: 'file.write',\n Read: 'file.read',\n Bash: 'shell.exec',\n Glob: 'file.read',\n Grep: 'file.read',\n};\n\nfunction detectGitAction(command: string): string | null {\n if (!command || typeof command !== 'string') return null;\n\n const trimmed = command.trim();\n\n if (/\\bgit\\s+push\\s+--force\\b/.test(trimmed) || /\\bgit\\s+push\\s+-f\\b/.test(trimmed)) {\n return 'git.force-push';\n }\n if (/\\bgit\\s+push\\b/.test(trimmed)) return 'git.push';\n if (/\\bgit\\s+branch\\s+-[dD]\\b/.test(trimmed)) return 'git.branch.delete';\n if (/\\bgit\\s+merge\\b/.test(trimmed)) return 'git.merge';\n if (/\\bgit\\s+commit\\b/.test(trimmed)) return 'git.commit';\n\n return null;\n}\n\nfunction isDestructiveCommand(command: string): boolean {\n if (!command || typeof command !== 'string') return false;\n\n const patterns = [\n /\\brm\\s+-rf\\b/,\n /\\brm\\s+-r\\b/,\n /\\brm\\s+--recursive\\b/,\n /\\bchmod\\s+777\\b/,\n /\\bdd\\s+if=/,\n /\\bmkfs\\b/,\n />\\s*\\/dev\\/sd[a-z]/,\n /\\bsudo\\s+rm\\b/,\n /\\bdropdb\\b/,\n /\\bDROP\\s+DATABASE\\b/i,\n /\\bDROP\\s+TABLE\\b/i,\n ];\n\n return patterns.some((p) => p.test(command));\n}\n\nfunction extractBranch(command: string | undefined): string | null {\n if (!command) return null;\n const match = command.match(/\\bgit\\s+push\\s+\\S+\\s+(\\S+)/);\n return match ? match[1] : null;\n}\n\nexport function normalizeIntent(rawAction: RawAgentAction | null): NormalizedIntent {\n if (!rawAction || typeof rawAction !== 'object') {\n return { action: 'unknown', target: '', agent: 'unknown', destructive: false };\n }\n\n const tool = rawAction.tool || '';\n let action = TOOL_ACTION_MAP[tool] || 'unknown';\n let target = rawAction.file || rawAction.target || '';\n\n if (action === 'shell.exec' && rawAction.command) {\n const gitAction = detectGitAction(rawAction.command);\n if (gitAction) {\n action = gitAction;\n target = extractBranch(rawAction.command) || target;\n }\n }\n\n return {\n action,\n target,\n agent: rawAction.agent || 'unknown',\n branch: rawAction.branch || extractBranch(rawAction.command) || undefined,\n command: rawAction.command || undefined,\n filesAffected: rawAction.filesAffected || undefined,\n metadata: rawAction.metadata || undefined,\n destructive: action === 'shell.exec' && isDestructiveCommand(rawAction.command || ''),\n };\n}\n\nexport function authorize(\n rawAction: RawAgentAction | null,\n policies: LoadedPolicy[]\n): AuthorizationResult {\n const intent = normalizeIntent(rawAction);\n const events: DomainEvent[] = [];\n\n if (intent.destructive) {\n const result: EvalResult = {\n allowed: false,\n decision: 'deny',\n matchedRule: null,\n matchedPolicy: null,\n reason: `Destructive command detected: ${intent.command}`,\n severity: 5,\n };\n\n events.push(\n createEvent(UNAUTHORIZED_ACTION, {\n action: intent.action,\n reason: result.reason,\n agentId: intent.agent,\n scope: intent.target,\n })\n );\n\n return { intent, result, events };\n }\n\n const result = evaluate(intent, policies);\n\n if (!result.allowed) {\n if (result.matchedPolicy) {\n events.push(\n createEvent(POLICY_DENIED, {\n policy: result.matchedPolicy.id,\n action: intent.action,\n reason: result.reason,\n agentId: intent.agent,\n file: intent.target,\n })\n );\n } else {\n events.push(\n createEvent(UNAUTHORIZED_ACTION, {\n action: intent.action,\n reason: result.reason,\n agentId: intent.agent,\n scope: intent.target,\n })\n );\n }\n }\n\n // Blast radius computation engine (Phase 2)\n // Computes a weighted score from action type, path sensitivity, and file count,\n // then checks against the tightest policy limit.\n let blastRadius: BlastRadiusResult | undefined;\n\n let tightestLimit = Infinity;\n for (const policy of policies) {\n for (const rule of policy.rules) {\n if (rule.conditions?.limit !== undefined) {\n tightestLimit = Math.min(tightestLimit, rule.conditions.limit);\n }\n }\n }\n\n if (tightestLimit < Infinity) {\n blastRadius = computeBlastRadius(intent, tightestLimit);\n\n if (blastRadius.exceeded) {\n events.push(\n createEvent(BLAST_RADIUS_EXCEEDED, {\n filesAffected: blastRadius.rawCount,\n weightedScore: blastRadius.weightedScore,\n riskLevel: blastRadius.riskLevel,\n factors: blastRadius.factors.map((f) => f.reason),\n limit: tightestLimit,\n action: intent.action,\n })\n );\n }\n }\n\n return { intent, result, events, blastRadius };\n}\n\nexport { detectGitAction, isDestructiveCommand };\n", "// Invariant checker \u2014 evaluates system state against invariant definitions.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nimport type { DomainEvent } from '../core/types.js';\nimport { createEvent, INVARIANT_VIOLATION } from '../events/schema.js';\nimport type { AgentGuardInvariant, InvariantCheckResult, SystemState } from './definitions.js';\n\nexport interface InvariantCheck {\n holds: boolean;\n invariant: AgentGuardInvariant;\n result: InvariantCheckResult;\n}\n\nexport function checkInvariant(invariant: AgentGuardInvariant, state: SystemState): InvariantCheck {\n const result = invariant.check(state);\n return {\n holds: result.holds,\n invariant,\n result,\n };\n}\n\nexport function checkAllInvariants(\n invariants: AgentGuardInvariant[],\n state: SystemState\n): {\n violations: InvariantCheck[];\n events: DomainEvent[];\n allHold: boolean;\n} {\n const violations: InvariantCheck[] = [];\n const events: DomainEvent[] = [];\n\n for (const invariant of invariants) {\n const check = checkInvariant(invariant, state);\n\n if (!check.holds) {\n violations.push(check);\n\n events.push(\n createEvent(INVARIANT_VIOLATION, {\n invariant: invariant.id,\n expected: check.result.expected,\n actual: check.result.actual,\n metadata: {\n name: invariant.name,\n severity: invariant.severity,\n description: invariant.description,\n },\n })\n );\n }\n }\n\n return {\n violations,\n events,\n allHold: violations.length === 0,\n };\n}\n\nexport function buildSystemState(context: Record<string, unknown> = {}): SystemState {\n return {\n modifiedFiles: (context.modifiedFiles as string[]) || [],\n targetBranch: (context.targetBranch as string) || '',\n directPush: (context.directPush as boolean) || false,\n forcePush: (context.forcePush as boolean) || false,\n isPush: (context.isPush as boolean) || false,\n testsPass: context.testsPass as boolean | undefined,\n filesAffected:\n (context.filesAffected as number) || ((context.modifiedFiles as string[]) || []).length,\n blastRadiusLimit: (context.blastRadiusLimit as number) || 20,\n protectedBranches: (context.protectedBranches as string[]) || ['main', 'master'],\n currentTarget: (context.currentTarget as string) || '',\n currentCommand: (context.currentCommand as string) || '',\n };\n}\n", "// Evidence pack generator \u2014 creates structured audit records.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nimport type { DomainEvent } from '../core/types.js';\nimport { createEvent, EVIDENCE_PACK_GENERATED } from '../events/schema.js';\nimport { simpleHash } from '../core/hash.js';\nimport type { NormalizedIntent, EvalResult } from '../policy/evaluator.js';\nimport type { InvariantCheck } from '../invariants/checker.js';\n\nexport interface EvidencePack {\n packId: string;\n timestamp: number;\n intent: NormalizedIntent;\n decision: EvalResult;\n violations: Array<{\n invariantId: string;\n name: string;\n severity: number;\n expected: string;\n actual: string;\n }>;\n events: string[];\n summary: string;\n severity: number;\n}\n\nfunction generatePackId(timestamp: number, intent: NormalizedIntent): string {\n const content = `${timestamp}:${intent.action}:${intent.target}:${intent.agent}`;\n return `pack_${simpleHash(content)}`;\n}\n\nfunction computeMaxSeverity(decision: EvalResult, violations: InvariantCheck[]): number {\n let maxSeverity = decision.severity || 0;\n\n for (const v of violations) {\n if (v.invariant && v.invariant.severity > maxSeverity) {\n maxSeverity = v.invariant.severity;\n }\n }\n\n return maxSeverity;\n}\n\nfunction generateSummary(\n intent: NormalizedIntent,\n decision: EvalResult,\n violations: InvariantCheck[]\n): string {\n const parts: string[] = [];\n\n parts.push(`Action: ${intent.action} on ${intent.target || 'unknown'}`);\n parts.push(`Decision: ${decision.decision.toUpperCase()}`);\n\n if (decision.reason) {\n parts.push(`Reason: ${decision.reason}`);\n }\n\n if (violations.length > 0) {\n const names = violations.map((v) => v.invariant.name);\n parts.push(`Violations: ${names.join(', ')}`);\n }\n\n return parts.join(' | ');\n}\n\nexport function createEvidencePack(params: {\n intent: NormalizedIntent;\n decision: EvalResult;\n violations?: InvariantCheck[];\n events?: DomainEvent[];\n}): { pack: EvidencePack; event: DomainEvent } {\n const { intent, decision, violations = [], events = [] } = params;\n const timestamp = Date.now();\n const packId = generatePackId(timestamp, intent);\n const severity = computeMaxSeverity(decision, violations);\n const summary = generateSummary(intent, decision, violations);\n\n const pack: EvidencePack = {\n packId,\n timestamp,\n intent,\n decision,\n violations: violations.map((v) => ({\n invariantId: v.invariant.id,\n name: v.invariant.name,\n severity: v.invariant.severity,\n expected: v.result.expected,\n actual: v.result.actual,\n })),\n events: events.map((e) => e.id),\n summary,\n severity,\n };\n\n const event = createEvent(EVIDENCE_PACK_GENERATED, {\n packId,\n eventIds: events.map((e) => e.id),\n summary,\n metadata: { severity, violationCount: violations.length },\n });\n\n return { pack, event };\n}\n", "// Policy loader \u2014 parses and validates policy definitions.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n//\n// Policy pack loading: see pack-loader.ts for extends/merge support.\n\nimport type { LoadedPolicy } from './evaluator.js';\n\nconst VALID_EFFECTS = new Set(['allow', 'deny']);\n\nexport const VALID_ACTIONS = new Set([\n 'file.write',\n 'file.delete',\n 'file.rename',\n 'shell.exec',\n 'git.push',\n 'git.force-push',\n 'git.branch.delete',\n 'git.commit',\n 'git.merge',\n 'config.modify',\n 'dependency.add',\n 'dependency.remove',\n 'deploy.trigger',\n '*',\n]);\n\ninterface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\nfunction validateRule(rule: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (!rule || typeof rule !== 'object') {\n return { valid: false, errors: ['Rule must be a non-null object'] };\n }\n\n const r = rule as Record<string, unknown>;\n\n if (!r.action) {\n errors.push('Rule is missing required field: action');\n } else {\n const actions = Array.isArray(r.action) ? r.action : [r.action];\n for (const a of actions) {\n if (typeof a !== 'string') {\n errors.push(`Invalid action type: ${typeof a}`);\n }\n }\n }\n\n if (!r.effect) {\n errors.push('Rule is missing required field: effect');\n } else if (!VALID_EFFECTS.has(r.effect as string)) {\n errors.push(`Invalid effect: ${r.effect as string}. Must be \"allow\" or \"deny\"`);\n }\n\n if (r.conditions) {\n if (typeof r.conditions !== 'object') {\n errors.push('Conditions must be an object');\n }\n const conds = r.conditions as Record<string, unknown>;\n if (conds.limit !== undefined && typeof conds.limit !== 'number') {\n errors.push('Condition \"limit\" must be a number');\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n\nexport function validatePolicy(policy: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (!policy || typeof policy !== 'object') {\n return { valid: false, errors: ['Policy must be a non-null object'] };\n }\n\n const p = policy as Record<string, unknown>;\n\n if (!p.id || typeof p.id !== 'string') {\n errors.push('Policy is missing required field: id (string)');\n }\n\n if (!p.name || typeof p.name !== 'string') {\n errors.push('Policy is missing required field: name (string)');\n }\n\n if (!Array.isArray(p.rules) || p.rules.length === 0) {\n errors.push('Policy must have at least one rule');\n } else {\n for (let i = 0; i < p.rules.length; i++) {\n const result = validateRule(p.rules[i]);\n if (!result.valid) {\n for (const err of result.errors) {\n errors.push(`Rule[${i}]: ${err}`);\n }\n }\n }\n }\n\n if (p.severity !== undefined) {\n if (\n typeof p.severity !== 'number' ||\n (p.severity as number) < 1 ||\n (p.severity as number) > 5\n ) {\n errors.push('Severity must be a number between 1 and 5');\n }\n }\n\n return { valid: errors.length === 0, errors };\n}\n\nexport function loadPolicies(policyDefs: unknown[]): {\n policies: LoadedPolicy[];\n errors: string[];\n} {\n const policies: LoadedPolicy[] = [];\n const errors: string[] = [];\n\n if (!Array.isArray(policyDefs)) {\n return { policies: [], errors: ['Policy definitions must be an array'] };\n }\n\n const seenIds = new Set<string>();\n\n for (let i = 0; i < policyDefs.length; i++) {\n const def = policyDefs[i] as Record<string, unknown>;\n const result = validatePolicy(def);\n\n if (!result.valid) {\n for (const err of result.errors) {\n errors.push(`Policy[${i}]: ${err}`);\n }\n continue;\n }\n\n if (seenIds.has(def.id as string)) {\n errors.push(`Policy[${i}]: Duplicate policy ID \"${def.id as string}\"`);\n continue;\n }\n\n seenIds.add(def.id as string);\n policies.push({\n ...def,\n severity: (def.severity as number) ?? 3,\n } as LoadedPolicy);\n }\n\n return { policies, errors };\n}\n", "// Default system invariant definitions.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nexport interface InvariantCheckResult {\n holds: boolean;\n expected: string;\n actual: string;\n}\n\nexport interface AgentGuardInvariant {\n id: string;\n name: string;\n description: string;\n severity: number;\n check: (state: SystemState) => InvariantCheckResult;\n}\n\nexport interface SystemState {\n modifiedFiles?: string[];\n targetBranch?: string;\n directPush?: boolean;\n forcePush?: boolean;\n isPush?: boolean;\n testsPass?: boolean;\n filesAffected?: number;\n blastRadiusLimit?: number;\n protectedBranches?: string[];\n /** Blast radius from pre-execution simulation (overrides filesAffected in blast-radius check) */\n simulatedBlastRadius?: number;\n /** Risk level from pre-execution simulation */\n simulatedRiskLevel?: string;\n /** File path targeted by the current action */\n currentTarget?: string;\n /** Shell command of the current action (for shell.exec detection) */\n currentCommand?: string;\n}\n\nexport const DEFAULT_INVARIANTS: AgentGuardInvariant[] = [\n {\n id: 'no-secret-exposure',\n name: 'No Secret Exposure',\n description: 'Sensitive files (.env, credentials, keys) must not be committed or exposed',\n severity: 5,\n check(state) {\n const sensitivePatterns = ['.env', 'credentials', '.pem', '.key', 'secret', 'token'];\n const exposedFiles = (state.modifiedFiles || []).filter((f) => {\n const lower = f.toLowerCase();\n return sensitivePatterns.some((p) => lower.includes(p));\n });\n return {\n holds: exposedFiles.length === 0,\n expected: 'No sensitive files modified',\n actual:\n exposedFiles.length > 0\n ? `Sensitive files detected: ${exposedFiles.join(', ')}`\n : 'No sensitive files modified',\n };\n },\n },\n\n {\n id: 'protected-branch',\n name: 'Protected Branch Safety',\n description: 'Direct pushes to main/master are forbidden',\n severity: 4,\n check(state) {\n const protectedBranches = state.protectedBranches || ['main', 'master'];\n const targetBranch = state.targetBranch || '';\n const isProtected = protectedBranches.includes(targetBranch);\n return {\n holds: !isProtected || !state.directPush,\n expected: 'No direct push to protected branch',\n actual: isProtected && state.directPush ? `Direct push to ${targetBranch}` : 'Safe',\n };\n },\n },\n\n {\n id: 'blast-radius-limit',\n name: 'Blast Radius Limit',\n description: 'A single operation must not modify too many files at once',\n severity: 3,\n check(state) {\n const limit = state.blastRadiusLimit || 20;\n // Prefer simulated blast radius over static file count when available\n const count = state.simulatedBlastRadius ?? state.filesAffected ?? 0;\n const source = state.simulatedBlastRadius !== undefined ? 'simulated' : 'static';\n return {\n holds: count <= limit,\n expected: `At most ${limit} files modified`,\n actual: `${count} files modified (${source})`,\n };\n },\n },\n\n {\n id: 'test-before-push',\n name: 'Tests Before Push',\n description: 'Tests must pass before pushing code',\n severity: 3,\n check(state) {\n if (!state.isPush) {\n return { holds: true, expected: 'N/A', actual: 'Not a push operation' };\n }\n return {\n holds: state.testsPass === true,\n expected: 'Tests passing',\n actual: state.testsPass === true ? 'Tests passing' : 'Tests not verified',\n };\n },\n },\n\n {\n id: 'no-force-push',\n name: 'No Force Push',\n description: 'Force pushes are forbidden unless explicitly authorized',\n severity: 4,\n check(state) {\n return {\n holds: !state.forcePush,\n expected: 'No force push',\n actual: state.forcePush ? 'Force push detected' : 'Normal push',\n };\n },\n },\n\n {\n id: 'no-skill-modification',\n name: 'No Skill Modification',\n description: 'Agent skill files (.claude/skills/) must not be modified by governed actions',\n severity: 4,\n check(state) {\n const SKILL_PATTERNS = ['.claude/skills/', '.claude\\\\skills\\\\'];\n const matchesSkillPath = (path: string) => SKILL_PATTERNS.some((p) => path.includes(p));\n\n const target = state.currentTarget || '';\n const targetViolation = target !== '' && matchesSkillPath(target);\n\n const command = state.currentCommand || '';\n const commandViolation = command !== '' && matchesSkillPath(command);\n\n const skillFiles = (state.modifiedFiles || []).filter((f) => matchesSkillPath(f));\n\n const holds = !targetViolation && !commandViolation && skillFiles.length === 0;\n\n const violations: string[] = [];\n if (targetViolation) violations.push(`target: ${target}`);\n if (commandViolation) violations.push(`command references skills`);\n if (skillFiles.length > 0) violations.push(`modified: ${skillFiles.join(', ')}`);\n\n return {\n holds,\n expected: 'No modifications to .claude/skills/',\n actual: holds\n ? 'No skill files affected'\n : `Skill modification detected (${violations.join('; ')})`,\n };\n },\n },\n\n {\n id: 'no-scheduled-task-modification',\n name: 'No Scheduled Task Modification',\n description:\n 'Agents must not modify scheduled task definitions (.claude/scheduled-tasks/) directly',\n severity: 5,\n check(state) {\n const SCHEDULED_TASK_PATTERNS = ['.claude/scheduled-tasks/', '.claude\\\\scheduled-tasks\\\\'];\n const matchesScheduledPath = (path: string) =>\n SCHEDULED_TASK_PATTERNS.some((p) => path.includes(p));\n\n const target = state.currentTarget || '';\n const targetViolation = target !== '' && matchesScheduledPath(target);\n\n const command = state.currentCommand || '';\n const commandViolation = command !== '' && matchesScheduledPath(command);\n\n const scheduledFiles = (state.modifiedFiles || []).filter((f) => matchesScheduledPath(f));\n\n const holds = !targetViolation && !commandViolation && scheduledFiles.length === 0;\n\n const violations: string[] = [];\n if (targetViolation) violations.push(`target: ${target}`);\n if (commandViolation) violations.push(`command references scheduled tasks`);\n if (scheduledFiles.length > 0) violations.push(`modified: ${scheduledFiles.join(', ')}`);\n\n return {\n holds,\n expected: 'No modifications to .claude/scheduled-tasks/',\n actual: holds\n ? 'No scheduled task files affected'\n : `Scheduled task modification detected (${violations.join('; ')})`,\n };\n },\n },\n\n {\n id: 'lockfile-integrity',\n name: 'Lockfile Integrity',\n description: 'Package lockfiles must stay in sync with manifests',\n severity: 2,\n check(state) {\n const manifestChanged = (state.modifiedFiles || []).some(\n (f) => f === 'package.json' || f.endsWith('/package.json')\n );\n const lockfileChanged = (state.modifiedFiles || []).some(\n (f) =>\n f === 'package-lock.json' ||\n f === 'yarn.lock' ||\n f === 'pnpm-lock.yaml' ||\n f.endsWith('/package-lock.json')\n );\n\n if (!manifestChanged) {\n return { holds: true, expected: 'N/A', actual: 'No manifest changes' };\n }\n\n return {\n holds: lockfileChanged,\n expected: 'Lockfile updated with manifest',\n actual: lockfileChanged ? 'Lockfile updated' : 'Manifest changed without lockfile',\n };\n },\n },\n];\n", "// Runtime Assurance Engine \u2014 the RTA decision switch.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nimport type { DomainEvent } from '../core/types.js';\nimport { authorize } from './aab.js';\nimport type { RawAgentAction } from './aab.js';\nimport type { NormalizedIntent, EvalResult } from '../policy/evaluator.js';\nimport { checkAllInvariants, buildSystemState } from '../invariants/checker.js';\nimport type { InvariantCheck } from '../invariants/checker.js';\nimport { createEvidencePack } from './evidence.js';\nimport type { EvidencePack } from './evidence.js';\nimport { loadPolicies } from '../policy/loader.js';\nimport { DEFAULT_INVARIANTS } from '../invariants/definitions.js';\nimport type { AgentGuardInvariant } from '../invariants/definitions.js';\n\nexport const INTERVENTION = {\n DENY: 'deny',\n ROLLBACK: 'rollback',\n PAUSE: 'pause',\n TEST_ONLY: 'test-only',\n} as const;\n\nexport type InterventionType = (typeof INTERVENTION)[keyof typeof INTERVENTION];\n\nexport interface EngineDecision {\n allowed: boolean;\n intent: NormalizedIntent;\n decision: EvalResult;\n violations: Array<{\n invariantId: string;\n name: string;\n severity: number;\n expected: string;\n actual: string;\n }>;\n events: DomainEvent[];\n evidencePack: EvidencePack | null;\n intervention: InterventionType | null;\n}\n\nexport interface EngineConfig {\n policyDefs?: unknown[];\n invariants?: AgentGuardInvariant[];\n onEvent?: (event: DomainEvent) => void;\n}\n\nexport interface Engine {\n getPolicyErrors(): string[];\n getPolicyCount(): number;\n getInvariantCount(): number;\n evaluate(\n rawAction: RawAgentAction | null,\n systemContext?: Record<string, unknown>\n ): EngineDecision;\n}\n\nfunction selectIntervention(decision: EvalResult, violations: InvariantCheck[]): InterventionType {\n const maxSeverity = Math.max(\n decision.severity || 0,\n ...violations.map((v) => v.invariant?.severity || 0)\n );\n\n if (maxSeverity >= 5) return INTERVENTION.DENY;\n if (maxSeverity >= 4) return INTERVENTION.PAUSE;\n if (maxSeverity >= 3) return INTERVENTION.ROLLBACK;\n return INTERVENTION.TEST_ONLY;\n}\n\nexport function createEngine(config: EngineConfig = {}): Engine {\n const { policies, errors: policyErrors } = loadPolicies(config.policyDefs || []);\n const invariants = config.invariants || DEFAULT_INVARIANTS;\n const onEvent = config.onEvent || null;\n\n function emitEvents(events: DomainEvent[]): void {\n if (onEvent) {\n for (const event of events) {\n onEvent(event);\n }\n }\n }\n\n return {\n getPolicyErrors() {\n return [...policyErrors];\n },\n\n getPolicyCount() {\n return policies.length;\n },\n\n getInvariantCount() {\n return invariants.length;\n },\n\n evaluate(rawAction, systemContext = {}) {\n const { intent, result: authResult, events: authEvents } = authorize(rawAction, policies);\n\n const state = buildSystemState({\n ...systemContext,\n currentTarget: intent.target,\n currentCommand: intent.command,\n filesAffected: intent.filesAffected || systemContext.filesAffected,\n targetBranch: intent.branch || systemContext.targetBranch,\n forcePush: intent.action === 'git.force-push',\n directPush: intent.action === 'git.push',\n isPush: intent.action === 'git.push' || intent.action === 'git.force-push',\n });\n\n const {\n violations,\n events: invariantEvents,\n allHold,\n } = checkAllInvariants(invariants, state);\n\n const allEvents: DomainEvent[] = [...authEvents, ...invariantEvents];\n\n const allowed = authResult.allowed && allHold;\n const needsEvidence = !allowed || allEvents.length > 0;\n\n let evidencePack: EvidencePack | null = null;\n if (needsEvidence && allEvents.length > 0) {\n const { pack, event: packEvent } = createEvidencePack({\n intent,\n decision: authResult,\n violations,\n events: allEvents,\n });\n evidencePack = pack;\n allEvents.push(packEvent);\n }\n\n const intervention = allowed ? null : selectIntervention(authResult, violations);\n\n emitEvents(allEvents);\n\n return {\n allowed,\n intent,\n decision: authResult,\n violations: violations.map((v) => ({\n invariantId: v.invariant.id,\n name: v.invariant.name,\n severity: v.invariant.severity,\n expected: v.result.expected,\n actual: v.result.actual,\n })),\n events: allEvents,\n evidencePack,\n intervention,\n };\n },\n };\n}\n", "/**\n * EventBus \u2014 Strongly typed publish/subscribe event system.\n *\n * The backbone of AgentGuard. All modules communicate through events,\n * never by direct coupling. Generic over an event map for full\n * type safety at compile time.\n *\n * Pattern: synchronous dispatch, no middleware, no async.\n * Returns an unsubscribe function from on().\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class EventBus<T extends Record<string, any>> {\n private readonly listeners = new Map<keyof T, Array<(payload: never) => void>>();\n\n /** Subscribe to an event. Returns an unsubscribe function. */\n on<K extends keyof T>(event: K, handler: (payload: T[K]) => void): () => void {\n let arr = this.listeners.get(event);\n if (!arr) {\n arr = [];\n this.listeners.set(event, arr);\n }\n arr.push(handler as (payload: never) => void);\n\n return () => {\n const list = this.listeners.get(event);\n if (!list) return;\n const idx = list.indexOf(handler as (payload: never) => void);\n if (idx !== -1) list.splice(idx, 1);\n if (list.length === 0) {\n this.listeners.delete(event);\n }\n };\n }\n\n /** Remove a specific handler for an event. */\n off<K extends keyof T>(event: K, handler: (payload: T[K]) => void): void {\n const list = this.listeners.get(event);\n if (!list) return;\n const idx = list.indexOf(handler as (payload: never) => void);\n if (idx !== -1) list.splice(idx, 1);\n if (list.length === 0) {\n this.listeners.delete(event);\n }\n }\n\n /** Emit an event synchronously to all subscribers. */\n emit<K extends keyof T>(event: K, payload?: T[K]): void {\n const list = this.listeners.get(event);\n if (!list) return;\n for (const handler of [...list]) {\n (handler as (payload: T[K]) => void)(payload as T[K]);\n }\n }\n\n /** Remove all listeners for all events. */\n clear(): void {\n this.listeners.clear();\n }\n\n /** Get the count of listeners for a specific event. */\n listenerCount<K extends keyof T>(event: K): number {\n return this.listeners.get(event)?.length ?? 0;\n }\n}\n", "// Event store interface and in-memory reference implementation.\n// No DOM, no Node.js APIs \u2014 pure domain logic.\n// File-based persistence: see src/cli/file-event-store.ts\n\nimport type { DomainEvent, EventFilter, EventStore, ValidationResult } from '../core/types.js';\nimport { validateEvent } from './schema.js';\n\n/**\n * Create an in-memory event store.\n * Serves as the reference implementation and test double.\n */\nexport function createInMemoryStore(): EventStore {\n let events: DomainEvent[] = [];\n\n return {\n append(event: DomainEvent): void {\n const { valid, errors } = validateEvent(\n event as unknown as Record<string, unknown>\n ) as ValidationResult;\n if (!valid) {\n throw new Error(`Cannot append invalid event: ${errors.join('; ')}`);\n }\n events.push(event);\n },\n\n query(filter: EventFilter = {}): DomainEvent[] {\n let result = events;\n if (filter.kind) {\n result = result.filter((e) => e.kind === filter.kind);\n }\n if (filter.since !== undefined) {\n result = result.filter((e) => e.timestamp >= filter.since!);\n }\n if (filter.until !== undefined) {\n result = result.filter((e) => e.timestamp <= filter.until!);\n }\n if (filter.fingerprint) {\n result = result.filter((e) => e.fingerprint === filter.fingerprint);\n }\n return result;\n },\n\n replay(fromId?: string): DomainEvent[] {\n if (!fromId) return [...events];\n const idx = events.findIndex((e) => e.id === fromId);\n if (idx === -1) return [];\n return events.slice(idx);\n },\n\n count(): number {\n return events.length;\n },\n\n clear(): void {\n events = [];\n },\n\n toNDJSON(): string {\n return events.map((e) => JSON.stringify(e)).join('\\n');\n },\n\n fromNDJSON(ndjson: string): number {\n const lines = ndjson.split('\\n').filter((line) => line.trim().length > 0);\n let loaded = 0;\n for (const line of lines) {\n const parsed = JSON.parse(line) as DomainEvent;\n events.push(parsed);\n loaded++;\n }\n return loaded;\n },\n };\n}\n", "// Runtime Monitor \u2014 closed-loop feedback system.\n// Pure domain logic. No DOM, no Node.js-specific APIs.\n\nimport type { DomainEvent } from '../core/types.js';\nimport { createEngine, INTERVENTION } from './decision.js';\nimport type { EngineConfig, EngineDecision } from './decision.js';\nimport type { RawAgentAction } from './aab.js';\nimport { EventBus } from '../events/bus.js';\nimport { createInMemoryStore } from '../events/store.js';\nimport type { EventStore } from '../core/types.js';\n\nexport const ESCALATION = {\n NORMAL: 0,\n ELEVATED: 1,\n HIGH: 2,\n LOCKDOWN: 3,\n} as const;\n\nexport type EscalationLevel = (typeof ESCALATION)[keyof typeof ESCALATION];\n\ninterface MonitorState {\n escalationLevel: EscalationLevel;\n totalEvaluations: number;\n totalDenials: number;\n totalViolations: number;\n}\n\nexport interface MonitorDecision extends EngineDecision {\n monitor: MonitorState;\n}\n\nexport interface MonitorConfig extends EngineConfig {\n denialThreshold?: number;\n violationThreshold?: number;\n windowSize?: number;\n}\n\ninterface RecentDenial {\n timestamp: number;\n action: string;\n reason: string;\n}\n\nexport interface Monitor {\n bus: EventBus<Record<string, unknown>>;\n store: EventStore;\n process(\n rawAction: RawAgentAction | null,\n systemContext?: Record<string, unknown>\n ): MonitorDecision;\n getStatus(): Record<string, unknown>;\n resetEscalation(): void;\n}\n\nexport function createMonitor(config: MonitorConfig = {}): Monitor {\n const bus = new EventBus<Record<string, unknown>>();\n const store = createInMemoryStore();\n\n const engine = createEngine({\n policyDefs: config.policyDefs || [],\n invariants: config.invariants,\n onEvent(event: DomainEvent) {\n store.append(event);\n bus.emit(event.kind, event as unknown as Record<string, unknown>);\n bus.emit('*', event as unknown as Record<string, unknown>);\n },\n });\n\n const denialThreshold = config.denialThreshold ?? 5;\n const violationThreshold = config.violationThreshold ?? 3;\n const windowSize = config.windowSize ?? 10;\n\n let totalEvaluations = 0;\n let totalDenials = 0;\n let totalViolations = 0;\n const denialsByAgent = new Map<string, number>();\n const violationsByInvariant = new Map<string, number>();\n const recentDenials: RecentDenial[] = [];\n let escalationLevel: EscalationLevel = ESCALATION.NORMAL;\n const sessionStartTime = Date.now();\n\n function updateEscalation(): void {\n if (totalDenials >= denialThreshold * 2 || totalViolations >= violationThreshold * 2) {\n escalationLevel = ESCALATION.LOCKDOWN;\n } else if (totalDenials >= denialThreshold || totalViolations >= violationThreshold) {\n escalationLevel = ESCALATION.HIGH;\n } else if (totalDenials >= Math.ceil(denialThreshold / 2)) {\n escalationLevel = ESCALATION.ELEVATED;\n } else {\n escalationLevel = ESCALATION.NORMAL;\n }\n\n bus.emit('escalation', { level: escalationLevel });\n }\n\n return {\n bus,\n store,\n\n process(rawAction, systemContext = {}) {\n if (escalationLevel === ESCALATION.LOCKDOWN) {\n totalEvaluations++;\n const lockedResult: MonitorDecision = {\n allowed: false,\n intent: {\n action: rawAction?.tool || 'unknown',\n target: '',\n agent: rawAction?.agent || 'unknown',\n destructive: false,\n },\n decision: {\n allowed: false,\n decision: 'deny',\n matchedRule: null,\n matchedPolicy: null,\n reason: 'Session in LOCKDOWN \u2014 human intervention required',\n severity: 5,\n },\n violations: [],\n events: [],\n evidencePack: null,\n intervention: INTERVENTION.DENY,\n monitor: {\n escalationLevel,\n totalEvaluations,\n totalDenials,\n totalViolations,\n },\n };\n bus.emit('lockdown-denial', lockedResult as unknown as Record<string, unknown>);\n return lockedResult;\n }\n\n const result = engine.evaluate(rawAction, systemContext);\n totalEvaluations++;\n\n if (!result.allowed) {\n totalDenials++;\n const agent = result.intent.agent || 'unknown';\n denialsByAgent.set(agent, (denialsByAgent.get(agent) || 0) + 1);\n\n recentDenials.push({\n timestamp: Date.now(),\n action: result.intent.action,\n reason: result.decision.reason,\n });\n\n while (recentDenials.length > windowSize) {\n recentDenials.shift();\n }\n }\n\n for (const v of result.violations) {\n totalViolations++;\n const id = v.invariantId;\n violationsByInvariant.set(id, (violationsByInvariant.get(id) || 0) + 1);\n }\n\n updateEscalation();\n\n return {\n ...result,\n monitor: {\n escalationLevel,\n totalEvaluations,\n totalDenials,\n totalViolations,\n },\n };\n },\n\n getStatus() {\n return {\n escalationLevel,\n totalEvaluations,\n totalDenials,\n totalViolations,\n denialsByAgent: Object.fromEntries(denialsByAgent),\n violationsByInvariant: Object.fromEntries(violationsByInvariant),\n recentDenials: [...recentDenials],\n eventCount: store.count(),\n uptime: Date.now() - sessionStartTime,\n policyCount: engine.getPolicyCount(),\n invariantCount: engine.getInvariantCount(),\n policyErrors: engine.getPolicyErrors(),\n };\n },\n\n resetEscalation() {\n escalationLevel = ESCALATION.NORMAL;\n totalDenials = 0;\n totalViolations = 0;\n denialsByAgent.clear();\n violationsByInvariant.clear();\n recentDenials.length = 0;\n bus.emit('escalation-reset', { level: ESCALATION.NORMAL });\n },\n };\n}\n", "// Canonical action schema for the Agent Reference Monitor\n// All agent execution requests are normalized into these action objects.\n// No DOM, no Node.js APIs \u2014 pure data definitions.\n\nimport type {\n ActionClass,\n ActionDefinition,\n Decision,\n CanonicalAction,\n ValidationResult,\n} from './types.js';\nimport { simpleHash } from './hash.js';\n\n// --- Action Classes ---\nexport const ACTION_CLASS: Record<string, ActionClass> = {\n FILE: 'file',\n TEST: 'test',\n GIT: 'git',\n SHELL: 'shell',\n NPM: 'npm',\n HTTP: 'http',\n DEPLOY: 'deploy',\n INFRA: 'infra',\n};\n\n// --- Action Types ---\nexport const ACTION_TYPES: Record<string, ActionDefinition> = {\n 'file.read': { class: 'file', description: 'Read file contents' },\n 'file.write': { class: 'file', description: 'Write or create a file' },\n 'file.delete': { class: 'file', description: 'Delete a file' },\n 'file.move': { class: 'file', description: 'Move or rename a file' },\n 'test.run': { class: 'test', description: 'Run test suite' },\n 'test.run.unit': { class: 'test', description: 'Run unit tests' },\n 'test.run.integration': { class: 'test', description: 'Run integration tests' },\n 'git.diff': { class: 'git', description: 'View git diff' },\n 'git.commit': { class: 'git', description: 'Create a git commit' },\n 'git.push': { class: 'git', description: 'Push to remote' },\n 'git.branch.create': { class: 'git', description: 'Create a branch' },\n 'git.branch.delete': { class: 'git', description: 'Delete a branch' },\n 'git.checkout': { class: 'git', description: 'Switch branches' },\n 'git.reset': { class: 'git', description: 'Reset git state' },\n 'git.merge': { class: 'git', description: 'Merge branches' },\n 'shell.exec': { class: 'shell', description: 'Execute a shell command' },\n 'npm.install': { class: 'npm', description: 'Install npm packages' },\n 'npm.script.run': { class: 'npm', description: 'Run an npm script' },\n 'npm.publish': { class: 'npm', description: 'Publish to npm registry' },\n 'http.request': { class: 'http', description: 'Make an HTTP request' },\n 'deploy.trigger': { class: 'deploy', description: 'Trigger deployment' },\n 'infra.apply': { class: 'infra', description: 'Apply infrastructure changes' },\n 'infra.destroy': { class: 'infra', description: 'Destroy infrastructure' },\n};\n\n// --- Decisions ---\nexport const DECISION: Record<string, Decision> = {\n ALLOW: 'allow',\n DENY: 'deny',\n ESCALATE: 'escalate',\n};\n\n// --- Action Factory ---\nlet actionCounter = 0;\n\nexport function resetActionCounter(): void {\n actionCounter = 0;\n}\n\nfunction generateActionId(timestamp: number): string {\n return `act_${timestamp}_${++actionCounter}`;\n}\n\nfunction fingerprintAction(type: string, target: string, justification: string): string {\n return simpleHash(`${type}:${target}:${justification}`);\n}\n\nexport function validateActionType(type: string): ValidationResult {\n const errors: string[] = [];\n if (typeof type !== 'string' || !type) {\n errors.push('Action type must be a non-empty string');\n return { valid: false, errors };\n }\n if (!ACTION_TYPES[type]) {\n errors.push(`Unknown action type: ${type}`);\n return { valid: false, errors };\n }\n return { valid: true, errors };\n}\n\nexport function validateAction(action: Record<string, unknown>): ValidationResult {\n const errors: string[] = [];\n\n if (!action || typeof action !== 'object') {\n return { valid: false, errors: ['Action must be a non-null object'] };\n }\n\n if (!action.type) {\n errors.push('Action is missing required field: type');\n } else {\n const typeCheck = validateActionType(action.type as string);\n if (!typeCheck.valid) errors.push(...typeCheck.errors);\n }\n\n if (!action.target && action.target !== '') {\n errors.push('Action is missing required field: target');\n }\n\n if (!action.justification) {\n errors.push('Action is missing required field: justification');\n }\n\n return { valid: errors.length === 0, errors };\n}\n\nexport function createAction(\n type: string,\n target: string,\n justification: string,\n metadata: Record<string, unknown> = {}\n): CanonicalAction {\n const action: Record<string, unknown> = { type, target, justification, ...metadata };\n\n const { valid, errors } = validateAction(action);\n if (!valid) {\n throw new Error(`Invalid action: ${errors.join('; ')}`);\n }\n\n const timestamp = Date.now();\n action.id = generateActionId(timestamp);\n action.class = ACTION_TYPES[type].class;\n action.timestamp = timestamp;\n action.fingerprint = fingerprintAction(type, target, justification);\n\n return action as unknown as CanonicalAction;\n}\n\nexport function getActionClass(type: string): ActionClass | null {\n const def = ACTION_TYPES[type];\n return def ? def.class : null;\n}\n\nexport function listActionTypes(): string[] {\n return Object.keys(ACTION_TYPES);\n}\n", "// Execution adapters for the Agent Reference Monitor\n// Adapters translate authorized action objects into executable operations.\n// Each adapter validates that an action has been authorized before proceeding.\n// No DOM, no Node.js APIs \u2014 pure adapter interfaces and registry.\n\nimport type {\n CanonicalAction,\n DecisionRecord,\n ExecutionResult,\n AdapterHandler,\n AdapterRegistry,\n} from './types.js';\nimport { DECISION } from './actions.js';\n\n// --- Adapter Registry ---\n\nexport function createAdapterRegistry(): AdapterRegistry {\n const adapters = new Map<string, AdapterHandler>();\n\n function register(actionClass: string, handler: AdapterHandler): void {\n if (typeof handler !== 'function') {\n throw new Error(`Adapter handler must be a function for class: ${actionClass}`);\n }\n adapters.set(actionClass, handler);\n }\n\n async function execute(\n action: CanonicalAction,\n decisionRecord: DecisionRecord\n ): Promise<ExecutionResult> {\n if (!decisionRecord || decisionRecord.decision !== DECISION.ALLOW) {\n return {\n success: false,\n error: `Action not authorized: ${decisionRecord ? decisionRecord.decision : 'no decision'}`,\n };\n }\n\n if (decisionRecord.actionId !== action.id) {\n return {\n success: false,\n error: `Decision record does not match action (expected ${action.id}, got ${decisionRecord.actionId})`,\n };\n }\n\n const adapter = adapters.get(action.class);\n if (!adapter) {\n return {\n success: false,\n error: `No adapter registered for action class: ${action.class}`,\n };\n }\n\n try {\n const result = await adapter(action);\n return { success: true, result };\n } catch (err) {\n return { success: false, error: (err as Error).message };\n }\n }\n\n function has(actionClass: string): boolean {\n return adapters.has(actionClass);\n }\n\n function listRegistered(): string[] {\n return [...adapters.keys()];\n }\n\n return Object.freeze({\n register,\n execute,\n has,\n listRegistered,\n });\n}\n\n// --- Dry-Run Adapter ---\n\ninterface DryRunEntry {\n type: string;\n target: string;\n timestamp: number;\n dryRun: true;\n}\n\nexport function createDryRunAdapter(): {\n adapter: AdapterHandler;\n getLog: () => DryRunEntry[];\n clear: () => void;\n} {\n const log: DryRunEntry[] = [];\n\n const adapter: AdapterHandler = (action: CanonicalAction) => {\n const entry: DryRunEntry = {\n type: action.type,\n target: action.target,\n timestamp: Date.now(),\n dryRun: true,\n };\n log.push(entry);\n return entry;\n };\n\n return {\n adapter,\n getLog: () => [...log],\n clear: () => {\n log.length = 0;\n },\n };\n}\n\nexport function createDryRunRegistry(): {\n registry: AdapterRegistry;\n dryRun: ReturnType<typeof createDryRunAdapter>;\n} {\n const registry = createAdapterRegistry();\n const dryRun = createDryRunAdapter();\n\n const classes = ['file', 'test', 'git', 'shell', 'npm', 'http', 'deploy', 'infra'];\n for (const cls of classes) {\n registry.register(cls, dryRun.adapter);\n }\n\n return { registry, dryRun };\n}\n", "// Decision record factory \u2014 builds GovernanceDecisionRecord from kernel data.\n// Pure logic. Combines MonitorDecision + execution result into a single record.\n\nimport type { GovernanceDecisionRecord, SimulationSummary } from './types.js';\nimport type { MonitorDecision } from '../monitor.js';\nimport type { ExecutionResult } from '../../core/types.js';\nimport { simpleHash } from '../../core/hash.js';\n\nexport interface DecisionFactoryInput {\n runId: string;\n decision: MonitorDecision;\n execution: ExecutionResult | null;\n executionDurationMs: number | null;\n simulation: SimulationSummary | null;\n}\n\nfunction generateRecordId(timestamp: number, runId: string, action: string): string {\n const content = `${timestamp}:${runId}:${action}`;\n return `dec_${timestamp}_${simpleHash(content)}`;\n}\n\nexport function buildDecisionRecord(input: DecisionFactoryInput): GovernanceDecisionRecord {\n const { runId, decision, execution, executionDurationMs, simulation } = input;\n const timestamp = Date.now();\n const intent = decision.intent;\n\n return {\n recordId: generateRecordId(timestamp, runId, intent.action),\n runId,\n timestamp,\n action: {\n type: intent.action,\n target: intent.target,\n agent: intent.agent,\n destructive: intent.destructive,\n command: intent.command,\n },\n outcome: decision.allowed ? 'allow' : 'deny',\n reason: decision.decision.reason,\n intervention: decision.intervention,\n policy: {\n matchedPolicyId: decision.decision.matchedPolicy?.id ?? null,\n matchedPolicyName: decision.decision.matchedPolicy?.name ?? null,\n severity: decision.decision.severity,\n },\n invariants: {\n allHold: decision.violations.length === 0,\n violations: decision.violations.map((v) => ({\n invariantId: v.invariantId,\n name: v.name,\n severity: v.severity,\n expected: v.expected,\n actual: v.actual,\n })),\n },\n simulation,\n evidencePackId: decision.evidencePack?.packId ?? null,\n monitor: {\n escalationLevel: decision.monitor.escalationLevel,\n totalEvaluations: decision.monitor.totalEvaluations,\n totalDenials: decision.monitor.totalDenials,\n },\n execution: {\n executed: execution !== null,\n success: execution?.success ?? null,\n durationMs: executionDurationMs,\n error: execution?.error ?? null,\n },\n };\n}\n", "// Seeded pseudo-random number generator for deterministic replay.\n// Uses the mulberry32 algorithm \u2014 fast, simple, well-distributed outputs.\n// Same seed + same call sequence = identical results.\n\n/**\n * A seeded PRNG instance. All methods are deterministic given the same\n * seed and the same sequence of calls.\n */\nexport interface SeededRng {\n /** The seed used to initialize this RNG */\n readonly seed: number;\n /** Returns a random float in [0, 1) */\n random(): number;\n /** Returns a random integer in [min, max) */\n randomInt(min: number, max: number): number;\n /** Returns a random hex string of the given length */\n randomHex(length: number): string;\n /** Creates a fork with a derived seed (independent stream) */\n fork(): SeededRng;\n}\n\n/**\n * Generate a seed from system entropy (non-deterministic).\n * Used when recording a new session to capture the initial seed.\n */\nexport function generateSeed(): number {\n return (Math.random() * 0xffffffff) >>> 0;\n}\n\n/**\n * Create a seeded PRNG using the mulberry32 algorithm.\n *\n * Mulberry32 is a simple 32-bit state PRNG with good statistical properties.\n * It passes BigCrush and is sufficient for ID generation and shuffling.\n */\nexport function createSeededRng(seed: number): SeededRng {\n let state = seed >>> 0;\n\n function next(): number {\n state |= 0;\n state = (state + 0x6d2b79f5) | 0;\n let t = Math.imul(state ^ (state >>> 15), 1 | state);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 0x100000000;\n }\n\n return {\n get seed() {\n return seed;\n },\n\n random: next,\n\n randomInt(min: number, max: number): number {\n return Math.floor(next() * (max - min)) + min;\n },\n\n randomHex(length: number): string {\n const chars = '0123456789abcdef';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars[Math.floor(next() * 16)];\n }\n return result;\n },\n\n fork(): SeededRng {\n const derivedSeed = (next() * 0xffffffff) >>> 0;\n return createSeededRng(derivedSeed);\n },\n };\n}\n", "// Governed Action Kernel \u2014 the core orchestrator.\n// Connects monitor (AAB + policy + invariants) with execution adapters.\n// Emits full action lifecycle events: REQUESTED \u2192 ALLOWED/DENIED \u2192 EXECUTED/FAILED.\n// Builds GovernanceDecisionRecords and sinks them for audit.\n\nimport type { DomainEvent, CanonicalAction } from '../core/types.js';\nimport { createMonitor } from './monitor.js';\nimport type { MonitorConfig, MonitorDecision } from './monitor.js';\nimport type { RawAgentAction } from './aab.js';\nimport { createAction, getActionClass } from '../core/actions.js';\nimport { createAdapterRegistry } from '../core/adapters.js';\nimport type { AdapterRegistry, ExecutionResult, DecisionRecord } from '../core/types.js';\nimport {\n createEvent,\n ACTION_REQUESTED,\n ACTION_ALLOWED,\n ACTION_DENIED,\n ACTION_EXECUTED,\n ACTION_FAILED,\n DECISION_RECORDED,\n SIMULATION_COMPLETED,\n} from '../events/schema.js';\nimport { simpleHash } from '../core/hash.js';\nimport type { GovernanceDecisionRecord, DecisionSink } from './decisions/types.js';\nimport { buildDecisionRecord } from './decisions/factory.js';\nimport type { SimulatorRegistry } from './simulation/types.js';\nimport type { SeededRng } from '../core/rng.js';\nimport { generateSeed, createSeededRng } from '../core/rng.js';\n\nexport interface KernelResult {\n allowed: boolean;\n executed: boolean;\n decision: MonitorDecision;\n execution: ExecutionResult | null;\n action: CanonicalAction | null;\n events: DomainEvent[];\n runId: string;\n /** Governance decision record (additive \u2014 not present in older results) */\n decisionRecord?: GovernanceDecisionRecord;\n}\n\nexport interface EventSink {\n write(event: DomainEvent): void;\n flush?(): void;\n}\n\nexport interface KernelConfig extends MonitorConfig {\n runId?: string;\n sinks?: EventSink[];\n adapters?: AdapterRegistry;\n dryRun?: boolean;\n /** Optional decision sinks for persisting GovernanceDecisionRecords */\n decisionSinks?: DecisionSink[];\n /** Optional simulator registry for pre-execution impact simulation */\n simulators?: SimulatorRegistry;\n /** Blast radius threshold \u2014 simulation above this triggers invariant re-check */\n simulationBlastRadiusThreshold?: number;\n /** Optional seeded RNG for deterministic replay. If omitted, a random seed is generated. */\n rng?: SeededRng;\n}\n\nexport interface Kernel {\n propose(\n rawAction: RawAgentAction,\n systemContext?: Record<string, unknown>\n ): Promise<KernelResult>;\n getRunId(): string;\n /** Returns the seed used by this kernel's RNG (for session recording / replay) */\n getSeed(): number;\n getActionLog(): KernelResult[];\n getEventCount(): number;\n shutdown(): void;\n}\n\nfunction generateRunId(rng: SeededRng): string {\n return `run_${Date.now()}_${simpleHash(rng.random().toString())}`;\n}\n\nexport function createKernel(config: KernelConfig = {}): Kernel {\n const rng = config.rng || createSeededRng(generateSeed());\n const runId = config.runId || generateRunId(rng);\n const sinks: EventSink[] = config.sinks || [];\n const decisionSinks: DecisionSink[] = config.decisionSinks || [];\n const adapters = config.adapters || createAdapterRegistry();\n const dryRun = config.dryRun ?? false;\n const simulators = config.simulators || null;\n const blastRadiusThreshold = config.simulationBlastRadiusThreshold ?? 50;\n const actionLog: KernelResult[] = [];\n let eventCount = 0;\n\n const monitor = createMonitor({\n policyDefs: config.policyDefs,\n invariants: config.invariants,\n denialThreshold: config.denialThreshold,\n violationThreshold: config.violationThreshold,\n windowSize: config.windowSize,\n });\n\n function sinkEvent(event: DomainEvent): void {\n eventCount++;\n for (const sink of sinks) {\n sink.write(event);\n }\n }\n\n function sinkEvents(events: DomainEvent[]): void {\n for (const event of events) {\n sinkEvent(event);\n }\n }\n\n function sinkDecision(record: GovernanceDecisionRecord): void {\n for (const sink of decisionSinks) {\n sink.write(record);\n }\n }\n\n return {\n propose: async (rawAction, systemContext = {}) => {\n const allEvents: DomainEvent[] = [];\n\n // 1. Emit ACTION_REQUESTED\n const requestedEvent = createEvent(ACTION_REQUESTED, {\n actionType: rawAction.tool || 'unknown',\n target: rawAction.file || rawAction.target || '',\n justification: (rawAction.metadata?.justification as string) || 'agent action',\n actionId: undefined,\n agentId: rawAction.agent || 'unknown',\n metadata: { runId, command: rawAction.command },\n });\n allEvents.push(requestedEvent);\n\n // 2. Evaluate via monitor (AAB \u2192 policy \u2192 invariants \u2192 evidence)\n const decision = monitor.process(rawAction, systemContext);\n\n // 3. Create canonical action object for execution\n let action: CanonicalAction | null = null;\n try {\n const actionType = decision.intent.action;\n const target = decision.intent.target;\n if (actionType !== 'unknown') {\n action = createAction(actionType, target, 'kernel-proposed', {\n command: rawAction.command,\n agent: rawAction.agent,\n runId,\n });\n }\n } catch {\n // Action creation may fail for unknown types \u2014 continue with null\n }\n\n // 4. Emit decision events from monitor\n sinkEvents(decision.events);\n\n if (!decision.allowed) {\n // 5a. DENIED \u2014 emit denial event, build decision record\n const deniedEvent = createEvent(ACTION_DENIED, {\n actionType: decision.intent.action,\n target: decision.intent.target,\n reason: decision.decision.reason,\n actionId: action?.id,\n policyHash: decision.decision.matchedPolicy?.id,\n metadata: {\n runId,\n intervention: decision.intervention,\n violations: decision.violations,\n },\n });\n allEvents.push(deniedEvent);\n sinkEvents(allEvents);\n\n const decisionRecord = buildDecisionRecord({\n runId,\n decision,\n execution: null,\n executionDurationMs: null,\n simulation: null,\n });\n sinkDecision(decisionRecord);\n\n // Emit DECISION_RECORDED event\n const decisionEvent = createEvent(DECISION_RECORDED, {\n recordId: decisionRecord.recordId,\n outcome: decisionRecord.outcome,\n actionType: decisionRecord.action.type,\n target: decisionRecord.action.target,\n reason: decisionRecord.reason,\n });\n sinkEvent(decisionEvent);\n\n const result: KernelResult = {\n allowed: false,\n executed: false,\n decision,\n execution: null,\n action,\n events: allEvents,\n runId,\n decisionRecord,\n };\n actionLog.push(result);\n return result;\n }\n\n // 5b. ALLOWED \u2014 run simulation if available, then re-check\n let simulationResult = null;\n\n if (simulators && simulators.find(decision.intent)) {\n const simulator = simulators.find(decision.intent)!;\n try {\n simulationResult = await simulator.simulate(decision.intent, systemContext);\n\n // Emit simulation event\n const simEvent = createEvent(SIMULATION_COMPLETED, {\n simulatorId: simulationResult.simulatorId,\n riskLevel: simulationResult.riskLevel,\n blastRadius: simulationResult.blastRadius,\n predictedChanges: simulationResult.predictedChanges,\n durationMs: simulationResult.durationMs,\n });\n allEvents.push(simEvent);\n sinkEvent(simEvent);\n\n // Re-check invariants if simulation reveals elevated risk\n if (\n simulationResult.blastRadius > blastRadiusThreshold ||\n simulationResult.riskLevel === 'high'\n ) {\n // Import checker for re-check\n const { checkAllInvariants, buildSystemState } =\n await import('../invariants/checker.js');\n const { DEFAULT_INVARIANTS } = await import('../invariants/definitions.js');\n\n const reCheckState = buildSystemState({\n ...systemContext,\n filesAffected: simulationResult.blastRadius,\n simulatedBlastRadius: simulationResult.blastRadius,\n simulatedRiskLevel: simulationResult.riskLevel,\n targetBranch: decision.intent.branch || (systemContext.targetBranch as string),\n forcePush: decision.intent.action === 'git.force-push',\n directPush: decision.intent.action === 'git.push',\n isPush:\n decision.intent.action === 'git.push' ||\n decision.intent.action === 'git.force-push',\n });\n\n const reCheck = checkAllInvariants(\n config.invariants || DEFAULT_INVARIANTS,\n reCheckState\n );\n\n if (!reCheck.allHold) {\n // Simulation-triggered denial\n sinkEvents(reCheck.events);\n\n const deniedEvent = createEvent(ACTION_DENIED, {\n actionType: decision.intent.action,\n target: decision.intent.target,\n reason: `Simulation revealed elevated risk: ${simulationResult.riskLevel} (blast radius: ${simulationResult.blastRadius})`,\n actionId: action?.id,\n metadata: {\n runId,\n simulationTriggered: true,\n simulatorId: simulationResult.simulatorId,\n violations: reCheck.violations.map((v) => ({\n invariantId: v.invariant.id,\n name: v.invariant.name,\n severity: v.invariant.severity,\n expected: v.result.expected,\n actual: v.result.actual,\n })),\n },\n });\n allEvents.push(deniedEvent);\n sinkEvents(allEvents);\n\n const simSummary = {\n predictedChanges: simulationResult.predictedChanges,\n blastRadius: simulationResult.blastRadius,\n riskLevel: simulationResult.riskLevel,\n simulatorId: simulationResult.simulatorId,\n durationMs: simulationResult.durationMs,\n };\n\n const decisionRecord = buildDecisionRecord({\n runId,\n decision: {\n ...decision,\n allowed: false,\n violations: reCheck.violations.map((v) => ({\n invariantId: v.invariant.id,\n name: v.invariant.name,\n severity: v.invariant.severity,\n expected: v.result.expected,\n actual: v.result.actual,\n })),\n },\n execution: null,\n executionDurationMs: null,\n simulation: simSummary,\n });\n sinkDecision(decisionRecord);\n\n const decisionEvent = createEvent(DECISION_RECORDED, {\n recordId: decisionRecord.recordId,\n outcome: 'deny',\n actionType: decisionRecord.action.type,\n target: decisionRecord.action.target,\n reason: `Simulation-triggered denial`,\n });\n sinkEvent(decisionEvent);\n\n const result: KernelResult = {\n allowed: false,\n executed: false,\n decision: {\n ...decision,\n allowed: false,\n violations: reCheck.violations.map((v) => ({\n invariantId: v.invariant.id,\n name: v.invariant.name,\n severity: v.invariant.severity,\n expected: v.result.expected,\n actual: v.result.actual,\n })),\n },\n execution: null,\n action,\n events: allEvents,\n runId,\n decisionRecord,\n };\n actionLog.push(result);\n return result;\n }\n }\n } catch {\n // Simulation failure is non-fatal \u2014 continue with execution\n }\n }\n\n // Emit allowed event\n const allowedEvent = createEvent(ACTION_ALLOWED, {\n actionType: decision.intent.action,\n target: decision.intent.target,\n capability: decision.decision.matchedPolicy?.id || 'default-allow',\n actionId: action?.id,\n reason: decision.decision.reason,\n metadata: { runId },\n });\n allEvents.push(allowedEvent);\n\n // 6. Execute via adapter (unless dry-run)\n let execution: ExecutionResult | null = null;\n let executionDurationMs: number | null = null;\n if (!dryRun && action) {\n const actionClass = getActionClass(action.type);\n if (actionClass && adapters.has(actionClass)) {\n const adapterDecisionRecord: DecisionRecord = {\n actionId: action.id,\n decision: 'allow',\n reason: decision.decision.reason,\n timestamp: Date.now(),\n policyHash: decision.decision.matchedPolicy?.id || 'none',\n };\n\n const startTime = Date.now();\n try {\n execution = await adapters.execute(action, adapterDecisionRecord);\n executionDurationMs = Date.now() - startTime;\n\n if (execution.success) {\n const executedEvent = createEvent(ACTION_EXECUTED, {\n actionType: action.type,\n target: action.target,\n result: 'success',\n actionId: action.id,\n duration: executionDurationMs,\n metadata: { runId },\n });\n allEvents.push(executedEvent);\n } else {\n const failedEvent = createEvent(ACTION_FAILED, {\n actionType: action.type,\n target: action.target,\n error: execution.error || 'Unknown execution error',\n actionId: action.id,\n duration: executionDurationMs,\n metadata: { runId },\n });\n allEvents.push(failedEvent);\n }\n } catch (err) {\n executionDurationMs = Date.now() - startTime;\n execution = { success: false, error: (err as Error).message };\n const failedEvent = createEvent(ACTION_FAILED, {\n actionType: action.type,\n target: action.target,\n error: (err as Error).message,\n actionId: action.id,\n duration: executionDurationMs,\n metadata: { runId },\n });\n allEvents.push(failedEvent);\n }\n }\n }\n\n sinkEvents(allEvents);\n\n // Build and sink governance decision record\n const simSummary = simulationResult\n ? {\n predictedChanges: simulationResult.predictedChanges,\n blastRadius: simulationResult.blastRadius,\n riskLevel: simulationResult.riskLevel,\n simulatorId: simulationResult.simulatorId,\n durationMs: simulationResult.durationMs,\n }\n : null;\n\n const decisionRecord = buildDecisionRecord({\n runId,\n decision,\n execution,\n executionDurationMs,\n simulation: simSummary,\n });\n sinkDecision(decisionRecord);\n\n // Emit DECISION_RECORDED event\n const decisionEvent = createEvent(DECISION_RECORDED, {\n recordId: decisionRecord.recordId,\n outcome: decisionRecord.outcome,\n actionType: decisionRecord.action.type,\n target: decisionRecord.action.target,\n reason: decisionRecord.reason,\n });\n sinkEvent(decisionEvent);\n\n const result: KernelResult = {\n allowed: true,\n executed: execution !== null,\n decision,\n execution,\n action,\n events: allEvents,\n runId,\n decisionRecord,\n };\n actionLog.push(result);\n return result;\n },\n\n getRunId() {\n return runId;\n },\n\n getSeed() {\n return rng.seed;\n },\n\n getActionLog() {\n return [...actionLog];\n },\n\n getEventCount() {\n return eventCount;\n },\n\n shutdown() {\n for (const sink of sinks) {\n if (sink.flush) sink.flush();\n }\n for (const sink of decisionSinks) {\n if (sink.flush) sink.flush();\n }\n },\n };\n}\n", "// File operation adapter \u2014 executes file.read, file.write, file.delete actions.\n// Node.js adapter. Uses fs APIs.\n\nimport { readFile, writeFile, unlink, rename } from 'node:fs/promises';\nimport type { CanonicalAction } from '../core/types.js';\n\nexport async function fileAdapter(action: CanonicalAction): Promise<unknown> {\n const target = action.target;\n\n switch (action.type) {\n case 'file.read': {\n const content = await readFile(target, 'utf8');\n return { path: target, size: content.length };\n }\n\n case 'file.write': {\n const content = (action as Record<string, unknown>).content as string | undefined;\n if (content === undefined) {\n throw new Error('file.write requires content');\n }\n await writeFile(target, content, 'utf8');\n return { path: target, written: content.length };\n }\n\n case 'file.delete': {\n await unlink(target);\n return { path: target, deleted: true };\n }\n\n case 'file.move': {\n const destination = (action as Record<string, unknown>).destination as string | undefined;\n if (!destination) {\n throw new Error('file.move requires destination');\n }\n await rename(target, destination);\n return { from: target, to: destination };\n }\n\n default:\n throw new Error(`Unsupported file action: ${action.type}`);\n }\n}\n", "// Shell execution adapter \u2014 executes shell.exec actions.\n// Node.js adapter. Uses child_process.\n\nimport { exec } from 'node:child_process';\nimport type { CanonicalAction } from '../core/types.js';\n\nconst DEFAULT_TIMEOUT = 30_000;\nconst MAX_BUFFER = 1024 * 1024; // 1MB\n\nexport interface ShellResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\nexport async function shellAdapter(action: CanonicalAction): Promise<ShellResult> {\n const command = (action as Record<string, unknown>).command as string | undefined;\n if (!command) {\n throw new Error('shell.exec requires a command');\n }\n\n const timeout =\n ((action as Record<string, unknown>).timeout as number | undefined) || DEFAULT_TIMEOUT;\n const cwd = (action as Record<string, unknown>).cwd as string | undefined;\n\n return new Promise((resolve, reject) => {\n exec(command, { timeout, maxBuffer: MAX_BUFFER, cwd }, (error, stdout, stderr) => {\n if (error && error.killed) {\n reject(new Error(`Command timed out after ${timeout}ms: ${command}`));\n return;\n }\n\n resolve({\n stdout: stdout.toString(),\n stderr: stderr.toString(),\n exitCode: error ? (error.code ?? 1) : 0,\n });\n });\n });\n}\n", "// Git operation adapter \u2014 executes git.commit, git.push, etc.\n// Node.js adapter. Wraps shell execution with git-specific validation.\n\nimport { exec } from 'node:child_process';\nimport type { CanonicalAction } from '../core/types.js';\n\nconst GIT_TIMEOUT = 30_000;\n\nfunction execGit(command: string, cwd?: string): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n exec(command, { timeout: GIT_TIMEOUT, cwd }, (error, stdout, stderr) => {\n if (error) {\n reject(new Error(`Git command failed: ${stderr || error.message}`));\n return;\n }\n resolve({ stdout: stdout.toString(), stderr: stderr.toString() });\n });\n });\n}\n\nexport async function gitAdapter(action: CanonicalAction): Promise<unknown> {\n const cwd = (action as Record<string, unknown>).cwd as string | undefined;\n\n switch (action.type) {\n case 'git.commit': {\n const message = (action as Record<string, unknown>).message as string | undefined;\n if (!message) {\n throw new Error('git.commit requires a message');\n }\n const result = await execGit(`git commit -m \"${message.replace(/\"/g, '\\\\\"')}\"`, cwd);\n return { committed: true, output: result.stdout.trim() };\n }\n\n case 'git.push': {\n const branch = action.target || 'HEAD';\n const remote = ((action as Record<string, unknown>).remote as string | undefined) || 'origin';\n const result = await execGit(`git push ${remote} ${branch}`, cwd);\n return { pushed: true, branch, remote, output: result.stdout.trim() };\n }\n\n case 'git.diff': {\n const result = await execGit('git diff', cwd);\n return { diff: result.stdout };\n }\n\n case 'git.branch.create': {\n const branch = action.target;\n const result = await execGit(`git checkout -b ${branch}`, cwd);\n return { created: true, branch, output: result.stdout.trim() };\n }\n\n case 'git.branch.delete': {\n const branch = action.target;\n const result = await execGit(`git branch -d ${branch}`, cwd);\n return { deleted: true, branch, output: result.stdout.trim() };\n }\n\n case 'git.checkout': {\n const branch = action.target;\n const result = await execGit(`git checkout ${branch}`, cwd);\n return { checkedOut: true, branch, output: result.stdout.trim() };\n }\n\n case 'git.merge': {\n const branch = action.target;\n const result = await execGit(`git merge ${branch}`, cwd);\n return { merged: true, branch, output: result.stdout.trim() };\n }\n\n default:\n throw new Error(`Unsupported git action: ${action.type}`);\n }\n}\n", "// Adapter registry \u2014 connects action classes to execution handlers.\n// Node.js module. Registers file, shell, and git adapters.\n\nimport { createAdapterRegistry, createDryRunRegistry } from '../core/adapters.js';\nimport type { AdapterRegistry } from '../core/types.js';\nimport { fileAdapter } from './file.js';\nimport { shellAdapter } from './shell.js';\nimport { gitAdapter } from './git.js';\n\nexport function createLiveRegistry(): AdapterRegistry {\n const registry = createAdapterRegistry();\n\n registry.register('file', fileAdapter);\n registry.register('shell', shellAdapter);\n registry.register('git', gitAdapter);\n\n return registry;\n}\n\nexport { createDryRunRegistry };\n", "// JSONL event sink \u2014 persists events to .agentguard/events/<runId>.jsonl.\n// Node.js module. Creates directories as needed.\n\nimport { mkdirSync, appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { DomainEvent } from '../core/types.js';\nimport type { EventSink } from '../kernel/kernel.js';\n\nconst DEFAULT_BASE_DIR = '.agentguard';\nconst EVENTS_DIR = 'events';\n\nexport interface JsonlSinkOptions {\n baseDir?: string;\n runId: string;\n}\n\nexport function createJsonlSink(options: JsonlSinkOptions): EventSink {\n const baseDir = options.baseDir || DEFAULT_BASE_DIR;\n const eventsDir = join(baseDir, EVENTS_DIR);\n const filePath = join(eventsDir, `${options.runId}.jsonl`);\n\n let initialized = false;\n const buffer: string[] = [];\n\n function ensureDir(): void {\n if (initialized) return;\n try {\n mkdirSync(eventsDir, { recursive: true });\n initialized = true;\n } catch {\n // Directory may already exist\n initialized = true;\n }\n }\n\n return {\n write(event: DomainEvent): void {\n ensureDir();\n const line = JSON.stringify(event) + '\\n';\n buffer.push(line);\n\n // Write immediately for durability\n try {\n appendFileSync(filePath, line, 'utf8');\n } catch {\n // Swallow write errors \u2014 don't crash the kernel\n }\n },\n\n flush(): void {\n buffer.length = 0;\n },\n };\n}\n\nexport function getEventFilePath(runId: string, baseDir?: string): string {\n return join(baseDir || DEFAULT_BASE_DIR, EVENTS_DIR, `${runId}.jsonl`);\n}\n", "// Decision JSONL sink \u2014 persists GovernanceDecisionRecords to\n// .agentguard/decisions/<runId>.jsonl.\n// Follows the same pattern as the event JSONL sink (jsonl.ts).\n\nimport { mkdirSync, appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { GovernanceDecisionRecord, DecisionSink } from '../kernel/decisions/types.js';\n\nconst DEFAULT_BASE_DIR = '.agentguard';\nconst DECISIONS_DIR = 'decisions';\n\nexport interface DecisionJsonlSinkOptions {\n baseDir?: string;\n runId: string;\n}\n\nexport function createDecisionJsonlSink(options: DecisionJsonlSinkOptions): DecisionSink {\n const baseDir = options.baseDir || DEFAULT_BASE_DIR;\n const decisionsDir = join(baseDir, DECISIONS_DIR);\n const filePath = join(decisionsDir, `${options.runId}.jsonl`);\n\n let initialized = false;\n\n function ensureDir(): void {\n if (initialized) return;\n try {\n mkdirSync(decisionsDir, { recursive: true });\n initialized = true;\n } catch {\n // Directory may already exist\n initialized = true;\n }\n }\n\n return {\n write(record: GovernanceDecisionRecord): void {\n ensureDir();\n const line = JSON.stringify(record) + '\\n';\n\n try {\n appendFileSync(filePath, line, 'utf8');\n } catch {\n // Swallow write errors \u2014 don't crash the kernel\n }\n },\n\n flush(): void {\n // No buffering \u2014 writes are immediate for durability\n },\n };\n}\n\nexport function getDecisionFilePath(runId: string, baseDir?: string): string {\n return join(baseDir || DEFAULT_BASE_DIR, DECISIONS_DIR, `${runId}.jsonl`);\n}\n", "// Runtime telemetry logger \u2014 persists flattened governance events to\n// logs/runtime-events.jsonl for downstream agents and monitors.\n// Implements DecisionSink so it plugs directly into the kernel pipeline.\n\nimport { mkdirSync, appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { GovernanceDecisionRecord, DecisionSink } from '../kernel/decisions/types.js';\nimport type { TelemetryEvent, TelemetryLoggerOptions, TelemetrySink } from './types.js';\n\nconst DEFAULT_LOG_DIR = 'logs';\nconst DEFAULT_LOG_FILE = 'runtime-events.jsonl';\n\n/** Map a GovernanceDecisionRecord to a flattened TelemetryEvent. */\nexport function buildTelemetryEvent(record: GovernanceDecisionRecord): TelemetryEvent {\n return {\n timestamp: new Date(record.timestamp).toISOString(),\n agent: record.action.agent,\n run_id: record.runId,\n syscall: record.action.type,\n target: record.action.target,\n capability: record.policy.matchedPolicyId ?? 'default-allow',\n policy_result: record.outcome,\n invariant_result: record.invariants.allHold ? 'pass' : 'fail',\n };\n}\n\n/** Create a TelemetrySink that appends JSON lines to a single shared log file. */\nexport function createTelemetryLogger(options?: TelemetryLoggerOptions): TelemetrySink {\n const logDir = options?.logDir ?? DEFAULT_LOG_DIR;\n const logFile = options?.logFile ?? DEFAULT_LOG_FILE;\n const filePath = join(logDir, logFile);\n\n let initialized = false;\n\n function ensureDir(): void {\n if (initialized) return;\n try {\n mkdirSync(logDir, { recursive: true });\n initialized = true;\n } catch {\n // Directory may already exist\n initialized = true;\n }\n }\n\n return {\n write(event: TelemetryEvent): void {\n ensureDir();\n const line = JSON.stringify(event) + '\\n';\n\n try {\n appendFileSync(filePath, line, 'utf8');\n } catch {\n // Swallow write errors \u2014 don't crash the kernel\n }\n },\n\n flush(): void {\n // No buffering \u2014 writes are immediate for durability\n },\n };\n}\n\n/** Create a DecisionSink adapter that converts decision records to telemetry events. */\nexport function createTelemetryDecisionSink(options?: TelemetryLoggerOptions): DecisionSink {\n const logger = createTelemetryLogger(options);\n\n return {\n write(record: GovernanceDecisionRecord): void {\n const event = buildTelemetryEvent(record);\n logger.write(event);\n },\n\n flush(): void {\n logger.flush?.();\n },\n };\n}\n", "// YAML policy loader \u2014 parses simple YAML policy files into LoadedPolicy format.\n// Supports the subset of YAML needed for AgentGuard policy definitions.\n// No external dependencies \u2014 minimal line-based parser for constrained format.\n\nimport type { PolicyRule, LoadedPolicy } from './evaluator.js';\n\nexport interface YamlPolicyDef {\n id?: string;\n name?: string;\n description?: string;\n severity?: number;\n extends?: string[];\n rules?: YamlRule[];\n}\n\ninterface YamlRule {\n action?: string;\n effect?: string;\n target?: string;\n branches?: string[];\n reason?: string;\n limit?: number;\n requireTests?: boolean;\n}\n\nfunction trimQuotes(s: string): string {\n if ((s.startsWith('\"') && s.endsWith('\"')) || (s.startsWith(\"'\") && s.endsWith(\"'\"))) {\n return s.slice(1, -1);\n }\n return s;\n}\n\nfunction parseValue(raw: string): string | number | boolean {\n const s = raw.trim();\n if (s === 'true') return true;\n if (s === 'false') return false;\n if (s === 'null' || s === '~') return '';\n if (/^-?\\d+$/.test(s)) return parseInt(s, 10);\n if (/^-?\\d+\\.\\d+$/.test(s)) return parseFloat(s);\n return trimQuotes(s);\n}\n\nfunction parseInlineArray(raw: string): string[] {\n const trimmed = raw.trim();\n if (!trimmed.startsWith('[') || !trimmed.endsWith(']')) return [];\n const inner = trimmed.slice(1, -1);\n return inner\n .split(',')\n .map((s) => trimQuotes(s.trim()))\n .filter((s) => s.length > 0);\n}\n\nfunction indentLevel(line: string): number {\n const match = line.match(/^(\\s*)/);\n return match ? match[1].length : 0;\n}\n\nexport function parseYamlPolicy(yaml: string): YamlPolicyDef {\n const lines = yaml.split('\\n');\n const result: YamlPolicyDef = {};\n const rules: YamlRule[] = [];\n let currentRule: YamlRule | null = null;\n let inRules = false;\n let inBranches = false;\n let inExtends = false;\n\n for (const rawLine of lines) {\n const line = rawLine.replace(/\\r$/, '');\n\n // Skip blank lines and comments\n if (!line.trim() || line.trim().startsWith('#')) continue;\n\n const indent = indentLevel(line);\n const trimmed = line.trim();\n\n // Top-level keys (indent 0)\n if (indent === 0) {\n inRules = false;\n inBranches = false;\n inExtends = false;\n if (currentRule) {\n rules.push(currentRule);\n currentRule = null;\n }\n\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx === -1) continue;\n\n const key = trimmed.slice(0, colonIdx).trim();\n const val = trimmed.slice(colonIdx + 1).trim();\n\n switch (key) {\n case 'id':\n result.id = trimQuotes(val);\n break;\n case 'name':\n result.name = trimQuotes(val);\n break;\n case 'description':\n result.description = trimQuotes(val);\n break;\n case 'severity':\n result.severity = parseInt(val, 10);\n break;\n case 'extends':\n if (val) {\n // Inline array: extends: [\"@agentguard/security-pack\", \"./custom\"]\n const arr = parseInlineArray(val);\n if (arr.length > 0) {\n result.extends = arr;\n }\n } else {\n // Multi-line array follows\n inExtends = true;\n result.extends = [];\n }\n break;\n case 'rules':\n inRules = true;\n break;\n }\n continue;\n }\n\n // Inside extends array (multi-line)\n if (inExtends && trimmed.startsWith('- ')) {\n result.extends = result.extends || [];\n result.extends.push(trimQuotes(trimmed.slice(2).trim()));\n continue;\n }\n\n // Inside rules array\n if (inRules) {\n // New rule entry (- action: ...)\n if (trimmed.startsWith('- ')) {\n if (currentRule) rules.push(currentRule);\n currentRule = {};\n inBranches = false;\n\n const rest = trimmed.slice(2).trim();\n const colonIdx = rest.indexOf(':');\n if (colonIdx !== -1) {\n const key = rest.slice(0, colonIdx).trim();\n const val = rest.slice(colonIdx + 1).trim();\n applyRuleField(currentRule, key, val);\n }\n continue;\n }\n\n // Continuation of branches array\n if (inBranches && trimmed.startsWith('- ') && currentRule) {\n currentRule.branches = currentRule.branches || [];\n currentRule.branches.push(trimQuotes(trimmed.slice(2).trim()));\n continue;\n }\n\n // Rule property\n if (currentRule) {\n inBranches = false;\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx !== -1) {\n const key = trimmed.slice(0, colonIdx).trim();\n const val = trimmed.slice(colonIdx + 1).trim();\n\n if (key === 'branches' && !val) {\n inBranches = true;\n currentRule.branches = [];\n continue;\n }\n\n applyRuleField(currentRule, key, val);\n }\n }\n }\n }\n\n if (currentRule) rules.push(currentRule);\n if (rules.length > 0) result.rules = rules;\n\n return result;\n}\n\nfunction applyRuleField(rule: YamlRule, key: string, val: string): void {\n switch (key) {\n case 'action':\n rule.action = trimQuotes(val);\n break;\n case 'effect':\n rule.effect = trimQuotes(val);\n break;\n case 'target':\n rule.target = trimQuotes(val);\n break;\n case 'reason':\n rule.reason = trimQuotes(val);\n break;\n case 'limit': {\n const n = parseValue(val);\n if (typeof n === 'number') rule.limit = n;\n break;\n }\n case 'requireTests':\n rule.requireTests = val === 'true';\n break;\n case 'branches': {\n const arr = parseInlineArray(val);\n if (arr.length > 0) rule.branches = arr;\n break;\n }\n }\n}\n\nfunction convertRule(yamlRule: YamlRule): PolicyRule {\n const conditions: PolicyRule['conditions'] = {};\n let hasConditions = false;\n\n if (yamlRule.target) {\n conditions.scope = [yamlRule.target];\n hasConditions = true;\n }\n\n if (yamlRule.branches) {\n conditions.branches = yamlRule.branches;\n hasConditions = true;\n }\n\n if (yamlRule.limit !== undefined) {\n conditions.limit = yamlRule.limit;\n hasConditions = true;\n }\n\n if (yamlRule.requireTests !== undefined) {\n conditions.requireTests = yamlRule.requireTests;\n hasConditions = true;\n }\n\n return {\n action: yamlRule.action || '*',\n effect: (yamlRule.effect as 'allow' | 'deny') || 'deny',\n conditions: hasConditions ? conditions : undefined,\n reason: yamlRule.reason,\n };\n}\n\nexport function loadYamlPolicy(yaml: string, defaultId?: string): LoadedPolicy {\n const def = parseYamlPolicy(yaml);\n\n return {\n id: def.id || defaultId || 'yaml-policy',\n name: def.name || 'YAML Policy',\n description: def.description,\n rules: (def.rules || []).map(convertRule),\n severity: def.severity ?? 3,\n };\n}\n\nexport function loadYamlPolicies(yaml: string): LoadedPolicy[] {\n return [loadYamlPolicy(yaml)];\n}\n", "// Policy pack loader \u2014 resolves, loads, validates, and merges policy packs.\n// Supports local directory packs and npm-style package references.\n//\n// A policy pack is a YAML or JSON policy file that can be referenced via the\n// `extends` key in a policy definition. Packs are loaded and their rules are\n// merged with the local policy, with local rules taking precedence.\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve, join } from 'node:path';\nimport type { LoadedPolicy, PolicyRule } from './evaluator.js';\nimport { loadYamlPolicy } from './yaml-loader.js';\nimport { validatePolicy } from './loader.js';\n\n/** Candidate filenames when resolving a pack directory */\nconst PACK_MANIFEST_CANDIDATES = [\n 'agentguard-pack.yaml',\n 'agentguard-pack.yml',\n 'agentguard-pack.json',\n 'agentguard.yaml',\n 'agentguard.yml',\n];\n\nexport interface PackResolutionResult {\n policies: LoadedPolicy[];\n errors: string[];\n}\n\n/**\n * Resolve a single pack reference to an absolute file path.\n *\n * Supports three reference styles:\n * 1. Relative path \u2014 `\"./packs/strict\"` or `\"./packs/strict.yaml\"`\n * 2. Absolute path \u2014 `\"/home/user/packs/strict.yaml\"`\n * 3. npm package \u2014 `\"@agentguard/security-pack\"` resolved from node_modules\n */\nexport function resolvePackPath(ref: string, baseDir: string): string | null {\n // 1. Direct file reference (relative or absolute)\n const directPath = resolve(baseDir, ref);\n if (existsSync(directPath)) {\n // If it's a file, use it directly\n if (\n directPath.endsWith('.yaml') ||\n directPath.endsWith('.yml') ||\n directPath.endsWith('.json')\n ) {\n return directPath;\n }\n // If it's a directory, look for manifest files\n for (const candidate of PACK_MANIFEST_CANDIDATES) {\n const candidatePath = join(directPath, candidate);\n if (existsSync(candidatePath)) {\n return candidatePath;\n }\n }\n }\n\n // Try with common extensions if the direct path didn't work\n for (const ext of ['.yaml', '.yml', '.json']) {\n const withExt = directPath + ext;\n if (existsSync(withExt)) {\n return withExt;\n }\n }\n\n // 2. npm package reference \u2014 search node_modules\n const nodeModulesPath = join(baseDir, 'node_modules', ref);\n if (existsSync(nodeModulesPath)) {\n for (const candidate of PACK_MANIFEST_CANDIDATES) {\n const candidatePath = join(nodeModulesPath, candidate);\n if (existsSync(candidatePath)) {\n return candidatePath;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Load a single policy pack from a resolved file path.\n */\nexport function loadPackFile(filePath: string): LoadedPolicy | null {\n const content = readFileSync(filePath, 'utf8');\n\n if (filePath.endsWith('.yaml') || filePath.endsWith('.yml')) {\n return loadYamlPolicy(content, `pack:${filePath}`);\n }\n\n try {\n const parsed = JSON.parse(content) as Record<string, unknown>;\n const result = validatePolicy(parsed);\n if (!result.valid) {\n return null;\n }\n return {\n id: (parsed.id as string) || `pack:${filePath}`,\n name: (parsed.name as string) || 'JSON Pack',\n description: parsed.description as string | undefined,\n rules: parsed.rules as PolicyRule[],\n severity: (parsed.severity as number) ?? 3,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve and load all policy packs from an `extends` list.\n *\n * @param extends_ - Array of pack references (paths or npm package names)\n * @param baseDir - Directory to resolve relative paths from\n * @returns Loaded pack policies and any errors encountered\n */\nexport function resolveExtends(extends_: string[], baseDir: string): PackResolutionResult {\n const policies: LoadedPolicy[] = [];\n const errors: string[] = [];\n const seenIds = new Set<string>();\n\n for (const ref of extends_) {\n const resolvedPath = resolvePackPath(ref, baseDir);\n\n if (!resolvedPath) {\n errors.push(`Pack not found: \"${ref}\" (searched from ${baseDir})`);\n continue;\n }\n\n const pack = loadPackFile(resolvedPath);\n\n if (!pack) {\n errors.push(`Failed to load pack: \"${ref}\" (${resolvedPath})`);\n continue;\n }\n\n if (seenIds.has(pack.id)) {\n errors.push(`Duplicate pack ID: \"${pack.id}\" from \"${ref}\"`);\n continue;\n }\n\n seenIds.add(pack.id);\n policies.push(pack);\n }\n\n return { policies, errors };\n}\n\n/**\n * Merge pack policies with a local policy.\n *\n * Precedence: local rules override pack rules. Within packs, earlier entries\n * in the `extends` list take precedence over later entries.\n *\n * The merge strategy is:\n * 1. Collect all rules from packs (in extends order)\n * 2. Append local rules (which take precedence during evaluation since\n * the evaluator checks deny rules first, then allow rules)\n * 3. Return a single merged policy array\n */\nexport function mergePolicies(\n localPolicy: LoadedPolicy,\n packPolicies: LoadedPolicy[]\n): LoadedPolicy[] {\n // Pack policies come first (lower precedence in evaluation order)\n // Local policy comes last (highest precedence)\n return [...packPolicies, localPolicy];\n}\n", "// Shared policy discovery and loading \u2014 used by guard and claude-hook commands.\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve, dirname } from 'node:path';\nimport { loadYamlPolicy, parseYamlPolicy } from '../policy/yaml-loader.js';\nimport { resolveExtends, mergePolicies } from '../policy/pack-loader.js';\n\nconst DEFAULT_POLICY_CANDIDATES = [\n 'agentguard.yaml',\n 'agentguard.yml',\n 'agentguard.json',\n '.agentguard.yaml',\n '.agentguard.yml',\n];\n\nexport function findDefaultPolicy(): string | null {\n for (const name of DEFAULT_POLICY_CANDIDATES) {\n if (existsSync(name)) return name;\n }\n return null;\n}\n\nexport function loadPolicyFile(policyPath: string): unknown[] {\n const absPath = resolve(policyPath);\n if (!existsSync(absPath)) {\n process.stderr.write(` \\x1b[31mError:\\x1b[0m Policy file not found: ${absPath}\\n`);\n process.exit(1);\n }\n\n const content = readFileSync(absPath, 'utf8');\n\n if (absPath.endsWith('.yaml') || absPath.endsWith('.yml')) {\n const localPolicy = loadYamlPolicy(content, policyPath);\n\n // Check for extends (policy packs)\n const def = parseYamlPolicy(content);\n if (def.extends && def.extends.length > 0) {\n const baseDir = dirname(absPath);\n const { policies: packPolicies, errors } = resolveExtends(def.extends, baseDir);\n\n for (const err of errors) {\n process.stderr.write(` \\x1b[33mWarning:\\x1b[0m ${err}\\n`);\n }\n\n const merged = mergePolicies(localPolicy, packPolicies);\n return merged.map((p) => ({ id: p.id, name: p.name, rules: p.rules, severity: p.severity }));\n }\n\n return [\n {\n id: localPolicy.id,\n name: localPolicy.name,\n rules: localPolicy.rules,\n severity: localPolicy.severity,\n },\n ];\n }\n\n try {\n const parsed = JSON.parse(content) as unknown;\n return Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n process.stderr.write(` \\x1b[31mError:\\x1b[0m Failed to parse policy file: ${absPath}\\n`);\n process.exit(1);\n }\n}\n\nexport function loadPolicyDefs(policyPath?: string): unknown[] {\n const resolved = policyPath || findDefaultPolicy();\n return resolved ? loadPolicyFile(resolved) : [];\n}\n", "// Simulator registry \u2014 routes intents to the correct ActionSimulator.\n// Same array-based pattern as AdapterRegistry.\n\nimport type { NormalizedIntent } from '../../policy/evaluator.js';\nimport type { ActionSimulator, SimulatorRegistry } from './types.js';\n\nexport function createSimulatorRegistry(): SimulatorRegistry {\n const simulators: ActionSimulator[] = [];\n\n return {\n register(simulator: ActionSimulator): void {\n // Prevent duplicate registration\n if (simulators.some((s) => s.id === simulator.id)) return;\n simulators.push(simulator);\n },\n\n find(intent: NormalizedIntent): ActionSimulator | null {\n for (const simulator of simulators) {\n if (simulator.supports(intent)) return simulator;\n }\n return null;\n },\n\n all(): ActionSimulator[] {\n return [...simulators];\n },\n };\n}\n", "// Git simulator \u2014 predicts impact of git operations.\n// Runs git commands to assess risk without modifying state.\n\nimport { execFileSync } from 'node:child_process';\nimport type { NormalizedIntent } from '../../policy/evaluator.js';\nimport type { ActionSimulator, SimulationResult } from './types.js';\n\nconst GIT_ACTIONS = new Set(['git.push', 'git.force-push', 'git.merge', 'git.branch.delete']);\n\n/** Valid git ref characters: alphanumeric, hyphens, underscores, dots, slashes */\nconst SAFE_BRANCH_RE = /^[a-zA-Z0-9._\\-/]+$/;\n\n/** Validate a branch name to prevent command injection */\nexport function isValidBranchName(name: string): boolean {\n if (!name || name.length > 255) return false;\n if (!SAFE_BRANCH_RE.test(name)) return false;\n // Reject directory traversal and git special refs\n if (name.includes('..') || name.startsWith('-') || name.endsWith('.lock')) return false;\n return true;\n}\n\nexport function createGitSimulator(): ActionSimulator {\n return {\n id: 'git-simulator',\n\n supports(intent: NormalizedIntent): boolean {\n return GIT_ACTIONS.has(intent.action);\n },\n\n async simulate(\n intent: NormalizedIntent,\n context: Record<string, unknown>\n ): Promise<SimulationResult> {\n const start = Date.now();\n const predictedChanges: string[] = [];\n const details: Record<string, unknown> = {};\n let blastRadius = 0;\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n\n // Force push is always high risk\n if (intent.action === 'git.force-push') {\n riskLevel = 'high';\n predictedChanges.push('Force push will rewrite remote history');\n details.forcePush = true;\n blastRadius = 100; // Maximum blast radius signal\n }\n\n // Count unpushed commits\n const branch = intent.branch || intent.target || '';\n if (branch && (intent.action === 'git.push' || intent.action === 'git.force-push')) {\n if (!isValidBranchName(branch)) {\n details.invalidBranch = true;\n riskLevel = 'high';\n predictedChanges.push(`Rejected invalid branch name: ${branch}`);\n } else\n try {\n const count = execFileSync('git', ['rev-list', '--count', `origin/${branch}..HEAD`], {\n encoding: 'utf8',\n timeout: 5000,\n }).trim();\n const unpushed = parseInt(count, 10);\n if (!isNaN(unpushed)) {\n details.unpushedCommits = unpushed;\n blastRadius = Math.max(blastRadius, unpushed);\n predictedChanges.push(`${unpushed} unpushed commit(s) to ${branch}`);\n if (unpushed > 10) riskLevel = riskLevel === 'high' ? 'high' : 'medium';\n }\n } catch {\n // Branch may not have a remote \u2014 not an error\n details.remoteTrackingError = true;\n }\n }\n\n // Check for protected branch push\n const protectedBranches = (context.protectedBranches as string[]) || ['main', 'master'];\n if (branch && protectedBranches.includes(branch)) {\n riskLevel = riskLevel === 'low' ? 'medium' : riskLevel;\n predictedChanges.push(`Push targets protected branch: ${branch}`);\n details.protectedBranch = true;\n }\n\n // Git merge: check for conflicts\n if (intent.action === 'git.merge' && branch) {\n if (!isValidBranchName(branch)) {\n details.invalidBranch = true;\n riskLevel = 'high';\n predictedChanges.push(`Rejected invalid branch name: ${branch}`);\n } else\n try {\n const diffStat = execFileSync('git', ['diff', '--stat', `HEAD...${branch}`], {\n encoding: 'utf8',\n timeout: 5000,\n }).trim();\n const fileCount = (diffStat.match(/\\d+ files? changed/)?.[0] || '').match(/\\d+/)?.[0];\n if (fileCount) {\n const count = parseInt(fileCount, 10);\n blastRadius = Math.max(blastRadius, count);\n predictedChanges.push(`Merge would affect ${count} file(s)`);\n if (count > 20) riskLevel = riskLevel === 'high' ? 'high' : 'medium';\n }\n } catch {\n details.mergeSimError = true;\n }\n }\n\n // Branch delete\n if (intent.action === 'git.branch.delete') {\n predictedChanges.push(`Delete branch: ${branch}`);\n riskLevel = protectedBranches.includes(branch) ? 'high' : 'low';\n blastRadius = protectedBranches.includes(branch) ? 100 : 1;\n }\n\n return {\n predictedChanges,\n blastRadius,\n riskLevel,\n details,\n simulatorId: 'git-simulator',\n durationMs: Date.now() - start,\n };\n },\n };\n}\n", "// Filesystem simulator \u2014 predicts impact of file operations.\n// Evaluates path sensitivity without touching the filesystem.\n\nimport type { NormalizedIntent } from '../../policy/evaluator.js';\nimport type { ActionSimulator, SimulationResult } from './types.js';\n\nconst FILE_ACTIONS = new Set(['file.write', 'file.delete']);\n\n// Reuses sensitive path patterns from no-secret-exposure invariant\nconst SENSITIVE_PATTERNS = ['.env', 'credentials', '.pem', '.key', 'secret', 'token'];\n\nconst CONFIG_PATTERNS = [\n 'package.json',\n 'tsconfig.json',\n 'eslint',\n '.prettierrc',\n 'webpack.config',\n 'vite.config',\n 'next.config',\n 'jest.config',\n 'vitest.config',\n '.babelrc',\n 'babel.config',\n];\n\nconst LOCKFILE_PATTERNS = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];\n\nconst CI_PATTERNS = ['.github/', '.gitlab-ci', 'Jenkinsfile', '.circleci/', 'Dockerfile'];\n\nfunction assessPathRisk(target: string): {\n riskLevel: 'low' | 'medium' | 'high';\n reasons: string[];\n} {\n const lower = target.toLowerCase();\n const reasons: string[] = [];\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n\n // Check sensitive files (highest risk)\n if (SENSITIVE_PATTERNS.some((p) => lower.includes(p))) {\n riskLevel = 'high';\n reasons.push(`Sensitive file: ${target}`);\n }\n\n // Check lockfiles\n if (LOCKFILE_PATTERNS.some((p) => lower.includes(p))) {\n riskLevel = riskLevel === 'high' ? 'high' : 'medium';\n reasons.push(`Lockfile modification: ${target}`);\n }\n\n // Check CI/CD configs\n if (CI_PATTERNS.some((p) => lower.includes(p))) {\n riskLevel = riskLevel === 'high' ? 'high' : 'medium';\n reasons.push(`CI/CD config: ${target}`);\n }\n\n // Check project configs\n if (CONFIG_PATTERNS.some((p) => lower.includes(p))) {\n riskLevel = riskLevel === 'low' ? 'medium' : riskLevel;\n reasons.push(`Project config: ${target}`);\n }\n\n return { riskLevel, reasons };\n}\n\nexport function createFilesystemSimulator(): ActionSimulator {\n return {\n id: 'filesystem-simulator',\n\n supports(intent: NormalizedIntent): boolean {\n return FILE_ACTIONS.has(intent.action);\n },\n\n async simulate(intent: NormalizedIntent): Promise<SimulationResult> {\n const start = Date.now();\n const target = intent.target || '';\n const { riskLevel, reasons } = assessPathRisk(target);\n\n const predictedChanges: string[] = [];\n const details: Record<string, unknown> = {};\n\n if (intent.action === 'file.delete') {\n predictedChanges.push(`Delete: ${target}`);\n details.operation = 'delete';\n } else {\n predictedChanges.push(`Write: ${target}`);\n details.operation = 'write';\n }\n\n predictedChanges.push(...reasons);\n details.pathRisk = riskLevel;\n details.sensitiveMatch = SENSITIVE_PATTERNS.some((p) => target.toLowerCase().includes(p));\n\n return {\n predictedChanges,\n blastRadius: intent.filesAffected || 1,\n riskLevel,\n details,\n simulatorId: 'filesystem-simulator',\n durationMs: Date.now() - start,\n };\n },\n };\n}\n", "// Package simulator \u2014 predicts impact of package management operations.\n// Uses `npm install --dry-run` to preview dependency changes.\n\nimport { execFileSync } from 'node:child_process';\nimport type { NormalizedIntent } from '../../policy/evaluator.js';\nimport type { ActionSimulator, SimulationResult } from './types.js';\n\nconst INSTALL_PATTERNS = [\n /\\bnpm\\s+install\\b/,\n /\\bnpm\\s+i\\b/,\n /\\byarn\\s+add\\b/,\n /\\bpnpm\\s+add\\b/,\n /\\bpnpm\\s+install\\b/,\n /\\bnpm\\s+uninstall\\b/,\n /\\bnpm\\s+remove\\b/,\n /\\byarn\\s+remove\\b/,\n /\\bpnpm\\s+remove\\b/,\n];\n\nfunction isPackageCommand(command: string | undefined): boolean {\n if (!command) return false;\n return INSTALL_PATTERNS.some((p) => p.test(command));\n}\n\n/** Safe characters for npm package specifiers: @scope/name@version */\nconst SAFE_NPM_ARG_RE = /^[@a-zA-Z0-9._\\-/^~>=<]+$/;\n\n/** Allowed npm flags for dry-run simulation (no shell metacharacters) */\nconst ALLOWED_NPM_FLAGS = new Set([\n '-D',\n '--save-dev',\n '-E',\n '--save-exact',\n '-O',\n '--save-optional',\n '-g',\n '--global',\n '--legacy-peer-deps',\n '--no-save',\n '--save',\n]);\n\n/** Characters that indicate shell operators \u2014 stop processing if found */\nconst SHELL_META_RE = /[;|&$`'\"\\\\(){}!<>]/;\n\n/** Parse npm install command into safe argument list, rejecting dangerous inputs */\nexport function parseNpmInstallArgs(command: string): string[] {\n // Split on whitespace and drop the leading 'npm install' / 'npm i'\n const tokens = command.trim().split(/\\s+/);\n const args: string[] = [];\n let pastCommand = false;\n\n for (const token of tokens) {\n // Skip 'npm' and 'install'/'i'\n if (!pastCommand) {\n if (token === 'npm' || token === 'install' || token === 'i') continue;\n pastCommand = true;\n }\n // Stop entirely if any token contains shell metacharacters\n if (SHELL_META_RE.test(token)) break;\n // Accept known flags\n if (token.startsWith('-') && ALLOWED_NPM_FLAGS.has(token)) {\n args.push(token);\n continue;\n }\n // Accept safe package specifiers (reject shell metacharacters)\n if (!token.startsWith('-') && SAFE_NPM_ARG_RE.test(token)) {\n args.push(token);\n continue;\n }\n // Reject anything else (unknown flags, etc.)\n }\n\n return args;\n}\n\nfunction parseNpmDryRunOutput(output: string): {\n added: number;\n removed: number;\n changed: number;\n packages: string[];\n} {\n let added = 0;\n let removed = 0;\n let changed = 0;\n const packages: string[] = [];\n\n // Parse \"added X packages\" style output\n const addedMatch = output.match(/added\\s+(\\d+)\\s+package/);\n if (addedMatch) added = parseInt(addedMatch[1], 10);\n\n const removedMatch = output.match(/removed\\s+(\\d+)\\s+package/);\n if (removedMatch) removed = parseInt(removedMatch[1], 10);\n\n const changedMatch = output.match(/changed\\s+(\\d+)\\s+package/);\n if (changedMatch) changed = parseInt(changedMatch[1], 10);\n\n // Extract package names from lines like \"+ package@version\"\n const lines = output.split('\\n');\n for (const line of lines) {\n const pkgMatch = line.match(/[+\\-]\\s+(\\S+@\\S+)/);\n if (pkgMatch) packages.push(pkgMatch[1]);\n }\n\n return { added, removed, changed, packages };\n}\n\nexport function createPackageSimulator(): ActionSimulator {\n return {\n id: 'package-simulator',\n\n supports(intent: NormalizedIntent): boolean {\n return intent.action === 'shell.exec' && isPackageCommand(intent.command);\n },\n\n async simulate(intent: NormalizedIntent): Promise<SimulationResult> {\n const start = Date.now();\n const command = intent.command || '';\n const predictedChanges: string[] = [];\n const details: Record<string, unknown> = {};\n let blastRadius = 0;\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n\n // Try npm install --dry-run to preview changes\n if (/\\bnpm\\s+(install|i)\\b/.test(command)) {\n const args = parseNpmInstallArgs(command);\n try {\n const output = execFileSync('npm', ['install', '--dry-run', ...args], {\n encoding: 'utf8',\n timeout: 30000,\n env: { ...process.env, npm_config_fund: 'false', npm_config_audit: 'false' },\n });\n\n const parsed = parseNpmDryRunOutput(output);\n details.npmDryRun = parsed;\n blastRadius = parsed.added + parsed.removed + parsed.changed;\n\n if (parsed.added > 0) predictedChanges.push(`${parsed.added} packages added`);\n if (parsed.removed > 0) predictedChanges.push(`${parsed.removed} packages removed`);\n if (parsed.changed > 0) predictedChanges.push(`${parsed.changed} packages changed`);\n if (parsed.packages.length > 0) {\n details.affectedPackages = parsed.packages;\n }\n } catch {\n // Dry-run failed \u2014 estimate from command\n details.dryRunFailed = true;\n predictedChanges.push('Package installation (dry-run unavailable)');\n blastRadius = 10; // Conservative estimate\n }\n } else {\n // For yarn/pnpm or remove commands, do basic analysis\n predictedChanges.push(`Package operation: ${command}`);\n blastRadius = 5; // Conservative estimate\n details.estimatedOnly = true;\n }\n\n // Risk assessment\n if (blastRadius > 50) {\n riskLevel = 'high';\n } else if (blastRadius > 10) {\n riskLevel = 'medium';\n }\n\n // Check for global installs (always medium+ risk)\n if (/\\s-g\\b|\\s--global\\b/.test(command)) {\n riskLevel = riskLevel === 'high' ? 'high' : 'medium';\n predictedChanges.push('Global package installation');\n details.globalInstall = true;\n }\n\n return {\n predictedChanges,\n blastRadius,\n riskLevel,\n details,\n simulatorId: 'package-simulator',\n durationMs: Date.now() - start,\n };\n },\n };\n}\n", "// Renderer registry \u2014 manages multiple governance renderers.\n// Dispatches lifecycle events to all registered renderers.\n\nimport type { GovernanceRenderer, RendererConfig, RunSummary } from './types.js';\nimport type { KernelResult } from '../kernel/kernel.js';\nimport type { MonitorDecision } from '../kernel/monitor.js';\nimport type { GovernanceDecisionRecord } from '../kernel/decisions/types.js';\nimport type { SimulationResult } from '../kernel/simulation/types.js';\n\nexport interface RendererRegistry {\n /** Register a renderer. Throws if a renderer with the same ID already exists. */\n register(renderer: GovernanceRenderer): void;\n\n /** Unregister a renderer by ID. Calls dispose() if available. Returns true if found. */\n unregister(id: string): boolean;\n\n /** Get a registered renderer by ID */\n get(id: string): GovernanceRenderer | undefined;\n\n /** List all registered renderer IDs */\n list(): string[];\n\n /** Number of registered renderers */\n count(): number;\n\n /** Dispatch: run started */\n notifyRunStarted(config: RendererConfig): void;\n\n /** Dispatch: action result */\n notifyActionResult(result: KernelResult): void;\n\n /** Dispatch: monitor status */\n notifyMonitorStatus(decision: MonitorDecision): void;\n\n /** Dispatch: simulation completed */\n notifySimulation(simulation: SimulationResult): void;\n\n /** Dispatch: decision record */\n notifyDecisionRecord(record: GovernanceDecisionRecord): void;\n\n /** Dispatch: run ended */\n notifyRunEnded(summary: RunSummary): void;\n\n /** Dispose all renderers and clear the registry */\n disposeAll(): void;\n}\n\n/**\n * Create a new renderer registry.\n *\n * Renderers are dispatched in registration order.\n * Errors in one renderer do not prevent other renderers from receiving events.\n */\nexport function createRendererRegistry(): RendererRegistry {\n const renderers = new Map<string, GovernanceRenderer>();\n\n const safeCall = (fn: () => void): void => {\n try {\n fn();\n } catch {\n // Renderer errors are non-fatal \u2014 isolate failures\n }\n };\n\n return {\n register(renderer) {\n if (renderers.has(renderer.id)) {\n throw new Error(`Renderer already registered: \"${renderer.id}\"`);\n }\n renderers.set(renderer.id, renderer);\n },\n\n unregister(id) {\n const renderer = renderers.get(id);\n if (!renderer) return false;\n if (renderer.dispose) {\n safeCall(() => renderer.dispose!());\n }\n renderers.delete(id);\n return true;\n },\n\n get(id) {\n return renderers.get(id);\n },\n\n list() {\n return [...renderers.keys()];\n },\n\n count() {\n return renderers.size;\n },\n\n notifyRunStarted(config) {\n for (const renderer of renderers.values()) {\n if (renderer.onRunStarted) {\n safeCall(() => renderer.onRunStarted!(config));\n }\n }\n },\n\n notifyActionResult(result) {\n for (const renderer of renderers.values()) {\n if (renderer.onActionResult) {\n safeCall(() => renderer.onActionResult!(result));\n }\n }\n },\n\n notifyMonitorStatus(decision) {\n for (const renderer of renderers.values()) {\n if (renderer.onMonitorStatus) {\n safeCall(() => renderer.onMonitorStatus!(decision));\n }\n }\n },\n\n notifySimulation(simulation) {\n for (const renderer of renderers.values()) {\n if (renderer.onSimulation) {\n safeCall(() => renderer.onSimulation!(simulation));\n }\n }\n },\n\n notifyDecisionRecord(record) {\n for (const renderer of renderers.values()) {\n if (renderer.onDecisionRecord) {\n safeCall(() => renderer.onDecisionRecord!(record));\n }\n }\n },\n\n notifyRunEnded(summary) {\n for (const renderer of renderers.values()) {\n if (renderer.onRunEnded) {\n safeCall(() => renderer.onRunEnded!(summary));\n }\n }\n },\n\n disposeAll() {\n for (const renderer of renderers.values()) {\n if (renderer.dispose) {\n safeCall(() => renderer.dispose!());\n }\n }\n renderers.clear();\n },\n };\n}\n", "// Terminal UI renderer \u2014 real-time action stream display.\n// Node.js module. Writes ANSI-colored output to stderr.\n\nimport type { KernelResult } from '../kernel/kernel.js';\nimport type { MonitorDecision } from '../kernel/monitor.js';\nimport type { GovernanceDecisionRecord } from '../kernel/decisions/types.js';\nimport type { SimulationResult } from '../kernel/simulation/types.js';\n\nconst ANSI = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n};\n\nconst ICONS = {\n allowed: '\\u2713', // \u2713\n denied: '\\u2717', // \u2717\n warning: '\\u26A0', // \u26A0\n arrow: '\\u2192', // \u2192\n bullet: '\\u2022', // \u2022\n};\n\nexport interface TuiConfig {\n policyName?: string;\n invariantCount?: number;\n verbose?: boolean;\n}\n\nexport function renderBanner(config: TuiConfig): string {\n const lines: string[] = [];\n lines.push('');\n lines.push(` ${ANSI.bold}${ANSI.cyan}AgentGuard Runtime Active${ANSI.reset}`);\n\n const parts: string[] = [];\n if (config.policyName) {\n parts.push(`policy: ${ANSI.bold}${config.policyName}${ANSI.reset}`);\n }\n if (config.invariantCount !== undefined) {\n parts.push(`invariants: ${ANSI.bold}${config.invariantCount}${ANSI.reset} active`);\n }\n if (parts.length > 0) {\n lines.push(` ${ANSI.dim}${parts.join(' | ')}${ANSI.reset}`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport function renderAction(result: KernelResult, verbose?: boolean): string {\n const intent = result.decision.intent;\n const action = intent.action;\n const target = intent.target;\n\n if (result.allowed) {\n const exec = result.executed ? '' : ` ${ANSI.dim}(dry-run)${ANSI.reset}`;\n return ` ${ANSI.green}${ICONS.allowed}${ANSI.reset} ${action} ${ANSI.dim}${target}${ANSI.reset}${exec}`;\n }\n\n const reason = result.decision.decision.reason;\n const policy = result.decision.decision.matchedPolicy;\n const policyTag = policy ? ` (${policy.id})` : '';\n\n const lines: string[] = [];\n lines.push(\n ` ${ANSI.red}${ICONS.denied}${ANSI.reset} ${action} ${target} ${ANSI.red}${ICONS.arrow} DENIED${ANSI.reset}${ANSI.dim}${policyTag}${ANSI.reset}`\n );\n\n if (verbose && reason) {\n lines.push(` ${ANSI.dim}${reason}${ANSI.reset}`);\n }\n\n return lines.join('\\n');\n}\n\nexport function renderViolations(result: KernelResult): string {\n const violations = result.decision.violations;\n if (violations.length === 0) return '';\n\n const lines: string[] = [];\n for (const v of violations) {\n lines.push(\n ` ${ANSI.yellow}${ICONS.warning}${ANSI.reset} invariant violated: ${ANSI.bold}${v.name}${ANSI.reset}`\n );\n }\n return lines.join('\\n');\n}\n\nexport function renderMonitorStatus(decision: MonitorDecision): string {\n const m = decision.monitor;\n const level = ['NORMAL', 'ELEVATED', 'HIGH', 'LOCKDOWN'][m.escalationLevel];\n\n const levelColor =\n m.escalationLevel === 0\n ? ANSI.green\n : m.escalationLevel === 1\n ? ANSI.yellow\n : m.escalationLevel === 2\n ? ANSI.red\n : ANSI.bold + ANSI.red;\n\n return ` ${ANSI.dim}[${levelColor}${level}${ANSI.reset}${ANSI.dim}] evals:${m.totalEvaluations} denied:${m.totalDenials} violations:${m.totalViolations}${ANSI.reset}`;\n}\n\nexport function renderSimulation(simulation: SimulationResult): string {\n const lines: string[] = [];\n const riskColor =\n simulation.riskLevel === 'high'\n ? ANSI.red\n : simulation.riskLevel === 'medium'\n ? ANSI.yellow\n : ANSI.green;\n\n lines.push(\n ` ${ANSI.bold}${ANSI.blue}Simulation${ANSI.reset} ${ANSI.dim}(${simulation.simulatorId})${ANSI.reset}`\n );\n\n for (const change of simulation.predictedChanges) {\n lines.push(` ${ANSI.dim}${ICONS.bullet} ${change}${ANSI.reset}`);\n }\n\n lines.push(\n ` blast radius: ${ANSI.bold}${simulation.blastRadius}${ANSI.reset} | risk: ${riskColor}${simulation.riskLevel}${ANSI.reset} | ${ANSI.dim}${simulation.durationMs}ms${ANSI.reset}`\n );\n\n return lines.join('\\n');\n}\n\nexport function renderDecisionRecord(record: GovernanceDecisionRecord): string {\n const lines: string[] = [];\n const outcomeColor = record.outcome === 'allow' ? ANSI.green : ANSI.red;\n const outcomeIcon = record.outcome === 'allow' ? ICONS.allowed : ICONS.denied;\n\n lines.push(\n ` ${ANSI.bold}Decision Record${ANSI.reset} ${ANSI.dim}${record.recordId}${ANSI.reset}`\n );\n lines.push(` action: ${record.action.type} ${ANSI.dim}${record.action.target}${ANSI.reset}`);\n lines.push(\n ` outcome: ${outcomeColor}${outcomeIcon} ${record.outcome.toUpperCase()}${ANSI.reset}`\n );\n lines.push(` reason: ${ANSI.dim}${record.reason}${ANSI.reset}`);\n\n if (record.policy.matchedPolicyId) {\n lines.push(\n ` policy: ${ANSI.dim}${record.policy.matchedPolicyName} (${record.policy.matchedPolicyId})${ANSI.reset}`\n );\n }\n\n if (record.invariants.violations.length > 0) {\n for (const v of record.invariants.violations) {\n lines.push(\n ` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset} ${ANSI.dim}(${v.actual})${ANSI.reset}`\n );\n }\n }\n\n if (record.simulation) {\n const sim = record.simulation;\n const riskColor =\n sim.riskLevel === 'high' ? ANSI.red : sim.riskLevel === 'medium' ? ANSI.yellow : ANSI.green;\n lines.push(\n ` simulation: blast=${sim.blastRadius} risk=${riskColor}${sim.riskLevel}${ANSI.reset}`\n );\n }\n\n if (record.execution.executed) {\n const execStatus = record.execution.success\n ? `${ANSI.green}success${ANSI.reset}`\n : `${ANSI.red}failed${ANSI.reset}`;\n lines.push(\n ` execution: ${execStatus} ${ANSI.dim}(${record.execution.durationMs}ms)${ANSI.reset}`\n );\n }\n\n return lines.join('\\n');\n}\n\nexport function renderDecisionTable(records: GovernanceDecisionRecord[]): string {\n const lines: string[] = [];\n lines.push('');\n lines.push(\n ` ${ANSI.bold}Decision Records${ANSI.reset} ${ANSI.dim}(${records.length} decisions)${ANSI.reset}`\n );\n lines.push(` ${ANSI.dim}${'\u2500'.repeat(50)}${ANSI.reset}`);\n\n for (let i = 0; i < records.length; i++) {\n const r = records[i];\n const num = `${i + 1}.`.padStart(4);\n const icon =\n r.outcome === 'allow'\n ? `${ANSI.green}${ICONS.allowed}${ANSI.reset}`\n : `${ANSI.red}${ICONS.denied}${ANSI.reset}`;\n\n lines.push(` ${num} ${icon} ${r.action.type} ${ANSI.dim}${r.action.target}${ANSI.reset}`);\n lines.push(` ${ANSI.dim}${r.reason}${ANSI.reset}`);\n\n if (r.invariants.violations.length > 0) {\n for (const v of r.invariants.violations) {\n lines.push(` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset}`);\n }\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport function renderKernelResult(result: KernelResult, verbose?: boolean): string {\n const lines: string[] = [];\n lines.push(renderAction(result, verbose));\n\n const violationText = renderViolations(result);\n if (violationText) lines.push(violationText);\n\n return lines.join('\\n');\n}\n\nexport function renderActionGraph(results: KernelResult[]): string {\n const lines: string[] = [];\n lines.push('');\n lines.push(\n ` ${ANSI.bold}Action Graph${ANSI.reset} ${ANSI.dim}(${results.length} actions)${ANSI.reset}`\n );\n lines.push(` ${ANSI.dim}${'\u2500'.repeat(50)}${ANSI.reset}`);\n\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n const intent = r.decision.intent;\n const num = `${i + 1}.`.padStart(4);\n const icon = r.allowed\n ? `${ANSI.green}${ICONS.allowed}${ANSI.reset}`\n : `${ANSI.red}${ICONS.denied}${ANSI.reset}`;\n const status = r.allowed\n ? r.executed\n ? `${ANSI.green}EXECUTED${ANSI.reset}`\n : `${ANSI.dim}ALLOWED${ANSI.reset}`\n : `${ANSI.red}DENIED${ANSI.reset}`;\n\n lines.push(\n ` ${num} ${icon} ${intent.action} ${ANSI.dim}${intent.target}${ANSI.reset} ${ANSI.gray}[${status}${ANSI.gray}]${ANSI.reset}`\n );\n\n if (!r.allowed) {\n lines.push(` ${ANSI.dim}${r.decision.decision.reason}${ANSI.reset}`);\n }\n\n for (const v of r.decision.violations) {\n lines.push(` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset}`);\n }\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n\nexport function renderEventStream(\n events: Array<{ kind: string; timestamp: number; [key: string]: unknown }>\n): string {\n const lines: string[] = [];\n lines.push('');\n lines.push(\n ` ${ANSI.bold}Event Stream${ANSI.reset} ${ANSI.dim}(${events.length} events)${ANSI.reset}`\n );\n lines.push(` ${ANSI.dim}${'\u2500'.repeat(50)}${ANSI.reset}`);\n\n for (const event of events) {\n const time = new Date(event.timestamp).toISOString().slice(11, 23);\n const kindColor =\n event.kind.includes('Denied') || event.kind.includes('Violation')\n ? ANSI.red\n : event.kind.includes('Allowed') || event.kind.includes('Executed')\n ? ANSI.green\n : ANSI.cyan;\n\n lines.push(` ${ANSI.dim}${time}${ANSI.reset} ${kindColor}${event.kind}${ANSI.reset}`);\n }\n\n lines.push('');\n return lines.join('\\n');\n}\n", "// TUI governance renderer \u2014 wraps the existing tui.ts render functions\n// into a GovernanceRenderer plugin. Writes ANSI-colored output to a stream.\n\nimport type { GovernanceRenderer, RendererConfig, RunSummary } from './types.js';\nimport type { KernelResult } from '../kernel/kernel.js';\nimport type { MonitorDecision } from '../kernel/monitor.js';\nimport type { GovernanceDecisionRecord } from '../kernel/decisions/types.js';\nimport type { SimulationResult } from '../kernel/simulation/types.js';\nimport {\n renderBanner,\n renderKernelResult,\n renderMonitorStatus,\n renderDecisionRecord,\n renderSimulation,\n} from '../cli/tui.js';\n\nexport interface TuiRendererOptions {\n /** Output stream \u2014 defaults to process.stderr */\n output?: { write(s: string): boolean };\n /** Show verbose output (decision records, reasons) */\n verbose?: boolean;\n}\n\n/**\n * Create a TUI governance renderer.\n *\n * This is the reference implementation of GovernanceRenderer. It adapts\n * the existing tui.ts render functions into the plugin interface, writing\n * ANSI-colored output to the configured stream (stderr by default).\n */\nexport function createTuiRenderer(options: TuiRendererOptions = {}): GovernanceRenderer {\n const output = options.output ?? process.stderr;\n const verbose = options.verbose ?? false;\n\n return {\n id: 'tui',\n name: 'Terminal UI Renderer',\n\n onRunStarted(config: RendererConfig) {\n output.write(\n renderBanner({\n policyName: config.policyName,\n invariantCount: config.invariantCount,\n verbose: config.verbose ?? verbose,\n })\n );\n output.write(` \\x1b[2mrun: ${config.runId}\\x1b[0m\\n`);\n if (config.simulatorCount && config.simulatorCount > 0) {\n output.write(` \\x1b[2msimulators: ${config.simulatorCount} active\\x1b[0m\\n`);\n }\n output.write('\\n');\n },\n\n onActionResult(result: KernelResult) {\n output.write(renderKernelResult(result, verbose) + '\\n');\n if (result.decision.violations.length > 0 || !result.allowed) {\n output.write(renderMonitorStatus(result.decision) + '\\n');\n }\n },\n\n onMonitorStatus(decision: MonitorDecision) {\n output.write(renderMonitorStatus(decision) + '\\n');\n },\n\n onSimulation(simulation: SimulationResult) {\n output.write(renderSimulation(simulation) + '\\n');\n },\n\n onDecisionRecord(record: GovernanceDecisionRecord) {\n if (verbose) {\n output.write(renderDecisionRecord(record) + '\\n');\n }\n },\n\n onRunEnded(summary: RunSummary) {\n const lines: string[] = [];\n lines.push('');\n lines.push(` \\x1b[1m\\x1b[36mRun Complete\\x1b[0m \\x1b[2m${summary.runId}\\x1b[0m`);\n lines.push(\n ` \\x1b[2mactions: ${summary.totalActions} | allowed: ${summary.allowed} | denied: ${summary.denied} | violations: ${summary.violations}\\x1b[0m`\n );\n lines.push(` \\x1b[2mduration: ${summary.durationMs}ms\\x1b[0m`);\n lines.push('');\n output.write(lines.join('\\n'));\n },\n };\n}\n", "// CLI command: agentguard guard \u2014 start the governed action runtime.\n// Reads stdin for action proposals (JSON), evaluates them, writes results to stdout.\n// Uses the renderer plugin system for all human-facing output.\n\nimport { createKernel } from '../../kernel/kernel.js';\nimport type { KernelConfig } from '../../kernel/kernel.js';\nimport { createLiveRegistry } from '../../adapters/registry.js';\nimport { createJsonlSink } from '../../events/jsonl.js';\nimport { createDecisionJsonlSink } from '../../events/decision-jsonl.js';\nimport { createTelemetryDecisionSink } from '../../telemetry/runtimeLogger.js';\nimport { loadPolicyDefs } from '../policy-resolver.js';\nimport { createSimulatorRegistry } from '../../kernel/simulation/registry.js';\nimport { createGitSimulator } from '../../kernel/simulation/git-simulator.js';\nimport { createFilesystemSimulator } from '../../kernel/simulation/filesystem-simulator.js';\nimport { createPackageSimulator } from '../../kernel/simulation/package-simulator.js';\nimport type { RawAgentAction } from '../../kernel/aab.js';\nimport { generateSeed, createSeededRng } from '../../core/rng.js';\nimport { simpleHash } from '../../core/hash.js';\nimport { createRendererRegistry } from '../../renderers/registry.js';\nimport type { RendererRegistry } from '../../renderers/registry.js';\nimport { createTuiRenderer } from '../../renderers/tui-renderer.js';\n\nexport interface GuardOptions {\n policy?: string;\n dryRun?: boolean;\n verbose?: boolean;\n stdin?: boolean;\n simulate?: boolean;\n /** Optional pre-configured renderer registry (for custom renderers) */\n renderers?: RendererRegistry;\n}\n\nexport async function guard(_args: string[], options: GuardOptions = {}): Promise<number> {\n // Resolve policy\n const policyDefs = loadPolicyDefs(options.policy);\n const policyPath = options.policy;\n\n // Build simulator registry (enabled by default)\n const simulators = createSimulatorRegistry();\n if (options.simulate !== false) {\n simulators.register(createGitSimulator());\n simulators.register(createFilesystemSimulator());\n simulators.register(createPackageSimulator());\n }\n\n // Create seeded RNG \u2014 seed is stored in session metadata for deterministic replay\n const seed = generateSeed();\n const rng = createSeededRng(seed);\n\n // Generate run ID using seeded RNG so both sinks share it\n const runId = `run_${Date.now()}_${simpleHash(rng.random().toString())}`;\n\n // Create sinks\n const jsonlSink = createJsonlSink({ runId });\n const decisionSink = createDecisionJsonlSink({ runId });\n const telemetrySink = createTelemetryDecisionSink();\n\n // Build kernel config\n const kernelConfig: KernelConfig = {\n runId,\n rng,\n policyDefs,\n dryRun: options.dryRun ?? false,\n adapters: options.dryRun ? undefined : createLiveRegistry(),\n sinks: [jsonlSink],\n decisionSinks: [decisionSink, telemetrySink],\n simulators: simulators.all().length > 0 ? simulators : undefined,\n };\n\n const kernel = createKernel(kernelConfig);\n\n // Set up renderer registry \u2014 use provided registry or create default with TUI\n const renderers = options.renderers ?? createRendererRegistry();\n if (!options.renderers) {\n renderers.register(createTuiRenderer({ verbose: options.verbose }));\n }\n\n // Notify renderers: run started\n const policyName = policyPath || 'default (no file)';\n const simCount = simulators.all().length;\n renderers.notifyRunStarted({\n runId,\n policyName,\n invariantCount: 6,\n verbose: options.verbose,\n dryRun: options.dryRun,\n simulatorCount: simCount,\n });\n\n if (!options.stdin) {\n // Interactive mode prompt\n process.stderr.write(\n ` ${'\\x1b[2m'}Listening for actions on stdin (JSON per line)...${'\\x1b[0m'}\\n`\n );\n process.stderr.write(` ${'\\x1b[2m'}Press Ctrl+C to stop.${'\\x1b[0m'}\\n\\n`);\n }\n\n return processStdin(kernel, renderers);\n}\n\nasync function processStdin(\n kernel: ReturnType<typeof createKernel>,\n renderers: RendererRegistry\n): Promise<number> {\n const startTime = Date.now();\n let totalActions = 0;\n let allowedCount = 0;\n let deniedCount = 0;\n let violationCount = 0;\n\n return new Promise((resolvePromise) => {\n let buffer = '';\n\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', async (chunk: string) => {\n buffer += chunk;\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const rawAction = JSON.parse(trimmed) as RawAgentAction;\n const result = await kernel.propose(rawAction);\n\n totalActions++;\n if (result.allowed) allowedCount++;\n else deniedCount++;\n violationCount += result.decision.violations.length;\n\n // Dispatch to all registered renderers\n renderers.notifyActionResult(result);\n\n if (result.decisionRecord) {\n renderers.notifyDecisionRecord(result.decisionRecord);\n }\n\n // Write machine-readable result to stdout\n const output = {\n allowed: result.allowed,\n executed: result.executed,\n action: result.decision.intent.action,\n target: result.decision.intent.target,\n reason: result.decision.decision.reason,\n violations: result.decision.violations.map((v) => v.name),\n runId: result.runId,\n decisionRecordId: result.decisionRecord?.recordId,\n };\n process.stdout.write(JSON.stringify(output) + '\\n');\n } catch (err) {\n process.stderr.write(\n ` \\x1b[31mError:\\x1b[0m Invalid JSON input: ${(err as Error).message}\\n`\n );\n }\n }\n });\n\n const shutdown = () => {\n kernel.shutdown();\n renderers.notifyRunEnded({\n runId: kernel.getRunId(),\n totalActions,\n allowed: allowedCount,\n denied: deniedCount,\n violations: violationCount,\n durationMs: Date.now() - startTime,\n });\n renderers.disposeAll();\n };\n\n process.stdin.on('end', () => {\n shutdown();\n resolvePromise(0);\n });\n\n process.on('SIGINT', () => {\n shutdown();\n process.stderr.write('\\n \\x1b[33mAgentGuard stopped.\\x1b[0m\\n\\n');\n resolvePromise(0);\n });\n });\n}\n", "// CLI command: agentguard inspect \u2014 show action graph and events for a run.\n// Also handles: agentguard events <runId>\n\nimport { readFileSync, existsSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { renderEventStream, renderDecisionTable } from '../tui.js';\nimport { getEventFilePath } from '../../events/jsonl.js';\nimport { getDecisionFilePath } from '../../events/decision-jsonl.js';\nimport type { DomainEvent } from '../../core/types.js';\nimport type { GovernanceDecisionRecord } from '../../kernel/decisions/types.js';\n\nconst BASE_DIR = '.agentguard';\nconst EVENTS_DIR = join(BASE_DIR, 'events');\n\nfunction loadEvents(runId: string): DomainEvent[] {\n const filePath = getEventFilePath(runId);\n if (!existsSync(filePath)) {\n process.stderr.write(` \\x1b[31mError:\\x1b[0m No events found for run: ${runId}\\n`);\n process.stderr.write(` Expected file: ${filePath}\\n`);\n return [];\n }\n\n const content = readFileSync(filePath, 'utf8');\n const events: DomainEvent[] = [];\n\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n events.push(JSON.parse(trimmed) as DomainEvent);\n } catch {\n // Skip malformed lines\n }\n }\n\n return events;\n}\n\nfunction loadDecisions(runId: string): GovernanceDecisionRecord[] {\n const filePath = getDecisionFilePath(runId);\n if (!existsSync(filePath)) {\n return [];\n }\n\n const content = readFileSync(filePath, 'utf8');\n const records: GovernanceDecisionRecord[] = [];\n\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n records.push(JSON.parse(trimmed) as GovernanceDecisionRecord);\n } catch {\n // Skip malformed lines\n }\n }\n\n return records;\n}\n\nfunction listRuns(): string[] {\n if (!existsSync(EVENTS_DIR)) return [];\n return readdirSync(EVENTS_DIR)\n .filter((f) => f.endsWith('.jsonl'))\n .map((f) => f.replace('.jsonl', ''))\n .sort()\n .reverse();\n}\n\nexport async function inspect(args: string[]): Promise<void> {\n const showDecisions = args.includes('--decisions');\n const filteredArgs = args.filter((a) => a !== '--decisions');\n const targetArg = filteredArgs[0];\n\n if (!targetArg || targetArg === '--list') {\n const runs = listRuns();\n if (runs.length === 0) {\n process.stderr.write('\\n \\x1b[2mNo runs recorded yet.\\x1b[0m\\n');\n process.stderr.write(' Run \\x1b[1magentguard guard\\x1b[0m to start recording.\\n\\n');\n return;\n }\n\n process.stderr.write('\\n \\x1b[1mRecorded Runs\\x1b[0m\\n');\n process.stderr.write(` ${'\\x1b[2m'}${'\u2500'.repeat(50)}${'\\x1b[0m'}\\n`);\n for (const id of runs.slice(0, 20)) {\n const events = loadEvents(id);\n process.stderr.write(` ${id} ${'\\x1b[2m'}(${events.length} events)${'\\x1b[0m'}\\n`);\n }\n process.stderr.write('\\n');\n return;\n }\n\n // Check for --last flag\n const targetRunId = targetArg === '--last' ? listRuns()[0] : targetArg;\n if (!targetRunId) {\n process.stderr.write('\\n \\x1b[2mNo runs recorded yet.\\x1b[0m\\n\\n');\n return;\n }\n\n const events = loadEvents(targetRunId);\n if (events.length === 0 && !showDecisions) return;\n\n process.stderr.write(`\\n \\x1b[1mRun:\\x1b[0m ${targetRunId}\\n`);\n\n // Show decision records if --decisions flag is present\n if (showDecisions) {\n const decisions = loadDecisions(targetRunId);\n if (decisions.length > 0) {\n process.stderr.write(renderDecisionTable(decisions));\n } else {\n process.stderr.write('\\n \\x1b[2mNo decision records found for this run.\\x1b[0m\\n');\n }\n }\n\n // Reconstruct action graph from events\n const actionEvents = events.filter(\n (e) =>\n e.kind === 'ActionRequested' ||\n e.kind === 'ActionAllowed' ||\n e.kind === 'ActionDenied' ||\n e.kind === 'ActionExecuted' ||\n e.kind === 'ActionFailed'\n );\n\n if (actionEvents.length > 0) {\n // Group by action sequence to show action graph\n const actions: Array<{\n action: string;\n target: string;\n allowed: boolean;\n executed: boolean;\n reason: string;\n violations: string[];\n }> = [];\n\n for (const event of actionEvents) {\n const rec = event as unknown as Record<string, unknown>;\n if (event.kind === 'ActionAllowed') {\n actions.push({\n action: rec.actionType as string,\n target: rec.target as string,\n allowed: true,\n executed: false,\n reason: (rec.reason as string) || '',\n violations: [],\n });\n } else if (event.kind === 'ActionDenied') {\n const meta = rec.metadata as Record<string, unknown> | undefined;\n const violations = (meta?.violations as Array<{ name: string }>) || [];\n actions.push({\n action: rec.actionType as string,\n target: rec.target as string,\n allowed: false,\n executed: false,\n reason: rec.reason as string,\n violations: violations.map((v) => v.name),\n });\n } else if (event.kind === 'ActionExecuted') {\n const last = actions[actions.length - 1];\n if (last) last.executed = true;\n }\n }\n\n // Simple action summary\n process.stderr.write(`\\n \\x1b[1mAction Summary\\x1b[0m (${actions.length} actions)\\n`);\n process.stderr.write(` ${'\\x1b[2m'}${'\u2500'.repeat(50)}${'\\x1b[0m'}\\n`);\n\n for (let i = 0; i < actions.length; i++) {\n const a = actions[i];\n const num = `${i + 1}.`.padStart(4);\n const icon = a.allowed ? '\\x1b[32m\\u2713\\x1b[0m' : '\\x1b[31m\\u2717\\x1b[0m';\n const status = a.allowed\n ? a.executed\n ? '\\x1b[32mEXECUTED\\x1b[0m'\n : '\\x1b[2mALLOWED\\x1b[0m'\n : '\\x1b[31mDENIED\\x1b[0m';\n\n process.stderr.write(\n ` ${num} ${icon} ${a.action} \\x1b[2m${a.target}\\x1b[0m \\x1b[90m[${status}\\x1b[90m]\\x1b[0m\\n`\n );\n if (!a.allowed) {\n process.stderr.write(` \\x1b[2m${a.reason}\\x1b[0m\\n`);\n }\n for (const v of a.violations) {\n process.stderr.write(` \\x1b[33m\\u26A0 ${v}\\x1b[0m\\n`);\n }\n }\n }\n\n // Show event stream\n if (events.length > 0) {\n process.stderr.write(renderEventStream(events));\n }\n}\n\nexport async function events(args: string[]): Promise<void> {\n const runId = args[0];\n\n if (!runId) {\n process.stderr.write('\\n Usage: agentguard events <runId>\\n\\n');\n return;\n }\n\n const targetRunId = runId === '--last' ? listRuns()[0] : runId;\n if (!targetRunId) {\n process.stderr.write('\\n \\x1b[2mNo runs recorded yet.\\x1b[0m\\n\\n');\n return;\n }\n\n const eventList = loadEvents(targetRunId);\n if (eventList.length === 0) return;\n\n // Raw event dump\n for (const event of eventList) {\n process.stdout.write(JSON.stringify(event) + '\\n');\n }\n}\n", "// File-backed session store \u2014 persists event streams to ~/.agentguard/sessions/\n// Each session is a JSON file with metadata + ordered events.\n\nimport { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\n\nconst AGENTGUARD_DIR = join(homedir(), '.agentguard');\nconst SESSIONS_DIR = join(AGENTGUARD_DIR, 'sessions');\n\nfunction ensureDir(): void {\n if (!existsSync(SESSIONS_DIR)) {\n mkdirSync(SESSIONS_DIR, { recursive: true });\n }\n}\n\nfunction generateSessionId(): string {\n const ts = Math.floor(Date.now() / 1000);\n const rand = Math.random().toString(36).slice(2, 6);\n return `${ts}-${rand}`;\n}\n\ninterface SessionMeta {\n command?: string;\n repo?: string;\n /** Seed used by the kernel RNG \u2014 stored for deterministic replay */\n seed?: number;\n}\n\ninterface SessionEvent {\n kind?: string;\n timestamp?: number;\n [key: string]: unknown;\n}\n\ninterface SessionData {\n id: string;\n startedAt: string;\n command: string | null;\n repo: string | null;\n /** Seed used by the kernel RNG \u2014 enables deterministic replay */\n seed: number | null;\n events: SessionEvent[];\n summary: Record<string, unknown> | null;\n endedAt: string | null;\n}\n\nexport interface SessionWriter {\n id: string;\n path: string;\n append(event: SessionEvent): void;\n end(summary?: Record<string, unknown>): void;\n}\n\nexport function createSession(meta: SessionMeta = {}): SessionWriter {\n ensureDir();\n const id = generateSessionId();\n const filePath = join(SESSIONS_DIR, `${id}.json`);\n\n const session: SessionData = {\n id,\n startedAt: new Date().toISOString(),\n command: meta.command || null,\n repo: meta.repo || null,\n seed: meta.seed ?? null,\n events: [],\n summary: null,\n endedAt: null,\n };\n\n writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf8');\n\n return {\n id,\n path: filePath,\n\n append(event: SessionEvent) {\n session.events.push(event);\n writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf8');\n },\n\n end(summary: Record<string, unknown> = {}) {\n session.endedAt = new Date().toISOString();\n session.summary = {\n totalEvents: session.events.length,\n duration: Date.now() - new Date(session.startedAt).getTime(),\n ...summary,\n };\n writeFileSync(filePath, JSON.stringify(session, null, 2), 'utf8');\n },\n };\n}\n\nexport function loadSession(idOrPath: string): SessionData | null {\n ensureDir();\n\n let filePath: string;\n if (existsSync(idOrPath)) {\n filePath = idOrPath;\n } else {\n filePath = join(SESSIONS_DIR, `${idOrPath}.json`);\n }\n\n if (!existsSync(filePath)) return null;\n\n try {\n return JSON.parse(readFileSync(filePath, 'utf8')) as SessionData;\n } catch {\n return null;\n }\n}\n\ninterface SessionListEntry {\n id: string;\n startedAt: string;\n endedAt: string | null;\n command: string | null;\n eventCount: number;\n summary: Record<string, unknown> | null;\n}\n\nexport function listSessions(limit = 20): SessionListEntry[] {\n ensureDir();\n\n const files = readdirSync(SESSIONS_DIR)\n .filter((f) => f.endsWith('.json'))\n .sort()\n .reverse()\n .slice(0, limit);\n\n const sessions: SessionListEntry[] = [];\n for (const file of files) {\n try {\n const data = JSON.parse(readFileSync(join(SESSIONS_DIR, file), 'utf8')) as SessionData;\n sessions.push({\n id: data.id,\n startedAt: data.startedAt,\n endedAt: data.endedAt || null,\n command: data.command,\n eventCount: data.events ? data.events.length : 0,\n summary: data.summary,\n });\n } catch {\n // Skip corrupt files\n }\n }\n\n return sessions;\n}\n", "// Shared ANSI color constants for CLI output\n// Respects NO_COLOR convention (https://no-color.org/)\n\nconst enabled = !process.env.NO_COLOR;\n\nconst ESC = '\\x1b[';\nexport const RESET = enabled ? `${ESC}0m` : '';\nexport const BOLD = enabled ? `${ESC}1m` : '';\nexport const DIM = enabled ? `${ESC}2m` : '';\n\nexport const FG: Record<string, string> = {\n black: enabled ? `${ESC}30m` : '',\n red: enabled ? `${ESC}31m` : '',\n green: enabled ? `${ESC}32m` : '',\n yellow: enabled ? `${ESC}33m` : '',\n blue: enabled ? `${ESC}34m` : '',\n magenta: enabled ? `${ESC}35m` : '',\n cyan: enabled ? `${ESC}36m` : '',\n white: enabled ? `${ESC}37m` : '',\n gray: enabled ? `${ESC}90m` : '',\n};\n\nexport const TYPE_COLORS: Record<string, string> = {\n frontend: 'blue',\n backend: 'red',\n devops: 'yellow',\n testing: 'green',\n architecture: 'magenta',\n security: 'red',\n ai: 'cyan',\n};\n\nexport function color(text: string, fg: string): string {\n return `${FG[fg] || ''}${text}${RESET}`;\n}\n\nexport function bold(text: string): string {\n return `${BOLD}${text}${RESET}`;\n}\n\nexport function dim(text: string): string {\n return `${DIM}${text}${RESET}`;\n}\n\nexport function visLen(str: string): number {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '').length;\n}\n\nexport function padVis(str: string, width: number): string {\n const diff = width - visLen(str);\n return diff > 0 ? str + ' '.repeat(diff) : str;\n}\n", "// Replay CLI \u2014 flight recorder playback for debugging sessions.\n//\n// DONE(roadmap): Phase 4 \u2014 Full replay engine: see src/kernel/replay-engine.ts\n// DONE(roadmap): Phase 4 \u2014 Replay comparator: see src/kernel/replay-comparator.ts\n// DONE(roadmap): Phase 4 \u2014 Replay processor plugin interface: see src/kernel/replay-processor.ts\n\nimport { loadSession, listSessions } from './session-store.js';\nimport { color, bold, dim } from './colors.js';\n\ninterface EventDisplay {\n icon: string;\n label: string;\n color: string;\n}\n\nconst EVENT_DISPLAY: Record<string, EventDisplay> = {\n ErrorObserved: { icon: '!', label: 'Error observed', color: 'red' },\n BugClassified: { icon: '?', label: 'Bug classified', color: 'yellow' },\n ENCOUNTER_STARTED: { icon: '*', label: 'Encounter started', color: 'magenta' },\n MOVE_USED: { icon: '>', label: 'Move used', color: 'white' },\n DAMAGE_DEALT: { icon: '#', label: 'Damage dealt', color: 'red' },\n HEALING_APPLIED: { icon: '+', label: 'Healing applied', color: 'green' },\n PASSIVE_ACTIVATED: { icon: '~', label: 'Passive activated', color: 'cyan' },\n BUGMON_FAINTED: { icon: 'x', label: 'Fainted', color: 'red' },\n BATTLE_ENDED: { icon: 'v', label: 'Battle ended', color: 'green' },\n TestCompleted: { icon: 'T', label: 'Test completed', color: 'green' },\n FileSaved: { icon: 'F', label: 'File modified', color: 'blue' },\n RunStarted: { icon: '>', label: 'Run started', color: 'cyan' },\n RunEnded: { icon: '<', label: 'Run ended', color: 'cyan' },\n PolicyDenied: { icon: '!', label: 'Policy denied', color: 'red' },\n InvariantViolation: { icon: '!', label: 'Invariant violation', color: 'red' },\n};\n\nconst DEFAULT_DISPLAY: EventDisplay = { icon: '.', label: 'Event', color: 'gray' };\n\ninterface ReplayEvent {\n kind: string;\n timestamp: number;\n isBoss?: boolean;\n boss?: { name?: string };\n monster?: { name?: string; type?: string; hp?: number };\n enemy?: string;\n result?: string;\n monsterName?: string;\n message?: string;\n attacker?: string;\n move?: string;\n amount?: number;\n target?: string;\n bugmon?: string;\n suite?: string;\n file?: string;\n policy?: string;\n reason?: string;\n invariant?: string;\n expected?: string;\n actual?: string;\n [key: string]: unknown;\n}\n\ninterface SessionData {\n id: string;\n startedAt: string;\n endedAt?: string | null;\n command?: string | null;\n seed?: number | null;\n events: ReplayEvent[];\n summary?: Record<string, unknown> | null;\n}\n\nexport async function replay(args: string[]): Promise<void> {\n const wantsStep = args.includes('--step') || args.includes('-s');\n const wantsStats = args.includes('--stats');\n const wantsLast = args.includes('--last') || args.includes('-l');\n\n const filterIdx = args.indexOf('--filter');\n const filterKind = filterIdx !== -1 ? args[filterIdx + 1] : null;\n\n let sessionId: string | null = null;\n for (const arg of args) {\n if (!arg.startsWith('-') && arg !== filterKind) {\n sessionId = arg;\n break;\n }\n }\n\n if (wantsLast && !sessionId) {\n const sessions = listSessions(1);\n if (sessions.length === 0) {\n process.stderr.write(\n '\\n No sessions recorded yet.\\n Run \"agentguard guard\" to start recording.\\n\\n'\n );\n return;\n }\n sessionId = sessions[0].id;\n }\n\n if (!sessionId) {\n renderSessionList();\n return;\n }\n\n const session = loadSession(sessionId) as SessionData | null;\n if (!session) {\n process.stderr.write(\n `\\n Session \"${sessionId}\" not found.\\n Run \"agentguard replay\" to list available sessions.\\n\\n`\n );\n return;\n }\n\n if (wantsStats) {\n renderSessionStats(session);\n return;\n }\n\n if (wantsStep) {\n await replayStepMode(session, filterKind);\n return;\n }\n\n replayTimeline(session, filterKind);\n}\n\nfunction renderSessionList(): void {\n const sessions = listSessions(20);\n\n if (sessions.length === 0) {\n process.stderr.write(\n '\\n No sessions recorded yet.\\n Run \"agentguard guard\" to start recording.\\n\\n'\n );\n return;\n }\n\n const lines: string[] = [];\n lines.push('');\n lines.push(bold(color(' Flight Recorder \u2014 Recent Sessions', 'cyan')));\n lines.push('');\n\n for (const s of sessions) {\n const date = new Date(s.startedAt).toLocaleString();\n const events = `${s.eventCount} events`;\n const cmd = s.command ? dim(` ${s.command}`) : '';\n const status = s.endedAt ? color('done', 'green') : color('active', 'yellow');\n\n const bugs = (s.summary?.bugsDefeated as number) ?? 0;\n const bosses = (s.summary?.bossesEncountered as number) ?? 0;\n const summaryParts: string[] = [];\n if (bugs > 0) summaryParts.push(`${bugs} defeated`);\n if (bosses > 0) summaryParts.push(`${bosses} bosses`);\n const summaryStr = summaryParts.length > 0 ? dim(` (${summaryParts.join(', ')})`) : '';\n\n lines.push(` ${bold(s.id)} ${dim(date)} ${events}${summaryStr} [${status}]`);\n if (cmd) lines.push(` ${cmd}`);\n }\n\n lines.push('');\n lines.push(dim(' Usage: agentguard replay <session-id>'));\n lines.push(dim(' agentguard replay <session-id> --step'));\n lines.push(dim(' agentguard replay --last'));\n lines.push('');\n process.stdout.write(lines.join('\\n') + '\\n');\n}\n\nfunction replayTimeline(session: SessionData, filterKind: string | null): void {\n let events = session.events || [];\n if (filterKind) {\n events = events.filter((e) => e.kind === filterKind);\n }\n\n if (events.length === 0) {\n process.stderr.write(\n `\\n Session \"${session.id}\" has no events${filterKind ? ` matching \"${filterKind}\"` : ''}.\\n\\n`\n );\n return;\n }\n\n const baseTime = new Date(session.startedAt).getTime();\n const lines: string[] = [];\n\n lines.push('');\n lines.push(bold(color(' Flight Recorder \u2014 Session Replay', 'cyan')));\n lines.push(dim(` Session: ${session.id}`));\n if (session.command) lines.push(dim(` Command: ${session.command}`));\n lines.push(dim(` Started: ${session.startedAt}`));\n if (session.seed !== undefined && session.seed !== null)\n lines.push(dim(` Seed: ${session.seed}`));\n lines.push('');\n lines.push(dim(' TIME EVENT'));\n lines.push(dim(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n\n for (const event of events) {\n const elapsed = formatElapsed(event.timestamp - baseTime);\n const display = EVENT_DISPLAY[event.kind] || DEFAULT_DISPLAY;\n const detail = getEventDetail(event);\n const warning = isWarningEvent(event) ? color(' !!', 'red') : '';\n\n lines.push(\n ` ${dim(elapsed)} ${color(display.icon, display.color)} ${bold(display.label)}${warning}`\n );\n if (detail) {\n lines.push(` ${dim(detail)}`);\n }\n }\n\n lines.push('');\n lines.push(dim(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n renderInlineSummary(lines, events);\n lines.push('');\n\n process.stdout.write(lines.join('\\n') + '\\n');\n}\n\nasync function replayStepMode(session: SessionData, filterKind: string | null): Promise<void> {\n let events = session.events || [];\n if (filterKind) {\n events = events.filter((e) => e.kind === filterKind);\n }\n\n if (events.length === 0) {\n process.stderr.write(`\\n Session \"${session.id}\" has no events.\\n\\n`);\n return;\n }\n\n const baseTime = new Date(session.startedAt).getTime();\n\n process.stdout.write('\\n');\n process.stdout.write(bold(color(' Flight Recorder \u2014 Step Mode\\n', 'cyan')));\n process.stdout.write(dim(` Session: ${session.id} (${events.length} events)\\n`));\n process.stdout.write(dim(' Press ENTER for next, q to quit\\n'));\n process.stdout.write('\\n');\n\n for (let i = 0; i < events.length; i++) {\n const event = events[i];\n const elapsed = formatElapsed(event.timestamp - baseTime);\n const display = EVENT_DISPLAY[event.kind] || DEFAULT_DISPLAY;\n const detail = getEventDetail(event);\n const warning = isWarningEvent(event) ? color(' !!', 'red') : '';\n const progress = dim(`[${i + 1}/${events.length}]`);\n\n process.stdout.write(\n ` ${progress} ${dim(elapsed)} ${color(display.icon, display.color)} ${bold(display.label)}${warning}\\n`\n );\n if (detail) {\n process.stdout.write(` ${dim(detail)}\\n`);\n }\n\n if (i < events.length - 1) {\n const quit = await waitForKeypress();\n if (quit) {\n process.stdout.write(dim('\\n Replay stopped.\\n\\n'));\n return;\n }\n }\n }\n\n process.stdout.write(dim('\\n End of session.\\n\\n'));\n}\n\nfunction renderSessionStats(session: SessionData): void {\n const events = session.events || [];\n const baseTime = new Date(session.startedAt).getTime();\n const duration =\n (session.summary?.duration as number) ||\n (events.length > 0 ? events[events.length - 1].timestamp - baseTime : 0);\n\n const counts: Record<string, number> = {};\n for (const e of events) {\n counts[e.kind] = (counts[e.kind] || 0) + 1;\n }\n\n const errors = counts['ErrorObserved'] || 0;\n const encounters = counts['ENCOUNTER_STARTED'] || 0;\n const battles = counts['BATTLE_ENDED'] || 0;\n const victories = events.filter(\n (e) => e.kind === 'BATTLE_ENDED' && e.result === 'victory'\n ).length;\n\n const lines: string[] = [];\n lines.push('');\n lines.push(bold(color(' Flight Recorder \u2014 Session Stats', 'cyan')));\n lines.push(dim(` Session: ${session.id}`));\n if (session.command) lines.push(dim(` Command: ${session.command}`));\n lines.push('');\n lines.push(` Duration: ${bold(formatElapsed(duration))}`);\n lines.push(` Events: ${bold(String(events.length))}`);\n if (session.seed !== undefined && session.seed !== null)\n lines.push(` Seed: ${bold(String(session.seed))}`);\n lines.push(` Errors: ${bold(color(String(errors), errors > 0 ? 'red' : 'green'))}`);\n lines.push(` Encounters: ${bold(String(encounters))}`);\n lines.push(` Battles: ${bold(String(battles))} (${victories} won)`);\n lines.push('');\n\n if (Object.keys(counts).length > 0) {\n lines.push(dim(' Event breakdown:'));\n const sorted = Object.entries(counts).sort((a, b) => b[1] - a[1]);\n for (const [kind, count] of sorted) {\n const display = EVENT_DISPLAY[kind] || DEFAULT_DISPLAY;\n lines.push(` ${color(display.icon, display.color)} ${display.label.padEnd(22)} ${count}`);\n }\n }\n\n const bosses = events.filter((e) => e.isBoss);\n if (bosses.length > 0) {\n lines.push('');\n lines.push(bold(color(' Bosses encountered:', 'red')));\n for (const b of bosses) {\n lines.push(` ${color('*', 'red')} ${b.boss?.name || b.enemy}`);\n }\n }\n\n lines.push('');\n process.stdout.write(lines.join('\\n') + '\\n');\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\n\nfunction formatElapsed(ms: number): string {\n if (ms < 0) ms = 0;\n const totalSeconds = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `[${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}]`;\n}\n\nfunction getEventDetail(event: ReplayEvent): string {\n switch (event.kind) {\n case 'ErrorObserved':\n return event.message ? truncate(event.message, 60) : '';\n case 'ENCOUNTER_STARTED':\n if (event.isBoss) return `Boss: ${event.boss?.name || event.enemy}`;\n return event.monster\n ? `${event.monster.name} [${event.monster.type}] HP:${event.monster.hp}`\n : event.enemy || '';\n case 'BATTLE_ENDED':\n if (event.result === 'resolved') return `${event.monsterName || 'Bug'} resolved`;\n return event.result || '';\n case 'MOVE_USED':\n return `${event.attacker} used ${event.move}`;\n case 'DAMAGE_DEALT':\n return `${event.amount} damage to ${event.target}`;\n case 'BUGMON_FAINTED':\n return event.bugmon || '';\n case 'TestCompleted':\n return `${event.result}${event.suite ? ` (${event.suite})` : ''}`;\n case 'FileSaved':\n return event.file || '';\n case 'PolicyDenied':\n return `${event.policy}: ${event.reason}`;\n case 'InvariantViolation':\n return `${event.invariant}: expected ${event.expected}, got ${event.actual}`;\n default:\n return '';\n }\n}\n\nfunction isWarningEvent(event: ReplayEvent): boolean {\n return (\n event.kind === 'ErrorObserved' ||\n event.kind === 'PolicyDenied' ||\n event.kind === 'InvariantViolation' ||\n (event.kind === 'TestCompleted' && event.result === 'fail') ||\n event.kind === 'BUGMON_FAINTED'\n );\n}\n\nfunction renderInlineSummary(lines: string[], events: ReplayEvent[]): void {\n const errors = events.filter((e) => e.kind === 'ErrorObserved').length;\n const encounters = events.filter((e) => e.kind === 'ENCOUNTER_STARTED').length;\n const resolved = events.filter(\n (e) => e.kind === 'BATTLE_ENDED' && (e.result === 'victory' || e.result === 'resolved')\n ).length;\n\n const parts: string[] = [];\n parts.push(`${events.length} events`);\n if (errors > 0) parts.push(color(`${errors} errors`, 'red'));\n if (encounters > 0) parts.push(`${encounters} encounters`);\n if (resolved > 0) parts.push(color(`${resolved} defeated`, 'green'));\n lines.push(` ${parts.join(' | ')}`);\n}\n\nfunction truncate(str: string, max: number): string {\n return str.length > max ? str.slice(0, max - 3) + '...' : str;\n}\n\nfunction waitForKeypress(): Promise<boolean> {\n return new Promise((resolve) => {\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n\n const onData = (key: Buffer) => {\n stdin.removeListener('data', onData);\n if (stdin.isTTY && !wasRaw) {\n stdin.setRawMode(false);\n }\n stdin.pause();\n\n if (key[0] === 0x71 || key[0] === 0x03) {\n resolve(true);\n } else {\n resolve(false);\n }\n };\n\n stdin.on('data', onData);\n });\n}\n", "// CLI command: agentguard export \u2014 export a governance session to a portable JSONL file.\n\nimport { readFileSync, writeFileSync, existsSync, readdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { parseArgs } from '../args.js';\nimport { getEventFilePath } from '../../events/jsonl.js';\nimport { getDecisionFilePath } from '../../events/decision-jsonl.js';\nimport type { DomainEvent } from '../../core/types.js';\nimport type { GovernanceDecisionRecord } from '../../kernel/decisions/types.js';\n\nconst BASE_DIR = '.agentguard';\nconst EVENTS_DIR = join(BASE_DIR, 'events');\n\n/** Metadata header written as the first line of an exported governance session. */\nexport interface GovernanceExportHeader {\n readonly __agentguard_export: true;\n readonly version: 1;\n readonly runId: string;\n readonly exportedAt: number;\n readonly eventCount: number;\n readonly decisionCount: number;\n}\n\nfunction listRuns(): string[] {\n if (!existsSync(EVENTS_DIR)) return [];\n return readdirSync(EVENTS_DIR)\n .filter((f) => f.endsWith('.jsonl'))\n .map((f) => f.replace('.jsonl', ''))\n .sort()\n .reverse();\n}\n\nfunction loadRunEvents(runId: string): DomainEvent[] {\n const filePath = getEventFilePath(runId);\n if (!existsSync(filePath)) return [];\n\n const events: DomainEvent[] = [];\n const content = readFileSync(filePath, 'utf8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n events.push(JSON.parse(trimmed) as DomainEvent);\n } catch {\n // Skip malformed lines\n }\n }\n return events;\n}\n\nfunction loadRunDecisions(runId: string): GovernanceDecisionRecord[] {\n const filePath = getDecisionFilePath(runId);\n if (!existsSync(filePath)) return [];\n\n const records: GovernanceDecisionRecord[] = [];\n const content = readFileSync(filePath, 'utf8');\n for (const line of content.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n records.push(JSON.parse(trimmed) as GovernanceDecisionRecord);\n } catch {\n // Skip malformed lines\n }\n }\n return records;\n}\n\nexport async function exportSession(args: string[]): Promise<void> {\n const parsed = parseArgs(args, {\n boolean: ['--last'],\n string: ['--output', '-o'],\n alias: { '-o': '--output' },\n });\n\n // Resolve runId\n let runId: string | undefined;\n if (parsed.flags.last) {\n const runs = listRuns();\n runId = runs[0];\n if (!runId) {\n process.stderr.write('\\n \\x1b[31mError:\\x1b[0m No runs recorded yet.\\n\\n');\n process.exitCode = 1;\n return;\n }\n } else {\n runId = parsed.positional[0];\n }\n\n if (!runId) {\n process.stderr.write('\\n Usage: agentguard export <runId> [--output <file>]\\n');\n process.stderr.write(' agentguard export --last\\n\\n');\n process.exitCode = 1;\n return;\n }\n\n // Load events and decisions\n const events = loadRunEvents(runId);\n if (events.length === 0) {\n process.stderr.write(`\\n \\x1b[31mError:\\x1b[0m Run \"${runId}\" has no events to export.\\n`);\n process.stderr.write(` Expected file: ${getEventFilePath(runId)}\\n\\n`);\n process.exitCode = 1;\n return;\n }\n\n const decisions = loadRunDecisions(runId);\n\n // Determine output path\n const outputPath = resolve((parsed.flags.output as string) || `${runId}.agentguard.jsonl`);\n\n // Build export file: header + events + decisions\n const header: GovernanceExportHeader = {\n __agentguard_export: true,\n version: 1,\n runId,\n exportedAt: Date.now(),\n eventCount: events.length,\n decisionCount: decisions.length,\n };\n\n const lines = [\n JSON.stringify(header),\n ...events.map((e) => JSON.stringify(e)),\n ...decisions.map((d) => JSON.stringify(d)),\n ];\n\n writeFileSync(outputPath, lines.join('\\n') + '\\n', 'utf8');\n\n process.stderr.write(`\\n \\x1b[32m\\u2713\\x1b[0m Exported run \\x1b[1m${runId}\\x1b[0m\\n`);\n process.stderr.write(` Events: ${events.length}\\n`);\n process.stderr.write(` Decisions: ${decisions.length}\\n`);\n process.stderr.write(` Output: ${outputPath}\\n\\n`);\n}\n", "// CLI command: agentguard import \u2014 import a governance session from a portable JSONL file.\n\nimport { readFileSync, appendFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { parseArgs } from '../args.js';\nimport { getEventFilePath } from '../../events/jsonl.js';\nimport { getDecisionFilePath } from '../../events/decision-jsonl.js';\nimport { validateEvent } from '../../events/schema.js';\nimport type { DomainEvent, ValidationResult } from '../../core/types.js';\nimport type { GovernanceDecisionRecord } from '../../kernel/decisions/types.js';\nimport type { GovernanceExportHeader } from './export.js';\n\nconst BASE_DIR = '.agentguard';\n\nfunction ensureDir(dirPath: string): void {\n if (!existsSync(dirPath)) {\n mkdirSync(dirPath, { recursive: true });\n }\n}\n\nexport async function importSession(args: string[]): Promise<void> {\n const parsed = parseArgs(args, {\n string: ['--as'],\n });\n\n const inputPath = parsed.positional[0];\n if (!inputPath) {\n process.stderr.write('\\n Usage: agentguard import <file> [--as <runId>]\\n\\n');\n process.exitCode = 1;\n return;\n }\n\n const resolvedPath = resolve(inputPath);\n if (!existsSync(resolvedPath)) {\n process.stderr.write(`\\n \\x1b[31mError:\\x1b[0m File not found: ${resolvedPath}\\n\\n`);\n process.exitCode = 1;\n return;\n }\n\n // Read and parse the file\n const content = readFileSync(resolvedPath, 'utf8');\n const lines = content.split('\\n').filter((l) => l.trim());\n\n if (lines.length === 0) {\n process.stderr.write('\\n \\x1b[31mError:\\x1b[0m Import file is empty.\\n\\n');\n process.exitCode = 1;\n return;\n }\n\n // Parse and validate header\n let header: GovernanceExportHeader;\n try {\n header = JSON.parse(lines[0]) as GovernanceExportHeader;\n } catch {\n process.stderr.write('\\n \\x1b[31mError:\\x1b[0m Import file has an invalid header line.\\n\\n');\n process.exitCode = 1;\n return;\n }\n\n if (header.__agentguard_export !== true || header.version !== 1) {\n process.stderr.write(\n '\\n \\x1b[31mError:\\x1b[0m Not a valid AgentGuard export (missing or invalid header).\\n\\n'\n );\n process.exitCode = 1;\n return;\n }\n\n const runId = (parsed.flags.as as string) || header.runId;\n if (!runId) {\n process.stderr.write(\n '\\n \\x1b[31mError:\\x1b[0m No runId found in export header and none provided via --as.\\n\\n'\n );\n process.exitCode = 1;\n return;\n }\n\n // Separate events and decisions based on header counts\n const eventLines = lines.slice(1, 1 + header.eventCount);\n const decisionLines = lines.slice(1 + header.eventCount);\n\n // Parse and validate events\n const events: DomainEvent[] = [];\n for (const line of eventLines) {\n try {\n const parsed = JSON.parse(line) as Record<string, unknown>;\n const { valid } = validateEvent(parsed) as ValidationResult;\n if (valid) {\n events.push(parsed as unknown as DomainEvent);\n }\n } catch {\n // Skip malformed lines\n }\n }\n\n // Parse decisions (no schema validation \u2014 they use a different format)\n const decisions: GovernanceDecisionRecord[] = [];\n for (const line of decisionLines) {\n try {\n const record = JSON.parse(line) as GovernanceDecisionRecord;\n if (record.outcome) {\n decisions.push(record);\n }\n } catch {\n // Skip malformed lines\n }\n }\n\n if (events.length === 0) {\n process.stderr.write('\\n \\x1b[31mError:\\x1b[0m Import file contains no valid events.\\n\\n');\n process.exitCode = 1;\n return;\n }\n\n // Check if run already exists\n const eventFilePath = getEventFilePath(runId);\n if (existsSync(eventFilePath)) {\n process.stderr.write(\n `\\n \\x1b[33m\\u26A0\\x1b[0m Run \"${runId}\" already exists. Events will be appended.\\n`\n );\n }\n\n // Write events\n ensureDir(join(BASE_DIR, 'events'));\n const eventData = events.map((e) => JSON.stringify(e)).join('\\n') + '\\n';\n appendFileSync(eventFilePath, eventData, 'utf8');\n\n // Write decisions (if any)\n if (decisions.length > 0) {\n ensureDir(join(BASE_DIR, 'decisions'));\n const decisionFilePath = getDecisionFilePath(runId);\n const decisionData = decisions.map((d) => JSON.stringify(d)).join('\\n') + '\\n';\n appendFileSync(decisionFilePath, decisionData, 'utf8');\n }\n\n process.stderr.write(`\\n \\x1b[32m\\u2713\\x1b[0m Imported run \\x1b[1m${runId}\\x1b[0m\\n`);\n process.stderr.write(` Events: ${events.length}\\n`);\n process.stderr.write(` Decisions: ${decisions.length}\\n`);\n process.stderr.write(` Source: ${resolvedPath}\\n\\n`);\n}\n", "// Plugin system type definitions \u2014 manifest schema, capabilities, and validation results.\n//\n// All third-party plugins (renderers, replay processors, policy packs) must provide\n// a PluginManifest describing their metadata, required capabilities, and API version\n// compatibility. The validation and sandboxing layer uses these declarations to\n// enforce security boundaries at load time and runtime.\n\n/** Supported plugin types in the AgentGuard ecosystem */\nexport type PluginType = 'renderer' | 'replay-processor' | 'policy-pack';\n\n/**\n * Capabilities a plugin may request.\n *\n * Plugins declare required capabilities in their manifest. The sandbox\n * grants only declared capabilities \u2014 any undeclared access is denied.\n */\nexport type PluginCapability =\n | 'filesystem:read'\n | 'filesystem:write'\n | 'network'\n | 'process:spawn'\n | 'events:emit'\n | 'events:subscribe';\n\n/** All known capabilities for validation */\nexport const VALID_CAPABILITIES: readonly PluginCapability[] = [\n 'filesystem:read',\n 'filesystem:write',\n 'network',\n 'process:spawn',\n 'events:emit',\n 'events:subscribe',\n];\n\n/**\n * Plugin manifest \u2014 the metadata every plugin must provide.\n *\n * This is validated at load time before the plugin is registered.\n * Think of it as the plugin's \"package.json\" for AgentGuard.\n */\nexport interface PluginManifest {\n /** Unique identifier (e.g., \"agentguard-renderer-json\") */\n readonly id: string;\n /** Human-readable display name */\n readonly name: string;\n /** Plugin version (semver, e.g., \"1.2.0\") */\n readonly version: string;\n /** Brief description of what the plugin does */\n readonly description?: string;\n /** The type of plugin */\n readonly type: PluginType;\n /** Required AgentGuard API version (semver range, e.g., \"^1.0.0\" or \">=1.0.0\") */\n readonly apiVersion: string;\n /** Capabilities this plugin requires at runtime */\n readonly capabilities?: readonly PluginCapability[];\n /** Other plugin IDs this plugin depends on */\n readonly dependencies?: readonly string[];\n}\n\n/** Individual validation error with a field path and message */\nexport interface PluginValidationError {\n readonly field: string;\n readonly message: string;\n}\n\n/** Result of validating a plugin manifest */\nexport interface PluginValidationResult {\n readonly valid: boolean;\n readonly pluginId: string | undefined;\n readonly errors: readonly PluginValidationError[];\n}\n\n/** Result of a sandbox capability check */\nexport interface SandboxViolation {\n readonly pluginId: string;\n readonly capability: string;\n readonly message: string;\n readonly timestamp: number;\n}\n\n/** Configuration for the plugin sandbox */\nexport interface SandboxConfig {\n /** Maximum execution time per callback in milliseconds (default: 5000) */\n readonly timeoutMs?: number;\n /** Whether to throw on violation or silently deny (default: false = silent) */\n readonly strict?: boolean;\n}\n", "// Plugin manifest validator \u2014 validates plugin manifests at load time.\n//\n// Validates structure, required fields, capability declarations, version\n// format, and API version compatibility. This runs before a plugin is\n// registered in any registry to ensure only well-formed plugins are loaded.\n\nimport type {\n PluginManifest,\n PluginType,\n PluginCapability,\n PluginValidationResult,\n PluginValidationError,\n} from './types.js';\nimport { VALID_CAPABILITIES } from './types.js';\n\n/** Valid plugin types */\nconst VALID_PLUGIN_TYPES: readonly PluginType[] = ['renderer', 'replay-processor', 'policy-pack'];\n\n/** Semver pattern: major.minor.patch with optional pre-release */\nconst SEMVER_PATTERN = /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/;\n\n/** Semver range patterns we accept for apiVersion */\nconst SEMVER_RANGE_PATTERN = /^([~^]|>=?|<=?|)?\\d+\\.\\d+\\.\\d+(-[\\w.]+)?$/;\n\n/**\n * Validate a plugin manifest for structural correctness.\n *\n * Checks:\n * - Required fields: id, name, version, type, apiVersion\n * - String format: non-empty strings, valid semver\n * - Plugin type: must be a known PluginType\n * - Capabilities: all entries must be known PluginCapability values\n * - Dependencies: must be non-empty strings if provided\n */\nexport function validateManifest(manifest: unknown): PluginValidationResult {\n const errors: PluginValidationError[] = [];\n\n if (!manifest || typeof manifest !== 'object') {\n return {\n valid: false,\n pluginId: undefined,\n errors: [{ field: 'manifest', message: 'Manifest must be a non-null object' }],\n };\n }\n\n const m = manifest as Record<string, unknown>;\n\n // --- Required string fields ---\n const requiredStrings = ['id', 'name', 'version', 'type', 'apiVersion'] as const;\n for (const field of requiredStrings) {\n if (m[field] === undefined || m[field] === null) {\n errors.push({ field, message: `\"${field}\" is required` });\n } else if (typeof m[field] !== 'string' || (m[field] as string).trim() === '') {\n errors.push({ field, message: `\"${field}\" must be a non-empty string` });\n }\n }\n\n const pluginId = typeof m.id === 'string' ? m.id : undefined;\n\n // --- Version format ---\n if (typeof m.version === 'string' && m.version.trim() !== '') {\n if (!SEMVER_PATTERN.test(m.version)) {\n errors.push({\n field: 'version',\n message: `\"${m.version}\" is not valid semver (expected major.minor.patch)`,\n });\n }\n }\n\n // --- API version format ---\n if (typeof m.apiVersion === 'string' && m.apiVersion.trim() !== '') {\n if (!SEMVER_RANGE_PATTERN.test(m.apiVersion)) {\n errors.push({\n field: 'apiVersion',\n message: `\"${m.apiVersion}\" is not a valid semver range`,\n });\n }\n }\n\n // --- Plugin type ---\n if (typeof m.type === 'string' && !VALID_PLUGIN_TYPES.includes(m.type as PluginType)) {\n errors.push({\n field: 'type',\n message: `\"${m.type}\" is not a valid plugin type (expected: ${VALID_PLUGIN_TYPES.join(', ')})`,\n });\n }\n\n // --- Optional description ---\n if (m.description !== undefined && typeof m.description !== 'string') {\n errors.push({ field: 'description', message: '\"description\" must be a string if provided' });\n }\n\n // --- Capabilities ---\n if (m.capabilities !== undefined) {\n if (!Array.isArray(m.capabilities)) {\n errors.push({\n field: 'capabilities',\n message: '\"capabilities\" must be an array if provided',\n });\n } else {\n for (let i = 0; i < m.capabilities.length; i++) {\n const cap = m.capabilities[i];\n if (typeof cap !== 'string') {\n errors.push({\n field: `capabilities[${i}]`,\n message: 'Each capability must be a string',\n });\n } else if (!VALID_CAPABILITIES.includes(cap as PluginCapability)) {\n errors.push({\n field: `capabilities[${i}]`,\n message: `\"${cap}\" is not a valid capability (expected: ${VALID_CAPABILITIES.join(', ')})`,\n });\n }\n }\n }\n }\n\n // --- Dependencies ---\n if (m.dependencies !== undefined) {\n if (!Array.isArray(m.dependencies)) {\n errors.push({\n field: 'dependencies',\n message: '\"dependencies\" must be an array if provided',\n });\n } else {\n for (let i = 0; i < m.dependencies.length; i++) {\n const dep = m.dependencies[i];\n if (typeof dep !== 'string' || dep.trim() === '') {\n errors.push({\n field: `dependencies[${i}]`,\n message: 'Each dependency must be a non-empty string',\n });\n }\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n pluginId,\n errors,\n };\n}\n\n/**\n * Parse semver string into components.\n * Returns null if the string is not valid semver.\n */\nfunction parseSemver(version: string): { major: number; minor: number; patch: number } | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n };\n}\n\n/**\n * Check if a plugin's declared apiVersion is compatible with the host API version.\n *\n * Supports simple semver range operators:\n * - `^1.0.0` \u2014 compatible with 1.x.x (major must match, minor/patch >= specified)\n * - `~1.2.0` \u2014 compatible with 1.2.x (major+minor must match, patch >= specified)\n * - `>=1.0.0` \u2014 any version >= 1.0.0\n * - `1.0.0` \u2014 exact match (treated as ^1.0.0 for convenience)\n */\nexport function checkApiVersionCompatibility(\n pluginApiVersion: string,\n hostVersion: string\n): { compatible: boolean; reason?: string } {\n const host = parseSemver(hostVersion);\n if (!host) {\n return { compatible: false, reason: `Invalid host version: \"${hostVersion}\"` };\n }\n\n // Extract operator and version\n const rangeMatch = pluginApiVersion.match(/^([~^]|>=?|<=?|)?(\\d+\\.\\d+\\.\\d+.*)$/);\n if (!rangeMatch) {\n return { compatible: false, reason: `Invalid apiVersion format: \"${pluginApiVersion}\"` };\n }\n\n const operator = rangeMatch[1] || '^'; // Default to caret if no operator\n const required = parseSemver(rangeMatch[2]);\n if (!required) {\n return { compatible: false, reason: `Cannot parse version: \"${rangeMatch[2]}\"` };\n }\n\n switch (operator) {\n case '^': {\n // Major must match, host >= required\n if (host.major !== required.major) {\n return {\n compatible: false,\n reason: `Major version mismatch: host ${hostVersion} vs required ^${rangeMatch[2]}`,\n };\n }\n if (\n host.minor < required.minor ||\n (host.minor === required.minor && host.patch < required.patch)\n ) {\n return {\n compatible: false,\n reason: `Host version ${hostVersion} is older than required ^${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n case '~': {\n // Major+minor must match, patch >= required\n if (host.major !== required.major || host.minor !== required.minor) {\n return {\n compatible: false,\n reason: `Version mismatch: host ${hostVersion} vs required ~${rangeMatch[2]}`,\n };\n }\n if (host.patch < required.patch) {\n return {\n compatible: false,\n reason: `Host patch ${hostVersion} is older than required ~${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n case '>=': {\n const hostVal = host.major * 10000 + host.minor * 100 + host.patch;\n const reqVal = required.major * 10000 + required.minor * 100 + required.patch;\n if (hostVal < reqVal) {\n return {\n compatible: false,\n reason: `Host version ${hostVersion} is older than required >=${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n case '>': {\n const hostVal = host.major * 10000 + host.minor * 100 + host.patch;\n const reqVal = required.major * 10000 + required.minor * 100 + required.patch;\n if (hostVal <= reqVal) {\n return {\n compatible: false,\n reason: `Host version ${hostVersion} is not greater than ${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n case '<=': {\n const hostVal = host.major * 10000 + host.minor * 100 + host.patch;\n const reqVal = required.major * 10000 + required.minor * 100 + required.patch;\n if (hostVal > reqVal) {\n return {\n compatible: false,\n reason: `Host version ${hostVersion} is newer than required <=${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n case '<': {\n const hostVal = host.major * 10000 + host.minor * 100 + host.patch;\n const reqVal = required.major * 10000 + required.minor * 100 + required.patch;\n if (hostVal >= reqVal) {\n return {\n compatible: false,\n reason: `Host version ${hostVersion} is not less than ${rangeMatch[2]}`,\n };\n }\n return { compatible: true };\n }\n\n default:\n return { compatible: false, reason: `Unknown operator: \"${operator}\"` };\n }\n}\n\n/**\n * Fully validate a plugin manifest including API version compatibility.\n *\n * This is the main entry point for plugin validation. It runs:\n * 1. Structural validation (validateManifest)\n * 2. API version compatibility check (checkApiVersionCompatibility)\n *\n * Returns a combined result with all errors.\n */\nexport function validatePlugin(manifest: unknown, hostVersion: string): PluginValidationResult {\n const structuralResult = validateManifest(manifest);\n\n // If structural validation failed, return early \u2014 can't check compatibility\n if (!structuralResult.valid) {\n return structuralResult;\n }\n\n const m = manifest as PluginManifest;\n const errors = [...structuralResult.errors];\n\n // Check API version compatibility\n const compat = checkApiVersionCompatibility(m.apiVersion, hostVersion);\n if (!compat.compatible) {\n errors.push({\n field: 'apiVersion',\n message: compat.reason || 'Incompatible API version',\n });\n }\n\n return {\n valid: errors.length === 0,\n pluginId: m.id,\n errors,\n };\n}\n", "// Plugin registry \u2014 tracks installed plugins with metadata and persistence.\n//\n// The registry is the lifecycle manager for plugins. It validates manifests\n// at install time, persists the registry to disk (.agentguard/plugins.json),\n// and provides lookup/listing for the CLI and kernel.\n\nimport { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport type { PluginManifest, PluginType, PluginValidationResult } from './types.js';\nimport { validatePlugin } from './validator.js';\n\n/** Metadata stored for each installed plugin */\nexport interface InstalledPlugin {\n /** The validated plugin manifest */\n readonly manifest: PluginManifest;\n /** Where the plugin was installed from (local path, npm package name) */\n readonly source: string;\n /** ISO timestamp of when the plugin was installed */\n readonly installedAt: string;\n /** Whether the plugin is currently enabled */\n readonly enabled: boolean;\n}\n\n/** Serialized registry format written to disk */\ninterface RegistryFile {\n readonly version: 1;\n readonly plugins: Record<string, InstalledPlugin>;\n}\n\n/** Options for creating a plugin registry */\nexport interface PluginRegistryOptions {\n /** Directory to store the registry file (default: .agentguard) */\n readonly storageDir?: string;\n /** Host API version for compatibility checks (default: \"1.0.0\") */\n readonly hostVersion?: string;\n}\n\n/** Plugin registry \u2014 manages installed plugin lifecycle */\nexport interface PluginRegistry {\n /** Install a plugin from a manifest and source. Validates before registering. */\n install(manifest: PluginManifest, source: string): PluginValidationResult;\n\n /** Remove a plugin by ID. Returns true if found and removed. */\n remove(pluginId: string): boolean;\n\n /** Get an installed plugin by ID */\n get(pluginId: string): InstalledPlugin | undefined;\n\n /** Check if a plugin is installed */\n has(pluginId: string): boolean;\n\n /** Enable a plugin. Returns false if not found. */\n enable(pluginId: string): boolean;\n\n /** Disable a plugin. Returns false if not found. */\n disable(pluginId: string): boolean;\n\n /** List all installed plugins */\n list(): readonly InstalledPlugin[];\n\n /** List plugins filtered by type */\n listByType(type: PluginType): readonly InstalledPlugin[];\n\n /** Number of installed plugins */\n count(): number;\n\n /** Persist the registry to disk */\n save(): void;\n\n /** Reload the registry from disk */\n reload(): void;\n}\n\nconst DEFAULT_HOST_VERSION = '1.0.0';\nconst REGISTRY_FILENAME = 'plugins.json';\n\n/**\n * Create a plugin registry backed by a JSON file.\n *\n * The registry validates manifests at install time using the existing\n * plugin validator and persists the installed plugin list to disk.\n */\nexport function createPluginRegistry(options?: PluginRegistryOptions): PluginRegistry {\n const storageDir = options?.storageDir ?? '.agentguard';\n const hostVersion = options?.hostVersion ?? DEFAULT_HOST_VERSION;\n const registryPath = join(storageDir, REGISTRY_FILENAME);\n\n const plugins = new Map<string, InstalledPlugin>();\n\n // Load existing registry from disk if present\n loadFromDisk();\n\n function loadFromDisk(): void {\n if (!existsSync(registryPath)) return;\n\n try {\n const raw = readFileSync(registryPath, 'utf8');\n const data = JSON.parse(raw) as RegistryFile;\n if (data.version === 1 && data.plugins) {\n plugins.clear();\n for (const [id, entry] of Object.entries(data.plugins)) {\n plugins.set(id, entry);\n }\n }\n } catch {\n // Corrupt or missing file \u2014 start fresh\n }\n }\n\n function saveToDisk(): void {\n const data: RegistryFile = {\n version: 1,\n plugins: Object.fromEntries(plugins),\n };\n\n mkdirSync(dirname(registryPath), { recursive: true });\n writeFileSync(registryPath, JSON.stringify(data, null, 2) + '\\n', 'utf8');\n }\n\n return {\n install(manifest, source) {\n const result = validatePlugin(manifest, hostVersion);\n if (!result.valid) {\n return result;\n }\n\n if (plugins.has(manifest.id)) {\n return {\n valid: false,\n pluginId: manifest.id,\n errors: [\n {\n field: 'id',\n message: `Plugin \"${manifest.id}\" is already installed. Remove it first to reinstall.`,\n },\n ],\n };\n }\n\n // Check dependencies are satisfied\n if (manifest.dependencies) {\n for (const dep of manifest.dependencies) {\n if (!plugins.has(dep)) {\n return {\n valid: false,\n pluginId: manifest.id,\n errors: [\n {\n field: 'dependencies',\n message: `Missing dependency: \"${dep}\" must be installed first`,\n },\n ],\n };\n }\n }\n }\n\n const entry: InstalledPlugin = {\n manifest,\n source,\n installedAt: new Date().toISOString(),\n enabled: true,\n };\n\n plugins.set(manifest.id, entry);\n saveToDisk();\n\n return result;\n },\n\n remove(pluginId) {\n // Check if any other plugin depends on this one\n for (const [id, entry] of plugins) {\n if (id === pluginId) continue;\n if (entry.manifest.dependencies?.includes(pluginId)) {\n return false;\n }\n }\n\n const removed = plugins.delete(pluginId);\n if (removed) {\n saveToDisk();\n }\n return removed;\n },\n\n get(pluginId) {\n return plugins.get(pluginId);\n },\n\n has(pluginId) {\n return plugins.has(pluginId);\n },\n\n enable(pluginId) {\n const entry = plugins.get(pluginId);\n if (!entry) return false;\n plugins.set(pluginId, { ...entry, enabled: true });\n saveToDisk();\n return true;\n },\n\n disable(pluginId) {\n const entry = plugins.get(pluginId);\n if (!entry) return false;\n plugins.set(pluginId, { ...entry, enabled: false });\n saveToDisk();\n return true;\n },\n\n list() {\n return [...plugins.values()];\n },\n\n listByType(type) {\n return [...plugins.values()].filter((p) => p.manifest.type === type);\n },\n\n count() {\n return plugins.size;\n },\n\n save() {\n saveToDisk();\n },\n\n reload() {\n loadFromDisk();\n },\n };\n}\n", "// Plugin discovery \u2014 search for available AgentGuard plugins.\n//\n// Supports two discovery sources:\n// 1. npm registry \u2014 search for packages with \"agentguard-plugin\" keyword\n// 2. Local directory \u2014 scan a directory for plugin manifests\n//\n// Discovery is read-only \u2014 it finds plugins but does not install them.\n// Use the PluginRegistry to install discovered plugins.\n\nimport { readdirSync, readFileSync, existsSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { PluginType } from './types.js';\n\n/** A discovered plugin that has not yet been installed */\nexport interface DiscoveredPlugin {\n /** Package or directory name */\n readonly name: string;\n /** Plugin version */\n readonly version: string;\n /** Brief description */\n readonly description: string;\n /** Plugin type if determinable */\n readonly type?: PluginType;\n /** Where this plugin was discovered */\n readonly source: 'npm' | 'local';\n /** Source-specific identifier (npm package name or file path) */\n readonly sourceId: string;\n}\n\n/** Options for npm registry search */\nexport interface NpmSearchOptions {\n /** npm registry URL (default: https://registry.npmjs.org) */\n readonly registryUrl?: string;\n /** Search keyword (default: \"agentguard-plugin\") */\n readonly keyword?: string;\n /** Maximum results to return (default: 20) */\n readonly limit?: number;\n}\n\n/** Options for local directory search */\nexport interface LocalSearchOptions {\n /** Directory to scan for plugins */\n readonly directory: string;\n}\n\n/**\n * Search the npm registry for AgentGuard plugins.\n *\n * Searches for packages with the \"agentguard-plugin\" keyword.\n * Uses the npm registry search API (/-/v1/search).\n */\nexport async function searchNpmPlugins(\n query?: string,\n options?: NpmSearchOptions\n): Promise<readonly DiscoveredPlugin[]> {\n const registryUrl = options?.registryUrl ?? 'https://registry.npmjs.org';\n const keyword = options?.keyword ?? 'agentguard-plugin';\n const limit = options?.limit ?? 20;\n\n const searchTerms = query ? `${keyword} ${query}` : keyword;\n const url = `${registryUrl}/-/v1/search?text=keywords:${encodeURIComponent(searchTerms)}&size=${limit}`;\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return [];\n }\n\n const data = (await response.json()) as NpmSearchResponse;\n return (data.objects ?? []).map((obj) => ({\n name: obj.package.name,\n version: obj.package.version,\n description: obj.package.description ?? '',\n source: 'npm' as const,\n sourceId: obj.package.name,\n }));\n } catch {\n // Network error or invalid response \u2014 return empty\n return [];\n }\n}\n\n/** npm search API response shape */\ninterface NpmSearchResponse {\n objects?: Array<{\n package: {\n name: string;\n version: string;\n description?: string;\n keywords?: string[];\n };\n }>;\n}\n\n/**\n * Search a local directory for AgentGuard plugins.\n *\n * Scans subdirectories for package.json files that contain\n * an \"agentguard\" field with plugin manifest data.\n */\nexport function searchLocalPlugins(options: LocalSearchOptions): readonly DiscoveredPlugin[] {\n const { directory } = options;\n\n if (!existsSync(directory)) {\n return [];\n }\n\n const results: DiscoveredPlugin[] = [];\n\n try {\n const entries = readdirSync(directory);\n\n for (const entry of entries) {\n const entryPath = join(directory, entry);\n const stat = statSync(entryPath);\n if (!stat.isDirectory()) continue;\n\n const pkgPath = join(entryPath, 'package.json');\n if (!existsSync(pkgPath)) continue;\n\n try {\n const raw = readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(raw) as LocalPackageJson;\n\n // Check for agentguard manifest in package.json\n if (pkg.agentguard) {\n results.push({\n name: pkg.name ?? entry,\n version: pkg.version ?? '0.0.0',\n description: pkg.description ?? '',\n type: pkg.agentguard.type as PluginType | undefined,\n source: 'local',\n sourceId: entryPath,\n });\n }\n } catch {\n // Invalid package.json \u2014 skip\n }\n }\n } catch {\n // Directory read error \u2014 return what we have\n }\n\n return results;\n}\n\n/** Shape of a local package.json with agentguard metadata */\ninterface LocalPackageJson {\n name?: string;\n version?: string;\n description?: string;\n agentguard?: {\n type?: string;\n };\n}\n", "// CLI command: agentguard plugin \u2014 manage installed plugins.\n//\n// Subcommands:\n// list List all installed plugins\n// install <source> Install a plugin from a local path\n// remove <id> Remove an installed plugin\n// enable <id> Enable a disabled plugin\n// disable <id> Disable an installed plugin\n// search [query] Search for plugins on npm\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\nimport { createPluginRegistry } from '../../plugins/registry.js';\nimport { searchNpmPlugins, searchLocalPlugins } from '../../plugins/discovery.js';\nimport type { PluginManifest } from '../../plugins/types.js';\nimport { bold, color, dim } from '../colors.js';\n\nconst STORAGE_DIR = '.agentguard';\n\n/**\n * Main plugin command handler.\n *\n * Routes to the appropriate subcommand based on the first argument.\n */\nexport async function plugin(args: string[]): Promise<number> {\n const subcommand = args[0];\n\n switch (subcommand) {\n case 'list':\n case 'ls':\n return pluginList();\n\n case 'install':\n case 'add':\n return pluginInstall(args.slice(1));\n\n case 'remove':\n case 'rm':\n return pluginRemove(args.slice(1));\n\n case 'enable':\n return pluginEnable(args.slice(1));\n\n case 'disable':\n return pluginDisable(args.slice(1));\n\n case 'search':\n return pluginSearch(args.slice(1));\n\n case undefined:\n case 'help':\n case '--help':\n case '-h':\n printPluginHelp();\n return 0;\n\n default:\n console.error(` Unknown plugin subcommand: ${subcommand}`);\n console.error(' Run \"agentguard plugin help\" for usage info.');\n return 1;\n }\n}\n\nfunction pluginList(): number {\n const registry = createPluginRegistry({ storageDir: STORAGE_DIR });\n const plugins = registry.list();\n\n if (plugins.length === 0) {\n console.log(`\\n ${dim('No plugins installed.')}`);\n console.log(` ${dim('Run \"agentguard plugin install <path>\" to install a plugin.')}\\n`);\n return 0;\n }\n\n console.log(`\\n ${bold('Installed Plugins')} ${dim(`(${plugins.length})`)}\\n`);\n\n for (const p of plugins) {\n const status = p.enabled ? color('enabled', 'green') : color('disabled', 'yellow');\n const typeLabel = color(p.manifest.type, 'cyan');\n\n console.log(` ${bold(p.manifest.name)} ${dim(`v${p.manifest.version}`)}`);\n console.log(` ID: ${p.manifest.id}`);\n console.log(` Type: ${typeLabel}`);\n console.log(` Status: ${status}`);\n console.log(` Source: ${dim(p.source)}`);\n if (p.manifest.description) {\n console.log(` Desc: ${dim(p.manifest.description)}`);\n }\n if (p.manifest.capabilities && p.manifest.capabilities.length > 0) {\n console.log(` Caps: ${dim(p.manifest.capabilities.join(', '))}`);\n }\n console.log();\n }\n\n return 0;\n}\n\nfunction pluginInstall(args: string[]): number {\n const source = args[0];\n if (!source) {\n console.error(' Error: Please specify a plugin source (local path or package name).');\n return 1;\n }\n\n const resolvedPath = resolve(source);\n\n // Try to load manifest from the source\n const manifest = loadManifestFromPath(resolvedPath);\n if (!manifest) {\n console.error(` Error: Could not find a valid plugin manifest at \"${source}\".`);\n console.error(' Expected: package.json with an \"agentguard\" field containing the manifest.');\n return 1;\n }\n\n const registry = createPluginRegistry({ storageDir: STORAGE_DIR });\n const result = registry.install(manifest, source);\n\n if (!result.valid) {\n console.error(`\\n ${color('Installation failed', 'red')} for ${source}:\\n`);\n for (const err of result.errors) {\n console.error(` ${color('\u2717', 'red')} ${err.field}: ${err.message}`);\n }\n console.log();\n return 1;\n }\n\n console.log(\n `\\n ${color('\u2713', 'green')} Installed ${bold(manifest.name)} ${dim(`v${manifest.version}`)}`\n );\n console.log(` ID: ${manifest.id}`);\n console.log(` Type: ${manifest.type}\\n`);\n return 0;\n}\n\nfunction pluginRemove(args: string[]): number {\n const pluginId = args[0];\n if (!pluginId) {\n console.error(' Error: Please specify a plugin ID to remove.');\n return 1;\n }\n\n const registry = createPluginRegistry({ storageDir: STORAGE_DIR });\n const entry = registry.get(pluginId);\n\n if (!entry) {\n console.error(` Error: Plugin \"${pluginId}\" is not installed.`);\n return 1;\n }\n\n const removed = registry.remove(pluginId);\n if (!removed) {\n console.error(` Error: Cannot remove \"${pluginId}\" \u2014 other plugins depend on it.`);\n return 1;\n }\n\n console.log(\n `\\n ${color('\u2713', 'green')} Removed ${bold(entry.manifest.name)} ${dim(`v${entry.manifest.version}`)}\\n`\n );\n return 0;\n}\n\nfunction pluginEnable(args: string[]): number {\n const pluginId = args[0];\n if (!pluginId) {\n console.error(' Error: Please specify a plugin ID to enable.');\n return 1;\n }\n\n const registry = createPluginRegistry({ storageDir: STORAGE_DIR });\n if (!registry.enable(pluginId)) {\n console.error(` Error: Plugin \"${pluginId}\" is not installed.`);\n return 1;\n }\n\n console.log(` ${color('\u2713', 'green')} Enabled \"${pluginId}\"`);\n return 0;\n}\n\nfunction pluginDisable(args: string[]): number {\n const pluginId = args[0];\n if (!pluginId) {\n console.error(' Error: Please specify a plugin ID to disable.');\n return 1;\n }\n\n const registry = createPluginRegistry({ storageDir: STORAGE_DIR });\n if (!registry.disable(pluginId)) {\n console.error(` Error: Plugin \"${pluginId}\" is not installed.`);\n return 1;\n }\n\n console.log(` ${color('\u2713', 'green')} Disabled \"${pluginId}\"`);\n return 0;\n}\n\nasync function pluginSearch(args: string[]): Promise<number> {\n const query = args[0];\n const localDir = args.includes('--local') ? args[args.indexOf('--local') + 1] : undefined;\n\n console.log(`\\n ${bold('Searching for plugins')}${query ? ` matching \"${query}\"` : ''}...\\n`);\n\n // Search npm registry\n const npmResults = await searchNpmPlugins(query);\n // Search local directory if specified\n const localResults = localDir ? searchLocalPlugins({ directory: localDir }) : [];\n\n const total = npmResults.length + localResults.length;\n\n if (total === 0) {\n console.log(` ${dim('No plugins found.')}\\n`);\n return 0;\n }\n\n if (npmResults.length > 0) {\n console.log(` ${bold('npm registry')} ${dim(`(${npmResults.length} results)`)}\\n`);\n for (const p of npmResults) {\n console.log(` ${bold(p.name)} ${dim(`v${p.version}`)}`);\n if (p.description) {\n console.log(` ${dim(p.description)}`);\n }\n }\n console.log();\n }\n\n if (localResults.length > 0) {\n console.log(` ${bold('Local')} ${dim(`(${localResults.length} results)`)}\\n`);\n for (const p of localResults) {\n console.log(\n ` ${bold(p.name)} ${dim(`v${p.version}`)} ${p.type ? color(p.type, 'cyan') : ''}`\n );\n if (p.description) {\n console.log(` ${dim(p.description)}`);\n }\n console.log(` ${dim(p.sourceId)}`);\n }\n console.log();\n }\n\n return 0;\n}\n\n/**\n * Load a PluginManifest from a local path.\n *\n * Expects the path to be a directory containing a package.json\n * with an \"agentguard\" field containing the plugin manifest.\n */\nfunction loadManifestFromPath(dirPath: string): PluginManifest | null {\n const pkgPath = join(dirPath, 'package.json');\n if (!existsSync(pkgPath)) return null;\n\n try {\n const raw = readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(raw) as {\n agentguard?: PluginManifest;\n };\n return pkg.agentguard ?? null;\n } catch {\n return null;\n }\n}\n\nfunction printPluginHelp(): void {\n console.log(`\n ${bold('agentguard plugin')} \u2014 Manage AgentGuard plugins\n\n ${bold('Usage:')}\n agentguard plugin <command> [options]\n\n ${bold('Commands:')}\n list, ls List all installed plugins\n install, add <path> Install a plugin from a local path\n remove, rm <id> Remove an installed plugin by ID\n enable <id> Enable a disabled plugin\n disable <id> Disable an installed plugin\n search [query] Search for plugins on npm\n\n ${bold('Examples:')}\n agentguard plugin list\n agentguard plugin install ./my-renderer-plugin\n agentguard plugin remove agentguard-renderer-json\n agentguard plugin disable agentguard-renderer-json\n agentguard plugin search renderer\n agentguard plugin search --local ./plugins\n`);\n}\n", "// agentguard claude-init \u2014 set up Claude Code integration\n\nimport { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport { RESET, BOLD, DIM, FG } from '../colors.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst HOOK_MARKER = 'claude-hook';\n\ninterface HookEntry {\n matcher?: string;\n hooks?: Array<{ type?: string; command?: string }>;\n}\n\ninterface Settings {\n hooks?: {\n PreToolUse?: HookEntry[];\n PostToolUse?: HookEntry[];\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\nexport async function claudeInit(args: string[] = []): Promise<void> {\n const isGlobal = args.includes('--global') || args.includes('-g');\n const isRemove = args.includes('--remove') || args.includes('--uninstall');\n\n const hookScript = resolve(__dirname, 'claude-hook.js');\n\n const settingsDir = isGlobal ? join(homedir(), '.claude') : join(process.cwd(), '.claude');\n const settingsPath = join(settingsDir, 'settings.json');\n const settingsLabel = isGlobal ? '~/.claude/settings.json' : '.claude/settings.json';\n\n process.stderr.write('\\n');\n process.stderr.write(` ${BOLD}AgentGuard Claude Code Integration${RESET}\\n\\n`);\n\n if (isRemove) {\n removeHook(settingsPath, settingsLabel);\n return;\n }\n\n if (!existsSync(settingsDir)) {\n mkdirSync(settingsDir, { recursive: true });\n }\n\n let settings: Settings = {};\n if (existsSync(settingsPath)) {\n try {\n settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as Settings;\n } catch {\n process.stderr.write(\n ` ${FG.yellow}Warning:${RESET} Could not parse ${settingsLabel}, creating fresh config.\\n`\n );\n settings = {};\n }\n }\n\n if (hasAgentGuardHook(settings)) {\n process.stderr.write(\n ` ${FG.yellow}Already configured.${RESET} AgentGuard hook found in ${settingsLabel}.\\n`\n );\n process.stderr.write(` ${DIM}Use --remove to uninstall.${RESET}\\n\\n`);\n return;\n }\n\n if (!settings.hooks) settings.hooks = {};\n\n // PreToolUse \u2014 governance enforcement (routes all tool calls through the kernel)\n if (!settings.hooks.PreToolUse) settings.hooks.PreToolUse = [];\n settings.hooks.PreToolUse.push({\n hooks: [\n {\n type: 'command',\n command: `node ${hookScript} pre`,\n },\n ],\n });\n\n // PostToolUse \u2014 error monitoring (Bash stderr reporting)\n if (!settings.hooks.PostToolUse) settings.hooks.PostToolUse = [];\n settings.hooks.PostToolUse.push({\n matcher: 'Bash',\n hooks: [\n {\n type: 'command',\n command: `node ${hookScript} post`,\n },\n ],\n });\n\n writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');\n\n process.stderr.write(\n ` ${FG.green}\u2713${RESET} Hooks installed in ${FG.cyan}${settingsLabel}${RESET}\\n`\n );\n process.stderr.write(` ${DIM}PreToolUse: governance enforcement (all tools)${RESET}\\n`);\n process.stderr.write(` ${DIM}PostToolUse: error monitoring (Bash)${RESET}\\n\\n`);\n // Set core.hooksPath so git uses the repo's hooks/ directory\n // (pre-commit auto-stages telemetry, post-commit tracks dev activity)\n try {\n const currentHooksPath = execSync('git config core.hooksPath', { encoding: 'utf8' }).trim();\n if (currentHooksPath !== 'hooks') {\n execSync('git config core.hooksPath hooks');\n process.stderr.write(\n ` ${FG.green}\u2713${RESET} Git hooks path set to ${FG.cyan}hooks/${RESET}\\n`\n );\n }\n } catch {\n // Not in a git repo, or no hooksPath set yet\n try {\n execSync('git config core.hooksPath hooks');\n process.stderr.write(\n ` ${FG.green}\u2713${RESET} Git hooks path set to ${FG.cyan}hooks/${RESET}\\n`\n );\n } catch {\n process.stderr.write(\n ` ${FG.yellow}Warning:${RESET} Could not set git hooks path. Run: git config core.hooksPath hooks\\n`\n );\n }\n }\n\n // Ensure telemetry directories exist\n const dirs = ['.agentguard/events', '.agentguard/decisions', 'logs'];\n for (const dir of dirs) {\n const dirPath = join(process.cwd(), dir);\n if (!existsSync(dirPath)) {\n mkdirSync(dirPath, { recursive: true });\n }\n }\n\n process.stderr.write(\n ` ${FG.green}${BOLD}Done!${RESET} AgentGuard governance will enforce policies on all Claude Code actions.\\n`\n );\n process.stderr.write(` ${DIM}Run \"agentguard inspect --last\" to view action history.${RESET}\\n`);\n process.stderr.write(` ${DIM}Use \"agentguard claude-init --remove\" to uninstall.${RESET}\\n\\n`);\n}\n\nfunction removeHook(settingsPath: string, settingsLabel: string): void {\n if (!existsSync(settingsPath)) {\n process.stderr.write(\n ` ${DIM}No settings file found at ${settingsLabel}. Nothing to remove.${RESET}\\n\\n`\n );\n return;\n }\n\n let settings: Settings;\n try {\n settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as Settings;\n } catch {\n process.stderr.write(` ${FG.red}Error:${RESET} Could not parse ${settingsLabel}.\\n\\n`);\n return;\n }\n\n if (!hasAgentGuardHook(settings)) {\n process.stderr.write(\n ` ${DIM}No AgentGuard hook found in ${settingsLabel}. Nothing to remove.${RESET}\\n\\n`\n );\n return;\n }\n\n const filterAgentGuard = (entries: HookEntry[]) =>\n entries.filter((entry) => {\n const hooks = entry.hooks || [];\n return !hooks.some((h) => h.command && h.command.includes(HOOK_MARKER));\n });\n\n const preToolUse = settings.hooks?.PreToolUse || [];\n settings.hooks!.PreToolUse = filterAgentGuard(preToolUse);\n if (settings.hooks!.PreToolUse!.length === 0) {\n delete settings.hooks!.PreToolUse;\n }\n\n const postToolUse = settings.hooks?.PostToolUse || [];\n settings.hooks!.PostToolUse = filterAgentGuard(postToolUse);\n if (settings.hooks!.PostToolUse!.length === 0) {\n delete settings.hooks!.PostToolUse;\n }\n\n if (Object.keys(settings.hooks!).length === 0) {\n delete settings.hooks;\n }\n\n writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');\n\n process.stderr.write(\n ` ${FG.green}\u2713${RESET} Hook removed from ${FG.cyan}${settingsLabel}${RESET}\\n`\n );\n process.stderr.write(\n ` ${DIM}AgentGuard governance will no longer monitor in Claude Code.${RESET}\\n\\n`\n );\n}\n\nfunction hasAgentGuardHook(settings: Settings): boolean {\n const preToolUse = settings?.hooks?.PreToolUse || [];\n const postToolUse = settings?.hooks?.PostToolUse || [];\n const allEntries = [...preToolUse, ...postToolUse];\n return allEntries.some((entry) => {\n const hooks = entry.hooks || [];\n return hooks.some((h) => h.command && h.command.includes(HOOK_MARKER));\n });\n}\n", "// Claude Code adapter \u2014 normalizes Claude Code hook payloads into kernel actions.\n// Handles PreToolUse and PostToolUse hook events.\n// Propagates agent session identity for audit correlation.\n\nimport type { RawAgentAction } from '../kernel/aab.js';\nimport type { Kernel, KernelResult } from '../kernel/kernel.js';\nimport { simpleHash } from '../core/hash.js';\n\nexport interface ClaudeCodeToolUse {\n tool_name: string;\n tool_input?: Record<string, unknown>;\n tool_output?: Record<string, unknown>;\n}\n\nexport interface ClaudeCodeHookPayload {\n hook: 'PreToolUse' | 'PostToolUse';\n tool_name: string;\n tool_input?: Record<string, unknown>;\n tool_output?: Record<string, unknown>;\n /** Claude Code session identifier for agent identity propagation */\n session_id?: string;\n}\n\n/**\n * Resolve a meaningful agent identity from the session ID.\n * Format: 'claude-code' (no session) or 'claude-code:<hash>' (with session).\n */\nexport function resolveAgentIdentity(sessionId?: string): string {\n if (!sessionId || typeof sessionId !== 'string' || sessionId.trim() === '') {\n return 'claude-code';\n }\n return `claude-code:${simpleHash(sessionId.trim())}`;\n}\n\nexport function normalizeClaudeCodeAction(payload: ClaudeCodeHookPayload): RawAgentAction {\n const input = payload.tool_input || {};\n const agent = resolveAgentIdentity(payload.session_id);\n\n switch (payload.tool_name) {\n case 'Write':\n return {\n tool: 'Write',\n file: input.file_path as string | undefined,\n content: input.content as string | undefined,\n agent,\n metadata: { hook: payload.hook, sessionId: payload.session_id },\n };\n\n case 'Edit':\n return {\n tool: 'Edit',\n file: input.file_path as string | undefined,\n content: input.new_string as string | undefined,\n agent,\n metadata: {\n hook: payload.hook,\n old_string: input.old_string,\n sessionId: payload.session_id,\n },\n };\n\n case 'Read':\n return {\n tool: 'Read',\n file: input.file_path as string | undefined,\n agent,\n metadata: { hook: payload.hook, sessionId: payload.session_id },\n };\n\n case 'Bash': {\n const command = input.command as string | undefined;\n return {\n tool: 'Bash',\n command,\n target: command?.slice(0, 100),\n agent,\n metadata: {\n hook: payload.hook,\n timeout: input.timeout,\n description: input.description,\n sessionId: payload.session_id,\n },\n };\n }\n\n case 'Glob':\n return {\n tool: 'Glob',\n target: input.pattern as string | undefined,\n agent,\n metadata: { hook: payload.hook, path: input.path, sessionId: payload.session_id },\n };\n\n case 'Grep':\n return {\n tool: 'Grep',\n target: input.pattern as string | undefined,\n agent,\n metadata: { hook: payload.hook, path: input.path, sessionId: payload.session_id },\n };\n\n default:\n return {\n tool: payload.tool_name,\n agent,\n metadata: { hook: payload.hook, input, sessionId: payload.session_id },\n };\n }\n}\n\nexport async function processClaudeCodeHook(\n kernel: Kernel,\n payload: ClaudeCodeHookPayload,\n systemContext: Record<string, unknown> = {}\n): Promise<KernelResult> {\n const rawAction = normalizeClaudeCodeAction(payload);\n return kernel.propose(rawAction, systemContext);\n}\n\nexport function formatHookResponse(result: KernelResult): string {\n if (!result.allowed) {\n const reason = result.decision.decision.reason;\n const violations = result.decision.violations;\n const parts = [`DENIED: ${reason}`];\n if (violations.length > 0) {\n parts.push(`Violations: ${violations.map((v) => v.name).join(', ')}`);\n }\n return JSON.stringify({ error: parts.join(' | ') });\n }\n return '';\n}\n", "// AgentGuard Claude Code hook \u2014 PreToolUse governance + PostToolUse error monitoring.\n// PreToolUse: routes actions through the kernel for policy/invariant enforcement.\n// PostToolUse: reports Bash stderr errors (informational only).\n// Always exits 0 \u2014 hooks must never fail.\n\nimport type { ClaudeCodeHookPayload } from '../../adapters/claude-code.js';\n\nexport async function claudeHook(hookType?: string): Promise<void> {\n try {\n const input = await readStdin();\n if (!input) process.exit(0);\n\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(input) as Record<string, unknown>;\n } catch {\n process.exit(0);\n return;\n }\n\n // Determine hook type: explicit CLI arg > payload field > inference from tool_output\n const isPreToolUse =\n hookType === 'pre' || data.hook === 'PreToolUse' || (!hookType && !data.tool_output);\n\n if (isPreToolUse) {\n // Resolve session_id: payload field > environment variable > undefined\n const sessionId =\n (data.session_id as string | undefined) || process.env.CLAUDE_SESSION_ID || undefined;\n const payload = { ...data, session_id: sessionId } as unknown as ClaudeCodeHookPayload;\n await handlePreToolUse(payload);\n } else {\n handlePostToolUse(data);\n }\n } catch {\n // Swallow all errors \u2014 hooks must never fail\n }\n process.exit(0);\n}\n\nasync function handlePreToolUse(payload: ClaudeCodeHookPayload): Promise<void> {\n const { processClaudeCodeHook, formatHookResponse } =\n await import('../../adapters/claude-code.js');\n const { createKernel } = await import('../../kernel/kernel.js');\n const { createJsonlSink } = await import('../../events/jsonl.js');\n const { createDecisionJsonlSink } = await import('../../events/decision-jsonl.js');\n const { createTelemetryDecisionSink } = await import('../../telemetry/runtimeLogger.js');\n const { loadPolicyDefs } = await import('../policy-resolver.js');\n\n // Ensure hook field is set\n const normalizedPayload: ClaudeCodeHookPayload = {\n ...payload,\n hook: 'PreToolUse',\n };\n\n // Load policy (fail-open: empty policy if none found)\n let policyDefs: unknown[] = [];\n try {\n policyDefs = loadPolicyDefs();\n } catch {\n // Policy loading failure is non-fatal \u2014 continue with no policy (allow all)\n }\n\n // Generate run ID\n const runId = `hook_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n\n // Create sinks (swallow errors \u2014 directories may not exist yet)\n let jsonlSink, decisionSink, telemetrySink;\n try {\n jsonlSink = createJsonlSink({ runId });\n decisionSink = createDecisionJsonlSink({ runId });\n telemetrySink = createTelemetryDecisionSink();\n } catch {\n // Sink creation failure is non-fatal\n }\n\n // Build kernel \u2014 dryRun: true because Claude Code handles execution\n const kernel = createKernel({\n runId,\n policyDefs,\n dryRun: true,\n sinks: jsonlSink ? [jsonlSink] : [],\n decisionSinks: [decisionSink, telemetrySink].filter(\n Boolean\n ) as import('../../kernel/decisions/types.js').DecisionSink[],\n });\n\n const result = await processClaudeCodeHook(kernel, normalizedPayload);\n kernel.shutdown();\n\n // If denied, output to stdout \u2014 this tells Claude Code to block the action\n if (!result.allowed) {\n const response = formatHookResponse(result);\n if (response) {\n process.stdout.write(response);\n }\n }\n}\n\nfunction handlePostToolUse(data: Record<string, unknown>): void {\n if (data.tool_name !== 'Bash') return;\n\n const output = (data.tool_output || {}) as Record<string, unknown>;\n const exitCode = (output.exit_code ?? output.exitCode ?? 0) as number;\n const stderr = (output.stderr || '') as string;\n\n if (exitCode !== 0 && stderr.trim()) {\n process.stdout.write('\\n');\n process.stdout.write(\n ` \\x1b[1m\\x1b[31mError detected:\\x1b[0m ${stderr.trim().split('\\n')[0].slice(0, 80)}\\n`\n );\n process.stdout.write('\\n');\n }\n}\n\nfunction readStdin(): Promise<string> {\n return new Promise((resolve) => {\n let input = '';\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (chunk: string) => {\n input += chunk;\n });\n process.stdin.on('end', () => resolve(input));\n process.stdin.on('error', () => resolve(''));\n if (process.stdin.isTTY) resolve('');\n });\n}\n", "#!/usr/bin/env node\n\n// AgentGuard CLI \u2014 Runtime governance for AI coding agents\n\nimport { formatHelp } from './args.js';\n\ninterface CommandHelp {\n name: string;\n description: string;\n usage: string;\n flags?: Array<{ flag: string; description: string }>;\n examples?: string[];\n}\n\nconst args = process.argv.slice(2);\nconst command = args[0];\nconst wantsHelp = args.includes('--help') || args.includes('-h');\n\nconst COMMANDS: Record<string, CommandHelp> = {\n guard: {\n name: 'agentguard guard',\n description: 'Start the governed action runtime \u2014 enforce policies and invariants',\n usage: 'agentguard guard [flags]',\n flags: [\n { flag: '--policy, -p <file>', description: 'Policy file (YAML or JSON)' },\n { flag: '--dry-run', description: 'Evaluate without executing actions' },\n { flag: '--verbose, -v', description: 'Show detailed output' },\n ],\n examples: [\n 'agentguard guard',\n 'agentguard guard --policy agentguard.yaml',\n 'agentguard guard --dry-run',\n 'echo \\'{\"tool\":\"Bash\",\"command\":\"rm -rf /\"}\\' | agentguard guard',\n ],\n },\n inspect: {\n name: 'agentguard inspect',\n description: 'Inspect the action graph and decision records for a run',\n usage: 'agentguard inspect [runId]',\n flags: [\n { flag: '--list', description: 'List all recorded runs' },\n { flag: '--last', description: 'Inspect the most recent run' },\n ],\n examples: [\n 'agentguard inspect --list',\n 'agentguard inspect --last',\n 'agentguard inspect run_1234567890_abc',\n ],\n },\n events: {\n name: 'agentguard events',\n description: 'Show the raw event stream for a run',\n usage: 'agentguard events <runId>',\n flags: [],\n examples: ['agentguard events --last', 'agentguard events run_1234567890_abc'],\n },\n replay: {\n name: 'agentguard replay',\n description: 'Replay a governance session timeline',\n usage: 'agentguard replay [session-id] [flags]',\n flags: [\n { flag: '--last, -l', description: 'Replay the most recent session' },\n { flag: '--step, -s', description: 'Step through events one at a time' },\n { flag: '--stats', description: 'Show session statistics only' },\n { flag: '--filter <kind>', description: 'Filter events by kind' },\n ],\n examples: ['agentguard replay', 'agentguard replay --last', 'agentguard replay --last --step'],\n },\n export: {\n name: 'agentguard export',\n description: 'Export a governance session to a portable JSONL file',\n usage: 'agentguard export <runId> [flags]',\n flags: [\n { flag: '--output, -o <file>', description: 'Output file path' },\n { flag: '--last', description: 'Export the most recent run' },\n ],\n examples: [\n 'agentguard export run_1234567890_abc',\n 'agentguard export --last',\n 'agentguard export --last -o session.jsonl',\n ],\n },\n import: {\n name: 'agentguard import',\n description: 'Import a governance session from a portable JSONL file',\n usage: 'agentguard import <file> [flags]',\n flags: [{ flag: '--as <runId>', description: 'Import as a different run ID' }],\n examples: [\n 'agentguard import session.jsonl',\n 'agentguard import ./exports/run.agentguard.jsonl --as custom_run_id',\n ],\n },\n};\n\nasync function main() {\n switch (command) {\n case 'guard': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.guard));\n break;\n }\n const flags = args.slice(1);\n const policyIdx = flags.findIndex((f) => f === '--policy' || f === '-p');\n const policyFile = policyIdx !== -1 ? flags[policyIdx + 1] : undefined;\n const dryRun = flags.includes('--dry-run');\n const verbose = flags.includes('--verbose') || flags.includes('-v');\n\n const { guard } = await import('./commands/guard.js');\n const code = await guard(args.slice(1), {\n policy: policyFile,\n dryRun,\n verbose,\n stdin: true,\n });\n process.exit(code);\n break;\n }\n\n case 'inspect': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.inspect));\n break;\n }\n const { inspect } = await import('./commands/inspect.js');\n await inspect(args.slice(1));\n break;\n }\n\n case 'events': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.events));\n break;\n }\n const { events } = await import('./commands/inspect.js');\n await events(args.slice(1));\n break;\n }\n\n case 'replay': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.replay));\n break;\n }\n const { replay } = await import('./replay.js');\n await replay(args.slice(1));\n break;\n }\n\n case 'export': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.export));\n break;\n }\n const { exportSession } = await import('./commands/export.js');\n await exportSession(args.slice(1));\n break;\n }\n\n case 'import': {\n if (wantsHelp) {\n console.log(formatHelp(COMMANDS.import));\n break;\n }\n const { importSession } = await import('./commands/import.js');\n await importSession(args.slice(1));\n break;\n }\n\n case 'plugin': {\n if (wantsHelp) {\n const { plugin: pluginCmd } = await import('./commands/plugin.js');\n await pluginCmd(['help']);\n break;\n }\n const { plugin: pluginCmd } = await import('./commands/plugin.js');\n const code = await pluginCmd(args.slice(1));\n process.exit(code);\n break;\n }\n\n case 'claude-init': {\n const { claudeInit } = await import('./commands/claude-init.js');\n await claudeInit(args.slice(1));\n break;\n }\n\n case 'claude-hook': {\n const { claudeHook } = await import('./commands/claude-hook.js');\n await claudeHook(args[1]); // 'pre' or 'post'\n break;\n }\n\n case '--version':\n case '-v': {\n const { readFileSync } = await import('node:fs');\n const { fileURLToPath } = await import('node:url');\n const { dirname, join } = await import('node:path');\n const __dir = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(readFileSync(join(__dir, '..', '..', 'package.json'), 'utf8')) as {\n version: string;\n };\n console.log(`agentguard v${pkg.version}`);\n break;\n }\n\n case 'help':\n case '--help':\n case '-h':\n case undefined:\n printHelp();\n break;\n\n default:\n printUsage(`Unknown command: ${command}`);\n process.exit(1);\n }\n}\n\nfunction printHelp(): void {\n console.log(`\n \\x1b[1mAgentGuard\\x1b[0m \u2014 Runtime governance for AI coding agents\n\n \\x1b[1mGovernance:\\x1b[0m\n agentguard guard Start governed action runtime\n agentguard guard --policy <file> Use a specific policy file (YAML/JSON)\n agentguard guard --dry-run Evaluate without executing actions\n agentguard inspect [runId] Inspect action graph and decisions\n agentguard events [runId] Show raw event stream for a run\n\n \\x1b[1mPortability:\\x1b[0m\n agentguard export <runId> Export a governance session to JSONL\n agentguard export --last Export the most recent run\n agentguard import <file> Import a governance session from JSONL\n\n \\x1b[1mReplay:\\x1b[0m\n agentguard replay List recorded sessions\n agentguard replay --last Replay most recent session\n agentguard replay --last --step Step through events interactively\n\n \\x1b[1mPlugins:\\x1b[0m\n agentguard plugin list List installed plugins\n agentguard plugin install <path> Install a plugin from a local path\n agentguard plugin remove <id> Remove a plugin by ID\n agentguard plugin search [query] Search for plugins on npm\n\n \\x1b[1mIntegration:\\x1b[0m\n agentguard claude-init Set up Claude Code hook integration\n agentguard claude-hook PreToolUse/PostToolUse hook handler (internal)\n\n \\x1b[1mMeta:\\x1b[0m\n agentguard --version Show version\n agentguard help Show this help\n`);\n}\n\nfunction printUsage(error: string): void {\n console.error(` Error: ${error}`);\n console.error(' Run \"agentguard help\" for usage info.');\n}\n\nmain();\n"],
5
- "mappings": "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",
6
- "names": ["command", "events", "result", "events", "events", "command", "events", "events", "events", "decisionRecord", "decisionEvent", "result", "checkAllInvariants", "buildSystemState", "DEFAULT_INVARIANTS", "simSummary", "command", "resolve", "exec", "command", "resolve", "ensureDir", "mkdirSync", "appendFileSync", "join", "DEFAULT_BASE_DIR", "ensureDir", "mkdirSync", "appendFileSync", "join", "ensureDir", "join", "readFileSync", "existsSync", "resolve", "init_registry", "SENSITIVE_PATTERNS", "CONFIG_PATTERNS", "execFileSync", "command", "args", "init_registry", "exec", "events", "init_registry", "readFileSync", "existsSync", "join", "events", "EVENTS_DIR", "args", "readFileSync", "mkdirSync", "existsSync", "readdirSync", "join", "args", "events", "resolve", "readFileSync", "writeFileSync", "existsSync", "readdirSync", "join", "resolve", "listRuns", "EVENTS_DIR", "events", "args", "BASE_DIR", "readFileSync", "appendFileSync", "existsSync", "mkdirSync", "join", "resolve", "ensureDir", "args", "events", "parsed", "BASE_DIR", "readFileSync", "writeFileSync", "mkdirSync", "existsSync", "join", "dirname", "init_registry", "readdirSync", "readFileSync", "existsSync", "join", "readFileSync", "existsSync", "join", "resolve", "args", "init_registry", "readFileSync", "writeFileSync", "existsSync", "mkdirSync", "join", "resolve", "dirname", "homedir", "args", "command", "processClaudeCodeHook", "formatHookResponse", "createKernel", "createJsonlSink", "createDecisionJsonlSink", "createTelemetryDecisionSink", "loadPolicyDefs", "resolve", "guard", "inspect", "events", "replay", "exportSession", "importSession", "pluginCmd", "claudeInit", "claudeHook", "readFileSync", "fileURLToPath", "dirname", "join"]
7
- }