@red-codes/agentguard 1.0.0 → 1.1.2

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/README.md +179 -298
  2. package/dist/args.d.ts.map +1 -0
  3. package/dist/args.js.map +1 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +29185 -0
  6. package/dist/bin.js.map +7 -0
  7. package/dist/colors.d.ts.map +1 -0
  8. package/dist/colors.js.map +1 -0
  9. package/dist/commands/adoption.d.ts +2 -0
  10. package/dist/commands/adoption.d.ts.map +1 -0
  11. package/dist/commands/adoption.js +172 -0
  12. package/dist/commands/adoption.js.map +1 -0
  13. package/dist/commands/analytics.d.ts +3 -0
  14. package/dist/commands/analytics.d.ts.map +1 -0
  15. package/dist/commands/analytics.js +7 -0
  16. package/dist/commands/analytics.js.map +1 -0
  17. package/dist/commands/audit-verify.d.ts +3 -0
  18. package/dist/commands/audit-verify.d.ts.map +1 -0
  19. package/dist/commands/audit-verify.js +94 -0
  20. package/dist/commands/audit-verify.js.map +1 -0
  21. package/dist/commands/auto-setup.d.ts +28 -0
  22. package/dist/commands/auto-setup.d.ts.map +1 -0
  23. package/dist/commands/auto-setup.js +146 -0
  24. package/dist/commands/auto-setup.js.map +1 -0
  25. package/dist/commands/ci-check.d.ts +13 -0
  26. package/dist/commands/ci-check.d.ts.map +1 -0
  27. package/dist/commands/ci-check.js +286 -0
  28. package/dist/commands/ci-check.js.map +1 -0
  29. package/dist/commands/claude-hook.d.ts +2 -0
  30. package/dist/commands/claude-hook.d.ts.map +1 -0
  31. package/dist/commands/claude-hook.js +254 -0
  32. package/dist/commands/claude-hook.js.map +1 -0
  33. package/dist/commands/claude-init.d.ts.map +1 -0
  34. package/dist/commands/claude-init.js +401 -0
  35. package/dist/commands/claude-init.js.map +1 -0
  36. package/dist/commands/config.d.ts +39 -0
  37. package/dist/commands/config.d.ts.map +1 -0
  38. package/dist/commands/config.js +368 -0
  39. package/dist/commands/config.js.map +1 -0
  40. package/dist/commands/demo.d.ts +2 -0
  41. package/dist/commands/demo.d.ts.map +1 -0
  42. package/dist/commands/demo.js +100 -0
  43. package/dist/commands/demo.js.map +1 -0
  44. package/dist/commands/diff.d.ts +3 -0
  45. package/dist/commands/diff.d.ts.map +1 -0
  46. package/dist/commands/diff.js +364 -0
  47. package/dist/commands/diff.js.map +1 -0
  48. package/dist/commands/evidence-pr.d.ts +3 -0
  49. package/dist/commands/evidence-pr.d.ts.map +1 -0
  50. package/dist/commands/evidence-pr.js +162 -0
  51. package/dist/commands/evidence-pr.js.map +1 -0
  52. package/dist/commands/export.d.ts +22 -0
  53. package/dist/commands/export.d.ts.map +1 -0
  54. package/dist/commands/export.js +92 -0
  55. package/dist/commands/export.js.map +1 -0
  56. package/dist/commands/guard.d.ts +21 -0
  57. package/dist/commands/guard.d.ts.map +1 -0
  58. package/dist/commands/guard.js +272 -0
  59. package/dist/commands/guard.js.map +1 -0
  60. package/dist/commands/import.d.ts +3 -0
  61. package/dist/commands/import.d.ts.map +1 -0
  62. package/dist/{cli/commands → commands}/import.js +25 -26
  63. package/dist/commands/import.js.map +1 -0
  64. package/dist/commands/init.d.ts +5 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +1288 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/inspect.d.ts +4 -0
  69. package/dist/commands/inspect.d.ts.map +1 -0
  70. package/dist/{cli/commands → commands}/inspect.js +97 -70
  71. package/dist/commands/inspect.js.map +1 -0
  72. package/dist/commands/learn.d.ts +2 -0
  73. package/dist/commands/learn.d.ts.map +1 -0
  74. package/dist/commands/learn.js +264 -0
  75. package/dist/commands/learn.js.map +1 -0
  76. package/dist/commands/migrate.d.ts +3 -0
  77. package/dist/commands/migrate.d.ts.map +1 -0
  78. package/dist/commands/migrate.js +270 -0
  79. package/dist/commands/migrate.js.map +1 -0
  80. package/dist/commands/plugin.d.ts.map +1 -0
  81. package/dist/{cli/commands → commands}/plugin.js +2 -2
  82. package/dist/commands/plugin.js.map +1 -0
  83. package/dist/commands/policy-verify.d.ts +46 -0
  84. package/dist/commands/policy-verify.d.ts.map +1 -0
  85. package/dist/commands/policy-verify.js +173 -0
  86. package/dist/commands/policy-verify.js.map +1 -0
  87. package/dist/commands/policy.d.ts +27 -0
  88. package/dist/commands/policy.d.ts.map +1 -0
  89. package/dist/commands/policy.js +590 -0
  90. package/dist/commands/policy.js.map +1 -0
  91. package/dist/{cli/commands → commands}/replay.d.ts +2 -1
  92. package/dist/commands/replay.d.ts.map +1 -0
  93. package/dist/{cli/commands → commands}/replay.js +78 -12
  94. package/dist/commands/replay.js.map +1 -0
  95. package/dist/commands/session-viewer.d.ts +5 -0
  96. package/dist/commands/session-viewer.d.ts.map +1 -0
  97. package/dist/commands/session-viewer.js +462 -0
  98. package/dist/commands/session-viewer.js.map +1 -0
  99. package/dist/commands/simulate.d.ts +7 -0
  100. package/dist/commands/simulate.d.ts.map +1 -0
  101. package/dist/commands/simulate.js +505 -0
  102. package/dist/commands/simulate.js.map +1 -0
  103. package/dist/commands/status.d.ts +2 -0
  104. package/dist/commands/status.d.ts.map +1 -0
  105. package/dist/commands/status.js +212 -0
  106. package/dist/commands/status.js.map +1 -0
  107. package/dist/commands/traces.d.ts +24 -0
  108. package/dist/commands/traces.d.ts.map +1 -0
  109. package/dist/commands/traces.js +282 -0
  110. package/dist/commands/traces.js.map +1 -0
  111. package/dist/commands/trust.d.ts +6 -0
  112. package/dist/commands/trust.d.ts.map +1 -0
  113. package/dist/commands/trust.js +129 -0
  114. package/dist/commands/trust.js.map +1 -0
  115. package/dist/evidence-summary.d.ts +35 -0
  116. package/dist/evidence-summary.d.ts.map +1 -0
  117. package/dist/evidence-summary.js +202 -0
  118. package/dist/evidence-summary.js.map +1 -0
  119. package/dist/{cli/file-event-store.d.ts → file-event-store.d.ts} +1 -1
  120. package/dist/file-event-store.d.ts.map +1 -0
  121. package/dist/{cli/file-event-store.js → file-event-store.js} +1 -1
  122. package/dist/file-event-store.js.map +1 -0
  123. package/{hooks → dist/hooks}/post-commit +3 -1
  124. package/{hooks → dist/hooks}/post-merge +3 -1
  125. package/dist/hooks/pre-commit +29 -0
  126. package/dist/policy-resolver.d.ts +32 -0
  127. package/dist/policy-resolver.d.ts.map +1 -0
  128. package/dist/policy-resolver.js +171 -0
  129. package/dist/policy-resolver.js.map +1 -0
  130. package/dist/{cli/recorder.d.ts → recorder.d.ts} +1 -1
  131. package/dist/recorder.d.ts.map +1 -0
  132. package/dist/{cli/recorder.js → recorder.js} +1 -1
  133. package/dist/recorder.js.map +1 -0
  134. package/dist/replay-timeline-html.d.ts +21 -0
  135. package/dist/replay-timeline-html.d.ts.map +1 -0
  136. package/dist/replay-timeline-html.js +414 -0
  137. package/dist/replay-timeline-html.js.map +1 -0
  138. package/dist/replay.d.ts.map +1 -0
  139. package/dist/{cli/replay.js → replay.js} +92 -1
  140. package/dist/replay.js.map +1 -0
  141. package/dist/{cli/session-store.d.ts → session-store.d.ts} +5 -0
  142. package/dist/session-store.d.ts.map +1 -0
  143. package/dist/{cli/session-store.js → session-store.js} +1 -0
  144. package/dist/session-store.js.map +1 -0
  145. package/dist/session-viewer-html.d.ts +10 -0
  146. package/dist/session-viewer-html.d.ts.map +1 -0
  147. package/dist/session-viewer-html.js +737 -0
  148. package/dist/session-viewer-html.js.map +1 -0
  149. package/dist/templates/ci-only.yaml +103 -0
  150. package/dist/templates/development.yaml +107 -0
  151. package/dist/templates/permissive.yaml +87 -0
  152. package/dist/templates/strict.yaml +112 -0
  153. package/dist/tui.d.ts +3 -0
  154. package/dist/tui.d.ts.map +1 -0
  155. package/dist/tui.js +2 -0
  156. package/dist/tui.js.map +1 -0
  157. package/package.json +42 -53
  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,171 @@
