@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
package/dist/cli/tui.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// Terminal UI renderer — real-time action stream display.
|
|
2
|
+
// Node.js module. Writes ANSI-colored output to stderr.
|
|
3
|
+
const ANSI = {
|
|
4
|
+
reset: '\x1b[0m',
|
|
5
|
+
bold: '\x1b[1m',
|
|
6
|
+
dim: '\x1b[2m',
|
|
7
|
+
red: '\x1b[31m',
|
|
8
|
+
green: '\x1b[32m',
|
|
9
|
+
yellow: '\x1b[33m',
|
|
10
|
+
blue: '\x1b[34m',
|
|
11
|
+
magenta: '\x1b[35m',
|
|
12
|
+
cyan: '\x1b[36m',
|
|
13
|
+
gray: '\x1b[90m',
|
|
14
|
+
};
|
|
15
|
+
const ICONS = {
|
|
16
|
+
allowed: '\u2713', // ✓
|
|
17
|
+
denied: '\u2717', // ✗
|
|
18
|
+
warning: '\u26A0', // ⚠
|
|
19
|
+
arrow: '\u2192', // →
|
|
20
|
+
bullet: '\u2022', // •
|
|
21
|
+
};
|
|
22
|
+
export function renderBanner(config) {
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push('');
|
|
25
|
+
lines.push(` ${ANSI.bold}${ANSI.cyan}AgentGuard Runtime Active${ANSI.reset}`);
|
|
26
|
+
const parts = [];
|
|
27
|
+
if (config.policyName) {
|
|
28
|
+
parts.push(`policy: ${ANSI.bold}${config.policyName}${ANSI.reset}`);
|
|
29
|
+
}
|
|
30
|
+
if (config.invariantCount !== undefined) {
|
|
31
|
+
parts.push(`invariants: ${ANSI.bold}${config.invariantCount}${ANSI.reset} active`);
|
|
32
|
+
}
|
|
33
|
+
if (parts.length > 0) {
|
|
34
|
+
lines.push(` ${ANSI.dim}${parts.join(' | ')}${ANSI.reset}`);
|
|
35
|
+
}
|
|
36
|
+
lines.push('');
|
|
37
|
+
return lines.join('\n');
|
|
38
|
+
}
|
|
39
|
+
export function renderAction(result, verbose) {
|
|
40
|
+
const intent = result.decision.intent;
|
|
41
|
+
const action = intent.action;
|
|
42
|
+
const target = intent.target;
|
|
43
|
+
if (result.allowed) {
|
|
44
|
+
const exec = result.executed ? '' : ` ${ANSI.dim}(dry-run)${ANSI.reset}`;
|
|
45
|
+
return ` ${ANSI.green}${ICONS.allowed}${ANSI.reset} ${action} ${ANSI.dim}${target}${ANSI.reset}${exec}`;
|
|
46
|
+
}
|
|
47
|
+
const reason = result.decision.decision.reason;
|
|
48
|
+
const policy = result.decision.decision.matchedPolicy;
|
|
49
|
+
const policyTag = policy ? ` (${policy.id})` : '';
|
|
50
|
+
const lines = [];
|
|
51
|
+
lines.push(` ${ANSI.red}${ICONS.denied}${ANSI.reset} ${action} ${target} ${ANSI.red}${ICONS.arrow} DENIED${ANSI.reset}${ANSI.dim}${policyTag}${ANSI.reset}`);
|
|
52
|
+
if (verbose && reason) {
|
|
53
|
+
lines.push(` ${ANSI.dim}${reason}${ANSI.reset}`);
|
|
54
|
+
}
|
|
55
|
+
return lines.join('\n');
|
|
56
|
+
}
|
|
57
|
+
export function renderViolations(result) {
|
|
58
|
+
const violations = result.decision.violations;
|
|
59
|
+
if (violations.length === 0)
|
|
60
|
+
return '';
|
|
61
|
+
const lines = [];
|
|
62
|
+
for (const v of violations) {
|
|
63
|
+
lines.push(` ${ANSI.yellow}${ICONS.warning}${ANSI.reset} invariant violated: ${ANSI.bold}${v.name}${ANSI.reset}`);
|
|
64
|
+
}
|
|
65
|
+
return lines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
export function renderMonitorStatus(decision) {
|
|
68
|
+
const m = decision.monitor;
|
|
69
|
+
const level = ['NORMAL', 'ELEVATED', 'HIGH', 'LOCKDOWN'][m.escalationLevel];
|
|
70
|
+
const levelColor = m.escalationLevel === 0
|
|
71
|
+
? ANSI.green
|
|
72
|
+
: m.escalationLevel === 1
|
|
73
|
+
? ANSI.yellow
|
|
74
|
+
: m.escalationLevel === 2
|
|
75
|
+
? ANSI.red
|
|
76
|
+
: ANSI.bold + ANSI.red;
|
|
77
|
+
return ` ${ANSI.dim}[${levelColor}${level}${ANSI.reset}${ANSI.dim}] evals:${m.totalEvaluations} denied:${m.totalDenials} violations:${m.totalViolations}${ANSI.reset}`;
|
|
78
|
+
}
|
|
79
|
+
export function renderSimulation(simulation) {
|
|
80
|
+
const lines = [];
|
|
81
|
+
const riskColor = simulation.riskLevel === 'high'
|
|
82
|
+
? ANSI.red
|
|
83
|
+
: simulation.riskLevel === 'medium'
|
|
84
|
+
? ANSI.yellow
|
|
85
|
+
: ANSI.green;
|
|
86
|
+
lines.push(` ${ANSI.bold}${ANSI.blue}Simulation${ANSI.reset} ${ANSI.dim}(${simulation.simulatorId})${ANSI.reset}`);
|
|
87
|
+
for (const change of simulation.predictedChanges) {
|
|
88
|
+
lines.push(` ${ANSI.dim}${ICONS.bullet} ${change}${ANSI.reset}`);
|
|
89
|
+
}
|
|
90
|
+
lines.push(` blast radius: ${ANSI.bold}${simulation.blastRadius}${ANSI.reset} | risk: ${riskColor}${simulation.riskLevel}${ANSI.reset} | ${ANSI.dim}${simulation.durationMs}ms${ANSI.reset}`);
|
|
91
|
+
return lines.join('\n');
|
|
92
|
+
}
|
|
93
|
+
export function renderDecisionRecord(record) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
const outcomeColor = record.outcome === 'allow' ? ANSI.green : ANSI.red;
|
|
96
|
+
const outcomeIcon = record.outcome === 'allow' ? ICONS.allowed : ICONS.denied;
|
|
97
|
+
lines.push(` ${ANSI.bold}Decision Record${ANSI.reset} ${ANSI.dim}${record.recordId}${ANSI.reset}`);
|
|
98
|
+
lines.push(` action: ${record.action.type} ${ANSI.dim}${record.action.target}${ANSI.reset}`);
|
|
99
|
+
lines.push(` outcome: ${outcomeColor}${outcomeIcon} ${record.outcome.toUpperCase()}${ANSI.reset}`);
|
|
100
|
+
lines.push(` reason: ${ANSI.dim}${record.reason}${ANSI.reset}`);
|
|
101
|
+
if (record.policy.matchedPolicyId) {
|
|
102
|
+
lines.push(` policy: ${ANSI.dim}${record.policy.matchedPolicyName} (${record.policy.matchedPolicyId})${ANSI.reset}`);
|
|
103
|
+
}
|
|
104
|
+
if (record.invariants.violations.length > 0) {
|
|
105
|
+
for (const v of record.invariants.violations) {
|
|
106
|
+
lines.push(` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset} ${ANSI.dim}(${v.actual})${ANSI.reset}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (record.simulation) {
|
|
110
|
+
const sim = record.simulation;
|
|
111
|
+
const riskColor = sim.riskLevel === 'high' ? ANSI.red : sim.riskLevel === 'medium' ? ANSI.yellow : ANSI.green;
|
|
112
|
+
lines.push(` simulation: blast=${sim.blastRadius} risk=${riskColor}${sim.riskLevel}${ANSI.reset}`);
|
|
113
|
+
}
|
|
114
|
+
if (record.execution.executed) {
|
|
115
|
+
const execStatus = record.execution.success
|
|
116
|
+
? `${ANSI.green}success${ANSI.reset}`
|
|
117
|
+
: `${ANSI.red}failed${ANSI.reset}`;
|
|
118
|
+
lines.push(` execution: ${execStatus} ${ANSI.dim}(${record.execution.durationMs}ms)${ANSI.reset}`);
|
|
119
|
+
}
|
|
120
|
+
return lines.join('\n');
|
|
121
|
+
}
|
|
122
|
+
export function renderDecisionTable(records) {
|
|
123
|
+
const lines = [];
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(` ${ANSI.bold}Decision Records${ANSI.reset} ${ANSI.dim}(${records.length} decisions)${ANSI.reset}`);
|
|
126
|
+
lines.push(` ${ANSI.dim}${'─'.repeat(50)}${ANSI.reset}`);
|
|
127
|
+
for (let i = 0; i < records.length; i++) {
|
|
128
|
+
const r = records[i];
|
|
129
|
+
const num = `${i + 1}.`.padStart(4);
|
|
130
|
+
const icon = r.outcome === 'allow'
|
|
131
|
+
? `${ANSI.green}${ICONS.allowed}${ANSI.reset}`
|
|
132
|
+
: `${ANSI.red}${ICONS.denied}${ANSI.reset}`;
|
|
133
|
+
lines.push(` ${num} ${icon} ${r.action.type} ${ANSI.dim}${r.action.target}${ANSI.reset}`);
|
|
134
|
+
lines.push(` ${ANSI.dim}${r.reason}${ANSI.reset}`);
|
|
135
|
+
if (r.invariants.violations.length > 0) {
|
|
136
|
+
for (const v of r.invariants.violations) {
|
|
137
|
+
lines.push(` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
lines.push('');
|
|
142
|
+
return lines.join('\n');
|
|
143
|
+
}
|
|
144
|
+
export function renderKernelResult(result, verbose) {
|
|
145
|
+
const lines = [];
|
|
146
|
+
lines.push(renderAction(result, verbose));
|
|
147
|
+
const violationText = renderViolations(result);
|
|
148
|
+
if (violationText)
|
|
149
|
+
lines.push(violationText);
|
|
150
|
+
return lines.join('\n');
|
|
151
|
+
}
|
|
152
|
+
export function renderActionGraph(results) {
|
|
153
|
+
const lines = [];
|
|
154
|
+
lines.push('');
|
|
155
|
+
lines.push(` ${ANSI.bold}Action Graph${ANSI.reset} ${ANSI.dim}(${results.length} actions)${ANSI.reset}`);
|
|
156
|
+
lines.push(` ${ANSI.dim}${'─'.repeat(50)}${ANSI.reset}`);
|
|
157
|
+
for (let i = 0; i < results.length; i++) {
|
|
158
|
+
const r = results[i];
|
|
159
|
+
const intent = r.decision.intent;
|
|
160
|
+
const num = `${i + 1}.`.padStart(4);
|
|
161
|
+
const icon = r.allowed
|
|
162
|
+
? `${ANSI.green}${ICONS.allowed}${ANSI.reset}`
|
|
163
|
+
: `${ANSI.red}${ICONS.denied}${ANSI.reset}`;
|
|
164
|
+
const status = r.allowed
|
|
165
|
+
? r.executed
|
|
166
|
+
? `${ANSI.green}EXECUTED${ANSI.reset}`
|
|
167
|
+
: `${ANSI.dim}ALLOWED${ANSI.reset}`
|
|
168
|
+
: `${ANSI.red}DENIED${ANSI.reset}`;
|
|
169
|
+
lines.push(` ${num} ${icon} ${intent.action} ${ANSI.dim}${intent.target}${ANSI.reset} ${ANSI.gray}[${status}${ANSI.gray}]${ANSI.reset}`);
|
|
170
|
+
if (!r.allowed) {
|
|
171
|
+
lines.push(` ${ANSI.dim}${r.decision.decision.reason}${ANSI.reset}`);
|
|
172
|
+
}
|
|
173
|
+
for (const v of r.decision.violations) {
|
|
174
|
+
lines.push(` ${ANSI.yellow}${ICONS.warning} ${v.name}${ANSI.reset}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
lines.push('');
|
|
178
|
+
return lines.join('\n');
|
|
179
|
+
}
|
|
180
|
+
export function renderEventStream(events) {
|
|
181
|
+
const lines = [];
|
|
182
|
+
lines.push('');
|
|
183
|
+
lines.push(` ${ANSI.bold}Event Stream${ANSI.reset} ${ANSI.dim}(${events.length} events)${ANSI.reset}`);
|
|
184
|
+
lines.push(` ${ANSI.dim}${'─'.repeat(50)}${ANSI.reset}`);
|
|
185
|
+
for (const event of events) {
|
|
186
|
+
const time = new Date(event.timestamp).toISOString().slice(11, 23);
|
|
187
|
+
const kindColor = event.kind.includes('Denied') || event.kind.includes('Violation')
|
|
188
|
+
? ANSI.red
|
|
189
|
+
: event.kind.includes('Allowed') || event.kind.includes('Executed')
|
|
190
|
+
? ANSI.green
|
|
191
|
+
: ANSI.cyan;
|
|
192
|
+
lines.push(` ${ANSI.dim}${time}${ANSI.reset} ${kindColor}${event.kind}${ANSI.reset}`);
|
|
193
|
+
}
|
|
194
|
+
lines.push('');
|
|
195
|
+
return lines.join('\n');
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/cli/tui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ActionClass, ActionDefinition, Decision, CanonicalAction, ValidationResult } from './types.js';
|
|
2
|
+
export declare const ACTION_CLASS: Record<string, ActionClass>;
|
|
3
|
+
export declare const ACTION_TYPES: Record<string, ActionDefinition>;
|
|
4
|
+
export declare const DECISION: Record<string, Decision>;
|
|
5
|
+
export declare function resetActionCounter(): void;
|
|
6
|
+
export declare function validateActionType(type: string): ValidationResult;
|
|
7
|
+
export declare function validateAction(action: Record<string, unknown>): ValidationResult;
|
|
8
|
+
export declare function createAction(type: string, target: string, justification: string, metadata?: Record<string, unknown>): CanonicalAction;
|
|
9
|
+
export declare function getActionClass(type: string): ActionClass | null;
|
|
10
|
+
export declare function listActionTypes(): string[];
|
|
11
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/core/actions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CASpD,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAwBzD,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAI7C,CAAC;AAKF,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAUD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAWjE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAuBhF;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,eAAe,CAejB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG/D;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Canonical action schema for the Agent Reference Monitor
|
|
2
|
+
// All agent execution requests are normalized into these action objects.
|
|
3
|
+
// No DOM, no Node.js APIs — pure data definitions.
|
|
4
|
+
import { simpleHash } from './hash.js';
|
|
5
|
+
// --- Action Classes ---
|
|
6
|
+
export const ACTION_CLASS = {
|
|
7
|
+
FILE: 'file',
|
|
8
|
+
TEST: 'test',
|
|
9
|
+
GIT: 'git',
|
|
10
|
+
SHELL: 'shell',
|
|
11
|
+
NPM: 'npm',
|
|
12
|
+
HTTP: 'http',
|
|
13
|
+
DEPLOY: 'deploy',
|
|
14
|
+
INFRA: 'infra',
|
|
15
|
+
};
|
|
16
|
+
// --- Action Types ---
|
|
17
|
+
export const ACTION_TYPES = {
|
|
18
|
+
'file.read': { class: 'file', description: 'Read file contents' },
|
|
19
|
+
'file.write': { class: 'file', description: 'Write or create a file' },
|
|
20
|
+
'file.delete': { class: 'file', description: 'Delete a file' },
|
|
21
|
+
'file.move': { class: 'file', description: 'Move or rename a file' },
|
|
22
|
+
'test.run': { class: 'test', description: 'Run test suite' },
|
|
23
|
+
'test.run.unit': { class: 'test', description: 'Run unit tests' },
|
|
24
|
+
'test.run.integration': { class: 'test', description: 'Run integration tests' },
|
|
25
|
+
'git.diff': { class: 'git', description: 'View git diff' },
|
|
26
|
+
'git.commit': { class: 'git', description: 'Create a git commit' },
|
|
27
|
+
'git.push': { class: 'git', description: 'Push to remote' },
|
|
28
|
+
'git.branch.create': { class: 'git', description: 'Create a branch' },
|
|
29
|
+
'git.branch.delete': { class: 'git', description: 'Delete a branch' },
|
|
30
|
+
'git.checkout': { class: 'git', description: 'Switch branches' },
|
|
31
|
+
'git.reset': { class: 'git', description: 'Reset git state' },
|
|
32
|
+
'git.merge': { class: 'git', description: 'Merge branches' },
|
|
33
|
+
'shell.exec': { class: 'shell', description: 'Execute a shell command' },
|
|
34
|
+
'npm.install': { class: 'npm', description: 'Install npm packages' },
|
|
35
|
+
'npm.script.run': { class: 'npm', description: 'Run an npm script' },
|
|
36
|
+
'npm.publish': { class: 'npm', description: 'Publish to npm registry' },
|
|
37
|
+
'http.request': { class: 'http', description: 'Make an HTTP request' },
|
|
38
|
+
'deploy.trigger': { class: 'deploy', description: 'Trigger deployment' },
|
|
39
|
+
'infra.apply': { class: 'infra', description: 'Apply infrastructure changes' },
|
|
40
|
+
'infra.destroy': { class: 'infra', description: 'Destroy infrastructure' },
|
|
41
|
+
};
|
|
42
|
+
// --- Decisions ---
|
|
43
|
+
export const DECISION = {
|
|
44
|
+
ALLOW: 'allow',
|
|
45
|
+
DENY: 'deny',
|
|
46
|
+
ESCALATE: 'escalate',
|
|
47
|
+
};
|
|
48
|
+
// --- Action Factory ---
|
|
49
|
+
let actionCounter = 0;
|
|
50
|
+
export function resetActionCounter() {
|
|
51
|
+
actionCounter = 0;
|
|
52
|
+
}
|
|
53
|
+
function generateActionId(timestamp) {
|
|
54
|
+
return `act_${timestamp}_${++actionCounter}`;
|
|
55
|
+
}
|
|
56
|
+
function fingerprintAction(type, target, justification) {
|
|
57
|
+
return simpleHash(`${type}:${target}:${justification}`);
|
|
58
|
+
}
|
|
59
|
+
export function validateActionType(type) {
|
|
60
|
+
const errors = [];
|
|
61
|
+
if (typeof type !== 'string' || !type) {
|
|
62
|
+
errors.push('Action type must be a non-empty string');
|
|
63
|
+
return { valid: false, errors };
|
|
64
|
+
}
|
|
65
|
+
if (!ACTION_TYPES[type]) {
|
|
66
|
+
errors.push(`Unknown action type: ${type}`);
|
|
67
|
+
return { valid: false, errors };
|
|
68
|
+
}
|
|
69
|
+
return { valid: true, errors };
|
|
70
|
+
}
|
|
71
|
+
export function validateAction(action) {
|
|
72
|
+
const errors = [];
|
|
73
|
+
if (!action || typeof action !== 'object') {
|
|
74
|
+
return { valid: false, errors: ['Action must be a non-null object'] };
|
|
75
|
+
}
|
|
76
|
+
if (!action.type) {
|
|
77
|
+
errors.push('Action is missing required field: type');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const typeCheck = validateActionType(action.type);
|
|
81
|
+
if (!typeCheck.valid)
|
|
82
|
+
errors.push(...typeCheck.errors);
|
|
83
|
+
}
|
|
84
|
+
if (!action.target && action.target !== '') {
|
|
85
|
+
errors.push('Action is missing required field: target');
|
|
86
|
+
}
|
|
87
|
+
if (!action.justification) {
|
|
88
|
+
errors.push('Action is missing required field: justification');
|
|
89
|
+
}
|
|
90
|
+
return { valid: errors.length === 0, errors };
|
|
91
|
+
}
|
|
92
|
+
export function createAction(type, target, justification, metadata = {}) {
|
|
93
|
+
const action = { type, target, justification, ...metadata };
|
|
94
|
+
const { valid, errors } = validateAction(action);
|
|
95
|
+
if (!valid) {
|
|
96
|
+
throw new Error(`Invalid action: ${errors.join('; ')}`);
|
|
97
|
+
}
|
|
98
|
+
const timestamp = Date.now();
|
|
99
|
+
action.id = generateActionId(timestamp);
|
|
100
|
+
action.class = ACTION_TYPES[type].class;
|
|
101
|
+
action.timestamp = timestamp;
|
|
102
|
+
action.fingerprint = fingerprintAction(type, target, justification);
|
|
103
|
+
return action;
|
|
104
|
+
}
|
|
105
|
+
export function getActionClass(type) {
|
|
106
|
+
const def = ACTION_TYPES[type];
|
|
107
|
+
return def ? def.class : null;
|
|
108
|
+
}
|
|
109
|
+
export function listActionTypes() {
|
|
110
|
+
return Object.keys(ACTION_TYPES);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/core/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AdapterHandler, AdapterRegistry } from './types.js';
|
|
2
|
+
export declare function createAdapterRegistry(): AdapterRegistry;
|
|
3
|
+
interface DryRunEntry {
|
|
4
|
+
type: string;
|
|
5
|
+
target: string;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
dryRun: true;
|
|
8
|
+
}
|
|
9
|
+
export declare function createDryRunAdapter(): {
|
|
10
|
+
adapter: AdapterHandler;
|
|
11
|
+
getLog: () => DryRunEntry[];
|
|
12
|
+
clear: () => void;
|
|
13
|
+
};
|
|
14
|
+
export declare function createDryRunRegistry(): {
|
|
15
|
+
registry: AdapterRegistry;
|
|
16
|
+
dryRun: ReturnType<typeof createDryRunAdapter>;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/core/adapters.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAIV,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,qBAAqB,IAAI,eAAe,CA0DvD;AAID,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC;CACd;AAED,wBAAgB,mBAAmB,IAAI;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,WAAW,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAqBA;AAED,wBAAgB,oBAAoB,IAAI;IACtC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CAChD,CAUA"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Execution adapters for the Agent Reference Monitor
|
|
2
|
+
// Adapters translate authorized action objects into executable operations.
|
|
3
|
+
// Each adapter validates that an action has been authorized before proceeding.
|
|
4
|
+
// No DOM, no Node.js APIs — pure adapter interfaces and registry.
|
|
5
|
+
import { DECISION } from './actions.js';
|
|
6
|
+
// --- Adapter Registry ---
|
|
7
|
+
export function createAdapterRegistry() {
|
|
8
|
+
const adapters = new Map();
|
|
9
|
+
function register(actionClass, handler) {
|
|
10
|
+
if (typeof handler !== 'function') {
|
|
11
|
+
throw new Error(`Adapter handler must be a function for class: ${actionClass}`);
|
|
12
|
+
}
|
|
13
|
+
adapters.set(actionClass, handler);
|
|
14
|
+
}
|
|
15
|
+
async function execute(action, decisionRecord) {
|
|
16
|
+
if (!decisionRecord || decisionRecord.decision !== DECISION.ALLOW) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
error: `Action not authorized: ${decisionRecord ? decisionRecord.decision : 'no decision'}`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (decisionRecord.actionId !== action.id) {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error: `Decision record does not match action (expected ${action.id}, got ${decisionRecord.actionId})`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const adapter = adapters.get(action.class);
|
|
29
|
+
if (!adapter) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: `No adapter registered for action class: ${action.class}`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const result = await adapter(action);
|
|
37
|
+
return { success: true, result };
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
return { success: false, error: err.message };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function has(actionClass) {
|
|
44
|
+
return adapters.has(actionClass);
|
|
45
|
+
}
|
|
46
|
+
function listRegistered() {
|
|
47
|
+
return [...adapters.keys()];
|
|
48
|
+
}
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
register,
|
|
51
|
+
execute,
|
|
52
|
+
has,
|
|
53
|
+
listRegistered,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function createDryRunAdapter() {
|
|
57
|
+
const log = [];
|
|
58
|
+
const adapter = (action) => {
|
|
59
|
+
const entry = {
|
|
60
|
+
type: action.type,
|
|
61
|
+
target: action.target,
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
dryRun: true,
|
|
64
|
+
};
|
|
65
|
+
log.push(entry);
|
|
66
|
+
return entry;
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
adapter,
|
|
70
|
+
getLog: () => [...log],
|
|
71
|
+
clear: () => {
|
|
72
|
+
log.length = 0;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function createDryRunRegistry() {
|
|
77
|
+
const registry = createAdapterRegistry();
|
|
78
|
+
const dryRun = createDryRunAdapter();
|
|
79
|
+
const classes = ['file', 'test', 'git', 'shell', 'npm', 'http', 'deploy', 'infra'];
|
|
80
|
+
for (const cls of classes) {
|
|
81
|
+
registry.register(cls, dryRun.adapter);
|
|
82
|
+
}
|
|
83
|
+
return { registry, dryRun };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/core/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DomainEvent, ExecutionEvent, ExecutionEventLog } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Convert a domain event into an execution event.
|
|
4
|
+
* Returns null if the domain event kind has no execution event mapping.
|
|
5
|
+
*/
|
|
6
|
+
export declare function domainEventToExecutionEvent(event: DomainEvent): ExecutionEvent | null;
|
|
7
|
+
/**
|
|
8
|
+
* Create a bridge that automatically records domain events as execution events.
|
|
9
|
+
* Returns a subscriber function compatible with the domain event system.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createEventBridge(log: ExecutionEventLog): (event: DomainEvent) => void;
|
|
12
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/core/execution-log/bridge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EAIlB,MAAM,aAAa,CAAC;AA+ErB;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,GAAG,IAAI,CA0BrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAOtF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Execution Event Log Bridge — connects execution events to the domain event system.
|
|
2
|
+
// Maps domain events to execution events and vice versa.
|
|
3
|
+
// No DOM, no Node.js APIs — pure domain logic.
|
|
4
|
+
import { createExecutionEvent } from './event-schema.js';
|
|
5
|
+
import { AGENT_EDIT_FILE, RUNTIME_EXCEPTION, TEST_SUITE_FAILED, TEST_SUITE_PASSED, BUILD_FAILED, BUILD_SUCCEEDED, DEPLOYMENT_FAILED, DEPLOYMENT_SUCCEEDED, POLICY_VIOLATION_DETECTED, INVARIANT_CHECK_FAILED, } from './event-schema.js';
|
|
6
|
+
// --- Domain Event → Execution Event Kind Mapping ---
|
|
7
|
+
const DOMAIN_TO_EXECUTION_KIND = {
|
|
8
|
+
ActionExecuted: AGENT_EDIT_FILE,
|
|
9
|
+
ActionFailed: RUNTIME_EXCEPTION,
|
|
10
|
+
ErrorObserved: RUNTIME_EXCEPTION,
|
|
11
|
+
TestCompleted: TEST_SUITE_PASSED,
|
|
12
|
+
BuildCompleted: BUILD_SUCCEEDED,
|
|
13
|
+
DeployCompleted: DEPLOYMENT_SUCCEEDED,
|
|
14
|
+
PolicyDenied: POLICY_VIOLATION_DETECTED,
|
|
15
|
+
InvariantViolation: INVARIANT_CHECK_FAILED,
|
|
16
|
+
};
|
|
17
|
+
// Override with failure kinds when the domain event indicates failure
|
|
18
|
+
const FAILURE_OVERRIDES = {
|
|
19
|
+
TestCompleted: (event) => (event.result === 'fail' ? TEST_SUITE_FAILED : null),
|
|
20
|
+
BuildCompleted: (event) => (event.result === 'fail' ? BUILD_FAILED : null),
|
|
21
|
+
DeployCompleted: (event) => (event.result === 'fail' ? DEPLOYMENT_FAILED : null),
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Infer actor from a domain event.
|
|
25
|
+
*/
|
|
26
|
+
function inferActor(event) {
|
|
27
|
+
if (event.agentId || event.kind === 'ActionExecuted' || event.kind === 'ActionFailed') {
|
|
28
|
+
return 'agent';
|
|
29
|
+
}
|
|
30
|
+
if (event.kind === 'PolicyDenied' ||
|
|
31
|
+
event.kind === 'InvariantViolation' ||
|
|
32
|
+
event.kind === 'BlastRadiusExceeded') {
|
|
33
|
+
return 'system';
|
|
34
|
+
}
|
|
35
|
+
return 'human';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Infer event source from a domain event kind.
|
|
39
|
+
*/
|
|
40
|
+
function inferSource(event) {
|
|
41
|
+
const kind = event.kind;
|
|
42
|
+
if (kind === 'TestCompleted' || kind === 'BuildCompleted')
|
|
43
|
+
return 'ci';
|
|
44
|
+
if (kind === 'CommitCreated' || kind === 'FileSaved')
|
|
45
|
+
return 'git';
|
|
46
|
+
if (kind === 'DeployCompleted')
|
|
47
|
+
return 'runtime';
|
|
48
|
+
if (kind === 'PolicyDenied' || kind === 'InvariantViolation' || kind === 'BlastRadiusExceeded') {
|
|
49
|
+
return 'governance';
|
|
50
|
+
}
|
|
51
|
+
if (kind === 'ErrorObserved')
|
|
52
|
+
return 'runtime';
|
|
53
|
+
return 'cli';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build execution context from a domain event.
|
|
57
|
+
*/
|
|
58
|
+
function buildContext(event) {
|
|
59
|
+
const context = {};
|
|
60
|
+
if (typeof event.file === 'string')
|
|
61
|
+
context.file = event.file;
|
|
62
|
+
if (typeof event.branch === 'string')
|
|
63
|
+
context.branch = event.branch;
|
|
64
|
+
if (typeof event.hash === 'string')
|
|
65
|
+
context.commit = event.hash;
|
|
66
|
+
if (typeof event.agentId === 'string')
|
|
67
|
+
context.agentRunId = event.agentId;
|
|
68
|
+
return context;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Convert a domain event into an execution event.
|
|
72
|
+
* Returns null if the domain event kind has no execution event mapping.
|
|
73
|
+
*/
|
|
74
|
+
export function domainEventToExecutionEvent(event) {
|
|
75
|
+
let executionKind = DOMAIN_TO_EXECUTION_KIND[event.kind];
|
|
76
|
+
if (!executionKind)
|
|
77
|
+
return null;
|
|
78
|
+
// Check for failure overrides
|
|
79
|
+
const override = FAILURE_OVERRIDES[event.kind];
|
|
80
|
+
if (override) {
|
|
81
|
+
const overrideKind = override(event);
|
|
82
|
+
if (overrideKind)
|
|
83
|
+
executionKind = overrideKind;
|
|
84
|
+
}
|
|
85
|
+
// Build payload from domain event data (exclude standard fields)
|
|
86
|
+
const payload = {};
|
|
87
|
+
const standardFields = new Set(['id', 'kind', 'timestamp', 'fingerprint']);
|
|
88
|
+
for (const [key, value] of Object.entries(event)) {
|
|
89
|
+
if (!standardFields.has(key)) {
|
|
90
|
+
payload[key] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return createExecutionEvent(executionKind, {
|
|
94
|
+
actor: inferActor(event),
|
|
95
|
+
source: inferSource(event),
|
|
96
|
+
context: buildContext(event),
|
|
97
|
+
payload,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a bridge that automatically records domain events as execution events.
|
|
102
|
+
* Returns a subscriber function compatible with the domain event system.
|
|
103
|
+
*/
|
|
104
|
+
export function createEventBridge(log) {
|
|
105
|
+
return (event) => {
|
|
106
|
+
const executionEvent = domainEventToExecutionEvent(event);
|
|
107
|
+
if (executionEvent) {
|
|
108
|
+
log.append(executionEvent);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/core/execution-log/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExecutionEventLog } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create an in-memory execution event log.
|
|
4
|
+
* Append-only with support for causal chain tracing and NDJSON persistence.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createExecutionEventLog(): ExecutionEventLog;
|
|
7
|
+
//# sourceMappingURL=event-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-log.d.ts","sourceRoot":"","sources":["../../../src/core/execution-log/event-log.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwC,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAG3F;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAqG3D"}
|