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.
Files changed (333) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +66 -28
  3. package/dist/arp/cli/index.d.ts +3 -0
  4. package/dist/arp/cli/index.d.ts.map +1 -0
  5. package/dist/arp/cli/index.js +219 -0
  6. package/dist/arp/cli/index.js.map +1 -0
  7. package/dist/arp/config/loader.d.ts +8 -0
  8. package/dist/arp/config/loader.d.ts.map +1 -0
  9. package/dist/arp/config/loader.js +102 -0
  10. package/dist/arp/config/loader.js.map +1 -0
  11. package/dist/arp/enforcement/kill-switch.d.ts +22 -0
  12. package/dist/arp/enforcement/kill-switch.d.ts.map +1 -0
  13. package/dist/arp/enforcement/kill-switch.js +122 -0
  14. package/dist/arp/enforcement/kill-switch.js.map +1 -0
  15. package/dist/arp/engine/event-engine.d.ts +29 -0
  16. package/dist/arp/engine/event-engine.d.ts.map +1 -0
  17. package/dist/arp/engine/event-engine.js +233 -0
  18. package/dist/arp/engine/event-engine.js.map +1 -0
  19. package/dist/arp/index.d.ts +81 -0
  20. package/dist/arp/index.d.ts.map +1 -0
  21. package/dist/arp/index.js +239 -0
  22. package/dist/arp/index.js.map +1 -0
  23. package/dist/arp/intelligence/adapters.d.ts +45 -0
  24. package/dist/arp/intelligence/adapters.d.ts.map +1 -0
  25. package/dist/arp/intelligence/adapters.js +222 -0
  26. package/dist/arp/intelligence/adapters.js.map +1 -0
  27. package/dist/arp/intelligence/anomaly.d.ts +32 -0
  28. package/dist/arp/intelligence/anomaly.d.ts.map +1 -0
  29. package/dist/arp/intelligence/anomaly.js +80 -0
  30. package/dist/arp/intelligence/anomaly.js.map +1 -0
  31. package/dist/arp/intelligence/budget.d.ts +33 -0
  32. package/dist/arp/intelligence/budget.d.ts.map +1 -0
  33. package/dist/arp/intelligence/budget.js +150 -0
  34. package/dist/arp/intelligence/budget.js.map +1 -0
  35. package/dist/arp/intelligence/coordinator.d.ts +43 -0
  36. package/dist/arp/intelligence/coordinator.d.ts.map +1 -0
  37. package/dist/arp/intelligence/coordinator.js +301 -0
  38. package/dist/arp/intelligence/coordinator.js.map +1 -0
  39. package/dist/arp/interceptors/a2a-protocol.d.ts +29 -0
  40. package/dist/arp/interceptors/a2a-protocol.d.ts.map +1 -0
  41. package/dist/arp/interceptors/a2a-protocol.js +111 -0
  42. package/dist/arp/interceptors/a2a-protocol.js.map +1 -0
  43. package/dist/arp/interceptors/filesystem.d.ts +33 -0
  44. package/dist/arp/interceptors/filesystem.d.ts.map +1 -0
  45. package/dist/arp/interceptors/filesystem.js +199 -0
  46. package/dist/arp/interceptors/filesystem.js.map +1 -0
  47. package/dist/arp/interceptors/mcp-protocol.d.ts +25 -0
  48. package/dist/arp/interceptors/mcp-protocol.d.ts.map +1 -0
  49. package/dist/arp/interceptors/mcp-protocol.js +126 -0
  50. package/dist/arp/interceptors/mcp-protocol.js.map +1 -0
  51. package/dist/arp/interceptors/network.d.ts +26 -0
  52. package/dist/arp/interceptors/network.d.ts.map +1 -0
  53. package/dist/arp/interceptors/network.js +146 -0
  54. package/dist/arp/interceptors/network.js.map +1 -0
  55. package/dist/arp/interceptors/process.d.ts +26 -0
  56. package/dist/arp/interceptors/process.d.ts.map +1 -0
  57. package/dist/arp/interceptors/process.js +157 -0
  58. package/dist/arp/interceptors/process.js.map +1 -0
  59. package/dist/arp/interceptors/prompt.d.ts +29 -0
  60. package/dist/arp/interceptors/prompt.d.ts.map +1 -0
  61. package/dist/arp/interceptors/prompt.js +82 -0
  62. package/dist/arp/interceptors/prompt.js.map +1 -0
  63. package/dist/arp/license/index.d.ts +59 -0
  64. package/dist/arp/license/index.d.ts.map +1 -0
  65. package/dist/arp/license/index.js +78 -0
  66. package/dist/arp/license/index.js.map +1 -0
  67. package/dist/arp/monitors/filesystem.d.ts +21 -0
  68. package/dist/arp/monitors/filesystem.d.ts.map +1 -0
  69. package/dist/arp/monitors/filesystem.js +141 -0
  70. package/dist/arp/monitors/filesystem.js.map +1 -0
  71. package/dist/arp/monitors/network.d.ts +32 -0
  72. package/dist/arp/monitors/network.d.ts.map +1 -0
  73. package/dist/arp/monitors/network.js +301 -0
  74. package/dist/arp/monitors/network.js.map +1 -0
  75. package/dist/arp/monitors/process.d.ts +24 -0
  76. package/dist/arp/monitors/process.d.ts.map +1 -0
  77. package/dist/arp/monitors/process.js +205 -0
  78. package/dist/arp/monitors/process.js.map +1 -0
  79. package/dist/arp/patterns/ai-threats.d.ts +48 -0
  80. package/dist/arp/patterns/ai-threats.d.ts.map +1 -0
  81. package/dist/arp/patterns/ai-threats.js +215 -0
  82. package/dist/arp/patterns/ai-threats.js.map +1 -0
  83. package/dist/arp/proxy/forward.d.ts +23 -0
  84. package/dist/arp/proxy/forward.d.ts.map +1 -0
  85. package/dist/arp/proxy/forward.js +152 -0
  86. package/dist/arp/proxy/forward.js.map +1 -0
  87. package/dist/arp/proxy/server.d.ts +45 -0
  88. package/dist/arp/proxy/server.d.ts.map +1 -0
  89. package/dist/arp/proxy/server.js +331 -0
  90. package/dist/arp/proxy/server.js.map +1 -0
  91. package/dist/arp/reporting/local-log.d.ts +22 -0
  92. package/dist/arp/reporting/local-log.d.ts.map +1 -0
  93. package/dist/arp/reporting/local-log.js +116 -0
  94. package/dist/arp/reporting/local-log.js.map +1 -0
  95. package/dist/arp/types.d.ts +230 -0
  96. package/dist/arp/types.d.ts.map +1 -0
  97. package/dist/arp/types.js +4 -0
  98. package/dist/arp/types.js.map +1 -0
  99. package/dist/attack/custom-payloads.d.ts +11 -0
  100. package/dist/attack/custom-payloads.d.ts.map +1 -0
  101. package/dist/attack/custom-payloads.js +108 -0
  102. package/dist/attack/custom-payloads.js.map +1 -0
  103. package/dist/attack/fail-policy.d.ts +16 -0
  104. package/dist/attack/fail-policy.d.ts.map +1 -0
  105. package/dist/attack/fail-policy.js +36 -0
  106. package/dist/attack/fail-policy.js.map +1 -0
  107. package/dist/attack/index.d.ts +12 -0
  108. package/dist/attack/index.d.ts.map +1 -0
  109. package/dist/attack/index.js +30 -0
  110. package/dist/attack/index.js.map +1 -0
  111. package/dist/attack/payloads/a2a-attacks.d.ts +12 -0
  112. package/dist/attack/payloads/a2a-attacks.d.ts.map +1 -0
  113. package/dist/attack/payloads/a2a-attacks.js +221 -0
  114. package/dist/attack/payloads/a2a-attacks.js.map +1 -0
  115. package/dist/attack/payloads/capability-abuse.d.ts +8 -0
  116. package/dist/attack/payloads/capability-abuse.d.ts.map +1 -0
  117. package/dist/attack/payloads/capability-abuse.js +222 -0
  118. package/dist/attack/payloads/capability-abuse.js.map +1 -0
  119. package/dist/attack/payloads/context-manipulation.d.ts +8 -0
  120. package/dist/attack/payloads/context-manipulation.d.ts.map +1 -0
  121. package/dist/attack/payloads/context-manipulation.js +217 -0
  122. package/dist/attack/payloads/context-manipulation.js.map +1 -0
  123. package/dist/attack/payloads/data-exfiltration.d.ts +8 -0
  124. package/dist/attack/payloads/data-exfiltration.d.ts.map +1 -0
  125. package/dist/attack/payloads/data-exfiltration.js +249 -0
  126. package/dist/attack/payloads/data-exfiltration.js.map +1 -0
  127. package/dist/attack/payloads/index.d.ts +29 -0
  128. package/dist/attack/payloads/index.d.ts.map +1 -0
  129. package/dist/attack/payloads/index.js +76 -0
  130. package/dist/attack/payloads/index.js.map +1 -0
  131. package/dist/attack/payloads/jailbreak.d.ts +8 -0
  132. package/dist/attack/payloads/jailbreak.d.ts.map +1 -0
  133. package/dist/attack/payloads/jailbreak.js +265 -0
  134. package/dist/attack/payloads/jailbreak.js.map +1 -0
  135. package/dist/attack/payloads/mcp-exploitation.d.ts +12 -0
  136. package/dist/attack/payloads/mcp-exploitation.d.ts.map +1 -0
  137. package/dist/attack/payloads/mcp-exploitation.js +221 -0
  138. package/dist/attack/payloads/mcp-exploitation.js.map +1 -0
  139. package/dist/attack/payloads/prompt-injection.d.ts +8 -0
  140. package/dist/attack/payloads/prompt-injection.d.ts.map +1 -0
  141. package/dist/attack/payloads/prompt-injection.js +262 -0
  142. package/dist/attack/payloads/prompt-injection.js.map +1 -0
  143. package/dist/attack/scanner.d.ts +84 -0
  144. package/dist/attack/scanner.d.ts.map +1 -0
  145. package/dist/attack/scanner.js +509 -0
  146. package/dist/attack/scanner.js.map +1 -0
  147. package/dist/attack/types.d.ts +153 -0
  148. package/dist/attack/types.d.ts.map +1 -0
  149. package/dist/attack/types.js +46 -0
  150. package/dist/attack/types.js.map +1 -0
  151. package/dist/benchmarks/index.d.ts +16 -0
  152. package/dist/benchmarks/index.d.ts.map +1 -0
  153. package/dist/benchmarks/index.js +27 -0
  154. package/dist/benchmarks/index.js.map +1 -0
  155. package/dist/benchmarks/oasb-1.d.ts +112 -0
  156. package/dist/benchmarks/oasb-1.d.ts.map +1 -0
  157. package/dist/benchmarks/oasb-1.js +1124 -0
  158. package/dist/benchmarks/oasb-1.js.map +1 -0
  159. package/dist/checker/check-skill.d.ts +48 -0
  160. package/dist/checker/check-skill.d.ts.map +1 -0
  161. package/dist/checker/check-skill.js +105 -0
  162. package/dist/checker/check-skill.js.map +1 -0
  163. package/dist/checker/index.d.ts +12 -0
  164. package/dist/checker/index.d.ts.map +1 -0
  165. package/dist/checker/index.js +16 -0
  166. package/dist/checker/index.js.map +1 -0
  167. package/dist/checker/permission-analyzer.d.ts +12 -0
  168. package/dist/checker/permission-analyzer.d.ts.map +1 -0
  169. package/dist/checker/permission-analyzer.js +84 -0
  170. package/dist/checker/permission-analyzer.js.map +1 -0
  171. package/dist/checker/publisher-verifier.d.ts +34 -0
  172. package/dist/checker/publisher-verifier.d.ts.map +1 -0
  173. package/dist/checker/publisher-verifier.js +121 -0
  174. package/dist/checker/publisher-verifier.js.map +1 -0
  175. package/dist/checker/skill-identifier.d.ts +14 -0
  176. package/dist/checker/skill-identifier.d.ts.map +1 -0
  177. package/dist/checker/skill-identifier.js +55 -0
  178. package/dist/checker/skill-identifier.js.map +1 -0
  179. package/dist/cli.d.ts +7 -0
  180. package/dist/cli.d.ts.map +1 -0
  181. package/dist/cli.js +3534 -0
  182. package/dist/cli.js.map +1 -0
  183. package/dist/hardening/index.d.ts +7 -0
  184. package/dist/hardening/index.d.ts.map +1 -0
  185. package/dist/hardening/index.js +9 -0
  186. package/dist/hardening/index.js.map +1 -0
  187. package/dist/hardening/scanner.d.ts +147 -0
  188. package/dist/hardening/scanner.d.ts.map +1 -0
  189. package/dist/hardening/scanner.js +5445 -0
  190. package/dist/hardening/scanner.js.map +1 -0
  191. package/dist/hardening/security-check.d.ts +85 -0
  192. package/dist/hardening/security-check.d.ts.map +1 -0
  193. package/dist/hardening/security-check.js +6 -0
  194. package/dist/hardening/security-check.js.map +1 -0
  195. package/dist/index.d.ts +38 -4
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +91 -3525
  198. package/dist/index.js.map +1 -1
  199. package/dist/mcp-server.js +10 -10
  200. package/dist/mcp-server.js.map +1 -1
  201. package/dist/oasb/config/dvaa-targets.d.ts +13 -0
  202. package/dist/oasb/config/dvaa-targets.d.ts.map +1 -0
  203. package/dist/oasb/config/dvaa-targets.js +89 -0
  204. package/dist/oasb/config/dvaa-targets.js.map +1 -0
  205. package/dist/oasb/harness/arp-wrapper.d.ts +29 -0
  206. package/dist/oasb/harness/arp-wrapper.d.ts.map +1 -0
  207. package/dist/oasb/harness/arp-wrapper.js +134 -0
  208. package/dist/oasb/harness/arp-wrapper.js.map +1 -0
  209. package/dist/oasb/harness/dvaa-client.d.ts +46 -0
  210. package/dist/oasb/harness/dvaa-client.d.ts.map +1 -0
  211. package/dist/oasb/harness/dvaa-client.js +98 -0
  212. package/dist/oasb/harness/dvaa-client.js.map +1 -0
  213. package/dist/oasb/harness/dvaa-manager.d.ts +17 -0
  214. package/dist/oasb/harness/dvaa-manager.d.ts.map +1 -0
  215. package/dist/oasb/harness/dvaa-manager.js +132 -0
  216. package/dist/oasb/harness/dvaa-manager.js.map +1 -0
  217. package/dist/oasb/harness/event-collector.d.ts +33 -0
  218. package/dist/oasb/harness/event-collector.d.ts.map +1 -0
  219. package/dist/oasb/harness/event-collector.js +86 -0
  220. package/dist/oasb/harness/event-collector.js.map +1 -0
  221. package/dist/oasb/harness/metrics.d.ts +14 -0
  222. package/dist/oasb/harness/metrics.d.ts.map +1 -0
  223. package/dist/oasb/harness/metrics.js +56 -0
  224. package/dist/oasb/harness/metrics.js.map +1 -0
  225. package/dist/oasb/harness/mock-llm-adapter.d.ts +34 -0
  226. package/dist/oasb/harness/mock-llm-adapter.d.ts.map +1 -0
  227. package/dist/oasb/harness/mock-llm-adapter.js +69 -0
  228. package/dist/oasb/harness/mock-llm-adapter.js.map +1 -0
  229. package/dist/oasb/harness/types.d.ts +74 -0
  230. package/dist/oasb/harness/types.d.ts.map +1 -0
  231. package/dist/oasb/harness/types.js +3 -0
  232. package/dist/oasb/harness/types.js.map +1 -0
  233. package/dist/plugins/core.d.ts +109 -0
  234. package/dist/plugins/core.d.ts.map +1 -0
  235. package/dist/plugins/core.js +30 -0
  236. package/dist/plugins/core.js.map +1 -0
  237. package/dist/plugins/credvault.d.ts +22 -0
  238. package/dist/plugins/credvault.d.ts.map +1 -0
  239. package/dist/plugins/credvault.js +374 -0
  240. package/dist/plugins/credvault.js.map +1 -0
  241. package/dist/plugins/signcrypt.d.ts +27 -0
  242. package/dist/plugins/signcrypt.d.ts.map +1 -0
  243. package/dist/plugins/signcrypt.js +317 -0
  244. package/dist/plugins/signcrypt.js.map +1 -0
  245. package/dist/plugins/skillguard.d.ts +25 -0
  246. package/dist/plugins/skillguard.d.ts.map +1 -0
  247. package/dist/plugins/skillguard.js +346 -0
  248. package/dist/plugins/skillguard.js.map +1 -0
  249. package/dist/registry/client.d.ts +125 -0
  250. package/dist/registry/client.d.ts.map +1 -0
  251. package/dist/registry/client.js +308 -0
  252. package/dist/registry/client.js.map +1 -0
  253. package/dist/registry/index.d.ts +3 -0
  254. package/dist/registry/index.d.ts.map +1 -0
  255. package/dist/registry/index.js +10 -0
  256. package/dist/registry/index.js.map +1 -0
  257. package/dist/scanner/external-scanner.d.ts +13 -0
  258. package/dist/scanner/external-scanner.d.ts.map +1 -0
  259. package/dist/scanner/external-scanner.js +299 -0
  260. package/dist/scanner/external-scanner.js.map +1 -0
  261. package/dist/scanner/index.d.ts +6 -0
  262. package/dist/scanner/index.d.ts.map +1 -0
  263. package/dist/scanner/index.js +9 -0
  264. package/dist/scanner/index.js.map +1 -0
  265. package/dist/scanner/types.d.ts +32 -0
  266. package/dist/scanner/types.d.ts.map +1 -0
  267. package/dist/scanner/types.js +6 -0
  268. package/dist/scanner/types.js.map +1 -0
  269. package/dist/semantic/deep-scan.d.ts +13 -0
  270. package/dist/semantic/deep-scan.d.ts.map +1 -0
  271. package/dist/semantic/deep-scan.js +63 -0
  272. package/dist/semantic/deep-scan.js.map +1 -0
  273. package/dist/semantic/index.d.ts +17 -0
  274. package/dist/semantic/index.d.ts.map +1 -0
  275. package/dist/semantic/index.js +39 -0
  276. package/dist/semantic/index.js.map +1 -0
  277. package/dist/semantic/integration/cost-estimator.d.ts +17 -0
  278. package/dist/semantic/integration/cost-estimator.d.ts.map +1 -0
  279. package/dist/semantic/integration/cost-estimator.js +54 -0
  280. package/dist/semantic/integration/cost-estimator.js.map +1 -0
  281. package/dist/semantic/integration/finding-adapter.d.ts +34 -0
  282. package/dist/semantic/integration/finding-adapter.d.ts.map +1 -0
  283. package/dist/semantic/integration/finding-adapter.js +41 -0
  284. package/dist/semantic/integration/finding-adapter.js.map +1 -0
  285. package/dist/semantic/integration/oasb-upgrader.d.ts +20 -0
  286. package/dist/semantic/integration/oasb-upgrader.d.ts.map +1 -0
  287. package/dist/semantic/integration/oasb-upgrader.js +47 -0
  288. package/dist/semantic/integration/oasb-upgrader.js.map +1 -0
  289. package/dist/semantic/llm/budget.d.ts +50 -0
  290. package/dist/semantic/llm/budget.d.ts.map +1 -0
  291. package/dist/semantic/llm/budget.js +139 -0
  292. package/dist/semantic/llm/budget.js.map +1 -0
  293. package/dist/semantic/llm/cache.d.ts +36 -0
  294. package/dist/semantic/llm/cache.d.ts.map +1 -0
  295. package/dist/semantic/llm/cache.js +103 -0
  296. package/dist/semantic/llm/cache.js.map +1 -0
  297. package/dist/semantic/llm/client.d.ts +49 -0
  298. package/dist/semantic/llm/client.d.ts.map +1 -0
  299. package/dist/semantic/llm/client.js +64 -0
  300. package/dist/semantic/llm/client.js.map +1 -0
  301. package/dist/semantic/llm/index.d.ts +33 -0
  302. package/dist/semantic/llm/index.d.ts.map +1 -0
  303. package/dist/semantic/llm/index.js +129 -0
  304. package/dist/semantic/llm/index.js.map +1 -0
  305. package/dist/semantic/llm/prompts.d.ts +30 -0
  306. package/dist/semantic/llm/prompts.d.ts.map +1 -0
  307. package/dist/semantic/llm/prompts.js +120 -0
  308. package/dist/semantic/llm/prompts.js.map +1 -0
  309. package/dist/semantic/structural/credential-context.d.ts +14 -0
  310. package/dist/semantic/structural/credential-context.d.ts.map +1 -0
  311. package/dist/semantic/structural/credential-context.js +295 -0
  312. package/dist/semantic/structural/credential-context.js.map +1 -0
  313. package/dist/semantic/structural/index.d.ts +28 -0
  314. package/dist/semantic/structural/index.d.ts.map +1 -0
  315. package/dist/semantic/structural/index.js +138 -0
  316. package/dist/semantic/structural/index.js.map +1 -0
  317. package/dist/semantic/structural/instruction.d.ts +19 -0
  318. package/dist/semantic/structural/instruction.d.ts.map +1 -0
  319. package/dist/semantic/structural/instruction.js +167 -0
  320. package/dist/semantic/structural/instruction.js.map +1 -0
  321. package/dist/semantic/structural/mcp-config.d.ts +22 -0
  322. package/dist/semantic/structural/mcp-config.d.ts.map +1 -0
  323. package/dist/semantic/structural/mcp-config.js +294 -0
  324. package/dist/semantic/structural/mcp-config.js.map +1 -0
  325. package/dist/semantic/structural/permission-model.d.ts +16 -0
  326. package/dist/semantic/structural/permission-model.d.ts.map +1 -0
  327. package/dist/semantic/structural/permission-model.js +121 -0
  328. package/dist/semantic/structural/permission-model.js.map +1 -0
  329. package/dist/semantic/types.d.ts +122 -0
  330. package/dist/semantic/types.d.ts.map +1 -0
  331. package/dist/semantic/types.js +10 -0
  332. package/dist/semantic/types.js.map +1 -0
  333. 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC;;;GAGG;AACH,MAAa,gBAAgB;IAM3B,YAAY,OAAe,EAAE,MAA2B;QACtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,MAAM,EAAE,eAAe,IAAI,0BAA0B,CAAC;QAC7E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,6EAA6E;IAC7E,SAAS,CAAC,gBAAwB;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,oBAAoB;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,OAAe,EAAE,MAAc;QACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,OAAO;YACb,MAAM;SACP,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,gCAAgC;IAChC,SAAS;QASP,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,KAAK;YAC3D,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK;YAClF,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YAC1E,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;SAClC,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEO,gBAAgB;QACtB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,gBAAgB;QAChB,IAAI,GAAG,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;YACjG,IAAI,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QACD,OAAO,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,SAAS;QACf,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;CACF;AAxHD,4CAwHC;AAED,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,GAAG;QAChB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC"}
@@ -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"}