@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,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"}