@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
@@ -0,0 +1,286 @@
1
+ // CLI command: agentguard ci-check — CI governance verification.
2
+ //
3
+ // Reads an exported governance session (or the most recent local run),
4
+ // summarises governance outcomes, and exits with code 1 when violations
5
+ // or denials exceed the configured threshold. Designed for CI pipelines.
6
+ // Supports both JSONL (default) and SQLite storage backends.
7
+ import { readFileSync, existsSync } from 'node:fs';
8
+ import { resolve } from 'node:path';
9
+ import { execSync } from 'node:child_process';
10
+ import { parseArgs } from '../args.js';
11
+ import { loadReplaySession, getLatestRunId, buildReplaySession } from '@red-codes/kernel';
12
+ import { aggregateEvents, formatEvidenceMarkdown } from '../evidence-summary.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Session Loading
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * Load a replay session from an exported `.agentguard.jsonl` file.
18
+ * Parses the header, extracts events, and builds a ReplaySession.
19
+ */
20
+ function loadSessionFromExport(filePath) {
21
+ const content = readFileSync(filePath, 'utf8');
22
+ const lines = content.split('\n').filter((l) => l.trim());
23
+ if (lines.length === 0)
24
+ return null;
25
+ let header;
26
+ try {
27
+ header = JSON.parse(lines[0]);
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ if (header.__agentguard_export !== true || header.version !== 1) {
33
+ return null;
34
+ }
35
+ const eventLines = lines.slice(1, 1 + header.eventCount);
36
+ const events = [];
37
+ for (const line of eventLines) {
38
+ try {
39
+ events.push(JSON.parse(line));
40
+ }
41
+ catch {
42
+ // Skip malformed lines
43
+ }
44
+ }
45
+ if (events.length === 0)
46
+ return null;
47
+ return buildReplaySession(header.runId, events);
48
+ }
49
+ /**
50
+ * Load the most recent replay session from SQLite.
51
+ */
52
+ async function loadLatestSessionSqlite(storageConfig) {
53
+ const { createStorageBundle } = await import('@red-codes/storage');
54
+ const { getLatestRunId: getLatestRunIdSqlite, loadRunEvents } = await import('@red-codes/storage');
55
+ const storage = await createStorageBundle(storageConfig);
56
+ if (!storage.db) {
57
+ process.stderr.write(' Error: SQLite storage backend did not initialize database.\n');
58
+ return null;
59
+ }
60
+ const db = storage.db;
61
+ const runId = getLatestRunIdSqlite(db);
62
+ if (!runId) {
63
+ storage.close();
64
+ return null;
65
+ }
66
+ const events = loadRunEvents(db, runId);
67
+ storage.close();
68
+ if (events.length === 0)
69
+ return null;
70
+ return buildReplaySession(runId, events);
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Core Logic
74
+ // ---------------------------------------------------------------------------
75
+ function evaluateSession(session, options) {
76
+ const { summary } = session;
77
+ let pass = true;
78
+ if (options.failOnDenial && summary.denied > 0) {
79
+ pass = false;
80
+ }
81
+ if (options.failOnViolation && summary.violations > 0) {
82
+ pass = false;
83
+ }
84
+ return {
85
+ runId: session.runId,
86
+ totalActions: summary.totalActions,
87
+ allowed: summary.allowed,
88
+ denied: summary.denied,
89
+ violations: summary.violations,
90
+ escalations: summary.escalations,
91
+ denialReasons: summary.denialReasons,
92
+ pass,
93
+ };
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Output Formatting
97
+ // ---------------------------------------------------------------------------
98
+ function formatTerminal(result) {
99
+ const icon = result.pass ? '\x1b[32m\u2713\x1b[0m' : '\x1b[31m\u2717\x1b[0m';
100
+ const verdict = result.pass ? '\x1b[32mPASS\x1b[0m' : '\x1b[31mFAIL\x1b[0m';
101
+ const lines = [];
102
+ lines.push('');
103
+ lines.push(` ${icon} Governance CI Check — ${verdict}`);
104
+ lines.push(` Run: ${result.runId}`);
105
+ lines.push('');
106
+ lines.push(` Actions: ${result.totalActions}`);
107
+ lines.push(` Allowed: ${result.allowed}`);
108
+ lines.push(` Denied: ${result.denied}`);
109
+ lines.push(` Violations: ${result.violations}`);
110
+ lines.push(` Escalations: ${result.escalations}`);
111
+ if (result.denialReasons.length > 0) {
112
+ lines.push('');
113
+ lines.push(' Denial reasons:');
114
+ for (const reason of result.denialReasons) {
115
+ lines.push(` - ${reason}`);
116
+ }
117
+ }
118
+ lines.push('');
119
+ return lines.join('\n');
120
+ }
121
+ function formatGitHubAnnotation(result) {
122
+ const lines = [];
123
+ if (!result.pass) {
124
+ const reasons = result.denialReasons.join('; ');
125
+ lines.push(`::error title=Governance Check Failed::${result.denied} action(s) denied, ${result.violations} violation(s). ${reasons}`);
126
+ }
127
+ // Always output summary as a notice
128
+ lines.push(`::notice title=Governance Summary::Actions: ${result.totalActions} | Allowed: ${result.allowed} | Denied: ${result.denied} | Violations: ${result.violations} | Escalations: ${result.escalations}`);
129
+ return lines.join('\n');
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Evidence Posting
133
+ // ---------------------------------------------------------------------------
134
+ const COMMENT_MARKER = '<!-- agentguard-evidence-report -->';
135
+ function detectPrNumber() {
136
+ try {
137
+ const result = execSync('gh pr view --json number --jq .number 2>/dev/null', {
138
+ encoding: 'utf8',
139
+ stdio: ['pipe', 'pipe', 'pipe'],
140
+ }).trim();
141
+ return result || null;
142
+ }
143
+ catch {
144
+ return null;
145
+ }
146
+ }
147
+ function postEvidenceComment(prNumber, markdown) {
148
+ const body = `${COMMENT_MARKER}\n${markdown}`;
149
+ // Delete any existing evidence comments
150
+ try {
151
+ const commentsJson = execSync(`gh pr view ${prNumber} --json comments --jq '.comments[] | select(.body | startswith("${COMMENT_MARKER}")) | .id'`, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
152
+ if (commentsJson) {
153
+ const commentIds = commentsJson.split('\n').filter((id) => /^\d+$/.test(id));
154
+ for (const id of commentIds) {
155
+ try {
156
+ execSync(`gh api repos/{owner}/{repo}/issues/comments/${id} -X DELETE`, {
157
+ stdio: ['pipe', 'pipe', 'pipe'],
158
+ });
159
+ }
160
+ catch {
161
+ // Ignore delete failures
162
+ }
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // No existing comments
168
+ }
169
+ try {
170
+ execSync(`gh pr comment ${prNumber} --body -`, {
171
+ input: body,
172
+ encoding: 'utf8',
173
+ stdio: ['pipe', 'pipe', 'pipe'],
174
+ });
175
+ return true;
176
+ }
177
+ catch {
178
+ return false;
179
+ }
180
+ }
181
+ // ---------------------------------------------------------------------------
182
+ // CLI Entry Point
183
+ // ---------------------------------------------------------------------------
184
+ export async function ciCheck(args, storageConfig) {
185
+ const parsed = parseArgs(args, {
186
+ boolean: ['--fail-on-violation', '--fail-on-denial', '--json', '--last', '--post-evidence'],
187
+ string: ['--base-dir', '--pr', '--artifact-url'],
188
+ alias: { '-d': '--base-dir', '-n': '--pr' },
189
+ });
190
+ const failOnViolation = !!parsed.flags['fail-on-violation'];
191
+ const failOnDenial = !!parsed.flags['fail-on-denial'];
192
+ const jsonOutput = !!parsed.flags.json;
193
+ const useLast = !!parsed.flags.last;
194
+ const postEvidence = !!parsed.flags['post-evidence'];
195
+ const baseDir = parsed.flags['base-dir'] || '.agentguard';
196
+ const prNumberFlag = parsed.flags.pr || null;
197
+ const artifactUrl = parsed.flags['artifact-url'] || undefined;
198
+ const sessionFile = parsed.positional[0];
199
+ const isGitHubActions = !!process.env.GITHUB_ACTIONS;
200
+ const useSqlite = storageConfig?.backend === 'sqlite';
201
+ // Resolve the session
202
+ let session = null;
203
+ if (sessionFile) {
204
+ // Session file is always JSONL format (portable export)
205
+ const resolvedPath = resolve(sessionFile);
206
+ if (!existsSync(resolvedPath)) {
207
+ process.stderr.write(`\n \x1b[31mError:\x1b[0m Session file not found: ${resolvedPath}\n\n`);
208
+ return 1;
209
+ }
210
+ session = loadSessionFromExport(resolvedPath);
211
+ if (!session) {
212
+ process.stderr.write(`\n \x1b[31mError:\x1b[0m Could not parse session file: ${resolvedPath}\n\n`);
213
+ return 1;
214
+ }
215
+ }
216
+ else if (useLast) {
217
+ if (useSqlite) {
218
+ session = await loadLatestSessionSqlite(storageConfig);
219
+ }
220
+ else {
221
+ const runId = getLatestRunId(baseDir);
222
+ if (!runId) {
223
+ process.stderr.write('\n \x1b[31mError:\x1b[0m No governance runs found.\n\n');
224
+ return 1;
225
+ }
226
+ session = loadReplaySession(runId, { baseDir });
227
+ }
228
+ if (!session) {
229
+ process.stderr.write('\n \x1b[31mError:\x1b[0m Could not load the most recent run.\n\n');
230
+ return 1;
231
+ }
232
+ }
233
+ else {
234
+ process.stderr.write('\n Usage: agentguard ci-check <session-file> [flags]\n');
235
+ process.stderr.write(' agentguard ci-check --last [flags]\n\n');
236
+ process.stderr.write(' Flags:\n');
237
+ process.stderr.write(' --fail-on-violation Exit 1 if invariant violations found\n');
238
+ process.stderr.write(' --fail-on-denial Exit 1 if any actions were denied\n');
239
+ process.stderr.write(' --json Output as JSON\n');
240
+ process.stderr.write(' --last Use the most recent local run\n');
241
+ process.stderr.write(' --post-evidence Post evidence report as PR comment\n');
242
+ process.stderr.write(' --pr, -n <number> Target PR number (auto-detected if omitted)\n');
243
+ process.stderr.write(' --artifact-url <url> Link to full session artifact\n');
244
+ process.stderr.write(' --base-dir, -d <dir> Base directory for events\n');
245
+ process.stderr.write(' --store <backend> Storage backend (sqlite)\n\n');
246
+ return 1;
247
+ }
248
+ // Evaluate
249
+ const result = evaluateSession(session, { failOnViolation, failOnDenial });
250
+ // Output
251
+ if (jsonOutput) {
252
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
253
+ }
254
+ else {
255
+ process.stderr.write(formatTerminal(result));
256
+ }
257
+ // GitHub Actions annotations
258
+ if (isGitHubActions) {
259
+ process.stdout.write(formatGitHubAnnotation(result) + '\n');
260
+ }
261
+ // Post evidence report to PR
262
+ if (postEvidence) {
263
+ const prNumber = prNumberFlag || detectPrNumber();
264
+ if (!prNumber) {
265
+ process.stderr.write('\n \x1b[33mWarning:\x1b[0m --post-evidence: could not determine PR number. ' +
266
+ 'Use --pr <number> or run from a branch with an open PR.\n\n');
267
+ }
268
+ else if (!/^\d+$/.test(prNumber)) {
269
+ process.stderr.write('\n \x1b[33mWarning:\x1b[0m --post-evidence: PR number must be numeric.\n\n');
270
+ }
271
+ else {
272
+ const evidenceSummary = aggregateEvents([...session.events]);
273
+ const markdownOptions = { artifactUrl };
274
+ const markdown = formatEvidenceMarkdown(evidenceSummary, markdownOptions);
275
+ const posted = postEvidenceComment(prNumber, markdown);
276
+ if (posted) {
277
+ process.stderr.write(` \x1b[32m\u2713\x1b[0m Evidence report posted to PR #${prNumber}\n\n`);
278
+ }
279
+ else {
280
+ process.stderr.write(`\n \x1b[33mWarning:\x1b[0m Failed to post evidence report to PR #${prNumber}.\n\n`);
281
+ }
282
+ }
283
+ }
284
+ return result.pass ? 0 : 1;
285
+ }
286
+ //# sourceMappingURL=ci-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-check.js","sourceRoot":"","sources":["../../src/commands/ci-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function claudeHook(hookType?: string, extraArgs?: string[]): Promise<void>;
2
+ //# sourceMappingURL=claude-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-hook.d.ts","sourceRoot":"","sources":["../../src/commands/claude-hook.ts"],"names":[],"mappings":"AAwBA,wBAAsB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C3F"}
@@ -0,0 +1,254 @@
1
+ // AgentGuard Claude Code hook — PreToolUse governance + PostToolUse error monitoring + Notification session viewer.
2
+ // PreToolUse: routes actions through the kernel for policy/invariant enforcement.
3
+ // PostToolUse: reports Bash stderr errors (informational only).
4
+ // Notification: auto-opens the session viewer when the agent pauses for human input.
5
+ // Stop: generates session viewer HTML (no browser open — Notification handles that).
6
+ // Always exits 0 — hooks must never fail.
7
+ // Supports both JSONL (default) and SQLite storage backends via --store flag or AGENTGUARD_STORE env var.
8
+ import { randomUUID } from 'node:crypto';
9
+ import { execSync, spawn } from 'node:child_process';
10
+ import { existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ import { resolveMainRepoRoot } from '@red-codes/core';
14
+ /** Resolve the CLI command — use local bin.js if in the agentguard dev repo, else bare `agentguard`. */
15
+ function resolveCliCommand() {
16
+ const mainRoot = resolveMainRepoRoot();
17
+ const localBin = join(mainRoot, 'apps', 'cli', 'dist', 'bin.js');
18
+ if (existsSync(localBin))
19
+ return `node ${localBin}`;
20
+ return 'agentguard';
21
+ }
22
+ export async function claudeHook(hookType, extraArgs = []) {
23
+ try {
24
+ // Stop hook has no stdin payload — generates session viewer HTML quietly (no browser open)
25
+ if (hookType === 'stop') {
26
+ await handleStop(extraArgs);
27
+ process.exit(0);
28
+ return;
29
+ }
30
+ // Notification hook — fires when the agent pauses for human input.
31
+ // Auto-opens the session viewer in the browser so the user can review governance decisions.
32
+ if (hookType === 'notify') {
33
+ await handleNotification(extraArgs);
34
+ process.exit(0);
35
+ return;
36
+ }
37
+ const input = await readStdin();
38
+ if (!input)
39
+ process.exit(0);
40
+ let data;
41
+ try {
42
+ data = JSON.parse(input);
43
+ }
44
+ catch {
45
+ process.exit(0);
46
+ return;
47
+ }
48
+ // Determine hook type: explicit CLI arg > payload field > inference from tool_output
49
+ const isPreToolUse = hookType === 'pre' || data.hook === 'PreToolUse' || (!hookType && !data.tool_output);
50
+ if (isPreToolUse) {
51
+ // Resolve session_id: payload field > environment variable > undefined
52
+ const sessionId = data.session_id || process.env.CLAUDE_SESSION_ID || undefined;
53
+ const payload = { ...data, session_id: sessionId };
54
+ await handlePreToolUse(payload, extraArgs);
55
+ }
56
+ else {
57
+ handlePostToolUse(data, extraArgs);
58
+ }
59
+ }
60
+ catch {
61
+ // Swallow all errors — hooks must never fail
62
+ }
63
+ process.exit(0);
64
+ }
65
+ async function handlePreToolUse(payload, cliArgs) {
66
+ const { processClaudeCodeHook, formatHookResponse } = await import('@red-codes/adapters');
67
+ const { createKernel } = await import('@red-codes/kernel');
68
+ const { loadPolicyDefs } = await import('../policy-resolver.js');
69
+ const { resolveStorageConfig, createStorageBundle } = await import('@red-codes/storage');
70
+ // Ensure hook field is set
71
+ const normalizedPayload = {
72
+ ...payload,
73
+ hook: 'PreToolUse',
74
+ };
75
+ // Load policy (fail-open: empty policy if none found)
76
+ let policyDefs = [];
77
+ try {
78
+ policyDefs = loadPolicyDefs();
79
+ }
80
+ catch (policyErr) {
81
+ // Policy loading failure is non-fatal — continue with no policy (allow all)
82
+ process.stderr.write(`agentguard: warning — no policy loaded (${policyErr instanceof Error ? policyErr.message : 'unknown error'}). All actions will be allowed.\n`);
83
+ }
84
+ // Generate run ID
85
+ const runId = `hook_${Date.now()}_${randomUUID().replace(/-/g, '').slice(0, 8)}`;
86
+ // Resolve storage backend from CLI args (e.g. --store sqlite) or AGENTGUARD_STORE env var
87
+ const storageConfig = resolveStorageConfig(cliArgs);
88
+ let storage = null;
89
+ let eventSink;
90
+ let decisionSink;
91
+ try {
92
+ storage = await createStorageBundle(storageConfig);
93
+ eventSink = storage.createEventSink(runId);
94
+ decisionSink = storage.createDecisionSink(runId);
95
+ }
96
+ catch {
97
+ // Sink creation failure is non-fatal
98
+ }
99
+ // Build kernel — dryRun: true = evaluate policies/invariants only (no adapter execution).
100
+ // Claude Code handles actual tool execution; the hook only governs (allow/deny).
101
+ // Events and decision records are still emitted and persisted to the configured storage backend.
102
+ const kernel = createKernel({
103
+ runId,
104
+ policyDefs,
105
+ dryRun: true,
106
+ evaluateOptions: { defaultDeny: false },
107
+ sinks: eventSink ? [eventSink] : [],
108
+ decisionSinks: [decisionSink].filter(Boolean),
109
+ });
110
+ // Record session in the sessions table (SQLite only).
111
+ // Uses session_id from Claude Code so multiple hook invocations share one session row.
112
+ const sessionKey = normalizedPayload.session_id || runId;
113
+ if (storage?.sessions) {
114
+ storage.sessions.start(sessionKey, 'claude-hook', {
115
+ storageBackend: storageConfig.backend,
116
+ });
117
+ }
118
+ // Resolve agent persona from environment variables.
119
+ // Persona enriches telemetry and enables persona-based policy conditions.
120
+ const { personaFromEnv: readPersonaFromEnv, resolvePersona } = await import('@red-codes/core');
121
+ const envPersona = readPersonaFromEnv();
122
+ const resolvedPersona = envPersona ? resolvePersona(undefined, envPersona) : undefined;
123
+ const result = await processClaudeCodeHook(kernel, normalizedPayload, {}, resolvedPersona);
124
+ kernel.shutdown();
125
+ // Close storage (important for SQLite to flush WAL)
126
+ if (storage) {
127
+ try {
128
+ storage.close();
129
+ }
130
+ catch {
131
+ // Non-fatal
132
+ }
133
+ }
134
+ // If denied, output to stdout — this tells Claude Code to block the action
135
+ if (!result.allowed) {
136
+ const response = formatHookResponse(result);
137
+ if (response) {
138
+ process.stdout.write(response);
139
+ }
140
+ }
141
+ }
142
+ function handlePostToolUse(data, cliArgs = []) {
143
+ if (data.tool_name !== 'Bash')
144
+ return;
145
+ const output = (data.tool_output || {});
146
+ const exitCode = (output.exit_code ?? output.exitCode ?? 0);
147
+ const stderr = (output.stderr || '');
148
+ const stdout = (output.stdout || '');
149
+ if (exitCode !== 0 && stderr.trim()) {
150
+ process.stdout.write('\n');
151
+ process.stdout.write(` \x1b[1m\x1b[31mError detected:\x1b[0m ${stderr.trim().split('\n')[0].slice(0, 80)}\n`);
152
+ process.stdout.write('\n');
153
+ }
154
+ // Track rtk-optimized commands (informational — for session viewer visibility)
155
+ const toolInput = (data.tool_input || data.command || '');
156
+ if (toolInput.startsWith('rtk ') || toolInput.includes('/rtk ')) {
157
+ process.stderr.write(` \x1b[36m\u26A1\x1b[0m rtk: token-optimized output\n`);
158
+ }
159
+ // Detect PR creation — suggest opening the session viewer
160
+ const isPrCreate = toolInput.includes('gh pr create') || toolInput.includes('gh pr merge');
161
+ if (isPrCreate && exitCode === 0 && stdout.trim()) {
162
+ generateSessionViewerQuietly(cliArgs);
163
+ }
164
+ }
165
+ function generateSessionViewerQuietly(cliArgs) {
166
+ try {
167
+ const storeFlagIdx = cliArgs.indexOf('--store');
168
+ const storeFlag = storeFlagIdx !== -1 ? ` --store ${cliArgs[storeFlagIdx + 1]}` : '';
169
+ const dbPathIdx = cliArgs.indexOf('--db-path');
170
+ const dbPathFlag = dbPathIdx !== -1 ? ` --db-path "${cliArgs[dbPathIdx + 1]}"` : '';
171
+ const cli = resolveCliCommand();
172
+ execSync(`${cli} session-viewer --last --no-open${storeFlag}${dbPathFlag}`, {
173
+ stdio: 'ignore',
174
+ timeout: 10000,
175
+ });
176
+ process.stderr.write('\n \x1b[36m\u2139\x1b[0m PR detected — session viewer generated. Run \x1b[1magentguard session-viewer --last\x1b[0m to open.\n\n');
177
+ }
178
+ catch {
179
+ // Non-fatal — viewer generation is best-effort
180
+ }
181
+ }
182
+ async function handleNotification(cliArgs) {
183
+ // Agent paused for human input — open the session viewer in the browser.
184
+ // If a live server is already running, skip — the live page polls for new data.
185
+ // Otherwise, spawn a detached live server process so events stream in without hard refresh.
186
+ try {
187
+ const { detectLiveServer } = await import('./session-viewer.js');
188
+ if (detectLiveServer() !== null) {
189
+ return;
190
+ }
191
+ // Spawn the live server as a detached process so the hook can exit immediately.
192
+ // The live server stays running and the browser page polls it for updates.
193
+ const cli = resolveCliCommand();
194
+ const storeFlagIdx = cliArgs.indexOf('--store');
195
+ const storeFlag = storeFlagIdx !== -1 ? ['--store', cliArgs[storeFlagIdx + 1]] : [];
196
+ const dbPathIdx = cliArgs.indexOf('--db-path');
197
+ const dbPathFlag = dbPathIdx !== -1 ? ['--db-path', cliArgs[dbPathIdx + 1]] : [];
198
+ const cliParts = cli.split(' ');
199
+ const cmd = cliParts[0];
200
+ const baseArgs = [
201
+ ...cliParts.slice(1),
202
+ 'session-viewer',
203
+ '--last',
204
+ '--live',
205
+ ...storeFlag,
206
+ ...dbPathFlag,
207
+ ];
208
+ const child = spawn(cmd, baseArgs, {
209
+ detached: true,
210
+ stdio: 'ignore',
211
+ });
212
+ child.unref();
213
+ }
214
+ catch {
215
+ // Non-fatal — viewer generation is best-effort
216
+ }
217
+ }
218
+ async function handleStop(cliArgs) {
219
+ // On session end, generate the session viewer HTML quietly (no browser open).
220
+ // If a live server is running, skip — it already has the latest data.
221
+ try {
222
+ const { detectLiveServer, sessionViewer } = await import('./session-viewer.js');
223
+ if (detectLiveServer() !== null) {
224
+ return;
225
+ }
226
+ const { resolveStorageConfig } = await import('@red-codes/storage');
227
+ const storageConfig = resolveStorageConfig(cliArgs);
228
+ await sessionViewer(['--last', '--no-open', ...cliArgs], storageConfig);
229
+ }
230
+ catch {
231
+ // Non-fatal — viewer generation is best-effort
232
+ }
233
+ }
234
+ function readStdin() {
235
+ return new Promise((resolve) => {
236
+ let input = '';
237
+ process.stdin.setEncoding('utf8');
238
+ process.stdin.on('data', (chunk) => {
239
+ input += chunk;
240
+ });
241
+ process.stdin.on('end', () => resolve(input));
242
+ process.stdin.on('error', () => resolve(''));
243
+ if (process.stdin.isTTY)
244
+ resolve('');
245
+ });
246
+ }
247
+ // Entry point: when run directly via `node claude-hook.js pre|post`, invoke claudeHook().
248
+ // Without this, the file only exports the function and nothing executes.
249
+ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
250
+ const hookArg = process.argv[2]; // 'pre' or 'post'
251
+ const extra = process.argv.slice(3); // e.g., ['--store', 'sqlite']
252
+ claudeHook(hookArg, extra);
253
+ }
254
+ //# sourceMappingURL=claude-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-hook.js","sourceRoot":"","sources":["../../src/commands/claude-hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-init.d.ts","sourceRoot":"","sources":["../../src/commands/claude-init.ts"],"names":[],"mappings":"AA2CA,wBAAsB,UAAU,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyNnE"}