@red-codes/agentguard 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +298 -0
  3. package/dist/adapters/claude-code.d.ts +24 -0
  4. package/dist/adapters/claude-code.d.ts.map +1 -0
  5. package/dist/adapters/claude-code.js +99 -0
  6. package/dist/adapters/claude-code.js.map +1 -0
  7. package/dist/adapters/file.d.ts +3 -0
  8. package/dist/adapters/file.d.ts.map +1 -0
  9. package/dist/adapters/file.js +35 -0
  10. package/dist/adapters/file.js.map +1 -0
  11. package/dist/adapters/git.d.ts +3 -0
  12. package/dist/adapters/git.d.ts.map +1 -0
  13. package/dist/adapters/git.js +61 -0
  14. package/dist/adapters/git.js.map +1 -0
  15. package/dist/adapters/registry.d.ts +5 -0
  16. package/dist/adapters/registry.d.ts.map +1 -0
  17. package/dist/adapters/registry.js +15 -0
  18. package/dist/adapters/registry.js.map +1 -0
  19. package/dist/adapters/shell.d.ts +8 -0
  20. package/dist/adapters/shell.d.ts.map +1 -0
  21. package/dist/adapters/shell.js +27 -0
  22. package/dist/adapters/shell.js.map +1 -0
  23. package/dist/cli/args.d.ts +25 -0
  24. package/dist/cli/args.d.ts.map +1 -0
  25. package/dist/cli/args.js +63 -0
  26. package/dist/cli/args.js.map +1 -0
  27. package/dist/cli/bin.d.ts +3 -0
  28. package/dist/cli/bin.d.ts.map +1 -0
  29. package/dist/cli/bin.js +5769 -0
  30. package/dist/cli/bin.js.map +7 -0
  31. package/dist/cli/colors.d.ts +11 -0
  32. package/dist/cli/colors.d.ts.map +1 -0
  33. package/dist/cli/colors.js +44 -0
  34. package/dist/cli/colors.js.map +1 -0
  35. package/dist/cli/commands/claude-hook.d.ts +2 -0
  36. package/dist/cli/commands/claude-hook.d.ts.map +1 -0
  37. package/dist/cli/commands/claude-hook.js +110 -0
  38. package/dist/cli/commands/claude-hook.js.map +1 -0
  39. package/dist/cli/commands/claude-init.d.ts +2 -0
  40. package/dist/cli/commands/claude-init.d.ts.map +1 -0
  41. package/dist/cli/commands/claude-init.js +150 -0
  42. package/dist/cli/commands/claude-init.js.map +1 -0
  43. package/dist/cli/commands/export.d.ts +11 -0
  44. package/dist/cli/commands/export.d.ts.map +1 -0
  45. package/dist/cli/commands/export.js +113 -0
  46. package/dist/cli/commands/export.js.map +1 -0
  47. package/dist/cli/commands/guard.d.ts +12 -0
  48. package/dist/cli/commands/guard.d.ts.map +1 -0
  49. package/dist/cli/commands/guard.js +145 -0
  50. package/dist/cli/commands/guard.js.map +1 -0
  51. package/dist/cli/commands/import.d.ts +2 -0
  52. package/dist/cli/commands/import.d.ts.map +1 -0
  53. package/dist/cli/commands/import.js +115 -0
  54. package/dist/cli/commands/import.js.map +1 -0
  55. package/dist/cli/commands/inspect.d.ts +3 -0
  56. package/dist/cli/commands/inspect.d.ts.map +1 -0
  57. package/dist/cli/commands/inspect.js +185 -0
  58. package/dist/cli/commands/inspect.js.map +1 -0
  59. package/dist/cli/commands/plugin.d.ts +7 -0
  60. package/dist/cli/commands/plugin.d.ts.map +1 -0
  61. package/dist/cli/commands/plugin.js +234 -0
  62. package/dist/cli/commands/plugin.js.map +1 -0
  63. package/dist/cli/commands/replay.d.ts +12 -0
  64. package/dist/cli/commands/replay.d.ts.map +1 -0
  65. package/dist/cli/commands/replay.js +208 -0
  66. package/dist/cli/commands/replay.js.map +1 -0
  67. package/dist/cli/file-event-store.d.ts +41 -0
  68. package/dist/cli/file-event-store.d.ts.map +1 -0
  69. package/dist/cli/file-event-store.js +219 -0
  70. package/dist/cli/file-event-store.js.map +1 -0
  71. package/dist/cli/policy-resolver.d.ts +4 -0
  72. package/dist/cli/policy-resolver.d.ts.map +1 -0
  73. package/dist/cli/policy-resolver.js +62 -0
  74. package/dist/cli/policy-resolver.js.map +1 -0
  75. package/dist/cli/recorder.d.ts +36 -0
  76. package/dist/cli/recorder.d.ts.map +1 -0
  77. package/dist/cli/recorder.js +85 -0
  78. package/dist/cli/recorder.js.map +1 -0
  79. package/dist/cli/replay.d.ts +2 -0
  80. package/dist/cli/replay.d.ts.map +1 -0
  81. package/dist/cli/replay.js +310 -0
  82. package/dist/cli/replay.js.map +1 -0
  83. package/dist/cli/session-store.d.ts +41 -0
  84. package/dist/cli/session-store.d.ts.map +1 -0
  85. package/dist/cli/session-store.js +95 -0
  86. package/dist/cli/session-store.js.map +1 -0
  87. package/dist/cli/tui.d.ts +24 -0
  88. package/dist/cli/tui.d.ts.map +1 -0
  89. package/dist/cli/tui.js +197 -0
  90. package/dist/cli/tui.js.map +1 -0
  91. package/dist/core/actions.d.ts +11 -0
  92. package/dist/core/actions.d.ts.map +1 -0
  93. package/dist/core/actions.js +112 -0
  94. package/dist/core/actions.js.map +1 -0
  95. package/dist/core/adapters.d.ts +19 -0
  96. package/dist/core/adapters.d.ts.map +1 -0
  97. package/dist/core/adapters.js +85 -0
  98. package/dist/core/adapters.js.map +1 -0
  99. package/dist/core/execution-log/bridge.d.ts +12 -0
  100. package/dist/core/execution-log/bridge.d.ts.map +1 -0
  101. package/dist/core/execution-log/bridge.js +112 -0
  102. package/dist/core/execution-log/bridge.js.map +1 -0
  103. package/dist/core/execution-log/event-log.d.ts +7 -0
  104. package/dist/core/execution-log/event-log.d.ts.map +1 -0
  105. package/dist/core/execution-log/event-log.js +103 -0
  106. package/dist/core/execution-log/event-log.js.map +1 -0
  107. package/dist/core/execution-log/event-projections.d.ts +28 -0
  108. package/dist/core/execution-log/event-projections.d.ts.map +1 -0
  109. package/dist/core/execution-log/event-projections.js +272 -0
  110. package/dist/core/execution-log/event-projections.js.map +1 -0
  111. package/dist/core/execution-log/event-schema.d.ts +56 -0
  112. package/dist/core/execution-log/event-schema.d.ts.map +1 -0
  113. package/dist/core/execution-log/event-schema.js +160 -0
  114. package/dist/core/execution-log/event-schema.js.map +1 -0
  115. package/dist/core/execution-log/index.d.ts +7 -0
  116. package/dist/core/execution-log/index.d.ts.map +1 -0
  117. package/dist/core/execution-log/index.js +13 -0
  118. package/dist/core/execution-log/index.js.map +1 -0
  119. package/dist/core/hash.d.ts +5 -0
  120. package/dist/core/hash.d.ts.map +1 -0
  121. package/dist/core/hash.js +13 -0
  122. package/dist/core/hash.js.map +1 -0
  123. package/dist/core/rng.d.ts +29 -0
  124. package/dist/core/rng.d.ts.map +1 -0
  125. package/dist/core/rng.js +48 -0
  126. package/dist/core/rng.js.map +1 -0
  127. package/dist/core/types.d.ts +746 -0
  128. package/dist/core/types.d.ts.map +1 -0
  129. package/dist/core/types.js +8 -0
  130. package/dist/core/types.js.map +1 -0
  131. package/dist/events/bus.d.ts +24 -0
  132. package/dist/events/bus.d.ts.map +1 -0
  133. package/dist/events/bus.js +64 -0
  134. package/dist/events/bus.js.map +1 -0
  135. package/dist/events/decision-jsonl.d.ts +8 -0
  136. package/dist/events/decision-jsonl.d.ts.map +1 -0
  137. package/dist/events/decision-jsonl.js +44 -0
  138. package/dist/events/decision-jsonl.js.map +1 -0
  139. package/dist/events/jsonl.d.ts +8 -0
  140. package/dist/events/jsonl.d.ts.map +1 -0
  141. package/dist/events/jsonl.js +46 -0
  142. package/dist/events/jsonl.js.map +1 -0
  143. package/dist/events/schema.d.ts +59 -0
  144. package/dist/events/schema.d.ts.map +1 -0
  145. package/dist/events/schema.js +296 -0
  146. package/dist/events/schema.js.map +1 -0
  147. package/dist/events/store.d.ts +7 -0
  148. package/dist/events/store.d.ts.map +1 -0
  149. package/dist/events/store.js +64 -0
  150. package/dist/events/store.js.map +1 -0
  151. package/dist/invariants/checker.d.ts +15 -0
  152. package/dist/invariants/checker.d.ts.map +1 -0
  153. package/dist/invariants/checker.js +52 -0
  154. package/dist/invariants/checker.js.map +1 -0
  155. package/dist/invariants/definitions.d.ts +33 -0
  156. package/dist/invariants/definitions.d.ts.map +1 -0
  157. package/dist/invariants/definitions.js +168 -0
  158. package/dist/invariants/definitions.js.map +1 -0
  159. package/dist/kernel/aab.d.ts +26 -0
  160. package/dist/kernel/aab.d.ts.map +1 -0
  161. package/dist/kernel/aab.js +149 -0
  162. package/dist/kernel/aab.js.map +1 -0
  163. package/dist/kernel/blast-radius.d.ts +60 -0
  164. package/dist/kernel/blast-radius.d.ts.map +1 -0
  165. package/dist/kernel/blast-radius.js +146 -0
  166. package/dist/kernel/blast-radius.js.map +1 -0
  167. package/dist/kernel/decision.d.ts +40 -0
  168. package/dist/kernel/decision.d.ts.map +1 -0
  169. package/dist/kernel/decision.js +92 -0
  170. package/dist/kernel/decision.js.map +1 -0
  171. package/dist/kernel/decisions/factory.d.ts +12 -0
  172. package/dist/kernel/decisions/factory.d.ts.map +1 -0
  173. package/dist/kernel/decisions/factory.js +56 -0
  174. package/dist/kernel/decisions/factory.js.map +1 -0
  175. package/dist/kernel/decisions/types.d.ts +70 -0
  176. package/dist/kernel/decisions/types.d.ts.map +1 -0
  177. package/dist/kernel/decisions/types.js +5 -0
  178. package/dist/kernel/decisions/types.js.map +1 -0
  179. package/dist/kernel/evidence.d.ts +29 -0
  180. package/dist/kernel/evidence.d.ts.map +1 -0
  181. package/dist/kernel/evidence.js +61 -0
  182. package/dist/kernel/evidence.js.map +1 -0
  183. package/dist/kernel/kernel.d.ts +47 -0
  184. package/dist/kernel/kernel.d.ts.map +1 -0
  185. package/dist/kernel/kernel.js +377 -0
  186. package/dist/kernel/kernel.js.map +1 -0
  187. package/dist/kernel/monitor.d.ts +35 -0
  188. package/dist/kernel/monitor.d.ts.map +1 -0
  189. package/dist/kernel/monitor.js +144 -0
  190. package/dist/kernel/monitor.js.map +1 -0
  191. package/dist/kernel/replay-comparator.d.ts +72 -0
  192. package/dist/kernel/replay-comparator.d.ts.map +1 -0
  193. package/dist/kernel/replay-comparator.js +251 -0
  194. package/dist/kernel/replay-comparator.js.map +1 -0
  195. package/dist/kernel/replay-engine.d.ts +108 -0
  196. package/dist/kernel/replay-engine.d.ts.map +1 -0
  197. package/dist/kernel/replay-engine.js +241 -0
  198. package/dist/kernel/replay-engine.js.map +1 -0
  199. package/dist/kernel/replay-processor.d.ts +109 -0
  200. package/dist/kernel/replay-processor.d.ts.map +1 -0
  201. package/dist/kernel/replay-processor.js +118 -0
  202. package/dist/kernel/replay-processor.js.map +1 -0
  203. package/dist/kernel/simulation/filesystem-simulator.d.ts +3 -0
  204. package/dist/kernel/simulation/filesystem-simulator.d.ts.map +1 -0
  205. package/dist/kernel/simulation/filesystem-simulator.js +81 -0
  206. package/dist/kernel/simulation/filesystem-simulator.js.map +1 -0
  207. package/dist/kernel/simulation/git-simulator.d.ts +5 -0
  208. package/dist/kernel/simulation/git-simulator.d.ts.map +1 -0
  209. package/dist/kernel/simulation/git-simulator.js +115 -0
  210. package/dist/kernel/simulation/git-simulator.js.map +1 -0
  211. package/dist/kernel/simulation/package-simulator.d.ts +5 -0
  212. package/dist/kernel/simulation/package-simulator.d.ts.map +1 -0
  213. package/dist/kernel/simulation/package-simulator.js +164 -0
  214. package/dist/kernel/simulation/package-simulator.js.map +1 -0
  215. package/dist/kernel/simulation/registry.d.ts +3 -0
  216. package/dist/kernel/simulation/registry.d.ts.map +1 -0
  217. package/dist/kernel/simulation/registry.js +24 -0
  218. package/dist/kernel/simulation/registry.js.map +1 -0
  219. package/dist/kernel/simulation/types.d.ts +35 -0
  220. package/dist/kernel/simulation/types.d.ts.map +1 -0
  221. package/dist/kernel/simulation/types.js +4 -0
  222. package/dist/kernel/simulation/types.js.map +1 -0
  223. package/dist/plugins/discovery.d.ts +45 -0
  224. package/dist/plugins/discovery.d.ts.map +1 -0
  225. package/dist/plugins/discovery.js +89 -0
  226. package/dist/plugins/discovery.js.map +1 -0
  227. package/dist/plugins/index.d.ts +10 -0
  228. package/dist/plugins/index.d.ts.map +1 -0
  229. package/dist/plugins/index.js +7 -0
  230. package/dist/plugins/index.js.map +1 -0
  231. package/dist/plugins/registry.d.ts +52 -0
  232. package/dist/plugins/registry.d.ts.map +1 -0
  233. package/dist/plugins/registry.js +148 -0
  234. package/dist/plugins/registry.js.map +1 -0
  235. package/dist/plugins/sandbox.d.ts +87 -0
  236. package/dist/plugins/sandbox.d.ts.map +1 -0
  237. package/dist/plugins/sandbox.js +122 -0
  238. package/dist/plugins/sandbox.js.map +1 -0
  239. package/dist/plugins/types.d.ts +61 -0
  240. package/dist/plugins/types.d.ts.map +1 -0
  241. package/dist/plugins/types.js +16 -0
  242. package/dist/plugins/types.js.map +1 -0
  243. package/dist/plugins/validator.d.ts +36 -0
  244. package/dist/plugins/validator.d.ts.map +1 -0
  245. package/dist/plugins/validator.js +276 -0
  246. package/dist/plugins/validator.js.map +1 -0
  247. package/dist/policy/evaluator.d.ts +41 -0
  248. package/dist/policy/evaluator.d.ts.map +1 -0
  249. package/dist/policy/evaluator.js +111 -0
  250. package/dist/policy/evaluator.js.map +1 -0
  251. package/dist/policy/loader.d.ts +13 -0
  252. package/dist/policy/loader.d.ts.map +1 -0
  253. package/dist/policy/loader.js +118 -0
  254. package/dist/policy/loader.js.map +1 -0
  255. package/dist/policy/pack-loader.d.ts +40 -0
  256. package/dist/policy/pack-loader.d.ts.map +1 -0
  257. package/dist/policy/pack-loader.js +138 -0
  258. package/dist/policy/pack-loader.js.map +1 -0
  259. package/dist/policy/yaml-loader.d.ts +23 -0
  260. package/dist/policy/yaml-loader.d.ts.map +1 -0
  261. package/dist/policy/yaml-loader.js +222 -0
  262. package/dist/policy/yaml-loader.js.map +1 -0
  263. package/dist/renderers/index.d.ts +6 -0
  264. package/dist/renderers/index.d.ts.map +1 -0
  265. package/dist/renderers/index.js +4 -0
  266. package/dist/renderers/index.js.map +1 -0
  267. package/dist/renderers/registry.d.ts +39 -0
  268. package/dist/renderers/registry.d.ts.map +1 -0
  269. package/dist/renderers/registry.js +97 -0
  270. package/dist/renderers/registry.js.map +1 -0
  271. package/dist/renderers/tui-renderer.d.ts +18 -0
  272. package/dist/renderers/tui-renderer.d.ts.map +1 -0
  273. package/dist/renderers/tui-renderer.js +57 -0
  274. package/dist/renderers/tui-renderer.js.map +1 -0
  275. package/dist/renderers/types.d.ts +52 -0
  276. package/dist/renderers/types.d.ts.map +1 -0
  277. package/dist/renderers/types.js +4 -0
  278. package/dist/renderers/types.js.map +1 -0
  279. package/dist/telemetry/index.d.ts +3 -0
  280. package/dist/telemetry/index.d.ts.map +1 -0
  281. package/dist/telemetry/index.js +2 -0
  282. package/dist/telemetry/index.js.map +1 -0
  283. package/dist/telemetry/runtimeLogger.d.ts +9 -0
  284. package/dist/telemetry/runtimeLogger.d.ts.map +1 -0
  285. package/dist/telemetry/runtimeLogger.js +68 -0
  286. package/dist/telemetry/runtimeLogger.js.map +1 -0
  287. package/dist/telemetry/types.d.ts +22 -0
  288. package/dist/telemetry/types.d.ts.map +1 -0
  289. package/dist/telemetry/types.js +4 -0
  290. package/dist/telemetry/types.js.map +1 -0
  291. package/hooks/post-commit +57 -0
  292. package/hooks/post-merge +33 -0
  293. package/hooks/pre-commit +28 -0
  294. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-renderer.js","sourceRoot":"","sources":["../../src/renderers/tui-renderer.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,4EAA4E;AAO5E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AASvB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA8B,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAEzC,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,sBAAsB;QAE5B,YAAY,CAAC,MAAsB;YACjC,MAAM,CAAC,KAAK,CACV,YAAY,CAAC;gBACX,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO;aACnC,CAAC,CACH,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,CAAC,cAAc,kBAAkB,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,cAAc,CAAC,MAAoB;YACjC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7D,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,eAAe,CAAC,QAAyB;YACvC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,YAAY,CAAC,UAA4B;YACvC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC;QAED,gBAAgB,CAAC,MAAgC;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,UAAU,CAAC,OAAmB;YAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,+CAA+C,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC;YAClF,KAAK,CAAC,IAAI,CACR,qBAAqB,OAAO,CAAC,YAAY,eAAe,OAAO,CAAC,OAAO,cAAc,OAAO,CAAC,MAAM,kBAAkB,OAAO,CAAC,UAAU,SAAS,CACjJ,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,UAAU,WAAW,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { KernelResult } from '../kernel/kernel.js';
