hackmyagent 0.7.2 → 0.8.1
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 +191 -0
- package/README.md +172 -261
- package/dist/abgr/controls.d.ts +35 -0
- package/dist/abgr/controls.d.ts.map +1 -0
- package/dist/abgr/controls.js +1058 -0
- package/dist/abgr/controls.js.map +1 -0
- package/dist/abgr/detector.d.ts +45 -0
- package/dist/abgr/detector.d.ts.map +1 -0
- package/dist/abgr/detector.js +175 -0
- package/dist/abgr/detector.js.map +1 -0
- package/dist/abgr/index.d.ts +24 -0
- package/dist/abgr/index.d.ts.map +1 -0
- package/dist/abgr/index.js +50 -0
- package/dist/abgr/index.js.map +1 -0
- package/dist/abgr/scorer.d.ts +36 -0
- package/dist/abgr/scorer.d.ts.map +1 -0
- package/dist/abgr/scorer.js +205 -0
- package/dist/abgr/scorer.js.map +1 -0
- package/dist/abgr/templates.d.ts +35 -0
- package/dist/abgr/templates.d.ts.map +1 -0
- package/dist/abgr/templates.js +668 -0
- package/dist/abgr/templates.js.map +1 -0
- package/dist/abgr/tier.d.ts +27 -0
- package/dist/abgr/tier.d.ts.map +1 -0
- package/dist/abgr/tier.js +115 -0
- package/dist/abgr/tier.js.map +1 -0
- package/dist/abgr/types.d.ts +59 -0
- package/dist/abgr/types.d.ts.map +1 -0
- package/dist/abgr/types.js +10 -0
- package/dist/abgr/types.js.map +1 -0
- package/dist/agent-scan/checks.d.ts +6 -0
- package/dist/agent-scan/checks.d.ts.map +1 -0
- package/dist/agent-scan/checks.js +93 -0
- package/dist/agent-scan/checks.js.map +1 -0
- package/dist/agent-scan/index.d.ts +10 -0
- package/dist/agent-scan/index.d.ts.map +1 -0
- package/dist/agent-scan/index.js +16 -0
- package/dist/agent-scan/index.js.map +1 -0
- package/dist/agent-scan/scanner.d.ts +31 -0
- package/dist/agent-scan/scanner.d.ts.map +1 -0
- package/dist/agent-scan/scanner.js +484 -0
- package/dist/agent-scan/scanner.js.map +1 -0
- package/dist/agent-scan/types.d.ts +63 -0
- package/dist/agent-scan/types.d.ts.map +1 -0
- package/dist/agent-scan/types.js +10 -0
- package/dist/agent-scan/types.js.map +1 -0
- package/dist/arp/cli/index.d.ts +3 -0
- package/dist/arp/cli/index.d.ts.map +1 -0
- package/dist/arp/cli/index.js +225 -0
- package/dist/arp/cli/index.js.map +1 -0
- package/dist/arp/config/loader.d.ts +8 -0
- package/dist/arp/config/loader.d.ts.map +1 -0
- package/dist/arp/config/loader.js +102 -0
- package/dist/arp/config/loader.js.map +1 -0
- package/dist/arp/enforcement/kill-switch.d.ts +22 -0
- package/dist/arp/enforcement/kill-switch.d.ts.map +1 -0
- package/dist/arp/enforcement/kill-switch.js +122 -0
- package/dist/arp/enforcement/kill-switch.js.map +1 -0
- package/dist/arp/engine/event-engine.d.ts +29 -0
- package/dist/arp/engine/event-engine.d.ts.map +1 -0
- package/dist/arp/engine/event-engine.js +233 -0
- package/dist/arp/engine/event-engine.js.map +1 -0
- package/dist/arp/index.d.ts +81 -0
- package/dist/arp/index.d.ts.map +1 -0
- package/dist/arp/index.js +239 -0
- package/dist/arp/index.js.map +1 -0
- package/dist/arp/intelligence/adapters.d.ts +45 -0
- package/dist/arp/intelligence/adapters.d.ts.map +1 -0
- package/dist/arp/intelligence/adapters.js +222 -0
- package/dist/arp/intelligence/adapters.js.map +1 -0
- package/dist/arp/intelligence/anomaly.d.ts +32 -0
- package/dist/arp/intelligence/anomaly.d.ts.map +1 -0
- package/dist/arp/intelligence/anomaly.js +80 -0
- package/dist/arp/intelligence/anomaly.js.map +1 -0
- package/dist/arp/intelligence/budget.d.ts +33 -0
- package/dist/arp/intelligence/budget.d.ts.map +1 -0
- package/dist/arp/intelligence/budget.js +150 -0
- package/dist/arp/intelligence/budget.js.map +1 -0
- package/dist/arp/intelligence/coordinator.d.ts +43 -0
- package/dist/arp/intelligence/coordinator.d.ts.map +1 -0
- package/dist/arp/intelligence/coordinator.js +301 -0
- package/dist/arp/intelligence/coordinator.js.map +1 -0
- package/dist/arp/interceptors/a2a-protocol.d.ts +29 -0
- package/dist/arp/interceptors/a2a-protocol.d.ts.map +1 -0
- package/dist/arp/interceptors/a2a-protocol.js +111 -0
- package/dist/arp/interceptors/a2a-protocol.js.map +1 -0
- package/dist/arp/interceptors/filesystem.d.ts +33 -0
- package/dist/arp/interceptors/filesystem.d.ts.map +1 -0
- package/dist/arp/interceptors/filesystem.js +199 -0
- package/dist/arp/interceptors/filesystem.js.map +1 -0
- package/dist/arp/interceptors/mcp-protocol.d.ts +25 -0
- package/dist/arp/interceptors/mcp-protocol.d.ts.map +1 -0
- package/dist/arp/interceptors/mcp-protocol.js +126 -0
- package/dist/arp/interceptors/mcp-protocol.js.map +1 -0
- package/dist/arp/interceptors/network.d.ts +26 -0
- package/dist/arp/interceptors/network.d.ts.map +1 -0
- package/dist/arp/interceptors/network.js +146 -0
- package/dist/arp/interceptors/network.js.map +1 -0
- package/dist/arp/interceptors/process.d.ts +26 -0
- package/dist/arp/interceptors/process.d.ts.map +1 -0
- package/dist/arp/interceptors/process.js +157 -0
- package/dist/arp/interceptors/process.js.map +1 -0
- package/dist/arp/interceptors/prompt.d.ts +29 -0
- package/dist/arp/interceptors/prompt.d.ts.map +1 -0
- package/dist/arp/interceptors/prompt.js +82 -0
- package/dist/arp/interceptors/prompt.js.map +1 -0
- package/dist/arp/license/index.d.ts +59 -0
- package/dist/arp/license/index.d.ts.map +1 -0
- package/dist/arp/license/index.js +78 -0
- package/dist/arp/license/index.js.map +1 -0
- package/dist/arp/monitors/filesystem.d.ts +21 -0
- package/dist/arp/monitors/filesystem.d.ts.map +1 -0
- package/dist/arp/monitors/filesystem.js +141 -0
- package/dist/arp/monitors/filesystem.js.map +1 -0
- package/dist/arp/monitors/network.d.ts +32 -0
- package/dist/arp/monitors/network.d.ts.map +1 -0
- package/dist/arp/monitors/network.js +301 -0
- package/dist/arp/monitors/network.js.map +1 -0
- package/dist/arp/monitors/process.d.ts +24 -0
- package/dist/arp/monitors/process.d.ts.map +1 -0
- package/dist/arp/monitors/process.js +205 -0
- package/dist/arp/monitors/process.js.map +1 -0
- package/dist/arp/patterns/ai-threats.d.ts +48 -0
- package/dist/arp/patterns/ai-threats.d.ts.map +1 -0
- package/dist/arp/patterns/ai-threats.js +215 -0
- package/dist/arp/patterns/ai-threats.js.map +1 -0
- package/dist/arp/proxy/forward.d.ts +23 -0
- package/dist/arp/proxy/forward.d.ts.map +1 -0
- package/dist/arp/proxy/forward.js +152 -0
- package/dist/arp/proxy/forward.js.map +1 -0
- package/dist/arp/proxy/server.d.ts +45 -0
- package/dist/arp/proxy/server.d.ts.map +1 -0
- package/dist/arp/proxy/server.js +331 -0
- package/dist/arp/proxy/server.js.map +1 -0
- package/dist/arp/reporting/local-log.d.ts +22 -0
- package/dist/arp/reporting/local-log.d.ts.map +1 -0
- package/dist/arp/reporting/local-log.js +116 -0
- package/dist/arp/reporting/local-log.js.map +1 -0
- package/dist/arp/types.d.ts +230 -0
- package/dist/arp/types.d.ts.map +1 -0
- package/dist/arp/types.js +4 -0
- package/dist/arp/types.js.map +1 -0
- package/dist/attack/custom-payloads.d.ts +11 -0
- package/dist/attack/custom-payloads.d.ts.map +1 -0
- package/dist/attack/custom-payloads.js +108 -0
- package/dist/attack/custom-payloads.js.map +1 -0
- package/dist/attack/fail-policy.d.ts +16 -0
- package/dist/attack/fail-policy.d.ts.map +1 -0
- package/dist/attack/fail-policy.js +36 -0
- package/dist/attack/fail-policy.js.map +1 -0
- package/dist/attack/index.d.ts +12 -0
- package/dist/attack/index.d.ts.map +1 -0
- package/dist/attack/index.js +30 -0
- package/dist/attack/index.js.map +1 -0
- package/dist/attack/payloads/a2a-attacks.d.ts +12 -0
- package/dist/attack/payloads/a2a-attacks.d.ts.map +1 -0
- package/dist/attack/payloads/a2a-attacks.js +221 -0
- package/dist/attack/payloads/a2a-attacks.js.map +1 -0
- package/dist/attack/payloads/capability-abuse.d.ts +8 -0
- package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
- package/dist/attack/payloads/capability-abuse.js +222 -0
- package/dist/attack/payloads/capability-abuse.js.map +1 -0
- package/dist/attack/payloads/context-manipulation.d.ts +8 -0
- package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
- package/dist/attack/payloads/context-manipulation.js +217 -0
- package/dist/attack/payloads/context-manipulation.js.map +1 -0
- package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
- package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
- package/dist/attack/payloads/data-exfiltration.js +249 -0
- package/dist/attack/payloads/data-exfiltration.js.map +1 -0
- package/dist/attack/payloads/index.d.ts +29 -0
- package/dist/attack/payloads/index.d.ts.map +1 -0
- package/dist/attack/payloads/index.js +76 -0
- package/dist/attack/payloads/index.js.map +1 -0
- package/dist/attack/payloads/jailbreak.d.ts +8 -0
- package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
- package/dist/attack/payloads/jailbreak.js +265 -0
- package/dist/attack/payloads/jailbreak.js.map +1 -0
- package/dist/attack/payloads/mcp-exploitation.d.ts +12 -0
- package/dist/attack/payloads/mcp-exploitation.d.ts.map +1 -0
- package/dist/attack/payloads/mcp-exploitation.js +221 -0
- package/dist/attack/payloads/mcp-exploitation.js.map +1 -0
- package/dist/attack/payloads/prompt-injection.d.ts +8 -0
- package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
- package/dist/attack/payloads/prompt-injection.js +262 -0
- package/dist/attack/payloads/prompt-injection.js.map +1 -0
- package/dist/attack/scanner.d.ts +84 -0
- package/dist/attack/scanner.d.ts.map +1 -0
- package/dist/attack/scanner.js +509 -0
- package/dist/attack/scanner.js.map +1 -0
- package/dist/attack/types.d.ts +153 -0
- package/dist/attack/types.d.ts.map +1 -0
- package/dist/attack/types.js +46 -0
- package/dist/attack/types.js.map +1 -0
- package/dist/benchmarks/index.d.ts +16 -0
- package/dist/benchmarks/index.d.ts.map +1 -0
- package/dist/benchmarks/index.js +27 -0
- package/dist/benchmarks/index.js.map +1 -0
- package/dist/benchmarks/oasb-1.d.ts +112 -0
- package/dist/benchmarks/oasb-1.d.ts.map +1 -0
- package/dist/benchmarks/oasb-1.js +1124 -0
- package/dist/benchmarks/oasb-1.js.map +1 -0
- package/dist/checker/check-skill.d.ts +48 -0
- package/dist/checker/check-skill.d.ts.map +1 -0
- package/dist/checker/check-skill.js +105 -0
- package/dist/checker/check-skill.js.map +1 -0
- package/dist/checker/index.d.ts +12 -0
- package/dist/checker/index.d.ts.map +1 -0
- package/dist/checker/index.js +16 -0
- package/dist/checker/index.js.map +1 -0
- package/dist/checker/permission-analyzer.d.ts +12 -0
- package/dist/checker/permission-analyzer.d.ts.map +1 -0
- package/dist/checker/permission-analyzer.js +84 -0
- package/dist/checker/permission-analyzer.js.map +1 -0
- package/dist/checker/publisher-verifier.d.ts +34 -0
- package/dist/checker/publisher-verifier.d.ts.map +1 -0
- package/dist/checker/publisher-verifier.js +121 -0
- package/dist/checker/publisher-verifier.js.map +1 -0
- package/dist/checker/skill-identifier.d.ts +14 -0
- package/dist/checker/skill-identifier.d.ts.map +1 -0
- package/dist/checker/skill-identifier.js +55 -0
- package/dist/checker/skill-identifier.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3534 -0
- package/dist/cli.js.map +1 -0
- package/dist/hardening/index.d.ts +7 -0
- package/dist/hardening/index.d.ts.map +1 -0
- package/dist/hardening/index.js +9 -0
- package/dist/hardening/index.js.map +1 -0
- package/dist/hardening/llm-checks.d.ts +18 -0
- package/dist/hardening/llm-checks.d.ts.map +1 -0
- package/dist/hardening/llm-checks.js +434 -0
- package/dist/hardening/llm-checks.js.map +1 -0
- package/dist/hardening/mcp-tool-enum.d.ts +45 -0
- package/dist/hardening/mcp-tool-enum.d.ts.map +1 -0
- package/dist/hardening/mcp-tool-enum.js +315 -0
- package/dist/hardening/mcp-tool-enum.js.map +1 -0
- package/dist/hardening/scanner.d.ts +147 -0
- package/dist/hardening/scanner.d.ts.map +1 -0
- package/dist/hardening/scanner.js +5445 -0
- package/dist/hardening/scanner.js.map +1 -0
- package/dist/hardening/security-check.d.ts +85 -0
- package/dist/hardening/security-check.d.ts.map +1 -0
- package/dist/hardening/security-check.js +6 -0
- package/dist/hardening/security-check.js.map +1 -0
- package/dist/hardening/shell-checks.d.ts +21 -0
- package/dist/hardening/shell-checks.d.ts.map +1 -0
- package/dist/hardening/shell-checks.js +236 -0
- package/dist/hardening/shell-checks.js.map +1 -0
- package/dist/index.d.ts +38 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -3525
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +10 -10
- package/dist/mcp-server.js.map +1 -1
- package/dist/oasb/config/dvaa-targets.d.ts +13 -0
- package/dist/oasb/config/dvaa-targets.d.ts.map +1 -0
- package/dist/oasb/config/dvaa-targets.js +89 -0
- package/dist/oasb/config/dvaa-targets.js.map +1 -0
- package/dist/oasb/harness/arp-wrapper.d.ts +29 -0
- package/dist/oasb/harness/arp-wrapper.d.ts.map +1 -0
- package/dist/oasb/harness/arp-wrapper.js +134 -0
- package/dist/oasb/harness/arp-wrapper.js.map +1 -0
- package/dist/oasb/harness/dvaa-client.d.ts +46 -0
- package/dist/oasb/harness/dvaa-client.d.ts.map +1 -0
- package/dist/oasb/harness/dvaa-client.js +98 -0
- package/dist/oasb/harness/dvaa-client.js.map +1 -0
- package/dist/oasb/harness/dvaa-manager.d.ts +17 -0
- package/dist/oasb/harness/dvaa-manager.d.ts.map +1 -0
- package/dist/oasb/harness/dvaa-manager.js +132 -0
- package/dist/oasb/harness/dvaa-manager.js.map +1 -0
- package/dist/oasb/harness/event-collector.d.ts +33 -0
- package/dist/oasb/harness/event-collector.d.ts.map +1 -0
- package/dist/oasb/harness/event-collector.js +86 -0
- package/dist/oasb/harness/event-collector.js.map +1 -0
- package/dist/oasb/harness/metrics.d.ts +14 -0
- package/dist/oasb/harness/metrics.d.ts.map +1 -0
- package/dist/oasb/harness/metrics.js +56 -0
- package/dist/oasb/harness/metrics.js.map +1 -0
- package/dist/oasb/harness/mock-llm-adapter.d.ts +34 -0
- package/dist/oasb/harness/mock-llm-adapter.d.ts.map +1 -0
- package/dist/oasb/harness/mock-llm-adapter.js +69 -0
- package/dist/oasb/harness/mock-llm-adapter.js.map +1 -0
- package/dist/oasb/harness/types.d.ts +74 -0
- package/dist/oasb/harness/types.d.ts.map +1 -0
- package/dist/oasb/harness/types.js +3 -0
- package/dist/oasb/harness/types.js.map +1 -0
- package/dist/plugins/core.d.ts +109 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +30 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/credvault.d.ts +22 -0
- package/dist/plugins/credvault.d.ts.map +1 -0
- package/dist/plugins/credvault.js +374 -0
- package/dist/plugins/credvault.js.map +1 -0
- package/dist/plugins/signcrypt.d.ts +27 -0
- package/dist/plugins/signcrypt.d.ts.map +1 -0
- package/dist/plugins/signcrypt.js +317 -0
- package/dist/plugins/signcrypt.js.map +1 -0
- package/dist/plugins/skillguard.d.ts +25 -0
- package/dist/plugins/skillguard.d.ts.map +1 -0
- package/dist/plugins/skillguard.js +346 -0
- package/dist/plugins/skillguard.js.map +1 -0
- package/dist/registry/client.d.ts +125 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +308 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/contribution.d.ts +178 -0
- package/dist/registry/contribution.d.ts.map +1 -0
- package/dist/registry/contribution.js +272 -0
- package/dist/registry/contribution.js.map +1 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +10 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/scanner/external-scanner.d.ts +13 -0
- package/dist/scanner/external-scanner.d.ts.map +1 -0
- package/dist/scanner/external-scanner.js +299 -0
- package/dist/scanner/external-scanner.js.map +1 -0
- package/dist/scanner/index.d.ts +6 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +9 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/types.d.ts +32 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +6 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/semantic/deep-scan.d.ts +13 -0
- package/dist/semantic/deep-scan.d.ts.map +1 -0
- package/dist/semantic/deep-scan.js +63 -0
- package/dist/semantic/deep-scan.js.map +1 -0
- package/dist/semantic/index.d.ts +17 -0
- package/dist/semantic/index.d.ts.map +1 -0
- package/dist/semantic/index.js +39 -0
- package/dist/semantic/index.js.map +1 -0
- package/dist/semantic/integration/cost-estimator.d.ts +17 -0
- package/dist/semantic/integration/cost-estimator.d.ts.map +1 -0
- package/dist/semantic/integration/cost-estimator.js +54 -0
- package/dist/semantic/integration/cost-estimator.js.map +1 -0
- package/dist/semantic/integration/finding-adapter.d.ts +34 -0
- package/dist/semantic/integration/finding-adapter.d.ts.map +1 -0
- package/dist/semantic/integration/finding-adapter.js +41 -0
- package/dist/semantic/integration/finding-adapter.js.map +1 -0
- package/dist/semantic/integration/oasb-upgrader.d.ts +20 -0
- package/dist/semantic/integration/oasb-upgrader.d.ts.map +1 -0
- package/dist/semantic/integration/oasb-upgrader.js +47 -0
- package/dist/semantic/integration/oasb-upgrader.js.map +1 -0
- package/dist/semantic/llm/budget.d.ts +50 -0
- package/dist/semantic/llm/budget.d.ts.map +1 -0
- package/dist/semantic/llm/budget.js +139 -0
- package/dist/semantic/llm/budget.js.map +1 -0
- package/dist/semantic/llm/cache.d.ts +36 -0
- package/dist/semantic/llm/cache.d.ts.map +1 -0
- package/dist/semantic/llm/cache.js +103 -0
- package/dist/semantic/llm/cache.js.map +1 -0
- package/dist/semantic/llm/client.d.ts +49 -0
- package/dist/semantic/llm/client.d.ts.map +1 -0
- package/dist/semantic/llm/client.js +64 -0
- package/dist/semantic/llm/client.js.map +1 -0
- package/dist/semantic/llm/index.d.ts +33 -0
- package/dist/semantic/llm/index.d.ts.map +1 -0
- package/dist/semantic/llm/index.js +129 -0
- package/dist/semantic/llm/index.js.map +1 -0
- package/dist/semantic/llm/prompts.d.ts +30 -0
- package/dist/semantic/llm/prompts.d.ts.map +1 -0
- package/dist/semantic/llm/prompts.js +120 -0
- package/dist/semantic/llm/prompts.js.map +1 -0
- package/dist/semantic/structural/credential-context.d.ts +14 -0
- package/dist/semantic/structural/credential-context.d.ts.map +1 -0
- package/dist/semantic/structural/credential-context.js +295 -0
- package/dist/semantic/structural/credential-context.js.map +1 -0
- package/dist/semantic/structural/index.d.ts +28 -0
- package/dist/semantic/structural/index.d.ts.map +1 -0
- package/dist/semantic/structural/index.js +138 -0
- package/dist/semantic/structural/index.js.map +1 -0
- package/dist/semantic/structural/instruction.d.ts +19 -0
- package/dist/semantic/structural/instruction.d.ts.map +1 -0
- package/dist/semantic/structural/instruction.js +167 -0
- package/dist/semantic/structural/instruction.js.map +1 -0
- package/dist/semantic/structural/mcp-config.d.ts +22 -0
- package/dist/semantic/structural/mcp-config.d.ts.map +1 -0
- package/dist/semantic/structural/mcp-config.js +294 -0
- package/dist/semantic/structural/mcp-config.js.map +1 -0
- package/dist/semantic/structural/permission-model.d.ts +16 -0
- package/dist/semantic/structural/permission-model.d.ts.map +1 -0
- package/dist/semantic/structural/permission-model.js +121 -0
- package/dist/semantic/structural/permission-model.js.map +1 -0
- package/dist/semantic/types.d.ts +122 -0
- package/dist/semantic/types.d.ts.map +1 -0
- package/dist/semantic/types.js +10 -0
- package/dist/semantic/types.js.map +1 -0
- package/package.json +25 -14
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IntelligenceCoordinator = void 0;
|
|
4
|
+
const budget_1 = require("./budget");
|
|
5
|
+
const adapters_1 = require("./adapters");
|
|
6
|
+
const anomaly_1 = require("./anomaly");
|
|
7
|
+
const license_1 = require("../license");
|
|
8
|
+
const SEVERITY_ORDER = ['info', 'low', 'medium', 'high', 'critical'];
|
|
9
|
+
/**
|
|
10
|
+
* The 3-Layer Intelligence Coordinator.
|
|
11
|
+
*
|
|
12
|
+
* L0: Rules (free) — Pattern matching, allowlists, thresholds. Every event.
|
|
13
|
+
* L1: Statistical (free) — Z-score anomaly detection, baseline deviation. L0 flags.
|
|
14
|
+
* L2: LLM-Assisted ($) — Micro-prompt to agent's LLM. Only L1 flags + budget check.
|
|
15
|
+
*
|
|
16
|
+
* 99% of events never reach L2. Cost is ~$0.01/day for most agents.
|
|
17
|
+
*/
|
|
18
|
+
class IntelligenceCoordinator {
|
|
19
|
+
constructor(arpConfig, dataDir) {
|
|
20
|
+
this.adapter = null;
|
|
21
|
+
this.batchQueue = [];
|
|
22
|
+
this.config = arpConfig.intelligence ?? {};
|
|
23
|
+
this.budget = new budget_1.BudgetController(dataDir, this.config);
|
|
24
|
+
this.anomaly = new anomaly_1.AnomalyDetector();
|
|
25
|
+
// Build agent context for LLM prompts
|
|
26
|
+
this.agentContext = buildAgentContext(arpConfig);
|
|
27
|
+
// Initialize LLM adapter if intelligence is enabled
|
|
28
|
+
if (this.config.enabled !== false) {
|
|
29
|
+
try {
|
|
30
|
+
if (this.config.adapter) {
|
|
31
|
+
this.adapter = (0, adapters_1.createAdapter)(this.config.adapter, this.config.adapterConfig);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.adapter = (0, adapters_1.autoDetectAdapter)(this.config.adapterConfig);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// No adapter available — L2 disabled, L0+L1 still work
|
|
39
|
+
this.adapter = null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Analyze an event through the 3-layer stack.
|
|
45
|
+
* Mutates the event's category, severity, and classifiedBy fields.
|
|
46
|
+
* Returns the LLM assessment if L2 was invoked.
|
|
47
|
+
*/
|
|
48
|
+
async analyze(event) {
|
|
49
|
+
// L0: Already classified by the monitor that emitted it
|
|
50
|
+
// L1: Statistical anomaly detection (free)
|
|
51
|
+
const anomalyScore = this.anomaly.score(event);
|
|
52
|
+
if (anomalyScore > 2.0) {
|
|
53
|
+
// Z-score > 2 standard deviations — flag as anomaly
|
|
54
|
+
if (event.category === 'normal') {
|
|
55
|
+
event.category = 'anomaly';
|
|
56
|
+
}
|
|
57
|
+
if (severityIndex(event.severity) < severityIndex('medium')) {
|
|
58
|
+
event.severity = 'medium';
|
|
59
|
+
}
|
|
60
|
+
event.classifiedBy = 'L1-statistical';
|
|
61
|
+
}
|
|
62
|
+
// L1 records this event for future baseline
|
|
63
|
+
this.anomaly.record(event);
|
|
64
|
+
// L2: LLM assessment (only if L1 flagged and budget allows)
|
|
65
|
+
if (this.shouldEscalateToL2(event)) {
|
|
66
|
+
// AI-layer L2 assessment requires premium license
|
|
67
|
+
if (AI_LAYER_SOURCES.has(event.source)) {
|
|
68
|
+
const licensed = await (0, license_1.hasFeature)(license_1.PREMIUM_FEATURES.AI_LAYER_L2);
|
|
69
|
+
if (!licensed)
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (this.config.enableBatching && event.severity !== 'critical') {
|
|
73
|
+
return this.queueForBatch(event);
|
|
74
|
+
}
|
|
75
|
+
return this.assessWithLlm(event);
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/** Get budget status */
|
|
80
|
+
getBudgetStatus() {
|
|
81
|
+
return this.budget.getStatus();
|
|
82
|
+
}
|
|
83
|
+
/** Stop the coordinator (flush batches, clean up) */
|
|
84
|
+
async stop() {
|
|
85
|
+
if (this.batchTimer) {
|
|
86
|
+
clearTimeout(this.batchTimer);
|
|
87
|
+
this.batchTimer = undefined;
|
|
88
|
+
}
|
|
89
|
+
// Flush remaining batch
|
|
90
|
+
if (this.batchQueue.length > 0) {
|
|
91
|
+
await this.flushBatch();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
shouldEscalateToL2(event) {
|
|
95
|
+
// L2 disabled
|
|
96
|
+
if (this.config.enabled === false)
|
|
97
|
+
return false;
|
|
98
|
+
if (!this.adapter)
|
|
99
|
+
return false;
|
|
100
|
+
// Only escalate if L1 flagged it
|
|
101
|
+
if (event.category === 'normal')
|
|
102
|
+
return false;
|
|
103
|
+
// Minimum severity check
|
|
104
|
+
const minSev = this.config.minSeverityForLlm ?? 'medium';
|
|
105
|
+
if (severityIndex(event.severity) < severityIndex(minSev))
|
|
106
|
+
return false;
|
|
107
|
+
// Budget check
|
|
108
|
+
const estimatedCost = this.adapter.estimateCost(200, // ~200 input tokens for micro-prompt
|
|
109
|
+
this.config.maxTokensPerCall ?? 300);
|
|
110
|
+
if (!this.budget.canAfford(estimatedCost))
|
|
111
|
+
return false;
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
async assessWithLlm(event) {
|
|
115
|
+
if (!this.adapter)
|
|
116
|
+
return null;
|
|
117
|
+
const prompt = buildMicroPrompt(this.agentContext, event);
|
|
118
|
+
const maxTokens = this.config.maxTokensPerCall ?? 300;
|
|
119
|
+
try {
|
|
120
|
+
const response = await this.adapter.assess(prompt, maxTokens);
|
|
121
|
+
const cost = this.adapter.estimateCost(response.inputTokens, response.outputTokens);
|
|
122
|
+
this.budget.record(cost, response.inputTokens + response.outputTokens);
|
|
123
|
+
const assessment = parseAssessment(response.content, response.inputTokens + response.outputTokens, cost);
|
|
124
|
+
event.llmAssessment = assessment;
|
|
125
|
+
event.classifiedBy = 'L2-llm';
|
|
126
|
+
// LLM can upgrade severity
|
|
127
|
+
if (assessment.recommendation === 'kill') {
|
|
128
|
+
event.severity = 'critical';
|
|
129
|
+
event.category = 'threat';
|
|
130
|
+
}
|
|
131
|
+
else if (assessment.recommendation === 'pause') {
|
|
132
|
+
event.severity = 'high';
|
|
133
|
+
event.category = 'violation';
|
|
134
|
+
}
|
|
135
|
+
return assessment;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// LLM failure — fall back to L1 classification
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
queueForBatch(event) {
|
|
143
|
+
this.batchQueue.push(event);
|
|
144
|
+
if (!this.batchTimer) {
|
|
145
|
+
const windowMs = this.config.batchWindowMs ?? 300000;
|
|
146
|
+
this.batchTimer = setTimeout(() => {
|
|
147
|
+
this.flushBatch().catch(() => { });
|
|
148
|
+
this.batchTimer = undefined;
|
|
149
|
+
}, windowMs);
|
|
150
|
+
if (this.batchTimer.unref) {
|
|
151
|
+
this.batchTimer.unref();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null; // Assessment will come later
|
|
155
|
+
}
|
|
156
|
+
async flushBatch() {
|
|
157
|
+
if (this.batchQueue.length === 0 || !this.adapter)
|
|
158
|
+
return;
|
|
159
|
+
const events = this.batchQueue.splice(0);
|
|
160
|
+
const prompt = buildBatchPrompt(this.agentContext, events);
|
|
161
|
+
const maxTokens = Math.min((this.config.maxTokensPerCall ?? 300) * 2, 1000);
|
|
162
|
+
try {
|
|
163
|
+
const response = await this.adapter.assess(prompt, maxTokens);
|
|
164
|
+
const cost = this.adapter.estimateCost(response.inputTokens, response.outputTokens);
|
|
165
|
+
this.budget.record(cost, response.inputTokens + response.outputTokens);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Batch failure — events remain at L1 classification
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.IntelligenceCoordinator = IntelligenceCoordinator;
|
|
173
|
+
// --- Prompt Engineering (the craft) ---
|
|
174
|
+
function buildAgentContext(config) {
|
|
175
|
+
const parts = [`Agent: ${config.agentName}`];
|
|
176
|
+
if (config.agentDescription) {
|
|
177
|
+
parts.push(`Purpose: ${config.agentDescription}`);
|
|
178
|
+
}
|
|
179
|
+
if (config.declaredCapabilities?.length) {
|
|
180
|
+
parts.push(`Capabilities: ${config.declaredCapabilities.join(', ')}`);
|
|
181
|
+
}
|
|
182
|
+
return parts.join('\n');
|
|
183
|
+
}
|
|
184
|
+
/** AI-layer monitor sources that use specialized prompts */
|
|
185
|
+
const AI_LAYER_SOURCES = new Set(['prompt', 'mcp-protocol', 'a2a-protocol']);
|
|
186
|
+
/**
|
|
187
|
+
* Micro-prompt: ~200 tokens in, ~100 tokens out.
|
|
188
|
+
* Designed for speed and cost efficiency. No chain-of-thought.
|
|
189
|
+
* Uses specialized templates for AI-layer threats.
|
|
190
|
+
*/
|
|
191
|
+
function buildMicroPrompt(agentContext, event) {
|
|
192
|
+
if (AI_LAYER_SOURCES.has(event.source)) {
|
|
193
|
+
return buildAILayerPrompt(agentContext, event);
|
|
194
|
+
}
|
|
195
|
+
return `SECURITY ASSESSMENT — answer concisely.
|
|
196
|
+
|
|
197
|
+
${agentContext}
|
|
198
|
+
|
|
199
|
+
Event: ${event.source} monitor detected ${event.category} (${event.severity})
|
|
200
|
+
Detail: ${event.description}
|
|
201
|
+
Data: ${JSON.stringify(event.data).slice(0, 500)}
|
|
202
|
+
|
|
203
|
+
Is this behavior consistent with the agent's declared purpose and capabilities?
|
|
204
|
+
Respond in exactly this format:
|
|
205
|
+
CONSISTENT: YES or NO
|
|
206
|
+
CONFIDENCE: 0.0-1.0
|
|
207
|
+
REASONING: one sentence
|
|
208
|
+
ACTION: ALLOW, ALERT, PAUSE, or KILL`;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Specialized prompt for AI-layer threats (prompt injection, MCP exploitation, A2A spoofing).
|
|
212
|
+
* Provides the LLM with pattern match context for true/false positive assessment.
|
|
213
|
+
*/
|
|
214
|
+
function buildAILayerPrompt(agentContext, event) {
|
|
215
|
+
const data = event.data;
|
|
216
|
+
const patternId = data.patternId ?? 'unknown';
|
|
217
|
+
const patternCategory = data.patternCategory ?? event.source;
|
|
218
|
+
const matchedText = data.matchedText ?? '';
|
|
219
|
+
const direction = data.direction ?? '';
|
|
220
|
+
let contentContext = '';
|
|
221
|
+
if (event.source === 'prompt') {
|
|
222
|
+
contentContext = direction === 'input'
|
|
223
|
+
? `User/agent sent input that matched pattern ${patternId} (${patternCategory}).`
|
|
224
|
+
: `LLM response matched output leak pattern ${patternId} (${patternCategory}).`;
|
|
225
|
+
}
|
|
226
|
+
else if (event.source === 'mcp-protocol') {
|
|
227
|
+
const toolName = data.toolName ?? 'unknown';
|
|
228
|
+
contentContext = `MCP tool call "${toolName}" has parameters matching exploitation pattern ${patternId}.`;
|
|
229
|
+
}
|
|
230
|
+
else if (event.source === 'a2a-protocol') {
|
|
231
|
+
const from = data.from ?? 'unknown';
|
|
232
|
+
const to = data.to ?? 'unknown';
|
|
233
|
+
contentContext = `A2A message from "${from}" to "${to}" matched attack pattern ${patternId}.`;
|
|
234
|
+
}
|
|
235
|
+
return `AI-LAYER THREAT ASSESSMENT — determine if this is a true positive or false positive.
|
|
236
|
+
|
|
237
|
+
${agentContext}
|
|
238
|
+
|
|
239
|
+
Detection: ${event.description}
|
|
240
|
+
Context: ${contentContext}
|
|
241
|
+
Matched text: "${String(matchedText).slice(0, 300)}"
|
|
242
|
+
Pattern: ${patternId} — ${patternCategory}
|
|
243
|
+
Severity: ${event.severity}
|
|
244
|
+
|
|
245
|
+
Could this be legitimate usage given the agent's purpose, or is this a genuine attack attempt?
|
|
246
|
+
Consider: obfuscation techniques, benign edge cases, and the agent's declared capabilities.
|
|
247
|
+
|
|
248
|
+
Respond in exactly this format:
|
|
249
|
+
CONSISTENT: YES (benign/false positive) or NO (genuine threat)
|
|
250
|
+
CONFIDENCE: 0.0-1.0
|
|
251
|
+
REASONING: one sentence explaining why
|
|
252
|
+
ACTION: ALLOW, ALERT, PAUSE, or KILL`;
|
|
253
|
+
}
|
|
254
|
+
function buildBatchPrompt(agentContext, events) {
|
|
255
|
+
const summary = events.map((e, i) => `${i + 1}. [${e.source}] ${e.severity}: ${e.description}`).join('\n');
|
|
256
|
+
return `BATCH SECURITY ASSESSMENT — ${events.length} anomalies.
|
|
257
|
+
|
|
258
|
+
${agentContext}
|
|
259
|
+
|
|
260
|
+
Events:
|
|
261
|
+
${summary}
|
|
262
|
+
|
|
263
|
+
Are any of these inconsistent with the agent's purpose? Flag only genuinely suspicious items.
|
|
264
|
+
Format: EVENT_NUM: ALLOW/ALERT/PAUSE/KILL — one sentence reason`;
|
|
265
|
+
}
|
|
266
|
+
function parseAssessment(content, tokens, cost) {
|
|
267
|
+
const lines = content.trim().split('\n');
|
|
268
|
+
let consistent = true;
|
|
269
|
+
let confidence = 0.5;
|
|
270
|
+
let reasoning = 'No assessment available';
|
|
271
|
+
let recommendation = 'allow';
|
|
272
|
+
for (const line of lines) {
|
|
273
|
+
const upper = line.toUpperCase();
|
|
274
|
+
if (upper.startsWith('CONSISTENT:')) {
|
|
275
|
+
consistent = upper.includes('YES');
|
|
276
|
+
}
|
|
277
|
+
else if (upper.startsWith('CONFIDENCE:')) {
|
|
278
|
+
const val = parseFloat(line.split(':')[1]?.trim() ?? '0.5');
|
|
279
|
+
confidence = isNaN(val) ? 0.5 : Math.max(0, Math.min(1, val));
|
|
280
|
+
}
|
|
281
|
+
else if (upper.startsWith('REASONING:')) {
|
|
282
|
+
reasoning = line.split(':').slice(1).join(':').trim();
|
|
283
|
+
}
|
|
284
|
+
else if (upper.startsWith('ACTION:')) {
|
|
285
|
+
const action = line.split(':')[1]?.trim().toUpperCase();
|
|
286
|
+
if (action === 'ALERT')
|
|
287
|
+
recommendation = 'alert';
|
|
288
|
+
else if (action === 'PAUSE')
|
|
289
|
+
recommendation = 'pause';
|
|
290
|
+
else if (action === 'KILL')
|
|
291
|
+
recommendation = 'kill';
|
|
292
|
+
else
|
|
293
|
+
recommendation = 'allow';
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return { consistent, confidence, reasoning, recommendation, tokensUsed: tokens, estimatedCost: cost };
|
|
297
|
+
}
|
|
298
|
+
function severityIndex(severity) {
|
|
299
|
+
return SEVERITY_ORDER.indexOf(severity);
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/arp/intelligence/coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Monitor, MonitorType } from '../types';
|
|
2
|
+
import type { EventEngine } from '../engine/event-engine';
|
|
3
|
+
import { type ScanResult } from '../patterns/ai-threats';
|
|
4
|
+
/**
|
|
5
|
+
* A2A Protocol interceptor -- scans agent-to-agent messages for
|
|
6
|
+
* identity spoofing, delegation abuse, and embedded prompt injection.
|
|
7
|
+
*
|
|
8
|
+
* Enforces a trusted agent list and validates message content.
|
|
9
|
+
*/
|
|
10
|
+
export declare class A2AProtocolInterceptor implements Monitor {
|
|
11
|
+
readonly type: MonitorType;
|
|
12
|
+
private readonly engine;
|
|
13
|
+
private readonly trustedAgents;
|
|
14
|
+
private active;
|
|
15
|
+
constructor(engine: EventEngine, trustedAgents?: string[]);
|
|
16
|
+
start(): Promise<void>;
|
|
17
|
+
stop(): Promise<void>;
|
|
18
|
+
isRunning(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Scan an A2A message for identity spoofing, delegation abuse,
|
|
21
|
+
* and embedded prompt injection.
|
|
22
|
+
*
|
|
23
|
+
* @param from - Sending agent identifier
|
|
24
|
+
* @param to - Receiving agent identifier
|
|
25
|
+
* @param content - Message content
|
|
26
|
+
*/
|
|
27
|
+
scanMessage(from: string, to: string, content: string): ScanResult;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=a2a-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-protocol.d.ts","sourceRoot":"","sources":["../../../src/arp/interceptors/a2a-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEjF;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,OAAO;IACpD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE;IAKnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,SAAS,IAAI,OAAO;IAIpB;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;CA8EnE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.A2AProtocolInterceptor = void 0;
|
|
4
|
+
const ai_threats_1 = require("../patterns/ai-threats");
|
|
5
|
+
/**
|
|
6
|
+
* A2A Protocol interceptor -- scans agent-to-agent messages for
|
|
7
|
+
* identity spoofing, delegation abuse, and embedded prompt injection.
|
|
8
|
+
*
|
|
9
|
+
* Enforces a trusted agent list and validates message content.
|
|
10
|
+
*/
|
|
11
|
+
class A2AProtocolInterceptor {
|
|
12
|
+
constructor(engine, trustedAgents) {
|
|
13
|
+
this.type = 'a2a-protocol';
|
|
14
|
+
this.active = false;
|
|
15
|
+
this.engine = engine;
|
|
16
|
+
this.trustedAgents = new Set(trustedAgents ?? []);
|
|
17
|
+
}
|
|
18
|
+
async start() {
|
|
19
|
+
this.active = true;
|
|
20
|
+
}
|
|
21
|
+
async stop() {
|
|
22
|
+
this.active = false;
|
|
23
|
+
}
|
|
24
|
+
isRunning() {
|
|
25
|
+
return this.active;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Scan an A2A message for identity spoofing, delegation abuse,
|
|
29
|
+
* and embedded prompt injection.
|
|
30
|
+
*
|
|
31
|
+
* @param from - Sending agent identifier
|
|
32
|
+
* @param to - Receiving agent identifier
|
|
33
|
+
* @param content - Message content
|
|
34
|
+
*/
|
|
35
|
+
scanMessage(from, to, content) {
|
|
36
|
+
if (!this.active)
|
|
37
|
+
return { detected: false, matches: [] };
|
|
38
|
+
const allMatches = [];
|
|
39
|
+
// Check trusted agent list
|
|
40
|
+
if (this.trustedAgents.size > 0 && !this.trustedAgents.has(from)) {
|
|
41
|
+
this.engine.emit({
|
|
42
|
+
source: 'a2a-protocol',
|
|
43
|
+
category: 'violation',
|
|
44
|
+
severity: 'high',
|
|
45
|
+
description: `A2A message from untrusted agent: ${from}`,
|
|
46
|
+
data: {
|
|
47
|
+
from,
|
|
48
|
+
to,
|
|
49
|
+
reason: 'untrusted-agent',
|
|
50
|
+
trustedAgents: Array.from(this.trustedAgents),
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
allMatches.push({
|
|
54
|
+
pattern: {
|
|
55
|
+
id: 'A2A-TRUST',
|
|
56
|
+
category: 'a2a-attack',
|
|
57
|
+
description: 'Message from untrusted agent',
|
|
58
|
+
pattern: /./,
|
|
59
|
+
severity: 'high',
|
|
60
|
+
},
|
|
61
|
+
matchedText: from,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
// Scan for A2A-specific attack patterns
|
|
65
|
+
const a2aResult = (0, ai_threats_1.scanText)(content, ai_threats_1.PATTERN_SETS.a2aPatterns);
|
|
66
|
+
if (a2aResult.detected) {
|
|
67
|
+
for (const match of a2aResult.matches) {
|
|
68
|
+
this.engine.emit({
|
|
69
|
+
source: 'a2a-protocol',
|
|
70
|
+
category: 'threat',
|
|
71
|
+
severity: match.pattern.severity,
|
|
72
|
+
description: `[${match.pattern.id}] ${match.pattern.description} from ${from} to ${to}`,
|
|
73
|
+
data: {
|
|
74
|
+
patternId: match.pattern.id,
|
|
75
|
+
patternCategory: match.pattern.category,
|
|
76
|
+
from,
|
|
77
|
+
to,
|
|
78
|
+
matchedText: match.matchedText,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
allMatches.push(...a2aResult.matches);
|
|
83
|
+
}
|
|
84
|
+
// Also scan for prompt injection embedded in A2A messages
|
|
85
|
+
const injectionResult = (0, ai_threats_1.scanText)(content, ai_threats_1.PATTERN_SETS.promptInjection);
|
|
86
|
+
if (injectionResult.detected) {
|
|
87
|
+
for (const match of injectionResult.matches) {
|
|
88
|
+
this.engine.emit({
|
|
89
|
+
source: 'a2a-protocol',
|
|
90
|
+
category: 'threat',
|
|
91
|
+
severity: match.pattern.severity,
|
|
92
|
+
description: `[${match.pattern.id}] Prompt injection in A2A message from ${from} to ${to}`,
|
|
93
|
+
data: {
|
|
94
|
+
patternId: match.pattern.id,
|
|
95
|
+
patternCategory: 'prompt-injection-via-a2a',
|
|
96
|
+
from,
|
|
97
|
+
to,
|
|
98
|
+
matchedText: match.matchedText,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
allMatches.push(...injectionResult.matches);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
detected: allMatches.length > 0,
|
|
106
|
+
matches: allMatches,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.A2AProtocolInterceptor = A2AProtocolInterceptor;
|
|
111
|
+
//# sourceMappingURL=a2a-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2a-protocol.js","sourceRoot":"","sources":["../../../src/arp/interceptors/a2a-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Monitor, MonitorType } from '../types';
|
|
2
|
+
import type { EventEngine } from '../engine/event-engine';
|
|
3
|
+
/**
|
|
4
|
+
* Filesystem interceptor — hooks fs module functions to intercept
|
|
5
|
+
* ALL file operations at the application level.
|
|
6
|
+
*
|
|
7
|
+
* Advantages over fs.watch:
|
|
8
|
+
* - Catches reads (fs.watch only sees writes/renames)
|
|
9
|
+
* - Catches operations in ALL directories (not just watched paths)
|
|
10
|
+
* - Zero latency: events fire before the I/O happens
|
|
11
|
+
* - 100% accuracy: no debouncing artifacts, no missed events
|
|
12
|
+
* - Full operation context: knows read vs write vs delete vs mkdir
|
|
13
|
+
*/
|
|
14
|
+
export declare class FilesystemInterceptor implements Monitor {
|
|
15
|
+
readonly type: MonitorType;
|
|
16
|
+
private readonly engine;
|
|
17
|
+
private readonly allowedPaths;
|
|
18
|
+
private readonly excludePaths;
|
|
19
|
+
private readonly fsModule;
|
|
20
|
+
private originals;
|
|
21
|
+
private active;
|
|
22
|
+
constructor(engine: EventEngine, allowedPaths?: string[], excludePaths?: string[]);
|
|
23
|
+
start(): Promise<void>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
isRunning(): boolean;
|
|
26
|
+
private isSensitivePath;
|
|
27
|
+
private isOutsideAllowed;
|
|
28
|
+
private isExcluded;
|
|
29
|
+
private handleWrite;
|
|
30
|
+
private handleRead;
|
|
31
|
+
private handleDelete;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../src/arp/interceptors/filesystem.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAW1D;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,YAAW,OAAO;IACnD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAG3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE;IAQ3E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,SAAS,IAAI,OAAO;IAIpB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;CAarB"}
|