@red-codes/agentguard 1.0.0 → 1.1.2
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/README.md +179 -298
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js.map +1 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +29185 -0
- package/dist/bin.js.map +7 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js.map +1 -0
- package/dist/commands/adoption.d.ts +2 -0
- package/dist/commands/adoption.d.ts.map +1 -0
- package/dist/commands/adoption.js +172 -0
- package/dist/commands/adoption.js.map +1 -0
- package/dist/commands/analytics.d.ts +3 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +7 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/audit-verify.d.ts +3 -0
- package/dist/commands/audit-verify.d.ts.map +1 -0
- package/dist/commands/audit-verify.js +94 -0
- package/dist/commands/audit-verify.js.map +1 -0
- package/dist/commands/auto-setup.d.ts +28 -0
- package/dist/commands/auto-setup.d.ts.map +1 -0
- package/dist/commands/auto-setup.js +146 -0
- package/dist/commands/auto-setup.js.map +1 -0
- package/dist/commands/ci-check.d.ts +13 -0
- package/dist/commands/ci-check.d.ts.map +1 -0
- package/dist/commands/ci-check.js +286 -0
- package/dist/commands/ci-check.js.map +1 -0
- package/dist/commands/claude-hook.d.ts +2 -0
- package/dist/commands/claude-hook.d.ts.map +1 -0
- package/dist/commands/claude-hook.js +254 -0
- package/dist/commands/claude-hook.js.map +1 -0
- package/dist/commands/claude-init.d.ts.map +1 -0
- package/dist/commands/claude-init.js +401 -0
- package/dist/commands/claude-init.js.map +1 -0
- package/dist/commands/config.d.ts +39 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +368 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/demo.d.ts +2 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +100 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +364 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/evidence-pr.d.ts +3 -0
- package/dist/commands/evidence-pr.d.ts.map +1 -0
- package/dist/commands/evidence-pr.js +162 -0
- package/dist/commands/evidence-pr.js.map +1 -0
- package/dist/commands/export.d.ts +22 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +92 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/guard.d.ts +21 -0
- package/dist/commands/guard.d.ts.map +1 -0
- package/dist/commands/guard.js +272 -0
- package/dist/commands/guard.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/{cli/commands → commands}/import.js +25 -26
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1288 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +4 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/{cli/commands → commands}/inspect.js +97 -70
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/learn.d.ts +2 -0
- package/dist/commands/learn.d.ts.map +1 -0
- package/dist/commands/learn.js +264 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +270 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/{cli/commands → commands}/plugin.js +2 -2
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/policy-verify.d.ts +46 -0
- package/dist/commands/policy-verify.d.ts.map +1 -0
- package/dist/commands/policy-verify.js +173 -0
- package/dist/commands/policy-verify.js.map +1 -0
- package/dist/commands/policy.d.ts +27 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +590 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/{cli/commands → commands}/replay.d.ts +2 -1
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/{cli/commands → commands}/replay.js +78 -12
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/session-viewer.d.ts +5 -0
- package/dist/commands/session-viewer.d.ts.map +1 -0
- package/dist/commands/session-viewer.js +462 -0
- package/dist/commands/session-viewer.js.map +1 -0
- package/dist/commands/simulate.d.ts +7 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +505 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +212 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/traces.d.ts +24 -0
- package/dist/commands/traces.d.ts.map +1 -0
- package/dist/commands/traces.js +282 -0
- package/dist/commands/traces.js.map +1 -0
- package/dist/commands/trust.d.ts +6 -0
- package/dist/commands/trust.d.ts.map +1 -0
- package/dist/commands/trust.js +129 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/evidence-summary.d.ts +35 -0
- package/dist/evidence-summary.d.ts.map +1 -0
- package/dist/evidence-summary.js +202 -0
- package/dist/evidence-summary.js.map +1 -0
- package/dist/{cli/file-event-store.d.ts → file-event-store.d.ts} +1 -1
- package/dist/file-event-store.d.ts.map +1 -0
- package/dist/{cli/file-event-store.js → file-event-store.js} +1 -1
- package/dist/file-event-store.js.map +1 -0
- package/{hooks → dist/hooks}/post-commit +3 -1
- package/{hooks → dist/hooks}/post-merge +3 -1
- package/dist/hooks/pre-commit +29 -0
- package/dist/policy-resolver.d.ts +32 -0
- package/dist/policy-resolver.d.ts.map +1 -0
- package/dist/policy-resolver.js +171 -0
- package/dist/policy-resolver.js.map +1 -0
- package/dist/{cli/recorder.d.ts → recorder.d.ts} +1 -1
- package/dist/recorder.d.ts.map +1 -0
- package/dist/{cli/recorder.js → recorder.js} +1 -1
- package/dist/recorder.js.map +1 -0
- package/dist/replay-timeline-html.d.ts +21 -0
- package/dist/replay-timeline-html.d.ts.map +1 -0
- package/dist/replay-timeline-html.js +414 -0
- package/dist/replay-timeline-html.js.map +1 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/{cli/replay.js → replay.js} +92 -1
- package/dist/replay.js.map +1 -0
- package/dist/{cli/session-store.d.ts → session-store.d.ts} +5 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/{cli/session-store.js → session-store.js} +1 -0
- package/dist/session-store.js.map +1 -0
- package/dist/session-viewer-html.d.ts +10 -0
- package/dist/session-viewer-html.d.ts.map +1 -0
- package/dist/session-viewer-html.js +737 -0
- package/dist/session-viewer-html.js.map +1 -0
- package/dist/templates/ci-only.yaml +103 -0
- package/dist/templates/development.yaml +107 -0
- package/dist/templates/permissive.yaml +87 -0
- package/dist/templates/strict.yaml +112 -0
- package/dist/tui.d.ts +3 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +2 -0
- package/dist/tui.js.map +1 -0
- package/package.json +42 -53
- package/dist/adapters/claude-code.d.ts +0 -24
- package/dist/adapters/claude-code.d.ts.map +0 -1
- package/dist/adapters/claude-code.js +0 -99
- package/dist/adapters/claude-code.js.map +0 -1
- package/dist/adapters/file.d.ts +0 -3
- package/dist/adapters/file.d.ts.map +0 -1
- package/dist/adapters/file.js +0 -35
- package/dist/adapters/file.js.map +0 -1
- package/dist/adapters/git.d.ts +0 -3
- package/dist/adapters/git.d.ts.map +0 -1
- package/dist/adapters/git.js +0 -61
- package/dist/adapters/git.js.map +0 -1
- package/dist/adapters/registry.d.ts +0 -5
- package/dist/adapters/registry.d.ts.map +0 -1
- package/dist/adapters/registry.js +0 -15
- package/dist/adapters/registry.js.map +0 -1
- package/dist/adapters/shell.d.ts +0 -8
- package/dist/adapters/shell.d.ts.map +0 -1
- package/dist/adapters/shell.js +0 -27
- package/dist/adapters/shell.js.map +0 -1
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js.map +0 -1
- package/dist/cli/bin.d.ts.map +0 -1
- package/dist/cli/bin.js +0 -5769
- package/dist/cli/bin.js.map +0 -7
- package/dist/cli/colors.d.ts.map +0 -1
- package/dist/cli/colors.js.map +0 -1
- package/dist/cli/commands/claude-hook.d.ts +0 -2
- package/dist/cli/commands/claude-hook.d.ts.map +0 -1
- package/dist/cli/commands/claude-hook.js +0 -110
- package/dist/cli/commands/claude-hook.js.map +0 -1
- package/dist/cli/commands/claude-init.d.ts.map +0 -1
- package/dist/cli/commands/claude-init.js +0 -150
- package/dist/cli/commands/claude-init.js.map +0 -1
- package/dist/cli/commands/export.d.ts +0 -11
- package/dist/cli/commands/export.d.ts.map +0 -1
- package/dist/cli/commands/export.js +0 -113
- package/dist/cli/commands/export.js.map +0 -1
- package/dist/cli/commands/guard.d.ts +0 -12
- package/dist/cli/commands/guard.d.ts.map +0 -1
- package/dist/cli/commands/guard.js +0 -145
- package/dist/cli/commands/guard.js.map +0 -1
- package/dist/cli/commands/import.d.ts +0 -2
- package/dist/cli/commands/import.d.ts.map +0 -1
- package/dist/cli/commands/import.js.map +0 -1
- package/dist/cli/commands/inspect.d.ts +0 -3
- package/dist/cli/commands/inspect.d.ts.map +0 -1
- package/dist/cli/commands/inspect.js.map +0 -1
- package/dist/cli/commands/plugin.d.ts.map +0 -1
- package/dist/cli/commands/plugin.js.map +0 -1
- package/dist/cli/commands/replay.d.ts.map +0 -1
- package/dist/cli/commands/replay.js.map +0 -1
- package/dist/cli/file-event-store.d.ts.map +0 -1
- package/dist/cli/file-event-store.js.map +0 -1
- package/dist/cli/policy-resolver.d.ts +0 -4
- package/dist/cli/policy-resolver.d.ts.map +0 -1
- package/dist/cli/policy-resolver.js +0 -62
- package/dist/cli/policy-resolver.js.map +0 -1
- package/dist/cli/recorder.d.ts.map +0 -1
- package/dist/cli/recorder.js.map +0 -1
- package/dist/cli/replay.d.ts.map +0 -1
- package/dist/cli/replay.js.map +0 -1
- package/dist/cli/session-store.d.ts.map +0 -1
- package/dist/cli/session-store.js.map +0 -1
- package/dist/cli/tui.d.ts +0 -24
- package/dist/cli/tui.d.ts.map +0 -1
- package/dist/cli/tui.js +0 -197
- package/dist/cli/tui.js.map +0 -1
- package/dist/core/actions.d.ts +0 -11
- package/dist/core/actions.d.ts.map +0 -1
- package/dist/core/actions.js +0 -112
- package/dist/core/actions.js.map +0 -1
- package/dist/core/adapters.d.ts +0 -19
- package/dist/core/adapters.d.ts.map +0 -1
- package/dist/core/adapters.js +0 -85
- package/dist/core/adapters.js.map +0 -1
- package/dist/core/execution-log/bridge.d.ts +0 -12
- package/dist/core/execution-log/bridge.d.ts.map +0 -1
- package/dist/core/execution-log/bridge.js +0 -112
- package/dist/core/execution-log/bridge.js.map +0 -1
- package/dist/core/execution-log/event-log.d.ts +0 -7
- package/dist/core/execution-log/event-log.d.ts.map +0 -1
- package/dist/core/execution-log/event-log.js +0 -103
- package/dist/core/execution-log/event-log.js.map +0 -1
- package/dist/core/execution-log/event-projections.d.ts +0 -28
- package/dist/core/execution-log/event-projections.d.ts.map +0 -1
- package/dist/core/execution-log/event-projections.js +0 -272
- package/dist/core/execution-log/event-projections.js.map +0 -1
- package/dist/core/execution-log/event-schema.d.ts +0 -56
- package/dist/core/execution-log/event-schema.d.ts.map +0 -1
- package/dist/core/execution-log/event-schema.js +0 -160
- package/dist/core/execution-log/event-schema.js.map +0 -1
- package/dist/core/execution-log/index.d.ts +0 -7
- package/dist/core/execution-log/index.d.ts.map +0 -1
- package/dist/core/execution-log/index.js +0 -13
- package/dist/core/execution-log/index.js.map +0 -1
- package/dist/core/hash.d.ts +0 -5
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -13
- package/dist/core/hash.js.map +0 -1
- package/dist/core/rng.d.ts +0 -29
- package/dist/core/rng.d.ts.map +0 -1
- package/dist/core/rng.js +0 -48
- package/dist/core/rng.js.map +0 -1
- package/dist/core/types.d.ts +0 -746
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -8
- package/dist/core/types.js.map +0 -1
- package/dist/events/bus.d.ts +0 -24
- package/dist/events/bus.d.ts.map +0 -1
- package/dist/events/bus.js +0 -64
- package/dist/events/bus.js.map +0 -1
- package/dist/events/decision-jsonl.d.ts +0 -8
- package/dist/events/decision-jsonl.d.ts.map +0 -1
- package/dist/events/decision-jsonl.js +0 -44
- package/dist/events/decision-jsonl.js.map +0 -1
- package/dist/events/jsonl.d.ts +0 -8
- package/dist/events/jsonl.d.ts.map +0 -1
- package/dist/events/jsonl.js +0 -46
- package/dist/events/jsonl.js.map +0 -1
- package/dist/events/schema.d.ts +0 -59
- package/dist/events/schema.d.ts.map +0 -1
- package/dist/events/schema.js +0 -296
- package/dist/events/schema.js.map +0 -1
- package/dist/events/store.d.ts +0 -7
- package/dist/events/store.d.ts.map +0 -1
- package/dist/events/store.js +0 -64
- package/dist/events/store.js.map +0 -1
- package/dist/invariants/checker.d.ts +0 -15
- package/dist/invariants/checker.d.ts.map +0 -1
- package/dist/invariants/checker.js +0 -52
- package/dist/invariants/checker.js.map +0 -1
- package/dist/invariants/definitions.d.ts +0 -33
- package/dist/invariants/definitions.d.ts.map +0 -1
- package/dist/invariants/definitions.js +0 -168
- package/dist/invariants/definitions.js.map +0 -1
- package/dist/kernel/aab.d.ts +0 -26
- package/dist/kernel/aab.d.ts.map +0 -1
- package/dist/kernel/aab.js +0 -149
- package/dist/kernel/aab.js.map +0 -1
- package/dist/kernel/blast-radius.d.ts +0 -60
- package/dist/kernel/blast-radius.d.ts.map +0 -1
- package/dist/kernel/blast-radius.js +0 -146
- package/dist/kernel/blast-radius.js.map +0 -1
- package/dist/kernel/decision.d.ts +0 -40
- package/dist/kernel/decision.d.ts.map +0 -1
- package/dist/kernel/decision.js +0 -92
- package/dist/kernel/decision.js.map +0 -1
- package/dist/kernel/decisions/factory.d.ts +0 -12
- package/dist/kernel/decisions/factory.d.ts.map +0 -1
- package/dist/kernel/decisions/factory.js +0 -56
- package/dist/kernel/decisions/factory.js.map +0 -1
- package/dist/kernel/decisions/types.d.ts +0 -70
- package/dist/kernel/decisions/types.d.ts.map +0 -1
- package/dist/kernel/decisions/types.js +0 -5
- package/dist/kernel/decisions/types.js.map +0 -1
- package/dist/kernel/evidence.d.ts +0 -29
- package/dist/kernel/evidence.d.ts.map +0 -1
- package/dist/kernel/evidence.js +0 -61
- package/dist/kernel/evidence.js.map +0 -1
- package/dist/kernel/kernel.d.ts +0 -47
- package/dist/kernel/kernel.d.ts.map +0 -1
- package/dist/kernel/kernel.js +0 -377
- package/dist/kernel/kernel.js.map +0 -1
- package/dist/kernel/monitor.d.ts +0 -35
- package/dist/kernel/monitor.d.ts.map +0 -1
- package/dist/kernel/monitor.js +0 -144
- package/dist/kernel/monitor.js.map +0 -1
- package/dist/kernel/replay-comparator.d.ts +0 -72
- package/dist/kernel/replay-comparator.d.ts.map +0 -1
- package/dist/kernel/replay-comparator.js +0 -251
- package/dist/kernel/replay-comparator.js.map +0 -1
- package/dist/kernel/replay-engine.d.ts +0 -108
- package/dist/kernel/replay-engine.d.ts.map +0 -1
- package/dist/kernel/replay-engine.js +0 -241
- package/dist/kernel/replay-engine.js.map +0 -1
- package/dist/kernel/replay-processor.d.ts +0 -109
- package/dist/kernel/replay-processor.d.ts.map +0 -1
- package/dist/kernel/replay-processor.js +0 -118
- package/dist/kernel/replay-processor.js.map +0 -1
- package/dist/kernel/simulation/filesystem-simulator.d.ts +0 -3
- package/dist/kernel/simulation/filesystem-simulator.d.ts.map +0 -1
- package/dist/kernel/simulation/filesystem-simulator.js +0 -81
- package/dist/kernel/simulation/filesystem-simulator.js.map +0 -1
- package/dist/kernel/simulation/git-simulator.d.ts +0 -5
- package/dist/kernel/simulation/git-simulator.d.ts.map +0 -1
- package/dist/kernel/simulation/git-simulator.js +0 -115
- package/dist/kernel/simulation/git-simulator.js.map +0 -1
- package/dist/kernel/simulation/package-simulator.d.ts +0 -5
- package/dist/kernel/simulation/package-simulator.d.ts.map +0 -1
- package/dist/kernel/simulation/package-simulator.js +0 -164
- package/dist/kernel/simulation/package-simulator.js.map +0 -1
- package/dist/kernel/simulation/registry.d.ts +0 -3
- package/dist/kernel/simulation/registry.d.ts.map +0 -1
- package/dist/kernel/simulation/registry.js +0 -24
- package/dist/kernel/simulation/registry.js.map +0 -1
- package/dist/kernel/simulation/types.d.ts +0 -35
- package/dist/kernel/simulation/types.d.ts.map +0 -1
- package/dist/kernel/simulation/types.js +0 -4
- package/dist/kernel/simulation/types.js.map +0 -1
- package/dist/plugins/discovery.d.ts +0 -45
- package/dist/plugins/discovery.d.ts.map +0 -1
- package/dist/plugins/discovery.js +0 -89
- package/dist/plugins/discovery.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -7
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -52
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -148
- package/dist/plugins/registry.js.map +0 -1
- package/dist/plugins/sandbox.d.ts +0 -87
- package/dist/plugins/sandbox.d.ts.map +0 -1
- package/dist/plugins/sandbox.js +0 -122
- package/dist/plugins/sandbox.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -61
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -16
- package/dist/plugins/types.js.map +0 -1
- package/dist/plugins/validator.d.ts +0 -36
- package/dist/plugins/validator.d.ts.map +0 -1
- package/dist/plugins/validator.js +0 -276
- package/dist/plugins/validator.js.map +0 -1
- package/dist/policy/evaluator.d.ts +0 -41
- package/dist/policy/evaluator.d.ts.map +0 -1
- package/dist/policy/evaluator.js +0 -111
- package/dist/policy/evaluator.js.map +0 -1
- package/dist/policy/loader.d.ts +0 -13
- package/dist/policy/loader.d.ts.map +0 -1
- package/dist/policy/loader.js +0 -118
- package/dist/policy/loader.js.map +0 -1
- package/dist/policy/pack-loader.d.ts +0 -40
- package/dist/policy/pack-loader.d.ts.map +0 -1
- package/dist/policy/pack-loader.js +0 -138
- package/dist/policy/pack-loader.js.map +0 -1
- package/dist/policy/yaml-loader.d.ts +0 -23
- package/dist/policy/yaml-loader.d.ts.map +0 -1
- package/dist/policy/yaml-loader.js +0 -222
- package/dist/policy/yaml-loader.js.map +0 -1
- package/dist/renderers/index.d.ts +0 -6
- package/dist/renderers/index.d.ts.map +0 -1
- package/dist/renderers/index.js +0 -4
- package/dist/renderers/index.js.map +0 -1
- package/dist/renderers/registry.d.ts +0 -39
- package/dist/renderers/registry.d.ts.map +0 -1
- package/dist/renderers/registry.js +0 -97
- package/dist/renderers/registry.js.map +0 -1
- package/dist/renderers/tui-renderer.d.ts +0 -18
- package/dist/renderers/tui-renderer.d.ts.map +0 -1
- package/dist/renderers/tui-renderer.js +0 -57
- package/dist/renderers/tui-renderer.js.map +0 -1
- package/dist/renderers/types.d.ts +0 -52
- package/dist/renderers/types.d.ts.map +0 -1
- package/dist/renderers/types.js +0 -4
- package/dist/renderers/types.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -3
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -2
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/runtimeLogger.d.ts +0 -9
- package/dist/telemetry/runtimeLogger.d.ts.map +0 -1
- package/dist/telemetry/runtimeLogger.js +0 -68
- package/dist/telemetry/runtimeLogger.js.map +0 -1
- package/dist/telemetry/types.d.ts +0 -22
- package/dist/telemetry/types.d.ts.map +0 -1
- package/dist/telemetry/types.js +0 -4
- package/dist/telemetry/types.js.map +0 -1
- package/hooks/pre-commit +0 -28
- /package/dist/{cli/args.d.ts → args.d.ts} +0 -0
- /package/dist/{cli/args.js → args.js} +0 -0
- /package/dist/{cli/bin.d.ts → bin.d.ts} +0 -0
- /package/dist/{cli/colors.d.ts → colors.d.ts} +0 -0
- /package/dist/{cli/colors.js → colors.js} +0 -0
- /package/dist/{cli/commands → commands}/claude-init.d.ts +0 -0
- /package/dist/{cli/commands → commands}/plugin.d.ts +0 -0
- /package/dist/{cli/replay.d.ts → replay.d.ts} +0 -0
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
// Replay Engine — reconstructs governance sessions from persisted JSONL event streams.
|
|
2
|
-
//
|
|
3
|
-
// Loads domain events from .agentguard/events/<runId>.jsonl, groups them into
|
|
4
|
-
// action encounters (REQUESTED → ALLOWED/DENIED → EXECUTED/FAILED), and provides
|
|
5
|
-
// a programmatic API for session analysis, comparators, and CLI display.
|
|
6
|
-
import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
import { ACTION_REQUESTED, ACTION_ALLOWED, ACTION_DENIED, ACTION_ESCALATED, ACTION_EXECUTED, ACTION_FAILED, DECISION_RECORDED, SIMULATION_COMPLETED, POLICY_DENIED, INVARIANT_VIOLATION, BLAST_RADIUS_EXCEEDED, MERGE_GUARD_FAILURE, RUN_STARTED, RUN_ENDED, } from '../events/schema.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Constants
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
const DEFAULT_BASE_DIR = '.agentguard';
|
|
13
|
-
const EVENTS_DIR = 'events';
|
|
14
|
-
/** Event kinds that represent governance violations/denials. */
|
|
15
|
-
const GOVERNANCE_EVENT_KINDS = new Set([
|
|
16
|
-
POLICY_DENIED,
|
|
17
|
-
INVARIANT_VIOLATION,
|
|
18
|
-
BLAST_RADIUS_EXCEEDED,
|
|
19
|
-
MERGE_GUARD_FAILURE,
|
|
20
|
-
]);
|
|
21
|
-
/** Event kinds that represent action lifecycle decisions. */
|
|
22
|
-
const DECISION_EVENT_KINDS = new Set([ACTION_ALLOWED, ACTION_DENIED]);
|
|
23
|
-
/** Event kinds that represent action execution outcomes. */
|
|
24
|
-
const EXECUTION_EVENT_KINDS = new Set([ACTION_EXECUTED, ACTION_FAILED]);
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
// JSONL Loading
|
|
27
|
-
// ---------------------------------------------------------------------------
|
|
28
|
-
/**
|
|
29
|
-
* Load domain events from a JSONL file.
|
|
30
|
-
* Each line is a JSON-serialized DomainEvent.
|
|
31
|
-
* Malformed lines are silently skipped.
|
|
32
|
-
*/
|
|
33
|
-
export function loadEventsFromJsonl(filePath) {
|
|
34
|
-
if (!existsSync(filePath)) {
|
|
35
|
-
return [];
|
|
36
|
-
}
|
|
37
|
-
const content = readFileSync(filePath, 'utf8');
|
|
38
|
-
const events = [];
|
|
39
|
-
for (const line of content.split('\n')) {
|
|
40
|
-
const trimmed = line.trim();
|
|
41
|
-
if (!trimmed)
|
|
42
|
-
continue;
|
|
43
|
-
try {
|
|
44
|
-
events.push(JSON.parse(trimmed));
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// Skip malformed lines
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return events;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Resolve the JSONL file path for a given run ID.
|
|
54
|
-
*/
|
|
55
|
-
export function resolveEventFilePath(runId, baseDir) {
|
|
56
|
-
return join(baseDir || DEFAULT_BASE_DIR, EVENTS_DIR, `${runId}.jsonl`);
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* List all available run IDs that have stored events.
|
|
60
|
-
*/
|
|
61
|
-
export function listRunIds(baseDir) {
|
|
62
|
-
const eventsDir = join(baseDir || DEFAULT_BASE_DIR, EVENTS_DIR);
|
|
63
|
-
if (!existsSync(eventsDir))
|
|
64
|
-
return [];
|
|
65
|
-
return readdirSync(eventsDir)
|
|
66
|
-
.filter((f) => f.endsWith('.jsonl'))
|
|
67
|
-
.map((f) => f.replace('.jsonl', ''))
|
|
68
|
-
.sort()
|
|
69
|
-
.reverse();
|
|
70
|
-
}
|
|
71
|
-
// ---------------------------------------------------------------------------
|
|
72
|
-
// Event Grouping
|
|
73
|
-
// ---------------------------------------------------------------------------
|
|
74
|
-
/**
|
|
75
|
-
* Group a flat list of events into action encounters.
|
|
76
|
-
* Events are correlated by their position in the stream — each ActionRequested
|
|
77
|
-
* event starts a new encounter, and subsequent events are attached to it until
|
|
78
|
-
* the next ActionRequested.
|
|
79
|
-
*/
|
|
80
|
-
function groupEventsIntoActions(events) {
|
|
81
|
-
const actions = [];
|
|
82
|
-
let currentActionEvents = [];
|
|
83
|
-
let actionIndex = 0;
|
|
84
|
-
function flushAction() {
|
|
85
|
-
if (currentActionEvents.length === 0)
|
|
86
|
-
return;
|
|
87
|
-
const requested = currentActionEvents.find((e) => e.kind === ACTION_REQUESTED) || null;
|
|
88
|
-
if (!requested) {
|
|
89
|
-
// No ActionRequested — these are orphan events, skip
|
|
90
|
-
currentActionEvents = [];
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const decisionEvent = currentActionEvents.find((e) => DECISION_EVENT_KINDS.has(e.kind)) || null;
|
|
94
|
-
const executionEvent = currentActionEvents.find((e) => EXECUTION_EVENT_KINDS.has(e.kind)) || null;
|
|
95
|
-
const simulationEvent = currentActionEvents.find((e) => e.kind === SIMULATION_COMPLETED) || null;
|
|
96
|
-
const decisionRecordEvent = currentActionEvents.find((e) => e.kind === DECISION_RECORDED) || null;
|
|
97
|
-
const escalationEvent = currentActionEvents.find((e) => e.kind === ACTION_ESCALATED) || null;
|
|
98
|
-
const governanceEvents = currentActionEvents.filter((e) => GOVERNANCE_EVENT_KINDS.has(e.kind));
|
|
99
|
-
const allowed = decisionEvent?.kind === ACTION_ALLOWED;
|
|
100
|
-
const executed = executionEvent !== null;
|
|
101
|
-
const succeeded = executionEvent?.kind === ACTION_EXECUTED;
|
|
102
|
-
actions.push({
|
|
103
|
-
index: actionIndex++,
|
|
104
|
-
requestedEvent: requested,
|
|
105
|
-
decisionEvent,
|
|
106
|
-
executionEvent,
|
|
107
|
-
simulationEvent,
|
|
108
|
-
decisionRecordEvent,
|
|
109
|
-
escalationEvent,
|
|
110
|
-
governanceEvents,
|
|
111
|
-
allowed,
|
|
112
|
-
executed,
|
|
113
|
-
succeeded,
|
|
114
|
-
actionType: requested.actionType || 'unknown',
|
|
115
|
-
target: requested.target || '',
|
|
116
|
-
});
|
|
117
|
-
currentActionEvents = [];
|
|
118
|
-
}
|
|
119
|
-
for (const event of events) {
|
|
120
|
-
if (event.kind === ACTION_REQUESTED && currentActionEvents.length > 0) {
|
|
121
|
-
flushAction();
|
|
122
|
-
}
|
|
123
|
-
currentActionEvents.push(event);
|
|
124
|
-
}
|
|
125
|
-
// Flush the last action
|
|
126
|
-
flushAction();
|
|
127
|
-
return actions;
|
|
128
|
-
}
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
// Summary Generation
|
|
131
|
-
// ---------------------------------------------------------------------------
|
|
132
|
-
function buildSummary(events, actions) {
|
|
133
|
-
const actionTypes = {};
|
|
134
|
-
const denialReasons = [];
|
|
135
|
-
let violations = 0;
|
|
136
|
-
let escalations = 0;
|
|
137
|
-
let simulationsRun = 0;
|
|
138
|
-
for (const action of actions) {
|
|
139
|
-
const type = action.actionType;
|
|
140
|
-
actionTypes[type] = (actionTypes[type] || 0) + 1;
|
|
141
|
-
if (!action.allowed && action.decisionEvent) {
|
|
142
|
-
const reason = action.decisionEvent.reason || 'unknown';
|
|
143
|
-
denialReasons.push(reason);
|
|
144
|
-
}
|
|
145
|
-
violations += action.governanceEvents.length;
|
|
146
|
-
if (action.escalationEvent)
|
|
147
|
-
escalations++;
|
|
148
|
-
if (action.simulationEvent)
|
|
149
|
-
simulationsRun++;
|
|
150
|
-
}
|
|
151
|
-
const timestamps = events.map((e) => e.timestamp);
|
|
152
|
-
const durationMs = timestamps.length >= 2 ? Math.max(...timestamps) - Math.min(...timestamps) : 0;
|
|
153
|
-
return {
|
|
154
|
-
totalActions: actions.length,
|
|
155
|
-
allowed: actions.filter((a) => a.allowed).length,
|
|
156
|
-
denied: actions.filter((a) => !a.allowed).length,
|
|
157
|
-
executed: actions.filter((a) => a.executed).length,
|
|
158
|
-
failed: actions.filter((a) => a.executed && !a.succeeded).length,
|
|
159
|
-
violations,
|
|
160
|
-
escalations,
|
|
161
|
-
simulationsRun,
|
|
162
|
-
durationMs,
|
|
163
|
-
actionTypes,
|
|
164
|
-
denialReasons,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
// ---------------------------------------------------------------------------
|
|
168
|
-
// Replay Engine API
|
|
169
|
-
// ---------------------------------------------------------------------------
|
|
170
|
-
/**
|
|
171
|
-
* Load a replay session from a JSONL event file by run ID.
|
|
172
|
-
* Returns null if the file does not exist.
|
|
173
|
-
*/
|
|
174
|
-
export function loadReplaySession(runId, options = {}) {
|
|
175
|
-
const filePath = resolveEventFilePath(runId, options.baseDir);
|
|
176
|
-
const events = loadEventsFromJsonl(filePath);
|
|
177
|
-
if (events.length === 0)
|
|
178
|
-
return null;
|
|
179
|
-
return buildReplaySession(runId, events);
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Build a replay session from an in-memory event array.
|
|
183
|
-
* Useful for testing and when events are already loaded.
|
|
184
|
-
*/
|
|
185
|
-
export function buildReplaySession(runId, events) {
|
|
186
|
-
// Sort events by timestamp for deterministic ordering
|
|
187
|
-
const sorted = [...events].sort((a, b) => a.timestamp - b.timestamp);
|
|
188
|
-
const startEvent = sorted.find((e) => e.kind === RUN_STARTED) || null;
|
|
189
|
-
const endEvent = sorted.find((e) => e.kind === RUN_ENDED) || null;
|
|
190
|
-
const actions = groupEventsIntoActions(sorted);
|
|
191
|
-
const summary = buildSummary(sorted, actions);
|
|
192
|
-
return {
|
|
193
|
-
runId,
|
|
194
|
-
events: sorted,
|
|
195
|
-
actions,
|
|
196
|
-
summary,
|
|
197
|
-
startEvent,
|
|
198
|
-
endEvent,
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Iterator for stepping through action encounters one at a time.
|
|
203
|
-
* Yields ReplayAction objects in chronological order.
|
|
204
|
-
*/
|
|
205
|
-
export function* iterateActions(session) {
|
|
206
|
-
for (const action of session.actions) {
|
|
207
|
-
yield action;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Filter a replay session's actions by a predicate.
|
|
212
|
-
* Returns a new session with only matching actions (events are not filtered).
|
|
213
|
-
*/
|
|
214
|
-
export function filterActions(session, predicate) {
|
|
215
|
-
const filteredActions = session.actions.filter(predicate);
|
|
216
|
-
const summary = buildSummary(session.events, filteredActions);
|
|
217
|
-
return {
|
|
218
|
-
...session,
|
|
219
|
-
actions: filteredActions,
|
|
220
|
-
summary,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Get the most recent run ID from stored events.
|
|
225
|
-
* Returns null if no runs exist.
|
|
226
|
-
*/
|
|
227
|
-
export function getLatestRunId(baseDir) {
|
|
228
|
-
const runIds = listRunIds(baseDir);
|
|
229
|
-
return runIds.length > 0 ? runIds[0] : null;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Extract the event kinds present in a session as a frequency map.
|
|
233
|
-
*/
|
|
234
|
-
export function getEventKindCounts(session) {
|
|
235
|
-
const counts = {};
|
|
236
|
-
for (const event of session.events) {
|
|
237
|
-
counts[event.kind] = (counts[event.kind] || 0) + 1;
|
|
238
|
-
}
|
|
239
|
-
return counts;
|
|
240
|
-
}
|
|
241
|
-
//# sourceMappingURL=replay-engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay-engine.js","sourceRoot":"","sources":["../../src/kernel/replay-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import type { DomainEvent } from '../core/types.js';
|
|
2
|
-
import type { ReplayAction, ReplaySession } from './replay-engine.js';
|
|
3
|
-
/**
|
|
4
|
-
* A replay processor observes a replay event stream and produces results.
|
|
5
|
-
*
|
|
6
|
-
* Processors are read-only observers — they MUST NOT mutate the session,
|
|
7
|
-
* events, or actions passed to them. The pipeline freezes inputs before
|
|
8
|
-
* dispatching to enforce this contract at runtime.
|
|
9
|
-
*
|
|
10
|
-
* Lifecycle:
|
|
11
|
-
* onSessionStart → onEvent (per event) → onAction (per action) → onSessionEnd
|
|
12
|
-
*
|
|
13
|
-
* All methods are optional. Implement only the hooks you need.
|
|
14
|
-
*
|
|
15
|
-
* Example:
|
|
16
|
-
* ```ts
|
|
17
|
-
* const counter: ReplayProcessor = {
|
|
18
|
-
* id: 'denial-counter',
|
|
19
|
-
* name: 'Denial Counter',
|
|
20
|
-
* onAction(action) {
|
|
21
|
-
* if (!action.allowed) this._count++;
|
|
22
|
-
* },
|
|
23
|
-
* getResults() {
|
|
24
|
-
* return { denials: this._count };
|
|
25
|
-
* },
|
|
26
|
-
* };
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export interface ReplayProcessor {
|
|
30
|
-
/** Unique identifier for this processor. */
|
|
31
|
-
readonly id: string;
|
|
32
|
-
/** Human-readable name. */
|
|
33
|
-
readonly name: string;
|
|
34
|
-
/** Optional description of what this processor does. */
|
|
35
|
-
readonly description?: string;
|
|
36
|
-
/** Called once when session replay begins. */
|
|
37
|
-
onSessionStart?(session: ReplaySession): void | Promise<void>;
|
|
38
|
-
/** Called for each event in the session, in timestamp order. */
|
|
39
|
-
onEvent?(event: DomainEvent): void | Promise<void>;
|
|
40
|
-
/** Called for each reconstructed action encounter, in order. */
|
|
41
|
-
onAction?(action: ReplayAction): void | Promise<void>;
|
|
42
|
-
/** Called once when session replay ends. */
|
|
43
|
-
onSessionEnd?(session: ReplaySession): void | Promise<void>;
|
|
44
|
-
/** Return accumulated results after processing. */
|
|
45
|
-
getResults?(): Record<string, unknown>;
|
|
46
|
-
}
|
|
47
|
-
/** Registry for managing replay processors. */
|
|
48
|
-
export interface ReplayProcessorRegistry {
|
|
49
|
-
/** Register a processor. Throws if a processor with the same id exists. */
|
|
50
|
-
register(processor: ReplayProcessor): void;
|
|
51
|
-
/** Remove a processor by id. Returns true if found and removed. */
|
|
52
|
-
unregister(processorId: string): boolean;
|
|
53
|
-
/** Get a processor by id. Returns undefined if not found. */
|
|
54
|
-
get(processorId: string): ReplayProcessor | undefined;
|
|
55
|
-
/** List all registered processors in registration order. */
|
|
56
|
-
list(): readonly ReplayProcessor[];
|
|
57
|
-
/** Check if a processor is registered. */
|
|
58
|
-
has(processorId: string): boolean;
|
|
59
|
-
/** Number of registered processors. */
|
|
60
|
-
count(): number;
|
|
61
|
-
}
|
|
62
|
-
/** Create a new replay processor registry. */
|
|
63
|
-
export declare function createReplayProcessorRegistry(): ReplayProcessorRegistry;
|
|
64
|
-
/** Result of a single processor's execution. */
|
|
65
|
-
export interface ProcessorResult {
|
|
66
|
-
/** Processor id. */
|
|
67
|
-
readonly processorId: string;
|
|
68
|
-
/** Processor name. */
|
|
69
|
-
readonly processorName: string;
|
|
70
|
-
/** Whether the processor completed without errors. */
|
|
71
|
-
readonly success: boolean;
|
|
72
|
-
/** Error message if the processor failed. */
|
|
73
|
-
readonly error?: string;
|
|
74
|
-
/** Results returned by getResults(), if available. */
|
|
75
|
-
readonly data: Readonly<Record<string, unknown>>;
|
|
76
|
-
/** Time taken by this processor in milliseconds. */
|
|
77
|
-
readonly durationMs: number;
|
|
78
|
-
}
|
|
79
|
-
/** Aggregate result of running all processors in the pipeline. */
|
|
80
|
-
export interface ReplayProcessorPipelineResult {
|
|
81
|
-
/** The session that was processed. */
|
|
82
|
-
readonly sessionId: string;
|
|
83
|
-
/** Total number of processors that ran. */
|
|
84
|
-
readonly processorsRun: number;
|
|
85
|
-
/** Number of processors that completed successfully. */
|
|
86
|
-
readonly successes: number;
|
|
87
|
-
/** Number of processors that failed. */
|
|
88
|
-
readonly failures: number;
|
|
89
|
-
/** Per-processor results, in execution order. */
|
|
90
|
-
readonly results: readonly ProcessorResult[];
|
|
91
|
-
/** Collected error messages from failed processors. */
|
|
92
|
-
readonly errors: readonly string[];
|
|
93
|
-
/** Total pipeline duration in milliseconds. */
|
|
94
|
-
readonly durationMs: number;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Run all registered processors against a replay session.
|
|
98
|
-
*
|
|
99
|
-
* Processors are invoked in registration order. Each processor receives:
|
|
100
|
-
* 1. onSessionStart(session)
|
|
101
|
-
* 2. onEvent(event) for each event in timestamp order
|
|
102
|
-
* 3. onAction(action) for each action encounter in order
|
|
103
|
-
* 4. onSessionEnd(session)
|
|
104
|
-
*
|
|
105
|
-
* Processor failures are isolated — a failing processor does not prevent
|
|
106
|
-
* others from running. Errors are collected in the pipeline result.
|
|
107
|
-
*/
|
|
108
|
-
export declare function runReplayProcessorPipeline(session: ReplaySession, registry: ReplayProcessorRegistry): Promise<ReplayProcessorPipelineResult>;
|
|
109
|
-
//# sourceMappingURL=replay-processor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay-processor.d.ts","sourceRoot":"","sources":["../../src/kernel/replay-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
// Replay Processor Plugin Interface — allows third-party extensions to observe
|
|
2
|
-
// and analyze replay event streams without modifying them.
|
|
3
|
-
//
|
|
4
|
-
// Processors are registered in a pipeline and invoked in order during session
|
|
5
|
-
// replay. Each processor receives session lifecycle callbacks (start, event,
|
|
6
|
-
// action, end) and can accumulate results for downstream consumption.
|
|
7
|
-
//
|
|
8
|
-
// This is the foundation for custom replay visualizations, analytics,
|
|
9
|
-
// compliance reporters, and transformation pipelines.
|
|
10
|
-
/** Create a new replay processor registry. */
|
|
11
|
-
export function createReplayProcessorRegistry() {
|
|
12
|
-
const processors = new Map();
|
|
13
|
-
return {
|
|
14
|
-
register(processor) {
|
|
15
|
-
if (!processor.id || typeof processor.id !== 'string') {
|
|
16
|
-
throw new Error('Processor must have a non-empty string id');
|
|
17
|
-
}
|
|
18
|
-
if (!processor.name || typeof processor.name !== 'string') {
|
|
19
|
-
throw new Error('Processor must have a non-empty string name');
|
|
20
|
-
}
|
|
21
|
-
if (processors.has(processor.id)) {
|
|
22
|
-
throw new Error(`Processor "${processor.id}" is already registered`);
|
|
23
|
-
}
|
|
24
|
-
processors.set(processor.id, processor);
|
|
25
|
-
},
|
|
26
|
-
unregister(processorId) {
|
|
27
|
-
return processors.delete(processorId);
|
|
28
|
-
},
|
|
29
|
-
get(processorId) {
|
|
30
|
-
return processors.get(processorId);
|
|
31
|
-
},
|
|
32
|
-
list() {
|
|
33
|
-
return [...processors.values()];
|
|
34
|
-
},
|
|
35
|
-
has(processorId) {
|
|
36
|
-
return processors.has(processorId);
|
|
37
|
-
},
|
|
38
|
-
count() {
|
|
39
|
-
return processors.size;
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Pipeline
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
/**
|
|
47
|
-
* Run all registered processors against a replay session.
|
|
48
|
-
*
|
|
49
|
-
* Processors are invoked in registration order. Each processor receives:
|
|
50
|
-
* 1. onSessionStart(session)
|
|
51
|
-
* 2. onEvent(event) for each event in timestamp order
|
|
52
|
-
* 3. onAction(action) for each action encounter in order
|
|
53
|
-
* 4. onSessionEnd(session)
|
|
54
|
-
*
|
|
55
|
-
* Processor failures are isolated — a failing processor does not prevent
|
|
56
|
-
* others from running. Errors are collected in the pipeline result.
|
|
57
|
-
*/
|
|
58
|
-
export async function runReplayProcessorPipeline(session, registry) {
|
|
59
|
-
const pipelineStart = Date.now();
|
|
60
|
-
const processors = registry.list();
|
|
61
|
-
const results = [];
|
|
62
|
-
const errors = [];
|
|
63
|
-
for (const processor of processors) {
|
|
64
|
-
const processorStart = Date.now();
|
|
65
|
-
let success = true;
|
|
66
|
-
let error;
|
|
67
|
-
let data = {};
|
|
68
|
-
try {
|
|
69
|
-
// 1. Session start
|
|
70
|
-
if (processor.onSessionStart) {
|
|
71
|
-
await processor.onSessionStart(session);
|
|
72
|
-
}
|
|
73
|
-
// 2. Per-event callbacks
|
|
74
|
-
if (processor.onEvent) {
|
|
75
|
-
for (const event of session.events) {
|
|
76
|
-
await processor.onEvent(event);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// 3. Per-action callbacks
|
|
80
|
-
if (processor.onAction) {
|
|
81
|
-
for (const action of session.actions) {
|
|
82
|
-
await processor.onAction(action);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// 4. Session end
|
|
86
|
-
if (processor.onSessionEnd) {
|
|
87
|
-
await processor.onSessionEnd(session);
|
|
88
|
-
}
|
|
89
|
-
// 5. Collect results
|
|
90
|
-
if (processor.getResults) {
|
|
91
|
-
data = processor.getResults();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
success = false;
|
|
96
|
-
error = err instanceof Error ? err.message : String(err);
|
|
97
|
-
errors.push(`Processor "${processor.id}": ${error}`);
|
|
98
|
-
}
|
|
99
|
-
results.push({
|
|
100
|
-
processorId: processor.id,
|
|
101
|
-
processorName: processor.name,
|
|
102
|
-
success,
|
|
103
|
-
error,
|
|
104
|
-
data,
|
|
105
|
-
durationMs: Date.now() - processorStart,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
sessionId: session.runId,
|
|
110
|
-
processorsRun: processors.length,
|
|
111
|
-
successes: results.filter((r) => r.success).length,
|
|
112
|
-
failures: results.filter((r) => !r.success).length,
|
|
113
|
-
results,
|
|
114
|
-
errors,
|
|
115
|
-
durationMs: Date.now() - pipelineStart,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=replay-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay-processor.js","sourceRoot":"","sources":["../../src/kernel/replay-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-simulator.d.ts","sourceRoot":"","sources":["../../../src/kernel/simulation/filesystem-simulator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,YAAY,CAAC;AA4DpE,wBAAgB,yBAAyB,IAAI,eAAe,CAsC3D"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// Filesystem simulator — predicts impact of file operations.
|
|
2
|
-
// Evaluates path sensitivity without touching the filesystem.
|
|
3
|
-
const FILE_ACTIONS = new Set(['file.write', 'file.delete']);
|
|
4
|
-
// Reuses sensitive path patterns from no-secret-exposure invariant
|
|
5
|
-
const SENSITIVE_PATTERNS = ['.env', 'credentials', '.pem', '.key', 'secret', 'token'];
|
|
6
|
-
const CONFIG_PATTERNS = [
|
|
7
|
-
'package.json',
|
|
8
|
-
'tsconfig.json',
|
|
9
|
-
'eslint',
|
|
10
|
-
'.prettierrc',
|
|
11
|
-
'webpack.config',
|
|
12
|
-
'vite.config',
|
|
13
|
-
'next.config',
|
|
14
|
-
'jest.config',
|
|
15
|
-
'vitest.config',
|
|
16
|
-
'.babelrc',
|
|
17
|
-
'babel.config',
|
|
18
|
-
];
|
|
19
|
-
const LOCKFILE_PATTERNS = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
|
|
20
|
-
const CI_PATTERNS = ['.github/', '.gitlab-ci', 'Jenkinsfile', '.circleci/', 'Dockerfile'];
|
|
21
|
-
function assessPathRisk(target) {
|
|
22
|
-
const lower = target.toLowerCase();
|
|
23
|
-
const reasons = [];
|
|
24
|
-
let riskLevel = 'low';
|
|
25
|
-
// Check sensitive files (highest risk)
|
|
26
|
-
if (SENSITIVE_PATTERNS.some((p) => lower.includes(p))) {
|
|
27
|
-
riskLevel = 'high';
|
|
28
|
-
reasons.push(`Sensitive file: ${target}`);
|
|
29
|
-
}
|
|
30
|
-
// Check lockfiles
|
|
31
|
-
if (LOCKFILE_PATTERNS.some((p) => lower.includes(p))) {
|
|
32
|
-
riskLevel = riskLevel === 'high' ? 'high' : 'medium';
|
|
33
|
-
reasons.push(`Lockfile modification: ${target}`);
|
|
34
|
-
}
|
|
35
|
-
// Check CI/CD configs
|
|
36
|
-
if (CI_PATTERNS.some((p) => lower.includes(p))) {
|
|
37
|
-
riskLevel = riskLevel === 'high' ? 'high' : 'medium';
|
|
38
|
-
reasons.push(`CI/CD config: ${target}`);
|
|
39
|
-
}
|
|
40
|
-
// Check project configs
|
|
41
|
-
if (CONFIG_PATTERNS.some((p) => lower.includes(p))) {
|
|
42
|
-
riskLevel = riskLevel === 'low' ? 'medium' : riskLevel;
|
|
43
|
-
reasons.push(`Project config: ${target}`);
|
|
44
|
-
}
|
|
45
|
-
return { riskLevel, reasons };
|
|
46
|
-
}
|
|
47
|
-
export function createFilesystemSimulator() {
|
|
48
|
-
return {
|
|
49
|
-
id: 'filesystem-simulator',
|
|
50
|
-
supports(intent) {
|
|
51
|
-
return FILE_ACTIONS.has(intent.action);
|
|
52
|
-
},
|
|
53
|
-
async simulate(intent) {
|
|
54
|
-
const start = Date.now();
|
|
55
|
-
const target = intent.target || '';
|
|
56
|
-
const { riskLevel, reasons } = assessPathRisk(target);
|
|
57
|
-
const predictedChanges = [];
|
|
58
|
-
const details = {};
|
|
59
|
-
if (intent.action === 'file.delete') {
|
|
60
|
-
predictedChanges.push(`Delete: ${target}`);
|
|
61
|
-
details.operation = 'delete';
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
predictedChanges.push(`Write: ${target}`);
|
|
65
|
-
details.operation = 'write';
|
|
66
|
-
}
|
|
67
|
-
predictedChanges.push(...reasons);
|
|
68
|
-
details.pathRisk = riskLevel;
|
|
69
|
-
details.sensitiveMatch = SENSITIVE_PATTERNS.some((p) => target.toLowerCase().includes(p));
|
|
70
|
-
return {
|
|
71
|
-
predictedChanges,
|
|
72
|
-
blastRadius: intent.filesAffected || 1,
|
|
73
|
-
riskLevel,
|
|
74
|
-
details,
|
|
75
|
-
simulatorId: 'filesystem-simulator',
|
|
76
|
-
durationMs: Date.now() - start,
|
|
77
|
-
};
|
|
78
|
-
},
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=filesystem-simulator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-simulator.js","sourceRoot":"","sources":["../../../src/kernel/simulation/filesystem-simulator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { ActionSimulator } from './types.js';
|
|
2
|
-
/** Validate a branch name to prevent command injection */
|
|
3
|
-
export declare function isValidBranchName(name: string): boolean;
|
|
4
|
-
export declare function createGitSimulator(): ActionSimulator;
|
|
5
|
-
//# sourceMappingURL=git-simulator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-simulator.d.ts","sourceRoot":"","sources":["../../../src/kernel/simulation/git-simulator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,YAAY,CAAC;AAOpE,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMvD;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAqGpD"}
|