2
+ import type { MonitorDecision } from '../kernel/monitor.js';
3
+ import type { GovernanceDecisionRecord } from '../kernel/decisions/types.js';
4
+ import type { SimulationResult } from '../kernel/simulation/types.js';
5
+ /** Configuration passed to renderers at run start */
6
+ export interface RendererConfig {
7
+ readonly runId: string;
8
+ readonly policyName?: string;
9
+ readonly invariantCount?: number;
10
+ readonly verbose?: boolean;
11
+ readonly dryRun?: boolean;
12
+ readonly simulatorCount?: number;
13
+ }
14
+ /** Summary provided to renderers at run end */
15
+ export interface RunSummary {
16
+ readonly runId: string;
17
+ readonly totalActions: number;
18
+ readonly allowed: number;
19
+ readonly denied: number;
20
+ readonly violations: number;
21
+ readonly durationMs: number;
22
+ }
23
+ /**
24
+ * GovernanceRenderer — the plugin interface for output renderers.
25
+ *
26
+ * Renderers receive lifecycle callbacks as actions flow through the kernel.
27
+ * Multiple renderers can be active simultaneously (e.g., TUI + file report).
28
+ *
29
+ * All methods are optional — implement only the hooks you need.
30
+ * All methods are synchronous to avoid blocking the kernel pipeline.
31
+ */
32
+ export interface GovernanceRenderer {
33
+ /** Unique identifier for this renderer */
34
+ readonly id: string;
35
+ /** Human-readable name */
36
+ readonly name: string;
37
+ /** Called when a governance run starts */
38
+ onRunStarted?(config: RendererConfig): void;
39
+ /** Called after each action is evaluated (allowed or denied) */
40
+ onActionResult?(result: KernelResult): void;
41
+ /** Called when escalation state changes */
42
+ onMonitorStatus?(decision: MonitorDecision): void;
43
+ /** Called when a pre-execution simulation completes */
44
+ onSimulation?(simulation: SimulationResult): void;
45
+ /** Called when a governance decision record is persisted */
46
+ onDecisionRecord?(record: GovernanceDecisionRecord): void;
47
+ /** Called when a governance run ends */
48
+ onRunEnded?(summary: RunSummary): void;
49
+ /** Called to release resources when the renderer is unregistered */
50
+ dispose?(): void;
51
+ }
52
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,0CAA0C;IAC1C,YAAY,CAAC,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAE5C,gEAAgE;IAChE,cAAc,CAAC,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAE5C,2CAA2C;IAC3C,eAAe,CAAC,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IAElD,uDAAuD;IACvD,YAAY,CAAC,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAElD,4DAA4D;IAC5D,gBAAgB,CAAC,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAE1D,wCAAwC;IACxC,UAAU,CAAC,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAEvC,oEAAoE;IACpE,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB"}
@@ -0,0 +1,4 @@
1
+ // Renderer plugin interface — contracts for governance output renderers.
2
+ // Renderers consume kernel results and produce output (terminal, file, etc.).
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/renderers/types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,8EAA8E"}
@@ -0,0 +1,3 @@
1
+ export type { TelemetryEvent, TelemetryLoggerOptions, TelemetrySink } from './types.js';
2
+ export { buildTelemetryEvent, createTelemetryLogger, createTelemetryDecisionSink, } from './runtimeLogger.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { buildTelemetryEvent, createTelemetryLogger, createTelemetryDecisionSink, } from './runtimeLogger.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { GovernanceDecisionRecord, DecisionSink } from '../kernel/decisions/types.js';
2
+ import type { TelemetryEvent, TelemetryLoggerOptions, TelemetrySink } from './types.js';
3
+ /** Map a GovernanceDecisionRecord to a flattened TelemetryEvent. */
4
+ export declare function buildTelemetryEvent(record: GovernanceDecisionRecord): TelemetryEvent;
5
+ /** Create a TelemetrySink that appends JSON lines to a single shared log file. */
6
+ export declare function createTelemetryLogger(options?: TelemetryLoggerOptions): TelemetrySink;
7
+ /** Create a DecisionSink adapter that converts decision records to telemetry events. */
8
+ export declare function createTelemetryDecisionSink(options?: TelemetryLoggerOptions): DecisionSink;
9
+ //# sourceMappingURL=runtimeLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLogger.d.ts","sourceRoot":"","sources":["../../src/telemetry/runtimeLogger.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKxF,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,cAAc,CAWpF;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,aAAa,CAkCrF;AAED,wFAAwF;AACxF,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,YAAY,CAa1F"}
@@ -0,0 +1,68 @@
1
+ // Runtime telemetry logger — persists flattened governance events to
2
+ // logs/runtime-events.jsonl for downstream agents and monitors.
3
+ // Implements DecisionSink so it plugs directly into the kernel pipeline.
4
+ import { mkdirSync, appendFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ const DEFAULT_LOG_DIR = 'logs';
7
+ const DEFAULT_LOG_FILE = 'runtime-events.jsonl';
8
+ /** Map a GovernanceDecisionRecord to a flattened TelemetryEvent. */
9
+ export function buildTelemetryEvent(record) {
10
+ return {
11
+ timestamp: new Date(record.timestamp).toISOString(),
12
+ agent: record.action.agent,
13
+ run_id: record.runId,
14
+ syscall: record.action.type,
15
+ target: record.action.target,
16
+ capability: record.policy.matchedPolicyId ?? 'default-allow',
17
+ policy_result: record.outcome,
18
+ invariant_result: record.invariants.allHold ? 'pass' : 'fail',
19
+ };
20
+ }
21
+ /** Create a TelemetrySink that appends JSON lines to a single shared log file. */
22
+ export function createTelemetryLogger(options) {
23
+ const logDir = options?.logDir ?? DEFAULT_LOG_DIR;
24
+ const logFile = options?.logFile ?? DEFAULT_LOG_FILE;
25
+ const filePath = join(logDir, logFile);
26
+ let initialized = false;
27
+ function ensureDir() {
28
+ if (initialized)
29
+ return;
30
+ try {
31
+ mkdirSync(logDir, { recursive: true });
32
+ initialized = true;
33
+ }
34
+ catch {
35
+ // Directory may already exist
36
+ initialized = true;
37
+ }
38
+ }
39
+ return {
40
+ write(event) {
41
+ ensureDir();
42
+ const line = JSON.stringify(event) + '\n';
43
+ try {
44
+ appendFileSync(filePath, line, 'utf8');
45
+ }
46
+ catch {
47
+ // Swallow write errors — don't crash the kernel
48
+ }
49
+ },
50
+ flush() {
51
+ // No buffering — writes are immediate for durability
52
+ },
53
+ };
54
+ }
55
+ /** Create a DecisionSink adapter that converts decision records to telemetry events. */
56
+ export function createTelemetryDecisionSink(options) {
57
+ const logger = createTelemetryLogger(options);
58
+ return {
59
+ write(record) {
60
+ const event = buildTelemetryEvent(record);
61
+ logger.write(event);
62
+ },
63
+ flush() {
64
+ logger.flush?.();
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=runtimeLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLogger.js","sourceRoot":"","sources":["../../src/telemetry/runtimeLogger.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,gEAAgE;AAChE,yEAAyE;AAEzE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEhD,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,MAAgC;IAClE,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;QACnD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,eAAe;QAC5D,aAAa,EAAE,MAAM,CAAC,OAAO;QAC7B,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;KAC9D,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,eAAe,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,SAAS,SAAS;QAChB,IAAI,WAAW;YAAE,OAAO;QACxB,IAAI,CAAC;YACH,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;YAC9B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,KAAqB;YACzB,SAAS,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAE1C,IAAI,CAAC;gBACH,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;QACH,CAAC;QAED,KAAK;YACH,qDAAqD;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,2BAA2B,CAAC,OAAgC;IAC1E,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO;QACL,KAAK,CAAC,MAAgC;YACpC,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,KAAK;YACH,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface TelemetryEvent {
2
+ timestamp: string;
3
+ agent: string;
4
+ run_id: string;
5
+ syscall: string;
6
+ target: string;
7
+ capability: string;
8
+ policy_result: 'allow' | 'deny';
9
+ invariant_result: 'pass' | 'fail';
10
+ issue_id?: number;
11
+ diff_size?: number;
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ export interface TelemetryLoggerOptions {
15
+ logDir?: string;
16
+ logFile?: string;
17
+ }
18
+ export interface TelemetrySink {
19
+ write(event: TelemetryEvent): void;
20
+ flush?(): void;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB"}
@@ -0,0 +1,4 @@
1
+ // Telemetry event types — external contract for downstream agents and monitors.
2
+ // Snake_case field names are intentional: this is an external-facing format.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6EAA6E"}
@@ -0,0 +1,57 @@
1
+ #!/bin/sh
2
+ # AgentGuard Git Hook - post-commit
3
+ # Tracks git commits for developer activity events
4
+ # Install: cp hooks/post-commit .git/hooks/post-commit && chmod +x .git/hooks/post-commit
5
+
6
+ EVENTS_FILE="$(git rev-parse --show-toplevel)/.events.json"
7
+
8
+ # Initialize events file if it doesn't exist
9
+ if [ ! -f "$EVENTS_FILE" ]; then
10
+ echo '{"commits":0,"prs_merged":0,"bugs_fixed":0,"tests_passing":0,"refactors":0,"code_reviews":0,"conflicts_resolved":0,"ci_passes":0,"deploys":0,"docs_written":0}' > "$EVENTS_FILE"
11
+ fi
12
+
13
+ # Increment commit counter
14
+ if command -v python3 > /dev/null 2>&1; then
15
+ python3 -c "
16
+ import json
17
+ with open('$EVENTS_FILE', 'r') as f:
18
+ data = json.load(f)
19
+ data['commits'] = data.get('commits', 0) + 1
20
+
21
+ # Check commit message for keywords
22
+ import subprocess
23
+ msg = subprocess.run(['git', 'log', '-1', '--format=%s'], capture_output=True, text=True).stdout.lower()
24
+
25
+ if any(word in msg for word in ['fix', 'bug', 'patch', 'resolve']):
26
+ data['bugs_fixed'] = data.get('bugs_fixed', 0) + 1
27
+ if any(word in msg for word in ['refactor', 'clean', 'restructure']):
28
+ data['refactors'] = data.get('refactors', 0) + 1
29
+ if any(word in msg for word in ['doc', 'readme', 'comment', 'jsdoc']):
30
+ data['docs_written'] = data.get('docs_written', 0) + 1
31
+ if any(word in msg for word in ['deploy', 'release', 'publish']):
32
+ data['deploys'] = data.get('deploys', 0) + 1
33
+ if any(word in msg for word in ['test', 'spec', 'assert']):
34
+ data['tests_passing'] = data.get('tests_passing', 0) + 1
35
+
36
+ with open('$EVENTS_FILE', 'w') as f:
37
+ json.dump(data, f, indent=2)
38
+ print('[AgentGuard] Dev activity logged.')
39
+ "
40
+ elif command -v node > /dev/null 2>&1; then
41
+ node -e "
42
+ const fs = require('fs');
43
+ const { execSync } = require('child_process');
44
+ const data = JSON.parse(fs.readFileSync('$EVENTS_FILE', 'utf8'));
45
+ data.commits = (data.commits || 0) + 1;
46
+
47
+ const msg = execSync('git log -1 --format=%s').toString().toLowerCase();
48
+ if (/fix|bug|patch|resolve/.test(msg)) data.bugs_fixed = (data.bugs_fixed || 0) + 1;
49
+ if (/refactor|clean|restructure/.test(msg)) data.refactors = (data.refactors || 0) + 1;
50
+ if (/doc|readme|comment|jsdoc/.test(msg)) data.docs_written = (data.docs_written || 0) + 1;
51
+ if (/deploy|release|publish/.test(msg)) data.deploys = (data.deploys || 0) + 1;
52
+ if (/test|spec|assert/.test(msg)) data.tests_passing = (data.tests_passing || 0) + 1;
53
+
54
+ fs.writeFileSync('$EVENTS_FILE', JSON.stringify(data, null, 2));
55
+ console.log('[AgentGuard] Dev activity logged.');
56
+ "
57
+ fi
@@ -0,0 +1,33 @@
1
+ #!/bin/sh
2
+ # AgentGuard Git Hook - post-merge
3
+ # Tracks merges for developer activity events
4
+ # Install: cp hooks/post-merge .git/hooks/post-merge && chmod +x .git/hooks/post-merge
5
+
6
+ EVENTS_FILE="$(git rev-parse --show-toplevel)/.events.json"
7
+
8
+ if [ ! -f "$EVENTS_FILE" ]; then
9
+ echo '{"commits":0,"prs_merged":0,"bugs_fixed":0,"tests_passing":0,"refactors":0,"code_reviews":0,"conflicts_resolved":0,"ci_passes":0,"deploys":0,"docs_written":0}' > "$EVENTS_FILE"
10
+ fi
11
+
12
+ # Check if this was a squash merge (from a PR)
13
+ IS_SQUASH="$1"
14
+
15
+ if command -v python3 > /dev/null 2>&1; then
16
+ python3 -c "
17
+ import json
18
+ with open('$EVENTS_FILE', 'r') as f:
19
+ data = json.load(f)
20
+ data['prs_merged'] = data.get('prs_merged', 0) + 1
21
+ with open('$EVENTS_FILE', 'w') as f:
22
+ json.dump(data, f, indent=2)
23
+ print('[AgentGuard] Merge logged.')
24
+ "
25
+ elif command -v node > /dev/null 2>&1; then
26
+ node -e "
27
+ const fs = require('fs');
28
+ const data = JSON.parse(fs.readFileSync('$EVENTS_FILE', 'utf8'));
29
+ data.prs_merged = (data.prs_merged || 0) + 1;
30
+ fs.writeFileSync('$EVENTS_FILE', JSON.stringify(data, null, 2));
31
+ console.log('[AgentGuard] Merge logged.');
32
+ "
33
+ fi
@@ -0,0 +1,28 @@
1
+ #!/bin/sh
2
+ # AgentGuard Git Hook - pre-commit
3
+ # Auto-stages telemetry files so governance data rides with every commit.
4
+ # Without this, telemetry JSONL files accumulate as untracked forever.
5
+
6
+ REPO_ROOT="$(git rev-parse --show-toplevel)"
7
+
8
+ # Stage consolidated telemetry log
9
+ if [ -f "$REPO_ROOT/logs/runtime-events.jsonl" ]; then
10
+ git add "$REPO_ROOT/logs/runtime-events.jsonl" 2>/dev/null
11
+ fi
12
+
13
+ # Stage dev activity counters
14
+ if [ -f "$REPO_ROOT/.events.json" ]; then
15
+ git add "$REPO_ROOT/.events.json" 2>/dev/null
16
+ fi
17
+
18
+ # Stage governance event JSONL files
19
+ for f in "$REPO_ROOT"/.agentguard/events/*.jsonl; do
20
+ [ -f "$f" ] && git add "$f" 2>/dev/null
21
+ done
22
+
23
+ # Stage governance decision records
24
+ for f in "$REPO_ROOT"/.agentguard/decisions/*.jsonl; do
25
+ [ -f "$f" ] && git add "$f" 2>/dev/null
26
+ done
27
+
28
+ exit 0
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@red-codes/agentguard",
3
+ "version": "1.0.0",
4
+ "description": "Runtime governance for AI coding agents — policy enforcement, invariant checking, and audit trails for agent tool calls.",
5
+ "type": "module",
6
+ "bin": {
7
+ "agentguard": "./dist/cli/bin.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "hooks/",
12
+ "LICENSE",
13
+ "README.md"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/jpleva91/agent-guard.git"
18
+ },
19
+ "homepage": "https://github.com/jpleva91/agent-guard#readme",
20
+ "bugs": {
21
+ "url": "https://github.com/jpleva91/agent-guard/issues"
22
+ },
23
+ "author": "jpleva91",
24
+ "engines": {
25
+ "node": ">=18"
26
+ },
27
+ "scripts": {
28
+ "dev": "node dist/cli/bin.js",
29
+ "agentguard": "node dist/cli/bin.js",
30
+ "build:ts": "tsc && tsx esbuild.config.ts",
31
+ "ts:check": "tsc --noEmit",
32
+ "test": "node tests/run.js",
33
+ "ts:test": "vitest run",
34
+ "ts:test:watch": "vitest",
35
+ "test:coverage": "c8 --check-coverage --lines 50 node tests/run.js",
36
+ "lint": "eslint tests/ src/",
37
+ "lint:fix": "eslint --fix tests/ src/",
38
+ "format": "prettier --check src/",
39
+ "format:fix": "prettier --write src/",
40
+ "prepublishOnly": "npm run build:ts"
41
+ },
42
+ "keywords": [
43
+ "agentguard",
44
+ "ai-governance",
45
+ "runtime-guardrails",
46
+ "agent-safety",
47
+ "policy-enforcement",
48
+ "invariants",
49
+ "canonical-events",
50
+ "audit-trail",
51
+ "cli",
52
+ "developer-tools"
53
+ ],
54
+ "license": "Apache-2.0",
55
+ "devDependencies": {
56
+ "@types/node": "^25.4.0",
57
+ "c8": "^11.0.0",
58
+ "esbuild": "^0.27.3",
59
+ "eslint": "^10.0.3",
60
+ "prettier": "^3.8.1",
61
+ "terser": "^5.46.0",
62
+ "tsx": "^4.21.0",
63
+ "typescript": "^5.9.3",
64
+ "typescript-eslint": "^8.56.1",
65
+ "vitest": "^4.0.18"
66
+ },
67
+ "dependencies": {
68
+ "chokidar": "^5.0.0",
69
+ "commander": "^14.0.3",
70
+ "pino": "^10.3.1"
71
+ }
72
+ }