bla-agents 0.0.0-stage → 1.5.3

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 (330) hide show
  1. package/.agents/skills/blind-llm-agents/SKILL.md +56 -0
  2. package/.agents/skills/blind-llm-agents/references/counter-rea-matrix.md +28 -0
  3. package/DISCLAIMER.md +28 -0
  4. package/LICENSE +21 -0
  5. package/README.md +246 -2
  6. package/dist/bundler/index.d.ts +117 -0
  7. package/dist/bundler/index.d.ts.map +1 -0
  8. package/dist/bundler/index.js +167 -0
  9. package/dist/bundler/index.js.map +1 -0
  10. package/dist/cli.d.ts +30 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +447 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/core/config.d.ts +54 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +160 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/coverage-contract.d.ts +97 -0
  19. package/dist/core/coverage-contract.d.ts.map +1 -0
  20. package/dist/core/coverage-contract.js +164 -0
  21. package/dist/core/coverage-contract.js.map +1 -0
  22. package/dist/core/debug-posture.d.ts +40 -0
  23. package/dist/core/debug-posture.d.ts.map +1 -0
  24. package/dist/core/debug-posture.js +197 -0
  25. package/dist/core/debug-posture.js.map +1 -0
  26. package/dist/core/detector.d.ts +7 -0
  27. package/dist/core/detector.d.ts.map +1 -0
  28. package/dist/core/detector.js +190 -0
  29. package/dist/core/detector.js.map +1 -0
  30. package/dist/core/identifiers.d.ts +32 -0
  31. package/dist/core/identifiers.d.ts.map +1 -0
  32. package/dist/core/identifiers.js +263 -0
  33. package/dist/core/identifiers.js.map +1 -0
  34. package/dist/core/llm-directives.d.ts +12 -0
  35. package/dist/core/llm-directives.d.ts.map +1 -0
  36. package/dist/core/llm-directives.js +23 -0
  37. package/dist/core/llm-directives.js.map +1 -0
  38. package/dist/core/output-path.d.ts +3 -0
  39. package/dist/core/output-path.d.ts.map +1 -0
  40. package/dist/core/output-path.js +51 -0
  41. package/dist/core/output-path.js.map +1 -0
  42. package/dist/core/prng.d.ts +27 -0
  43. package/dist/core/prng.d.ts.map +1 -0
  44. package/dist/core/prng.js +85 -0
  45. package/dist/core/prng.js.map +1 -0
  46. package/dist/core/release-exposure.d.ts +26 -0
  47. package/dist/core/release-exposure.d.ts.map +1 -0
  48. package/dist/core/release-exposure.js +213 -0
  49. package/dist/core/release-exposure.js.map +1 -0
  50. package/dist/core/release-plan.d.ts +68 -0
  51. package/dist/core/release-plan.d.ts.map +1 -0
  52. package/dist/core/release-plan.js +235 -0
  53. package/dist/core/release-plan.js.map +1 -0
  54. package/dist/core/sarif.d.ts +53 -0
  55. package/dist/core/sarif.d.ts.map +1 -0
  56. package/dist/core/sarif.js +91 -0
  57. package/dist/core/sarif.js.map +1 -0
  58. package/dist/core/sqlite-runtime.d.ts +17 -0
  59. package/dist/core/sqlite-runtime.d.ts.map +1 -0
  60. package/dist/core/sqlite-runtime.js +49 -0
  61. package/dist/core/sqlite-runtime.js.map +1 -0
  62. package/dist/core/token-estimator.d.ts +11 -0
  63. package/dist/core/token-estimator.d.ts.map +1 -0
  64. package/dist/core/token-estimator.js +87 -0
  65. package/dist/core/token-estimator.js.map +1 -0
  66. package/dist/core/types.d.ts +159 -0
  67. package/dist/core/types.d.ts.map +1 -0
  68. package/dist/core/types.js +2 -0
  69. package/dist/core/types.js.map +1 -0
  70. package/dist/engine/auditor.d.ts +6 -0
  71. package/dist/engine/auditor.d.ts.map +1 -0
  72. package/dist/engine/auditor.js +977 -0
  73. package/dist/engine/auditor.js.map +1 -0
  74. package/dist/engine/benchmark.d.ts +6 -0
  75. package/dist/engine/benchmark.d.ts.map +1 -0
  76. package/dist/engine/benchmark.js +425 -0
  77. package/dist/engine/benchmark.js.map +1 -0
  78. package/dist/engine/defender.d.ts +57 -0
  79. package/dist/engine/defender.d.ts.map +1 -0
  80. package/dist/engine/defender.js +130 -0
  81. package/dist/engine/defender.js.map +1 -0
  82. package/dist/engine/harden.d.ts +61 -0
  83. package/dist/engine/harden.d.ts.map +1 -0
  84. package/dist/engine/harden.js +292 -0
  85. package/dist/engine/harden.js.map +1 -0
  86. package/dist/engine/protector.d.ts +8 -0
  87. package/dist/engine/protector.d.ts.map +1 -0
  88. package/dist/engine/protector.js +500 -0
  89. package/dist/engine/protector.js.map +1 -0
  90. package/dist/engine/verifier.d.ts +6 -0
  91. package/dist/engine/verifier.d.ts.map +1 -0
  92. package/dist/engine/verifier.js +91 -0
  93. package/dist/engine/verifier.js.map +1 -0
  94. package/dist/identity.d.ts +180 -0
  95. package/dist/identity.d.ts.map +1 -0
  96. package/dist/identity.js +180 -0
  97. package/dist/identity.js.map +1 -0
  98. package/dist/index.d.ts +53 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +53 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/mcp/server.d.ts +81 -0
  103. package/dist/mcp/server.d.ts.map +1 -0
  104. package/dist/mcp/server.js +730 -0
  105. package/dist/mcp/server.js.map +1 -0
  106. package/dist/setup/clients.d.ts +58 -0
  107. package/dist/setup/clients.d.ts.map +1 -0
  108. package/dist/setup/clients.js +1268 -0
  109. package/dist/setup/clients.js.map +1 -0
  110. package/dist/setup/doctor.d.ts +69 -0
  111. package/dist/setup/doctor.d.ts.map +1 -0
  112. package/dist/setup/doctor.js +339 -0
  113. package/dist/setup/doctor.js.map +1 -0
  114. package/dist/setup/setup.d.ts +99 -0
  115. package/dist/setup/setup.d.ts.map +1 -0
  116. package/dist/setup/setup.js +652 -0
  117. package/dist/setup/setup.js.map +1 -0
  118. package/dist/shields/chaff/chaff-generator.d.ts +17 -0
  119. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -0
  120. package/dist/shields/chaff/chaff-generator.js +80 -0
  121. package/dist/shields/chaff/chaff-generator.js.map +1 -0
  122. package/dist/shields/deception/architecture-mirage.d.ts +16 -0
  123. package/dist/shields/deception/architecture-mirage.d.ts.map +1 -0
  124. package/dist/shields/deception/architecture-mirage.js +46 -0
  125. package/dist/shields/deception/architecture-mirage.js.map +1 -0
  126. package/dist/shields/deception/canary-honeypot.d.ts +33 -0
  127. package/dist/shields/deception/canary-honeypot.d.ts.map +1 -0
  128. package/dist/shields/deception/canary-honeypot.js +95 -0
  129. package/dist/shields/deception/canary-honeypot.js.map +1 -0
  130. package/dist/shields/deception/cognitive-armor-trigger.d.ts +43 -0
  131. package/dist/shields/deception/cognitive-armor-trigger.d.ts.map +1 -0
  132. package/dist/shields/deception/cognitive-armor-trigger.js +204 -0
  133. package/dist/shields/deception/cognitive-armor-trigger.js.map +1 -0
  134. package/dist/shields/deception/crash-trace-decoy.d.ts +16 -0
  135. package/dist/shields/deception/crash-trace-decoy.d.ts.map +1 -0
  136. package/dist/shields/deception/crash-trace-decoy.js +36 -0
  137. package/dist/shields/deception/crash-trace-decoy.js.map +1 -0
  138. package/dist/shields/deception/decompiler-illusion.d.ts +15 -0
  139. package/dist/shields/deception/decompiler-illusion.d.ts.map +1 -0
  140. package/dist/shields/deception/decompiler-illusion.js +29 -0
  141. package/dist/shields/deception/decompiler-illusion.js.map +1 -0
  142. package/dist/shields/deception/diff-noise-injector.d.ts +17 -0
  143. package/dist/shields/deception/diff-noise-injector.d.ts.map +1 -0
  144. package/dist/shields/deception/diff-noise-injector.js +29 -0
  145. package/dist/shields/deception/diff-noise-injector.js.map +1 -0
  146. package/dist/shields/deception/evidence-contract-poison.d.ts +25 -0
  147. package/dist/shields/deception/evidence-contract-poison.d.ts.map +1 -0
  148. package/dist/shields/deception/evidence-contract-poison.js +66 -0
  149. package/dist/shields/deception/evidence-contract-poison.js.map +1 -0
  150. package/dist/shields/deception/format-payloads.d.ts +21 -0
  151. package/dist/shields/deception/format-payloads.d.ts.map +1 -0
  152. package/dist/shields/deception/format-payloads.js +24 -0
  153. package/dist/shields/deception/format-payloads.js.map +1 -0
  154. package/dist/shields/deception/index.d.ts +35 -0
  155. package/dist/shields/deception/index.d.ts.map +1 -0
  156. package/dist/shields/deception/index.js +69 -0
  157. package/dist/shields/deception/index.js.map +1 -0
  158. package/dist/shields/deception/prompt-completion-poison.d.ts +19 -0
  159. package/dist/shields/deception/prompt-completion-poison.d.ts.map +1 -0
  160. package/dist/shields/deception/prompt-completion-poison.js +45 -0
  161. package/dist/shields/deception/prompt-completion-poison.js.map +1 -0
  162. package/dist/shields/deception/semantic-honeypot.d.ts +17 -0
  163. package/dist/shields/deception/semantic-honeypot.d.ts.map +1 -0
  164. package/dist/shields/deception/semantic-honeypot.js +45 -0
  165. package/dist/shields/deception/semantic-honeypot.js.map +1 -0
  166. package/dist/shields/deception/shadow-business-logic.d.ts +24 -0
  167. package/dist/shields/deception/shadow-business-logic.d.ts.map +1 -0
  168. package/dist/shields/deception/shadow-business-logic.js +66 -0
  169. package/dist/shields/deception/shadow-business-logic.js.map +1 -0
  170. package/dist/shields/deception/system-diagnostic-decoy.d.ts +36 -0
  171. package/dist/shields/deception/system-diagnostic-decoy.d.ts.map +1 -0
  172. package/dist/shields/deception/system-diagnostic-decoy.js +101 -0
  173. package/dist/shields/deception/system-diagnostic-decoy.js.map +1 -0
  174. package/dist/shields/exhaustion/asar-header-amplifier.d.ts +25 -0
  175. package/dist/shields/exhaustion/asar-header-amplifier.d.ts.map +1 -0
  176. package/dist/shields/exhaustion/asar-header-amplifier.js +59 -0
  177. package/dist/shields/exhaustion/asar-header-amplifier.js.map +1 -0
  178. package/dist/shields/exhaustion/bpe-token-amplifier.d.ts +21 -0
  179. package/dist/shields/exhaustion/bpe-token-amplifier.d.ts.map +1 -0
  180. package/dist/shields/exhaustion/bpe-token-amplifier.js +68 -0
  181. package/dist/shields/exhaustion/bpe-token-amplifier.js.map +1 -0
  182. package/dist/shields/exhaustion/callgraph-labyrinth.d.ts +20 -0
  183. package/dist/shields/exhaustion/callgraph-labyrinth.d.ts.map +1 -0
  184. package/dist/shields/exhaustion/callgraph-labyrinth.js +62 -0
  185. package/dist/shields/exhaustion/callgraph-labyrinth.js.map +1 -0
  186. package/dist/shields/exhaustion/cdp-shape-budget-breaker.d.ts +20 -0
  187. package/dist/shields/exhaustion/cdp-shape-budget-breaker.d.ts.map +1 -0
  188. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js +40 -0
  189. package/dist/shields/exhaustion/cdp-shape-budget-breaker.js.map +1 -0
  190. package/dist/shields/exhaustion/frida-capture-saturation.d.ts +33 -0
  191. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -0
  192. package/dist/shields/exhaustion/frida-capture-saturation.js +58 -0
  193. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -0
  194. package/dist/shields/exhaustion/index.d.ts +30 -0
  195. package/dist/shields/exhaustion/index.d.ts.map +1 -0
  196. package/dist/shields/exhaustion/index.js +43 -0
  197. package/dist/shields/exhaustion/index.js.map +1 -0
  198. package/dist/shields/exhaustion/obligation-flooder.d.ts +128 -0
  199. package/dist/shields/exhaustion/obligation-flooder.d.ts.map +1 -0
  200. package/dist/shields/exhaustion/obligation-flooder.js +145 -0
  201. package/dist/shields/exhaustion/obligation-flooder.js.map +1 -0
  202. package/dist/shields/exhaustion/rea-budget-matrix.d.ts +54 -0
  203. package/dist/shields/exhaustion/rea-budget-matrix.d.ts.map +1 -0
  204. package/dist/shields/exhaustion/rea-budget-matrix.js +300 -0
  205. package/dist/shields/exhaustion/rea-budget-matrix.js.map +1 -0
  206. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts +23 -0
  207. package/dist/shields/exhaustion/regex-worker-tarpit.d.ts.map +1 -0
  208. package/dist/shields/exhaustion/regex-worker-tarpit.js +43 -0
  209. package/dist/shields/exhaustion/regex-worker-tarpit.js.map +1 -0
  210. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts +26 -0
  211. package/dist/shields/exhaustion/wasm-interface-exhaustion.d.ts.map +1 -0
  212. package/dist/shields/exhaustion/wasm-interface-exhaustion.js +59 -0
  213. package/dist/shields/exhaustion/wasm-interface-exhaustion.js.map +1 -0
  214. package/dist/shields/formats/android-dex-xref.d.ts +19 -0
  215. package/dist/shields/formats/android-dex-xref.d.ts.map +1 -0
  216. package/dist/shields/formats/android-dex-xref.js +427 -0
  217. package/dist/shields/formats/android-dex-xref.js.map +1 -0
  218. package/dist/shields/formats/android-manifest.d.ts +44 -0
  219. package/dist/shields/formats/android-manifest.d.ts.map +1 -0
  220. package/dist/shields/formats/android-manifest.js +240 -0
  221. package/dist/shields/formats/android-manifest.js.map +1 -0
  222. package/dist/shields/formats/android-r8.d.ts +44 -0
  223. package/dist/shields/formats/android-r8.d.ts.map +1 -0
  224. package/dist/shields/formats/android-r8.js +246 -0
  225. package/dist/shields/formats/android-r8.js.map +1 -0
  226. package/dist/shields/formats/apple-plist.d.ts +46 -0
  227. package/dist/shields/formats/apple-plist.d.ts.map +1 -0
  228. package/dist/shields/formats/apple-plist.js +119 -0
  229. package/dist/shields/formats/apple-plist.js.map +1 -0
  230. package/dist/shields/formats/archive.d.ts +55 -0
  231. package/dist/shields/formats/archive.d.ts.map +1 -0
  232. package/dist/shields/formats/archive.js +369 -0
  233. package/dist/shields/formats/archive.js.map +1 -0
  234. package/dist/shields/formats/asar.d.ts +72 -0
  235. package/dist/shields/formats/asar.d.ts.map +1 -0
  236. package/dist/shields/formats/asar.js +343 -0
  237. package/dist/shields/formats/asar.js.map +1 -0
  238. package/dist/shields/formats/bun-standalone.d.ts +78 -0
  239. package/dist/shields/formats/bun-standalone.d.ts.map +1 -0
  240. package/dist/shields/formats/bun-standalone.js +272 -0
  241. package/dist/shields/formats/bun-standalone.js.map +1 -0
  242. package/dist/shields/formats/dotnet-managed.d.ts +30 -0
  243. package/dist/shields/formats/dotnet-managed.d.ts.map +1 -0
  244. package/dist/shields/formats/dotnet-managed.js +66 -0
  245. package/dist/shields/formats/dotnet-managed.js.map +1 -0
  246. package/dist/shields/formats/electron-fuses.d.ts +93 -0
  247. package/dist/shields/formats/electron-fuses.d.ts.map +1 -0
  248. package/dist/shields/formats/electron-fuses.js +349 -0
  249. package/dist/shields/formats/electron-fuses.js.map +1 -0
  250. package/dist/shields/formats/erlang-beam.d.ts +34 -0
  251. package/dist/shields/formats/erlang-beam.d.ts.map +1 -0
  252. package/dist/shields/formats/erlang-beam.js +319 -0
  253. package/dist/shields/formats/erlang-beam.js.map +1 -0
  254. package/dist/shields/formats/evm-bytecode.d.ts +28 -0
  255. package/dist/shields/formats/evm-bytecode.d.ts.map +1 -0
  256. package/dist/shields/formats/evm-bytecode.js +124 -0
  257. package/dist/shields/formats/evm-bytecode.js.map +1 -0
  258. package/dist/shields/formats/go-flutter-exhaustion.d.ts +55 -0
  259. package/dist/shields/formats/go-flutter-exhaustion.d.ts.map +1 -0
  260. package/dist/shields/formats/go-flutter-exhaustion.js +346 -0
  261. package/dist/shields/formats/go-flutter-exhaustion.js.map +1 -0
  262. package/dist/shields/formats/gpu-ptx.d.ts +40 -0
  263. package/dist/shields/formats/gpu-ptx.d.ts.map +1 -0
  264. package/dist/shields/formats/gpu-ptx.js +62 -0
  265. package/dist/shields/formats/gpu-ptx.js.map +1 -0
  266. package/dist/shields/formats/headers.d.ts +22 -0
  267. package/dist/shields/formats/headers.d.ts.map +1 -0
  268. package/dist/shields/formats/headers.js +193 -0
  269. package/dist/shields/formats/headers.js.map +1 -0
  270. package/dist/shields/formats/jvm-bytecode.d.ts +20 -0
  271. package/dist/shields/formats/jvm-bytecode.d.ts.map +1 -0
  272. package/dist/shields/formats/jvm-bytecode.js +134 -0
  273. package/dist/shields/formats/jvm-bytecode.js.map +1 -0
  274. package/dist/shields/formats/mobile-game.d.ts +42 -0
  275. package/dist/shields/formats/mobile-game.d.ts.map +1 -0
  276. package/dist/shields/formats/mobile-game.js +131 -0
  277. package/dist/shields/formats/mobile-game.js.map +1 -0
  278. package/dist/shields/formats/model.d.ts +66 -0
  279. package/dist/shields/formats/model.d.ts.map +1 -0
  280. package/dist/shields/formats/model.js +461 -0
  281. package/dist/shields/formats/model.js.map +1 -0
  282. package/dist/shields/formats/native.d.ts +101 -0
  283. package/dist/shields/formats/native.d.ts.map +1 -0
  284. package/dist/shields/formats/native.js +585 -0
  285. package/dist/shields/formats/native.js.map +1 -0
  286. package/dist/shields/formats/pcap-capture.d.ts +27 -0
  287. package/dist/shields/formats/pcap-capture.d.ts.map +1 -0
  288. package/dist/shields/formats/pcap-capture.js +201 -0
  289. package/dist/shields/formats/pcap-capture.js.map +1 -0
  290. package/dist/shields/formats/python.d.ts +62 -0
  291. package/dist/shields/formats/python.d.ts.map +1 -0
  292. package/dist/shields/formats/python.js +637 -0
  293. package/dist/shields/formats/python.js.map +1 -0
  294. package/dist/shields/formats/sourcemap.d.ts +22 -0
  295. package/dist/shields/formats/sourcemap.d.ts.map +1 -0
  296. package/dist/shields/formats/sourcemap.js +66 -0
  297. package/dist/shields/formats/sourcemap.js.map +1 -0
  298. package/dist/shields/formats/sqlite.d.ts +115 -0
  299. package/dist/shields/formats/sqlite.d.ts.map +1 -0
  300. package/dist/shields/formats/sqlite.js +528 -0
  301. package/dist/shields/formats/sqlite.js.map +1 -0
  302. package/dist/shields/formats/wasm.d.ts +38 -0
  303. package/dist/shields/formats/wasm.d.ts.map +1 -0
  304. package/dist/shields/formats/wasm.js +314 -0
  305. package/dist/shields/formats/wasm.js.map +1 -0
  306. package/dist/shields/javascript/ast-shield.d.ts +37 -0
  307. package/dist/shields/javascript/ast-shield.d.ts.map +1 -0
  308. package/dist/shields/javascript/ast-shield.js +645 -0
  309. package/dist/shields/javascript/ast-shield.js.map +1 -0
  310. package/dist/shields/runtime/memory-diff-shield.d.ts +56 -0
  311. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -0
  312. package/dist/shields/runtime/memory-diff-shield.js +170 -0
  313. package/dist/shields/runtime/memory-diff-shield.js.map +1 -0
  314. package/dist/shields/runtime/runtime-shield.d.ts +24 -0
  315. package/dist/shields/runtime/runtime-shield.d.ts.map +1 -0
  316. package/dist/shields/runtime/runtime-shield.js +84 -0
  317. package/dist/shields/runtime/runtime-shield.js.map +1 -0
  318. package/dist/shields/tarpit/opaque-predicates.d.ts +10 -0
  319. package/dist/shields/tarpit/opaque-predicates.d.ts.map +1 -0
  320. package/dist/shields/tarpit/opaque-predicates.js +40 -0
  321. package/dist/shields/tarpit/opaque-predicates.js.map +1 -0
  322. package/dist/shields/tarpit/tarpit-generator.d.ts +31 -0
  323. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -0
  324. package/dist/shields/tarpit/tarpit-generator.js +194 -0
  325. package/dist/shields/tarpit/tarpit-generator.js.map +1 -0
  326. package/dist/ui/reporter.d.ts +13 -0
  327. package/dist/ui/reporter.d.ts.map +1 -0
  328. package/dist/ui/reporter.js +197 -0
  329. package/dist/ui/reporter.js.map +1 -0
  330. package/package.json +89 -4
