@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
@@ -1,276 +0,0 @@
1
- // Plugin manifest validator — validates plugin manifests at load time.
2
- //
3
- // Validates structure, required fields, capability declarations, version
4
- // format, and API version compatibility. This runs before a plugin is
5
- // registered in any registry to ensure only well-formed plugins are loaded.
6
- import { VALID_CAPABILITIES } from './types.js';
7
- /** Valid plugin types */
8
- const VALID_PLUGIN_TYPES = ['renderer', 'replay-processor', 'policy-pack'];
9
- /** Semver pattern: major.minor.patch with optional pre-release */
10
- const SEMVER_PATTERN = /^\d+\.\d+\.\d+(-[\w.]+)?$/;
11
- /** Semver range patterns we accept for apiVersion */
12
- const SEMVER_RANGE_PATTERN = /^([~^]|>=?|<=?|)?\d+\.\d+\.\d+(-[\w.]+)?$/;
13
- /**
14
- * Validate a plugin manifest for structural correctness.
15
- *
16
- * Checks:
17
- * - Required fields: id, name, version, type, apiVersion
18
- * - String format: non-empty strings, valid semver
19
- * - Plugin type: must be a known PluginType
20
- * - Capabilities: all entries must be known PluginCapability values
21
- * - Dependencies: must be non-empty strings if provided
22
- */
23
- export function validateManifest(manifest) {
24
- const errors = [];
25
- if (!manifest || typeof manifest !== 'object') {
26
- return {
27
- valid: false,
28
- pluginId: undefined,
29
- errors: [{ field: 'manifest', message: 'Manifest must be a non-null object' }],
30
- };
31
- }
32
- const m = manifest;
33
- // --- Required string fields ---
34
- const requiredStrings = ['id', 'name', 'version', 'type', 'apiVersion'];
35
- for (const field of requiredStrings) {
36
- if (m[field] === undefined || m[field] === null) {
37
- errors.push({ field, message: `"${field}" is required` });
38
- }
39
- else if (typeof m[field] !== 'string' || m[field].trim() === '') {
40
- errors.push({ field, message: `"${field}" must be a non-empty string` });
41
- }
42
- }
43
- const pluginId = typeof m.id === 'string' ? m.id : undefined;
44
- // --- Version format ---
45
- if (typeof m.version === 'string' && m.version.trim() !== '') {
46
- if (!SEMVER_PATTERN.test(m.version)) {
47
- errors.push({
48
- field: 'version',
49
- message: `"${m.version}" is not valid semver (expected major.minor.patch)`,
50
- });
51
- }
52
- }
53
- // --- API version format ---
54
- if (typeof m.apiVersion === 'string' && m.apiVersion.trim() !== '') {
55
- if (!SEMVER_RANGE_PATTERN.test(m.apiVersion)) {
56
- errors.push({
57
- field: 'apiVersion',
58
- message: `"${m.apiVersion}" is not a valid semver range`,
59
- });
60
- }
61
- }
62
- // --- Plugin type ---
63
- if (typeof m.type === 'string' && !VALID_PLUGIN_TYPES.includes(m.type)) {
64
- errors.push({
65
- field: 'type',
66
- message: `"${m.type}" is not a valid plugin type (expected: ${VALID_PLUGIN_TYPES.join(', ')})`,
67
- });
68
- }
69
- // --- Optional description ---
70
- if (m.description !== undefined && typeof m.description !== 'string') {
71
- errors.push({ field: 'description', message: '"description" must be a string if provided' });
72
- }
73
- // --- Capabilities ---
74
- if (m.capabilities !== undefined) {
75
- if (!Array.isArray(m.capabilities)) {
76
- errors.push({
77
- field: 'capabilities',
78
- message: '"capabilities" must be an array if provided',
79
- });
80
- }
81
- else {
82
- for (let i = 0; i < m.capabilities.length; i++) {
83
- const cap = m.capabilities[i];
84
- if (typeof cap !== 'string') {
85
- errors.push({
86
- field: `capabilities[${i}]`,
87
- message: 'Each capability must be a string',
88
- });
89
- }
90
- else if (!VALID_CAPABILITIES.includes(cap)) {
91
- errors.push({
92
- field: `capabilities[${i}]`,
93
- message: `"${cap}" is not a valid capability (expected: ${VALID_CAPABILITIES.join(', ')})`,
94
- });
95
- }
96
- }
97
- }
98
- }
99
- // --- Dependencies ---
100
- if (m.dependencies !== undefined) {
101
- if (!Array.isArray(m.dependencies)) {
102
- errors.push({
103
- field: 'dependencies',
104
- message: '"dependencies" must be an array if provided',
105
- });
106
- }
107
- else {
108
- for (let i = 0; i < m.dependencies.length; i++) {
109
- const dep = m.dependencies[i];
110
- if (typeof dep !== 'string' || dep.trim() === '') {
111
- errors.push({
112
- field: `dependencies[${i}]`,
113
- message: 'Each dependency must be a non-empty string',
114
- });
115
- }
116
- }
117
- }
118
- }
119
- return {
120
- valid: errors.length === 0,
121
- pluginId,
122
- errors,
123
- };
124
- }
125
- /**
126
- * Parse semver string into components.
127
- * Returns null if the string is not valid semver.
128
- */
129
- function parseSemver(version) {
130
- const match = version.match(/^(\d+)\.(\d+)\.(\d+)/);
131
- if (!match)
132
- return null;
133
- return {
134
- major: parseInt(match[1], 10),
135
- minor: parseInt(match[2], 10),
136
- patch: parseInt(match[3], 10),
137
- };
138
- }
139
- /**
140
- * Check if a plugin's declared apiVersion is compatible with the host API version.
141
- *
142
- * Supports simple semver range operators:
143
- * - `^1.0.0` — compatible with 1.x.x (major must match, minor/patch >= specified)
144
- * - `~1.2.0` — compatible with 1.2.x (major+minor must match, patch >= specified)
145
- * - `>=1.0.0` — any version >= 1.0.0
146
- * - `1.0.0` — exact match (treated as ^1.0.0 for convenience)
147
- */
148
- export function checkApiVersionCompatibility(pluginApiVersion, hostVersion) {
149
- const host = parseSemver(hostVersion);
150
- if (!host) {
151
- return { compatible: false, reason: `Invalid host version: "${hostVersion}"` };
152
- }
153
- // Extract operator and version
154
- const rangeMatch = pluginApiVersion.match(/^([~^]|>=?|<=?|)?(\d+\.\d+\.\d+.*)$/);
155
- if (!rangeMatch) {
156
- return { compatible: false, reason: `Invalid apiVersion format: "${pluginApiVersion}"` };
157
- }
158
- const operator = rangeMatch[1] || '^'; // Default to caret if no operator
159
- const required = parseSemver(rangeMatch[2]);
160
- if (!required) {
161
- return { compatible: false, reason: `Cannot parse version: "${rangeMatch[2]}"` };
162
- }
163
- switch (operator) {
164
- case '^': {
165
- // Major must match, host >= required
166
- if (host.major !== required.major) {
167
- return {
168
- compatible: false,
169
- reason: `Major version mismatch: host ${hostVersion} vs required ^${rangeMatch[2]}`,
170
- };
171
- }
172
- if (host.minor < required.minor ||
173
- (host.minor === required.minor && host.patch < required.patch)) {
174
- return {
175
- compatible: false,
176
- reason: `Host version ${hostVersion} is older than required ^${rangeMatch[2]}`,
177
- };
178
- }
179
- return { compatible: true };
180
- }
181
- case '~': {
182
- // Major+minor must match, patch >= required
183
- if (host.major !== required.major || host.minor !== required.minor) {
184
- return {
185
- compatible: false,
186
- reason: `Version mismatch: host ${hostVersion} vs required ~${rangeMatch[2]}`,
187
- };
188
- }
189
- if (host.patch < required.patch) {
190
- return {
191
- compatible: false,
192
- reason: `Host patch ${hostVersion} is older than required ~${rangeMatch[2]}`,
193
- };
194
- }
195
- return { compatible: true };
196
- }
197
- case '>=': {
198
- const hostVal = host.major * 10000 + host.minor * 100 + host.patch;
199
- const reqVal = required.major * 10000 + required.minor * 100 + required.patch;
200
- if (hostVal < reqVal) {
201
- return {
202
- compatible: false,
203
- reason: `Host version ${hostVersion} is older than required >=${rangeMatch[2]}`,
204
- };
205
- }
206
- return { compatible: true };
207
- }
208
- case '>': {
209
- const hostVal = host.major * 10000 + host.minor * 100 + host.patch;
210
- const reqVal = required.major * 10000 + required.minor * 100 + required.patch;
211
- if (hostVal <= reqVal) {
212
- return {
213
- compatible: false,
214
- reason: `Host version ${hostVersion} is not greater than ${rangeMatch[2]}`,
215
- };
216
- }
217
- return { compatible: true };
218
- }
219
- case '<=': {
220
- const hostVal = host.major * 10000 + host.minor * 100 + host.patch;
221
- const reqVal = required.major * 10000 + required.minor * 100 + required.patch;
222
- if (hostVal > reqVal) {
223
- return {
224
- compatible: false,
225
- reason: `Host version ${hostVersion} is newer than required <=${rangeMatch[2]}`,
226
- };
227
- }
228
- return { compatible: true };
229
- }
230
- case '<': {
231
- const hostVal = host.major * 10000 + host.minor * 100 + host.patch;
232
- const reqVal = required.major * 10000 + required.minor * 100 + required.patch;
233
- if (hostVal >= reqVal) {
234
- return {
235
- compatible: false,
236
- reason: `Host version ${hostVersion} is not less than ${rangeMatch[2]}`,
237
- };
238
- }
239
- return { compatible: true };
240
- }
241
- default:
242
- return { compatible: false, reason: `Unknown operator: "${operator}"` };
243
- }
244
- }
245
- /**
246
- * Fully validate a plugin manifest including API version compatibility.
247
- *
248
- * This is the main entry point for plugin validation. It runs:
249
- * 1. Structural validation (validateManifest)
250
- * 2. API version compatibility check (checkApiVersionCompatibility)
251
- *
252
- * Returns a combined result with all errors.
253
- */
254
- export function validatePlugin(manifest, hostVersion) {
255
- const structuralResult = validateManifest(manifest);
256
- // If structural validation failed, return early — can't check compatibility
257
- if (!structuralResult.valid) {
258
- return structuralResult;
259
- }
260
- const m = manifest;
261
- const errors = [...structuralResult.errors];
262
- // Check API version compatibility
263
- const compat = checkApiVersionCompatibility(m.apiVersion, hostVersion);
264
- if (!compat.compatible) {
265
- errors.push({
266
- field: 'apiVersion',
267
- message: compat.reason || 'Incompatible API version',
268
- });
269
- }
270
- return {
271
- valid: errors.length === 0,
272
- pluginId: m.id,
273
- errors,
274
- };
275
- }
276
- //# sourceMappingURL=validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/plugins/validator.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- export interface PolicyRule {
2
- action: string | string[];
3
- effect: 'allow' | 'deny';
4
- conditions?: {
5
- scope?: string[];
6
- limit?: number;
7
- branches?: string[];
8
- requireTests?: boolean;
9
- };
10
- reason?: string;
11
- }
12
- export interface LoadedPolicy {
13
- id: string;
14
- name: string;
15
- description?: string;
16
- rules: PolicyRule[];
17
- severity: number;
18
- }
19
- export interface NormalizedIntent {
20
- action: string;
21
- target: string;
22
- agent: string;
23
- branch?: string;
24
- command?: string;
25
- filesAffected?: number;
26
- metadata?: Record<string, unknown>;
27
- destructive: boolean;
28
- }
29
- export interface EvalResult {
30
- allowed: boolean;
31
- decision: 'allow' | 'deny';
32
- matchedRule: PolicyRule | null;
33
- matchedPolicy: LoadedPolicy | null;
34
- reason: string;
35
- severity: number;
36
- }
37
- declare function matchAction(pattern: string, action: string): boolean;
38
- declare function matchScope(scopePatterns: string[], target: string): boolean;
39
- export declare function evaluate(intent: NormalizedIntent, policies: LoadedPolicy[]): EvalResult;
40
- export { matchAction, matchScope };
41
- //# sourceMappingURL=evaluator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAU7D;AAED,iBAAS,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAepE;AAwBD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,UAAU,CA8DvF;AAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC"}
@@ -1,111 +0,0 @@
1
- // Policy evaluator — matches actions against loaded policies.
2
- // Pure domain logic. No DOM, no Node.js-specific APIs.
3
- function matchAction(pattern, action) {
4
- if (pattern === '*')
5
- return true;
6
- if (pattern === action)
7
- return true;
8
- if (pattern.endsWith('.*')) {
9
- const prefix = pattern.slice(0, -2);
10
- return action.startsWith(prefix + '.');
11
- }
12
- return false;
13
- }
14
- function matchScope(scopePatterns, target) {
15
- if (!scopePatterns || scopePatterns.length === 0)
16
- return true;
17
- if (!target)
18
- return true;
19
- for (const pattern of scopePatterns) {
20
- if (pattern === '*')
21
- return true;
22
- if (pattern === target)
23
- return true;
24
- if (pattern.endsWith('/') && target.startsWith(pattern))
25
- return true;
26
- if (pattern.startsWith('*')) {
27
- const suffix = pattern.slice(1);
28
- if (target.endsWith(suffix))
29
- return true;
30
- }
31
- }
32
- return false;
33
- }
34
- function matchConditions(conditions, intent) {
35
- if (!conditions)
36
- return true;
37
- if (conditions.scope && !matchScope(conditions.scope, intent.target)) {
38
- return false;
39
- }
40
- if (conditions.limit !== undefined && intent.filesAffected !== undefined) {
41
- if (intent.filesAffected > conditions.limit) {
42
- return true;
43
- }
44
- }
45
- if (conditions.branches && intent.branch) {
46
- if (conditions.branches.includes(intent.branch)) {
47
- return true;
48
- }
49
- }
50
- return true;
51
- }
52
- export function evaluate(intent, policies) {
53
- if (!intent || !intent.action) {
54
- return {
55
- allowed: false,
56
- decision: 'deny',
57
- matchedRule: null,
58
- matchedPolicy: null,
59
- reason: 'Intent is missing required field: action',
60
- severity: 5,
61
- };
62
- }
63
- for (const policy of policies) {
64
- for (const rule of policy.rules) {
65
- if (rule.effect !== 'deny')
66
- continue;
67
- const actions = Array.isArray(rule.action) ? rule.action : [rule.action];
68
- const actionMatches = actions.some((pattern) => matchAction(pattern, intent.action));
69
- if (!actionMatches)
70
- continue;
71
- if (matchConditions(rule.conditions, intent)) {
72
- return {
73
- allowed: false,
74
- decision: 'deny',
75
- matchedRule: rule,
76
- matchedPolicy: policy,
77
- reason: rule.reason || `Denied by policy "${policy.name}"`,
78
- severity: policy.severity,
79
- };
80
- }
81
- }
82
- }
83
- for (const policy of policies) {
84
- for (const rule of policy.rules) {
85
- if (rule.effect !== 'allow')
86
- continue;
87
- const actions = Array.isArray(rule.action) ? rule.action : [rule.action];
88
- const actionMatches = actions.some((pattern) => matchAction(pattern, intent.action));
89
- if (actionMatches && matchConditions(rule.conditions, intent)) {
90
- return {
91
- allowed: true,
92
- decision: 'allow',
93
- matchedRule: rule,
94
- matchedPolicy: policy,
95
- reason: rule.reason || `Allowed by policy "${policy.name}"`,
96
- severity: 0,
97
- };
98
- }
99
- }
100
- }
101
- return {
102
- allowed: true,
103
- decision: 'allow',
104
- matchedRule: null,
105
- matchedPolicy: null,
106
- reason: 'No matching policy — default allow',
107
- severity: 0,
108
- };
109
- }
110
- export { matchAction, matchScope };
111
- //# sourceMappingURL=evaluator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { LoadedPolicy } from './evaluator.js';
2
- export declare const VALID_ACTIONS: Set<string>;
3
- interface ValidationResult {
4
- valid: boolean;
5
- errors: string[];
6
- }
7
- export declare function validatePolicy(policy: unknown): ValidationResult;
8
- export declare function loadPolicies(policyDefs: unknown[]): {
9
- policies: LoadedPolicy[];
10
- errors: string[];
11
- };
12
- export {};
13
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,eAAO,MAAM,aAAa,aAexB,CAAC;AAEH,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAyCD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAyChE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG;IACnD,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAkCA"}
@@ -1,118 +0,0 @@
1
- // Policy loader — parses and validates policy definitions.
2
- // Pure domain logic. No DOM, no Node.js-specific APIs.
3
- //
4
- // Policy pack loading: see pack-loader.ts for extends/merge support.
5
- const VALID_EFFECTS = new Set(['allow', 'deny']);
6
- export const VALID_ACTIONS = new Set([
7
- 'file.write',
8
- 'file.delete',
9
- 'file.rename',
10
- 'shell.exec',
11
- 'git.push',
12
- 'git.force-push',
13
- 'git.branch.delete',
14
- 'git.commit',
15
- 'git.merge',
16
- 'config.modify',
17
- 'dependency.add',
18
- 'dependency.remove',
19
- 'deploy.trigger',
20
- '*',
21
- ]);
22
- function validateRule(rule) {
23
- const errors = [];
24
- if (!rule || typeof rule !== 'object') {
25
- return { valid: false, errors: ['Rule must be a non-null object'] };
26
- }
27
- const r = rule;
28
- if (!r.action) {
29
- errors.push('Rule is missing required field: action');
30
- }
31
- else {
32
- const actions = Array.isArray(r.action) ? r.action : [r.action];
33
- for (const a of actions) {
34
- if (typeof a !== 'string') {
35
- errors.push(`Invalid action type: ${typeof a}`);
36
- }
37
- }
38
- }
39
- if (!r.effect) {
40
- errors.push('Rule is missing required field: effect');
41
- }
42
- else if (!VALID_EFFECTS.has(r.effect)) {
43
- errors.push(`Invalid effect: ${r.effect}. Must be "allow" or "deny"`);
44
- }
45
- if (r.conditions) {
46
- if (typeof r.conditions !== 'object') {
47
- errors.push('Conditions must be an object');
48
- }
49
- const conds = r.conditions;
50
- if (conds.limit !== undefined && typeof conds.limit !== 'number') {
51
- errors.push('Condition "limit" must be a number');
52
- }
53
- }
54
- return { valid: errors.length === 0, errors };
55
- }
56
- export function validatePolicy(policy) {
57
- const errors = [];
58
- if (!policy || typeof policy !== 'object') {
59
- return { valid: false, errors: ['Policy must be a non-null object'] };
60
- }
61
- const p = policy;
62
- if (!p.id || typeof p.id !== 'string') {
63
- errors.push('Policy is missing required field: id (string)');
64
- }
65
- if (!p.name || typeof p.name !== 'string') {
66
- errors.push('Policy is missing required field: name (string)');
67
- }
68
- if (!Array.isArray(p.rules) || p.rules.length === 0) {
69
- errors.push('Policy must have at least one rule');
70
- }
71
- else {
72
- for (let i = 0; i < p.rules.length; i++) {
73
- const result = validateRule(p.rules[i]);
74
- if (!result.valid) {
75
- for (const err of result.errors) {
76
- errors.push(`Rule[${i}]: ${err}`);
77
- }
78
- }
79
- }
80
- }
81
- if (p.severity !== undefined) {
82
- if (typeof p.severity !== 'number' ||
83
- p.severity < 1 ||
84
- p.severity > 5) {
85
- errors.push('Severity must be a number between 1 and 5');
86
- }
87
- }
88
- return { valid: errors.length === 0, errors };
89
- }
90
- export function loadPolicies(policyDefs) {
91
- const policies = [];
92
- const errors = [];
93
- if (!Array.isArray(policyDefs)) {
94
- return { policies: [], errors: ['Policy definitions must be an array'] };
95
- }
96
- const seenIds = new Set();
97
- for (let i = 0; i < policyDefs.length; i++) {
98
- const def = policyDefs[i];
99
- const result = validatePolicy(def);
100
- if (!result.valid) {
101
- for (const err of result.errors) {
102
- errors.push(`Policy[${i}]: ${err}`);
103
- }
104
- continue;
105
- }
106
- if (seenIds.has(def.id)) {
107
- errors.push(`Policy[${i}]: Duplicate policy ID "${def.id}"`);
108
- continue;
109
- }
110
- seenIds.add(def.id);
111
- policies.push({
112
- ...def,
113
- severity: def.severity ?? 3,
114
- });
115
- }
116
- return { policies, errors };
117
- }
118
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/policy/loader.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import type { LoadedPolicy } from './evaluator.js';
2
- export interface PackResolutionResult {
3
- policies: LoadedPolicy[];
4
- errors: string[];
5
- }
6
- /**
7
- * Resolve a single pack reference to an absolute file path.
8
- *
9
- * Supports three reference styles:
10
- * 1. Relative path — `"./packs/strict"` or `"./packs/strict.yaml"`
11
- * 2. Absolute path — `"/home/user/packs/strict.yaml"`
12
- * 3. npm package — `"@agentguard/security-pack"` resolved from node_modules
13
- */
14
- export declare function resolvePackPath(ref: string, baseDir: string): string | null;
15
- /**
16
- * Load a single policy pack from a resolved file path.
17
- */
18
- export declare function loadPackFile(filePath: string): LoadedPolicy | null;
19
- /**
20
- * Resolve and load all policy packs from an `extends` list.
21
- *
22
- * @param extends_ - Array of pack references (paths or npm package names)
23
- * @param baseDir - Directory to resolve relative paths from
24
- * @returns Loaded pack policies and any errors encountered
25
- */
26
- export declare function resolveExtends(extends_: string[], baseDir: string): PackResolutionResult;
27
- /**
28
- * Merge pack policies with a local policy.
29
- *
30
- * Precedence: local rules override pack rules. Within packs, earlier entries
31
- * in the `extends` list take precedence over later entries.
32
- *
33
- * The merge strategy is:
34
- * 1. Collect all rules from packs (in extends order)
35
- * 2. Append local rules (which take precedence during evaluation since
36
- * the evaluator checks deny rules first, then allow rules)
37
- * 3. Return a single merged policy array
38
- */
39
- export declare function mergePolicies(localPolicy: LoadedPolicy, packPolicies: LoadedPolicy[]): LoadedPolicy[];
40
- //# sourceMappingURL=pack-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pack-loader.d.ts","sourceRoot":"","sources":["../../src/policy/pack-loader.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAa/D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyC3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAuBlE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CA8BxF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,YAAY,EACzB,YAAY,EAAE,YAAY,EAAE,GAC3B,YAAY,EAAE,CAIhB"}