@red-codes/agentguard 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/dist/args.d.ts.map +1 -0
  2. package/dist/args.js.map +1 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +29190 -0
  5. package/dist/bin.js.map +7 -0
  6. package/dist/colors.d.ts.map +1 -0
  7. package/dist/colors.js.map +1 -0
  8. package/dist/commands/adoption.d.ts +2 -0
  9. package/dist/commands/adoption.d.ts.map +1 -0
  10. package/dist/commands/adoption.js +172 -0
  11. package/dist/commands/adoption.js.map +1 -0
  12. package/dist/commands/analytics.d.ts +3 -0
  13. package/dist/commands/analytics.d.ts.map +1 -0
  14. package/dist/commands/analytics.js +7 -0
  15. package/dist/commands/analytics.js.map +1 -0
  16. package/dist/commands/audit-verify.d.ts +3 -0
  17. package/dist/commands/audit-verify.d.ts.map +1 -0
  18. package/dist/commands/audit-verify.js +94 -0
  19. package/dist/commands/audit-verify.js.map +1 -0
  20. package/dist/commands/auto-setup.d.ts +28 -0
  21. package/dist/commands/auto-setup.d.ts.map +1 -0
  22. package/dist/commands/auto-setup.js +146 -0
  23. package/dist/commands/auto-setup.js.map +1 -0
  24. package/dist/commands/ci-check.d.ts +13 -0
  25. package/dist/commands/ci-check.d.ts.map +1 -0
  26. package/dist/commands/ci-check.js +286 -0
  27. package/dist/commands/ci-check.js.map +1 -0
  28. package/dist/commands/claude-hook.d.ts +2 -0
  29. package/dist/commands/claude-hook.d.ts.map +1 -0
  30. package/dist/commands/claude-hook.js +254 -0
  31. package/dist/commands/claude-hook.js.map +1 -0
  32. package/dist/commands/claude-init.d.ts.map +1 -0
  33. package/dist/commands/claude-init.js +401 -0
  34. package/dist/commands/claude-init.js.map +1 -0
  35. package/dist/commands/config.d.ts +39 -0
  36. package/dist/commands/config.d.ts.map +1 -0
  37. package/dist/commands/config.js +368 -0
  38. package/dist/commands/config.js.map +1 -0
  39. package/dist/commands/demo.d.ts +2 -0
  40. package/dist/commands/demo.d.ts.map +1 -0
  41. package/dist/commands/demo.js +100 -0
  42. package/dist/commands/demo.js.map +1 -0
  43. package/dist/commands/diff.d.ts +3 -0
  44. package/dist/commands/diff.d.ts.map +1 -0
  45. package/dist/commands/diff.js +364 -0
  46. package/dist/commands/diff.js.map +1 -0
  47. package/dist/commands/evidence-pr.d.ts +3 -0
  48. package/dist/commands/evidence-pr.d.ts.map +1 -0
  49. package/dist/commands/evidence-pr.js +162 -0
  50. package/dist/commands/evidence-pr.js.map +1 -0
  51. package/dist/commands/export.d.ts +22 -0
  52. package/dist/commands/export.d.ts.map +1 -0
  53. package/dist/commands/export.js +92 -0
  54. package/dist/commands/export.js.map +1 -0
  55. package/dist/commands/guard.d.ts +21 -0
  56. package/dist/commands/guard.d.ts.map +1 -0
  57. package/dist/commands/guard.js +272 -0
  58. package/dist/commands/guard.js.map +1 -0
  59. package/dist/commands/import.d.ts +3 -0
  60. package/dist/commands/import.d.ts.map +1 -0
  61. package/dist/{cli/commands → commands}/import.js +25 -26
  62. package/dist/commands/import.js.map +1 -0
  63. package/dist/commands/init.d.ts +5 -0
  64. package/dist/commands/init.d.ts.map +1 -0
  65. package/dist/commands/init.js +1288 -0
  66. package/dist/commands/init.js.map +1 -0
  67. package/dist/commands/inspect.d.ts +4 -0
  68. package/dist/commands/inspect.d.ts.map +1 -0
  69. package/dist/{cli/commands → commands}/inspect.js +97 -70
  70. package/dist/commands/inspect.js.map +1 -0
  71. package/dist/commands/learn.d.ts +2 -0
  72. package/dist/commands/learn.d.ts.map +1 -0
  73. package/dist/commands/learn.js +264 -0
  74. package/dist/commands/learn.js.map +1 -0
  75. package/dist/commands/migrate.d.ts +3 -0
  76. package/dist/commands/migrate.d.ts.map +1 -0
  77. package/dist/commands/migrate.js +270 -0
  78. package/dist/commands/migrate.js.map +1 -0
  79. package/dist/commands/plugin.d.ts.map +1 -0
  80. package/dist/{cli/commands → commands}/plugin.js +2 -2
  81. package/dist/commands/plugin.js.map +1 -0
  82. package/dist/commands/policy-verify.d.ts +46 -0
  83. package/dist/commands/policy-verify.d.ts.map +1 -0
  84. package/dist/commands/policy-verify.js +173 -0
  85. package/dist/commands/policy-verify.js.map +1 -0
  86. package/dist/commands/policy.d.ts +27 -0
  87. package/dist/commands/policy.d.ts.map +1 -0
  88. package/dist/commands/policy.js +590 -0
  89. package/dist/commands/policy.js.map +1 -0
  90. package/dist/{cli/commands → commands}/replay.d.ts +2 -1
  91. package/dist/commands/replay.d.ts.map +1 -0
  92. package/dist/{cli/commands → commands}/replay.js +78 -12
  93. package/dist/commands/replay.js.map +1 -0
  94. package/dist/commands/session-viewer.d.ts +5 -0
  95. package/dist/commands/session-viewer.d.ts.map +1 -0
  96. package/dist/commands/session-viewer.js +462 -0
  97. package/dist/commands/session-viewer.js.map +1 -0
  98. package/dist/commands/simulate.d.ts +7 -0
  99. package/dist/commands/simulate.d.ts.map +1 -0
  100. package/dist/commands/simulate.js +505 -0
  101. package/dist/commands/simulate.js.map +1 -0
  102. package/dist/commands/status.d.ts +2 -0
  103. package/dist/commands/status.d.ts.map +1 -0
  104. package/dist/commands/status.js +212 -0
  105. package/dist/commands/status.js.map +1 -0
  106. package/dist/commands/traces.d.ts +24 -0
  107. package/dist/commands/traces.d.ts.map +1 -0
  108. package/dist/commands/traces.js +282 -0
  109. package/dist/commands/traces.js.map +1 -0
  110. package/dist/commands/trust.d.ts +6 -0
  111. package/dist/commands/trust.d.ts.map +1 -0
  112. package/dist/commands/trust.js +129 -0
  113. package/dist/commands/trust.js.map +1 -0
  114. package/dist/evidence-summary.d.ts +35 -0
  115. package/dist/evidence-summary.d.ts.map +1 -0
  116. package/dist/evidence-summary.js +202 -0
  117. package/dist/evidence-summary.js.map +1 -0
  118. package/dist/{cli/file-event-store.d.ts → file-event-store.d.ts} +1 -1
  119. package/dist/file-event-store.d.ts.map +1 -0
  120. package/dist/{cli/file-event-store.js → file-event-store.js} +1 -1
  121. package/dist/file-event-store.js.map +1 -0
  122. package/{hooks → dist/hooks}/post-commit +3 -1
  123. package/{hooks → dist/hooks}/post-merge +3 -1
  124. package/dist/hooks/pre-commit +29 -0
  125. package/dist/policy-resolver.d.ts +32 -0
  126. package/dist/policy-resolver.d.ts.map +1 -0
  127. package/dist/policy-resolver.js +171 -0
  128. package/dist/policy-resolver.js.map +1 -0
  129. package/dist/{cli/recorder.d.ts → recorder.d.ts} +1 -1
  130. package/dist/recorder.d.ts.map +1 -0
  131. package/dist/{cli/recorder.js → recorder.js} +1 -1
  132. package/dist/recorder.js.map +1 -0
  133. package/dist/replay-timeline-html.d.ts +21 -0
  134. package/dist/replay-timeline-html.d.ts.map +1 -0
  135. package/dist/replay-timeline-html.js +414 -0
  136. package/dist/replay-timeline-html.js.map +1 -0
  137. package/dist/replay.d.ts.map +1 -0
  138. package/dist/{cli/replay.js → replay.js} +92 -1
  139. package/dist/replay.js.map +1 -0
  140. package/dist/{cli/session-store.d.ts → session-store.d.ts} +5 -0
  141. package/dist/session-store.d.ts.map +1 -0
  142. package/dist/{cli/session-store.js → session-store.js} +1 -0
  143. package/dist/session-store.js.map +1 -0
  144. package/dist/session-viewer-html.d.ts +10 -0
  145. package/dist/session-viewer-html.d.ts.map +1 -0
  146. package/dist/session-viewer-html.js +737 -0
  147. package/dist/session-viewer-html.js.map +1 -0
  148. package/dist/templates/ci-only.yaml +103 -0
  149. package/dist/templates/development.yaml +107 -0
  150. package/dist/templates/permissive.yaml +87 -0
  151. package/dist/templates/strict.yaml +112 -0
  152. package/dist/tui.d.ts +3 -0
  153. package/dist/tui.d.ts.map +1 -0
  154. package/dist/tui.js +2 -0
  155. package/dist/tui.js.map +1 -0
  156. package/package.json +42 -53
  157. package/README.md +0 -298
  158. package/dist/adapters/claude-code.d.ts +0 -24
  159. package/dist/adapters/claude-code.d.ts.map +0 -1
  160. package/dist/adapters/claude-code.js +0 -99
  161. package/dist/adapters/claude-code.js.map +0 -1
  162. package/dist/adapters/file.d.ts +0 -3
  163. package/dist/adapters/file.d.ts.map +0 -1
  164. package/dist/adapters/file.js +0 -35
  165. package/dist/adapters/file.js.map +0 -1
  166. package/dist/adapters/git.d.ts +0 -3
  167. package/dist/adapters/git.d.ts.map +0 -1
  168. package/dist/adapters/git.js +0 -61
  169. package/dist/adapters/git.js.map +0 -1
  170. package/dist/adapters/registry.d.ts +0 -5
  171. package/dist/adapters/registry.d.ts.map +0 -1
  172. package/dist/adapters/registry.js +0 -15
  173. package/dist/adapters/registry.js.map +0 -1
  174. package/dist/adapters/shell.d.ts +0 -8
  175. package/dist/adapters/shell.d.ts.map +0 -1
  176. package/dist/adapters/shell.js +0 -27
  177. package/dist/adapters/shell.js.map +0 -1
  178. package/dist/cli/args.d.ts.map +0 -1
  179. package/dist/cli/args.js.map +0 -1
  180. package/dist/cli/bin.d.ts.map +0 -1
  181. package/dist/cli/bin.js +0 -5769
  182. package/dist/cli/bin.js.map +0 -7
  183. package/dist/cli/colors.d.ts.map +0 -1
  184. package/dist/cli/colors.js.map +0 -1
  185. package/dist/cli/commands/claude-hook.d.ts +0 -2
  186. package/dist/cli/commands/claude-hook.d.ts.map +0 -1
  187. package/dist/cli/commands/claude-hook.js +0 -110
  188. package/dist/cli/commands/claude-hook.js.map +0 -1
  189. package/dist/cli/commands/claude-init.d.ts.map +0 -1
  190. package/dist/cli/commands/claude-init.js +0 -150
  191. package/dist/cli/commands/claude-init.js.map +0 -1
  192. package/dist/cli/commands/export.d.ts +0 -11
  193. package/dist/cli/commands/export.d.ts.map +0 -1
  194. package/dist/cli/commands/export.js +0 -113
  195. package/dist/cli/commands/export.js.map +0 -1
  196. package/dist/cli/commands/guard.d.ts +0 -12
  197. package/dist/cli/commands/guard.d.ts.map +0 -1
  198. package/dist/cli/commands/guard.js +0 -145
  199. package/dist/cli/commands/guard.js.map +0 -1
  200. package/dist/cli/commands/import.d.ts +0 -2
  201. package/dist/cli/commands/import.d.ts.map +0 -1
  202. package/dist/cli/commands/import.js.map +0 -1
  203. package/dist/cli/commands/inspect.d.ts +0 -3
  204. package/dist/cli/commands/inspect.d.ts.map +0 -1
  205. package/dist/cli/commands/inspect.js.map +0 -1
  206. package/dist/cli/commands/plugin.d.ts.map +0 -1
  207. package/dist/cli/commands/plugin.js.map +0 -1
  208. package/dist/cli/commands/replay.d.ts.map +0 -1
  209. package/dist/cli/commands/replay.js.map +0 -1
  210. package/dist/cli/file-event-store.d.ts.map +0 -1
  211. package/dist/cli/file-event-store.js.map +0 -1
  212. package/dist/cli/policy-resolver.d.ts +0 -4
  213. package/dist/cli/policy-resolver.d.ts.map +0 -1
  214. package/dist/cli/policy-resolver.js +0 -62
  215. package/dist/cli/policy-resolver.js.map +0 -1
  216. package/dist/cli/recorder.d.ts.map +0 -1
  217. package/dist/cli/recorder.js.map +0 -1
  218. package/dist/cli/replay.d.ts.map +0 -1
  219. package/dist/cli/replay.js.map +0 -1
  220. package/dist/cli/session-store.d.ts.map +0 -1
  221. package/dist/cli/session-store.js.map +0 -1
  222. package/dist/cli/tui.d.ts +0 -24
  223. package/dist/cli/tui.d.ts.map +0 -1
  224. package/dist/cli/tui.js +0 -197
  225. package/dist/cli/tui.js.map +0 -1
  226. package/dist/core/actions.d.ts +0 -11
  227. package/dist/core/actions.d.ts.map +0 -1
  228. package/dist/core/actions.js +0 -112
  229. package/dist/core/actions.js.map +0 -1
  230. package/dist/core/adapters.d.ts +0 -19
  231. package/dist/core/adapters.d.ts.map +0 -1
  232. package/dist/core/adapters.js +0 -85
  233. package/dist/core/adapters.js.map +0 -1
  234. package/dist/core/execution-log/bridge.d.ts +0 -12
  235. package/dist/core/execution-log/bridge.d.ts.map +0 -1
  236. package/dist/core/execution-log/bridge.js +0 -112
  237. package/dist/core/execution-log/bridge.js.map +0 -1
  238. package/dist/core/execution-log/event-log.d.ts +0 -7
  239. package/dist/core/execution-log/event-log.d.ts.map +0 -1
  240. package/dist/core/execution-log/event-log.js +0 -103
  241. package/dist/core/execution-log/event-log.js.map +0 -1
  242. package/dist/core/execution-log/event-projections.d.ts +0 -28
  243. package/dist/core/execution-log/event-projections.d.ts.map +0 -1
  244. package/dist/core/execution-log/event-projections.js +0 -272
  245. package/dist/core/execution-log/event-projections.js.map +0 -1
  246. package/dist/core/execution-log/event-schema.d.ts +0 -56
  247. package/dist/core/execution-log/event-schema.d.ts.map +0 -1
  248. package/dist/core/execution-log/event-schema.js +0 -160
  249. package/dist/core/execution-log/event-schema.js.map +0 -1
  250. package/dist/core/execution-log/index.d.ts +0 -7
  251. package/dist/core/execution-log/index.d.ts.map +0 -1
  252. package/dist/core/execution-log/index.js +0 -13
  253. package/dist/core/execution-log/index.js.map +0 -1
  254. package/dist/core/hash.d.ts +0 -5
  255. package/dist/core/hash.d.ts.map +0 -1
  256. package/dist/core/hash.js +0 -13
  257. package/dist/core/hash.js.map +0 -1
  258. package/dist/core/rng.d.ts +0 -29
  259. package/dist/core/rng.d.ts.map +0 -1
  260. package/dist/core/rng.js +0 -48
  261. package/dist/core/rng.js.map +0 -1
  262. package/dist/core/types.d.ts +0 -746
  263. package/dist/core/types.d.ts.map +0 -1
  264. package/dist/core/types.js +0 -8
  265. package/dist/core/types.js.map +0 -1
  266. package/dist/events/bus.d.ts +0 -24
  267. package/dist/events/bus.d.ts.map +0 -1
  268. package/dist/events/bus.js +0 -64
  269. package/dist/events/bus.js.map +0 -1
  270. package/dist/events/decision-jsonl.d.ts +0 -8
  271. package/dist/events/decision-jsonl.d.ts.map +0 -1
  272. package/dist/events/decision-jsonl.js +0 -44
  273. package/dist/events/decision-jsonl.js.map +0 -1
  274. package/dist/events/jsonl.d.ts +0 -8
  275. package/dist/events/jsonl.d.ts.map +0 -1
  276. package/dist/events/jsonl.js +0 -46
  277. package/dist/events/jsonl.js.map +0 -1
  278. package/dist/events/schema.d.ts +0 -59
  279. package/dist/events/schema.d.ts.map +0 -1
  280. package/dist/events/schema.js +0 -296
  281. package/dist/events/schema.js.map +0 -1
  282. package/dist/events/store.d.ts +0 -7
  283. package/dist/events/store.d.ts.map +0 -1
  284. package/dist/events/store.js +0 -64
  285. package/dist/events/store.js.map +0 -1
  286. package/dist/invariants/checker.d.ts +0 -15
  287. package/dist/invariants/checker.d.ts.map +0 -1
  288. package/dist/invariants/checker.js +0 -52
  289. package/dist/invariants/checker.js.map +0 -1
  290. package/dist/invariants/definitions.d.ts +0 -33
  291. package/dist/invariants/definitions.d.ts.map +0 -1
  292. package/dist/invariants/definitions.js +0 -168
  293. package/dist/invariants/definitions.js.map +0 -1
  294. package/dist/kernel/aab.d.ts +0 -26
  295. package/dist/kernel/aab.d.ts.map +0 -1
  296. package/dist/kernel/aab.js +0 -149
  297. package/dist/kernel/aab.js.map +0 -1
  298. package/dist/kernel/blast-radius.d.ts +0 -60
  299. package/dist/kernel/blast-radius.d.ts.map +0 -1
  300. package/dist/kernel/blast-radius.js +0 -146
  301. package/dist/kernel/blast-radius.js.map +0 -1
  302. package/dist/kernel/decision.d.ts +0 -40
  303. package/dist/kernel/decision.d.ts.map +0 -1
  304. package/dist/kernel/decision.js +0 -92
  305. package/dist/kernel/decision.js.map +0 -1
  306. package/dist/kernel/decisions/factory.d.ts +0 -12
  307. package/dist/kernel/decisions/factory.d.ts.map +0 -1
  308. package/dist/kernel/decisions/factory.js +0 -56
  309. package/dist/kernel/decisions/factory.js.map +0 -1
  310. package/dist/kernel/decisions/types.d.ts +0 -70
  311. package/dist/kernel/decisions/types.d.ts.map +0 -1
  312. package/dist/kernel/decisions/types.js +0 -5
  313. package/dist/kernel/decisions/types.js.map +0 -1
  314. package/dist/kernel/evidence.d.ts +0 -29
  315. package/dist/kernel/evidence.d.ts.map +0 -1
  316. package/dist/kernel/evidence.js +0 -61
  317. package/dist/kernel/evidence.js.map +0 -1
  318. package/dist/kernel/kernel.d.ts +0 -47
  319. package/dist/kernel/kernel.d.ts.map +0 -1
  320. package/dist/kernel/kernel.js +0 -377
  321. package/dist/kernel/kernel.js.map +0 -1
  322. package/dist/kernel/monitor.d.ts +0 -35
  323. package/dist/kernel/monitor.d.ts.map +0 -1
  324. package/dist/kernel/monitor.js +0 -144
  325. package/dist/kernel/monitor.js.map +0 -1
  326. package/dist/kernel/replay-comparator.d.ts +0 -72
  327. package/dist/kernel/replay-comparator.d.ts.map +0 -1
  328. package/dist/kernel/replay-comparator.js +0 -251
  329. package/dist/kernel/replay-comparator.js.map +0 -1
  330. package/dist/kernel/replay-engine.d.ts +0 -108
  331. package/dist/kernel/replay-engine.d.ts.map +0 -1
  332. package/dist/kernel/replay-engine.js +0 -241
  333. package/dist/kernel/replay-engine.js.map +0 -1
  334. package/dist/kernel/replay-processor.d.ts +0 -109
  335. package/dist/kernel/replay-processor.d.ts.map +0 -1
  336. package/dist/kernel/replay-processor.js +0 -118
  337. package/dist/kernel/replay-processor.js.map +0 -1
  338. package/dist/kernel/simulation/filesystem-simulator.d.ts +0 -3
  339. package/dist/kernel/simulation/filesystem-simulator.d.ts.map +0 -1
  340. package/dist/kernel/simulation/filesystem-simulator.js +0 -81
  341. package/dist/kernel/simulation/filesystem-simulator.js.map +0 -1
  342. package/dist/kernel/simulation/git-simulator.d.ts +0 -5
  343. package/dist/kernel/simulation/git-simulator.d.ts.map +0 -1
  344. package/dist/kernel/simulation/git-simulator.js +0 -115
  345. package/dist/kernel/simulation/git-simulator.js.map +0 -1
  346. package/dist/kernel/simulation/package-simulator.d.ts +0 -5
  347. package/dist/kernel/simulation/package-simulator.d.ts.map +0 -1
  348. package/dist/kernel/simulation/package-simulator.js +0 -164
  349. package/dist/kernel/simulation/package-simulator.js.map +0 -1
  350. package/dist/kernel/simulation/registry.d.ts +0 -3
  351. package/dist/kernel/simulation/registry.d.ts.map +0 -1
  352. package/dist/kernel/simulation/registry.js +0 -24
  353. package/dist/kernel/simulation/registry.js.map +0 -1
  354. package/dist/kernel/simulation/types.d.ts +0 -35
  355. package/dist/kernel/simulation/types.d.ts.map +0 -1
  356. package/dist/kernel/simulation/types.js +0 -4
  357. package/dist/kernel/simulation/types.js.map +0 -1
  358. package/dist/plugins/discovery.d.ts +0 -45
  359. package/dist/plugins/discovery.d.ts.map +0 -1
  360. package/dist/plugins/discovery.js +0 -89
  361. package/dist/plugins/discovery.js.map +0 -1
  362. package/dist/plugins/index.d.ts +0 -10
  363. package/dist/plugins/index.d.ts.map +0 -1
  364. package/dist/plugins/index.js +0 -7
  365. package/dist/plugins/index.js.map +0 -1
  366. package/dist/plugins/registry.d.ts +0 -52
  367. package/dist/plugins/registry.d.ts.map +0 -1
  368. package/dist/plugins/registry.js +0 -148
  369. package/dist/plugins/registry.js.map +0 -1
  370. package/dist/plugins/sandbox.d.ts +0 -87
  371. package/dist/plugins/sandbox.d.ts.map +0 -1
  372. package/dist/plugins/sandbox.js +0 -122
  373. package/dist/plugins/sandbox.js.map +0 -1
  374. package/dist/plugins/types.d.ts +0 -61
  375. package/dist/plugins/types.d.ts.map +0 -1
  376. package/dist/plugins/types.js +0 -16
  377. package/dist/plugins/types.js.map +0 -1
  378. package/dist/plugins/validator.d.ts +0 -36
  379. package/dist/plugins/validator.d.ts.map +0 -1
  380. package/dist/plugins/validator.js +0 -276
  381. package/dist/plugins/validator.js.map +0 -1
  382. package/dist/policy/evaluator.d.ts +0 -41
  383. package/dist/policy/evaluator.d.ts.map +0 -1
  384. package/dist/policy/evaluator.js +0 -111
  385. package/dist/policy/evaluator.js.map +0 -1
  386. package/dist/policy/loader.d.ts +0 -13
  387. package/dist/policy/loader.d.ts.map +0 -1
  388. package/dist/policy/loader.js +0 -118
  389. package/dist/policy/loader.js.map +0 -1
  390. package/dist/policy/pack-loader.d.ts +0 -40
  391. package/dist/policy/pack-loader.d.ts.map +0 -1
  392. package/dist/policy/pack-loader.js +0 -138
  393. package/dist/policy/pack-loader.js.map +0 -1
  394. package/dist/policy/yaml-loader.d.ts +0 -23
  395. package/dist/policy/yaml-loader.d.ts.map +0 -1
  396. package/dist/policy/yaml-loader.js +0 -222
  397. package/dist/policy/yaml-loader.js.map +0 -1
  398. package/dist/renderers/index.d.ts +0 -6
  399. package/dist/renderers/index.d.ts.map +0 -1
  400. package/dist/renderers/index.js +0 -4
  401. package/dist/renderers/index.js.map +0 -1
  402. package/dist/renderers/registry.d.ts +0 -39
  403. package/dist/renderers/registry.d.ts.map +0 -1
  404. package/dist/renderers/registry.js +0 -97
  405. package/dist/renderers/registry.js.map +0 -1
  406. package/dist/renderers/tui-renderer.d.ts +0 -18
  407. package/dist/renderers/tui-renderer.d.ts.map +0 -1
  408. package/dist/renderers/tui-renderer.js +0 -57
  409. package/dist/renderers/tui-renderer.js.map +0 -1
  410. package/dist/renderers/types.d.ts +0 -52
  411. package/dist/renderers/types.d.ts.map +0 -1
  412. package/dist/renderers/types.js +0 -4
  413. package/dist/renderers/types.js.map +0 -1
  414. package/dist/telemetry/index.d.ts +0 -3
  415. package/dist/telemetry/index.d.ts.map +0 -1
  416. package/dist/telemetry/index.js +0 -2
  417. package/dist/telemetry/index.js.map +0 -1
  418. package/dist/telemetry/runtimeLogger.d.ts +0 -9
  419. package/dist/telemetry/runtimeLogger.d.ts.map +0 -1
  420. package/dist/telemetry/runtimeLogger.js +0 -68
  421. package/dist/telemetry/runtimeLogger.js.map +0 -1
  422. package/dist/telemetry/types.d.ts +0 -22
  423. package/dist/telemetry/types.d.ts.map +0 -1
  424. package/dist/telemetry/types.js +0 -4
  425. package/dist/telemetry/types.js.map +0 -1
  426. package/hooks/pre-commit +0 -28
  427. /package/dist/{cli/args.d.ts → args.d.ts} +0 -0
  428. /package/dist/{cli/args.js → args.js} +0 -0
  429. /package/dist/{cli/bin.d.ts → bin.d.ts} +0 -0
  430. /package/dist/{cli/colors.d.ts → colors.d.ts} +0 -0
  431. /package/dist/{cli/colors.js → colors.js} +0 -0
  432. /package/dist/{cli/commands → commands}/claude-init.d.ts +0 -0
  433. /package/dist/{cli/commands → commands}/plugin.d.ts +0 -0
  434. /package/dist/{cli/replay.d.ts → replay.d.ts} +0 -0
