@red-codes/agentguard 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +298 -0
  3. package/dist/adapters/claude-code.d.ts +24 -0
  4. package/dist/adapters/claude-code.d.ts.map +1 -0
  5. package/dist/adapters/claude-code.js +99 -0
  6. package/dist/adapters/claude-code.js.map +1 -0
  7. package/dist/adapters/file.d.ts +3 -0
  8. package/dist/adapters/file.d.ts.map +1 -0
  9. package/dist/adapters/file.js +35 -0
  10. package/dist/adapters/file.js.map +1 -0
  11. package/dist/adapters/git.d.ts +3 -0
  12. package/dist/adapters/git.d.ts.map +1 -0
  13. package/dist/adapters/git.js +61 -0
  14. package/dist/adapters/git.js.map +1 -0
  15. package/dist/adapters/registry.d.ts +5 -0
  16. package/dist/adapters/registry.d.ts.map +1 -0
  17. package/dist/adapters/registry.js +15 -0
  18. package/dist/adapters/registry.js.map +1 -0
  19. package/dist/adapters/shell.d.ts +8 -0
  20. package/dist/adapters/shell.d.ts.map +1 -0
  21. package/dist/adapters/shell.js +27 -0
  22. package/dist/adapters/shell.js.map +1 -0
  23. package/dist/cli/args.d.ts +25 -0
  24. package/dist/cli/args.d.ts.map +1 -0
  25. package/dist/cli/args.js +63 -0
  26. package/dist/cli/args.js.map +1 -0
  27. package/dist/cli/bin.d.ts +3 -0
  28. package/dist/cli/bin.d.ts.map +1 -0
  29. package/dist/cli/bin.js +5769 -0
  30. package/dist/cli/bin.js.map +7 -0
  31. package/dist/cli/colors.d.ts +11 -0
  32. package/dist/cli/colors.d.ts.map +1 -0
  33. package/dist/cli/colors.js +44 -0
  34. package/dist/cli/colors.js.map +1 -0
  35. package/dist/cli/commands/claude-hook.d.ts +2 -0
  36. package/dist/cli/commands/claude-hook.d.ts.map +1 -0
  37. package/dist/cli/commands/claude-hook.js +110 -0
  38. package/dist/cli/commands/claude-hook.js.map +1 -0
  39. package/dist/cli/commands/claude-init.d.ts +2 -0
  40. package/dist/cli/commands/claude-init.d.ts.map +1 -0
  41. package/dist/cli/commands/claude-init.js +150 -0
  42. package/dist/cli/commands/claude-init.js.map +1 -0
  43. package/dist/cli/commands/export.d.ts +11 -0
  44. package/dist/cli/commands/export.d.ts.map +1 -0
  45. package/dist/cli/commands/export.js +113 -0
  46. package/dist/cli/commands/export.js.map +1 -0
  47. package/dist/cli/commands/guard.d.ts +12 -0
  48. package/dist/cli/commands/guard.d.ts.map +1 -0
  49. package/dist/cli/commands/guard.js +145 -0
  50. package/dist/cli/commands/guard.js.map +1 -0
  51. package/dist/cli/commands/import.d.ts +2 -0
  52. package/dist/cli/commands/import.d.ts.map +1 -0
  53. package/dist/cli/commands/import.js +115 -0
  54. package/dist/cli/commands/import.js.map +1 -0
  55. package/dist/cli/commands/inspect.d.ts +3 -0
  56. package/dist/cli/commands/inspect.d.ts.map +1 -0
  57. package/dist/cli/commands/inspect.js +185 -0
  58. package/dist/cli/commands/inspect.js.map +1 -0
  59. package/dist/cli/commands/plugin.d.ts +7 -0
  60. package/dist/cli/commands/plugin.d.ts.map +1 -0
  61. package/dist/cli/commands/plugin.js +234 -0
  62. package/dist/cli/commands/plugin.js.map +1 -0
  63. package/dist/cli/commands/replay.d.ts +12 -0
  64. package/dist/cli/commands/replay.d.ts.map +1 -0
  65. package/dist/cli/commands/replay.js +208 -0
  66. package/dist/cli/commands/replay.js.map +1 -0
  67. package/dist/cli/file-event-store.d.ts +41 -0
  68. package/dist/cli/file-event-store.d.ts.map +1 -0
  69. package/dist/cli/file-event-store.js +219 -0
  70. package/dist/cli/file-event-store.js.map +1 -0
  71. package/dist/cli/policy-resolver.d.ts +4 -0
  72. package/dist/cli/policy-resolver.d.ts.map +1 -0
  73. package/dist/cli/policy-resolver.js +62 -0
  74. package/dist/cli/policy-resolver.js.map +1 -0
  75. package/dist/cli/recorder.d.ts +36 -0
  76. package/dist/cli/recorder.d.ts.map +1 -0
  77. package/dist/cli/recorder.js +85 -0
  78. package/dist/cli/recorder.js.map +1 -0
  79. package/dist/cli/replay.d.ts +2 -0
  80. package/dist/cli/replay.d.ts.map +1 -0
  81. package/dist/cli/replay.js +310 -0
  82. package/dist/cli/replay.js.map +1 -0
  83. package/dist/cli/session-store.d.ts +41 -0
  84. package/dist/cli/session-store.d.ts.map +1 -0
  85. package/dist/cli/session-store.js +95 -0
  86. package/dist/cli/session-store.js.map +1 -0
  87. package/dist/cli/tui.d.ts +24 -0
  88. package/dist/cli/tui.d.ts.map +1 -0
  89. package/dist/cli/tui.js +197 -0
  90. package/dist/cli/tui.js.map +1 -0
  91. package/dist/core/actions.d.ts +11 -0
  92. package/dist/core/actions.d.ts.map +1 -0
  93. package/dist/core/actions.js +112 -0
  94. package/dist/core/actions.js.map +1 -0
  95. package/dist/core/adapters.d.ts +19 -0
  96. package/dist/core/adapters.d.ts.map +1 -0
  97. package/dist/core/adapters.js +85 -0
  98. package/dist/core/adapters.js.map +1 -0
  99. package/dist/core/execution-log/bridge.d.ts +12 -0
  100. package/dist/core/execution-log/bridge.d.ts.map +1 -0
  101. package/dist/core/execution-log/bridge.js +112 -0
  102. package/dist/core/execution-log/bridge.js.map +1 -0
  103. package/dist/core/execution-log/event-log.d.ts +7 -0
  104. package/dist/core/execution-log/event-log.d.ts.map +1 -0
  105. package/dist/core/execution-log/event-log.js +103 -0
  106. package/dist/core/execution-log/event-log.js.map +1 -0
  107. package/dist/core/execution-log/event-projections.d.ts +28 -0
  108. package/dist/core/execution-log/event-projections.d.ts.map +1 -0
  109. package/dist/core/execution-log/event-projections.js +272 -0
  110. package/dist/core/execution-log/event-projections.js.map +1 -0
  111. package/dist/core/execution-log/event-schema.d.ts +56 -0
  112. package/dist/core/execution-log/event-schema.d.ts.map +1 -0
  113. package/dist/core/execution-log/event-schema.js +160 -0
  114. package/dist/core/execution-log/event-schema.js.map +1 -0
  115. package/dist/core/execution-log/index.d.ts +7 -0
  116. package/dist/core/execution-log/index.d.ts.map +1 -0
  117. package/dist/core/execution-log/index.js +13 -0
  118. package/dist/core/execution-log/index.js.map +1 -0
  119. package/dist/core/hash.d.ts +5 -0
  120. package/dist/core/hash.d.ts.map +1 -0
  121. package/dist/core/hash.js +13 -0
  122. package/dist/core/hash.js.map +1 -0
  123. package/dist/core/rng.d.ts +29 -0
  124. package/dist/core/rng.d.ts.map +1 -0
  125. package/dist/core/rng.js +48 -0
  126. package/dist/core/rng.js.map +1 -0
  127. package/dist/core/types.d.ts +746 -0
  128. package/dist/core/types.d.ts.map +1 -0
  129. package/dist/core/types.js +8 -0
  130. package/dist/core/types.js.map +1 -0
  131. package/dist/events/bus.d.ts +24 -0
  132. package/dist/events/bus.d.ts.map +1 -0
  133. package/dist/events/bus.js +64 -0
  134. package/dist/events/bus.js.map +1 -0
  135. package/dist/events/decision-jsonl.d.ts +8 -0
  136. package/dist/events/decision-jsonl.d.ts.map +1 -0
  137. package/dist/events/decision-jsonl.js +44 -0
  138. package/dist/events/decision-jsonl.js.map +1 -0
  139. package/dist/events/jsonl.d.ts +8 -0
  140. package/dist/events/jsonl.d.ts.map +1 -0
  141. package/dist/events/jsonl.js +46 -0
  142. package/dist/events/jsonl.js.map +1 -0
  143. package/dist/events/schema.d.ts +59 -0
  144. package/dist/events/schema.d.ts.map +1 -0
  145. package/dist/events/schema.js +296 -0
  146. package/dist/events/schema.js.map +1 -0
  147. package/dist/events/store.d.ts +7 -0
  148. package/dist/events/store.d.ts.map +1 -0
  149. package/dist/events/store.js +64 -0
  150. package/dist/events/store.js.map +1 -0
  151. package/dist/invariants/checker.d.ts +15 -0
  152. package/dist/invariants/checker.d.ts.map +1 -0
  153. package/dist/invariants/checker.js +52 -0
  154. package/dist/invariants/checker.js.map +1 -0
  155. package/dist/invariants/definitions.d.ts +33 -0
  156. package/dist/invariants/definitions.d.ts.map +1 -0
  157. package/dist/invariants/definitions.js +168 -0
  158. package/dist/invariants/definitions.js.map +1 -0
  159. package/dist/kernel/aab.d.ts +26 -0
  160. package/dist/kernel/aab.d.ts.map +1 -0
  161. package/dist/kernel/aab.js +149 -0
  162. package/dist/kernel/aab.js.map +1 -0
  163. package/dist/kernel/blast-radius.d.ts +60 -0
  164. package/dist/kernel/blast-radius.d.ts.map +1 -0
  165. package/dist/kernel/blast-radius.js +146 -0
  166. package/dist/kernel/blast-radius.js.map +1 -0
  167. package/dist/kernel/decision.d.ts +40 -0
  168. package/dist/kernel/decision.d.ts.map +1 -0
  169. package/dist/kernel/decision.js +92 -0
  170. package/dist/kernel/decision.js.map +1 -0
  171. package/dist/kernel/decisions/factory.d.ts +12 -0
  172. package/dist/kernel/decisions/factory.d.ts.map +1 -0
  173. package/dist/kernel/decisions/factory.js +56 -0
  174. package/dist/kernel/decisions/factory.js.map +1 -0
  175. package/dist/kernel/decisions/types.d.ts +70 -0
  176. package/dist/kernel/decisions/types.d.ts.map +1 -0
  177. package/dist/kernel/decisions/types.js +5 -0
  178. package/dist/kernel/decisions/types.js.map +1 -0
  179. package/dist/kernel/evidence.d.ts +29 -0
  180. package/dist/kernel/evidence.d.ts.map +1 -0
  181. package/dist/kernel/evidence.js +61 -0
  182. package/dist/kernel/evidence.js.map +1 -0
  183. package/dist/kernel/kernel.d.ts +47 -0
  184. package/dist/kernel/kernel.d.ts.map +1 -0
  185. package/dist/kernel/kernel.js +377 -0
  186. package/dist/kernel/kernel.js.map +1 -0
  187. package/dist/kernel/monitor.d.ts +35 -0
  188. package/dist/kernel/monitor.d.ts.map +1 -0
  189. package/dist/kernel/monitor.js +144 -0
  190. package/dist/kernel/monitor.js.map +1 -0
  191. package/dist/kernel/replay-comparator.d.ts +72 -0
  192. package/dist/kernel/replay-comparator.d.ts.map +1 -0
  193. package/dist/kernel/replay-comparator.js +251 -0
  194. package/dist/kernel/replay-comparator.js.map +1 -0
  195. package/dist/kernel/replay-engine.d.ts +108 -0
  196. package/dist/kernel/replay-engine.d.ts.map +1 -0
  197. package/dist/kernel/replay-engine.js +241 -0
  198. package/dist/kernel/replay-engine.js.map +1 -0
  199. package/dist/kernel/replay-processor.d.ts +109 -0
  200. package/dist/kernel/replay-processor.d.ts.map +1 -0
  201. package/dist/kernel/replay-processor.js +118 -0
  202. package/dist/kernel/replay-processor.js.map +1 -0
  203. package/dist/kernel/simulation/filesystem-simulator.d.ts +3 -0
  204. package/dist/kernel/simulation/filesystem-simulator.d.ts.map +1 -0
  205. package/dist/kernel/simulation/filesystem-simulator.js +81 -0
  206. package/dist/kernel/simulation/filesystem-simulator.js.map +1 -0
  207. package/dist/kernel/simulation/git-simulator.d.ts +5 -0
  208. package/dist/kernel/simulation/git-simulator.d.ts.map +1 -0
  209. package/dist/kernel/simulation/git-simulator.js +115 -0
  210. package/dist/kernel/simulation/git-simulator.js.map +1 -0
  211. package/dist/kernel/simulation/package-simulator.d.ts +5 -0
  212. package/dist/kernel/simulation/package-simulator.d.ts.map +1 -0
  213. package/dist/kernel/simulation/package-simulator.js +164 -0
  214. package/dist/kernel/simulation/package-simulator.js.map +1 -0
  215. package/dist/kernel/simulation/registry.d.ts +3 -0
  216. package/dist/kernel/simulation/registry.d.ts.map +1 -0
  217. package/dist/kernel/simulation/registry.js +24 -0
  218. package/dist/kernel/simulation/registry.js.map +1 -0
  219. package/dist/kernel/simulation/types.d.ts +35 -0
  220. package/dist/kernel/simulation/types.d.ts.map +1 -0
  221. package/dist/kernel/simulation/types.js +4 -0
  222. package/dist/kernel/simulation/types.js.map +1 -0
  223. package/dist/plugins/discovery.d.ts +45 -0
  224. package/dist/plugins/discovery.d.ts.map +1 -0
  225. package/dist/plugins/discovery.js +89 -0
  226. package/dist/plugins/discovery.js.map +1 -0
  227. package/dist/plugins/index.d.ts +10 -0
  228. package/dist/plugins/index.d.ts.map +1 -0
  229. package/dist/plugins/index.js +7 -0
  230. package/dist/plugins/index.js.map +1 -0
  231. package/dist/plugins/registry.d.ts +52 -0
  232. package/dist/plugins/registry.d.ts.map +1 -0
  233. package/dist/plugins/registry.js +148 -0
  234. package/dist/plugins/registry.js.map +1 -0
  235. package/dist/plugins/sandbox.d.ts +87 -0
  236. package/dist/plugins/sandbox.d.ts.map +1 -0
  237. package/dist/plugins/sandbox.js +122 -0
  238. package/dist/plugins/sandbox.js.map +1 -0
  239. package/dist/plugins/types.d.ts +61 -0
  240. package/dist/plugins/types.d.ts.map +1 -0
  241. package/dist/plugins/types.js +16 -0
  242. package/dist/plugins/types.js.map +1 -0
  243. package/dist/plugins/validator.d.ts +36 -0
  244. package/dist/plugins/validator.d.ts.map +1 -0
  245. package/dist/plugins/validator.js +276 -0
  246. package/dist/plugins/validator.js.map +1 -0
  247. package/dist/policy/evaluator.d.ts +41 -0
  248. package/dist/policy/evaluator.d.ts.map +1 -0
  249. package/dist/policy/evaluator.js +111 -0
  250. package/dist/policy/evaluator.js.map +1 -0
  251. package/dist/policy/loader.d.ts +13 -0
  252. package/dist/policy/loader.d.ts.map +1 -0
  253. package/dist/policy/loader.js +118 -0
  254. package/dist/policy/loader.js.map +1 -0
  255. package/dist/policy/pack-loader.d.ts +40 -0
  256. package/dist/policy/pack-loader.d.ts.map +1 -0
  257. package/dist/policy/pack-loader.js +138 -0
  258. package/dist/policy/pack-loader.js.map +1 -0
  259. package/dist/policy/yaml-loader.d.ts +23 -0
  260. package/dist/policy/yaml-loader.d.ts.map +1 -0
  261. package/dist/policy/yaml-loader.js +222 -0
  262. package/dist/policy/yaml-loader.js.map +1 -0
  263. package/dist/renderers/index.d.ts +6 -0
  264. package/dist/renderers/index.d.ts.map +1 -0
  265. package/dist/renderers/index.js +4 -0
  266. package/dist/renderers/index.js.map +1 -0
  267. package/dist/renderers/registry.d.ts +39 -0
  268. package/dist/renderers/registry.d.ts.map +1 -0
  269. package/dist/renderers/registry.js +97 -0
  270. package/dist/renderers/registry.js.map +1 -0
  271. package/dist/renderers/tui-renderer.d.ts +18 -0
  272. package/dist/renderers/tui-renderer.d.ts.map +1 -0
  273. package/dist/renderers/tui-renderer.js +57 -0
  274. package/dist/renderers/tui-renderer.js.map +1 -0
  275. package/dist/renderers/types.d.ts +52 -0
  276. package/dist/renderers/types.d.ts.map +1 -0
  277. package/dist/renderers/types.js +4 -0
  278. package/dist/renderers/types.js.map +1 -0
  279. package/dist/telemetry/index.d.ts +3 -0
  280. package/dist/telemetry/index.d.ts.map +1 -0
  281. package/dist/telemetry/index.js +2 -0
  282. package/dist/telemetry/index.js.map +1 -0
  283. package/dist/telemetry/runtimeLogger.d.ts +9 -0
  284. package/dist/telemetry/runtimeLogger.d.ts.map +1 -0
  285. package/dist/telemetry/runtimeLogger.js +68 -0
  286. package/dist/telemetry/runtimeLogger.js.map +1 -0
  287. package/dist/telemetry/types.d.ts +22 -0
  288. package/dist/telemetry/types.d.ts.map +1 -0
  289. package/dist/telemetry/types.js +4 -0
  290. package/dist/telemetry/types.js.map +1 -0
  291. package/hooks/post-commit +57 -0
  292. package/hooks/post-merge +33 -0
  293. package/hooks/pre-commit +28 -0
  294. package/package.json +72 -0