@@ -0,0 +1,167 @@
1
+ import { SeededPrng } from "../core/prng.js";
2
+ import { generateChaffPayloads } from "../shields/chaff/chaff-generator.js";
3
+ import { generateHoneySourceMap } from "../shields/formats/sourcemap.js";
4
+ import { inferJsCarrierFromPath, inferJsLoaderFromPath, transformJavaScriptWithBlaShield, } from "../shields/javascript/ast-shield.js";
5
+ /**
6
+ * Infers the exact esbuild loader (`"js" | "jsx" | "ts" | "tsx"`) from a module path.
7
+ */
8
+ export function inferEsbuildLoader(filePath) {
9
+ return inferJsLoaderFromPath(filePath);
10
+ }
11
+ /**
12
+ * Maps a Rollup/Vite output format (`"es"`, `"cjs"`, `"iife"`, `"umd"`, `"amd"`, `"system"`)
13
+ * or chunk filename to a BLA JavaScript carrier contract.
14
+ */
15
+ export function inferCarrierFromRollupFormat(format, fileName) {
16
+ if (format) {
17
+ const normalized = format.toLowerCase().trim();
18
+ if (normalized === "es" ||
19
+ normalized === "esm" ||
20
+ normalized === "module") {
21
+ return "module";
22
+ }
23
+ if (normalized === "cjs" || normalized === "commonjs") {
24
+ return "commonjs";
25
+ }
26
+ if (normalized === "iife" ||
27
+ normalized === "umd" ||
28
+ normalized === "amd" ||
29
+ normalized === "system") {
30
+ return "script";
31
+ }
32
+ }
33
+ return inferJsCarrierFromPath(fileName);
34
+ }
35
+ /**
36
+ * Vite & Rollup plugin (`blaVitePlugin` / `blaRollupPlugin`) that automatically
37
+ * injects BLA's three-stage adversarial shield into generated JS chunks during `renderChunk`.
38
+ *
39
+ * Usage in `vite.config.ts`:
40
+ * ```ts
41
+ * import { defineConfig } from "vite";
42
+ * import { blaVitePlugin } from "bla-shield";
43
+ *
44
+ * export default defineConfig({
45
+ * plugins: [blaVitePlugin({ intensity: "bankrupt" })],
46
+ * });
47
+ * ```
48
+ */
49
+ export function blaRollupPlugin(options = {}) {
50
+ const intensity = options.intensity ?? "balanced";
51
+ const include = options.include ?? /\.(?:m?js|cjs)$/i;
52
+ const emitMap = options.honeySourceMap ?? true;
53
+ return {
54
+ name: "bla-shield-rollup-plugin",
55
+ renderChunk(code, chunk, outputOptions) {
56
+ if (!include.test(chunk.fileName)) {
57
+ return null;
58
+ }
59
+ const seed = `${options.seed ?? "bla-rollup"}:${chunk.fileName}`;
60
+ const sourceType = inferCarrierFromRollupFormat(outputOptions?.format, chunk.fileName);
61
+ const loader = inferEsbuildLoader(chunk.fileName);
62
+ const transformed = transformJavaScriptWithBlaShield(code, {
63
+ intensity,
64
+ seed,
65
+ filename: chunk.fileName,
66
+ sourceType,
67
+ loader,
68
+ });
69
+ if (!emitMap) {
70
+ return { code: transformed.code, map: null };
71
+ }
72
+ const prng = new SeededPrng(seed);
73
+ const chaff = generateChaffPayloads(prng, intensity);
74
+ const lineCount = transformed.code.split("\n").length;
75
+ const honeyMap = generateHoneySourceMap(chunk.fileName, lineCount, prng, chaff);
76
+ return {
77
+ code: transformed.code,
78
+ map: honeyMap.mapObject,
79
+ };
80
+ },
81
+ };
82
+ }
83
+ /**
84
+ * Alias of `blaRollupPlugin` with `enforce: "post"` for Vite 4/5/6.
85
+ */
86
+ export function blaVitePlugin(options = {}) {
87
+ return {
88
+ ...blaRollupPlugin(options),
89
+ name: "vite-plugin-bla-shield",
90
+ enforce: "post",
91
+ };
92
+ }
93
+ /**
94
+ * Webpack 5 / Rspack plugin class (`BlaWebpackPlugin`) that shields emitted JS assets.
95
+ */
96
+ export class BlaWebpackPlugin {
97
+ options;
98
+ constructor(options = {}) {
99
+ this.options = options;
100
+ }
101
+ apply(compiler) {
102
+ const intensity = this.options.intensity ?? "balanced";
103
+ const include = this.options.include ?? /\.(?:m?js|cjs)$/i;
104
+ compiler.hooks.compilation.tap("BlaWebpackPlugin", (compilation) => {
105
+ compilation.hooks.processAssets.tap({
106
+ name: "BlaWebpackPlugin",
107
+ stage: 400, // PROCESS_ASSETS_STAGE_OPTIMIZE_INLINE
108
+ }, (assets) => {
109
+ for (const assetName of Object.keys(assets)) {
110
+ if (!include.test(assetName))
111
+ continue;
112
+ const rawAsset = assets[assetName];
113
+ if (!rawAsset)
114
+ continue;
115
+ const rawSource = rawAsset.source().toString("utf8");
116
+ const sourceType = inferJsCarrierFromPath(assetName);
117
+ const loader = inferEsbuildLoader(assetName);
118
+ const transformed = transformJavaScriptWithBlaShield(rawSource, {
119
+ intensity,
120
+ seed: `${this.options.seed ?? "bla-webpack"}:${assetName}`,
121
+ filename: assetName,
122
+ sourceType,
123
+ loader,
124
+ });
125
+ const shieldedCode = transformed.code;
126
+ compilation.updateAsset(assetName, {
127
+ source: () => shieldedCode,
128
+ size: () => Buffer.byteLength(shieldedCode, "utf8"),
129
+ });
130
+ }
131
+ });
132
+ });
133
+ }
134
+ }
135
+ /**
136
+ * esbuild plugin (`blaEsbuildPlugin`) that shields JS/TS/JSX/TSX entrypoints or modules
137
+ * while preserving the exact esbuild loader (`js`, `jsx`, `ts`, `tsx`) and module carrier.
138
+ */
139
+ export function blaEsbuildPlugin(options = {}) {
140
+ const intensity = options.intensity ?? "balanced";
141
+ const include = options.include ?? /\.(?:[cm]?[jt]sx?)$/i;
142
+ return {
143
+ name: "bla-shield-esbuild-plugin",
144
+ setup(build) {
145
+ build.onLoad({ filter: include }, async (args) => {
146
+ if (args.path.includes("node_modules"))
147
+ return null;
148
+ const fs = await import("node:fs/promises");
149
+ const source = await fs.readFile(args.path, "utf8");
150
+ const loader = inferEsbuildLoader(args.path);
151
+ const sourceType = inferJsCarrierFromPath(args.path);
152
+ const transformed = transformJavaScriptWithBlaShield(source, {
153
+ intensity,
154
+ seed: `${options.seed ?? "bla-esbuild"}:${args.path}`,
155
+ filename: args.path,
156
+ loader,
157
+ sourceType,
158
+ });
159
+ return {
160
+ contents: transformed.code,
161
+ loader,
162
+ };
163
+ });
164
+ },
165
+ };
166
+ }
167
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bundler/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gCAAgC,GAGjC,MAAM,qCAAqC,CAAC;AAa7C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAe,EACf,QAAiB;IAEjB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/C,IACE,UAAU,KAAK,IAAI;YACnB,UAAU,KAAK,KAAK;YACpB,UAAU,KAAK,QAAQ,EACvB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACtD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IACE,UAAU,KAAK,MAAM;YACrB,UAAU,KAAK,KAAK;YACpB,UAAU,KAAK,KAAK;YACpB,UAAU,KAAK,QAAQ,EACvB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,UAAmC,EAAE;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IAE/C,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,WAAW,CACT,IAAY,EACZ,KAA8C,EAC9C,aAAmC;YAEnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,4BAA4B,CAC7C,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,QAAQ,CACf,CAAC;YACF,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,gCAAgC,CAAC,IAAI,EAAE;gBACzD,SAAS;gBACT,IAAI;gBACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,UAAU;gBACV,MAAM;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACtD,MAAM,QAAQ,GAAG,sBAAsB,CACrC,KAAK,CAAC,QAAQ,EACd,SAAS,EACT,IAAI,EACJ,KAAK,CACN,CAAC;YAEF,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,GAAG,EAAE,QAAQ,CAAC,SAAS;aACxB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAmC,EAAE;IACjE,OAAO;QACL,GAAG,eAAe,CAAC,OAAO,CAAC;QAC3B,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,MAAe;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAClB,OAAO,CAA0B;IAE1C,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,QA2BL;QACC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC;QAE3D,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,WAAW,EAAE,EAAE;YACjE,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CACjC;gBACE,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,GAAG,EAAE,uCAAuC;aACpD,EACD,CAAC,MAAM,EAAE,EAAE;gBACT,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;wBAAE,SAAS;oBACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;oBACnC,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,UAAU,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;oBACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBAC7C,MAAM,WAAW,GAAG,gCAAgC,CAAC,SAAS,EAAE;wBAC9D,SAAS;wBACT,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,IAAI,SAAS,EAAE;wBAC1D,QAAQ,EAAE,SAAS;wBACnB,UAAU;wBACV,MAAM;qBACP,CAAC,CAAC;oBACH,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC;oBACtC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE;wBACjC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY;wBAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC;qBACpD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAmC,EAAE;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,sBAAsB,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,KAAK,CAAC,KAOL;YACC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACpD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,gCAAgC,CAAC,MAAM,EAAE;oBAC3D,SAAS;oBACT,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE;oBACrD,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,MAAM;oBACN,UAAU;iBACX,CAAC,CAAC;gBACH,OAAO;oBACL,QAAQ,EAAE,WAAW,CAAC,IAAI;oBAC1B,MAAM;iBACP,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import type { ProtectionIntensity } from "./core/types.js";
3
+ import { type NativeHeaderLanguage } from "./shields/formats/headers.js";
4
+ import { type SupportedAgentClientId } from "./setup/clients.js";
5
+ interface ParsedCliArgs {
6
+ readonly command: string;
7
+ readonly positionals: string[];
8
+ readonly output?: string;
9
+ readonly configPath?: string;
10
+ readonly inPlace: boolean;
11
+ readonly intensity: ProtectionIntensity;
12
+ readonly seed?: string;
13
+ readonly manifest: boolean;
14
+ readonly llmDirectives: boolean;
15
+ readonly lang: NativeHeaderLanguage;
16
+ readonly clients: SupportedAgentClientId[];
17
+ readonly allDetected: boolean;
18
+ readonly dryRun: boolean;
19
+ readonly yes: boolean;
20
+ readonly json: boolean;
21
+ readonly sarif: boolean;
22
+ readonly failUnder?: number;
23
+ readonly honeyMaps: boolean;
24
+ readonly help: boolean;
25
+ readonly version: boolean;
26
+ }
27
+ export declare function parseCliArgs(argv: readonly string[]): ParsedCliArgs;
28
+ export declare function runCli(argv?: readonly string[]): Promise<number>;
29
+ export {};
30
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO3D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AA8DjE,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAmGnE;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwP7F"}
package/dist/cli.js ADDED
@@ -0,0 +1,447 @@
1
+ #!/usr/bin/env node
2
+ import { writeFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { BLA_IDENTITY } from "./identity.js";
5
+ import { initBlaConfig, loadBlaConfig, resolveProjectSeed } from "./core/config.js";
6
+ import { inspectReleaseExposure } from "./core/release-exposure.js";
7
+ import { buildSarifReport } from "./core/sarif.js";
8
+ import { auditTarget } from "./engine/auditor.js";
9
+ import { protectTarget } from "./engine/protector.js";
10
+ import { verifyTarget } from "./engine/verifier.js";
11
+ import { defendTarget } from "./engine/defender.js";
12
+ import { formatHardenProjectReport, hardenProject } from "./engine/harden.js";
13
+ import { runShowcaseBenchmark } from "./engine/benchmark.js";
14
+ import { emitCompileTimeNativeHeader, } from "./shields/formats/headers.js";
15
+ import { runSetup, runUninstall } from "./setup/setup.js";
16
+ import { runDoctor } from "./setup/doctor.js";
17
+ import { startMcpStdioServer } from "./mcp/server.js";
18
+ import { formatAuditReport, formatBanner, formatBenchmarkReport, formatDoctorReport, formatOneClickDefenseReport, formatProtectionResult, formatSetupReport, formatVerificationReport, } from "./ui/reporter.js";
19
+ function printHelp() {
20
+ console.log(`${formatBanner()}
21
+
22
+ Usage:
23
+ npx bla-agents <command> [options]
24
+ npx bla-shield <command> [options]
25
+ bla <command> [options]
26
+
27
+ Quick start:
28
+ npx bla-agents setup -y # register bla_harden with your agent
29
+ bla harden . # one-sentence Counter-REA hardening
30
+ # or tell your agent: "Harden my software against REA"
31
+
32
+ Commands:
33
+ setup Configure agent MCP integrations & install the BLA skill
34
+ harden [dir] DEFAULT: auto-discover build outputs under a project/build dir and bankrupt-harden all of them
35
+ defend <target> One-click full Counter-REA pipeline (inspect -> audit -> bankrupt protect -> verify)
36
+ inspect-release <target> Read-only local source-map & symbol exposure check
37
+ audit <target> Pre-flight REA exposure & vulnerability scan
38
+ protect <target> Inject multi-layer Counter-REA adversarial shield
39
+ verify <target> [original] Verify Counter-REA defense invariants & token amplification
40
+ benchmark Run the 14-target Counter-REA Showcase Benchmark suite
41
+ emit-headers Generate compile-time C/C++, Rust, or Go defense headers
42
+ doctor Check readiness of BLA engines & agent registrations
43
+ update Update global bla-shield installation & print setup refresh instructions
44
+ uninstall Remove BLA MCP configuration & skill files
45
+ mcp Start the BLA Model Context Protocol (MCP) server over stdio
46
+
47
+ Options:
48
+ -o, --output <path> Output file or directory path (for protect / emit-headers)
49
+ --in-place Overwrite input target in-place (for protect)
50
+ --intensity <preset> stealth | balanced | maximum | bankrupt
51
+ (harden/defend default: bankrupt; protect default: balanced)
52
+ --seed <seed> Deterministic PRNG seed (default: per-project random in .blarc)
53
+ --manifest Emit unsigned .bla-manifest.json next to protected artifacts (opt-in)
54
+ --llm-directives Opt-in risky LLM directive layers (COPPA/medical bait, dual-use imitation, AI chat markers); OFF by default
55
+ --lang <c|rust|go> Target language for emit-headers (default: c)
56
+ --client <id> Agent client ID for setup (repeatable: claude_code, cursor, codex, etc.)
57
+ --all-detected Configure all detected coding agents on this machine
58
+ --dry-run Preview planned setup changes without writing files
59
+ -y, --yes Approve setup actions without interactive confirmation
60
+ --json Emit structured JSON output
61
+ -v, --version Print BLA version
62
+ -h, --help Print this help guide
63
+ `);
64
+ }
65
+ export function parseCliArgs(argv) {
66
+ let command = "";
67
+ const positionals = [];
68
+ let output;
69
+ let configPath;
70
+ let inPlace = false;
71
+ let intensity = "balanced";
72
+ let seed;
73
+ let manifest = false;
74
+ let llmDirectives = false;
75
+ let lang = "c";
76
+ const clients = [];
77
+ let allDetected = false;
78
+ let dryRun = false;
79
+ let yes = false;
80
+ let json = false;
81
+ let sarif = false;
82
+ let failUnder;
83
+ let honeyMaps = true;
84
+ let help = false;
85
+ let version = false;
86
+ for (let i = 0; i < argv.length; i++) {
87
+ const arg = argv[i];
88
+ if (arg === "-h" || arg === "--help") {
89
+ help = true;
90
+ }
91
+ else if (arg === "-v" || arg === "--version") {
92
+ version = true;
93
+ }
94
+ else if (arg === "--json") {
95
+ json = true;
96
+ }
97
+ else if (arg === "--sarif") {
98
+ sarif = true;
99
+ }
100
+ else if (arg === "-y" || arg === "--yes") {
101
+ yes = true;
102
+ }
103
+ else if (arg === "--dry-run") {
104
+ dryRun = true;
105
+ }
106
+ else if (arg === "--all-detected") {
107
+ allDetected = true;
108
+ }
109
+ else if (arg === "--in-place") {
110
+ inPlace = true;
111
+ }
112
+ else if (arg === "--no-honey-maps") {
113
+ honeyMaps = false;
114
+ }
115
+ else if (arg === "--manifest") {
116
+ manifest = true;
117
+ }
118
+ else if (arg === "--llm-directives") {
119
+ llmDirectives = true;
120
+ }
121
+ else if (arg === "--mcp") {
122
+ command = "mcp";
123
+ }
124
+ else if (arg === "--update") {
125
+ command = "update";
126
+ }
127
+ else if ((arg === "-o" || arg === "--output") && i + 1 < argv.length) {
128
+ output = argv[++i];
129
+ }
130
+ else if ((arg === "-c" || arg === "--config") && i + 1 < argv.length) {
131
+ configPath = argv[++i];
132
+ }
133
+ else if (arg === "--fail-under" && i + 1 < argv.length) {
134
+ const n = Number(argv[++i]);
135
+ if (Number.isFinite(n))
136
+ failUnder = n;
137
+ }
138
+ else if (arg === "--intensity" && i + 1 < argv.length) {
139
+ const val = argv[++i];
140
+ if (["stealth", "balanced", "maximum", "bankrupt"].includes(val)) {
141
+ intensity = val;
142
+ }
143
+ }
144
+ else if (arg === "--seed" && i + 1 < argv.length) {
145
+ seed = argv[++i];
146
+ }
147
+ else if (arg === "--lang" && i + 1 < argv.length) {
148
+ const val = argv[++i];
149
+ if (["c", "rust", "go"].includes(val)) {
150
+ lang = val;
151
+ }
152
+ }
153
+ else if (arg === "--client" && i + 1 < argv.length) {
154
+ clients.push(argv[++i]);
155
+ }
156
+ else if (!arg.startsWith("-")) {
157
+ if (!command)
158
+ command = arg;
159
+ else
160
+ positionals.push(arg);
161
+ }
162
+ }
163
+ return {
164
+ command,
165
+ positionals,
166
+ ...(output !== undefined ? { output } : {}),
167
+ ...(configPath !== undefined ? { configPath } : {}),
168
+ inPlace,
169
+ intensity,
170
+ ...(seed !== undefined ? { seed } : {}),
171
+ manifest,
172
+ llmDirectives,
173
+ lang,
174
+ clients,
175
+ allDetected,
176
+ dryRun,
177
+ yes,
178
+ json,
179
+ sarif,
180
+ ...(failUnder !== undefined ? { failUnder } : {}),
181
+ honeyMaps,
182
+ help,
183
+ version,
184
+ };
185
+ }
186
+ export async function runCli(argv = process.argv.slice(2)) {
187
+ const parsed = parseCliArgs(argv);
188
+ if (parsed.version) {
189
+ console.log(BLA_IDENTITY.version);
190
+ return 0;
191
+ }
192
+ if (parsed.command === "mcp") {
193
+ startMcpStdioServer();
194
+ return 0;
195
+ }
196
+ if (parsed.help || !parsed.command) {
197
+ printHelp();
198
+ return 0;
199
+ }
200
+ try {
201
+ switch (parsed.command) {
202
+ case "setup": {
203
+ const res = runSetup({
204
+ ...(parsed.clients.length > 0 ? { clientIds: parsed.clients } : {}),
205
+ allDetected: parsed.allDetected,
206
+ dryRun: parsed.dryRun,
207
+ yes: parsed.yes,
208
+ });
209
+ if (parsed.json)
210
+ console.log(JSON.stringify(res, null, 2));
211
+ else
212
+ console.log(formatSetupReport(res));
213
+ return 0;
214
+ }
215
+ case "doctor": {
216
+ const doc = runDoctor();
217
+ if (parsed.json)
218
+ console.log(JSON.stringify(doc, null, 2));
219
+ else
220
+ console.log(formatDoctorReport(doc));
221
+ return doc.healthy ? 0 : 1;
222
+ }
223
+ case "update": {
224
+ const updateInfo = {
225
+ currentVersion: BLA_IDENTITY.version,
226
+ package: BLA_IDENTITY.packageName,
227
+ packageAlias: BLA_IDENTITY.packageAlias,
228
+ refreshSetupCommand: "npx bla-agents@latest setup",
229
+ globalUpdateCommand: "npm install --global bla-agents@latest",
230
+ };
231
+ if (parsed.json) {
232
+ console.log(JSON.stringify(updateInfo, null, 2));
233
+ }
234
+ else {
235
+ console.log(`${formatBanner()}\n\nBLA v${BLA_IDENTITY.version} update workflow:\n • Global CLI update: npm install --global bla-agents@latest\n • Agent MCP refresh: npx bla-agents@latest setup\n`);
236
+ }
237
+ return 0;
238
+ }
239
+ case "uninstall": {
240
+ const res = runUninstall();
241
+ if (parsed.json)
242
+ console.log(JSON.stringify(res, null, 2));
243
+ else
244
+ console.log(`Removed BLA configuration from ${res.removedClients.length} client(s).`);
245
+ return 0;
246
+ }
247
+ case "init": {
248
+ const dir = parsed.positionals[0] ?? process.cwd();
249
+ const res = initBlaConfig(dir, parsed.inPlace);
250
+ if (parsed.json) {
251
+ console.log(JSON.stringify(res, null, 2));
252
+ }
253
+ else {
254
+ console.log(res.created
255
+ ? `Created ${res.configPath} (default input: "${res.config.input}", intensity: "${res.config.intensity}").`
256
+ : `Config already exists at ${res.configPath}. Pass --in-place to overwrite.`);
257
+ }
258
+ return 0;
259
+ }
260
+ case "inspect-release": {
261
+ const target = parsed.positionals[0];
262
+ if (!target) {
263
+ console.error("Error: Missing <target> path for `bla inspect-release <target>`.");
264
+ return 1;
265
+ }
266
+ const report = inspectReleaseExposure(target);
267
+ console.log(JSON.stringify(report, null, 2));
268
+ return report.status === "complete" ? 0 : 2;
269
+ }
270
+ case "harden": {
271
+ const loaded = loadBlaConfig(process.cwd(), parsed.configPath);
272
+ const directory = parsed.positionals[0] ?? loaded.config.input ?? process.cwd();
273
+ const explicitIntensity = argv.includes("--intensity")
274
+ ? parsed.intensity
275
+ : (loaded.config.intensity ?? "bankrupt");
276
+ const resolved = resolveProjectSeed(typeof directory === "string" ? directory : process.cwd(), parsed.seed, parsed.configPath);
277
+ const report = hardenProject({
278
+ directory,
279
+ intensity: explicitIntensity,
280
+ seed: resolved.seed,
281
+ emitManifest: parsed.manifest || loaded.config.emitManifest === true,
282
+ llmDirectives: parsed.llmDirectives || loaded.config.llmDirectives === true,
283
+ ...(parsed.output !== undefined ? { outputDirectory: parsed.output } : {}),
284
+ });
285
+ if (parsed.json) {
286
+ console.log(JSON.stringify(report, null, 2));
287
+ }
288
+ else {
289
+ console.log(formatHardenProjectReport(report));
290
+ }
291
+ return report.overallSuccess || report.discoveredCount === 0 ? (report.discoveredCount === 0 ? 2 : 0) : 2;
292
+ }
293
+ case "defend": {
294
+ const loaded = loadBlaConfig(process.cwd(), parsed.configPath);
295
+ const target = parsed.positionals[0] ?? loaded.config.input;
296
+ if (!target) {
297
+ console.error("Error: Missing <target> path for `bla defend <target>`.");
298
+ return 1;
299
+ }
300
+ const explicitIntensity = argv.includes("--intensity")
301
+ ? parsed.intensity
302
+ : (loaded.config.intensity ?? "bankrupt");
303
+ const resolved = resolveProjectSeed(process.cwd(), parsed.seed, parsed.configPath);
304
+ const report = defendTarget({
305
+ inputPath: target,
306
+ ...((parsed.output ?? loaded.config.output) !== undefined
307
+ ? { outputPath: (parsed.output ?? loaded.config.output) }
308
+ : {}),
309
+ inPlace: parsed.inPlace,
310
+ intensity: explicitIntensity,
311
+ seed: resolved.seed,
312
+ emitManifest: parsed.manifest || loaded.config.emitManifest === true,
313
+ llmDirectives: parsed.llmDirectives || loaded.config.llmDirectives === true,
314
+ });
315
+ if (parsed.sarif) {
316
+ console.log(JSON.stringify(buildSarifReport(report.beforeAudit, report.releaseExposure), null, 2));
317
+ }
318
+ else if (parsed.json) {
319
+ console.log(JSON.stringify(report, null, 2));
320
+ }
321
+ else {
322
+ console.log(formatOneClickDefenseReport(report));
323
+ }
324
+ const threshold = parsed.failUnder ?? loaded.config.minDefenseScore;
325
+ if (threshold !== undefined && report.verification.defenseScore < threshold) {
326
+ return 2;
327
+ }
328
+ return report.overallSuccess ? 0 : 2;
329
+ }
330
+ case "audit": {
331
+ const loaded = loadBlaConfig(process.cwd(), parsed.configPath);
332
+ const target = parsed.positionals[0] ?? loaded.config.input;
333
+ if (!target) {
334
+ console.error("Error: Missing <target> path for `bla audit <target>`.");
335
+ return 1;
336
+ }
337
+ const report = auditTarget(target);
338
+ if (parsed.sarif) {
339
+ console.log(JSON.stringify(buildSarifReport(report), null, 2));
340
+ }
341
+ else if (parsed.json) {
342
+ console.log(JSON.stringify(report, null, 2));
343
+ }
344
+ else {
345
+ console.log(formatAuditReport(report));
346
+ }
347
+ return 0;
348
+ }
349
+ case "protect": {
350
+ const loaded = loadBlaConfig(process.cwd(), parsed.configPath);
351
+ const target = parsed.positionals[0] ?? loaded.config.input;
352
+ if (!target) {
353
+ console.error("Error: Missing <target> path for `bla protect <target>`.");
354
+ return 1;
355
+ }
356
+ const resolved = resolveProjectSeed(process.cwd(), parsed.seed, parsed.configPath);
357
+ const res = protectTarget({
358
+ inputPath: target,
359
+ ...((parsed.output ?? loaded.config.output) !== undefined
360
+ ? { outputPath: (parsed.output ?? loaded.config.output) }
361
+ : {}),
362
+ inPlace: parsed.inPlace,
363
+ intensity: argv.includes("--intensity")
364
+ ? parsed.intensity
365
+ : (loaded.config.intensity ?? parsed.intensity),
366
+ seed: resolved.seed,
367
+ honeySourceMaps: parsed.honeyMaps,
368
+ llmDirectives: parsed.llmDirectives || loaded.config.llmDirectives === true,
369
+ });
370
+ if (parsed.json)
371
+ console.log(JSON.stringify(res, null, 2));
372
+ else
373
+ console.log(formatProtectionResult(res));
374
+ return 0;
375
+ }
376
+ case "verify": {
377
+ const target = parsed.positionals[0];
378
+ if (!target) {
379
+ console.error("Error: Missing <target> path for `bla verify <target> [original]`.");
380
+ return 1;
381
+ }
382
+ const report = verifyTarget(target, parsed.positionals[1]);
383
+ if (parsed.json)
384
+ console.log(JSON.stringify(report, null, 2));
385
+ else
386
+ console.log(formatVerificationReport(report));
387
+ if (parsed.failUnder !== undefined && report.defenseScore < parsed.failUnder) {
388
+ return 2;
389
+ }
390
+ return report.overallPassed ? 0 : 2;
391
+ }
392
+ case "benchmark": {
393
+ const bench = await runShowcaseBenchmark();
394
+ if (parsed.json)
395
+ console.log(JSON.stringify(bench, null, 2));
396
+ else
397
+ console.log(formatBenchmarkReport(bench));
398
+ return 0;
399
+ }
400
+ case "emit-headers": {
401
+ const emitted = emitCompileTimeNativeHeader(parsed.lang, {
402
+ intensity: parsed.intensity,
403
+ ...(parsed.seed !== undefined ? { seed: parsed.seed } : {}),
404
+ });
405
+ if (parsed.output) {
406
+ const outPath = resolve(parsed.output);
407
+ writeFileSync(outPath, emitted.content, "utf8");
408
+ if (parsed.json) {
409
+ console.log(JSON.stringify({ ...emitted, outputPath: outPath }, null, 2));
410
+ }
411
+ else {
412
+ console.log(`Emitted ${emitted.language.toUpperCase()} defense header to ${outPath} (${emitted.decoyFunctionsCount} decoy tarpit functions).`);
413
+ }
414
+ }
415
+ else if (parsed.json) {
416
+ console.log(JSON.stringify(emitted, null, 2));
417
+ }
418
+ else {
419
+ console.log(emitted.content);
420
+ }
421
+ return 0;
422
+ }
423
+ default:
424
+ console.error(`Unknown command: ${parsed.command}. Run "bla --help" for available commands.`);
425
+ return 1;
426
+ }
427
+ }
428
+ catch (err) {
429
+ console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
430
+ return 1;
431
+ }
432
+ }
433
+ // Run when invoked directly
434
+ const isDirectExecution = process.argv[1] !== undefined &&
435
+ (process.argv[1].endsWith("cli.js") ||
436
+ process.argv[1].endsWith("cli.ts") ||
437
+ process.argv[1].endsWith("bla") ||
438
+ process.argv[1].endsWith("bla-agents") ||
439
+ process.argv[1].endsWith("bla-shield"));
440
+ if (isDirectExecution) {
441
+ runCli().then((code) => {
442
+ if (process.argv[2] !== "mcp" && !process.argv.includes("--mcp")) {
443
+ process.exitCode = code;
444
+ }
445
+ });
446
+ }
447
+ //# sourceMappingURL=cli.js.map