@@ -0,0 +1,92 @@
1
+ // CLI command: agentguard export — export a governance session to a portable JSONL file.
2
+ // Uses SQLite storage backend.
3
+ import { writeFileSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
5
+ import { parseArgs } from '../args.js';
6
+ /**
7
+ * Current schema version for the event/decision data shape.
8
+ * Bump this when the DomainEvent or GovernanceDecisionRecord structure changes.
9
+ */
10
+ export const EXPORT_SCHEMA_VERSION = 1;
11
+ // ---------------------------------------------------------------------------
12
+ // Public command
13
+ // ---------------------------------------------------------------------------
14
+ export async function exportSession(args, storageConfig) {
15
+ const parsed = parseArgs(args, {
16
+ boolean: ['--last'],
17
+ string: ['--output', '-o'],
18
+ alias: { '-o': '--output' },
19
+ });
20
+ const config = storageConfig ?? { backend: 'sqlite' };
21
+ // Resolve runId
22
+ let runId;
23
+ if (parsed.flags.last) {
24
+ const { createStorageBundle } = await import('@red-codes/storage');
25
+ const storage = await createStorageBundle(config);
26
+ if (!storage.db) {
27
+ process.stderr.write(' Error: SQLite storage backend did not initialize database.\n');
28
+ process.exitCode = 1;
29
+ return;
30
+ }
31
+ const { getLatestRunId } = await import('@red-codes/storage');
32
+ const db = storage.db;
33
+ runId = getLatestRunId(db) ?? undefined;
34
+ storage.close();
35
+ if (!runId) {
36
+ process.stderr.write('\n \x1b[31mError:\x1b[0m No runs recorded yet.\n\n');
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ }
41
+ else {
42
+ runId = parsed.positional[0];
43
+ }
44
+ if (!runId) {
45
+ process.stderr.write('\n Usage: agentguard export <runId> [--output <file>]\n');
46
+ process.stderr.write(' agentguard export --last\n\n');
47
+ process.exitCode = 1;
48
+ return;
49
+ }
50
+ // Load events and decisions from SQLite
51
+ const { createStorageBundle } = await import('@red-codes/storage');
52
+ const storage = await createStorageBundle(config);
53
+ if (!storage.db) {
54
+ process.stderr.write(' Error: SQLite storage backend did not initialize database.\n');
55
+ process.exitCode = 1;
56
+ return;
57
+ }
58
+ const { loadRunEvents, loadRunDecisions } = await import('@red-codes/storage');
59
+ const db = storage.db;
60
+ const events = loadRunEvents(db, runId);
61
+ const decisions = loadRunDecisions(db, runId);
62
+ storage.close();
63
+ if (events.length === 0) {
64
+ process.stderr.write(`\n \x1b[31mError:\x1b[0m Run "${runId}" has no events to export.\n\n`);
65
+ process.exitCode = 1;
66
+ return;
67
+ }
68
+ // Determine output path
69
+ const outputPath = resolve(parsed.flags.output || `${runId}.agentguard.jsonl`);
70
+ // Build export file: header + events + decisions
71
+ const header = {
72
+ __agentguard_export: true,
73
+ version: 1,
74
+ schemaVersion: EXPORT_SCHEMA_VERSION,
75
+ runId,
76
+ exportedAt: Date.now(),
77
+ eventCount: events.length,
78
+ decisionCount: decisions.length,
79
+ sourceBackend: 'sqlite',
80
+ };
81
+ const lines = [
82
+ JSON.stringify(header),
83
+ ...events.map((e) => JSON.stringify(e)),
84
+ ...decisions.map((d) => JSON.stringify(d)),
85
+ ];
86
+ writeFileSync(outputPath, lines.join('\n') + '\n', 'utf8');
87
+ process.stderr.write(`\n \x1b[32m\u2713\x1b[0m Exported run \x1b[1m${runId}\x1b[0m\n`);
88
+ process.stderr.write(` Events: ${events.length}\n`);
89
+ process.stderr.write(` Decisions: ${decisions.length}\n`);
90
+ process.stderr.write(` Output: ${outputPath}\n\n`);
91
+ }
92
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { RendererRegistry } from '@red-codes/renderers';
2
+ import type { StorageConfig } from '@red-codes/storage';
3
+ export interface GuardOptions {
4
+ /** Single policy path (backwards compatible) */
5
+ policy?: string;
6
+ /** Multiple policy paths for composition */
7
+ policies?: string[];
8
+ dryRun?: boolean;
9
+ verbose?: boolean;
10
+ trace?: boolean;
11
+ stdin?: boolean;
12
+ simulate?: boolean;
13
+ /** Optional pre-configured renderer registry (for custom renderers) */
14
+ renderers?: RendererRegistry;
15
+ /** Storage backend config */
16
+ store?: StorageConfig;
17
+ /** Skip auto-opening session viewer in browser after run */
18
+ noOpen?: boolean;
19
+ }
20
+ export declare function guard(_args: string[], options?: GuardOptions): Promise<number>;
21
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/commands/guard.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8JxF"}
@@ -0,0 +1,272 @@
1
+ // CLI command: agentguard guard — start the governed action runtime.
2
+ // Reads stdin for action proposals (JSON), evaluates them, writes results to stdout.
3
+ // Uses the renderer plugin system for all human-facing output.
4
+ // Supports policy composition: multiple --policy flags merged with precedence.
5
+ import { createKernel } from '@red-codes/kernel';
6
+ import { createLiveRegistry } from '@red-codes/adapters';
7
+ import { loadPolicyDefs, loadComposedPolicies, describeComposition } from '../policy-resolver.js';
8
+ import { createSimulatorRegistry } from '@red-codes/kernel';
9
+ import { createGitSimulator } from '@red-codes/kernel';
10
+ import { createFilesystemSimulator } from '@red-codes/kernel';
11
+ import { createPackageSimulator } from '@red-codes/kernel';
12
+ import { createDependencyGraphSimulator } from '@red-codes/kernel';
13
+ import { generateSeed, createSeededRng } from '@red-codes/core';
14
+ import { simpleHash } from '@red-codes/core';
15
+ import { createPluginRegistry, loadSimulatorPlugins } from '@red-codes/plugins';
16
+ import { createRendererRegistry } from '@red-codes/renderers';
17
+ import { createTuiRenderer } from '@red-codes/renderers';
18
+ import { createEvent, POLICY_COMPOSED, POLICY_TRACE_RECORDED } from '@red-codes/events';
19
+ import { createStorageBundle } from '@red-codes/storage';
20
+ import { createCloudSinks } from '@red-codes/telemetry';
21
+ import { loadIdentity, resolveMode } from '@red-codes/telemetry-client';
22
+ export async function guard(_args, options = {}) {
23
+ // Buffer stdin immediately — async setup below can cause a race where piped
24
+ // input arrives (and EOF fires) before processStdin() attaches 'data' handlers.
25
+ // resume() switches stdin to flowing mode so Node.js buffers chunks in memory.
26
+ if (!process.stdin.isTTY) {
27
+ process.stdin.resume();
28
+ }
29
+ // Resolve policies — use composition if multiple paths provided
30
+ const explicitPaths = options.policies ?? (options.policy ? [options.policy] : undefined);
31
+ const useComposition = explicitPaths && explicitPaths.length > 1;
32
+ let policyDefs;
33
+ let policyName;
34
+ if (useComposition || explicitPaths) {
35
+ const composition = loadComposedPolicies(explicitPaths);
36
+ policyDefs = composition.policies;
37
+ policyName = describeComposition(composition);
38
+ }
39
+ else {
40
+ policyDefs = loadPolicyDefs(options.policy);
41
+ policyName = options.policy || 'default (no file)';
42
+ }
43
+ // Build simulator registry (enabled by default)
44
+ const simulators = createSimulatorRegistry();
45
+ if (options.simulate !== false) {
46
+ simulators.register(createGitSimulator());
47
+ simulators.register(createFilesystemSimulator());
48
+ simulators.register(createDependencyGraphSimulator());
49
+ simulators.register(createPackageSimulator());
50
+ // Load community simulator plugins from the plugin registry
51
+ try {
52
+ const pluginRegistry = createPluginRegistry();
53
+ await loadSimulatorPlugins(pluginRegistry, (sim) => simulators.register(sim));
54
+ }
55
+ catch {
56
+ // Plugin loading failures are non-fatal — built-in simulators still work
57
+ }
58
+ }
59
+ // Create seeded RNG — seed is stored in session metadata for deterministic replay
60
+ const seed = generateSeed();
61
+ const rng = createSeededRng(seed);
62
+ // Generate run ID using seeded RNG so both sinks share it
63
+ const runId = `run_${Date.now()}_${simpleHash(rng.random().toString())}`;
64
+ // Create sinks — use storage bundle
65
+ const storeConfig = options.store ?? { backend: 'sqlite' };
66
+ const storage = await createStorageBundle(storeConfig);
67
+ const eventSink = storage.createEventSink(runId);
68
+ const decisionSink = storage.createDecisionSink(runId);
69
+ // Cloud telemetry — anonymous by default
70
+ const identity = loadIdentity();
71
+ const telemetryMode = resolveMode(identity);
72
+ const apiKey = process.env.AGENTGUARD_API_KEY ?? identity?.enrollment_token;
73
+ const cloudSinks = await createCloudSinks({
74
+ mode: telemetryMode,
75
+ serverUrl: process.env.AGENTGUARD_TELEMETRY_URL ??
76
+ identity?.server_url ??
77
+ 'https://agentguard-cloud.vercel.app',
78
+ runId,
79
+ agentId: 'cli',
80
+ installId: identity?.install_id,
81
+ apiKey,
82
+ });
83
+ // First-run telemetry notice
84
+ if (!identity || !identity.noticed) {
85
+ try {
86
+ process.stderr.write('\n \x1b[2mAgentGuard sends anonymous usage data to help improve the product.\n' +
87
+ ' Run `agentguard telemetry off` to disable.\x1b[0m\n\n');
88
+ const { saveIdentity: save, generateIdentity: gen } = await import('@red-codes/telemetry-client');
89
+ const updated = identity ?? gen('anonymous');
90
+ save({ ...updated, noticed: true });
91
+ }
92
+ catch {
93
+ // Non-fatal
94
+ }
95
+ }
96
+ // Build kernel config
97
+ const kernelConfig = {
98
+ runId,
99
+ rng,
100
+ policyDefs,
101
+ dryRun: options.dryRun ?? false,
102
+ adapters: options.dryRun ? undefined : createLiveRegistry(),
103
+ sinks: [eventSink, cloudSinks.eventSink],
104
+ decisionSinks: [decisionSink, cloudSinks.decisionSink],
105
+ simulators: simulators.all().length > 0 ? simulators : undefined,
106
+ };
107
+ const kernel = createKernel(kernelConfig);
108
+ cloudSinks.registerRun();
109
+ // Emit PolicyComposed event when multiple policies are composed
110
+ if (useComposition) {
111
+ const composition = loadComposedPolicies(explicitPaths);
112
+ const composedEvent = createEvent(POLICY_COMPOSED, {
113
+ policyCount: composition.policies.length,
114
+ totalRules: composition.policies.reduce((sum, p) => sum + p.rules.length, 0),
115
+ sources: composition.sources.map((s) => ({
116
+ path: s.path,
117
+ layer: s.layer,
118
+ policyId: s.policy.id,
119
+ ruleCount: s.policy.rules.length,
120
+ })),
121
+ layers: composition.layers,
122
+ });
123
+ eventSink.write(composedEvent);
124
+ }
125
+ // Set up renderer registry — use provided registry or create default with TUI
126
+ const renderers = options.renderers ?? createRendererRegistry();
127
+ if (!options.renderers) {
128
+ renderers.register(createTuiRenderer({ verbose: options.verbose, trace: options.trace }));
129
+ }
130
+ // Record session start in the sessions table (SQLite only)
131
+ const simCount = simulators.all().length;
132
+ if (storage.sessions) {
133
+ storage.sessions.start(runId, 'guard', {
134
+ policyFile: policyName,
135
+ dryRun: options.dryRun,
136
+ storageBackend: storeConfig.backend,
137
+ simulatorCount: simCount,
138
+ });
139
+ }
140
+ // Notify renderers: run started
141
+ renderers.notifyRunStarted({
142
+ runId,
143
+ policyName,
144
+ invariantCount: 6,
145
+ verbose: options.verbose,
146
+ dryRun: options.dryRun,
147
+ simulatorCount: simCount,
148
+ trace: options.trace,
149
+ });
150
+ if (!options.stdin) {
151
+ // Interactive mode prompt
152
+ process.stderr.write(` ${'\x1b[2m'}Listening for actions on stdin (JSON per line)...${'\x1b[0m'}\n`);
153
+ process.stderr.write(` ${'\x1b[2m'}Press Ctrl+C to stop.${'\x1b[0m'}\n\n`);
154
+ }
155
+ return processStdin(kernel, renderers, storage, cloudSinks, {
156
+ noOpen: options.noOpen,
157
+ storeConfig,
158
+ });
159
+ }
160
+ async function processStdin(kernel, renderers, storage, cloudSinks, viewerOpts) {
161
+ const startTime = Date.now();
162
+ let totalActions = 0;
163
+ let allowedCount = 0;
164
+ let deniedCount = 0;
165
+ let violationCount = 0;
166
+ return new Promise((resolvePromise) => {
167
+ let buffer = '';
168
+ process.stdin.setEncoding('utf8');
169
+ process.stdin.on('data', async (chunk) => {
170
+ buffer += chunk;
171
+ const lines = buffer.split('\n');
172
+ buffer = lines.pop() || '';
173
+ for (const line of lines) {
174
+ const trimmed = line.trim();
175
+ if (!trimmed)
176
+ continue;
177
+ try {
178
+ const rawAction = JSON.parse(trimmed);
179
+ const result = await kernel.propose(rawAction);
180
+ totalActions++;
181
+ if (result.allowed)
182
+ allowedCount++;
183
+ else
184
+ deniedCount++;
185
+ violationCount += result.decision.violations.length;
186
+ // Dispatch to all registered renderers
187
+ renderers.notifyActionResult(result);
188
+ // Dispatch policy trace events for real-time visualization
189
+ for (const event of result.events) {
190
+ if (event.kind === POLICY_TRACE_RECORDED) {
191
+ renderers.notifyPolicyTrace(event);
192
+ }
193
+ }
194
+ if (result.decisionRecord) {
195
+ renderers.notifyDecisionRecord(result.decisionRecord);
196
+ }
197
+ // Write machine-readable result to stdout
198
+ const output = {
199
+ allowed: result.allowed,
200
+ executed: result.executed,
201
+ action: result.decision.intent.action,
202
+ target: result.decision.intent.target,
203
+ reason: result.decision.decision.reason,
204
+ violations: result.decision.violations.map((v) => v.name),
205
+ runId: result.runId,
206
+ decisionRecordId: result.decisionRecord?.recordId,
207
+ };
208
+ process.stdout.write(JSON.stringify(output) + '\n');
209
+ }
210
+ catch (err) {
211
+ process.stderr.write(` \x1b[31mError:\x1b[0m Invalid JSON input: ${err.message}\n`);
212
+ }
213
+ }
214
+ });
215
+ const shutdown = async () => {
216
+ kernel.shutdown();
217
+ // Record session end in the sessions table (SQLite only)
218
+ if (storage.sessions) {
219
+ storage.sessions.end(kernel.getRunId(), {
220
+ totalActions,
221
+ allowed: allowedCount,
222
+ denied: deniedCount,
223
+ violations: violationCount,
224
+ durationMs: Date.now() - startTime,
225
+ });
226
+ }
227
+ renderers.notifyRunEnded({
228
+ runId: kernel.getRunId(),
229
+ totalActions,
230
+ allowed: allowedCount,
231
+ denied: deniedCount,
232
+ violations: violationCount,
233
+ durationMs: Date.now() - startTime,
234
+ });
235
+ renderers.disposeAll();
236
+ await cloudSinks.flush();
237
+ cloudSinks.stop();
238
+ storage.close();
239
+ };
240
+ process.stdin.on('end', async () => {
241
+ await shutdown();
242
+ await openSessionViewer(viewerOpts);
243
+ resolvePromise(0);
244
+ });
245
+ process.on('SIGINT', async () => {
246
+ await shutdown();
247
+ process.stderr.write('\n \x1b[33mAgentGuard stopped.\x1b[0m\n\n');
248
+ await openSessionViewer(viewerOpts);
249
+ resolvePromise(0);
250
+ });
251
+ });
252
+ }
253
+ async function openSessionViewer(opts) {
254
+ if (opts.noOpen)
255
+ return;
256
+ try {
257
+ const { sessionViewer } = await import('./session-viewer.js');
258
+ const viewerArgs = ['--last'];
259
+ if (opts.storeConfig.backend === 'sqlite') {
260
+ viewerArgs.push('--store', 'sqlite');
261
+ if (opts.storeConfig.dbPath) {
262
+ viewerArgs.push('--db-path', opts.storeConfig.dbPath);
263
+ }
264
+ }
265
+ await sessionViewer(viewerArgs, opts.storeConfig);
266
+ }
267
+ catch (err) {
268
+ // Non-fatal — session viewer is best-effort
269
+ process.stderr.write(` \x1b[2mSession viewer: ${err instanceof Error ? err.message : String(err)}\x1b[0m\n`);
270
+ }
271
+ }
272
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/commands/guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { StorageConfig } from '@red-codes/storage';
2
+ export declare function importSession(args: string[], storageConfig?: StorageConfig): Promise<void>;
3
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4HhG"}
@@ -1,17 +1,11 @@
1
1
  // CLI command: agentguard import — import a governance session from a portable JSONL file.
2
- import { readFileSync, appendFileSync, existsSync, mkdirSync } from 'node:fs';
3
- import { join, resolve } from 'node:path';
2
+ // Uses SQLite storage backend.
3
+ import { readFileSync, existsSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
4
5
  import { parseArgs } from '../args.js';
5
- import { getEventFilePath } from '../../events/jsonl.js';
6
- import { getDecisionFilePath } from '../../events/decision-jsonl.js';
7
- import { validateEvent } from '../../events/schema.js';
8
- const BASE_DIR = '.agentguard';
9
- function ensureDir(dirPath) {
10
- if (!existsSync(dirPath)) {
11
- mkdirSync(dirPath, { recursive: true });
12
- }
13
- }
14
- export async function importSession(args) {
6
+ import { validateEvent } from '@red-codes/events';
7
+ import { EXPORT_SCHEMA_VERSION } from './export.js';
8
+ export async function importSession(args, storageConfig) {
15
9
  const parsed = parseArgs(args, {
16
10
  string: ['--as'],
17
11
  });
@@ -50,6 +44,14 @@ export async function importSession(args) {
50
44
  process.exitCode = 1;
51
45
  return;
52
46
  }
47
+ // Validate schema version (backward-compatible: missing schemaVersion treated as 1)
48
+ const schemaVersion = header.schemaVersion ?? 1;
49
+ if (schemaVersion > EXPORT_SCHEMA_VERSION) {
50
+ process.stderr.write(`\n \x1b[31mError:\x1b[0m Export uses schema version ${schemaVersion} but this version of AgentGuard only supports up to ${EXPORT_SCHEMA_VERSION}.\n` +
51
+ ' Please upgrade AgentGuard to import this file.\n\n');
52
+ process.exitCode = 1;
53
+ return;
54
+ }
53
55
  const runId = parsed.flags.as || header.runId;
54
56
  if (!runId) {
55
57
  process.stderr.write('\n \x1b[31mError:\x1b[0m No runId found in export header and none provided via --as.\n\n');
@@ -91,22 +93,19 @@ export async function importSession(args) {
91
93
  process.exitCode = 1;
92
94
  return;
93
95
  }
94
- // Check if run already exists
95
- const eventFilePath = getEventFilePath(runId);
96
- if (existsSync(eventFilePath)) {
97
- process.stderr.write(`\n \x1b[33m\u26A0\x1b[0m Run "${runId}" already exists. Events will be appended.\n`);
96
+ // Write to SQLite via storage sinks
97
+ const config = storageConfig ?? { backend: 'sqlite' };
98
+ const { createStorageBundle } = await import('@red-codes/storage');
99
+ const storage = await createStorageBundle(config);
100
+ const eventSink = storage.createEventSink(runId);
101
+ const decisionSink = storage.createDecisionSink(runId);
102
+ for (const event of events) {
103
+ eventSink.write(event);
98
104
  }
99
- // Write events
100
- ensureDir(join(BASE_DIR, 'events'));
101
- const eventData = events.map((e) => JSON.stringify(e)).join('\n') + '\n';
102
- appendFileSync(eventFilePath, eventData, 'utf8');
103
- // Write decisions (if any)
104
- if (decisions.length > 0) {
105
- ensureDir(join(BASE_DIR, 'decisions'));
106
- const decisionFilePath = getDecisionFilePath(runId);
107
- const decisionData = decisions.map((d) => JSON.stringify(d)).join('\n') + '\n';
108
- appendFileSync(decisionFilePath, decisionData, 'utf8');
105
+ for (const decision of decisions) {
106
+ decisionSink.write(decision);
109
107
  }
108
+ storage.close();
110
109
  process.stderr.write(`\n \x1b[32m\u2713\x1b[0m Imported run \x1b[1m${runId}\x1b[0m\n`);
111
110
  process.stderr.write(` Events: ${events.length}\n`);
112
111
  process.stderr.write(` Decisions: ${decisions.length}\n`);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,+BAA+B;AAE/B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc,EAAE,aAA6B;IAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE;QAC7B,MAAM,EAAE,CAAC,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC/E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,YAAY,MAAM,CAAC,CAAC;QACtF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAC5E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,IAAI,MAA8B,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAA2B,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC9F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,0FAA0F,CAC3F,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,oFAAoF;IACpF,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IAChD,IAAI,aAAa,GAAG,qBAAqB,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,aAAa,uDAAuD,qBAAqB,KAAK;YACpJ,sDAAsD,CACzD,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAI,MAAM,CAAC,KAAK,CAAC,EAAa,IAAI,MAAM,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2FAA2F,CAC5F,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEzD,4BAA4B;IAC5B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;YAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,MAAM,CAAqB,CAAC;YAC5D,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,MAAgC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,MAAM,SAAS,GAA+B,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAC;YAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC5F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,MAAM,MAAM,GAAG,aAAa,IAAI,EAAE,OAAO,EAAE,QAAiB,EAAE,CAAC;IAC/D,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,KAAK,WAAW,CAAC,CAAC;IACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,YAAY,MAAM,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Main init command handler.
3
+ */
4
+ export declare function init(args: string[]): Promise<number>;
5
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAyCA;;GAEG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1D"}