@@ -0,0 +1,234 @@
1
+ // CLI command: agentguard plugin — manage installed plugins.
2
+ //
3
+ // Subcommands:
4
+ // list List all installed plugins
5
+ // install <source> Install a plugin from a local path
6
+ // remove <id> Remove an installed plugin
7
+ // enable <id> Enable a disabled plugin
8
+ // disable <id> Disable an installed plugin
9
+ // search [query] Search for plugins on npm
10
+ import { readFileSync, existsSync } from 'node:fs';
11
+ import { join, resolve } from 'node:path';
12
+ import { createPluginRegistry } from '../../plugins/registry.js';
13
+ import { searchNpmPlugins, searchLocalPlugins } from '../../plugins/discovery.js';
14
+ import { bold, color, dim } from '../colors.js';
15
+ const STORAGE_DIR = '.agentguard';
16
+ /**
17
+ * Main plugin command handler.
18
+ *
19
+ * Routes to the appropriate subcommand based on the first argument.
20
+ */
21
+ export async function plugin(args) {
22
+ const subcommand = args[0];
23
+ switch (subcommand) {
24
+ case 'list':
25
+ case 'ls':
26
+ return pluginList();
27
+ case 'install':
28
+ case 'add':
29
+ return pluginInstall(args.slice(1));
30
+ case 'remove':
31
+ case 'rm':
32
+ return pluginRemove(args.slice(1));
33
+ case 'enable':
34
+ return pluginEnable(args.slice(1));
35
+ case 'disable':
36
+ return pluginDisable(args.slice(1));
37
+ case 'search':
38
+ return pluginSearch(args.slice(1));
39
+ case undefined:
40
+ case 'help':
41
+ case '--help':
42
+ case '-h':
43
+ printPluginHelp();
44
+ return 0;
45
+ default:
46
+ console.error(` Unknown plugin subcommand: ${subcommand}`);
47
+ console.error(' Run "agentguard plugin help" for usage info.');
48
+ return 1;
49
+ }
50
+ }
51
+ function pluginList() {
52
+ const registry = createPluginRegistry({ storageDir: STORAGE_DIR });
53
+ const plugins = registry.list();
54
+ if (plugins.length === 0) {
55
+ console.log(`\n ${dim('No plugins installed.')}`);
56
+ console.log(` ${dim('Run "agentguard plugin install <path>" to install a plugin.')}\n`);
57
+ return 0;
58
+ }
59
+ console.log(`\n ${bold('Installed Plugins')} ${dim(`(${plugins.length})`)}\n`);
60
+ for (const p of plugins) {
61
+ const status = p.enabled ? color('enabled', 'green') : color('disabled', 'yellow');
62
+ const typeLabel = color(p.manifest.type, 'cyan');
63
+ console.log(` ${bold(p.manifest.name)} ${dim(`v${p.manifest.version}`)}`);
64
+ console.log(` ID: ${p.manifest.id}`);
65
+ console.log(` Type: ${typeLabel}`);
66
+ console.log(` Status: ${status}`);
67
+ console.log(` Source: ${dim(p.source)}`);
68
+ if (p.manifest.description) {
69
+ console.log(` Desc: ${dim(p.manifest.description)}`);
70
+ }
71
+ if (p.manifest.capabilities && p.manifest.capabilities.length > 0) {
72
+ console.log(` Caps: ${dim(p.manifest.capabilities.join(', '))}`);
73
+ }
74
+ console.log();
75
+ }
76
+ return 0;
77
+ }
78
+ function pluginInstall(args) {
79
+ const source = args[0];
80
+ if (!source) {
81
+ console.error(' Error: Please specify a plugin source (local path or package name).');
82
+ return 1;
83
+ }
84
+ const resolvedPath = resolve(source);
85
+ // Try to load manifest from the source
86
+ const manifest = loadManifestFromPath(resolvedPath);
87
+ if (!manifest) {
88
+ console.error(` Error: Could not find a valid plugin manifest at "${source}".`);
89
+ console.error(' Expected: package.json with an "agentguard" field containing the manifest.');
90
+ return 1;
91
+ }
92
+ const registry = createPluginRegistry({ storageDir: STORAGE_DIR });
93
+ const result = registry.install(manifest, source);
94
+ if (!result.valid) {
95
+ console.error(`\n ${color('Installation failed', 'red')} for ${source}:\n`);
96
+ for (const err of result.errors) {
97
+ console.error(` ${color('✗', 'red')} ${err.field}: ${err.message}`);
98
+ }
99
+ console.log();
100
+ return 1;
101
+ }
102
+ console.log(`\n ${color('✓', 'green')} Installed ${bold(manifest.name)} ${dim(`v${manifest.version}`)}`);
103
+ console.log(` ID: ${manifest.id}`);
104
+ console.log(` Type: ${manifest.type}\n`);
105
+ return 0;
106
+ }
107
+ function pluginRemove(args) {
108
+ const pluginId = args[0];
109
+ if (!pluginId) {
110
+ console.error(' Error: Please specify a plugin ID to remove.');
111
+ return 1;
112
+ }
113
+ const registry = createPluginRegistry({ storageDir: STORAGE_DIR });
114
+ const entry = registry.get(pluginId);
115
+ if (!entry) {
116
+ console.error(` Error: Plugin "${pluginId}" is not installed.`);
117
+ return 1;
118
+ }
119
+ const removed = registry.remove(pluginId);
120
+ if (!removed) {
121
+ console.error(` Error: Cannot remove "${pluginId}" — other plugins depend on it.`);
122
+ return 1;
123
+ }
124
+ console.log(`\n ${color('✓', 'green')} Removed ${bold(entry.manifest.name)} ${dim(`v${entry.manifest.version}`)}\n`);
125
+ return 0;
126
+ }
127
+ function pluginEnable(args) {
128
+ const pluginId = args[0];
129
+ if (!pluginId) {
130
+ console.error(' Error: Please specify a plugin ID to enable.');
131
+ return 1;
132
+ }
133
+ const registry = createPluginRegistry({ storageDir: STORAGE_DIR });
134
+ if (!registry.enable(pluginId)) {
135
+ console.error(` Error: Plugin "${pluginId}" is not installed.`);
136
+ return 1;
137
+ }
138
+ console.log(` ${color('✓', 'green')} Enabled "${pluginId}"`);
139
+ return 0;
140
+ }
141
+ function pluginDisable(args) {
142
+ const pluginId = args[0];
143
+ if (!pluginId) {
144
+ console.error(' Error: Please specify a plugin ID to disable.');
145
+ return 1;
146
+ }
147
+ const registry = createPluginRegistry({ storageDir: STORAGE_DIR });
148
+ if (!registry.disable(pluginId)) {
149
+ console.error(` Error: Plugin "${pluginId}" is not installed.`);
150
+ return 1;
151
+ }
152
+ console.log(` ${color('✓', 'green')} Disabled "${pluginId}"`);
153
+ return 0;
154
+ }
155
+ async function pluginSearch(args) {
156
+ const query = args[0];
157
+ const localDir = args.includes('--local') ? args[args.indexOf('--local') + 1] : undefined;
158
+ console.log(`\n ${bold('Searching for plugins')}${query ? ` matching "${query}"` : ''}...\n`);
159
+ // Search npm registry
160
+ const npmResults = await searchNpmPlugins(query);
161
+ // Search local directory if specified
162
+ const localResults = localDir ? searchLocalPlugins({ directory: localDir }) : [];
163
+ const total = npmResults.length + localResults.length;
164
+ if (total === 0) {
165
+ console.log(` ${dim('No plugins found.')}\n`);
166
+ return 0;
167
+ }
168
+ if (npmResults.length > 0) {
169
+ console.log(` ${bold('npm registry')} ${dim(`(${npmResults.length} results)`)}\n`);
170
+ for (const p of npmResults) {
171
+ console.log(` ${bold(p.name)} ${dim(`v${p.version}`)}`);
172
+ if (p.description) {
173
+ console.log(` ${dim(p.description)}`);
174
+ }
175
+ }
176
+ console.log();
177
+ }
178
+ if (localResults.length > 0) {
179
+ console.log(` ${bold('Local')} ${dim(`(${localResults.length} results)`)}\n`);
180
+ for (const p of localResults) {
181
+ console.log(` ${bold(p.name)} ${dim(`v${p.version}`)} ${p.type ? color(p.type, 'cyan') : ''}`);
182
+ if (p.description) {
183
+ console.log(` ${dim(p.description)}`);
184
+ }
185
+ console.log(` ${dim(p.sourceId)}`);
186
+ }
187
+ console.log();
188
+ }
189
+ return 0;
190
+ }
191
+ /**
192
+ * Load a PluginManifest from a local path.
193
+ *
194
+ * Expects the path to be a directory containing a package.json
195
+ * with an "agentguard" field containing the plugin manifest.
196
+ */
197
+ function loadManifestFromPath(dirPath) {
198
+ const pkgPath = join(dirPath, 'package.json');
199
+ if (!existsSync(pkgPath))
200
+ return null;
201
+ try {
202
+ const raw = readFileSync(pkgPath, 'utf8');
203
+ const pkg = JSON.parse(raw);
204
+ return pkg.agentguard ?? null;
205
+ }
206
+ catch {
207
+ return null;
208
+ }
209
+ }
210
+ function printPluginHelp() {
211
+ console.log(`
212
+ ${bold('agentguard plugin')} — Manage AgentGuard plugins
213
+
214
+ ${bold('Usage:')}
215
+ agentguard plugin <command> [options]
216
+
217
+ ${bold('Commands:')}
218
+ list, ls List all installed plugins
219
+ install, add <path> Install a plugin from a local path
220
+ remove, rm <id> Remove an installed plugin by ID
221
+ enable <id> Enable a disabled plugin
222
+ disable <id> Disable an installed plugin
223
+ search [query] Search for plugins on npm
224
+
225
+ ${bold('Examples:')}
226
+ agentguard plugin list
227
+ agentguard plugin install ./my-renderer-plugin
228
+ agentguard plugin remove agentguard-renderer-json
229
+ agentguard plugin disable agentguard-renderer-json
230
+ agentguard plugin search renderer
231
+ agentguard plugin search --local ./plugins
232
+ `);
233
+ }
234
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/cli/commands/plugin.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,eAAe;AACf,iDAAiD;AACjD,yDAAyD;AACzD,iDAAiD;AACjD,+CAA+C;AAC/C,kDAAkD;AAClD,gDAAgD;AAEhD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,UAAU,EAAE,CAAC;QAEtB,KAAK,SAAS,CAAC;QACf,KAAK,KAAK;YACR,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAErC,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QAEX;YACE,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,6DAA6D,CAAC,IAAI,CAAC,CAAC;QACzF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAEhF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,uDAAuD,MAAM,IAAI,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAC7F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,qBAAqB,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,iCAAiC,CAAC,CAAC;QACpF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CACzG,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,qBAAqB,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,QAAQ,GAAG,CAAC,CAAC;IAC9D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,qBAAqB,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC;IAC/D,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAE/F,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjD,sCAAsC;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAEtD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACpF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CACrF,CAAC;YACF,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAEzB,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;IACV,IAAI,CAAC,mBAAmB,CAAC;;IAEzB,IAAI,CAAC,QAAQ,CAAC;;;IAGd,IAAI,CAAC,WAAW,CAAC;;;;;;;;IAQjB,IAAI,CAAC,WAAW,CAAC;;;;;;;CAOpB,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * replay command — Replay execution events from a session.
3
+ *
4
+ * Supports two modes:
5
+ * 1. Governance replay (--run <runId> or --last): Loads JSONL events from the
6
+ * AgentGuard event store and reconstructs action encounters using the replay engine.
7
+ * 2. Execution log replay (default): Loads NDJSON execution event logs for raw
8
+ * event-level display.
9
+ */
10
+ import type { Command } from 'commander';
11
+ export declare function registerReplayCommand(program: Command): void;
12
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgH5D"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * replay command — Replay execution events from a session.
3
+ *
4
+ * Supports two modes:
5
+ * 1. Governance replay (--run <runId> or --last): Loads JSONL events from the
6
+ * AgentGuard event store and reconstructs action encounters using the replay engine.
7
+ * 2. Execution log replay (default): Loads NDJSON execution event logs for raw
8
+ * event-level display.
9
+ */
10
+ import pino from 'pino';
11
+ import { createExecutionEventLog } from '../../core/execution-log/event-log.js';
12
+ import { loadReplaySession, listRunIds, getLatestRunId } from '../../kernel/replay-engine.js';
13
+ export function registerReplayCommand(program) {
14
+ program
15
+ .command('replay')
16
+ .description('Replay execution events from a session log')
17
+ .argument('[file]', 'NDJSON event log file to replay (legacy mode)')
18
+ .option('-f, --from <eventId>', 'Start replay from this event ID')
19
+ .option('--kind <kind>', 'Filter by event kind')
20
+ .option('--actor <actor>', 'Filter by actor (human, agent, system)')
21
+ .option('--seed <seed>', 'Seed for deterministic replay (overrides session seed)')
22
+ .option('--limit <n>', 'Maximum events to display', '50')
23
+ .option('-r, --run <runId>', 'Replay a governance run by ID')
24
+ .option('-l, --last', 'Replay the most recent governance run')
25
+ .option('--list-runs', 'List available governance runs')
26
+ .option('--summary', 'Show session summary only')
27
+ .option('--denied-only', 'Show only denied actions')
28
+ .option('--base-dir <dir>', 'Base directory for event storage', '.agentguard')
29
+ .action(async (file, options) => {
30
+ // --- Governance replay mode ---
31
+ if (options.listRuns) {
32
+ renderRunList(options.baseDir);
33
+ return;
34
+ }
35
+ if (options.run || options.last) {
36
+ const runId = options.run || getLatestRunId(options.baseDir);
37
+ if (!runId) {
38
+ console.error('\n No governance runs found.');
39
+ console.error(' Run "agentguard guard" first to generate events.\n');
40
+ return;
41
+ }
42
+ const session = loadReplaySession(runId, { baseDir: options.baseDir });
43
+ if (!session) {
44
+ console.error(`\n Run "${runId}" not found or has no events.\n`);
45
+ return;
46
+ }
47
+ if (options.summary) {
48
+ renderSessionSummary(session);
49
+ }
50
+ else {
51
+ renderGovernanceReplay(session, { deniedOnly: options.deniedOnly });
52
+ }
53
+ return;
54
+ }
55
+ // --- Legacy execution log replay mode ---
56
+ const targetFile = file || '.events.ndjson';
57
+ const logger = pino({ name: 'agentguard-replay' });
58
+ const fs = await import('node:fs');
59
+ if (!fs.existsSync(targetFile)) {
60
+ logger.error({ file: targetFile }, 'Event log file not found');
61
+ console.error(`Event log file not found: ${targetFile}`);
62
+ console.error('Run "agentguard guard" first to generate events.');
63
+ return;
64
+ }
65
+ const log = createExecutionEventLog();
66
+ const ndjson = fs.readFileSync(targetFile, 'utf-8');
67
+ const loaded = log.fromNDJSON(ndjson);
68
+ logger.info({ loaded }, 'Events loaded');
69
+ let events = options.from ? log.replay(options.from) : log.replay();
70
+ if (options.kind) {
71
+ events = events.filter((e) => e.kind === options.kind);
72
+ }
73
+ if (options.actor) {
74
+ events = events.filter((e) => e.actor === options.actor);
75
+ }
76
+ const limit = parseInt(options.limit, 10);
77
+ const displayed = events.slice(0, limit);
78
+ if (options.seed) {
79
+ console.log(`\nSeed: ${options.seed} (override)`);
80
+ }
81
+ console.log(`\nReplaying ${displayed.length} of ${events.length} events:\n`);
82
+ for (const event of displayed) {
83
+ const time = new Date(event.timestamp).toISOString();
84
+ const ctx = event.context.file ? ` (${event.context.file})` : '';
85
+ const caused = event.causedBy ? ` <- ${event.causedBy}` : '';
86
+ console.log(` [${time}] ${event.actor}/${event.source} ${event.kind}${ctx}${caused}`);
87
+ console.log(` id: ${event.id}`);
88
+ if (Object.keys(event.payload).length > 0) {
89
+ console.log(` payload: ${JSON.stringify(event.payload)}`);
90
+ }
91
+ console.log();
92
+ }
93
+ if (events.length > limit) {
94
+ console.log(` ... and ${events.length - limit} more events`);
95
+ }
96
+ });
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Governance replay rendering
100
+ // ---------------------------------------------------------------------------
101
+ function renderRunList(baseDir) {
102
+ const runIds = listRunIds(baseDir);
103
+ if (runIds.length === 0) {
104
+ console.error('\n No governance runs found.');
105
+ console.error(' Run "agentguard guard" first to generate events.\n');
106
+ return;
107
+ }
108
+ console.log('\n Available governance runs:\n');
109
+ for (const id of runIds.slice(0, 20)) {
110
+ console.log(` ${id}`);
111
+ }
112
+ if (runIds.length > 20) {
113
+ console.log(` ... and ${runIds.length - 20} more`);
114
+ }
115
+ console.log('\n Usage: agentguard replay --run <runId>\n');
116
+ }
117
+ function renderSessionSummary(session) {
118
+ const s = session.summary;
119
+ console.log(`\n Governance Session Summary`);
120
+ console.log(` Run: ${session.runId}`);
121
+ console.log(` Events: ${session.events.length}`);
122
+ console.log(` Duration: ${formatDuration(s.durationMs)}`);
123
+ console.log('');
124
+ console.log(` Actions: ${s.totalActions}`);
125
+ console.log(` Allowed: ${s.allowed}`);
126
+ console.log(` Denied: ${s.denied}`);
127
+ console.log(` Executed: ${s.executed}`);
128
+ console.log(` Failed: ${s.failed}`);
129
+ console.log(` Violations: ${s.violations}`);
130
+ console.log(` Escalations: ${s.escalations}`);
131
+ console.log(` Simulations: ${s.simulationsRun}`);
132
+ if (Object.keys(s.actionTypes).length > 0) {
133
+ console.log('\n Action types:');
134
+ const sorted = Object.entries(s.actionTypes).sort((a, b) => b[1] - a[1]);
135
+ for (const [type, count] of sorted) {
136
+ console.log(` ${type.padEnd(24)} ${count}`);
137
+ }
138
+ }
139
+ if (s.denialReasons.length > 0) {
140
+ console.log('\n Denial reasons:');
141
+ for (const reason of s.denialReasons) {
142
+ console.log(` - ${truncate(reason, 70)}`);
143
+ }
144
+ }
145
+ console.log('');
146
+ }
147
+ function renderGovernanceReplay(session, options = {}) {
148
+ let actions = session.actions;
149
+ if (options.deniedOnly) {
150
+ actions = actions.filter((a) => !a.allowed);
151
+ }
152
+ console.log(`\n Governance Replay — ${session.runId}`);
153
+ console.log(` ${session.events.length} events, ${session.actions.length} actions`);
154
+ console.log('');
155
+ if (actions.length === 0) {
156
+ console.log(' No actions to display.\n');
157
+ return;
158
+ }
159
+ for (const action of actions) {
160
+ renderAction(action);
161
+ }
162
+ renderSessionSummary(session);
163
+ }
164
+ function renderAction(action) {
165
+ const icon = action.allowed ? (action.succeeded ? '+' : '!') : 'x';
166
+ const status = action.allowed
167
+ ? action.succeeded
168
+ ? 'ALLOWED+EXECUTED'
169
+ : action.executed
170
+ ? 'ALLOWED+FAILED'
171
+ : 'ALLOWED (dry-run)'
172
+ : 'DENIED';
173
+ const time = new Date(action.requestedEvent.timestamp).toISOString().slice(11, 19);
174
+ console.log(` [${time}] ${icon} ${action.actionType} -> ${action.target || '(none)'}`);
175
+ console.log(` Status: ${status}`);
176
+ if (action.decisionEvent) {
177
+ const reason = action.decisionEvent.reason || '';
178
+ if (reason) {
179
+ console.log(` Reason: ${truncate(reason, 60)}`);
180
+ }
181
+ }
182
+ if (action.simulationEvent) {
183
+ const risk = action.simulationEvent.riskLevel || 'unknown';
184
+ const blast = action.simulationEvent.blastRadius ?? '?';
185
+ console.log(` Simulation: risk=${risk}, blast=${blast}`);
186
+ }
187
+ for (const gov of action.governanceEvents) {
188
+ const detail = gov.reason || gov.invariant || gov.policy || '';
189
+ console.log(` Violation: ${gov.kind}${detail ? ` — ${truncate(detail, 50)}` : ''}`);
190
+ }
191
+ console.log('');
192
+ }
193
+ // ---------------------------------------------------------------------------
194
+ // Helpers
195
+ // ---------------------------------------------------------------------------
196
+ function formatDuration(ms) {
197
+ if (ms < 1000)
198
+ return `${ms}ms`;
199
+ const seconds = Math.floor(ms / 1000);
200
+ const minutes = Math.floor(seconds / 60);
201
+ if (minutes === 0)
202
+ return `${seconds}s`;
203
+ return `${minutes}m ${seconds % 60}s`;
204
+ }
205
+ function truncate(str, max) {
206
+ return str.length > max ? str.slice(0, max - 3) + '...' : str;
207
+ }
208
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/cli/commands/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { DomainEvent, EventStore } from '../core/types.js';
2
+ /**
3
+ * Create a file-based event store.
4
+ * Events are persisted as newline-delimited JSON (JSONL) files.
5
+ * Each session gets its own file for efficient append operations.
6
+ */
7
+ export declare function createFileEventStore(sessionId?: string): EventStore & {
8
+ sessionId: string;
9
+ };
10
+ /**
11
+ * List all session IDs that have stored events.
12
+ */
13
+ export declare function listSessions(): string[];
14
+ /**
15
+ * Load events from a specific session.
16
+ */
17
+ export declare function loadSession(sessionId: string): DomainEvent[];
18
+ /** Metadata header written as the first line of an exported session file. */
19
+ export interface ExportHeader {
20
+ readonly __agentguard_export: true;
21
+ readonly version: 1;
22
+ readonly sessionId: string;
23
+ readonly exportedAt: number;
24
+ readonly eventCount: number;
25
+ }
26
+ /**
27
+ * Export a session to a portable JSONL file for sharing.
28
+ * The first line is a metadata header; subsequent lines are domain events.
29
+ * Returns the number of events exported.
30
+ */
31
+ export declare function exportSession(sessionId: string, outputPath: string): number;
32
+ /**
33
+ * Import a session from a portable JSONL file.
34
+ * Validates the export header and each event before writing.
35
+ * Returns the sessionId and number of events imported.
36
+ */
37
+ export declare function importSession(inputPath: string, targetSessionId?: string): {
38
+ sessionId: string;
39
+ eventCount: number;
40
+ };
41
+ //# sourceMappingURL=file-event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-event-store.d.ts","sourceRoot":"","sources":["../../src/cli/file-event-store.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAgB7E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAwE3F;AA+BD;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAKvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAe5D;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiB3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,MAAM,GACvB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAoD3C"}