@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.
- package/LICENSE +190 -0
- package/README.md +298 -0
- package/dist/adapters/claude-code.d.ts +24 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +99 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/file.d.ts +3 -0
- package/dist/adapters/file.d.ts.map +1 -0
- package/dist/adapters/file.js +35 -0
- package/dist/adapters/file.js.map +1 -0
- package/dist/adapters/git.d.ts +3 -0
- package/dist/adapters/git.d.ts.map +1 -0
- package/dist/adapters/git.js +61 -0
- package/dist/adapters/git.js.map +1 -0
- package/dist/adapters/registry.d.ts +5 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +15 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/shell.d.ts +8 -0
- package/dist/adapters/shell.d.ts.map +1 -0
- package/dist/adapters/shell.js +27 -0
- package/dist/adapters/shell.js.map +1 -0
- package/dist/cli/args.d.ts +25 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +63 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +5769 -0
- package/dist/cli/bin.js.map +7 -0
- package/dist/cli/colors.d.ts +11 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +44 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/claude-hook.d.ts +2 -0
- package/dist/cli/commands/claude-hook.d.ts.map +1 -0
- package/dist/cli/commands/claude-hook.js +110 -0
- package/dist/cli/commands/claude-hook.js.map +1 -0
- package/dist/cli/commands/claude-init.d.ts +2 -0
- package/dist/cli/commands/claude-init.d.ts.map +1 -0
- package/dist/cli/commands/claude-init.js +150 -0
- package/dist/cli/commands/claude-init.js.map +1 -0
- package/dist/cli/commands/export.d.ts +11 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +113 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/guard.d.ts +12 -0
- package/dist/cli/commands/guard.d.ts.map +1 -0
- package/dist/cli/commands/guard.js +145 -0
- package/dist/cli/commands/guard.js.map +1 -0
- package/dist/cli/commands/import.d.ts +2 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +115 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +3 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +185 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +7 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +234 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/replay.d.ts +12 -0
- package/dist/cli/commands/replay.d.ts.map +1 -0
- package/dist/cli/commands/replay.js +208 -0
- package/dist/cli/commands/replay.js.map +1 -0
- package/dist/cli/file-event-store.d.ts +41 -0
- package/dist/cli/file-event-store.d.ts.map +1 -0
- package/dist/cli/file-event-store.js +219 -0
- package/dist/cli/file-event-store.js.map +1 -0
- package/dist/cli/policy-resolver.d.ts +4 -0
- package/dist/cli/policy-resolver.d.ts.map +1 -0
- package/dist/cli/policy-resolver.js +62 -0
- package/dist/cli/policy-resolver.js.map +1 -0
- package/dist/cli/recorder.d.ts +36 -0
- package/dist/cli/recorder.d.ts.map +1 -0
- package/dist/cli/recorder.js +85 -0
- package/dist/cli/recorder.js.map +1 -0
- package/dist/cli/replay.d.ts +2 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +310 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/session-store.d.ts +41 -0
- package/dist/cli/session-store.d.ts.map +1 -0
- package/dist/cli/session-store.js +95 -0
- package/dist/cli/session-store.js.map +1 -0
- package/dist/cli/tui.d.ts +24 -0
- package/dist/cli/tui.d.ts.map +1 -0
- package/dist/cli/tui.js +197 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/core/actions.d.ts +11 -0
- package/dist/core/actions.d.ts.map +1 -0
- package/dist/core/actions.js +112 -0
- package/dist/core/actions.js.map +1 -0
- package/dist/core/adapters.d.ts +19 -0
- package/dist/core/adapters.d.ts.map +1 -0
- package/dist/core/adapters.js +85 -0
- package/dist/core/adapters.js.map +1 -0
- package/dist/core/execution-log/bridge.d.ts +12 -0
- package/dist/core/execution-log/bridge.d.ts.map +1 -0
- package/dist/core/execution-log/bridge.js +112 -0
- package/dist/core/execution-log/bridge.js.map +1 -0
- package/dist/core/execution-log/event-log.d.ts +7 -0
- package/dist/core/execution-log/event-log.d.ts.map +1 -0
- package/dist/core/execution-log/event-log.js +103 -0
- package/dist/core/execution-log/event-log.js.map +1 -0
- package/dist/core/execution-log/event-projections.d.ts +28 -0
- package/dist/core/execution-log/event-projections.d.ts.map +1 -0
- package/dist/core/execution-log/event-projections.js +272 -0
- package/dist/core/execution-log/event-projections.js.map +1 -0
- package/dist/core/execution-log/event-schema.d.ts +56 -0
- package/dist/core/execution-log/event-schema.d.ts.map +1 -0
- package/dist/core/execution-log/event-schema.js +160 -0
- package/dist/core/execution-log/event-schema.js.map +1 -0
- package/dist/core/execution-log/index.d.ts +7 -0
- package/dist/core/execution-log/index.d.ts.map +1 -0
- package/dist/core/execution-log/index.js +13 -0
- package/dist/core/execution-log/index.js.map +1 -0
- package/dist/core/hash.d.ts +5 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +13 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/rng.d.ts +29 -0
- package/dist/core/rng.d.ts.map +1 -0
- package/dist/core/rng.js +48 -0
- package/dist/core/rng.js.map +1 -0
- package/dist/core/types.d.ts +746 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/events/bus.d.ts +24 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +64 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/decision-jsonl.d.ts +8 -0
- package/dist/events/decision-jsonl.d.ts.map +1 -0
- package/dist/events/decision-jsonl.js +44 -0
- package/dist/events/decision-jsonl.js.map +1 -0
- package/dist/events/jsonl.d.ts +8 -0
- package/dist/events/jsonl.d.ts.map +1 -0
- package/dist/events/jsonl.js +46 -0
- package/dist/events/jsonl.js.map +1 -0
- package/dist/events/schema.d.ts +59 -0
- package/dist/events/schema.d.ts.map +1 -0
- package/dist/events/schema.js +296 -0
- package/dist/events/schema.js.map +1 -0
- package/dist/events/store.d.ts +7 -0
- package/dist/events/store.d.ts.map +1 -0
- package/dist/events/store.js +64 -0
- package/dist/events/store.js.map +1 -0
- package/dist/invariants/checker.d.ts +15 -0
- package/dist/invariants/checker.d.ts.map +1 -0
- package/dist/invariants/checker.js +52 -0
- package/dist/invariants/checker.js.map +1 -0
- package/dist/invariants/definitions.d.ts +33 -0
- package/dist/invariants/definitions.d.ts.map +1 -0
- package/dist/invariants/definitions.js +168 -0
- package/dist/invariants/definitions.js.map +1 -0
- package/dist/kernel/aab.d.ts +26 -0
- package/dist/kernel/aab.d.ts.map +1 -0
- package/dist/kernel/aab.js +149 -0
- package/dist/kernel/aab.js.map +1 -0
- package/dist/kernel/blast-radius.d.ts +60 -0
- package/dist/kernel/blast-radius.d.ts.map +1 -0
- package/dist/kernel/blast-radius.js +146 -0
- package/dist/kernel/blast-radius.js.map +1 -0
- package/dist/kernel/decision.d.ts +40 -0
- package/dist/kernel/decision.d.ts.map +1 -0
- package/dist/kernel/decision.js +92 -0
- package/dist/kernel/decision.js.map +1 -0
- package/dist/kernel/decisions/factory.d.ts +12 -0
- package/dist/kernel/decisions/factory.d.ts.map +1 -0
- package/dist/kernel/decisions/factory.js +56 -0
- package/dist/kernel/decisions/factory.js.map +1 -0
- package/dist/kernel/decisions/types.d.ts +70 -0
- package/dist/kernel/decisions/types.d.ts.map +1 -0
- package/dist/kernel/decisions/types.js +5 -0
- package/dist/kernel/decisions/types.js.map +1 -0
- package/dist/kernel/evidence.d.ts +29 -0
- package/dist/kernel/evidence.d.ts.map +1 -0
- package/dist/kernel/evidence.js +61 -0
- package/dist/kernel/evidence.js.map +1 -0
- package/dist/kernel/kernel.d.ts +47 -0
- package/dist/kernel/kernel.d.ts.map +1 -0
- package/dist/kernel/kernel.js +377 -0
- package/dist/kernel/kernel.js.map +1 -0
- package/dist/kernel/monitor.d.ts +35 -0
- package/dist/kernel/monitor.d.ts.map +1 -0
- package/dist/kernel/monitor.js +144 -0
- package/dist/kernel/monitor.js.map +1 -0
- package/dist/kernel/replay-comparator.d.ts +72 -0
- package/dist/kernel/replay-comparator.d.ts.map +1 -0
- package/dist/kernel/replay-comparator.js +251 -0
- package/dist/kernel/replay-comparator.js.map +1 -0
- package/dist/kernel/replay-engine.d.ts +108 -0
- package/dist/kernel/replay-engine.d.ts.map +1 -0
- package/dist/kernel/replay-engine.js +241 -0
- package/dist/kernel/replay-engine.js.map +1 -0
- package/dist/kernel/replay-processor.d.ts +109 -0
- package/dist/kernel/replay-processor.d.ts.map +1 -0
- package/dist/kernel/replay-processor.js +118 -0
- package/dist/kernel/replay-processor.js.map +1 -0
- package/dist/kernel/simulation/filesystem-simulator.d.ts +3 -0
- package/dist/kernel/simulation/filesystem-simulator.d.ts.map +1 -0
- package/dist/kernel/simulation/filesystem-simulator.js +81 -0
- package/dist/kernel/simulation/filesystem-simulator.js.map +1 -0
- package/dist/kernel/simulation/git-simulator.d.ts +5 -0
- package/dist/kernel/simulation/git-simulator.d.ts.map +1 -0
- package/dist/kernel/simulation/git-simulator.js +115 -0
- package/dist/kernel/simulation/git-simulator.js.map +1 -0
- package/dist/kernel/simulation/package-simulator.d.ts +5 -0
- package/dist/kernel/simulation/package-simulator.d.ts.map +1 -0
- package/dist/kernel/simulation/package-simulator.js +164 -0
- package/dist/kernel/simulation/package-simulator.js.map +1 -0
- package/dist/kernel/simulation/registry.d.ts +3 -0
- package/dist/kernel/simulation/registry.d.ts.map +1 -0
- package/dist/kernel/simulation/registry.js +24 -0
- package/dist/kernel/simulation/registry.js.map +1 -0
- package/dist/kernel/simulation/types.d.ts +35 -0
- package/dist/kernel/simulation/types.d.ts.map +1 -0
- package/dist/kernel/simulation/types.js +4 -0
- package/dist/kernel/simulation/types.js.map +1 -0
- package/dist/plugins/discovery.d.ts +45 -0
- package/dist/plugins/discovery.d.ts.map +1 -0
- package/dist/plugins/discovery.js +89 -0
- package/dist/plugins/discovery.js.map +1 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/registry.d.ts +52 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +148 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/sandbox.d.ts +87 -0
- package/dist/plugins/sandbox.d.ts.map +1 -0
- package/dist/plugins/sandbox.js +122 -0
- package/dist/plugins/sandbox.js.map +1 -0
- package/dist/plugins/types.d.ts +61 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +16 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/validator.d.ts +36 -0
- package/dist/plugins/validator.d.ts.map +1 -0
- package/dist/plugins/validator.js +276 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/policy/evaluator.d.ts +41 -0
- package/dist/policy/evaluator.d.ts.map +1 -0
- package/dist/policy/evaluator.js +111 -0
- package/dist/policy/evaluator.js.map +1 -0
- package/dist/policy/loader.d.ts +13 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +118 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/pack-loader.d.ts +40 -0
- package/dist/policy/pack-loader.d.ts.map +1 -0
- package/dist/policy/pack-loader.js +138 -0
- package/dist/policy/pack-loader.js.map +1 -0
- package/dist/policy/yaml-loader.d.ts +23 -0
- package/dist/policy/yaml-loader.d.ts.map +1 -0
- package/dist/policy/yaml-loader.js +222 -0
- package/dist/policy/yaml-loader.js.map +1 -0
- package/dist/renderers/index.d.ts +6 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +4 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/registry.d.ts +39 -0
- package/dist/renderers/registry.d.ts.map +1 -0
- package/dist/renderers/registry.js +97 -0
- package/dist/renderers/registry.js.map +1 -0
- package/dist/renderers/tui-renderer.d.ts +18 -0
- package/dist/renderers/tui-renderer.d.ts.map +1 -0
- package/dist/renderers/tui-renderer.js +57 -0
- package/dist/renderers/tui-renderer.js.map +1 -0
- package/dist/renderers/types.d.ts +52 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +4 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/telemetry/index.d.ts +3 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +2 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/runtimeLogger.d.ts +9 -0
- package/dist/telemetry/runtimeLogger.d.ts.map +1 -0
- package/dist/telemetry/runtimeLogger.js +68 -0
- package/dist/telemetry/runtimeLogger.js.map +1 -0
- package/dist/telemetry/types.d.ts +22 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +4 -0
- package/dist/telemetry/types.js.map +1 -0
- package/hooks/post-commit +57 -0
- package/hooks/post-merge +33 -0
- package/hooks/pre-commit +28 -0
- 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":"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"}
|
|
@@ -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"}
|