1
+ // Shared policy discovery and loading — used by guard and claude-hook commands.
2
+ // Supports policy composition: multiple --policy flags + hierarchical discovery.
3
+ import { readFileSync, existsSync } from 'node:fs';
4
+ import { resolve, dirname, join } from 'node:path';
5
+ import { homedir } from 'node:os';
6
+ import { loadYamlPolicy, parseYamlPolicy } from '@red-codes/policy';
7
+ import { resolveExtends, mergePolicies } from '@red-codes/policy';
8
+ import { composePolicies, describeComposition } from '@red-codes/policy';
9
+ import { resolveMainRepoRoot } from '@red-codes/core';
10
+ const DEFAULT_POLICY_CANDIDATES = [
11
+ 'agentguard.yaml',
12
+ 'agentguard.yml',
13
+ 'agentguard.json',
14
+ '.agentguard.yaml',
15
+ '.agentguard.yml',
16
+ ];
17
+ const USER_POLICY_CANDIDATES = [
18
+ join('.agentguard', 'policy.yaml'),
19
+ join('.agentguard', 'policy.yml'),
20
+ ];
21
+ export function findDefaultPolicy() {
22
+ // Check cwd first (worktree-local policies take precedence)
23
+ for (const name of DEFAULT_POLICY_CANDIDATES) {
24
+ if (existsSync(name))
25
+ return name;
26
+ }
27
+ // Fall back to main repo root (shared policy, if we're in a worktree)
28
+ const mainRoot = resolveMainRepoRoot();
29
+ const cwd = process.cwd();
30
+ if (mainRoot !== cwd) {
31
+ for (const name of DEFAULT_POLICY_CANDIDATES) {
32
+ const mainRootPath = join(mainRoot, name);
33
+ if (existsSync(mainRootPath))
34
+ return mainRootPath;
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ /**
40
+ * Find the user-level policy file in ~/.agentguard/.
41
+ * Returns null if no user policy exists.
42
+ */
43
+ export function findUserPolicy() {
44
+ const home = homedir();
45
+ for (const candidate of USER_POLICY_CANDIDATES) {
46
+ const fullPath = join(home, candidate);
47
+ if (existsSync(fullPath))
48
+ return fullPath;
49
+ }
50
+ return null;
51
+ }
52
+ /**
53
+ * Load a single policy file and resolve its extends chain.
54
+ * Returns a flat array of LoadedPolicy objects.
55
+ */
56
+ export function loadPolicyFile(policyPath) {
57
+ const absPath = resolve(policyPath);
58
+ if (!existsSync(absPath)) {
59
+ process.stderr.write(` \x1b[31mError:\x1b[0m Policy file not found: ${absPath}\n`);
60
+ process.exit(1);
61
+ }
62
+ const content = readFileSync(absPath, 'utf8');
63
+ if (absPath.endsWith('.yaml') || absPath.endsWith('.yml')) {
64
+ const localPolicy = loadYamlPolicy(content, policyPath);
65
+ // Check for extends (policy packs)
66
+ const def = parseYamlPolicy(content);
67
+ if (def.extends && def.extends.length > 0) {
68
+ const baseDir = dirname(absPath);
69
+ const { policies: packPolicies, errors } = resolveExtends(def.extends, baseDir);
70
+ for (const err of errors) {
71
+ process.stderr.write(` \x1b[33mWarning:\x1b[0m ${err}\n`);
72
+ }
73
+ const merged = mergePolicies(localPolicy, packPolicies);
74
+ return merged.map((p) => ({ id: p.id, name: p.name, rules: p.rules, severity: p.severity }));
75
+ }
76
+ return [
77
+ {
78
+ id: localPolicy.id,
79
+ name: localPolicy.name,
80
+ rules: localPolicy.rules,
81
+ severity: localPolicy.severity,
82
+ },
83
+ ];
84
+ }
85
+ try {
86
+ const parsed = JSON.parse(content);
87
+ return Array.isArray(parsed) ? parsed : [parsed];
88
+ }
89
+ catch {
90
+ process.stderr.write(` \x1b[31mError:\x1b[0m Failed to parse policy file: ${absPath}\n`);
91
+ process.exit(1);
92
+ }
93
+ }
94
+ /**
95
+ * Load a single policy file and return typed LoadedPolicy objects.
96
+ */
97
+ function loadPolicyFileTyped(policyPath) {
98
+ return loadPolicyFile(policyPath);
99
+ }
100
+ /**
101
+ * Load policy definitions from a single path (backwards compatible).
102
+ */
103
+ export function loadPolicyDefs(policyPath) {
104
+ const resolved = policyPath || findDefaultPolicy();
105
+ return resolved ? loadPolicyFile(resolved) : [];
106
+ }
107
+ /**
108
+ * Load and compose policies from multiple sources with hierarchical discovery.
109
+ *
110
+ * Discovery order (lowest to highest precedence):
111
+ * 1. User-level: ~/.agentguard/policy.yaml
112
+ * 2. Project-level: ./agentguard.yaml (auto-discovered)
113
+ * 3. Explicit: --policy flags (in order provided)
114
+ *
115
+ * @param policyPaths - Explicit policy file paths (from --policy flags)
116
+ * @returns CompositionResult with ordered policies and source metadata
117
+ */
118
+ export function loadComposedPolicies(policyPaths) {
119
+ const sources = [];
120
+ // Layer 1: User-level policy (~/.agentguard/policy.yaml)
121
+ const userPolicyPath = findUserPolicy();
122
+ if (userPolicyPath) {
123
+ try {
124
+ const policies = loadPolicyFileTyped(userPolicyPath);
125
+ for (const policy of policies) {
126
+ sources.push({ path: userPolicyPath, layer: 'user', policy });
127
+ }
128
+ }
129
+ catch {
130
+ process.stderr.write(` \x1b[33mWarning:\x1b[0m Failed to load user policy: ${userPolicyPath}\n`);
131
+ }
132
+ }
133
+ // Layer 2: Project-level policy (auto-discovered agentguard.yaml)
134
+ // Only auto-discover if no explicit paths are provided, OR if explicit paths
135
+ // don't include the default policy (to avoid loading it twice)
136
+ const hasExplicitPaths = policyPaths && policyPaths.length > 0;
137
+ const defaultPolicyPath = findDefaultPolicy();
138
+ if (defaultPolicyPath) {
139
+ const absDefault = resolve(defaultPolicyPath);
140
+ const explicitAbsPaths = (policyPaths || []).map((p) => resolve(p));
141
+ const isExplicitlyListed = explicitAbsPaths.includes(absDefault);
142
+ if (!isExplicitlyListed) {
143
+ try {
144
+ const policies = loadPolicyFileTyped(defaultPolicyPath);
145
+ for (const policy of policies) {
146
+ sources.push({ path: defaultPolicyPath, layer: 'project', policy });
147
+ }
148
+ }
149
+ catch {
150
+ process.stderr.write(` \x1b[33mWarning:\x1b[0m Failed to load project policy: ${defaultPolicyPath}\n`);
151
+ }
152
+ }
153
+ }
154
+ // Layer 3: Explicit policy files (--policy flags, in order)
155
+ if (hasExplicitPaths) {
156
+ for (const policyPath of policyPaths) {
157
+ try {
158
+ const policies = loadPolicyFileTyped(policyPath);
159
+ for (const policy of policies) {
160
+ sources.push({ path: policyPath, layer: 'explicit', policy });
161
+ }
162
+ }
163
+ catch {
164
+ // loadPolicyFile already prints errors and exits for missing files
165
+ }
166
+ }
167
+ }
168
+ return composePolicies(sources);
169
+ }
170
+ export { describeComposition };
171
+ //# sourceMappingURL=policy-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-resolver.js","sourceRoot":"","sources":["../src/policy-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { DomainEvent } from '../core/types.js';
1
+ import type { DomainEvent } from '@red-codes/core';
2
2
  interface ErrorLike {
3
3
  message: string;
4
4
  type?: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACpE,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtE,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACpE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,QAAQ,CAyF7E"}
@@ -1,7 +1,7 @@
1
1
  // Session recorder — captures canonical events during a watch session.
2
2
  // Wraps the session store and provides high-level recording methods.
3
3
  import { createSession } from './session-store.js';
4
- import { createEvent, ERROR_OBSERVED, ENCOUNTER_STARTED, BATTLE_ENDED, TEST_COMPLETED, FILE_SAVED, } from '../events/schema.js';
4
+ import { createEvent, ERROR_OBSERVED, ENCOUNTER_STARTED, BATTLE_ENDED, TEST_COMPLETED, FILE_SAVED, } from '@red-codes/events';
5
5
  export function createRecorder(command, args = []) {
6
6
  const fullCommand = [command, ...args].join(' ');
7
7
  const session = createSession({ command: fullCommand });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Generates a self-contained HTML timeline viewer for governance sessions.
3
+ *
4
+ * The timeline renders governance events chronologically with:
5
+ * - Color-coded event kinds (governance, lifecycle, safety, reference monitor)
6
+ * - Action lifecycle grouping (propose → evaluate → execute → emit)
7
+ * - Filtering by event kind via checkboxes
8
+ * - Expandable event details
9
+ * - Session summary header
10
+ * - Escalation state indicators
11
+ */
12
+ import type { ReplaySession } from '@red-codes/kernel';
13
+ import type { DomainEvent } from '@red-codes/core';
14
+ export interface TimelineOptions {
15
+ /** Filter to only denied actions */
16
+ deniedOnly?: boolean;
17
+ /** Filter events by kind */
18
+ filterKind?: string;
19
+ }
20
+ export declare function generateTimelineHtml(session: ReplaySession, events: readonly DomainEvent[], options?: TimelineOptions): string;
21
+ //# sourceMappingURL=replay-timeline-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-timeline-html.d.ts","sourceRoot":"","sources":["../src/replay-timeline-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA+GD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,OAAO,GAAE,eAAoB,GAC5B,MAAM,CA+TR"}
@@ -0,0 +1,414 @@
1
+ /**
2
+ * Generates a self-contained HTML timeline viewer for governance sessions.
3
+ *
4
+ * The timeline renders governance events chronologically with:
5
+ * - Color-coded event kinds (governance, lifecycle, safety, reference monitor)
6
+ * - Action lifecycle grouping (propose → evaluate → execute → emit)
7
+ * - Filtering by event kind via checkboxes
8
+ * - Expandable event details
9
+ * - Session summary header
10
+ * - Escalation state indicators
11
+ */
12
+ /** Map event kinds to visual categories for color-coding. */
13
+ const EVENT_CATEGORIES = {
14
+ PolicyDenied: 'governance',
15
+ UnauthorizedAction: 'governance',
16
+ InvariantViolation: 'governance',
17
+ RunStarted: 'lifecycle',
18
+ RunEnded: 'lifecycle',
19
+ CheckpointReached: 'lifecycle',
20
+ StateChanged: 'lifecycle',
21
+ BlastRadiusExceeded: 'safety',
22
+ MergeGuardFailure: 'safety',
23
+ EvidencePackGenerated: 'safety',
24
+ ActionRequested: 'reference',
25
+ ActionAllowed: 'reference',
26
+ ActionDenied: 'reference',
27
+ ActionEscalated: 'reference',
28
+ ActionExecuted: 'reference',
29
+ ActionFailed: 'reference',
30
+ DecisionRecorded: 'decision',
31
+ SimulationCompleted: 'decision',
32
+ TokenOptimizationApplied: 'lifecycle',
33
+ HeartbeatEmitted: 'lifecycle',
34
+ HeartbeatMissed: 'safety',
35
+ AgentUnresponsive: 'safety',
36
+ };
37
+ function categorize(kind) {
38
+ return EVENT_CATEGORIES[kind] ?? 'other';
39
+ }
40
+ function escapeHtml(str) {
41
+ return str
42
+ .replace(/&/g, '&')
43
+ .replace(/</g, '&lt;')
44
+ .replace(/>/g, '&gt;')
45
+ .replace(/"/g, '&quot;');
46
+ }
47
+ function formatTimestamp(ts, baseTs) {
48
+ const delta = ts - baseTs;
49
+ if (delta < 0)
50
+ return '00:00.000';
51
+ const totalMs = Math.floor(delta);
52
+ const ms = totalMs % 1000;
53
+ const totalSec = Math.floor(totalMs / 1000);
54
+ const sec = totalSec % 60;
55
+ const min = Math.floor(totalSec / 60);
56
+ return `${String(min).padStart(2, '0')}:${String(sec).padStart(2, '0')}.${String(ms).padStart(3, '0')}`;
57
+ }
58
+ function buildActionHtml(action, baseTs, index) {
59
+ const statusClass = action.allowed ? (action.succeeded ? 'allowed' : 'failed') : 'denied';
60
+ const statusLabel = action.allowed
61
+ ? action.succeeded
62
+ ? 'ALLOWED'
63
+ : action.executed
64
+ ? 'FAILED'
65
+ : 'DRY-RUN'
66
+ : 'DENIED';
67
+ const time = formatTimestamp(action.requestedEvent.timestamp, baseTs);
68
+ const target = escapeHtml(action.target || '(none)');
69
+ const actionType = escapeHtml(action.actionType);
70
+ const governanceHtml = action.governanceEvents
71
+ .map((g) => {
72
+ const reason = g.reason || g.invariant || g.policy || '';
73
+ return `<div class="violation">${escapeHtml(g.kind)}${reason ? ` — ${escapeHtml(String(reason))}` : ''}</div>`;
74
+ })
75
+ .join('');
76
+ const decisionReason = action.decisionEvent ? action.decisionEvent.reason || '' : '';
77
+ const simHtml = action.simulationEvent
78
+ ? `<div class="sim-badge">risk=${escapeHtml(String(action.simulationEvent.riskLevel || '?'))} blast=${action.simulationEvent.blastRadius ?? '?'}</div>`
79
+ : '';
80
+ // Build lifecycle steps
81
+ const steps = [];
82
+ steps.push(`<span class="step step-requested" title="Requested at ${time}">PROPOSE</span>`);
83
+ if (action.decisionEvent) {
84
+ const cat = categorize(action.decisionEvent.kind);
85
+ steps.push(`<span class="step step-${cat}" title="${escapeHtml(action.decisionEvent.kind)}">EVALUATE</span>`);
86
+ }
87
+ if (action.executionEvent) {
88
+ const cat = action.succeeded ? 'allowed' : 'failed';
89
+ steps.push(`<span class="step step-${cat}">EXECUTE</span>`);
90
+ }
91
+ steps.push(`<span class="step step-emit">EMIT</span>`);
92
+ return `<div class="action action-${statusClass}" data-index="${index}" data-kind="${actionType}" data-status="${statusClass}">
93
+ <div class="action-header" onclick="toggleDetail(${index})">
94
+ <span class="action-time">${time}</span>
95
+ <span class="action-badge badge-${statusClass}">${statusLabel}</span>
96
+ <span class="action-type">${actionType}</span>
97
+ <span class="action-target">${target}</span>
98
+ <span class="action-expand" id="expand-${index}">&#9654;</span>
99
+ </div>
100
+ <div class="action-lifecycle">${steps.join('<span class="arrow">→</span>')}</div>
101
+ <div class="action-detail" id="detail-${index}" style="display:none;">
102
+ ${decisionReason ? `<div class="detail-row"><strong>Reason:</strong> ${escapeHtml(decisionReason)}</div>` : ''}
103
+ ${simHtml}
104
+ ${governanceHtml}
105
+ <div class="detail-row dim">Events in group: ${action.governanceEvents.length + (action.decisionEvent ? 1 : 0) + (action.executionEvent ? 1 : 0) + (action.simulationEvent ? 1 : 0) + 1}</div>
106
+ </div>
107
+ </div>`;
108
+ }
109
+ export function generateTimelineHtml(session, events, options = {}) {
110
+ const s = session.summary;
111
+ const baseTs = events.length > 0 ? events[0].timestamp : 0;
112
+ let actions = [...session.actions];
113
+ if (options.deniedOnly) {
114
+ actions = actions.filter((a) => !a.allowed);
115
+ }
116
+ // Collect unique action types for filter
117
+ const actionTypeSet = new Set();
118
+ for (const a of actions) {
119
+ actionTypeSet.add(a.actionType);
120
+ }
121
+ const actionTypes = [...actionTypeSet].sort();
122
+ // Build filter checkboxes HTML
123
+ const filterHtml = actionTypes
124
+ .map((t) => `<label class="filter-label"><input type="checkbox" checked onchange="applyFilters()" data-action-type="${escapeHtml(t)}"> ${escapeHtml(t)}</label>`)
125
+ .join('\n');
126
+ const statusFilterHtml = ['allowed', 'denied', 'failed']
127
+ .map((s) => `<label class="filter-label"><input type="checkbox" checked onchange="applyFilters()" data-status="${s}"> ${s.toUpperCase()}</label>`)
128
+ .join('\n');
129
+ // Build action timeline HTML
130
+ const actionsHtml = actions.map((a, i) => buildActionHtml(a, baseTs, i)).join('\n');
131
+ // Duration formatting
132
+ const durationSec = Math.floor(s.durationMs / 1000);
133
+ const durationMin = Math.floor(durationSec / 60);
134
+ const durationStr = durationMin > 0 ? `${durationMin}m ${durationSec % 60}s` : `${durationSec}s`;
135
+ // Event kind distribution for the summary chart
136
+ const kindCounts = {};
137
+ for (const e of events) {
138
+ kindCounts[e.kind] = (kindCounts[e.kind] || 0) + 1;
139
+ }
140
+ const topKinds = Object.entries(kindCounts)
141
+ .sort((a, b) => b[1] - a[1])
142
+ .slice(0, 10);
143
+ const maxKindCount = topKinds.length > 0 ? topKinds[0][1] : 1;
144
+ const kindBarsHtml = topKinds
145
+ .map(([kind, count]) => {
146
+ const pct = Math.round((count / maxKindCount) * 100);
147
+ const cat = categorize(kind);
148
+ return `<div class="bar-row"><span class="bar-label">${escapeHtml(kind)}</span><div class="bar-track"><div class="bar-fill bar-${cat}" style="width:${pct}%"></div></div><span class="bar-count">${count}</span></div>`;
149
+ })
150
+ .join('\n');
151
+ return `<!DOCTYPE html>
152
+ <html lang="en">
153
+ <head>
154
+ <meta charset="UTF-8">
155
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
156
+ <title>AgentGuard Timeline — ${escapeHtml(session.runId)}</title>
157
+ <style>
158
+ :root {
159
+ --bg: #0d1117;
160
+ --surface: #161b22;
161
+ --border: #30363d;
162
+ --text: #e6edf3;
163
+ --dim: #8b949e;
164
+ --green: #3fb950;
165
+ --red: #f85149;
166
+ --yellow: #d29922;
167
+ --blue: #58a6ff;
168
+ --purple: #bc8cff;
169
+ --orange: #f0883e;
170
+ --cyan: #39d2c0;
171
+ }
172
+ * { margin: 0; padding: 0; box-sizing: border-box; }
173
+ body {
174
+ font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
175
+ background: var(--bg);
176
+ color: var(--text);
177
+ font-size: 13px;
178
+ line-height: 1.5;
179
+ }
180
+ .container { max-width: 1100px; margin: 0 auto; padding: 24px 16px; }
181
+ h1 { font-size: 20px; font-weight: 600; margin-bottom: 4px; }
182
+ .run-id { color: var(--dim); font-size: 12px; margin-bottom: 20px; }
183
+
184
+ /* Summary cards */
185
+ .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 12px; margin-bottom: 24px; }
186
+ .card {
187
+ background: var(--surface);
188
+ border: 1px solid var(--border);
189
+ border-radius: 8px;
190
+ padding: 12px;
191
+ text-align: center;
192
+ }
193
+ .card-value { font-size: 24px; font-weight: 700; }
194
+ .card-label { color: var(--dim); font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }
195
+ .card-green .card-value { color: var(--green); }
196
+ .card-red .card-value { color: var(--red); }
197
+ .card-yellow .card-value { color: var(--yellow); }
198
+ .card-blue .card-value { color: var(--blue); }
199
+
200
+ /* Event distribution */
201
+ .distribution { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 16px; margin-bottom: 24px; }
202
+ .distribution h2 { font-size: 14px; margin-bottom: 12px; color: var(--dim); }
203
+ .bar-row { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
204
+ .bar-label { width: 180px; text-align: right; font-size: 11px; color: var(--dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
205
+ .bar-track { flex: 1; height: 14px; background: var(--bg); border-radius: 3px; overflow: hidden; }
206
+ .bar-fill { height: 100%; border-radius: 3px; transition: width 0.3s ease; }
207
+ .bar-count { width: 40px; text-align: right; font-size: 11px; color: var(--dim); }
208
+ .bar-governance { background: var(--red); }
209
+ .bar-lifecycle { background: var(--blue); }
210
+ .bar-safety { background: var(--orange); }
211
+ .bar-reference { background: var(--purple); }
212
+ .bar-decision { background: var(--cyan); }
213
+ .bar-other { background: var(--dim); }
214
+
215
+ /* Filters */
216
+ .filters { background: var(--surface); border: 1px solid var(--border); border-radius: 8px; padding: 12px 16px; margin-bottom: 20px; }
217
+ .filters h3 { font-size: 12px; color: var(--dim); margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.5px; }
218
+ .filter-group { display: flex; flex-wrap: wrap; gap: 6px 12px; margin-bottom: 8px; }
219
+ .filter-label { display: flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text); cursor: pointer; }
220
+ .filter-label input { cursor: pointer; }
221
+
222
+ /* Timeline */
223
+ .timeline { position: relative; padding-left: 2px; }
224
+ .action {
225
+ background: var(--surface);
226
+ border: 1px solid var(--border);
227
+ border-radius: 8px;
228
+ margin-bottom: 8px;
229
+ overflow: hidden;
230
+ transition: border-color 0.2s;
231
+ }
232
+ .action:hover { border-color: var(--blue); }
233
+ .action-denied { border-left: 3px solid var(--red); }
234
+ .action-allowed { border-left: 3px solid var(--green); }
235
+ .action-failed { border-left: 3px solid var(--yellow); }
236
+ .action-header {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 10px;
240
+ padding: 10px 14px;
241
+ cursor: pointer;
242
+ user-select: none;
243
+ }
244
+ .action-header:hover { background: rgba(255,255,255,0.02); }
245
+ .action-time { font-size: 11px; color: var(--dim); min-width: 80px; }
246
+ .action-badge {
247
+ font-size: 10px;
248
+ font-weight: 700;
249
+ padding: 2px 8px;
250
+ border-radius: 4px;
251
+ text-transform: uppercase;
252
+ letter-spacing: 0.5px;
253
+ }
254
+ .badge-allowed { background: rgba(63,185,80,0.15); color: var(--green); }
255
+ .badge-denied { background: rgba(248,81,73,0.15); color: var(--red); }
256
+ .badge-failed { background: rgba(210,153,34,0.15); color: var(--yellow); }
257
+ .action-type { font-weight: 600; }
258
+ .action-target { color: var(--dim); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
259
+ .action-expand { color: var(--dim); font-size: 10px; transition: transform 0.2s; }
260
+ .action-expand.open { transform: rotate(90deg); }
261
+
262
+ .action-lifecycle {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 6px;
266
+ padding: 0 14px 8px;
267
+ font-size: 10px;
268
+ }
269
+ .step {
270
+ padding: 1px 6px;
271
+ border-radius: 3px;
272
+ font-weight: 600;
273
+ letter-spacing: 0.3px;
274
+ }
275
+ .step-requested { background: rgba(88,166,255,0.15); color: var(--blue); }
276
+ .step-reference { background: rgba(188,140,255,0.15); color: var(--purple); }
277
+ .step-allowed { background: rgba(63,185,80,0.15); color: var(--green); }
278
+ .step-failed { background: rgba(210,153,34,0.15); color: var(--yellow); }
279
+ .step-emit { background: rgba(57,210,192,0.15); color: var(--cyan); }
280
+ .arrow { color: var(--dim); font-size: 10px; }
281
+
282
+ .action-detail { padding: 8px 14px 12px; border-top: 1px solid var(--border); }
283
+ .detail-row { margin-bottom: 4px; font-size: 12px; }
284
+ .dim { color: var(--dim); }
285
+ .violation {
286
+ background: rgba(248,81,73,0.1);
287
+ border-left: 2px solid var(--red);
288
+ padding: 4px 8px;
289
+ margin: 4px 0;
290
+ font-size: 12px;
291
+ color: var(--red);
292
+ }
293
+ .sim-badge {
294
+ font-size: 11px;
295
+ color: var(--orange);
296
+ margin: 4px 0;
297
+ }
298
+
299
+ /* Scrubber */
300
+ .scrubber { margin-bottom: 16px; }
301
+ .scrubber input[type="range"] {
302
+ width: 100%;
303
+ accent-color: var(--blue);
304
+ }
305
+ .scrubber-label { display: flex; justify-content: space-between; font-size: 11px; color: var(--dim); }
306
+
307
+ /* Footer */
308
+ .footer { text-align: center; color: var(--dim); font-size: 11px; margin-top: 32px; padding-top: 16px; border-top: 1px solid var(--border); }
309
+ </style>
310
+ </head>
311
+ <body>
312
+ <div class="container">
313
+ <h1>AgentGuard Timeline Viewer</h1>
314
+ <div class="run-id">Run: ${escapeHtml(session.runId)} &middot; ${s.totalActions} actions &middot; ${events.length} events &middot; ${durationStr}</div>
315
+
316
+ <div class="summary">
317
+ <div class="card card-blue">
318
+ <div class="card-value">${s.totalActions}</div>
319
+ <div class="card-label">Actions</div>
320
+ </div>
321
+ <div class="card card-green">
322
+ <div class="card-value">${s.allowed}</div>
323
+ <div class="card-label">Allowed</div>
324
+ </div>
325
+ <div class="card card-red">
326
+ <div class="card-value">${s.denied}</div>
327
+ <div class="card-label">Denied</div>
328
+ </div>
329
+ <div class="card card-yellow">
330
+ <div class="card-value">${s.violations}</div>
331
+ <div class="card-label">Violations</div>
332
+ </div>
333
+ <div class="card">
334
+ <div class="card-value">${s.escalations}</div>
335
+ <div class="card-label">Escalations</div>
336
+ </div>
337
+ <div class="card">
338
+ <div class="card-value">${s.simulationsRun}</div>
339
+ <div class="card-label">Simulations</div>
340
+ </div>
341
+ </div>
342
+
343
+ <div class="distribution">
344
+ <h2>Event Distribution</h2>
345
+ ${kindBarsHtml}
346
+ </div>
347
+
348
+ <div class="scrubber">
349
+ <input type="range" min="0" max="${Math.max(actions.length - 1, 0)}" value="${Math.max(actions.length - 1, 0)}" id="scrubber" oninput="scrubTo(this.value)">
350
+ <div class="scrubber-label">
351
+ <span>Start</span>
352
+ <span id="scrubber-pos">${actions.length} / ${actions.length} actions</span>
353
+ <span>End</span>
354
+ </div>
355
+ </div>
356
+
357
+ <div class="filters">
358
+ <h3>Filter by Action Type</h3>
359
+ <div class="filter-group" id="type-filters">
360
+ ${filterHtml}
361
+ </div>
362
+ <h3>Filter by Status</h3>
363
+ <div class="filter-group" id="status-filters">
364
+ ${statusFilterHtml}
365
+ </div>
366
+ </div>
367
+
368
+ <div class="timeline" id="timeline">
369
+ ${actionsHtml}
370
+ </div>
371
+
372
+ <div class="footer">
373
+ Generated by AgentGuard &middot; ${new Date().toISOString().slice(0, 19)}Z
374
+ </div>
375
+ </div>
376
+
377
+ <script>
378
+ function toggleDetail(index) {
379
+ const detail = document.getElementById('detail-' + index);
380
+ const expand = document.getElementById('expand-' + index);
381
+ if (!detail) return;
382
+ const visible = detail.style.display !== 'none';
383
+ detail.style.display = visible ? 'none' : 'block';
384
+ if (expand) expand.classList.toggle('open', !visible);
385
+ }
386
+
387
+ function applyFilters() {
388
+ const typeChecks = document.querySelectorAll('#type-filters input[type=checkbox]');
389
+ const statusChecks = document.querySelectorAll('#status-filters input[type=checkbox]');
390
+ const allowedTypes = new Set();
391
+ const allowedStatuses = new Set();
392
+ typeChecks.forEach(function(cb) { if (cb.checked) allowedTypes.add(cb.dataset.actionType); });
393
+ statusChecks.forEach(function(cb) { if (cb.checked) allowedStatuses.add(cb.dataset.status); });
394
+ const actions = document.querySelectorAll('.action');
395
+ actions.forEach(function(el) {
396
+ const kind = el.dataset.kind;
397
+ const status = el.dataset.status;
398
+ el.style.display = (allowedTypes.has(kind) && allowedStatuses.has(status)) ? '' : 'none';
399
+ });
400
+ }
401
+
402
+ function scrubTo(value) {
403
+ const actions = document.querySelectorAll('.action');
404
+ const n = parseInt(value, 10) + 1;
405
+ document.getElementById('scrubber-pos').textContent = n + ' / ' + actions.length + ' actions';
406
+ actions.forEach(function(el, i) {
407
+ el.style.opacity = i <= parseInt(value, 10) ? '1' : '0.2';
408
+ });
409
+ }
410
+ </script>
411
+ </body>
412
+ </html>`;
413
+ }
414
+ //# sourceMappingURL=replay-timeline-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-timeline-html.js","sourceRoot":"","sources":["../src/replay-timeline-html.ts"],"names":[],"mappings":"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"}