hackmyagent 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +66 -28
- 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 +219 -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/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/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/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 @@
|
|
|
1
|
+
{"version":3,"file":"anomaly.js","sourceRoot":"","sources":["../../../src/arp/intelligence/anomaly.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IntelligenceConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Tracks LLM usage costs with hard limits to prevent runaway spending.
|
|
4
|
+
* Resets monthly. Persists to disk so restarts don't lose tracking.
|
|
5
|
+
*/
|
|
6
|
+
export declare class BudgetController {
|
|
7
|
+
private state;
|
|
8
|
+
private readonly budgetUsd;
|
|
9
|
+
private readonly maxCallsPerHour;
|
|
10
|
+
private readonly dataDir;
|
|
11
|
+
constructor(dataDir: string, config?: IntelligenceConfig);
|
|
12
|
+
/** Check if we can afford an LLM call. Returns false if budget exhausted. */
|
|
13
|
+
canAfford(estimatedCostUsd: number): boolean;
|
|
14
|
+
/** Record a completed LLM call */
|
|
15
|
+
record(costUsd: number, tokens: number): void;
|
|
16
|
+
/** Get current budget status */
|
|
17
|
+
getStatus(): {
|
|
18
|
+
spent: number;
|
|
19
|
+
budget: number;
|
|
20
|
+
remaining: number;
|
|
21
|
+
percentUsed: number;
|
|
22
|
+
callsThisHour: number;
|
|
23
|
+
maxCallsPerHour: number;
|
|
24
|
+
totalCalls: number;
|
|
25
|
+
};
|
|
26
|
+
/** Reset budget for new period */
|
|
27
|
+
reset(): void;
|
|
28
|
+
private rolloverIfNeeded;
|
|
29
|
+
private rolloverHourIfNeeded;
|
|
30
|
+
private loadState;
|
|
31
|
+
private saveState;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../src/arp/intelligence/budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMhE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB;IAOxD,6EAA6E;IAC7E,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAiB5C,kCAAkC;IAClC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsB7C,gCAAgC;IAChC,SAAS,IAAI;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;KACpB;IAaD,kCAAkC;IAClC,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;CAKlB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.BudgetController = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const BUDGET_FILE = 'budget.json';
|
|
40
|
+
const DEFAULT_BUDGET_USD = 5.0;
|
|
41
|
+
const DEFAULT_MAX_CALLS_PER_HOUR = 20;
|
|
42
|
+
/**
|
|
43
|
+
* Tracks LLM usage costs with hard limits to prevent runaway spending.
|
|
44
|
+
* Resets monthly. Persists to disk so restarts don't lose tracking.
|
|
45
|
+
*/
|
|
46
|
+
class BudgetController {
|
|
47
|
+
constructor(dataDir, config) {
|
|
48
|
+
this.dataDir = dataDir;
|
|
49
|
+
this.budgetUsd = config?.budgetUsd ?? DEFAULT_BUDGET_USD;
|
|
50
|
+
this.maxCallsPerHour = config?.maxCallsPerHour ?? DEFAULT_MAX_CALLS_PER_HOUR;
|
|
51
|
+
this.state = this.loadState();
|
|
52
|
+
}
|
|
53
|
+
/** Check if we can afford an LLM call. Returns false if budget exhausted. */
|
|
54
|
+
canAfford(estimatedCostUsd) {
|
|
55
|
+
this.rolloverIfNeeded();
|
|
56
|
+
// Hard budget limit
|
|
57
|
+
if (this.state.totalSpentUsd + estimatedCostUsd > this.budgetUsd) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
// Hourly rate limit
|
|
61
|
+
this.rolloverHourIfNeeded();
|
|
62
|
+
if (this.state.callsThisHour >= this.maxCallsPerHour) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
/** Record a completed LLM call */
|
|
68
|
+
record(costUsd, tokens) {
|
|
69
|
+
this.rolloverIfNeeded();
|
|
70
|
+
this.rolloverHourIfNeeded();
|
|
71
|
+
this.state.totalSpentUsd += costUsd;
|
|
72
|
+
this.state.totalCalls += 1;
|
|
73
|
+
this.state.callsThisHour += 1;
|
|
74
|
+
this.state.recentCosts.push({
|
|
75
|
+
timestamp: new Date().toISOString(),
|
|
76
|
+
cost: costUsd,
|
|
77
|
+
tokens,
|
|
78
|
+
});
|
|
79
|
+
// Keep last 100 entries
|
|
80
|
+
if (this.state.recentCosts.length > 100) {
|
|
81
|
+
this.state.recentCosts = this.state.recentCosts.slice(-100);
|
|
82
|
+
}
|
|
83
|
+
this.saveState();
|
|
84
|
+
}
|
|
85
|
+
/** Get current budget status */
|
|
86
|
+
getStatus() {
|
|
87
|
+
this.rolloverIfNeeded();
|
|
88
|
+
return {
|
|
89
|
+
spent: Math.round(this.state.totalSpentUsd * 10000) / 10000,
|
|
90
|
+
budget: this.budgetUsd,
|
|
91
|
+
remaining: Math.round((this.budgetUsd - this.state.totalSpentUsd) * 10000) / 10000,
|
|
92
|
+
percentUsed: Math.round((this.state.totalSpentUsd / this.budgetUsd) * 100),
|
|
93
|
+
callsThisHour: this.state.callsThisHour,
|
|
94
|
+
maxCallsPerHour: this.maxCallsPerHour,
|
|
95
|
+
totalCalls: this.state.totalCalls,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** Reset budget for new period */
|
|
99
|
+
reset() {
|
|
100
|
+
this.state = freshState();
|
|
101
|
+
this.saveState();
|
|
102
|
+
}
|
|
103
|
+
rolloverIfNeeded() {
|
|
104
|
+
const periodStart = new Date(this.state.periodStart);
|
|
105
|
+
const now = new Date();
|
|
106
|
+
// Reset monthly
|
|
107
|
+
if (now.getMonth() !== periodStart.getMonth() || now.getFullYear() !== periodStart.getFullYear()) {
|
|
108
|
+
this.state = freshState();
|
|
109
|
+
this.saveState();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
rolloverHourIfNeeded() {
|
|
113
|
+
const hourStart = new Date(this.state.hourStart);
|
|
114
|
+
const now = new Date();
|
|
115
|
+
if (now.getTime() - hourStart.getTime() > 3600000) {
|
|
116
|
+
this.state.callsThisHour = 0;
|
|
117
|
+
this.state.hourStart = now.toISOString();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
loadState() {
|
|
121
|
+
const filePath = path.join(this.dataDir, BUDGET_FILE);
|
|
122
|
+
try {
|
|
123
|
+
if (fs.existsSync(filePath)) {
|
|
124
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Corrupted file — start fresh
|
|
129
|
+
}
|
|
130
|
+
return freshState();
|
|
131
|
+
}
|
|
132
|
+
saveState() {
|
|
133
|
+
fs.mkdirSync(this.dataDir, { recursive: true });
|
|
134
|
+
const filePath = path.join(this.dataDir, BUDGET_FILE);
|
|
135
|
+
fs.writeFileSync(filePath, JSON.stringify(this.state, null, 2), 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.BudgetController = BudgetController;
|
|
139
|
+
function freshState() {
|
|
140
|
+
const now = new Date().toISOString();
|
|
141
|
+
return {
|
|
142
|
+
totalSpentUsd: 0,
|
|
143
|
+
periodStart: now,
|
|
144
|
+
totalCalls: 0,
|
|
145
|
+
callsThisHour: 0,
|
|
146
|
+
hourStart: now,
|
|
147
|
+
recentCosts: [],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../../src/arp/intelligence/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ARPEvent, ARPConfig, LLMAssessment } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* The 3-Layer Intelligence Coordinator.
|
|
4
|
+
*
|
|
5
|
+
* L0: Rules (free) — Pattern matching, allowlists, thresholds. Every event.
|
|
6
|
+
* L1: Statistical (free) — Z-score anomaly detection, baseline deviation. L0 flags.
|
|
7
|
+
* L2: LLM-Assisted ($) — Micro-prompt to agent's LLM. Only L1 flags + budget check.
|
|
8
|
+
*
|
|
9
|
+
* 99% of events never reach L2. Cost is ~$0.01/day for most agents.
|
|
10
|
+
*/
|
|
11
|
+
export declare class IntelligenceCoordinator {
|
|
12
|
+
private readonly config;
|
|
13
|
+
private readonly agentContext;
|
|
14
|
+
private readonly budget;
|
|
15
|
+
private readonly anomaly;
|
|
16
|
+
private adapter;
|
|
17
|
+
private batchQueue;
|
|
18
|
+
private batchTimer?;
|
|
19
|
+
constructor(arpConfig: ARPConfig, dataDir: string);
|
|
20
|
+
/**
|
|
21
|
+
* Analyze an event through the 3-layer stack.
|
|
22
|
+
* Mutates the event's category, severity, and classifiedBy fields.
|
|
23
|
+
* Returns the LLM assessment if L2 was invoked.
|
|
24
|
+
*/
|
|
25
|
+
analyze(event: ARPEvent): Promise<LLMAssessment | null>;
|
|
26
|
+
/** Get budget status */
|
|
27
|
+
getBudgetStatus(): {
|
|
28
|
+
spent: number;
|
|
29
|
+
budget: number;
|
|
30
|
+
remaining: number;
|
|
31
|
+
percentUsed: number;
|
|
32
|
+
callsThisHour: number;
|
|
33
|
+
maxCallsPerHour: number;
|
|
34
|
+
totalCalls: number;
|
|
35
|
+
};
|
|
36
|
+
/** Stop the coordinator (flush batches, clean up) */
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
private shouldEscalateToL2;
|
|
39
|
+
private assessWithLlm;
|
|
40
|
+
private queueForBatch;
|
|
41
|
+
private flushBatch;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/arp/intelligence/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EAGT,aAAa,EAEd,MAAM,UAAU,CAAC;AAQlB;;;;;;;;GAQG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAgC;gBAEvC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAuBjD;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAoC7D,wBAAwB;IACxB,eAAe;;;;;;;;;IAIf,qDAAqD;IAC/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,CAAC,kBAAkB;YAsBZ,aAAa;IAiC3B,OAAO,CAAC,aAAa;YAkBP,UAAU;CAezB"}
|
|
@@ -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"}
|