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,152 @@
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.bufferBody = bufferBody;
37
+ exports.forwardRequest = forwardRequest;
38
+ exports.sendResponse = sendResponse;
39
+ exports.sendError = sendError;
40
+ const http = __importStar(require("http"));
41
+ const https = __importStar(require("https"));
42
+ const url_1 = require("url");
43
+ /** Maximum request/response body size (10 MB) */
44
+ const MAX_BODY_BYTES = 10 * 1024 * 1024;
45
+ /**
46
+ * Buffer the full request body from an IncomingMessage.
47
+ * Rejects with 413 if body exceeds MAX_BODY_BYTES.
48
+ */
49
+ function bufferBody(req) {
50
+ return new Promise((resolve, reject) => {
51
+ const chunks = [];
52
+ let totalBytes = 0;
53
+ req.on('data', (chunk) => {
54
+ totalBytes += chunk.length;
55
+ if (totalBytes > MAX_BODY_BYTES) {
56
+ req.destroy();
57
+ reject(new Error('Request body too large'));
58
+ return;
59
+ }
60
+ chunks.push(chunk);
61
+ });
62
+ req.on('end', () => resolve(Buffer.concat(chunks)));
63
+ req.on('error', reject);
64
+ });
65
+ }
66
+ /**
67
+ * Forward an HTTP request to an upstream target and pipe the response back.
68
+ * Returns the upstream response and its body buffer (for inspection).
69
+ */
70
+ function forwardRequest(upstream, req, body, originalPath) {
71
+ return new Promise((resolve, reject) => {
72
+ const target = new url_1.URL(originalPath, upstream);
73
+ const isHttps = target.protocol === 'https:';
74
+ const mod = isHttps ? https : http;
75
+ const options = {
76
+ hostname: target.hostname,
77
+ port: target.port || (isHttps ? 443 : 80),
78
+ path: target.pathname + target.search,
79
+ method: req.method,
80
+ headers: copyHeaders(req.headers, target.hostname),
81
+ timeout: 30000,
82
+ };
83
+ const proxyReq = mod.request(options, (proxyRes) => {
84
+ const chunks = [];
85
+ let totalBytes = 0;
86
+ proxyRes.on('data', (chunk) => {
87
+ totalBytes += chunk.length;
88
+ if (totalBytes > MAX_BODY_BYTES) {
89
+ proxyRes.destroy();
90
+ reject(new Error('Upstream response too large'));
91
+ return;
92
+ }
93
+ chunks.push(chunk);
94
+ });
95
+ proxyRes.on('end', () => {
96
+ resolve({
97
+ response: proxyRes,
98
+ body: Buffer.concat(chunks),
99
+ });
100
+ });
101
+ proxyRes.on('error', reject);
102
+ });
103
+ proxyReq.on('error', reject);
104
+ proxyReq.on('timeout', () => {
105
+ proxyReq.destroy();
106
+ reject(new Error('Upstream request timed out'));
107
+ });
108
+ if (body.length > 0) {
109
+ proxyReq.write(body);
110
+ }
111
+ proxyReq.end();
112
+ });
113
+ }
114
+ /**
115
+ * Copy headers from source to a plain object, updating Host header.
116
+ */
117
+ function copyHeaders(source, targetHost) {
118
+ const headers = {};
119
+ for (const [key, value] of Object.entries(source)) {
120
+ if (key.toLowerCase() === 'host') {
121
+ headers[key] = targetHost;
122
+ }
123
+ else if (key.toLowerCase() !== 'connection') {
124
+ headers[key] = value;
125
+ }
126
+ }
127
+ return headers;
128
+ }
129
+ /**
130
+ * Write headers and body to the client response.
131
+ */
132
+ function sendResponse(res, statusCode, headers, body) {
133
+ for (const [key, value] of Object.entries(headers)) {
134
+ if (value !== undefined && key.toLowerCase() !== 'transfer-encoding') {
135
+ res.setHeader(key, value);
136
+ }
137
+ }
138
+ res.writeHead(statusCode);
139
+ res.end(body);
140
+ }
141
+ /**
142
+ * Send an error response as JSON.
143
+ */
144
+ function sendError(res, statusCode, message) {
145
+ const body = JSON.stringify({ error: message });
146
+ res.writeHead(statusCode, {
147
+ 'content-type': 'application/json',
148
+ 'content-length': Buffer.byteLength(body),
149
+ });
150
+ res.end(body);
151
+ }
152
+ //# sourceMappingURL=forward.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forward.js","sourceRoot":"","sources":["../../../src/arp/proxy/forward.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ProxyConfig } from '../types';
2
+ import type { EventEngine } from '../engine/event-engine';
3
+ import type { PromptInterceptor } from '../interceptors/prompt';
4
+ import type { MCPProtocolInterceptor } from '../interceptors/mcp-protocol';
5
+ import type { A2AProtocolInterceptor } from '../interceptors/a2a-protocol';
6
+ export interface ARPProxyDeps {
7
+ engine: EventEngine;
8
+ promptInterceptor?: PromptInterceptor;
9
+ mcpInterceptor?: MCPProtocolInterceptor;
10
+ a2aInterceptor?: A2AProtocolInterceptor;
11
+ }
12
+ /**
13
+ * ARP HTTP Reverse Proxy — sits between clients and upstream AI services,
14
+ * inspecting requests and responses for AI-layer threats.
15
+ *
16
+ * Zero external dependencies (uses Node.js built-in http module).
17
+ * Alert-only by default; optional blockOnDetection mode.
18
+ */
19
+ export declare class ARPProxy {
20
+ private readonly config;
21
+ private readonly deps;
22
+ private server;
23
+ constructor(config: ProxyConfig, deps: ARPProxyDeps);
24
+ start(): Promise<void>;
25
+ stop(): Promise<void>;
26
+ getPort(): number;
27
+ private handleRequest;
28
+ private findUpstream;
29
+ /**
30
+ * Inspect inbound request based on upstream protocol type.
31
+ * Returns true if a threat was detected.
32
+ */
33
+ private inspectRequest;
34
+ /**
35
+ * Inspect outbound response based on upstream protocol type.
36
+ */
37
+ private inspectResponse;
38
+ private inspectOpenAIRequest;
39
+ private inspectOpenAIResponse;
40
+ private inspectMCPRequest;
41
+ private inspectMCPResponse;
42
+ private inspectA2AResponse;
43
+ private inspectA2ARequest;
44
+ }
45
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/arp/proxy/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAA2B,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAI3E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;;;GAMG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY;IAK7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,OAAO,IAAI,MAAM;YAIH,aAAa;IAsD3B,OAAO,CAAC,YAAY;IAQpB;;;OAGG;YACW,cAAc;IA8B5B;;OAEG;YACW,eAAe;IA+B7B,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,iBAAiB;CAoC1B"}
@@ -0,0 +1,331 @@
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.ARPProxy = void 0;
37
+ const http = __importStar(require("http"));
38
+ const forward_1 = require("./forward");
39
+ const license_1 = require("../license");
40
+ /**
41
+ * ARP HTTP Reverse Proxy — sits between clients and upstream AI services,
42
+ * inspecting requests and responses for AI-layer threats.
43
+ *
44
+ * Zero external dependencies (uses Node.js built-in http module).
45
+ * Alert-only by default; optional blockOnDetection mode.
46
+ */
47
+ class ARPProxy {
48
+ constructor(config, deps) {
49
+ this.server = null;
50
+ this.config = config;
51
+ this.deps = deps;
52
+ }
53
+ async start() {
54
+ return new Promise((resolve) => {
55
+ this.server = http.createServer((req, res) => {
56
+ this.handleRequest(req, res).catch((err) => {
57
+ const message = err instanceof Error ? err.message : String(err);
58
+ const statusCode = message === 'Request body too large' ? 413 : 502;
59
+ const clientMessage = message === 'Request body too large'
60
+ ? 'Request body too large'
61
+ : 'Bad gateway';
62
+ (0, forward_1.sendError)(res, statusCode, clientMessage);
63
+ });
64
+ });
65
+ this.server.listen(this.config.port, () => {
66
+ resolve();
67
+ });
68
+ });
69
+ }
70
+ async stop() {
71
+ return new Promise((resolve) => {
72
+ if (this.server) {
73
+ this.server.close(() => resolve());
74
+ }
75
+ else {
76
+ resolve();
77
+ }
78
+ });
79
+ }
80
+ getPort() {
81
+ return this.config.port;
82
+ }
83
+ async handleRequest(req, res) {
84
+ const url = req.url ?? '/';
85
+ // Find matching upstream
86
+ const upstream = this.findUpstream(url);
87
+ if (!upstream) {
88
+ (0, forward_1.sendError)(res, 404, 'Not found');
89
+ return;
90
+ }
91
+ // Buffer the request body
92
+ const body = await (0, forward_1.bufferBody)(req);
93
+ const bodyStr = body.length > 0 ? body.toString('utf-8') : '';
94
+ // Pre-flight inspection (scan request)
95
+ const blocked = await this.inspectRequest(upstream, bodyStr, url);
96
+ if (blocked && this.config.blockOnDetection) {
97
+ // Blocking mode is a premium feature
98
+ const canBlock = await (0, license_1.hasFeature)(license_1.PREMIUM_FEATURES.BLOCKING_MODE);
99
+ if (canBlock) {
100
+ (0, forward_1.sendError)(res, 403, 'Request blocked by ARP: threat detected');
101
+ return;
102
+ }
103
+ // Community edition: alert only, request passes through
104
+ }
105
+ // Strip the pathPrefix from the URL before forwarding
106
+ let forwardPath = url.startsWith(upstream.pathPrefix)
107
+ ? url.slice(upstream.pathPrefix.length) || '/'
108
+ : url;
109
+ // Validate forward path is relative (prevent SSRF via absolute URL in path)
110
+ if (!forwardPath.startsWith('/')) {
111
+ forwardPath = '/' + forwardPath;
112
+ }
113
+ if (/^\/\/|^\/[a-zA-Z]+:/.test(forwardPath)) {
114
+ (0, forward_1.sendError)(res, 400, 'Bad request');
115
+ return;
116
+ }
117
+ // Forward to upstream
118
+ const result = await (0, forward_1.forwardRequest)(upstream.target, req, body, forwardPath);
119
+ // Post-flight inspection (scan response)
120
+ const responseStr = result.body.toString('utf-8');
121
+ await this.inspectResponse(upstream, responseStr);
122
+ // Send response back to client
123
+ (0, forward_1.sendResponse)(res, result.response.statusCode ?? 200, result.response.headers, result.body);
124
+ }
125
+ findUpstream(url) {
126
+ // Sort by prefix length (longest match first)
127
+ const sorted = [...this.config.upstreams].sort((a, b) => b.pathPrefix.length - a.pathPrefix.length);
128
+ return sorted.find((u) => url.startsWith(u.pathPrefix));
129
+ }
130
+ /**
131
+ * Inspect inbound request based on upstream protocol type.
132
+ * Returns true if a threat was detected.
133
+ */
134
+ async inspectRequest(upstream, bodyStr, _url) {
135
+ if (!bodyStr)
136
+ return false;
137
+ let detected = false;
138
+ switch (upstream.protocol) {
139
+ case 'openai-api': {
140
+ detected = this.inspectOpenAIRequest(bodyStr);
141
+ break;
142
+ }
143
+ case 'mcp-http': {
144
+ detected = this.inspectMCPRequest(bodyStr);
145
+ break;
146
+ }
147
+ case 'a2a': {
148
+ detected = this.inspectA2ARequest(bodyStr);
149
+ break;
150
+ }
151
+ case 'passthrough':
152
+ default:
153
+ break;
154
+ }
155
+ return detected;
156
+ }
157
+ /**
158
+ * Inspect outbound response based on upstream protocol type.
159
+ */
160
+ async inspectResponse(upstream, bodyStr) {
161
+ if (!bodyStr)
162
+ return false;
163
+ let detected = false;
164
+ switch (upstream.protocol) {
165
+ case 'openai-api': {
166
+ detected = this.inspectOpenAIResponse(bodyStr);
167
+ break;
168
+ }
169
+ case 'mcp-http': {
170
+ detected = this.inspectMCPResponse(bodyStr);
171
+ break;
172
+ }
173
+ case 'a2a': {
174
+ detected = this.inspectA2AResponse(bodyStr);
175
+ break;
176
+ }
177
+ case 'passthrough':
178
+ default:
179
+ break;
180
+ }
181
+ return detected;
182
+ }
183
+ // --- Protocol-specific inspectors ---
184
+ inspectOpenAIRequest(bodyStr) {
185
+ if (!this.deps.promptInterceptor)
186
+ return false;
187
+ try {
188
+ const parsed = JSON.parse(bodyStr);
189
+ const messages = parsed.messages;
190
+ if (!Array.isArray(messages))
191
+ return false;
192
+ let detected = false;
193
+ for (const msg of messages) {
194
+ if (msg.role === 'user' && typeof msg.content === 'string') {
195
+ const result = this.deps.promptInterceptor.scanInput(msg.content);
196
+ if (result.detected)
197
+ detected = true;
198
+ }
199
+ }
200
+ return detected;
201
+ }
202
+ catch {
203
+ return false;
204
+ }
205
+ }
206
+ inspectOpenAIResponse(bodyStr) {
207
+ if (!this.deps.promptInterceptor)
208
+ return false;
209
+ try {
210
+ const parsed = JSON.parse(bodyStr);
211
+ const choices = parsed.choices;
212
+ if (!Array.isArray(choices))
213
+ return false;
214
+ let detected = false;
215
+ for (const choice of choices) {
216
+ const content = choice.message?.content;
217
+ if (typeof content === 'string') {
218
+ const result = this.deps.promptInterceptor.scanOutput(content);
219
+ if (result.detected)
220
+ detected = true;
221
+ }
222
+ }
223
+ return detected;
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ }
229
+ inspectMCPRequest(bodyStr) {
230
+ if (!this.deps.mcpInterceptor)
231
+ return false;
232
+ try {
233
+ const parsed = JSON.parse(bodyStr);
234
+ // JSON-RPC format: { method: "tools/call", params: { name: "...", arguments: {...} } }
235
+ if (parsed.method === 'tools/call' && parsed.params) {
236
+ const toolName = parsed.params.name;
237
+ const args = parsed.params.arguments ?? {};
238
+ if (typeof toolName === 'string') {
239
+ const result = this.deps.mcpInterceptor.scanToolCall(toolName, args);
240
+ return result.detected;
241
+ }
242
+ }
243
+ return false;
244
+ }
245
+ catch {
246
+ return false;
247
+ }
248
+ }
249
+ inspectMCPResponse(bodyStr) {
250
+ if (!this.deps.promptInterceptor)
251
+ return false;
252
+ try {
253
+ const parsed = JSON.parse(bodyStr);
254
+ // JSON-RPC result: { result: { content: [{ type: "text", text: "..." }] } }
255
+ if (parsed.result?.content && Array.isArray(parsed.result.content)) {
256
+ let detected = false;
257
+ for (const part of parsed.result.content) {
258
+ if (part.type === 'text' && typeof part.text === 'string') {
259
+ const result = this.deps.promptInterceptor.scanOutput(part.text);
260
+ if (result.detected)
261
+ detected = true;
262
+ }
263
+ }
264
+ return detected;
265
+ }
266
+ // JSON-RPC error: { error: { message: "..." } }
267
+ if (parsed.error?.message && typeof parsed.error.message === 'string') {
268
+ const result = this.deps.promptInterceptor.scanOutput(parsed.error.message);
269
+ return result.detected;
270
+ }
271
+ return false;
272
+ }
273
+ catch {
274
+ return false;
275
+ }
276
+ }
277
+ inspectA2AResponse(bodyStr) {
278
+ if (!this.deps.promptInterceptor)
279
+ return false;
280
+ try {
281
+ const parsed = JSON.parse(bodyStr);
282
+ // A2A response: { content: "..." } or { message: "..." }
283
+ const content = parsed.content ?? parsed.message ?? '';
284
+ if (typeof content === 'string' && content) {
285
+ const result = this.deps.promptInterceptor.scanOutput(content);
286
+ return result.detected;
287
+ }
288
+ return false;
289
+ }
290
+ catch {
291
+ return false;
292
+ }
293
+ }
294
+ inspectA2ARequest(bodyStr) {
295
+ if (!this.deps.a2aInterceptor)
296
+ return false;
297
+ try {
298
+ const parsed = JSON.parse(bodyStr);
299
+ // A2A JSON-RPC: { method: "tasks/send", params: { ... } }
300
+ // Or direct message format: { from: "...", to: "...", content: "..." }
301
+ const from = parsed.from ?? parsed.params?.from ?? 'unknown';
302
+ const to = parsed.to ?? parsed.params?.to ?? 'unknown';
303
+ // Extract content from various A2A message formats
304
+ let content = '';
305
+ if (typeof parsed.content === 'string') {
306
+ content = parsed.content;
307
+ }
308
+ else if (parsed.params?.message?.parts) {
309
+ // A2A protocol message parts
310
+ for (const part of parsed.params.message.parts) {
311
+ if (part.type === 'text' && typeof part.text === 'string') {
312
+ content += part.text + '\n';
313
+ }
314
+ }
315
+ }
316
+ else if (typeof parsed.params?.content === 'string') {
317
+ content = parsed.params.content;
318
+ }
319
+ if (content) {
320
+ const result = this.deps.a2aInterceptor.scanMessage(from, to, content);
321
+ return result.detected;
322
+ }
323
+ return false;
324
+ }
325
+ catch {
326
+ return false;
327
+ }
328
+ }
329
+ }
330
+ exports.ARPProxy = ARPProxy;
331
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/arp/proxy/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ARPEvent, EnforcementResult } from '../types';
2
+ /**
3
+ * Local JSONL logger — append-only event and enforcement logs.
4
+ * Follows the aim-core audit.jsonl pattern.
5
+ */
6
+ export declare class LocalLogger {
7
+ private readonly dataDir;
8
+ constructor(dataDir: string);
9
+ /** Log an ARP event */
10
+ logEvent(event: ARPEvent): void;
11
+ /** Log an enforcement action */
12
+ logEnforcement(result: EnforcementResult): void;
13
+ /** Read recent events */
14
+ readEvents(limit?: number): ARPEvent[];
15
+ /** Read recent enforcement actions */
16
+ readEnforcements(limit?: number): EnforcementResult[];
17
+ /** Tail the event log (returns last N lines as JSON) */
18
+ tail(n?: number): ARPEvent[];
19
+ private appendLog;
20
+ private readLog;
21
+ }
22
+ //# sourceMappingURL=local-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-log.d.ts","sourceRoot":"","sources":["../../../src/arp/reporting/local-log.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAM5D;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM;IAK3B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,gCAAgC;IAChC,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAc/C,yBAAyB;IACzB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAItC,sCAAsC;IACtC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAIrD,wDAAwD;IACxD,IAAI,CAAC,CAAC,GAAE,MAAW,GAAG,QAAQ,EAAE;IAIhC,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,OAAO;CAiBhB"}