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,239 @@
|
|
|
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.AgentRuntimeProtection = exports.PREMIUM_FEATURES = exports.registerLicenseValidator = exports.hasFeature = exports.checkLicense = exports.ARPProxy = exports.ALL_PATTERNS = exports.PATTERN_SETS = exports.scanText = exports.defaultConfig = exports.loadConfig = exports.LocalLogger = exports.EnforcementEngine = exports.A2AProtocolInterceptor = exports.MCPProtocolInterceptor = exports.PromptInterceptor = exports.FilesystemInterceptor = exports.NetworkInterceptor = exports.ProcessInterceptor = exports.FilesystemMonitor = exports.NetworkMonitor = exports.ProcessMonitor = exports.autoDetectAdapter = exports.createAdapter = exports.OllamaAdapter = exports.OpenAIAdapter = exports.AnthropicAdapter = exports.AnomalyDetector = exports.BudgetController = exports.IntelligenceCoordinator = exports.EventEngine = exports.VERSION = void 0;
|
|
37
|
+
exports.VERSION = '0.2.0';
|
|
38
|
+
// Re-export components
|
|
39
|
+
var event_engine_1 = require("./engine/event-engine");
|
|
40
|
+
Object.defineProperty(exports, "EventEngine", { enumerable: true, get: function () { return event_engine_1.EventEngine; } });
|
|
41
|
+
var coordinator_1 = require("./intelligence/coordinator");
|
|
42
|
+
Object.defineProperty(exports, "IntelligenceCoordinator", { enumerable: true, get: function () { return coordinator_1.IntelligenceCoordinator; } });
|
|
43
|
+
var budget_1 = require("./intelligence/budget");
|
|
44
|
+
Object.defineProperty(exports, "BudgetController", { enumerable: true, get: function () { return budget_1.BudgetController; } });
|
|
45
|
+
var anomaly_1 = require("./intelligence/anomaly");
|
|
46
|
+
Object.defineProperty(exports, "AnomalyDetector", { enumerable: true, get: function () { return anomaly_1.AnomalyDetector; } });
|
|
47
|
+
var adapters_1 = require("./intelligence/adapters");
|
|
48
|
+
Object.defineProperty(exports, "AnthropicAdapter", { enumerable: true, get: function () { return adapters_1.AnthropicAdapter; } });
|
|
49
|
+
Object.defineProperty(exports, "OpenAIAdapter", { enumerable: true, get: function () { return adapters_1.OpenAIAdapter; } });
|
|
50
|
+
Object.defineProperty(exports, "OllamaAdapter", { enumerable: true, get: function () { return adapters_1.OllamaAdapter; } });
|
|
51
|
+
Object.defineProperty(exports, "createAdapter", { enumerable: true, get: function () { return adapters_1.createAdapter; } });
|
|
52
|
+
Object.defineProperty(exports, "autoDetectAdapter", { enumerable: true, get: function () { return adapters_1.autoDetectAdapter; } });
|
|
53
|
+
var process_1 = require("./monitors/process");
|
|
54
|
+
Object.defineProperty(exports, "ProcessMonitor", { enumerable: true, get: function () { return process_1.ProcessMonitor; } });
|
|
55
|
+
var network_1 = require("./monitors/network");
|
|
56
|
+
Object.defineProperty(exports, "NetworkMonitor", { enumerable: true, get: function () { return network_1.NetworkMonitor; } });
|
|
57
|
+
var filesystem_1 = require("./monitors/filesystem");
|
|
58
|
+
Object.defineProperty(exports, "FilesystemMonitor", { enumerable: true, get: function () { return filesystem_1.FilesystemMonitor; } });
|
|
59
|
+
var process_2 = require("./interceptors/process");
|
|
60
|
+
Object.defineProperty(exports, "ProcessInterceptor", { enumerable: true, get: function () { return process_2.ProcessInterceptor; } });
|
|
61
|
+
var network_2 = require("./interceptors/network");
|
|
62
|
+
Object.defineProperty(exports, "NetworkInterceptor", { enumerable: true, get: function () { return network_2.NetworkInterceptor; } });
|
|
63
|
+
var filesystem_2 = require("./interceptors/filesystem");
|
|
64
|
+
Object.defineProperty(exports, "FilesystemInterceptor", { enumerable: true, get: function () { return filesystem_2.FilesystemInterceptor; } });
|
|
65
|
+
var prompt_1 = require("./interceptors/prompt");
|
|
66
|
+
Object.defineProperty(exports, "PromptInterceptor", { enumerable: true, get: function () { return prompt_1.PromptInterceptor; } });
|
|
67
|
+
var mcp_protocol_1 = require("./interceptors/mcp-protocol");
|
|
68
|
+
Object.defineProperty(exports, "MCPProtocolInterceptor", { enumerable: true, get: function () { return mcp_protocol_1.MCPProtocolInterceptor; } });
|
|
69
|
+
var a2a_protocol_1 = require("./interceptors/a2a-protocol");
|
|
70
|
+
Object.defineProperty(exports, "A2AProtocolInterceptor", { enumerable: true, get: function () { return a2a_protocol_1.A2AProtocolInterceptor; } });
|
|
71
|
+
var kill_switch_1 = require("./enforcement/kill-switch");
|
|
72
|
+
Object.defineProperty(exports, "EnforcementEngine", { enumerable: true, get: function () { return kill_switch_1.EnforcementEngine; } });
|
|
73
|
+
var local_log_1 = require("./reporting/local-log");
|
|
74
|
+
Object.defineProperty(exports, "LocalLogger", { enumerable: true, get: function () { return local_log_1.LocalLogger; } });
|
|
75
|
+
var loader_1 = require("./config/loader");
|
|
76
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return loader_1.loadConfig; } });
|
|
77
|
+
Object.defineProperty(exports, "defaultConfig", { enumerable: true, get: function () { return loader_1.defaultConfig; } });
|
|
78
|
+
var ai_threats_1 = require("./patterns/ai-threats");
|
|
79
|
+
Object.defineProperty(exports, "scanText", { enumerable: true, get: function () { return ai_threats_1.scanText; } });
|
|
80
|
+
Object.defineProperty(exports, "PATTERN_SETS", { enumerable: true, get: function () { return ai_threats_1.PATTERN_SETS; } });
|
|
81
|
+
Object.defineProperty(exports, "ALL_PATTERNS", { enumerable: true, get: function () { return ai_threats_1.ALL_PATTERNS; } });
|
|
82
|
+
var server_1 = require("./proxy/server");
|
|
83
|
+
Object.defineProperty(exports, "ARPProxy", { enumerable: true, get: function () { return server_1.ARPProxy; } });
|
|
84
|
+
var license_1 = require("./license");
|
|
85
|
+
Object.defineProperty(exports, "checkLicense", { enumerable: true, get: function () { return license_1.checkLicense; } });
|
|
86
|
+
Object.defineProperty(exports, "hasFeature", { enumerable: true, get: function () { return license_1.hasFeature; } });
|
|
87
|
+
Object.defineProperty(exports, "registerLicenseValidator", { enumerable: true, get: function () { return license_1.registerLicenseValidator; } });
|
|
88
|
+
Object.defineProperty(exports, "PREMIUM_FEATURES", { enumerable: true, get: function () { return license_1.PREMIUM_FEATURES; } });
|
|
89
|
+
const path = __importStar(require("path"));
|
|
90
|
+
const event_engine_2 = require("./engine/event-engine");
|
|
91
|
+
const coordinator_2 = require("./intelligence/coordinator");
|
|
92
|
+
const kill_switch_2 = require("./enforcement/kill-switch");
|
|
93
|
+
const local_log_2 = require("./reporting/local-log");
|
|
94
|
+
const process_3 = require("./monitors/process");
|
|
95
|
+
const network_3 = require("./monitors/network");
|
|
96
|
+
const filesystem_3 = require("./monitors/filesystem");
|
|
97
|
+
const process_4 = require("./interceptors/process");
|
|
98
|
+
const network_4 = require("./interceptors/network");
|
|
99
|
+
const filesystem_4 = require("./interceptors/filesystem");
|
|
100
|
+
const prompt_2 = require("./interceptors/prompt");
|
|
101
|
+
const mcp_protocol_2 = require("./interceptors/mcp-protocol");
|
|
102
|
+
const a2a_protocol_2 = require("./interceptors/a2a-protocol");
|
|
103
|
+
const loader_2 = require("./config/loader");
|
|
104
|
+
/**
|
|
105
|
+
* Agent Runtime Protection — the main entry point.
|
|
106
|
+
*
|
|
107
|
+
* Provides 3-layer intelligent monitoring for AI agents:
|
|
108
|
+
* - L0: Rule-based event classification (free, every event)
|
|
109
|
+
* - L1: Statistical anomaly detection (free, flagged events)
|
|
110
|
+
* - L2: LLM-assisted assessment (micro-prompts, budget-controlled)
|
|
111
|
+
*
|
|
112
|
+
* Usage:
|
|
113
|
+
* const arp = new AgentRuntimeProtection({ agentName: 'my-agent' });
|
|
114
|
+
* await arp.start();
|
|
115
|
+
* // ... agent runs ...
|
|
116
|
+
* await arp.stop();
|
|
117
|
+
*/
|
|
118
|
+
class AgentRuntimeProtection {
|
|
119
|
+
constructor(configOrPath) {
|
|
120
|
+
this.monitors = [];
|
|
121
|
+
this.running = false;
|
|
122
|
+
if (typeof configOrPath === 'string') {
|
|
123
|
+
this.config = (0, loader_2.loadConfig)(configOrPath);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.config = configOrPath ?? (0, loader_2.loadConfig)();
|
|
127
|
+
}
|
|
128
|
+
const dataDir = this.config.dataDir ?? path.join(process.cwd(), '.opena2a', 'arp');
|
|
129
|
+
this.engine = new event_engine_2.EventEngine(this.config);
|
|
130
|
+
this.intelligence = new coordinator_2.IntelligenceCoordinator(this.config, dataDir);
|
|
131
|
+
this.enforcement = new kill_switch_2.EnforcementEngine();
|
|
132
|
+
this.logger = new local_log_2.LocalLogger(dataDir);
|
|
133
|
+
// Wire up: events → intelligence → logger
|
|
134
|
+
this.engine.onEvent(async (event) => {
|
|
135
|
+
await this.intelligence.analyze(event);
|
|
136
|
+
this.logger.logEvent(event);
|
|
137
|
+
});
|
|
138
|
+
// Wire up: enforcement → logger
|
|
139
|
+
this.engine.onEnforcement(async (result) => {
|
|
140
|
+
const enforced = await this.enforcement.execute(result.action, result.event);
|
|
141
|
+
this.logger.logEnforcement(enforced);
|
|
142
|
+
});
|
|
143
|
+
// Create monitors based on config
|
|
144
|
+
const mc = this.config.monitors;
|
|
145
|
+
if (mc?.process?.enabled !== false) {
|
|
146
|
+
this.monitors.push(new process_3.ProcessMonitor(this.engine, mc?.process?.intervalMs));
|
|
147
|
+
}
|
|
148
|
+
if (mc?.network?.enabled !== false) {
|
|
149
|
+
this.monitors.push(new network_3.NetworkMonitor(this.engine, mc?.network?.intervalMs, mc?.network?.allowedHosts));
|
|
150
|
+
}
|
|
151
|
+
if (mc?.filesystem?.enabled !== false) {
|
|
152
|
+
this.monitors.push(new filesystem_3.FilesystemMonitor(this.engine, mc?.filesystem?.watchPaths, mc?.filesystem?.allowedPaths));
|
|
153
|
+
}
|
|
154
|
+
// Create interceptors (application-level hooks — zero latency, 100% accuracy)
|
|
155
|
+
const ic = this.config.interceptors;
|
|
156
|
+
if (ic?.process?.enabled) {
|
|
157
|
+
this.monitors.push(new process_4.ProcessInterceptor(this.engine));
|
|
158
|
+
}
|
|
159
|
+
if (ic?.network?.enabled) {
|
|
160
|
+
this.monitors.push(new network_4.NetworkInterceptor(this.engine, ic.network.allowedHosts));
|
|
161
|
+
}
|
|
162
|
+
if (ic?.filesystem?.enabled) {
|
|
163
|
+
this.monitors.push(new filesystem_4.FilesystemInterceptor(this.engine, ic.filesystem.allowedPaths, [dataDir]));
|
|
164
|
+
}
|
|
165
|
+
// Create AI-layer interceptors
|
|
166
|
+
const al = this.config.aiLayer;
|
|
167
|
+
if (al?.prompt?.enabled) {
|
|
168
|
+
this.monitors.push(new prompt_2.PromptInterceptor(this.engine));
|
|
169
|
+
}
|
|
170
|
+
if (al?.mcp?.enabled) {
|
|
171
|
+
this.monitors.push(new mcp_protocol_2.MCPProtocolInterceptor(this.engine, al.mcp.allowedTools));
|
|
172
|
+
}
|
|
173
|
+
if (al?.a2a?.enabled) {
|
|
174
|
+
this.monitors.push(new a2a_protocol_2.A2AProtocolInterceptor(this.engine, al.a2a.trustedAgents));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** Start all monitors */
|
|
178
|
+
async start() {
|
|
179
|
+
if (this.running)
|
|
180
|
+
return;
|
|
181
|
+
for (const monitor of this.monitors) {
|
|
182
|
+
await monitor.start();
|
|
183
|
+
}
|
|
184
|
+
this.running = true;
|
|
185
|
+
}
|
|
186
|
+
/** Stop all monitors and flush logs */
|
|
187
|
+
async stop() {
|
|
188
|
+
if (!this.running)
|
|
189
|
+
return;
|
|
190
|
+
for (const monitor of this.monitors) {
|
|
191
|
+
await monitor.stop();
|
|
192
|
+
}
|
|
193
|
+
await this.intelligence.stop();
|
|
194
|
+
this.running = false;
|
|
195
|
+
}
|
|
196
|
+
/** Check if ARP is running */
|
|
197
|
+
isRunning() {
|
|
198
|
+
return this.running;
|
|
199
|
+
}
|
|
200
|
+
/** Get current status */
|
|
201
|
+
getStatus() {
|
|
202
|
+
return {
|
|
203
|
+
running: this.running,
|
|
204
|
+
monitors: this.monitors.map((m) => ({ type: m.type, running: m.isRunning() })),
|
|
205
|
+
budget: this.intelligence.getBudgetStatus(),
|
|
206
|
+
pausedPids: this.enforcement.getPausedPids(),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/** Get recent events */
|
|
210
|
+
getEvents(limit) {
|
|
211
|
+
return this.logger.readEvents(limit);
|
|
212
|
+
}
|
|
213
|
+
/** Resume a paused process */
|
|
214
|
+
resume(pid) {
|
|
215
|
+
return this.enforcement.resume(pid);
|
|
216
|
+
}
|
|
217
|
+
/** Subscribe to all ARP events (for external integrations, test harnesses, etc.) */
|
|
218
|
+
onEvent(handler) {
|
|
219
|
+
this.engine.onEvent(handler);
|
|
220
|
+
}
|
|
221
|
+
/** Subscribe to all enforcement results */
|
|
222
|
+
onEnforcement(handler) {
|
|
223
|
+
this.engine.onEnforcement(handler);
|
|
224
|
+
}
|
|
225
|
+
/** Set the alert callback for the enforcement engine */
|
|
226
|
+
setAlertCallback(callback) {
|
|
227
|
+
this.enforcement.setAlertCallback(callback);
|
|
228
|
+
}
|
|
229
|
+
/** Get the event engine (for custom integrations) */
|
|
230
|
+
getEngine() {
|
|
231
|
+
return this.engine;
|
|
232
|
+
}
|
|
233
|
+
/** Get the enforcement engine (for test harnesses) */
|
|
234
|
+
getEnforcement() {
|
|
235
|
+
return this.enforcement;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.AgentRuntimeProtection = AgentRuntimeProtection;
|
|
239
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/arp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { LLMAdapter, LLMResponse, LLMAdapterType } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Anthropic adapter — uses Messages API with Haiku for cheapest assessments.
|
|
4
|
+
* Reads ANTHROPIC_API_KEY from environment.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AnthropicAdapter implements LLMAdapter {
|
|
7
|
+
readonly name = "anthropic";
|
|
8
|
+
private readonly model;
|
|
9
|
+
private readonly apiKey;
|
|
10
|
+
constructor(config?: Record<string, unknown>);
|
|
11
|
+
assess(prompt: string, maxTokens: number): Promise<LLMResponse>;
|
|
12
|
+
estimateCost(inputTokens: number, outputTokens: number): number;
|
|
13
|
+
healthCheck(): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* OpenAI adapter — uses Chat Completions API with gpt-4o-mini for cheapest assessments.
|
|
17
|
+
* Reads OPENAI_API_KEY from environment.
|
|
18
|
+
*/
|
|
19
|
+
export declare class OpenAIAdapter implements LLMAdapter {
|
|
20
|
+
readonly name = "openai";
|
|
21
|
+
private readonly model;
|
|
22
|
+
private readonly apiKey;
|
|
23
|
+
constructor(config?: Record<string, unknown>);
|
|
24
|
+
assess(prompt: string, maxTokens: number): Promise<LLMResponse>;
|
|
25
|
+
estimateCost(inputTokens: number, outputTokens: number): number;
|
|
26
|
+
healthCheck(): Promise<boolean>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ollama adapter — uses local Ollama server for zero-cost assessments.
|
|
30
|
+
* No API key needed. Requires Ollama running locally.
|
|
31
|
+
*/
|
|
32
|
+
export declare class OllamaAdapter implements LLMAdapter {
|
|
33
|
+
readonly name = "ollama";
|
|
34
|
+
private readonly model;
|
|
35
|
+
private readonly host;
|
|
36
|
+
constructor(config?: Record<string, unknown>);
|
|
37
|
+
assess(prompt: string, maxTokens: number): Promise<LLMResponse>;
|
|
38
|
+
estimateCost(): number;
|
|
39
|
+
healthCheck(): Promise<boolean>;
|
|
40
|
+
}
|
|
41
|
+
/** Create an adapter from config */
|
|
42
|
+
export declare function createAdapter(type: LLMAdapterType, config?: Record<string, unknown>): LLMAdapter;
|
|
43
|
+
/** Auto-detect the best available adapter */
|
|
44
|
+
export declare function autoDetectAdapter(config?: Record<string, unknown>): LLMAdapter;
|
|
45
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../../src/arp/intelligence/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGxE;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBrE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAKzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBrE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAKzD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA2BrE,YAAY,IAAI,MAAM;IAIhB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAStC;AAED,oCAAoC;AACpC,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAahG;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAE9E"}
|
|
@@ -0,0 +1,222 @@
|
|
|
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.OllamaAdapter = exports.OpenAIAdapter = exports.AnthropicAdapter = void 0;
|
|
37
|
+
exports.createAdapter = createAdapter;
|
|
38
|
+
exports.autoDetectAdapter = autoDetectAdapter;
|
|
39
|
+
const https = __importStar(require("https"));
|
|
40
|
+
/**
|
|
41
|
+
* Anthropic adapter — uses Messages API with Haiku for cheapest assessments.
|
|
42
|
+
* Reads ANTHROPIC_API_KEY from environment.
|
|
43
|
+
*/
|
|
44
|
+
class AnthropicAdapter {
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.name = 'anthropic';
|
|
47
|
+
this.model = config?.model ?? 'claude-haiku-4-5-20251001';
|
|
48
|
+
this.apiKey = config?.apiKey ?? process.env.ANTHROPIC_API_KEY ?? '';
|
|
49
|
+
}
|
|
50
|
+
async assess(prompt, maxTokens) {
|
|
51
|
+
const body = JSON.stringify({
|
|
52
|
+
model: this.model,
|
|
53
|
+
max_tokens: maxTokens,
|
|
54
|
+
messages: [{ role: 'user', content: prompt }],
|
|
55
|
+
});
|
|
56
|
+
const response = await httpPost('api.anthropic.com', '/v1/messages', body, {
|
|
57
|
+
'x-api-key': this.apiKey,
|
|
58
|
+
'anthropic-version': '2023-06-01',
|
|
59
|
+
'content-type': 'application/json',
|
|
60
|
+
});
|
|
61
|
+
const data = JSON.parse(response);
|
|
62
|
+
return {
|
|
63
|
+
content: data.content?.[0]?.text ?? '',
|
|
64
|
+
inputTokens: data.usage?.input_tokens ?? 0,
|
|
65
|
+
outputTokens: data.usage?.output_tokens ?? 0,
|
|
66
|
+
model: data.model ?? this.model,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
estimateCost(inputTokens, outputTokens) {
|
|
70
|
+
// Haiku 4.5 pricing: $0.80/MTok input, $4.00/MTok output
|
|
71
|
+
return (inputTokens * 0.0000008) + (outputTokens * 0.000004);
|
|
72
|
+
}
|
|
73
|
+
async healthCheck() {
|
|
74
|
+
return this.apiKey.length > 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.AnthropicAdapter = AnthropicAdapter;
|
|
78
|
+
/**
|
|
79
|
+
* OpenAI adapter — uses Chat Completions API with gpt-4o-mini for cheapest assessments.
|
|
80
|
+
* Reads OPENAI_API_KEY from environment.
|
|
81
|
+
*/
|
|
82
|
+
class OpenAIAdapter {
|
|
83
|
+
constructor(config) {
|
|
84
|
+
this.name = 'openai';
|
|
85
|
+
this.model = config?.model ?? 'gpt-4o-mini';
|
|
86
|
+
this.apiKey = config?.apiKey ?? process.env.OPENAI_API_KEY ?? '';
|
|
87
|
+
}
|
|
88
|
+
async assess(prompt, maxTokens) {
|
|
89
|
+
const body = JSON.stringify({
|
|
90
|
+
model: this.model,
|
|
91
|
+
max_tokens: maxTokens,
|
|
92
|
+
messages: [{ role: 'user', content: prompt }],
|
|
93
|
+
});
|
|
94
|
+
const response = await httpPost('api.openai.com', '/v1/chat/completions', body, {
|
|
95
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
96
|
+
'Content-Type': 'application/json',
|
|
97
|
+
});
|
|
98
|
+
const data = JSON.parse(response);
|
|
99
|
+
return {
|
|
100
|
+
content: data.choices?.[0]?.message?.content ?? '',
|
|
101
|
+
inputTokens: data.usage?.prompt_tokens ?? 0,
|
|
102
|
+
outputTokens: data.usage?.completion_tokens ?? 0,
|
|
103
|
+
model: data.model ?? this.model,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
estimateCost(inputTokens, outputTokens) {
|
|
107
|
+
// gpt-4o-mini pricing: $0.15/MTok input, $0.60/MTok output
|
|
108
|
+
return (inputTokens * 0.00000015) + (outputTokens * 0.0000006);
|
|
109
|
+
}
|
|
110
|
+
async healthCheck() {
|
|
111
|
+
return this.apiKey.length > 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.OpenAIAdapter = OpenAIAdapter;
|
|
115
|
+
/**
|
|
116
|
+
* Ollama adapter — uses local Ollama server for zero-cost assessments.
|
|
117
|
+
* No API key needed. Requires Ollama running locally.
|
|
118
|
+
*/
|
|
119
|
+
class OllamaAdapter {
|
|
120
|
+
constructor(config) {
|
|
121
|
+
this.name = 'ollama';
|
|
122
|
+
this.model = config?.model ?? 'llama3.2:1b';
|
|
123
|
+
this.host = config?.host ?? 'http://localhost:11434';
|
|
124
|
+
}
|
|
125
|
+
async assess(prompt, maxTokens) {
|
|
126
|
+
const url = new URL(this.host);
|
|
127
|
+
const body = JSON.stringify({
|
|
128
|
+
model: this.model,
|
|
129
|
+
prompt,
|
|
130
|
+
stream: false,
|
|
131
|
+
options: { num_predict: maxTokens },
|
|
132
|
+
});
|
|
133
|
+
const response = await httpPost(url.hostname, '/api/generate', body, { 'Content-Type': 'application/json' }, url.port ? parseInt(url.port) : 11434, url.protocol === 'http:');
|
|
134
|
+
const data = JSON.parse(response);
|
|
135
|
+
return {
|
|
136
|
+
content: data.response ?? '',
|
|
137
|
+
inputTokens: data.prompt_eval_count ?? 0,
|
|
138
|
+
outputTokens: data.eval_count ?? 0,
|
|
139
|
+
model: this.model,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
estimateCost() {
|
|
143
|
+
return 0; // Local, free
|
|
144
|
+
}
|
|
145
|
+
async healthCheck() {
|
|
146
|
+
try {
|
|
147
|
+
const url = new URL(this.host);
|
|
148
|
+
await httpGet(url.hostname, '/api/tags', url.port ? parseInt(url.port) : 11434, url.protocol === 'http:');
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.OllamaAdapter = OllamaAdapter;
|
|
157
|
+
/** Create an adapter from config */
|
|
158
|
+
function createAdapter(type, config) {
|
|
159
|
+
switch (type) {
|
|
160
|
+
case 'anthropic': return new AnthropicAdapter(config);
|
|
161
|
+
case 'openai': return new OpenAIAdapter(config);
|
|
162
|
+
case 'ollama': return new OllamaAdapter(config);
|
|
163
|
+
case 'agent-proxy':
|
|
164
|
+
// Auto-detect: try Anthropic first, then OpenAI, then Ollama
|
|
165
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
166
|
+
return new AnthropicAdapter(config);
|
|
167
|
+
if (process.env.OPENAI_API_KEY)
|
|
168
|
+
return new OpenAIAdapter(config);
|
|
169
|
+
return new OllamaAdapter(config);
|
|
170
|
+
default:
|
|
171
|
+
throw new Error(`Unknown LLM adapter type: ${type}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Auto-detect the best available adapter */
|
|
175
|
+
function autoDetectAdapter(config) {
|
|
176
|
+
return createAdapter('agent-proxy', config);
|
|
177
|
+
}
|
|
178
|
+
// --- HTTP helpers (zero-dependency) ---
|
|
179
|
+
function httpPost(host, path, body, headers, port, useHttp) {
|
|
180
|
+
return new Promise((resolve, reject) => {
|
|
181
|
+
const mod = useHttp ? require('http') : https;
|
|
182
|
+
const options = {
|
|
183
|
+
hostname: host,
|
|
184
|
+
port: port ?? (useHttp ? 80 : 443),
|
|
185
|
+
path,
|
|
186
|
+
method: 'POST',
|
|
187
|
+
headers: { ...headers, 'Content-Length': Buffer.byteLength(body) },
|
|
188
|
+
timeout: 30000,
|
|
189
|
+
};
|
|
190
|
+
const req = mod.request(options, (res) => {
|
|
191
|
+
let data = '';
|
|
192
|
+
res.on('data', (chunk) => { data += chunk.toString(); });
|
|
193
|
+
res.on('end', () => {
|
|
194
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
195
|
+
reject(new Error(`HTTP ${res.statusCode}: ${data.slice(0, 200)}`));
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
resolve(data);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
req.on('error', reject);
|
|
203
|
+
req.on('timeout', () => { req.destroy(); reject(new Error('Request timeout')); });
|
|
204
|
+
req.write(body);
|
|
205
|
+
req.end();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function httpGet(host, path, port, useHttp) {
|
|
209
|
+
return new Promise((resolve, reject) => {
|
|
210
|
+
const mod = useHttp ? require('http') : https;
|
|
211
|
+
const options = { hostname: host, port: port ?? (useHttp ? 80 : 443), path, timeout: 5000 };
|
|
212
|
+
const req = mod.request(options, (res) => {
|
|
213
|
+
let data = '';
|
|
214
|
+
res.on('data', (chunk) => { data += chunk.toString(); });
|
|
215
|
+
res.on('end', () => resolve(data));
|
|
216
|
+
});
|
|
217
|
+
req.on('error', reject);
|
|
218
|
+
req.on('timeout', () => { req.destroy(); reject(new Error('Request timeout')); });
|
|
219
|
+
req.end();
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/arp/intelligence/adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ARPEvent, MonitorType } from '../types';
|
|
2
|
+
interface BaselineStats {
|
|
3
|
+
mean: number;
|
|
4
|
+
stddev: number;
|
|
5
|
+
count: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* L1: Statistical anomaly detection.
|
|
9
|
+
* Tracks event frequency per monitor, computes z-scores for deviation detection.
|
|
10
|
+
* Learns baseline over time — no training data needed.
|
|
11
|
+
*/
|
|
12
|
+
export declare class AnomalyDetector {
|
|
13
|
+
/** Event counts per minute per monitor */
|
|
14
|
+
private readonly timeSeries;
|
|
15
|
+
/** Rolling baseline stats per monitor */
|
|
16
|
+
private readonly baselines;
|
|
17
|
+
/** Maximum history to keep (7 days at 1-minute resolution) */
|
|
18
|
+
private readonly maxHistory;
|
|
19
|
+
/** Minimum data points before anomaly detection activates */
|
|
20
|
+
private readonly minDataPoints;
|
|
21
|
+
/** Score an event's anomaly level. Returns z-score (0 = normal, >2 = anomalous). */
|
|
22
|
+
score(event: ARPEvent): number;
|
|
23
|
+
/** Record an event for baseline learning */
|
|
24
|
+
record(event: ARPEvent): void;
|
|
25
|
+
/** Get the current baseline for a monitor */
|
|
26
|
+
getBaseline(source: MonitorType): BaselineStats | null;
|
|
27
|
+
/** Reset all baselines */
|
|
28
|
+
reset(): void;
|
|
29
|
+
private updateBaseline;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=anomaly.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anomaly.d.ts","sourceRoot":"","sources":["../../../src/arp/intelligence/anomaly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAOtD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IACxE,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAM;IAEpC,oFAAoF;IACpF,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAqB9B,4CAA4C;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAqB7B,6CAA6C;IAC7C,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,IAAI;IAItD,0BAA0B;IAC1B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,cAAc;CAiBvB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnomalyDetector = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* L1: Statistical anomaly detection.
|
|
6
|
+
* Tracks event frequency per monitor, computes z-scores for deviation detection.
|
|
7
|
+
* Learns baseline over time — no training data needed.
|
|
8
|
+
*/
|
|
9
|
+
class AnomalyDetector {
|
|
10
|
+
constructor() {
|
|
11
|
+
/** Event counts per minute per monitor */
|
|
12
|
+
this.timeSeries = new Map();
|
|
13
|
+
/** Rolling baseline stats per monitor */
|
|
14
|
+
this.baselines = new Map();
|
|
15
|
+
/** Maximum history to keep (7 days at 1-minute resolution) */
|
|
16
|
+
this.maxHistory = 10080;
|
|
17
|
+
/** Minimum data points before anomaly detection activates */
|
|
18
|
+
this.minDataPoints = 30;
|
|
19
|
+
}
|
|
20
|
+
/** Score an event's anomaly level. Returns z-score (0 = normal, >2 = anomalous). */
|
|
21
|
+
score(event) {
|
|
22
|
+
const currentMinute = Math.floor(Date.now() / 60000);
|
|
23
|
+
const series = this.timeSeries.get(event.source) ?? [];
|
|
24
|
+
// Count events in current minute
|
|
25
|
+
const currentCount = series.filter((p) => p.timestamp === currentMinute).length + 1;
|
|
26
|
+
// Get baseline
|
|
27
|
+
const baseline = this.baselines.get(event.source);
|
|
28
|
+
if (!baseline || baseline.count < this.minDataPoints) {
|
|
29
|
+
return 0; // Not enough data for anomaly detection
|
|
30
|
+
}
|
|
31
|
+
// Z-score: how many standard deviations from mean?
|
|
32
|
+
if (baseline.stddev === 0) {
|
|
33
|
+
return currentCount > baseline.mean ? 2.5 : 0;
|
|
34
|
+
}
|
|
35
|
+
return Math.abs(currentCount - baseline.mean) / baseline.stddev;
|
|
36
|
+
}
|
|
37
|
+
/** Record an event for baseline learning */
|
|
38
|
+
record(event) {
|
|
39
|
+
const currentMinute = Math.floor(Date.now() / 60000);
|
|
40
|
+
if (!this.timeSeries.has(event.source)) {
|
|
41
|
+
this.timeSeries.set(event.source, []);
|
|
42
|
+
}
|
|
43
|
+
const series = this.timeSeries.get(event.source);
|
|
44
|
+
series.push({ timestamp: currentMinute, value: 1 });
|
|
45
|
+
// Trim old data
|
|
46
|
+
const cutoff = currentMinute - this.maxHistory;
|
|
47
|
+
const trimIndex = series.findIndex((p) => p.timestamp >= cutoff);
|
|
48
|
+
if (trimIndex > 0) {
|
|
49
|
+
series.splice(0, trimIndex);
|
|
50
|
+
}
|
|
51
|
+
// Update baseline (incremental mean/stddev)
|
|
52
|
+
this.updateBaseline(event.source, series);
|
|
53
|
+
}
|
|
54
|
+
/** Get the current baseline for a monitor */
|
|
55
|
+
getBaseline(source) {
|
|
56
|
+
return this.baselines.get(source) ?? null;
|
|
57
|
+
}
|
|
58
|
+
/** Reset all baselines */
|
|
59
|
+
reset() {
|
|
60
|
+
this.timeSeries.clear();
|
|
61
|
+
this.baselines.clear();
|
|
62
|
+
}
|
|
63
|
+
updateBaseline(source, series) {
|
|
64
|
+
// Aggregate: count events per unique minute
|
|
65
|
+
const minuteCounts = new Map();
|
|
66
|
+
for (const point of series) {
|
|
67
|
+
minuteCounts.set(point.timestamp, (minuteCounts.get(point.timestamp) ?? 0) + 1);
|
|
68
|
+
}
|
|
69
|
+
const values = Array.from(minuteCounts.values());
|
|
70
|
+
if (values.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
const count = values.length;
|
|
73
|
+
const mean = values.reduce((a, b) => a + b, 0) / count;
|
|
74
|
+
const variance = values.reduce((a, b) => a + (b - mean) ** 2, 0) / count;
|
|
75
|
+
const stddev = Math.sqrt(variance);
|
|
76
|
+
this.baselines.set(source, { mean, stddev, count });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.AnomalyDetector = AnomalyDetector;
|
|
80
|
+
//# sourceMappingURL=anomaly.js.map
|