@pensar/apex 2.5.0 → 2.6.1-canary.0cc77dcc

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 (1507) hide show
  1. package/README.md +38 -0
  2. package/bin/pensar.js +12 -4
  3. package/build/agent-6mzhkzxj.js +13 -0
  4. package/build/agent-9ymr36jt.js +13 -0
  5. package/build/{agent-m30a62kh.js → agent-fb1d2x2a.js} +48 -50
  6. package/build/agent-h8z7zb26.js +15 -0
  7. package/build/agent-runs-awgj4sat.js +313 -0
  8. package/build/{apps-x4ef2gpc.js → apps-d50kkp3g.js} +50 -58
  9. package/build/{auth-7ay8qgxm.js → auth-396rc66q.js} +61 -68
  10. package/build/blackboxAgent-j3ncq55f.js +13 -0
  11. package/build/blackboxPentest-aw69ect4.js +59 -0
  12. package/build/cli-0ym9qz7r.js +175 -0
  13. package/build/{cli-zav1yx5k.js → cli-2dqvgkh8.js} +990 -632
  14. package/build/cli-38j2jc0m.js +62 -0
  15. package/build/{cli-ee3axgts.js → cli-3gt761d2.js} +7 -1
  16. package/build/{cli-sx3jkv7p.js → cli-3p4gyc9m.js} +28872 -25951
  17. package/build/cli-3qznjsnr.js +14 -0
  18. package/build/cli-5ppxe6qz.js +355 -0
  19. package/build/cli-691cfgdy.js +186 -0
  20. package/build/{cli-x92fkt2f.js → cli-6y2mzdz2.js} +55 -97
  21. package/build/{cli-73k43t1r.js → cli-8s4ew1hv.js} +53 -78
  22. package/build/{cli-53rm0rrz.js → cli-8w8k4dph.js} +1 -1
  23. package/build/{cli-68260ckj.js → cli-91gs9whc.js} +1658 -1606
  24. package/build/{cli-7vg06q5r.js → cli-9s7snz6x.js} +135 -125
  25. package/build/{cli-bw2ddttk.js → cli-a1m3pmke.js} +4730 -267
  26. package/build/{cli-knd276ed.js → cli-bb02pjt0.js} +31 -31
  27. package/build/{cli-p4r7q012.js → cli-c0ha5wh1.js} +16072 -12743
  28. package/build/{cli-j54qa6tm.js → cli-c2k4xxaw.js} +42 -42
  29. package/build/{cli-k71t434r.js → cli-ec2hwkv3.js} +34 -76
  30. package/build/{cli-vkbzcnw1.js → cli-fapvkkbh.js} +43 -40
  31. package/build/cli-g06s7edq.js +11 -0
  32. package/build/cli-gsaf4jk3.js +280 -0
  33. package/build/{cli-bc05qbss.js → cli-h6y3bt60.js} +13 -21
  34. package/build/cli-jdrx44ge.js +14 -0
  35. package/build/{cli-z5c0ypg1.js → cli-jp6wytx1.js} +4 -4
  36. package/build/cli-mz5pk30x.js +5508 -0
  37. package/build/{cli-kff2bbq7.js → cli-nmg32cfd.js} +43 -43
  38. package/build/cli-pckpvwbd.js +22 -0
  39. package/build/cli-pwm29ks7.js +6337 -0
  40. package/build/cli-retw3rw5.js +12 -0
  41. package/build/cli-se8ae8z3.js +2250 -0
  42. package/build/{cli-dm0fc0bm.js → cli-v1sarr4y.js} +5 -9
  43. package/build/cli-v9rrvh12.js +429 -0
  44. package/build/{cli-3py0a0wg.js → cli-vfta27tv.js} +206 -136
  45. package/build/cli-xcy2vxj2.js +1732 -0
  46. package/build/{cli-y3dpm18e.js → cli-xn12g67s.js} +75 -92
  47. package/build/cli.js +769 -195
  48. package/build/{config-4kzh88xz.js → config-hddxxr27.js} +16 -19
  49. package/build/{doctor-rz7sx6ev.js → doctor-z94afr10.js} +26 -15
  50. package/build/export-trajectory-rt4tf07k.js +112 -0
  51. package/build/{fastStrike-a54atjc8.js → fastStrike-mgws2nav.js} +56 -31
  52. package/build/{fixes-fv66yn1z.js → fixes-9qtsvwxx.js} +22 -30
  53. package/build/{getMachineId-bsd-xj3bn2fv.js → getMachineId-bsd-zr67nd9p.js} +5 -5
  54. package/build/{getMachineId-darwin-07jzjcx6.js → getMachineId-darwin-fd1d562d.js} +5 -5
  55. package/build/{getMachineId-linux-ahngynxd.js → getMachineId-linux-kjmg243j.js} +4 -4
  56. package/build/{getMachineId-unsupported-vy43b44z.js → getMachineId-unsupported-n4r58vke.js} +4 -4
  57. package/build/{getMachineId-win-8x66cynz.js → getMachineId-win-yzgpfsrb.js} +5 -5
  58. package/build/index-0d05xcz4.js +25 -0
  59. package/build/index-0ef0j7yp.js +12 -0
  60. package/build/index-557xary4.js +121 -0
  61. package/build/index-a0bxw5zq.js +17477 -0
  62. package/build/{index-cbwn03kz.js → index-a2xycbjs.js} +12 -31
  63. package/build/{index-psqjpw5m.js → index-c1h0g35p.js} +11 -11
  64. package/build/index-cfbd4zej.js +17 -0
  65. package/build/index-mqaw1ac6.js +9 -0
  66. package/build/{index-kyd1jm89.js → index-nfhetcq8.js} +159 -169
  67. package/build/index-qnyevb6q.js +1563 -0
  68. package/build/{index-fpwr10qm.js → index-wyn4g2c1.js} +5048 -3786
  69. package/build/index-zbq3rvwx.js +36 -0
  70. package/build/index-zhr65sg3.js +102 -0
  71. package/build/{issues-019678t0.js → issues-9zdszfq8.js} +51 -47
  72. package/build/knowledge-r6rmer3d.js +139 -0
  73. package/build/lib/chunk-02awpt3c.js +431 -0
  74. package/build/lib/chunk-0me4mrrd.js +7150 -0
  75. package/build/lib/chunk-2j49k090.js +922 -0
  76. package/build/lib/chunk-2njv7wz3.js +178 -0
  77. package/build/lib/chunk-2t65f749.js +1412 -0
  78. package/build/lib/chunk-3502z798.js +9232 -0
  79. package/build/lib/chunk-3q89v4xv.js +21 -0
  80. package/build/lib/chunk-3w05jmk6.js +685 -0
  81. package/build/lib/chunk-48zms2q1.js +572 -0
  82. package/build/lib/chunk-4ydrmwd9.js +980 -0
  83. package/build/lib/chunk-517rf135.js +143 -0
  84. package/build/lib/chunk-5cp1fp0x.js +186 -0
  85. package/build/lib/chunk-7gjdygcx.js +171 -0
  86. package/build/lib/chunk-8vhr65w3.js +272 -0
  87. package/build/lib/chunk-9nsrd4xg.js +12 -0
  88. package/build/lib/chunk-asbemhm5.js +56 -0
  89. package/build/lib/chunk-b8eq85d2.js +143 -0
  90. package/build/lib/chunk-bx94rwt5.js +24 -0
  91. package/build/lib/chunk-eb4h4k1f.js +213 -0
  92. package/build/lib/chunk-ebkq3bcq.js +102 -0
  93. package/build/lib/chunk-esymacwg.js +14 -0
  94. package/build/lib/chunk-f04pr76h.js +317 -0
  95. package/build/lib/chunk-fy3bbbqy.js +7896 -0
  96. package/build/lib/chunk-g8d2x00m.js +2429 -0
  97. package/build/lib/chunk-ja7j565c.js +743 -0
  98. package/build/lib/chunk-jah67hkt.js +120 -0
  99. package/build/lib/chunk-jdjagvgr.js +85 -0
  100. package/build/lib/chunk-k5m5rasy.js +439 -0
  101. package/build/lib/chunk-mp1czx2y.js +510 -0
  102. package/build/lib/chunk-mrjbsaf4.js +31 -0
  103. package/build/lib/chunk-mv74mq5n.js +59 -0
  104. package/build/lib/chunk-n0ba7khr.js +64 -0
  105. package/build/lib/chunk-ngp6p527.js +317 -0
  106. package/build/lib/chunk-q5e23acz.js +52 -0
  107. package/build/lib/chunk-sk8xnywf.js +212 -0
  108. package/build/lib/chunk-t5bt5vn1.js +146 -0
  109. package/build/lib/chunk-tsnk2k9x.js +345 -0
  110. package/build/lib/chunk-vt9spgd1.js +62 -0
  111. package/build/lib/chunk-vx228eeq.js +82 -0
  112. package/build/lib/chunk-wr6ke041.js +11157 -0
  113. package/build/lib/chunk-xcdtrzk5.js +27 -0
  114. package/build/lib/chunk-xpfg2fbk.js +90 -0
  115. package/build/lib/chunk-zrbqn62x.js +697 -0
  116. package/build/lib/core/agents/agentRuntime.d.ts +47 -0
  117. package/build/lib/core/agents/defineAgent.d.ts +82 -0
  118. package/build/lib/core/agents/offSecAgent/index.d.ts +9 -0
  119. package/build/lib/core/agents/offSecAgent/index.js +225 -0
  120. package/build/lib/core/agents/offSecAgent/interruptedStepFinalization.d.ts +23 -0
  121. package/build/lib/core/agents/offSecAgent/interruptedStepMessages.d.ts +42 -0
  122. package/build/lib/core/agents/offSecAgent/messagePersistence.d.ts +39 -0
  123. package/build/lib/core/agents/offSecAgent/offensiveSecurityAgent.d.ts +233 -0
  124. package/build/lib/core/agents/offSecAgent/prompt.d.ts +35 -0
  125. package/build/lib/core/agents/offSecAgent/recordedTools.d.ts +11 -0
  126. package/build/lib/core/agents/offSecAgent/runtimeContext.d.ts +43 -0
  127. package/build/lib/core/agents/offSecAgent/streamDiagnostics.d.ts +67 -0
  128. package/build/lib/core/agents/offSecAgent/subagentSpawner.d.ts +223 -0
  129. package/build/lib/core/agents/offSecAgent/subagentSpawner.js +19 -0
  130. package/build/lib/core/agents/offSecAgent/toolLifecycle.d.ts +54 -0
  131. package/build/lib/core/agents/offSecAgent/tools/__tests__/sandboxScript.d.ts +1 -0
  132. package/build/lib/core/agents/offSecAgent/tools/addMemory.d.ts +16 -0
  133. package/build/lib/core/agents/offSecAgent/tools/agentScratch.d.ts +17 -0
  134. package/build/lib/core/agents/offSecAgent/tools/applyPatch.d.ts +8 -0
  135. package/build/lib/core/agents/offSecAgent/tools/applyPatchImpl.d.ts +24 -0
  136. package/build/lib/core/agents/offSecAgent/tools/askUserQuestions.d.ts +42 -0
  137. package/build/lib/core/agents/offSecAgent/tools/browserHeaderRouting.d.ts +9 -0
  138. package/build/lib/core/agents/offSecAgent/tools/browserToolFactories.d.ts +40 -0
  139. package/build/lib/core/agents/offSecAgent/tools/browserTools.d.ts +96 -0
  140. package/build/lib/core/agents/offSecAgent/tools/callbackListener.d.ts +212 -0
  141. package/build/lib/core/agents/offSecAgent/tools/camoufox.d.ts +106 -0
  142. package/build/lib/core/agents/offSecAgent/tools/checkpointState.d.ts +17 -0
  143. package/build/lib/core/agents/offSecAgent/tools/completeAuthentication.d.ts +39 -0
  144. package/build/lib/core/agents/offSecAgent/tools/crawlAuthenticated.d.ts +36 -0
  145. package/build/lib/core/agents/offSecAgent/tools/createAttackSurfaceReport.d.ts +31 -0
  146. package/build/lib/core/agents/offSecAgent/tools/createFile.d.ts +12 -0
  147. package/build/lib/core/agents/offSecAgent/tools/createTask.d.ts +20 -0
  148. package/build/lib/core/agents/offSecAgent/tools/delegateAuth.d.ts +72 -0
  149. package/build/lib/core/agents/offSecAgent/tools/deleteFile.d.ts +10 -0
  150. package/build/lib/core/agents/offSecAgent/tools/destructiveGuard.d.ts +94 -0
  151. package/build/lib/core/agents/offSecAgent/tools/detectAuthScheme.d.ts +72 -0
  152. package/build/lib/core/agents/offSecAgent/tools/documentApp.d.ts +38 -0
  153. package/build/lib/core/agents/offSecAgent/tools/documentEndpoint.d.ts +111 -0
  154. package/build/lib/core/agents/offSecAgent/tools/documentFinding.d.ts +285 -0
  155. package/build/lib/core/agents/offSecAgent/tools/email/adapters.d.ts +45 -0
  156. package/build/lib/core/agents/offSecAgent/tools/email/adapters.js +8 -0
  157. package/build/lib/core/agents/offSecAgent/tools/email/getAttachments.d.ts +33 -0
  158. package/build/lib/core/agents/offSecAgent/tools/email/getMessage.d.ts +20 -0
  159. package/build/lib/core/agents/offSecAgent/tools/email/index.d.ts +145 -0
  160. package/build/lib/core/agents/offSecAgent/tools/email/listInboxes.d.ts +23 -0
  161. package/build/lib/core/agents/offSecAgent/tools/email/listMessages.d.ts +22 -0
  162. package/build/lib/core/agents/offSecAgent/tools/email/markRead.d.ts +20 -0
  163. package/build/lib/core/agents/offSecAgent/tools/email/searchMessages.d.ts +24 -0
  164. package/build/lib/core/agents/offSecAgent/tools/email/sendEmail.d.ts +28 -0
  165. package/build/lib/core/agents/offSecAgent/tools/email/types.d.ts +40 -0
  166. package/build/lib/core/agents/offSecAgent/tools/email/types.js +0 -0
  167. package/build/lib/core/agents/offSecAgent/tools/executeCommand.d.ts +84 -0
  168. package/build/lib/core/agents/offSecAgent/tools/extractJsEndpoints.d.ts +13 -0
  169. package/build/lib/core/agents/offSecAgent/tools/fileWorkspace.d.ts +21 -0
  170. package/build/lib/core/agents/offSecAgent/tools/fileWorkspaceRemote.d.ts +13 -0
  171. package/build/lib/core/agents/offSecAgent/tools/getMemory.d.ts +12 -0
  172. package/build/lib/core/agents/offSecAgent/tools/getPage.d.ts +17 -0
  173. package/build/lib/core/agents/offSecAgent/tools/gitDiff.d.ts +12 -0
  174. package/build/lib/core/agents/offSecAgent/tools/gitStatus.d.ts +10 -0
  175. package/build/lib/core/agents/offSecAgent/tools/glob.d.ts +8 -0
  176. package/build/lib/core/agents/offSecAgent/tools/globImpl.d.ts +13 -0
  177. package/build/lib/core/agents/offSecAgent/tools/globPattern.d.ts +7 -0
  178. package/build/lib/core/agents/offSecAgent/tools/grep.d.ts +10 -0
  179. package/build/lib/core/agents/offSecAgent/tools/grepImpl.d.ts +34 -0
  180. package/build/lib/core/agents/offSecAgent/tools/httpRequest.d.ts +70 -0
  181. package/build/lib/core/agents/offSecAgent/tools/index.d.ts +466 -0
  182. package/build/lib/core/agents/offSecAgent/tools/index.js +262 -0
  183. package/build/lib/core/agents/offSecAgent/tools/listFiles.d.ts +9 -0
  184. package/build/lib/core/agents/offSecAgent/tools/listFilesImpl.d.ts +27 -0
  185. package/build/lib/core/agents/offSecAgent/tools/listMemories.d.ts +13 -0
  186. package/build/lib/core/agents/offSecAgent/tools/listPromptInjections.d.ts +18 -0
  187. package/build/lib/core/agents/offSecAgent/tools/listTasks.d.ts +24 -0
  188. package/build/lib/core/agents/offSecAgent/tools/patchApply.d.ts +24 -0
  189. package/build/lib/core/agents/offSecAgent/tools/patchParse.d.ts +24 -0
  190. package/build/lib/core/agents/offSecAgent/tools/perCommandShell.d.ts +82 -0
  191. package/build/lib/core/agents/offSecAgent/tools/playwrightMcp.d.ts +369 -0
  192. package/build/lib/core/agents/offSecAgent/tools/probeAuthEndpoints.d.ts +28 -0
  193. package/build/lib/core/agents/offSecAgent/tools/profileCodebase.d.ts +33 -0
  194. package/build/lib/core/agents/offSecAgent/tools/provideComparisonResults.d.ts +31 -0
  195. package/build/lib/core/agents/offSecAgent/tools/queryWhiteboxCatalog.d.ts +17 -0
  196. package/build/lib/core/agents/offSecAgent/tools/readFile.d.ts +11 -0
  197. package/build/lib/core/agents/offSecAgent/tools/readFileImpl.d.ts +31 -0
  198. package/build/lib/core/agents/offSecAgent/tools/readSkill.d.ts +15 -0
  199. package/build/lib/core/agents/offSecAgent/tools/reportError.d.ts +31 -0
  200. package/build/lib/core/agents/offSecAgent/tools/response.d.ts +15 -0
  201. package/build/lib/core/agents/offSecAgent/tools/runAttackSurface.d.ts +81 -0
  202. package/build/lib/core/agents/offSecAgent/tools/runCodeQuery.d.ts +44 -0
  203. package/build/lib/core/agents/offSecAgent/tools/runPentestWorkflow.d.ts +32 -0
  204. package/build/lib/core/agents/offSecAgent/tools/runWhiteboxScan.d.ts +52 -0
  205. package/build/lib/core/agents/offSecAgent/tools/sandbox.d.ts +30 -0
  206. package/build/lib/core/agents/offSecAgent/tools/sandboxPlaywright.d.ts +137 -0
  207. package/build/lib/core/agents/offSecAgent/tools/sandboxScript.d.ts +6 -0
  208. package/build/lib/core/agents/offSecAgent/tools/scopeGuard.d.ts +91 -0
  209. package/build/lib/core/agents/offSecAgent/tools/scriptSyntaxCheck.d.ts +45 -0
  210. package/build/lib/core/agents/offSecAgent/tools/smsInbox.d.ts +67 -0
  211. package/build/lib/core/agents/offSecAgent/tools/smsInbox.js +6 -0
  212. package/build/lib/core/agents/offSecAgent/tools/smsListMessages.d.ts +29 -0
  213. package/build/lib/core/agents/offSecAgent/tools/spawnCodingAgent.d.ts +43 -0
  214. package/build/lib/core/agents/offSecAgent/tools/spawnPentestAgent.d.ts +51 -0
  215. package/build/lib/core/agents/offSecAgent/tools/spawnPentestSwarm.d.ts +52 -0
  216. package/build/lib/core/agents/offSecAgent/tools/submitPlan.d.ts +12 -0
  217. package/build/lib/core/agents/offSecAgent/tools/testEndpointVariations.d.ts +34 -0
  218. package/build/lib/core/agents/offSecAgent/tools/threatModelGenerator.d.ts +32 -0
  219. package/build/lib/core/agents/offSecAgent/tools/toolOutput.d.ts +23 -0
  220. package/build/lib/core/agents/offSecAgent/tools/types.d.ts +215 -0
  221. package/build/lib/core/agents/offSecAgent/tools/updateFile.d.ts +14 -0
  222. package/build/lib/core/agents/offSecAgent/tools/updateTask.d.ts +20 -0
  223. package/build/lib/core/agents/offSecAgent/tools/validateDiscovery.d.ts +24 -0
  224. package/build/lib/core/agents/offSecAgent/tools/webSearch.d.ts +16 -0
  225. package/build/lib/core/agents/offSecAgent/tools/whiteboxCandidates.d.ts +108 -0
  226. package/build/lib/core/agents/offSecAgent/tools/whiteboxJobs.d.ts +157 -0
  227. package/build/lib/core/agents/offSecAgent/tools/windowsCurl.d.ts +20 -0
  228. package/build/lib/core/agents/offSecAgent/tools/workspaceApps.d.ts +120 -0
  229. package/build/lib/core/agents/offSecAgent/tools/workspaceDomains.d.ts +22 -0
  230. package/build/lib/core/agents/offSecAgent/tools/workspaceFailure.d.ts +6 -0
  231. package/build/lib/core/agents/offSecAgent/tools/writePlan.d.ts +13 -0
  232. package/build/lib/core/agents/offSecAgent/trace.d.ts +268 -0
  233. package/build/lib/core/agents/offSecAgent/types.d.ts +543 -0
  234. package/build/lib/core/agents/offSecAgent/types.js +7 -0
  235. package/build/lib/core/agents/specialized/attackSurface/blackboxAgent.d.ts +66 -0
  236. package/build/lib/core/agents/specialized/attackSurface/blackboxAgent.js +33 -0
  237. package/build/lib/core/agents/specialized/attackSurface/blackboxRiskScoring.d.ts +30 -0
  238. package/build/lib/core/agents/specialized/attackSurface/grpcSchema.d.ts +93 -0
  239. package/build/lib/core/agents/specialized/attackSurface/jsExtraction.d.ts +42 -0
  240. package/build/lib/core/agents/specialized/attackSurface/prompts.d.ts +1 -0
  241. package/build/lib/core/agents/specialized/attackSurface/schemas.d.ts +284 -0
  242. package/build/lib/core/agents/specialized/attackSurface/schemas.js +144 -0
  243. package/build/lib/core/agents/specialized/attackSurface/types.d.ts +32 -0
  244. package/build/lib/core/agents/specialized/authenticationAgent/agent.d.ts +73 -0
  245. package/build/lib/core/agents/specialized/authenticationAgent/index.d.ts +4 -0
  246. package/build/lib/core/agents/specialized/authenticationAgent/index.js +71 -0
  247. package/build/lib/core/agents/specialized/authenticationAgent/prompts.d.ts +10 -0
  248. package/build/lib/core/agents/specialized/authenticationAgent/types.d.ts +620 -0
  249. package/build/lib/core/agents/specialized/benchmark/comparisonAgent.d.ts +10 -0
  250. package/build/lib/core/agents/specialized/benchmark/docker-utils.d.ts +17 -0
  251. package/build/lib/core/agents/specialized/benchmark/flag-detector.d.ts +60 -0
  252. package/build/lib/core/agents/specialized/benchmark/index.d.ts +8 -0
  253. package/build/lib/core/agents/specialized/benchmark/prompts.d.ts +1 -0
  254. package/build/lib/core/agents/specialized/benchmark/remote/circuit-breaker.d.ts +22 -0
  255. package/build/lib/core/agents/specialized/benchmark/remote/daytona-wrapper.d.ts +33 -0
  256. package/build/lib/core/agents/specialized/benchmark/remote/index.d.ts +2 -0
  257. package/build/lib/core/agents/specialized/benchmark/types.d.ts +92 -0
  258. package/build/lib/core/agents/specialized/benchmarkComparisonAgent.d.ts +27 -0
  259. package/build/lib/core/agents/specialized/codeAgent/agent.d.ts +50 -0
  260. package/build/lib/core/agents/specialized/codeAgent/agent.js +31 -0
  261. package/build/lib/core/agents/specialized/codeAgent/prompts.d.ts +1 -0
  262. package/build/lib/core/agents/specialized/codeAgent/schemas.d.ts +11 -0
  263. package/build/lib/core/agents/specialized/codeAgent/schemas.js +10 -0
  264. package/build/lib/core/agents/specialized/cvssScorer/index.d.ts +56 -0
  265. package/build/lib/core/agents/specialized/environment/agent.d.ts +43 -0
  266. package/build/lib/core/agents/specialized/environment/index.d.ts +4 -0
  267. package/build/lib/core/agents/specialized/environment/prompts.d.ts +10 -0
  268. package/build/lib/core/agents/specialized/environment/types.d.ts +37 -0
  269. package/build/lib/core/agents/specialized/findingJudge/agent.d.ts +22 -0
  270. package/build/lib/core/agents/specialized/findingJudge/agent.js +224 -0
  271. package/build/lib/core/agents/specialized/findingJudge/index.d.ts +31 -0
  272. package/build/lib/core/agents/specialized/findingJudge/index.js +13 -0
  273. package/build/lib/core/agents/specialized/findingJudge/prompts.d.ts +3 -0
  274. package/build/lib/core/agents/specialized/findingJudge/types.d.ts +77 -0
  275. package/build/lib/core/agents/specialized/googleSignInPrompt.d.ts +4 -0
  276. package/build/lib/core/agents/specialized/mobileOtpPrompt.d.ts +1 -0
  277. package/build/lib/core/agents/specialized/patching/agent.d.ts +64 -0
  278. package/build/lib/core/agents/specialized/patching/index.d.ts +4 -0
  279. package/build/lib/core/agents/specialized/patching/index.js +44 -0
  280. package/build/lib/core/agents/specialized/patching/prompts.d.ts +17 -0
  281. package/build/lib/core/agents/specialized/patching/types.d.ts +40 -0
  282. package/build/lib/core/agents/specialized/pentest/agent.d.ts +172 -0
  283. package/build/lib/core/agents/specialized/pentest/agent.js +43 -0
  284. package/build/lib/core/agents/specialized/pentest/helperWorkspace.d.ts +16 -0
  285. package/build/lib/core/agents/specialized/pentest/planPrompt.d.ts +13 -0
  286. package/build/lib/core/agents/specialized/utils.d.ts +7 -0
  287. package/build/lib/core/agents/specialized/vulnerabilityReproduction/agent.d.ts +94 -0
  288. package/build/lib/core/agents/specialized/whiteboxAttackSurface/agent.d.ts +148 -0
  289. package/build/lib/core/agents/specialized/whiteboxAttackSurface/endpointDocumentationAgent.d.ts +61 -0
  290. package/build/lib/core/agents/specialized/whiteboxAttackSurface/index.d.ts +5 -0
  291. package/build/lib/core/agents/specialized/whiteboxAttackSurface/index.js +47 -0
  292. package/build/lib/core/agents/specialized/whiteboxAttackSurface/prompts.d.ts +34 -0
  293. package/build/lib/core/agents/specialized/whiteboxAttackSurface/types.d.ts +382 -0
  294. package/build/lib/core/agents/specialized/whiteboxAttackSurface/types.js +21 -0
  295. package/build/lib/core/ai/ai.d.ts +332 -0
  296. package/build/lib/core/ai/ai.js +68 -0
  297. package/build/lib/core/ai/caching.d.ts +26 -0
  298. package/build/lib/core/ai/compactionEvidence.d.ts +15 -0
  299. package/build/lib/core/ai/compactionTelemetry.d.ts +55 -0
  300. package/build/lib/core/ai/contextManagement.d.ts +85 -0
  301. package/build/lib/core/ai/index.d.ts +10 -0
  302. package/build/lib/core/ai/index.js +72 -0
  303. package/build/lib/core/ai/inference-attempt/adapters.d.ts +15 -0
  304. package/build/lib/core/ai/inference-attempt/builder.d.ts +31 -0
  305. package/build/lib/core/ai/inference-attempt/envelope.d.ts +120 -0
  306. package/build/lib/core/ai/inference-attempt/errors.d.ts +6 -0
  307. package/build/lib/core/ai/inference-attempt/identity.d.ts +13 -0
  308. package/build/lib/core/ai/inference-attempt/index.d.ts +36 -0
  309. package/build/lib/core/ai/inference-attempt/project.d.ts +21 -0
  310. package/build/lib/core/ai/inference-attempt/recording.d.ts +23 -0
  311. package/build/lib/core/ai/inference-attempt/tokens.d.ts +13 -0
  312. package/build/lib/core/ai/inference-attempt/validate.d.ts +2 -0
  313. package/build/lib/core/ai/mantle.d.ts +28 -0
  314. package/build/lib/core/ai/model-history.d.ts +4 -0
  315. package/build/lib/core/ai/models/anthropic.d.ts +2 -0
  316. package/build/lib/core/ai/models/bedrock.d.ts +2 -0
  317. package/build/lib/core/ai/models/claude-capabilities.d.ts +6 -0
  318. package/build/lib/core/ai/models/concentrate.d.ts +2 -0
  319. package/build/lib/core/ai/models/google.d.ts +2 -0
  320. package/build/lib/core/ai/models/inception.d.ts +2 -0
  321. package/build/lib/core/ai/models/index.d.ts +29 -0
  322. package/build/lib/core/ai/models/mantle.d.ts +2 -0
  323. package/build/lib/core/ai/models/openai.d.ts +2 -0
  324. package/build/lib/core/ai/models/openrouter.d.ts +2 -0
  325. package/build/lib/core/ai/models/pensar.d.ts +2 -0
  326. package/build/lib/core/ai/native-rollout-evidence/capture.d.ts +31 -0
  327. package/build/lib/core/ai/native-rollout-evidence/content.d.ts +14 -0
  328. package/build/lib/core/ai/native-rollout-evidence/index.d.ts +9 -0
  329. package/build/lib/core/ai/native-rollout-evidence/provider-metadata.d.ts +15 -0
  330. package/build/lib/core/ai/native-rollout-evidence/schema.d.ts +554 -0
  331. package/build/lib/core/ai/native-rollout-evidence/validate.d.ts +8 -0
  332. package/build/lib/core/ai/providers/anthropic.d.ts +2 -0
  333. package/build/lib/core/ai/providers/concentrate.d.ts +9 -0
  334. package/build/lib/core/ai/providers/custom.d.ts +3 -0
  335. package/build/lib/core/ai/providers/hoonify.d.ts +6 -0
  336. package/build/lib/core/ai/providers/openai-pro-fetch.d.ts +2 -0
  337. package/build/lib/core/ai/providers/pensar.d.ts +34 -0
  338. package/build/lib/core/ai/providers/pensarFormatters.d.ts +2 -0
  339. package/build/lib/core/ai/providers/pensarResponsesStream.d.ts +15 -0
  340. package/build/lib/core/ai/providers/pensarSSE.d.ts +23 -0
  341. package/build/lib/core/ai/providers/pensarSigning.d.ts +1 -0
  342. package/build/lib/core/ai/providers/pensarStreamUsage.d.ts +19 -0
  343. package/build/lib/core/ai/streamTelemetry.d.ts +22 -0
  344. package/build/lib/core/ai/utils.d.ts +90 -0
  345. package/build/lib/core/ai/utils.js +22 -0
  346. package/build/lib/core/api/apiClient.d.ts +7 -0
  347. package/build/lib/core/api/apps.d.ts +213 -0
  348. package/build/lib/core/api/attackSurface.d.ts +14 -0
  349. package/build/lib/core/api/authentication.d.ts +3 -0
  350. package/build/lib/core/api/benchmark.d.ts +5 -0
  351. package/build/lib/core/api/blackboxPentest.d.ts +11 -0
  352. package/build/lib/core/api/clientIdentity.d.ts +10 -0
  353. package/build/lib/core/api/constants.d.ts +5 -0
  354. package/build/lib/core/api/domains.d.ts +19 -0
  355. package/build/lib/core/api/environment.d.ts +16 -0
  356. package/build/lib/core/api/index.d.ts +41 -0
  357. package/build/lib/core/api/index.js +187 -0
  358. package/build/lib/core/api/issues.d.ts +273 -0
  359. package/build/lib/core/api/knowledge.d.ts +33 -0
  360. package/build/lib/core/api/localWorker.d.ts +4 -0
  361. package/build/lib/core/api/offesecAgent.d.ts +34 -0
  362. package/build/lib/core/api/patching.d.ts +15 -0
  363. package/build/lib/core/api/recordedRun.d.ts +36 -0
  364. package/build/lib/core/api/targetedPentest.d.ts +15 -0
  365. package/build/lib/core/api/targetedPentest.js +32 -0
  366. package/build/lib/core/api/threatModel.d.ts +1 -0
  367. package/build/lib/core/api/trajectoryExport.d.ts +38 -0
  368. package/build/lib/core/api/vulnerabilityReproduction.d.ts +10 -0
  369. package/build/lib/core/assets/wordlists.d.ts +31 -0
  370. package/build/lib/core/atif/convert.d.ts +27 -0
  371. package/build/lib/core/atif/index.d.ts +7 -0
  372. package/build/lib/core/atif/schema.d.ts +459 -0
  373. package/build/lib/core/atif/serialize.d.ts +2 -0
  374. package/build/lib/core/atif/test-fixtures.d.ts +28 -0
  375. package/build/lib/core/atif/validate.d.ts +12 -0
  376. package/build/lib/core/auth/connection.d.ts +12 -0
  377. package/build/lib/core/auth/device-flow.d.ts +38 -0
  378. package/build/lib/core/auth/gateway.d.ts +25 -0
  379. package/build/lib/core/auth/index.d.ts +8 -0
  380. package/build/lib/core/auth/signing.d.ts +14 -0
  381. package/build/lib/core/auth/token.d.ts +17 -0
  382. package/build/lib/core/auth/types.d.ts +85 -0
  383. package/build/lib/core/auth/workspaces.d.ts +34 -0
  384. package/build/lib/core/benchmark/index.d.ts +3 -0
  385. package/build/lib/core/benchmark/report.d.ts +3 -0
  386. package/build/lib/core/benchmark/runner.d.ts +3 -0
  387. package/build/lib/core/benchmark/types.d.ts +80 -0
  388. package/build/lib/core/cli/logLevelArgs.d.ts +18 -0
  389. package/build/lib/core/cli/model.d.ts +9 -0
  390. package/build/lib/core/cli/pentestMode.d.ts +5 -0
  391. package/build/lib/core/cli/tuiArgs.d.ts +5 -0
  392. package/build/lib/core/config/config.d.ts +86 -0
  393. package/build/lib/core/config/customProviders.d.ts +62 -0
  394. package/build/lib/core/config/index.d.ts +6 -0
  395. package/build/lib/core/config/index.js +6 -0
  396. package/build/lib/core/credentials/index.d.ts +2 -0
  397. package/build/lib/core/credentials/manager.d.ts +85 -0
  398. package/build/lib/core/credentials/types.d.ts +79 -0
  399. package/build/lib/core/doctor.d.ts +1 -0
  400. package/build/lib/core/eventBus.d.ts +195 -0
  401. package/build/lib/core/eventBus.js +6 -0
  402. package/build/lib/core/findings/attackSurfaceRegistry.d.ts +88 -0
  403. package/build/lib/core/findings/attackSurfaceRegistry.js +6 -0
  404. package/build/lib/core/findings/registry.d.ts +177 -0
  405. package/build/lib/core/findings/registry.js +21 -0
  406. package/build/lib/core/history.d.ts +23 -0
  407. package/build/lib/core/hoonify.d.ts +8 -0
  408. package/build/lib/core/http/parse.d.ts +50 -0
  409. package/build/lib/core/http/redirects.d.ts +23 -0
  410. package/build/lib/core/http/targetHeaders.d.ts +30 -0
  411. package/build/lib/core/http/targetScope.d.ts +12 -0
  412. package/build/lib/core/http/types.d.ts +11 -0
  413. package/build/lib/core/id/id.d.ts +60 -0
  414. package/build/lib/core/id/id.js +28 -0
  415. package/build/lib/core/installation/index.d.ts +25 -0
  416. package/build/lib/core/integrations/herdr.d.ts +13 -0
  417. package/build/lib/core/integrations/surface/index.d.ts +37 -0
  418. package/build/lib/core/integrations/surface/types.d.ts +22 -0
  419. package/build/lib/core/integrations/wandb/client.d.ts +23 -0
  420. package/build/lib/core/integrations/wandb/upload.d.ts +36 -0
  421. package/build/lib/core/logger/index.d.ts +62 -0
  422. package/build/lib/core/logger/structured.d.ts +30 -0
  423. package/build/lib/core/memory/index.d.ts +92 -0
  424. package/build/lib/core/memory/index.js +21 -0
  425. package/build/lib/core/messages/types.d.ts +96 -0
  426. package/build/lib/core/obfuscation/engine.d.ts +51 -0
  427. package/build/lib/core/obfuscation/index.d.ts +20 -0
  428. package/build/lib/core/observability/active-root-spans.d.ts +5 -0
  429. package/build/lib/core/observability/active-spans.d.ts +22 -0
  430. package/build/lib/core/observability/index.d.ts +36 -0
  431. package/build/lib/core/observability/index.js +27 -0
  432. package/build/lib/core/observability/runtime.d.ts +63 -0
  433. package/build/lib/core/observability/telemetry.d.ts +52 -0
  434. package/build/lib/core/observability/testkit.d.ts +24 -0
  435. package/build/lib/core/operator/approvalGate.d.ts +61 -0
  436. package/build/lib/core/operator/index.d.ts +9 -0
  437. package/build/lib/core/operator/types.d.ts +167 -0
  438. package/build/lib/core/plan/index.d.ts +16 -0
  439. package/build/lib/core/prompt-injections/index.d.ts +111 -0
  440. package/build/lib/core/prompt-injections/index.js +24 -0
  441. package/build/lib/core/providers/index.d.ts +5 -0
  442. package/build/lib/core/providers/types.d.ts +13 -0
  443. package/build/lib/core/providers/utils.d.ts +15 -0
  444. package/build/lib/core/providers/verify.d.ts +11 -0
  445. package/build/lib/core/report/builder.d.ts +9 -0
  446. package/build/lib/core/report/index.d.ts +7 -0
  447. package/build/lib/core/report/renderers/json.d.ts +2 -0
  448. package/build/lib/core/report/renderers/markdown.d.ts +2 -0
  449. package/build/lib/core/report/schemas.d.ts +115 -0
  450. package/build/lib/core/runtime/agentExecution.d.ts +15 -0
  451. package/build/lib/core/runtime/launchLocalWorker.d.ts +33 -0
  452. package/build/lib/core/runtime/localRunLock.d.ts +9 -0
  453. package/build/lib/core/runtime/localRunWorker.d.ts +18 -0
  454. package/build/lib/core/runtime/localWorkerEndpoint.d.ts +14 -0
  455. package/build/lib/core/runtime/localWorkerProtocol.d.ts +294 -0
  456. package/build/lib/core/runtime/localWorkerTransport.d.ts +30 -0
  457. package/build/lib/core/runtime/persistenceError.d.ts +9 -0
  458. package/build/lib/core/runtime/recordedExecution.d.ts +6 -0
  459. package/build/lib/core/runtime/recordedRunClient.d.ts +34 -0
  460. package/build/lib/core/runtime/runCheckpointStore.d.ts +11 -0
  461. package/build/lib/core/runtime/runContext.d.ts +48 -0
  462. package/build/lib/core/runtime/runControl.d.ts +44 -0
  463. package/build/lib/core/runtime/runControlStore.d.ts +83 -0
  464. package/build/lib/core/runtime/runDeadline.d.ts +4 -0
  465. package/build/lib/core/runtime/runEvidence.d.ts +37 -0
  466. package/build/lib/core/runtime/runInference.d.ts +9 -0
  467. package/build/lib/core/runtime/runModelStore.d.ts +27 -0
  468. package/build/lib/core/runtime/runObservation.d.ts +19 -0
  469. package/build/lib/core/runtime/runRecoveryContext.d.ts +20 -0
  470. package/build/lib/core/runtime/runRecoveryPlan.d.ts +38 -0
  471. package/build/lib/core/runtime/runRecoveryStore.d.ts +77 -0
  472. package/build/lib/core/runtime/runStore.d.ts +133 -0
  473. package/build/lib/core/runtime/runStorePath.d.ts +1 -0
  474. package/build/lib/core/runtime/runToolStore.d.ts +50 -0
  475. package/build/lib/core/runtime/runTools.d.ts +16 -0
  476. package/build/lib/core/runtime/sqliteControlStore.d.ts +41 -0
  477. package/build/lib/core/runtime/sqliteModelStore.d.ts +20 -0
  478. package/build/lib/core/runtime/sqliteRecoveryStore.d.ts +35 -0
  479. package/build/lib/core/runtime/sqliteRunStore.d.ts +8 -0
  480. package/build/lib/core/runtime/sqliteToolStore.d.ts +30 -0
  481. package/build/lib/core/runtime/testfixtures/localWorkerChild.d.ts +1 -0
  482. package/build/lib/core/runtime/testfixtures/localWorkerLauncher.d.ts +1 -0
  483. package/build/lib/core/runtime/testfixtures/recoveryChild.d.ts +1 -0
  484. package/build/lib/core/services/rateLimiter/index.d.ts +36 -0
  485. package/build/lib/core/services/rateLimiter/types.d.ts +10 -0
  486. package/build/lib/core/session/execution-metrics.d.ts +37 -0
  487. package/build/lib/core/session/index.d.ts +586 -0
  488. package/build/lib/core/session/index.js +36 -0
  489. package/build/lib/core/session/loader.d.ts +30 -0
  490. package/build/lib/core/session/persistence.d.ts +215 -0
  491. package/build/lib/core/session/persistence.js +35 -0
  492. package/build/lib/core/session/types.d.ts +59 -0
  493. package/build/lib/core/session/usage.d.ts +37 -0
  494. package/build/lib/core/skills/builtins/index.d.ts +13 -0
  495. package/build/lib/core/skills/builtins/pentest.d.ts +19 -0
  496. package/build/lib/core/skills/builtins/promptInjection.d.ts +2 -0
  497. package/build/lib/core/skills/builtins/threatModel.d.ts +11 -0
  498. package/build/lib/core/skills/index.d.ts +5 -0
  499. package/build/lib/core/skills/parser.d.ts +11 -0
  500. package/build/lib/core/skills/registry.d.ts +30 -0
  501. package/build/lib/core/skills/scanner.d.ts +12 -0
  502. package/build/lib/core/skills/types.d.ts +44 -0
  503. package/build/lib/core/skills/utils.d.ts +6 -0
  504. package/build/lib/core/storage/index.d.ts +248 -0
  505. package/build/lib/core/tasks/index.d.ts +78 -0
  506. package/build/lib/core/tools/backends/capture.d.ts +10 -0
  507. package/build/lib/core/tools/backends/collectCommand.d.ts +9 -0
  508. package/build/lib/core/tools/backends/helpers.d.ts +43 -0
  509. package/build/lib/core/tools/backends/httpTransport.d.ts +18 -0
  510. package/build/lib/core/tools/backends/index.d.ts +8 -0
  511. package/build/lib/core/tools/backends/index.js +31 -0
  512. package/build/lib/core/tools/backends/local.d.ts +11 -0
  513. package/build/lib/core/tools/backends/policy.d.ts +39 -0
  514. package/build/lib/core/tools/backends/resolve.d.ts +25 -0
  515. package/build/lib/core/tools/backends/types.d.ts +240 -0
  516. package/build/lib/core/tools/backends/whitebox.d.ts +6 -0
  517. package/build/lib/core/tools/backends/whiteboxJobs.d.ts +18 -0
  518. package/build/lib/core/tools/backends/windowsProgram.d.ts +4 -0
  519. package/build/lib/core/tools/daytonaSandbox.d.ts +14 -0
  520. package/build/lib/core/toolset/index.d.ts +28 -0
  521. package/build/lib/core/util/lazyLogger.d.ts +16 -0
  522. package/build/lib/core/utils/concurrency.d.ts +16 -0
  523. package/build/lib/core/utils/prompt.d.ts +12 -0
  524. package/build/lib/core/whitebox/adapters.d.ts +29 -0
  525. package/build/lib/core/whitebox/artifacts.d.ts +32 -0
  526. package/build/lib/core/whitebox/boundedProcess.d.ts +35 -0
  527. package/build/lib/core/whitebox/candidates.d.ts +29 -0
  528. package/build/lib/core/whitebox/catalog.d.ts +10 -0
  529. package/build/lib/core/whitebox/index.d.ts +9 -0
  530. package/build/lib/core/whitebox/jobKernel.d.ts +33 -0
  531. package/build/lib/core/whitebox/jobSupervisor.d.ts +14 -0
  532. package/build/lib/core/whitebox/jobs.d.ts +17 -0
  533. package/build/lib/core/whitebox/paths.d.ts +22 -0
  534. package/build/lib/core/whitebox/profileTransport.d.ts +10 -0
  535. package/build/lib/core/whitebox/profiles.d.ts +3 -0
  536. package/build/lib/core/whitebox/repoProfile.d.ts +4 -0
  537. package/build/lib/core/whitebox/types.d.ts +108 -0
  538. package/build/lib/core/workflows/fastStrike.d.ts +4 -0
  539. package/build/lib/core/workflows/pentest.d.ts +167 -0
  540. package/build/lib/core/workflows/pentest.js +42 -0
  541. package/build/lib/core/workflows/seams.d.ts +102 -0
  542. package/build/lib/core/workflows/seams.js +37 -0
  543. package/build/lib/core/workflows/threatModel.d.ts +26 -0
  544. package/build/lib/core/workflows/whiteboxAttackSurface.d.ts +142 -0
  545. package/build/lib/core/workflows/whiteboxAttackSurface.js +36 -0
  546. package/build/lib/index.d.ts +26 -0
  547. package/build/lib/index.js +96 -0
  548. package/build/lib/lib/attack-path/types.d.ts +9 -0
  549. package/build/lib/lib/cvss/calculator.d.ts +31 -0
  550. package/build/lib/lib/cvss/index.d.ts +24 -0
  551. package/build/lib/lib/cvss/index.js +24 -0
  552. package/build/lib/lib/cvss/macrovector-scores.d.ts +59 -0
  553. package/build/lib/lib/cvss/types.d.ts +114 -0
  554. package/build/lib/lib/cvss/types.js +8 -0
  555. package/build/lib/lib/cwe/cwe-catalog.d.ts +13 -0
  556. package/build/lib/lib/cwe/types.d.ts +28 -0
  557. package/build/lib/lib/cwe/validate.d.ts +15 -0
  558. package/build/lib/lib/evidence/types.d.ts +12 -0
  559. package/build/lib/util/errors.d.ts +186 -0
  560. package/build/lib/util/lock.d.ts +2 -0
  561. package/build/lib/util/name.d.ts +14 -0
  562. package/build/lib/util/url.d.ts +40 -0
  563. package/build/{logs-wzr5176k.js → logs-1r7nkzhg.js} +22 -30
  564. package/build/{multipart-parser-g2xxkezz.js → multipart-parser-vjjdbpd1.js} +10 -10
  565. package/build/native-rollout-evidence-y0vdtjje.js +135 -0
  566. package/build/offesecAgent-dfj42jkj.js +22 -0
  567. package/build/{parse-rtccymzn.js → parse-cqecqrc5.js} +0 -4
  568. package/build/pentest-n8k0dd5q.js +22 -0
  569. package/build/pentests-jh9az51h.js +143 -0
  570. package/build/recordedRunClient-mvendk9n.js +11 -0
  571. package/build/{targetedPentest-tdwtgmxm.js → targetedPentest-rgffxsgd.js} +22 -22
  572. package/build/{targets-763n91t7.js → targets-wn0gmdhe.js} +24 -32
  573. package/build/threatModel-6efzjpbv.js +21 -0
  574. package/build/{token-3bbp59y6.js → token-mk7t8y0y.js} +2 -2
  575. package/build/{token-util-6xjme11b.js → token-util-vd776hrv.js} +1 -2
  576. package/build/{uninstall-d33159cz.js → uninstall-cmv057jn.js} +3 -3
  577. package/build/{upload-9qj1kpt9.js → upload-vkkj6h54.js} +8 -14
  578. package/build/{utils-t7gc2903.js → utils-b1kae4f3.js} +29 -29
  579. package/package.json +230 -5
  580. package/src/cli/agent-runs.attach.test.ts +359 -0
  581. package/src/cli/agent-runs.test.ts +1172 -0
  582. package/src/cli/agent-runs.ts +430 -0
  583. package/src/cli/apps.test.ts +63 -0
  584. package/src/cli/apps.ts +526 -0
  585. package/src/cli/auth.ts +375 -0
  586. package/src/cli/command-exit.test.ts +15 -0
  587. package/src/cli/command-exit.ts +3 -0
  588. package/src/cli/config.ts +210 -0
  589. package/src/cli/export-trajectory.test.ts +224 -0
  590. package/src/cli/export-trajectory.ts +119 -0
  591. package/src/cli/fixes.ts +56 -0
  592. package/src/cli/issues.test.ts +214 -0
  593. package/src/cli/issues.ts +242 -0
  594. package/src/cli/json-output.test.ts +62 -0
  595. package/src/cli/knowledge.test.ts +140 -0
  596. package/src/cli/knowledge.ts +146 -0
  597. package/src/cli/launcher.test.ts +81 -0
  598. package/src/cli/logs.ts +111 -0
  599. package/src/cli/native-rollout-evidence.test.ts +322 -0
  600. package/src/cli/native-rollout-evidence.ts +206 -0
  601. package/src/cli/pentests.test.ts +194 -0
  602. package/src/cli/pentests.ts +159 -0
  603. package/src/cli/resume.test.ts +107 -0
  604. package/src/cli/targets.ts +125 -0
  605. package/src/cli/uninstall.ts +302 -0
  606. package/src/cli.ts +882 -0
  607. package/src/core/agents/agentRuntime.test.ts +242 -0
  608. package/src/core/agents/agentRuntime.ts +120 -0
  609. package/src/core/agents/defineAgent.ts +134 -0
  610. package/src/core/agents/offSecAgent/index.ts +162 -0
  611. package/src/core/agents/offSecAgent/interruptedStepFinalization.test.ts +295 -0
  612. package/src/core/agents/offSecAgent/interruptedStepFinalization.ts +162 -0
  613. package/src/core/agents/offSecAgent/interruptedStepMessages.test.ts +296 -0
  614. package/src/core/agents/offSecAgent/interruptedStepMessages.ts +137 -0
  615. package/src/core/agents/offSecAgent/messagePersistence.test.ts +281 -0
  616. package/src/core/agents/offSecAgent/messagePersistence.ts +111 -0
  617. package/src/core/agents/offSecAgent/offensiveSecurityAgent.runtimeContext.test.ts +689 -0
  618. package/src/core/agents/offSecAgent/offensiveSecurityAgent.test.ts +2899 -0
  619. package/src/core/agents/offSecAgent/offensiveSecurityAgent.ts +1610 -0
  620. package/src/core/agents/offSecAgent/prompt.test.ts +72 -0
  621. package/src/core/agents/offSecAgent/prompt.ts +368 -0
  622. package/src/core/agents/offSecAgent/recordedTools.test.ts +580 -0
  623. package/src/core/agents/offSecAgent/recordedTools.ts +162 -0
  624. package/src/core/agents/offSecAgent/runtimeContext.test.ts +531 -0
  625. package/src/core/agents/offSecAgent/runtimeContext.ts +387 -0
  626. package/src/core/agents/offSecAgent/selectiveConstruction.publicPath.test.ts +295 -0
  627. package/src/core/agents/offSecAgent/selectiveConstruction.test.ts +498 -0
  628. package/src/core/agents/offSecAgent/streamDiagnostics.test.ts +310 -0
  629. package/src/core/agents/offSecAgent/streamDiagnostics.ts +237 -0
  630. package/src/core/agents/offSecAgent/subagentSpawner.hooks.test.ts +102 -0
  631. package/src/core/agents/offSecAgent/subagentSpawner.test.ts +384 -0
  632. package/src/core/agents/offSecAgent/subagentSpawner.ts +664 -0
  633. package/src/core/agents/offSecAgent/toolLifecycle.test.ts +199 -0
  634. package/src/core/agents/offSecAgent/toolLifecycle.ts +171 -0
  635. package/src/core/agents/offSecAgent/tools/__tests__/sandboxScript.ts +14 -0
  636. package/src/core/agents/offSecAgent/tools/addMemory.ts +87 -0
  637. package/src/core/agents/offSecAgent/tools/agentScratch.test.ts +36 -0
  638. package/src/core/agents/offSecAgent/tools/agentScratch.ts +23 -0
  639. package/src/core/agents/offSecAgent/tools/applyPatch.test.ts +546 -0
  640. package/src/core/agents/offSecAgent/tools/applyPatch.ts +58 -0
  641. package/src/core/agents/offSecAgent/tools/applyPatchImpl.ts +300 -0
  642. package/src/core/agents/offSecAgent/tools/askUserQuestions.ts +81 -0
  643. package/src/core/agents/offSecAgent/tools/authBackendStatus.test.ts +112 -0
  644. package/src/core/agents/offSecAgent/tools/browserHeaderRouting.test.ts +136 -0
  645. package/src/core/agents/offSecAgent/tools/browserHeaderRouting.ts +81 -0
  646. package/src/core/agents/offSecAgent/tools/browserToolFactories.ts +372 -0
  647. package/src/core/agents/offSecAgent/tools/browserTools.test.ts +243 -0
  648. package/src/core/agents/offSecAgent/tools/browserTools.ts +285 -0
  649. package/src/core/agents/offSecAgent/tools/callbackListener.test.ts +1011 -0
  650. package/src/core/agents/offSecAgent/tools/callbackListener.ts +1038 -0
  651. package/src/core/agents/offSecAgent/tools/camoufox.test.ts +119 -0
  652. package/src/core/agents/offSecAgent/tools/camoufox.ts +199 -0
  653. package/src/core/agents/offSecAgent/tools/checkpointState.ts +79 -0
  654. package/src/core/agents/offSecAgent/tools/codingTools.windows.test.ts +625 -0
  655. package/src/core/agents/offSecAgent/tools/completeAuthentication.ts +136 -0
  656. package/src/core/agents/offSecAgent/tools/crawlAuthenticated.test.ts +267 -0
  657. package/src/core/agents/offSecAgent/tools/crawlAuthenticated.ts +170 -0
  658. package/src/core/agents/offSecAgent/tools/createAttackSurfaceReport.ts +75 -0
  659. package/src/core/agents/offSecAgent/tools/createFile.test.ts +111 -0
  660. package/src/core/agents/offSecAgent/tools/createFile.ts +44 -0
  661. package/src/core/agents/offSecAgent/tools/createTask.ts +118 -0
  662. package/src/core/agents/offSecAgent/tools/delegateAuth.ts +391 -0
  663. package/src/core/agents/offSecAgent/tools/deleteFile.test.ts +102 -0
  664. package/src/core/agents/offSecAgent/tools/deleteFile.ts +39 -0
  665. package/src/core/agents/offSecAgent/tools/destructiveGuard.test.ts +827 -0
  666. package/src/core/agents/offSecAgent/tools/destructiveGuard.ts +747 -0
  667. package/src/core/agents/offSecAgent/tools/detectAuthScheme.ts +191 -0
  668. package/src/core/agents/offSecAgent/tools/documentApp.ts +242 -0
  669. package/src/core/agents/offSecAgent/tools/documentEndpoint.ts +291 -0
  670. package/src/core/agents/offSecAgent/tools/documentFinding.test.ts +2091 -0
  671. package/src/core/agents/offSecAgent/tools/documentFinding.ts +1240 -0
  672. package/src/core/agents/offSecAgent/tools/email/adapters.test.ts +279 -0
  673. package/src/core/agents/offSecAgent/tools/email/adapters.ts +1121 -0
  674. package/src/core/agents/offSecAgent/tools/email/getAttachments.ts +73 -0
  675. package/src/core/agents/offSecAgent/tools/email/getMessage.ts +56 -0
  676. package/src/core/agents/offSecAgent/tools/email/inboxBackend.test.ts +137 -0
  677. package/src/core/agents/offSecAgent/tools/email/index.ts +55 -0
  678. package/src/core/agents/offSecAgent/tools/email/listInboxes.ts +47 -0
  679. package/src/core/agents/offSecAgent/tools/email/listMessages.ts +67 -0
  680. package/src/core/agents/offSecAgent/tools/email/markRead.ts +57 -0
  681. package/src/core/agents/offSecAgent/tools/email/searchMessages.ts +76 -0
  682. package/src/core/agents/offSecAgent/tools/email/sendEmail.ts +165 -0
  683. package/src/core/agents/offSecAgent/tools/email/types.ts +45 -0
  684. package/src/core/agents/offSecAgent/tools/executeCommand.backends.test.ts +171 -0
  685. package/src/core/agents/offSecAgent/tools/executeCommand.test.ts +1153 -0
  686. package/src/core/agents/offSecAgent/tools/executeCommand.ts +604 -0
  687. package/src/core/agents/offSecAgent/tools/extractJsEndpoints.ts +44 -0
  688. package/src/core/agents/offSecAgent/tools/fileBackends.test.ts +66 -0
  689. package/src/core/agents/offSecAgent/tools/fileMutations.test.ts +159 -0
  690. package/src/core/agents/offSecAgent/tools/fileToolBackendPurity.test.ts +72 -0
  691. package/src/core/agents/offSecAgent/tools/fileWorkspace.test.ts +357 -0
  692. package/src/core/agents/offSecAgent/tools/fileWorkspace.ts +434 -0
  693. package/src/core/agents/offSecAgent/tools/fileWorkspaceRemote.ts +263 -0
  694. package/src/core/agents/offSecAgent/tools/getMemory.ts +69 -0
  695. package/src/core/agents/offSecAgent/tools/getPage.test.ts +1127 -0
  696. package/src/core/agents/offSecAgent/tools/getPage.ts +70 -0
  697. package/src/core/agents/offSecAgent/tools/gitDiff.ts +67 -0
  698. package/src/core/agents/offSecAgent/tools/gitStatus.ts +61 -0
  699. package/src/core/agents/offSecAgent/tools/gitTools.test.ts +237 -0
  700. package/src/core/agents/offSecAgent/tools/glob.test.ts +695 -0
  701. package/src/core/agents/offSecAgent/tools/glob.ts +51 -0
  702. package/src/core/agents/offSecAgent/tools/globImpl.ts +313 -0
  703. package/src/core/agents/offSecAgent/tools/globPattern.ts +203 -0
  704. package/src/core/agents/offSecAgent/tools/grep.test.ts +922 -0
  705. package/src/core/agents/offSecAgent/tools/grep.ts +73 -0
  706. package/src/core/agents/offSecAgent/tools/grepImpl.ts +718 -0
  707. package/src/core/agents/offSecAgent/tools/httpBackends.test.ts +534 -0
  708. package/src/core/agents/offSecAgent/tools/httpRequest.test.ts +2409 -0
  709. package/src/core/agents/offSecAgent/tools/httpRequest.ts +425 -0
  710. package/src/core/agents/offSecAgent/tools/index.ts +787 -0
  711. package/src/core/agents/offSecAgent/tools/listFiles.bounded.test.ts +514 -0
  712. package/src/core/agents/offSecAgent/tools/listFiles.public-counters.test.ts +163 -0
  713. package/src/core/agents/offSecAgent/tools/listFiles.test.ts +521 -0
  714. package/src/core/agents/offSecAgent/tools/listFiles.ts +49 -0
  715. package/src/core/agents/offSecAgent/tools/listFilesImpl.ts +351 -0
  716. package/src/core/agents/offSecAgent/tools/listMemories.ts +71 -0
  717. package/src/core/agents/offSecAgent/tools/listPromptInjections.test.ts +201 -0
  718. package/src/core/agents/offSecAgent/tools/listPromptInjections.ts +78 -0
  719. package/src/core/agents/offSecAgent/tools/listTasks.ts +100 -0
  720. package/src/core/agents/offSecAgent/tools/patchApply.test.ts +573 -0
  721. package/src/core/agents/offSecAgent/tools/patchApply.ts +430 -0
  722. package/src/core/agents/offSecAgent/tools/patchParse.test.ts +383 -0
  723. package/src/core/agents/offSecAgent/tools/patchParse.ts +354 -0
  724. package/src/core/agents/offSecAgent/tools/perCommandShell.drain.test.ts +109 -0
  725. package/src/core/agents/offSecAgent/tools/perCommandShell.test.ts +565 -0
  726. package/src/core/agents/offSecAgent/tools/perCommandShell.ts +516 -0
  727. package/src/core/agents/offSecAgent/tools/perCommandShell.windows.test.ts +142 -0
  728. package/src/core/agents/offSecAgent/tools/playwrightMcp.test.ts +778 -0
  729. package/src/core/agents/offSecAgent/tools/playwrightMcp.ts +1426 -0
  730. package/src/core/agents/offSecAgent/tools/probeAuthEndpoints.ts +262 -0
  731. package/src/core/agents/offSecAgent/tools/profileCodebase.ts +110 -0
  732. package/src/core/agents/offSecAgent/tools/provideComparisonResults.ts +106 -0
  733. package/src/core/agents/offSecAgent/tools/queryWhiteboxCatalog.coalescing-cost.test.ts +108 -0
  734. package/src/core/agents/offSecAgent/tools/queryWhiteboxCatalog.test.ts +183 -0
  735. package/src/core/agents/offSecAgent/tools/queryWhiteboxCatalog.ts +143 -0
  736. package/src/core/agents/offSecAgent/tools/readFile.test.ts +1242 -0
  737. package/src/core/agents/offSecAgent/tools/readFile.ts +89 -0
  738. package/src/core/agents/offSecAgent/tools/readFileImpl.ts +956 -0
  739. package/src/core/agents/offSecAgent/tools/readSkill.ts +38 -0
  740. package/src/core/agents/offSecAgent/tools/reportError.test.ts +48 -0
  741. package/src/core/agents/offSecAgent/tools/reportError.ts +65 -0
  742. package/src/core/agents/offSecAgent/tools/response.ts +27 -0
  743. package/src/core/agents/offSecAgent/tools/runAttackSurface.ts +198 -0
  744. package/src/core/agents/offSecAgent/tools/runCodeQuery.test.ts +82 -0
  745. package/src/core/agents/offSecAgent/tools/runCodeQuery.ts +237 -0
  746. package/src/core/agents/offSecAgent/tools/runPentestWorkflow.ts +122 -0
  747. package/src/core/agents/offSecAgent/tools/runWhiteboxScan.ts +189 -0
  748. package/src/core/agents/offSecAgent/tools/runtimeBackendConsumers.test.ts +143 -0
  749. package/src/core/agents/offSecAgent/tools/sandbox.ts +37 -0
  750. package/src/core/agents/offSecAgent/tools/sandboxPlaywright.test.ts +235 -0
  751. package/src/core/agents/offSecAgent/tools/sandboxPlaywright.ts +1029 -0
  752. package/src/core/agents/offSecAgent/tools/sandboxScript.test.ts +31 -0
  753. package/src/core/agents/offSecAgent/tools/sandboxScript.ts +60 -0
  754. package/src/core/agents/offSecAgent/tools/scopeGuard.test.ts +574 -0
  755. package/src/core/agents/offSecAgent/tools/scopeGuard.ts +317 -0
  756. package/src/core/agents/offSecAgent/tools/scriptSyntaxCheck.test.ts +566 -0
  757. package/src/core/agents/offSecAgent/tools/scriptSyntaxCheck.ts +240 -0
  758. package/src/core/agents/offSecAgent/tools/selectiveFactories.test.ts +476 -0
  759. package/src/core/agents/offSecAgent/tools/smsInbox.ts +130 -0
  760. package/src/core/agents/offSecAgent/tools/smsListMessages.test.ts +443 -0
  761. package/src/core/agents/offSecAgent/tools/smsListMessages.ts +123 -0
  762. package/src/core/agents/offSecAgent/tools/spawnCodingAgent.ts +229 -0
  763. package/src/core/agents/offSecAgent/tools/spawnPentestAgent.test.ts +413 -0
  764. package/src/core/agents/offSecAgent/tools/spawnPentestAgent.ts +266 -0
  765. package/src/core/agents/offSecAgent/tools/spawnPentestSwarm.ts +146 -0
  766. package/src/core/agents/offSecAgent/tools/submitPlan.ts +51 -0
  767. package/src/core/agents/offSecAgent/tools/testEndpointVariations.ts +127 -0
  768. package/src/core/agents/offSecAgent/tools/threatModelGenerator.ts +664 -0
  769. package/src/core/agents/offSecAgent/tools/toolOutput.test.ts +480 -0
  770. package/src/core/agents/offSecAgent/tools/toolOutput.ts +160 -0
  771. package/src/core/agents/offSecAgent/tools/types.ts +267 -0
  772. package/src/core/agents/offSecAgent/tools/updateFile.ts +121 -0
  773. package/src/core/agents/offSecAgent/tools/updateTask.ts +107 -0
  774. package/src/core/agents/offSecAgent/tools/validateDiscovery.ts +123 -0
  775. package/src/core/agents/offSecAgent/tools/webSearch.ts +265 -0
  776. package/src/core/agents/offSecAgent/tools/whiteboxCandidates.ts +197 -0
  777. package/src/core/agents/offSecAgent/tools/whiteboxJobs.ts +312 -0
  778. package/src/core/agents/offSecAgent/tools/windowsCurl.test.ts +801 -0
  779. package/src/core/agents/offSecAgent/tools/windowsCurl.ts +202 -0
  780. package/src/core/agents/offSecAgent/tools/workspaceApps.test.ts +257 -0
  781. package/src/core/agents/offSecAgent/tools/workspaceApps.ts +334 -0
  782. package/src/core/agents/offSecAgent/tools/workspaceDomains.test.ts +113 -0
  783. package/src/core/agents/offSecAgent/tools/workspaceDomains.ts +57 -0
  784. package/src/core/agents/offSecAgent/tools/workspaceFailure.ts +11 -0
  785. package/src/core/agents/offSecAgent/tools/writePlan.ts +65 -0
  786. package/src/core/agents/offSecAgent/trace.test.ts +796 -0
  787. package/src/core/agents/offSecAgent/trace.ts +633 -0
  788. package/src/core/agents/offSecAgent/types.test.ts +224 -0
  789. package/src/core/agents/offSecAgent/types.ts +676 -0
  790. package/src/core/agents/specialized/attackSurface/blackboxAgent.test.ts +31 -0
  791. package/src/core/agents/specialized/attackSurface/blackboxAgent.ts +272 -0
  792. package/src/core/agents/specialized/attackSurface/blackboxRiskScoring.ts +276 -0
  793. package/src/core/agents/specialized/attackSurface/grpcSchema.ts +142 -0
  794. package/src/core/agents/specialized/attackSurface/jsExtraction.test.ts +237 -0
  795. package/src/core/agents/specialized/attackSurface/jsExtraction.ts +174 -0
  796. package/src/core/agents/specialized/attackSurface/prompts.ts +349 -0
  797. package/src/core/agents/specialized/attackSurface/schemas.ts +300 -0
  798. package/src/core/agents/specialized/attackSurface/types.ts +100 -0
  799. package/src/core/agents/specialized/authenticationAgent/agent.test.ts +111 -0
  800. package/src/core/agents/specialized/authenticationAgent/agent.ts +300 -0
  801. package/src/core/agents/specialized/authenticationAgent/index.ts +74 -0
  802. package/src/core/agents/specialized/authenticationAgent/prompts.test.ts +36 -0
  803. package/src/core/agents/specialized/authenticationAgent/prompts.ts +645 -0
  804. package/src/core/agents/specialized/authenticationAgent/types.ts +833 -0
  805. package/src/core/agents/specialized/benchmark/comparisonAgent.ts +344 -0
  806. package/src/core/agents/specialized/benchmark/docker-utils.ts +257 -0
  807. package/src/core/agents/specialized/benchmark/flag-detector.ts +686 -0
  808. package/src/core/agents/specialized/benchmark/index.ts +28 -0
  809. package/src/core/agents/specialized/benchmark/prompts.ts +257 -0
  810. package/src/core/agents/specialized/benchmark/remote/circuit-breaker.ts +108 -0
  811. package/src/core/agents/specialized/benchmark/remote/daytona-wrapper.ts +1005 -0
  812. package/src/core/agents/specialized/benchmark/remote/index.ts +2 -0
  813. package/src/core/agents/specialized/benchmark/types.ts +98 -0
  814. package/src/core/agents/specialized/benchmarkComparisonAgent.test.ts +111 -0
  815. package/src/core/agents/specialized/benchmarkComparisonAgent.ts +203 -0
  816. package/src/core/agents/specialized/codeAgent/agent.test.ts +89 -0
  817. package/src/core/agents/specialized/codeAgent/agent.ts +134 -0
  818. package/src/core/agents/specialized/codeAgent/prompts.ts +48 -0
  819. package/src/core/agents/specialized/codeAgent/schemas.ts +33 -0
  820. package/src/core/agents/specialized/cvssScorer/index.test.ts +87 -0
  821. package/src/core/agents/specialized/cvssScorer/index.ts +546 -0
  822. package/src/core/agents/specialized/environment/agent.ts +75 -0
  823. package/src/core/agents/specialized/environment/index.ts +16 -0
  824. package/src/core/agents/specialized/environment/prompts.ts +194 -0
  825. package/src/core/agents/specialized/environment/types.ts +48 -0
  826. package/src/core/agents/specialized/findingJudge/agent.test.ts +114 -0
  827. package/src/core/agents/specialized/findingJudge/agent.ts +59 -0
  828. package/src/core/agents/specialized/findingJudge/index.test.ts +155 -0
  829. package/src/core/agents/specialized/findingJudge/index.ts +166 -0
  830. package/src/core/agents/specialized/findingJudge/prompts.ts +140 -0
  831. package/src/core/agents/specialized/findingJudge/types.ts +115 -0
  832. package/src/core/agents/specialized/googleSignInPrompt.test.ts +29 -0
  833. package/src/core/agents/specialized/googleSignInPrompt.ts +18 -0
  834. package/src/core/agents/specialized/mobileOtpPrompt.ts +9 -0
  835. package/src/core/agents/specialized/patching/agent.test.ts +220 -0
  836. package/src/core/agents/specialized/patching/agent.ts +146 -0
  837. package/src/core/agents/specialized/patching/index.ts +20 -0
  838. package/src/core/agents/specialized/patching/prompts.test.ts +172 -0
  839. package/src/core/agents/specialized/patching/prompts.ts +396 -0
  840. package/src/core/agents/specialized/patching/types.ts +49 -0
  841. package/src/core/agents/specialized/pentest/agent.test.ts +1046 -0
  842. package/src/core/agents/specialized/pentest/agent.ts +1482 -0
  843. package/src/core/agents/specialized/pentest/helperLifecycle.test.ts +425 -0
  844. package/src/core/agents/specialized/pentest/helperWorkspace.test.ts +84 -0
  845. package/src/core/agents/specialized/pentest/helperWorkspace.ts +33 -0
  846. package/src/core/agents/specialized/pentest/planPrompt.ts +68 -0
  847. package/src/core/agents/specialized/pentest/results.test.ts +198 -0
  848. package/src/core/agents/specialized/utils.test.ts +16 -0
  849. package/src/core/agents/specialized/utils.ts +28 -0
  850. package/src/core/agents/specialized/vulnerabilityReproduction/agent.test.ts +195 -0
  851. package/src/core/agents/specialized/vulnerabilityReproduction/agent.ts +159 -0
  852. package/src/core/agents/specialized/whiteboxAttackSurface/agent.test.ts +39 -0
  853. package/src/core/agents/specialized/whiteboxAttackSurface/agent.ts +227 -0
  854. package/src/core/agents/specialized/whiteboxAttackSurface/endpointDocumentationAgent.concurrency.test.ts +138 -0
  855. package/src/core/agents/specialized/whiteboxAttackSurface/endpointDocumentationAgent.test.ts +199 -0
  856. package/src/core/agents/specialized/whiteboxAttackSurface/endpointDocumentationAgent.ts +330 -0
  857. package/src/core/agents/specialized/whiteboxAttackSurface/index.ts +24 -0
  858. package/src/core/agents/specialized/whiteboxAttackSurface/prompts.ts +345 -0
  859. package/src/core/agents/specialized/whiteboxAttackSurface/types.test.ts +67 -0
  860. package/src/core/agents/specialized/whiteboxAttackSurface/types.ts +234 -0
  861. package/src/core/ai/ai.contract.test.ts +43 -0
  862. package/src/core/ai/ai.durability-hooks.test.ts +527 -0
  863. package/src/core/ai/ai.effective-tools.test.ts +739 -0
  864. package/src/core/ai/ai.native-rollout-evidence.test.ts +373 -0
  865. package/src/core/ai/ai.outer-catch-recovery.test.ts +82 -0
  866. package/src/core/ai/ai.proactive-recovery.test.ts +69 -0
  867. package/src/core/ai/ai.recorded-attempts.test.ts +621 -0
  868. package/src/core/ai/ai.recorded-context.test.ts +448 -0
  869. package/src/core/ai/ai.recorded-tools.test.ts +850 -0
  870. package/src/core/ai/ai.request-retention.test.ts +296 -0
  871. package/src/core/ai/ai.test.ts +636 -0
  872. package/src/core/ai/ai.ts +2349 -0
  873. package/src/core/ai/caching.test.ts +179 -0
  874. package/src/core/ai/caching.ts +119 -0
  875. package/src/core/ai/compactionEvidence.test.ts +52 -0
  876. package/src/core/ai/compactionEvidence.ts +101 -0
  877. package/src/core/ai/compactionTelemetry.test.ts +621 -0
  878. package/src/core/ai/compactionTelemetry.ts +287 -0
  879. package/src/core/ai/concentrate.test.ts +28 -0
  880. package/src/core/ai/contextManagement.test.ts +350 -0
  881. package/src/core/ai/contextManagement.ts +594 -0
  882. package/src/core/ai/index.ts +73 -0
  883. package/src/core/ai/inference-attempt/adapters.test.ts +84 -0
  884. package/src/core/ai/inference-attempt/adapters.ts +391 -0
  885. package/src/core/ai/inference-attempt/attempt.test.ts +198 -0
  886. package/src/core/ai/inference-attempt/builder.ts +171 -0
  887. package/src/core/ai/inference-attempt/envelope.ts +120 -0
  888. package/src/core/ai/inference-attempt/errors.ts +15 -0
  889. package/src/core/ai/inference-attempt/fixtures/anthropic-messages-cache-create.json +18 -0
  890. package/src/core/ai/inference-attempt/fixtures/anthropic-messages-cache-read.json +18 -0
  891. package/src/core/ai/inference-attempt/fixtures/anthropic-messages-incomplete.json +16 -0
  892. package/src/core/ai/inference-attempt/fixtures/anthropic-messages-mixed.json +22 -0
  893. package/src/core/ai/inference-attempt/fixtures/anthropic-messages-non-cache.json +26 -0
  894. package/src/core/ai/inference-attempt/fixtures/bedrock-converse-cache-create.json +18 -0
  895. package/src/core/ai/inference-attempt/fixtures/bedrock-converse-cache-read.json +26 -0
  896. package/src/core/ai/inference-attempt/fixtures/bedrock-converse-incomplete.json +19 -0
  897. package/src/core/ai/inference-attempt/fixtures/bedrock-converse-mixed.json +20 -0
  898. package/src/core/ai/inference-attempt/fixtures/bedrock-converse-non-cache.json +24 -0
  899. package/src/core/ai/inference-attempt/fixtures/openai-responses-cache-read.json +17 -0
  900. package/src/core/ai/inference-attempt/fixtures/openai-responses-incomplete.json +16 -0
  901. package/src/core/ai/inference-attempt/fixtures/openai-responses-non-cache.json +23 -0
  902. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-rest-incomplete.json +21 -0
  903. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-rest-native.json +16 -0
  904. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-stream-cache-create.json +20 -0
  905. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-stream-cache-read.json +20 -0
  906. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-stream-incomplete.json +16 -0
  907. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-stream-mixed.json +21 -0
  908. package/src/core/ai/inference-attempt/fixtures/pensar-anthropic-stream-non-cache.json +19 -0
  909. package/src/core/ai/inference-attempt/fixtures/reject-cache-read-exceeds-inclusive.json +11 -0
  910. package/src/core/ai/inference-attempt/fixtures/reject-components-exceed-inclusive.json +12 -0
  911. package/src/core/ai/inference-attempt/fixtures/reject-identity-mismatch.json +13 -0
  912. package/src/core/ai/inference-attempt/fixtures/reject-negative-token.json +9 -0
  913. package/src/core/ai/inference-attempt/fixtures/reject-non-integer-token.json +8 -0
  914. package/src/core/ai/inference-attempt/fixtures/sdk-normalized-cache-read.json +19 -0
  915. package/src/core/ai/inference-attempt/fixtures/sdk-normalized-incomplete.json +15 -0
  916. package/src/core/ai/inference-attempt/fixtures/sdk-normalized-mixed.json +20 -0
  917. package/src/core/ai/inference-attempt/fixtures/sdk-normalized-non-cache.json +16 -0
  918. package/src/core/ai/inference-attempt/identity.ts +25 -0
  919. package/src/core/ai/inference-attempt/index.ts +70 -0
  920. package/src/core/ai/inference-attempt/project.test.ts +118 -0
  921. package/src/core/ai/inference-attempt/project.ts +60 -0
  922. package/src/core/ai/inference-attempt/recording.ts +46 -0
  923. package/src/core/ai/inference-attempt/tokens.ts +165 -0
  924. package/src/core/ai/inference-attempt/validate.ts +20 -0
  925. package/src/core/ai/mantle.test.ts +50 -0
  926. package/src/core/ai/mantle.ts +45 -0
  927. package/src/core/ai/model-history.test.ts +53 -0
  928. package/src/core/ai/model-history.ts +38 -0
  929. package/src/core/ai/models/anthropic.ts +145 -0
  930. package/src/core/ai/models/bedrock.ts +600 -0
  931. package/src/core/ai/models/claude-capabilities.ts +22 -0
  932. package/src/core/ai/models/concentrate.ts +192 -0
  933. package/src/core/ai/models/google.ts +154 -0
  934. package/src/core/ai/models/inception.ts +10 -0
  935. package/src/core/ai/models/index.ts +250 -0
  936. package/src/core/ai/models/mantle.ts +14 -0
  937. package/src/core/ai/models/models.test.ts +290 -0
  938. package/src/core/ai/models/openai.ts +409 -0
  939. package/src/core/ai/models/openrouter.ts +336 -0
  940. package/src/core/ai/models/pensar.ts +66 -0
  941. package/src/core/ai/native-rollout-evidence/capture.test.ts +1836 -0
  942. package/src/core/ai/native-rollout-evidence/capture.ts +1572 -0
  943. package/src/core/ai/native-rollout-evidence/content.test.ts +55 -0
  944. package/src/core/ai/native-rollout-evidence/content.ts +129 -0
  945. package/src/core/ai/native-rollout-evidence/index.ts +68 -0
  946. package/src/core/ai/native-rollout-evidence/provider-metadata.test.ts +85 -0
  947. package/src/core/ai/native-rollout-evidence/provider-metadata.ts +129 -0
  948. package/src/core/ai/native-rollout-evidence/recording.test.ts +398 -0
  949. package/src/core/ai/native-rollout-evidence/schema.test.ts +210 -0
  950. package/src/core/ai/native-rollout-evidence/schema.ts +353 -0
  951. package/src/core/ai/native-rollout-evidence/validate.ts +141 -0
  952. package/src/core/ai/providers/anthropic-models.test.ts +289 -0
  953. package/src/core/ai/providers/anthropic.ts +73 -0
  954. package/src/core/ai/providers/concentrate.live.test.ts +71 -0
  955. package/src/core/ai/providers/concentrate.test.ts +160 -0
  956. package/src/core/ai/providers/concentrate.ts +145 -0
  957. package/src/core/ai/providers/custom.live.test.ts +42 -0
  958. package/src/core/ai/providers/custom.test.ts +474 -0
  959. package/src/core/ai/providers/custom.ts +70 -0
  960. package/src/core/ai/providers/gateway-models.test.ts +638 -0
  961. package/src/core/ai/providers/hoonify.live.test.ts +72 -0
  962. package/src/core/ai/providers/hoonify.test.ts +284 -0
  963. package/src/core/ai/providers/hoonify.ts +32 -0
  964. package/src/core/ai/providers/openai-models.test.ts +356 -0
  965. package/src/core/ai/providers/openai-pro-fetch.test.ts +64 -0
  966. package/src/core/ai/providers/openai-pro-fetch.ts +32 -0
  967. package/src/core/ai/providers/pensar.ts +645 -0
  968. package/src/core/ai/providers/pensarFormatters.test.ts +272 -0
  969. package/src/core/ai/providers/pensarFormatters.ts +533 -0
  970. package/src/core/ai/providers/pensarResponsesStream.test.ts +191 -0
  971. package/src/core/ai/providers/pensarResponsesStream.ts +294 -0
  972. package/src/core/ai/providers/pensarSSE.test.ts +83 -0
  973. package/src/core/ai/providers/pensarSSE.ts +128 -0
  974. package/src/core/ai/providers/pensarSigning.ts +2 -0
  975. package/src/core/ai/providers/pensarStreamUsage.test.ts +79 -0
  976. package/src/core/ai/providers/pensarStreamUsage.ts +62 -0
  977. package/src/core/ai/stepContext.test.ts +61 -0
  978. package/src/core/ai/streamIdleTimeout.test.ts +390 -0
  979. package/src/core/ai/streamTelemetry.ts +90 -0
  980. package/src/core/ai/usage-callback.test.ts +511 -0
  981. package/src/core/ai/utils.native-rollout-evidence.test.ts +135 -0
  982. package/src/core/ai/utils.pensar.test.ts +59 -0
  983. package/src/core/ai/utils.ts +796 -0
  984. package/src/core/api/apiClient.test.ts +58 -0
  985. package/src/core/api/apiClient.ts +73 -0
  986. package/src/core/api/apps.test.ts +78 -0
  987. package/src/core/api/apps.ts +388 -0
  988. package/src/core/api/attackSurface.test.ts +24 -0
  989. package/src/core/api/attackSurface.ts +89 -0
  990. package/src/core/api/authentication.ts +8 -0
  991. package/src/core/api/benchmark.ts +35 -0
  992. package/src/core/api/blackboxPentest.test.ts +89 -0
  993. package/src/core/api/blackboxPentest.ts +64 -0
  994. package/src/core/api/clientIdentity.test.ts +61 -0
  995. package/src/core/api/clientIdentity.ts +57 -0
  996. package/src/core/api/comments.test.ts +69 -0
  997. package/src/core/api/constants.ts +15 -0
  998. package/src/core/api/domains.test.ts +35 -0
  999. package/src/core/api/domains.ts +32 -0
  1000. package/src/core/api/environment.ts +47 -0
  1001. package/src/core/api/index.ts +219 -0
  1002. package/src/core/api/issues.test.ts +82 -0
  1003. package/src/core/api/issues.ts +439 -0
  1004. package/src/core/api/knowledge.ts +70 -0
  1005. package/src/core/api/localWorker.ts +29 -0
  1006. package/src/core/api/offesecAgent.test.ts +289 -0
  1007. package/src/core/api/offesecAgent.ts +77 -0
  1008. package/src/core/api/patching.ts +44 -0
  1009. package/src/core/api/recordedRun.control.test.ts +830 -0
  1010. package/src/core/api/recordedRun.inference.test.ts +529 -0
  1011. package/src/core/api/recordedRun.loop.test.ts +290 -0
  1012. package/src/core/api/recordedRun.recovery.test.ts +651 -0
  1013. package/src/core/api/recordedRun.test.ts +646 -0
  1014. package/src/core/api/recordedRun.ts +542 -0
  1015. package/src/core/api/targetedPentest.test.ts +177 -0
  1016. package/src/core/api/targetedPentest.ts +83 -0
  1017. package/src/core/api/threatModel.ts +5 -0
  1018. package/src/core/api/trajectoryExport.test.ts +299 -0
  1019. package/src/core/api/trajectoryExport.ts +362 -0
  1020. package/src/core/api/vulnerabilityReproduction.test.ts +56 -0
  1021. package/src/core/api/vulnerabilityReproduction.ts +54 -0
  1022. package/src/core/assets/wordlists.test.ts +85 -0
  1023. package/src/core/assets/wordlists.ts +111 -0
  1024. package/src/core/atif/compatibility.test.ts +107 -0
  1025. package/src/core/atif/convert.test.ts +815 -0
  1026. package/src/core/atif/convert.ts +1658 -0
  1027. package/src/core/atif/fixtures/portable-bundle-v1.json +813 -0
  1028. package/src/core/atif/index.ts +34 -0
  1029. package/src/core/atif/schema.ts +345 -0
  1030. package/src/core/atif/serialize.test.ts +244 -0
  1031. package/src/core/atif/serialize.ts +419 -0
  1032. package/src/core/atif/test-fixtures.ts +184 -0
  1033. package/src/core/atif/validate.test.ts +188 -0
  1034. package/src/core/atif/validate.ts +289 -0
  1035. package/src/core/auth/connection.ts +26 -0
  1036. package/src/core/auth/device-flow.ts +203 -0
  1037. package/src/core/auth/gateway.ts +66 -0
  1038. package/src/core/auth/index.ts +29 -0
  1039. package/src/core/auth/signing.ts +25 -0
  1040. package/src/core/auth/token.ts +140 -0
  1041. package/src/core/auth/types.ts +106 -0
  1042. package/src/core/auth/workspaces.ts +192 -0
  1043. package/src/core/benchmark/index.ts +11 -0
  1044. package/src/core/benchmark/report.ts +257 -0
  1045. package/src/core/benchmark/runner.ts +698 -0
  1046. package/src/core/benchmark/types.ts +80 -0
  1047. package/src/core/cli/logLevelArgs.test.ts +83 -0
  1048. package/src/core/cli/logLevelArgs.ts +62 -0
  1049. package/src/core/cli/model.ts +35 -0
  1050. package/src/core/cli/pentestMode.test.ts +24 -0
  1051. package/src/core/cli/pentestMode.ts +23 -0
  1052. package/src/core/cli/tuiArgs.test.ts +58 -0
  1053. package/src/core/cli/tuiArgs.ts +28 -0
  1054. package/src/core/config/config.test.ts +183 -0
  1055. package/src/core/config/config.ts +201 -0
  1056. package/src/core/config/customProviders.test.ts +183 -0
  1057. package/src/core/config/customProviders.ts +190 -0
  1058. package/src/core/config/index.ts +7 -0
  1059. package/src/core/credentials/index.ts +6 -0
  1060. package/src/core/credentials/manager.ts +313 -0
  1061. package/src/core/credentials/types.ts +112 -0
  1062. package/src/core/doctor.ts +138 -0
  1063. package/src/core/eventBus.test.ts +374 -0
  1064. package/src/core/eventBus.ts +410 -0
  1065. package/src/core/findings/attackSurfaceRegistry.ts +294 -0
  1066. package/src/core/findings/registry.test.ts +1680 -0
  1067. package/src/core/findings/registry.ts +800 -0
  1068. package/src/core/history.ts +82 -0
  1069. package/src/core/hoonify.test.ts +250 -0
  1070. package/src/core/hoonify.ts +163 -0
  1071. package/src/core/http/headers.contract.test.ts +1161 -0
  1072. package/src/core/http/parse.ts +257 -0
  1073. package/src/core/http/redirects.test.ts +207 -0
  1074. package/src/core/http/redirects.ts +145 -0
  1075. package/src/core/http/targetHeaders.ts +604 -0
  1076. package/src/core/http/targetScope.ts +52 -0
  1077. package/src/core/http/types.ts +39 -0
  1078. package/src/core/id/id.test.ts +88 -0
  1079. package/src/core/id/id.ts +138 -0
  1080. package/src/core/installation/index.ts +222 -0
  1081. package/src/core/installation/installation.test.ts +415 -0
  1082. package/src/core/integrations/herdr.test.ts +335 -0
  1083. package/src/core/integrations/herdr.ts +163 -0
  1084. package/src/core/integrations/surface/index.test.ts +534 -0
  1085. package/src/core/integrations/surface/index.ts +224 -0
  1086. package/src/core/integrations/surface/types.ts +29 -0
  1087. package/src/core/integrations/wandb/client.ts +167 -0
  1088. package/src/core/integrations/wandb/upload.test.ts +415 -0
  1089. package/src/core/integrations/wandb/upload.ts +76 -0
  1090. package/src/core/logger/errorLog.test.ts +98 -0
  1091. package/src/core/logger/index.ts +214 -0
  1092. package/src/core/logger/structured.test.ts +212 -0
  1093. package/src/core/logger/structured.ts +207 -0
  1094. package/src/core/memory/backend.test.ts +186 -0
  1095. package/src/core/memory/index.ts +279 -0
  1096. package/src/core/memory/memory.test.ts +362 -0
  1097. package/src/core/messages/types.ts +141 -0
  1098. package/src/core/obfuscation/engine.test.ts +314 -0
  1099. package/src/core/obfuscation/engine.ts +647 -0
  1100. package/src/core/obfuscation/index.ts +27 -0
  1101. package/src/core/observability/active-root-spans.ts +30 -0
  1102. package/src/core/observability/active-spans.ts +80 -0
  1103. package/src/core/observability/index.ts +91 -0
  1104. package/src/core/observability/log-correlation.test.ts +276 -0
  1105. package/src/core/observability/payload-capture.test.ts +59 -0
  1106. package/src/core/observability/runtime.test.ts +743 -0
  1107. package/src/core/observability/runtime.ts +371 -0
  1108. package/src/core/observability/shutdown.test.ts +551 -0
  1109. package/src/core/observability/telemetry.test.ts +895 -0
  1110. package/src/core/observability/telemetry.ts +220 -0
  1111. package/src/core/observability/testkit.test.ts +66 -0
  1112. package/src/core/observability/testkit.ts +97 -0
  1113. package/src/core/observability/trace-contract.test.ts +1031 -0
  1114. package/src/core/observability.test.ts +135 -0
  1115. package/src/core/operator/approvalGate.test.ts +300 -0
  1116. package/src/core/operator/approvalGate.ts +287 -0
  1117. package/src/core/operator/index.ts +30 -0
  1118. package/src/core/operator/types.ts +355 -0
  1119. package/src/core/plan/index.ts +44 -0
  1120. package/src/core/prompt-injections/index.test.ts +248 -0
  1121. package/src/core/prompt-injections/index.ts +350 -0
  1122. package/src/core/providers/index.ts +5 -0
  1123. package/src/core/providers/types.ts +87 -0
  1124. package/src/core/providers/utils.test.ts +189 -0
  1125. package/src/core/providers/utils.ts +183 -0
  1126. package/src/core/providers/verify.test.ts +49 -0
  1127. package/src/core/providers/verify.ts +198 -0
  1128. package/src/core/report/builder.test.ts +229 -0
  1129. package/src/core/report/builder.ts +58 -0
  1130. package/src/core/report/index.ts +13 -0
  1131. package/src/core/report/renderers/json.test.ts +76 -0
  1132. package/src/core/report/renderers/json.ts +5 -0
  1133. package/src/core/report/renderers/markdown.test.ts +366 -0
  1134. package/src/core/report/renderers/markdown.ts +133 -0
  1135. package/src/core/report/schemas.ts +48 -0
  1136. package/src/core/runtime/agentExecution.test.ts +94 -0
  1137. package/src/core/runtime/agentExecution.ts +27 -0
  1138. package/src/core/runtime/launchLocalWorker.test.ts +707 -0
  1139. package/src/core/runtime/launchLocalWorker.ts +273 -0
  1140. package/src/core/runtime/localRunLock.ts +118 -0
  1141. package/src/core/runtime/localRunWorker.test.ts +381 -0
  1142. package/src/core/runtime/localRunWorker.ts +287 -0
  1143. package/src/core/runtime/localWorker.acceptance.test.ts +548 -0
  1144. package/src/core/runtime/localWorkerEndpoint.test.ts +145 -0
  1145. package/src/core/runtime/localWorkerEndpoint.ts +82 -0
  1146. package/src/core/runtime/localWorkerProtocol.ts +176 -0
  1147. package/src/core/runtime/localWorkerTransport.test.ts +841 -0
  1148. package/src/core/runtime/localWorkerTransport.ts +434 -0
  1149. package/src/core/runtime/persistenceError.ts +14 -0
  1150. package/src/core/runtime/recordedExecution.ts +43 -0
  1151. package/src/core/runtime/recordedRunClient.integration.test.ts +106 -0
  1152. package/src/core/runtime/recordedRunClient.test.ts +677 -0
  1153. package/src/core/runtime/recordedRunClient.ts +303 -0
  1154. package/src/core/runtime/runCheckpointStore.ts +23 -0
  1155. package/src/core/runtime/runContext.test.ts +445 -0
  1156. package/src/core/runtime/runContext.ts +184 -0
  1157. package/src/core/runtime/runControl.test.ts +923 -0
  1158. package/src/core/runtime/runControl.ts +419 -0
  1159. package/src/core/runtime/runControlStore.ts +106 -0
  1160. package/src/core/runtime/runDeadline.test.ts +44 -0
  1161. package/src/core/runtime/runDeadline.ts +28 -0
  1162. package/src/core/runtime/runEvidence.test.ts +384 -0
  1163. package/src/core/runtime/runEvidence.ts +267 -0
  1164. package/src/core/runtime/runInference.test.ts +408 -0
  1165. package/src/core/runtime/runInference.ts +125 -0
  1166. package/src/core/runtime/runModelStore.ts +55 -0
  1167. package/src/core/runtime/runObservation.ts +24 -0
  1168. package/src/core/runtime/runRecoveryContext.test.ts +602 -0
  1169. package/src/core/runtime/runRecoveryContext.ts +195 -0
  1170. package/src/core/runtime/runRecoveryPlan.test.ts +851 -0
  1171. package/src/core/runtime/runRecoveryPlan.ts +540 -0
  1172. package/src/core/runtime/runRecoveryStore.ts +78 -0
  1173. package/src/core/runtime/runStore.ts +148 -0
  1174. package/src/core/runtime/runStorePath.ts +13 -0
  1175. package/src/core/runtime/runToolStore.ts +66 -0
  1176. package/src/core/runtime/runTools.crash.test.ts +414 -0
  1177. package/src/core/runtime/runTools.test.ts +689 -0
  1178. package/src/core/runtime/runTools.ts +208 -0
  1179. package/src/core/runtime/sqliteControlStore.test.ts +917 -0
  1180. package/src/core/runtime/sqliteControlStore.ts +555 -0
  1181. package/src/core/runtime/sqliteModelStore.test.ts +619 -0
  1182. package/src/core/runtime/sqliteModelStore.ts +286 -0
  1183. package/src/core/runtime/sqliteRecoveryStore.public.test.ts +374 -0
  1184. package/src/core/runtime/sqliteRecoveryStore.test.ts +836 -0
  1185. package/src/core/runtime/sqliteRecoveryStore.ts +435 -0
  1186. package/src/core/runtime/sqliteRunContext.test.ts +1000 -0
  1187. package/src/core/runtime/sqliteRunObservation.test.ts +432 -0
  1188. package/src/core/runtime/sqliteRunStore.test.ts +698 -0
  1189. package/src/core/runtime/sqliteRunStore.ts +593 -0
  1190. package/src/core/runtime/sqliteToolStore.test.ts +1231 -0
  1191. package/src/core/runtime/sqliteToolStore.ts +419 -0
  1192. package/src/core/runtime/testfixtures/localWorkerChild.ts +254 -0
  1193. package/src/core/runtime/testfixtures/localWorkerLauncher.ts +15 -0
  1194. package/src/core/runtime/testfixtures/recoveryChild.ts +159 -0
  1195. package/src/core/services/rateLimiter/index.test.ts +106 -0
  1196. package/src/core/services/rateLimiter/index.ts +157 -0
  1197. package/src/core/services/rateLimiter/types.ts +10 -0
  1198. package/src/core/session/admitted-config.test.ts +50 -0
  1199. package/src/core/session/deprecated-headers-shim.test.ts +111 -0
  1200. package/src/core/session/execution-metrics.test.ts +297 -0
  1201. package/src/core/session/execution-metrics.ts +176 -0
  1202. package/src/core/session/index.ts +1085 -0
  1203. package/src/core/session/loader.ts +212 -0
  1204. package/src/core/session/persistence.test.ts +1210 -0
  1205. package/src/core/session/persistence.ts +1076 -0
  1206. package/src/core/session/rehydrate.test.ts +393 -0
  1207. package/src/core/session/types.ts +139 -0
  1208. package/src/core/session/usage.test.ts +99 -0
  1209. package/src/core/session/usage.ts +84 -0
  1210. package/src/core/skills/builtins/index.ts +22 -0
  1211. package/src/core/skills/builtins/pentest.ts +135 -0
  1212. package/src/core/skills/builtins/promptInjection.ts +44 -0
  1213. package/src/core/skills/builtins/threatModel.ts +336 -0
  1214. package/src/core/skills/index.ts +15 -0
  1215. package/src/core/skills/parser.test.ts +120 -0
  1216. package/src/core/skills/parser.ts +106 -0
  1217. package/src/core/skills/registry.test.ts +202 -0
  1218. package/src/core/skills/registry.ts +109 -0
  1219. package/src/core/skills/scanner.test.ts +157 -0
  1220. package/src/core/skills/scanner.ts +115 -0
  1221. package/src/core/skills/types.ts +45 -0
  1222. package/src/core/skills/utils.ts +16 -0
  1223. package/src/core/storage/index.ts +150 -0
  1224. package/src/core/tasks/index.ts +242 -0
  1225. package/src/core/tools/backends/capture.ts +38 -0
  1226. package/src/core/tools/backends/collectCommand.test.ts +33 -0
  1227. package/src/core/tools/backends/collectCommand.ts +28 -0
  1228. package/src/core/tools/backends/helpers.ts +140 -0
  1229. package/src/core/tools/backends/httpTransport.ts +534 -0
  1230. package/src/core/tools/backends/index.ts +61 -0
  1231. package/src/core/tools/backends/local.test.ts +307 -0
  1232. package/src/core/tools/backends/local.ts +820 -0
  1233. package/src/core/tools/backends/policy.test.ts +137 -0
  1234. package/src/core/tools/backends/policy.ts +129 -0
  1235. package/src/core/tools/backends/resolve.test.ts +309 -0
  1236. package/src/core/tools/backends/resolve.ts +152 -0
  1237. package/src/core/tools/backends/types.ts +279 -0
  1238. package/src/core/tools/backends/whitebox.test.ts +275 -0
  1239. package/src/core/tools/backends/whitebox.ts +14 -0
  1240. package/src/core/tools/backends/whiteboxJobs.test.ts +375 -0
  1241. package/src/core/tools/backends/whiteboxJobs.ts +157 -0
  1242. package/src/core/tools/backends/windowsProgram.ts +36 -0
  1243. package/src/core/tools/daytonaSandbox.test.ts +491 -0
  1244. package/src/core/tools/daytonaSandbox.ts +232 -0
  1245. package/src/core/toolset/index.ts +583 -0
  1246. package/src/core/util/lazyLogger.ts +32 -0
  1247. package/src/core/utils/concurrency.test.ts +204 -0
  1248. package/src/core/utils/concurrency.ts +75 -0
  1249. package/src/core/utils/prompt.ts +28 -0
  1250. package/src/core/whitebox/adapters.ts +277 -0
  1251. package/src/core/whitebox/artifacts.ts +128 -0
  1252. package/src/core/whitebox/boundedProcess.ts +265 -0
  1253. package/src/core/whitebox/candidates.ts +268 -0
  1254. package/src/core/whitebox/catalog.ts +82 -0
  1255. package/src/core/whitebox/index.ts +53 -0
  1256. package/src/core/whitebox/jobKernel.test.ts +91 -0
  1257. package/src/core/whitebox/jobKernel.ts +347 -0
  1258. package/src/core/whitebox/jobSupervisor.ts +264 -0
  1259. package/src/core/whitebox/jobs.ts +21 -0
  1260. package/src/core/whitebox/paths.ts +94 -0
  1261. package/src/core/whitebox/profileTransport.ts +225 -0
  1262. package/src/core/whitebox/profiles.ts +294 -0
  1263. package/src/core/whitebox/repoProfile.test.ts +217 -0
  1264. package/src/core/whitebox/repoProfile.ts +256 -0
  1265. package/src/core/whitebox/types.ts +189 -0
  1266. package/src/core/whitebox/whitebox.test.ts +789 -0
  1267. package/src/core/workflows/fastStrike.seams.test.ts +217 -0
  1268. package/src/core/workflows/fastStrike.test.ts +29 -0
  1269. package/src/core/workflows/fastStrike.ts +239 -0
  1270. package/src/core/workflows/pentest.test.ts +575 -0
  1271. package/src/core/workflows/pentest.ts +1022 -0
  1272. package/src/core/workflows/seams.test.ts +386 -0
  1273. package/src/core/workflows/seams.ts +276 -0
  1274. package/src/core/workflows/threatModel.ts +108 -0
  1275. package/src/core/workflows/usage-forwarding.test.ts +203 -0
  1276. package/src/core/workflows/whiteboxAttackSurface.test.ts +695 -0
  1277. package/src/core/workflows/whiteboxAttackSurface.ts +1740 -0
  1278. package/src/index.ts +49 -0
  1279. package/src/lib/attack-path/types.ts +13 -0
  1280. package/src/lib/cvss/calculator.test.ts +2090 -0
  1281. package/src/lib/cvss/calculator.ts +643 -0
  1282. package/src/lib/cvss/index.ts +65 -0
  1283. package/src/lib/cvss/macrovector-scores.ts +402 -0
  1284. package/src/lib/cvss/types.ts +241 -0
  1285. package/src/lib/cwe/cwe-catalog.ts +444 -0
  1286. package/src/lib/cwe/types.test.ts +142 -0
  1287. package/src/lib/cwe/types.ts +37 -0
  1288. package/src/lib/cwe/validate.test.ts +110 -0
  1289. package/src/lib/cwe/validate.ts +53 -0
  1290. package/src/lib/evidence/types.ts +9 -0
  1291. package/src/tests/agentWorkingDirectory.test.ts +175 -0
  1292. package/src/tests/attackSurface.test.ts +35 -0
  1293. package/src/tests/auth.test.ts +196 -0
  1294. package/src/tests/authCookieExport.test.ts +143 -0
  1295. package/src/tests/authPentestHandoff.test.ts +231 -0
  1296. package/src/tests/browserCookies.test.ts +128 -0
  1297. package/src/tests/credentialManager.test.ts +657 -0
  1298. package/src/tests/data/console.openapi.json +1037 -0
  1299. package/src/tests/data/console.sitemap.xml +348 -0
  1300. package/src/tests/delegateAuthMerge.test.ts +48 -0
  1301. package/src/tui/auto-copy.ts +36 -0
  1302. package/src/tui/clipboard.ts +65 -0
  1303. package/src/tui/command-registry.test.ts +124 -0
  1304. package/src/tui/command-registry.ts +645 -0
  1305. package/src/tui/command-router.ts +81 -0
  1306. package/src/tui/components/agent-display.tsx +480 -0
  1307. package/src/tui/components/ascii-art.tsx +225 -0
  1308. package/src/tui/components/chat/approval-inline.tsx +51 -0
  1309. package/src/tui/components/chat/config-view.tsx +279 -0
  1310. package/src/tui/components/chat/home-view.tsx +288 -0
  1311. package/src/tui/components/chat/index.tsx +161 -0
  1312. package/src/tui/components/chat/input-area.tsx +529 -0
  1313. package/src/tui/components/chat/lib/play-core/num.ts +102 -0
  1314. package/src/tui/components/chat/lib/wave-simulation.ts +124 -0
  1315. package/src/tui/components/chat/loading-indicator.test.ts +33 -0
  1316. package/src/tui/components/chat/loading-indicator.tsx +115 -0
  1317. package/src/tui/components/chat/message-list.tsx +264 -0
  1318. package/src/tui/components/chat/petri-animation.tsx +175 -0
  1319. package/src/tui/components/chat/plan-review-message.tsx +49 -0
  1320. package/src/tui/components/chat/questions-form.tsx +756 -0
  1321. package/src/tui/components/commands/__tests__/recorded-runs-lifecycle.tsx +907 -0
  1322. package/src/tui/components/commands/advanced-settings.tsx +94 -0
  1323. package/src/tui/components/commands/api-key-input.tsx +122 -0
  1324. package/src/tui/components/commands/auth-flow-logic.test.ts +58 -0
  1325. package/src/tui/components/commands/auth-flow-logic.ts +30 -0
  1326. package/src/tui/components/commands/auth-flow.tsx +702 -0
  1327. package/src/tui/components/commands/credits-flow.tsx +210 -0
  1328. package/src/tui/components/commands/help-dialog.tsx +238 -0
  1329. package/src/tui/components/commands/models-display.tsx +111 -0
  1330. package/src/tui/components/commands/operator-wizard.tsx +328 -0
  1331. package/src/tui/components/commands/provider-manager.tsx +241 -0
  1332. package/src/tui/components/commands/provider-selection.tsx +129 -0
  1333. package/src/tui/components/commands/recorded-runs.test.ts +40 -0
  1334. package/src/tui/components/commands/recorded-runs.tsx +793 -0
  1335. package/src/tui/components/commands/sessions-display.tsx +365 -0
  1336. package/src/tui/components/commands/shortcuts-dialog.tsx +52 -0
  1337. package/src/tui/components/commands/skills-dialog.tsx +308 -0
  1338. package/src/tui/components/commands/theme-picker.tsx +177 -0
  1339. package/src/tui/components/commands/web-wizard.tsx +965 -0
  1340. package/src/tui/components/dialog-layout.tsx +73 -0
  1341. package/src/tui/components/error-boundary.tsx +82 -0
  1342. package/src/tui/components/footer.tsx +101 -0
  1343. package/src/tui/components/input.tsx +43 -0
  1344. package/src/tui/components/loaders.tsx +784 -0
  1345. package/src/tui/components/model-picker/ModelPicker.tsx +907 -0
  1346. package/src/tui/components/model-picker/ModelPickerDialog.tsx +75 -0
  1347. package/src/tui/components/model-picker/index.ts +2 -0
  1348. package/src/tui/components/model-picker/model-navigation.test.ts +102 -0
  1349. package/src/tui/components/model-picker/model-navigation.ts +54 -0
  1350. package/src/tui/components/model-picker/model-search.test.ts +62 -0
  1351. package/src/tui/components/model-picker/model-search.ts +42 -0
  1352. package/src/tui/components/model-picker/model-visibility.test.ts +65 -0
  1353. package/src/tui/components/model-picker/model-visibility.ts +59 -0
  1354. package/src/tui/components/operator-dashboard/conversation.test.ts +431 -0
  1355. package/src/tui/components/operator-dashboard/conversation.ts +179 -0
  1356. package/src/tui/components/operator-dashboard/display-state.test.ts +369 -0
  1357. package/src/tui/components/operator-dashboard/display-state.ts +163 -0
  1358. package/src/tui/components/operator-dashboard/herdr-state.test.ts +162 -0
  1359. package/src/tui/components/operator-dashboard/herdr-state.ts +81 -0
  1360. package/src/tui/components/operator-dashboard/index.tsx +2044 -0
  1361. package/src/tui/components/operator-dashboard/logic.test.ts +753 -0
  1362. package/src/tui/components/operator-dashboard/logic.ts +465 -0
  1363. package/src/tui/components/operator-dashboard/queue.test.ts +147 -0
  1364. package/src/tui/components/operator-dashboard/queue.ts +55 -0
  1365. package/src/tui/components/operator-dashboard/queued-messages.tsx +50 -0
  1366. package/src/tui/components/operator-dashboard/run-events.test.ts +913 -0
  1367. package/src/tui/components/operator-dashboard/run-events.ts +507 -0
  1368. package/src/tui/components/operator-dashboard/run-tracing.test.ts +206 -0
  1369. package/src/tui/components/operator-dashboard/run-tracing.ts +105 -0
  1370. package/src/tui/components/operator-dashboard/subagent-detail-view.tsx +51 -0
  1371. package/src/tui/components/operator-dashboard/subagent-dialog.tsx +142 -0
  1372. package/src/tui/components/operator-dashboard/subagent-hub.test.ts +162 -0
  1373. package/src/tui/components/operator-dashboard/subagent-hub.tsx +266 -0
  1374. package/src/tui/components/operator-dashboard/subagent-state.test.ts +431 -0
  1375. package/src/tui/components/operator-dashboard/subagent-state.ts +404 -0
  1376. package/src/tui/components/operator-dashboard/subagent-status-bar.tsx +80 -0
  1377. package/src/tui/components/operator-dashboard/tool-argument-buffer.test.ts +317 -0
  1378. package/src/tui/components/operator-dashboard/tool-arguments.perf.test.ts +121 -0
  1379. package/src/tui/components/operator-dashboard/welcome-logo.tsx +79 -0
  1380. package/src/tui/components/operator-dashboard/workflow-data.test.ts +291 -0
  1381. package/src/tui/components/operator-dashboard/workflow-data.ts +130 -0
  1382. package/src/tui/components/report-viewer-dialog.tsx +98 -0
  1383. package/src/tui/components/responsible-use-disclosure.tsx +55 -0
  1384. package/src/tui/components/screenshot-modal.tsx +204 -0
  1385. package/src/tui/components/shared/__tests__/prompt-input-lifecycle.tsx +64 -0
  1386. package/src/tui/components/shared/__tests__/tool-renderer-lifecycle.tsx +69 -0
  1387. package/src/tui/components/shared/action-label.test.ts +133 -0
  1388. package/src/tui/components/shared/action-label.ts +18 -0
  1389. package/src/tui/components/shared/ascii-spinner.tsx +40 -0
  1390. package/src/tui/components/shared/dialog-controls.tsx +76 -0
  1391. package/src/tui/components/shared/index.ts +37 -0
  1392. package/src/tui/components/shared/markdown-viewer.tsx +188 -0
  1393. package/src/tui/components/shared/markdown.ts +239 -0
  1394. package/src/tui/components/shared/message-renderer.tsx +178 -0
  1395. package/src/tui/components/shared/message-utils.ts +175 -0
  1396. package/src/tui/components/shared/pentest-workflow-display.tsx +330 -0
  1397. package/src/tui/components/shared/prompt-input-lifecycle.test.ts +22 -0
  1398. package/src/tui/components/shared/prompt-input-logic.test.ts +782 -0
  1399. package/src/tui/components/shared/prompt-input-logic.ts +423 -0
  1400. package/src/tui/components/shared/prompt-input.tsx +782 -0
  1401. package/src/tui/components/shared/result-registry.test.ts +90 -0
  1402. package/src/tui/components/shared/result-registry.ts +900 -0
  1403. package/src/tui/components/shared/syntax-highlight.ts +242 -0
  1404. package/src/tui/components/shared/tool-registry.test.ts +59 -0
  1405. package/src/tui/components/shared/tool-registry.ts +279 -0
  1406. package/src/tui/components/shared/tool-renderer.test.ts +13 -0
  1407. package/src/tui/components/shared/tool-renderer.tsx +223 -0
  1408. package/src/tui/components/shared/type-guards.ts +64 -0
  1409. package/src/tui/components/shared/use-paste-extmarks.ts +109 -0
  1410. package/src/tui/components/switch.tsx +81 -0
  1411. package/src/tui/components/terminal-focus-handler.tsx +34 -0
  1412. package/src/tui/components/toast.tsx +82 -0
  1413. package/src/tui/components/usage-labels.test.ts +191 -0
  1414. package/src/tui/components/usage-labels.ts +78 -0
  1415. package/src/tui/console-theme.ts +59 -0
  1416. package/src/tui/context/agent.tsx +251 -0
  1417. package/src/tui/context/command.tsx +291 -0
  1418. package/src/tui/context/config.tsx +59 -0
  1419. package/src/tui/context/dialog.tsx +206 -0
  1420. package/src/tui/context/dimensions.tsx +31 -0
  1421. package/src/tui/context/focus-ownership.test.ts +26 -0
  1422. package/src/tui/context/focus-ownership.ts +12 -0
  1423. package/src/tui/context/focus.tsx +86 -0
  1424. package/src/tui/context/herdr.tsx +28 -0
  1425. package/src/tui/context/input.tsx +45 -0
  1426. package/src/tui/context/keybinding.tsx +92 -0
  1427. package/src/tui/context/obfuscation.tsx +114 -0
  1428. package/src/tui/context/route.tsx +127 -0
  1429. package/src/tui/context/session-usage.test.ts +295 -0
  1430. package/src/tui/context/session-usage.ts +204 -0
  1431. package/src/tui/context/session.tsx +62 -0
  1432. package/src/tui/context/toast.tsx +66 -0
  1433. package/src/tui/generated-ascii-art.json +1 -0
  1434. package/src/tui/generated-ascii-art.json.d.ts +2 -0
  1435. package/src/tui/herdr-startup.test.ts +157 -0
  1436. package/src/tui/hooks/use-sessions-list.ts +165 -0
  1437. package/src/tui/index.tsx +838 -0
  1438. package/src/tui/keybindings/index.ts +126 -0
  1439. package/src/tui/keybindings/registry.ts +146 -0
  1440. package/src/tui/keybindings-registry.ts +43 -0
  1441. package/src/tui/obfuscation/patch.ts +139 -0
  1442. package/src/tui/terminal-focus.ts +218 -0
  1443. package/src/tui/theme/colors.ts +43 -0
  1444. package/src/tui/theme/context.tsx +137 -0
  1445. package/src/tui/theme/detect-mode.ts +56 -0
  1446. package/src/tui/theme/index.ts +75 -0
  1447. package/src/tui/theme/registry.ts +29 -0
  1448. package/src/tui/theme/themes/apex.ts +190 -0
  1449. package/src/tui/theme/themes/ayu.ts +189 -0
  1450. package/src/tui/theme/themes/catppuccin.ts +189 -0
  1451. package/src/tui/theme/themes/dracula.ts +190 -0
  1452. package/src/tui/theme/themes/everforest.ts +189 -0
  1453. package/src/tui/theme/themes/flexoki.ts +190 -0
  1454. package/src/tui/theme/themes/github.ts +189 -0
  1455. package/src/tui/theme/themes/gruvbox.ts +189 -0
  1456. package/src/tui/theme/themes/index.ts +54 -0
  1457. package/src/tui/theme/themes/kanagawa.ts +189 -0
  1458. package/src/tui/theme/themes/material.ts +190 -0
  1459. package/src/tui/theme/themes/monokai.ts +190 -0
  1460. package/src/tui/theme/themes/nightfox.ts +189 -0
  1461. package/src/tui/theme/themes/nord.ts +190 -0
  1462. package/src/tui/theme/themes/onedark.ts +190 -0
  1463. package/src/tui/theme/themes/rose-pine.ts +189 -0
  1464. package/src/tui/theme/themes/solarized.ts +189 -0
  1465. package/src/tui/theme/themes/tokyonight.ts +189 -0
  1466. package/src/tui/theme/themes/vesper.ts +191 -0
  1467. package/src/tui/theme/types.ts +143 -0
  1468. package/src/tui/utils/command-flags.test.ts +269 -0
  1469. package/src/tui/utils/command-flags.ts +377 -0
  1470. package/src/tui/utils/kitty-graphics.ts +76 -0
  1471. package/src/tui/utils/open-file.ts +37 -0
  1472. package/src/tui/utils/open-report.ts +34 -0
  1473. package/src/tui/utils/open-url.ts +39 -0
  1474. package/src/tui/utils/paste.ts +8 -0
  1475. package/src/tui/utils/scroll.ts +81 -0
  1476. package/src/util/errors.ts +58 -0
  1477. package/src/util/lock.ts +100 -0
  1478. package/src/util/name.ts +148 -0
  1479. package/src/util/url.test.ts +162 -0
  1480. package/src/util/url.ts +107 -0
  1481. package/build/agent-13rrhp8d.js +0 -20
  1482. package/build/agent-zbj2331s.js +0 -30
  1483. package/build/authentication-f4j3w5vs.js +0 -20
  1484. package/build/blackboxAgent-v2vx9ws4.js +0 -20
  1485. package/build/blackboxPentest-w5nwzpvk.js +0 -70
  1486. package/build/cli-5wemv37a.js +0 -194
  1487. package/build/cli-7s062hr6.js +0 -22
  1488. package/build/cli-9qbxkhye.js +0 -55
  1489. package/build/cli-avmhkjtv.js +0 -22961
  1490. package/build/cli-g3czc3jz.js +0 -204
  1491. package/build/cli-ww7hbazg.js +0 -88
  1492. package/build/index-18vyy6mj.js +0 -19
  1493. package/build/index-5wh7gq37.js +0 -12858
  1494. package/build/index-e23zc8g4.js +0 -34
  1495. package/build/index-hnwhswqj.js +0 -213
  1496. package/build/index-wkmnr4nm.js +0 -39
  1497. package/build/index-ywmfnd30.js +0 -12
  1498. package/build/offesecAgent-c97pqzcn.js +0 -27
  1499. package/build/pentest-4p5jt7gj.js +0 -30
  1500. package/build/pentests-v98eg8n3.js +0 -92
  1501. package/build/threatModel-81d4rcbk.js +0 -29
  1502. /package/build/{cli-c8131c4q.js → cli-0wsh8j2t.js} +0 -0
  1503. /package/build/{cli-9pbk8m32.js → cli-ag6jtndp.js} +0 -0
  1504. /package/build/{cli-e08r86zk.js → cli-b3dvxjgk.js} +0 -0
  1505. /package/build/{cli-fw5r7pfj.js → cli-q126f6ef.js} +0 -0
  1506. /package/build/{cli-9fsre5pt.js → cli-qba2x69h.js} +0 -0
  1507. /package/build/{cli-7q3ae3ft.js → cli-z82n3qk1.js} +0 -0
@@ -1,114 +1,70 @@
1
1
  import {
2
- AppsDiscoveryResultSchema,
3
- DiscoverySummarySchema,
4
- EndpointSchema,
5
- WHITEBOX_APPS_DISCOVERY_SYSTEM_PROMPT,
6
- WHITEBOX_DISCOVERY_SYSTEM_PROMPT,
7
- WHITEBOX_ENDPOINT_DOCUMENTATION_SYSTEM_PROMPT
8
- } from "./cli-7vg06q5r.js";
2
+ collectCommand,
3
+ FindingsRegistry,
4
+ inMemoryRegistryProvider,
5
+ withFindingPersistedHook,
6
+ assertDepth,
7
+ inProcessSeams,
8
+ resolveItemHooks,
9
+ toGrpcPentestContext,
10
+ grpcAuthorityTarget,
11
+ inProcessSubagentSpawner,
12
+ pLimit,
13
+ PLAN_MODE_TOOL_NAMES,
14
+ OffensiveSecurityAgent
15
+ } from "./cli-3p4gyc9m.js";
9
16
  import {
10
- BlackboxAttackSurfaceAgent
11
- } from "./cli-y3dpm18e.js";
17
+ BlackboxAttackSurfaceAgent2
18
+ } from "./cli-xn12g67s.js";
12
19
  import {
13
- TargetedPentestAgent,
14
- buildPentestSystemPrompt
15
- } from "./cli-3py0a0wg.js";
20
+ TargetedPentestAgent2,
21
+ buildPentestSystemPrompt2
22
+ } from "./cli-vfta27tv.js";
16
23
  import {
17
- REPORT_FILENAME_JSON,
18
- REPORT_FILENAME_MD,
19
24
  buildPentestReport,
20
25
  renderJson,
21
- renderMarkdown
22
- } from "./cli-vkbzcnw1.js";
26
+ renderMarkdown,
27
+ REPORT_FILENAME_MD,
28
+ REPORT_FILENAME_JSON
29
+ } from "./cli-fapvkkbh.js";
23
30
  import {
24
- CodeAgent
25
- } from "./cli-73k43t1r.js";
31
+ CodeAgent2
32
+ } from "./cli-8s4ew1hv.js";
26
33
  import {
27
- FindingsRegistry,
28
- OffensiveSecurityAgent,
29
- PLAN_MODE_TOOL_NAMES,
30
- grpcAuthorityTarget,
31
- pLimit,
32
- runWithBoundedConcurrency,
33
- toGrpcPentestContext
34
- } from "./cli-sx3jkv7p.js";
34
+ WHITEBOX_APPS_DISCOVERY_SYSTEM_PROMPT2,
35
+ WHITEBOX_ENDPOINT_DOCUMENTATION_SYSTEM_PROMPT,
36
+ WHITEBOX_DISCOVERY_SYSTEM_PROMPT2,
37
+ EndpointSchema2,
38
+ AppInfoSchema2,
39
+ AppsDiscoveryResultSchema2,
40
+ DiscoverySummarySchema2
41
+ } from "./cli-9s7snz6x.js";
35
42
  import {
36
43
  createThreatModelPrompt
37
- } from "./cli-fw5r7pfj.js";
44
+ } from "./cli-q126f6ef.js";
38
45
  import {
39
- createLogger,
40
46
  hasToolCall,
41
47
  init_dist,
42
- init_id,
48
+ scopedLogger,
43
49
  init_lazyLogger,
44
50
  init_session,
45
- init_structured,
51
+ createLogger,
52
+ init_structured
53
+ } from "./cli-c0ha5wh1.js";
54
+ import {
46
55
  newSessionId,
47
- scopedLogger
48
- } from "./cli-p4r7q012.js";
56
+ init_id
57
+ } from "./cli-se8ae8z3.js";
49
58
  import {
50
- __require
51
- } from "./cli-bc05qbss.js";
52
-
53
- // src/core/workflows/pentest.ts
54
- init_dist();
55
- import { existsSync as existsSync13, readdirSync as readdirSync12, readFileSync as readFileSync11, writeFileSync as writeFileSync4 } from "node:fs";
56
- import { join as join18 } from "node:path";
57
-
58
- // src/core/agents/specialized/pentest/planPrompt.ts
59
- var PLAN_PHASE_SYSTEM_PROMPT = `You are an expert penetration tester performing reconnaissance and planning.
60
-
61
- Your job is to analyze the target, understand its attack surface, and create a comprehensive testing plan. You have READ-ONLY tools available — you can probe the target but NOT exploit it.
62
-
63
- Methodology:
64
- 1. RECALL — Call list_memories to check for relevant knowledge from previous engagements.
65
- 2. PROBE — Use http_request and browser tools to understand the target's behavior, technology stack, and input vectors.
66
- 3. ANALYZE — Identify technologies, endpoints, authentication mechanisms, input parameters, and potential vulnerability classes.
67
- 4. PLAN — Write a structured pentest plan via write_plan with the following sections:
68
- - **Objective** — engagement goals
69
- - **Scope** — in-scope targets, exclusions
70
- - **Reconnaissance Findings** — technology stack, endpoints, authentication mechanisms discovered
71
- - **Attack Surface Map** — entry points ranked by exposure
72
- - **Prioritized Attack Vectors** — ordered by impact, with endpoint, vulnerability class, rationale, and test approach per vector
73
- - **Testing Methodology** — concrete techniques and payloads per vector (OWASP categories)
74
- - **Estimated Action Tiers** — anticipated T1–T5 action counts for operator awareness
75
- 5. DECOMPOSE — Call create_task for each attack vector in the plan. One task per technique × endpoint combination.
76
- 6. SUBMIT — Call submit_plan when the plan is complete and all tasks are created.
77
-
78
- Guidelines:
79
- - Be thorough in reconnaissance — probe different endpoints, check response headers, test authentication flows
80
- - Rank attack vectors by likelihood of success and potential impact
81
- - Each task should be atomic and testable independently
82
- - Include authentication bypass, injection, access control, and business logic testing as appropriate`;
83
- function buildPlanPrompt(target, objectives, grpc) {
84
- const objectiveList = objectives.map((o, i) => `${i + 1}. ${o}`).join(`
85
- `);
86
- const grpcSection = grpc ? `
87
- ## gRPC Target
88
- This target is a **gRPC method**, not a plain HTTP endpoint — plan gRPC-specific attack vectors (reflection/schema recovery, per-method missing-auth, BOLA on request-message IDs, metadata trust, \`:path\` authz bypass, protobuf fuzzing, streaming abuse) rather than HTTP-centric ones.
89
- - **Transport:** ${grpc.transport}
90
- - **Service:** ${grpc.serviceFqn}
91
- - **Method:** ${grpc.method}${grpc.streamingType ? `
92
- - **Streaming:** ${grpc.streamingType}` : ""}${grpc.host ? `
93
- - **Authority (host):** ${grpc.host}` : ""}
94
- ` : "";
95
- return `# Planning Assignment
96
-
97
- ## Target
98
- - **URL:** ${target}
99
- ${grpcSection}
100
- ## Objectives
101
- ${objectiveList}
102
-
103
- ## Instructions
104
- 1. Probe the target to understand its behavior and attack surface
105
- 2. Write a comprehensive pentest plan via write_plan
106
- 3. Create tasks for each attack vector via create_task
107
- 4. Submit the plan via submit_plan when complete`;
108
- }
109
-
110
- // src/core/workflows/pentest.ts
111
- init_structured();
59
+ init_zod
60
+ } from "./cli-3qznjsnr.js";
61
+ import {
62
+ string,
63
+ number,
64
+ array,
65
+ object,
66
+ union
67
+ } from "./cli-mz5pk30x.js";
112
68
 
113
69
  // src/core/session/execution-metrics.ts
114
70
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
@@ -205,6 +161,66 @@ function formatDurationHmsFromMs(durationMs) {
205
161
  return `${hours}h${minutes}m${seconds}s`;
206
162
  }
207
163
 
164
+ // src/core/workflows/pentest.ts
165
+ init_dist();
166
+ import { existsSync as existsSync12, readdirSync as readdirSync11, readFileSync as readFileSync10, writeFileSync as writeFileSync4 } from "node:fs";
167
+ import { join as join17 } from "node:path";
168
+
169
+ // src/core/agents/specialized/pentest/planPrompt.ts
170
+ var PLAN_PHASE_SYSTEM_PROMPT = `You are an expert penetration tester performing reconnaissance and planning.
171
+
172
+ Your job is to analyze the target, understand its attack surface, and create a comprehensive testing plan. You have READ-ONLY tools available — you can probe the target but NOT exploit it.
173
+
174
+ Methodology:
175
+ 1. RECALL — Call list_memories to check for relevant knowledge from previous engagements.
176
+ 2. PROBE — Use http_request and browser tools to understand the target's behavior, technology stack, and input vectors.
177
+ 3. ANALYZE — Identify technologies, endpoints, authentication mechanisms, input parameters, and potential vulnerability classes.
178
+ 4. PLAN — Write a structured pentest plan via write_plan with the following sections:
179
+ - **Objective** — engagement goals
180
+ - **Scope** — in-scope targets, exclusions
181
+ - **Reconnaissance Findings** — technology stack, endpoints, authentication mechanisms discovered
182
+ - **Attack Surface Map** — entry points ranked by exposure
183
+ - **Prioritized Attack Vectors** — ordered by impact, with endpoint, vulnerability class, rationale, and test approach per vector
184
+ - **Testing Methodology** — concrete techniques and payloads per vector (OWASP categories)
185
+ - **Estimated Action Tiers** — anticipated T1–T5 action counts for operator awareness
186
+ 5. DECOMPOSE — Call create_task for each attack vector in the plan. One task per technique × endpoint combination.
187
+ 6. SUBMIT — Call submit_plan when the plan is complete and all tasks are created.
188
+
189
+ Guidelines:
190
+ - Be thorough in reconnaissance — probe different endpoints, check response headers, test authentication flows
191
+ - Rank attack vectors by likelihood of success and potential impact
192
+ - Each task should be atomic and testable independently
193
+ - Include authentication bypass, injection, access control, and business logic testing as appropriate`;
194
+ function buildPlanPrompt(target, objectives, grpc) {
195
+ const objectiveList = objectives.map((o, i) => `${i + 1}. ${o}`).join(`
196
+ `);
197
+ const grpcSection = grpc ? `
198
+ ## gRPC Target
199
+ This target is a **gRPC method**, not a plain HTTP endpoint — plan gRPC-specific attack vectors (reflection/schema recovery, per-method missing-auth, BOLA on request-message IDs, metadata trust, \`:path\` authz bypass, protobuf fuzzing, streaming abuse) rather than HTTP-centric ones.
200
+ - **Transport:** ${grpc.transport}
201
+ - **Service:** ${grpc.serviceFqn}
202
+ - **Method:** ${grpc.method}${grpc.streamingType ? `
203
+ - **Streaming:** ${grpc.streamingType}` : ""}${grpc.host ? `
204
+ - **Authority (host):** ${grpc.host}` : ""}
205
+ ` : "";
206
+ return `# Planning Assignment
207
+
208
+ ## Target
209
+ - **URL:** ${target}
210
+ ${grpcSection}
211
+ ## Objectives
212
+ ${objectiveList}
213
+
214
+ ## Instructions
215
+ 1. Probe the target to understand its behavior and attack surface
216
+ 2. Write a comprehensive pentest plan via write_plan
217
+ 3. Create tasks for each attack vector via create_task
218
+ 4. Submit the plan via submit_plan when complete`;
219
+ }
220
+
221
+ // src/core/workflows/pentest.ts
222
+ init_structured();
223
+
208
224
  // src/core/session/loader.ts
209
225
  init_structured();
210
226
  import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
@@ -293,9 +309,9 @@ function readAgentManifest(session) {
293
309
  return [];
294
310
  }
295
311
  }
296
- function buildManifestEntries(targets) {
312
+ function buildManifestEntries(targets, mintId = () => newSessionId()) {
297
313
  return targets.map((t, i) => {
298
- const sessionId = newSessionId();
314
+ const sessionId = mintId(t.name ?? "pentest-worker", i);
299
315
  return {
300
316
  id: sessionId,
301
317
  sessionId,
@@ -485,10 +501,10 @@ function loadSubagents(rootPath) {
485
501
  const subagentsPath = join2(rootPath, SUBAGENTS_DIR);
486
502
  const manifestNameById = new Map;
487
503
  {
488
- const manifestPath2 = join2(rootPath, MANIFEST_FILE);
489
- if (existsSync2(manifestPath2)) {
504
+ const manifestPath = join2(rootPath, MANIFEST_FILE);
505
+ if (existsSync2(manifestPath)) {
490
506
  try {
491
- const manifest = JSON.parse(readFileSync2(manifestPath2, "utf-8"));
507
+ const manifest = JSON.parse(readFileSync2(manifestPath, "utf-8"));
492
508
  for (const entry of manifest)
493
509
  manifestNameById.set(entry.id, entry.name);
494
510
  } catch {}
@@ -638,7 +654,7 @@ init_lazyLogger();
638
654
 
639
655
  // src/core/workflows/whiteboxAttackSurface.ts
640
656
  import {
641
- existsSync as existsSync12,
657
+ existsSync as existsSync11,
642
658
  mkdirSync as mkdirSync2,
643
659
  readdirSync as readdirSync10,
644
660
  readFileSync as readFileSync9,
@@ -646,6 +662,7 @@ import {
646
662
  writeFileSync as writeFileSync3
647
663
  } from "node:fs";
648
664
  import { join as join16 } from "node:path";
665
+ init_zod();
649
666
 
650
667
  // src/core/agents/specialized/whiteboxAttackSurface/endpointDocumentationAgent.ts
651
668
  init_id();
@@ -736,64 +753,64 @@ async function runEndpointDocumentationAgent(opts) {
736
753
  thinkingEffort,
737
754
  projectThreatModel,
738
755
  parentSubagentId,
739
- agentLimiter
756
+ agentLimiter,
757
+ subagentSpawner,
758
+ hooks,
759
+ mintChildId
740
760
  } = opts;
741
- const subagentId = newSessionId();
742
761
  const displayMethod = getDocumentMethod(endpoint);
743
762
  const displayName = `${app.name}: ${displayMethod.join(",")} ${endpoint.path}`;
744
- eventBus?.emit("subagent-spawn", {
745
- subagentId,
746
- name: displayName,
747
- input: {
748
- app: app.name,
749
- type: "endpointDocumentation",
750
- method: displayMethod,
751
- path: endpoint.path
752
- },
753
- parentSubagentId
754
- });
763
+ const subagentId = mintChildId ? mintChildId(displayName) : newSessionId();
755
764
  const objective = buildEndpointDocumentationObjective({
756
765
  app,
757
766
  codebasePath,
758
767
  endpoint,
759
768
  frameworks
760
769
  });
761
- const agent = new CodeAgent({
762
- codebasePath,
763
- objective,
764
- system: WHITEBOX_ENDPOINT_DOCUMENTATION_SYSTEM_PROMPT,
765
- model,
766
- session,
767
- authConfig,
768
- abortSignal,
769
- attackSurfaceRegistry,
770
- eventBus,
770
+ const spawner = subagentSpawner ?? inProcessSubagentSpawner;
771
+ const spawnChild = () => spawner.spawn({
772
+ spec: {
773
+ type: "code",
774
+ codebasePath,
775
+ objective,
776
+ system: WHITEBOX_ENDPOINT_DOCUMENTATION_SYSTEM_PROMPT,
777
+ excludeTools: ["document_app", "list_files", "grep"],
778
+ responseSchema: DiscoverySummarySchema2,
779
+ projectThreatModel,
780
+ attackSurfaceRegistry
781
+ },
782
+ runtime: {
783
+ model,
784
+ session,
785
+ authConfig,
786
+ abortSignal,
787
+ enableThinking,
788
+ thinkingEffort,
789
+ openAIReasoningEffort,
790
+ onStepFinish,
791
+ onCacheMetrics,
792
+ backends: hooks?.backends,
793
+ sandbox: hooks?.sandbox,
794
+ languageModelMiddleware: hooks?.languageModelMiddleware,
795
+ usageRecorder: hooks?.usageRecorder,
796
+ streamIdFactory: hooks?.streamIdFactory
797
+ },
771
798
  subagentId,
772
799
  subagentName: displayName,
773
- onStepFinish: (event) => onStepFinish?.(event),
774
- onCacheMetrics,
775
- openAIReasoningEffort,
776
- enableThinking,
777
- thinkingEffort,
778
- responseSchema: DiscoverySummarySchema,
779
- excludeTools: ["document_app", "list_files", "grep"],
780
- projectThreatModel
800
+ parentBus: eventBus,
801
+ parentSubagentId,
802
+ lifecycleInput: {
803
+ app: app.name,
804
+ type: "endpointDocumentation",
805
+ method: displayMethod,
806
+ path: endpoint.path
807
+ }
781
808
  });
782
809
  try {
783
- await (agentLimiter ? agentLimiter(() => agent.consume()) : agent.consume());
784
- eventBus?.emit("subagent-complete", {
785
- subagentId,
786
- status: "completed",
787
- parentSubagentId
788
- });
810
+ await (agentLimiter ? agentLimiter(spawnChild) : spawnChild());
789
811
  return true;
790
812
  } catch (error) {
791
813
  log3.error(`"${subagentId}" FAILED`, error instanceof Error ? error : undefined, { error: String(error) });
792
- eventBus?.emit("subagent-complete", {
793
- subagentId,
794
- status: "failed",
795
- parentSubagentId
796
- });
797
814
  return false;
798
815
  }
799
816
  }
@@ -801,20 +818,18 @@ async function runAppEndpointDocumentation(opts) {
801
818
  const { endpoints, ...shared } = opts;
802
819
  if (endpoints.length === 0)
803
820
  return;
821
+ const spawner = opts.subagentSpawner ?? inProcessSubagentSpawner;
804
822
  let anyFailed = false;
805
- await runWithBoundedConcurrency(endpoints, ENDPOINT_DOCUMENTATION_CONCURRENCY, async (endpoint) => {
823
+ await spawner.spawnMany(endpoints, async (endpoint) => {
806
824
  const ok = await runEndpointDocumentationAgent({ ...shared, endpoint });
807
825
  if (!ok)
808
826
  anyFailed = true;
809
- });
827
+ }, { concurrency: ENDPOINT_DOCUMENTATION_CONCURRENCY });
810
828
  if (anyFailed) {
811
829
  throw new Error(`One or more endpoint documentation agents failed for app ${opts.app.name}`);
812
830
  }
813
831
  }
814
832
 
815
- // src/core/workflows/whiteboxAttackSurface.ts
816
- init_id();
817
-
818
833
  // src/core/integrations/surface/index.ts
819
834
  import { existsSync as existsSync10 } from "node:fs";
820
835
  import { dirname as dirname3, relative as relative3, resolve as resolve2, sep } from "node:path";
@@ -1073,12 +1088,12 @@ function compileMap() {
1073
1088
  fallback: []
1074
1089
  }
1075
1090
  }, index, length;
1076
- function collectType(type2) {
1077
- if (type2.multi) {
1078
- result.multi[type2.kind].push(type2);
1079
- result.multi["fallback"].push(type2);
1091
+ function collectType(type) {
1092
+ if (type.multi) {
1093
+ result.multi[type.kind].push(type);
1094
+ result.multi["fallback"].push(type);
1080
1095
  } else {
1081
- result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2;
1096
+ result[type.kind][type.tag] = result["fallback"][type.tag] = type;
1082
1097
  }
1083
1098
  }
1084
1099
  for (index = 0, length = arguments.length;index < length; index += 1) {
@@ -1089,7 +1104,7 @@ function compileMap() {
1089
1104
  function Schema$1(definition) {
1090
1105
  return this.extend(definition);
1091
1106
  }
1092
- Schema$1.prototype.extend = function extend2(definition) {
1107
+ Schema$1.prototype.extend = function extend(definition) {
1093
1108
  var implicit = [];
1094
1109
  var explicit = [];
1095
1110
  if (definition instanceof type) {
@@ -1496,9 +1511,9 @@ var BASE64_MAP = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
1496
1511
  function resolveYamlBinary(data) {
1497
1512
  if (data === null)
1498
1513
  return false;
1499
- var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;
1514
+ var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;
1500
1515
  for (idx = 0;idx < max; idx++) {
1501
- code = map2.indexOf(data.charAt(idx));
1516
+ code = map.indexOf(data.charAt(idx));
1502
1517
  if (code > 64)
1503
1518
  continue;
1504
1519
  if (code < 0)
@@ -1508,14 +1523,14 @@ function resolveYamlBinary(data) {
1508
1523
  return bitlen % 8 === 0;
1509
1524
  }
1510
1525
  function constructYamlBinary(data) {
1511
- var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];
1526
+ var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map = BASE64_MAP, bits = 0, result = [];
1512
1527
  for (idx = 0;idx < max; idx++) {
1513
1528
  if (idx % 4 === 0 && idx) {
1514
1529
  result.push(bits >> 16 & 255);
1515
1530
  result.push(bits >> 8 & 255);
1516
1531
  result.push(bits & 255);
1517
1532
  }
1518
- bits = bits << 6 | map2.indexOf(input.charAt(idx));
1533
+ bits = bits << 6 | map.indexOf(input.charAt(idx));
1519
1534
  }
1520
1535
  tailbits = max % 4 * 6;
1521
1536
  if (tailbits === 0) {
@@ -1531,32 +1546,32 @@ function constructYamlBinary(data) {
1531
1546
  return new Uint8Array(result);
1532
1547
  }
1533
1548
  function representYamlBinary(object) {
1534
- var result = "", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;
1549
+ var result = "", bits = 0, idx, tail, max = object.length, map = BASE64_MAP;
1535
1550
  for (idx = 0;idx < max; idx++) {
1536
1551
  if (idx % 3 === 0 && idx) {
1537
- result += map2[bits >> 18 & 63];
1538
- result += map2[bits >> 12 & 63];
1539
- result += map2[bits >> 6 & 63];
1540
- result += map2[bits & 63];
1552
+ result += map[bits >> 18 & 63];
1553
+ result += map[bits >> 12 & 63];
1554
+ result += map[bits >> 6 & 63];
1555
+ result += map[bits & 63];
1541
1556
  }
1542
1557
  bits = (bits << 8) + object[idx];
1543
1558
  }
1544
1559
  tail = max % 3;
1545
1560
  if (tail === 0) {
1546
- result += map2[bits >> 18 & 63];
1547
- result += map2[bits >> 12 & 63];
1548
- result += map2[bits >> 6 & 63];
1549
- result += map2[bits & 63];
1561
+ result += map[bits >> 18 & 63];
1562
+ result += map[bits >> 12 & 63];
1563
+ result += map[bits >> 6 & 63];
1564
+ result += map[bits & 63];
1550
1565
  } else if (tail === 2) {
1551
- result += map2[bits >> 10 & 63];
1552
- result += map2[bits >> 4 & 63];
1553
- result += map2[bits << 2 & 63];
1554
- result += map2[64];
1566
+ result += map[bits >> 10 & 63];
1567
+ result += map[bits >> 4 & 63];
1568
+ result += map[bits << 2 & 63];
1569
+ result += map[64];
1555
1570
  } else if (tail === 1) {
1556
- result += map2[bits >> 2 & 63];
1557
- result += map2[bits << 4 & 63];
1558
- result += map2[64];
1559
- result += map2[64];
1571
+ result += map[bits >> 2 & 63];
1572
+ result += map[bits << 4 & 63];
1573
+ result += map[64];
1574
+ result += map[64];
1560
1575
  }
1561
1576
  return result;
1562
1577
  }
@@ -1985,7 +2000,7 @@ function writeFoldedLines(state, count) {
1985
2000
  }
1986
2001
  }
1987
2002
  function readPlainScalar(state, nodeIndent, withinFlowCollection) {
1988
- var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;
2003
+ var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, { kind: _kind, result: _result } = state, ch;
1989
2004
  ch = state.input.charCodeAt(state.position);
1990
2005
  if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {
1991
2006
  return false;
@@ -2315,7 +2330,7 @@ function readBlockScalar(state, nodeIndent) {
2315
2330
  return true;
2316
2331
  }
2317
2332
  function readBlockSequence(state, nodeIndent) {
2318
- var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;
2333
+ var _line, { tag: _tag, anchor: _anchor } = state, _result = [], following, detected = false, ch;
2319
2334
  if (state.firstTabInLine !== -1)
2320
2335
  return false;
2321
2336
  if (state.anchor !== null) {
@@ -2364,7 +2379,7 @@ function readBlockSequence(state, nodeIndent) {
2364
2379
  return false;
2365
2380
  }
2366
2381
  function readBlockMapping(state, nodeIndent, flowIndent) {
2367
- var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
2382
+ var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, { tag: _tag, anchor: _anchor } = state, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
2368
2383
  if (state.firstTabInLine !== -1)
2369
2384
  return false;
2370
2385
  if (state.anchor !== null) {
@@ -2586,7 +2601,7 @@ function readAlias(state) {
2586
2601
  return true;
2587
2602
  }
2588
2603
  function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
2589
- var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;
2604
+ var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type, flowIndent, blockIndent;
2590
2605
  if (state.listener !== null) {
2591
2606
  state.listener("open", state);
2592
2607
  }
@@ -2668,10 +2683,10 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact
2668
2683
  throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"');
2669
2684
  }
2670
2685
  for (typeIndex = 0, typeQuantity = state.implicitTypes.length;typeIndex < typeQuantity; typeIndex += 1) {
2671
- type2 = state.implicitTypes[typeIndex];
2672
- if (type2.resolve(state.result)) {
2673
- state.result = type2.construct(state.result);
2674
- state.tag = type2.tag;
2686
+ type = state.implicitTypes[typeIndex];
2687
+ if (type.resolve(state.result)) {
2688
+ state.result = type.construct(state.result);
2689
+ state.tag = type.tag;
2675
2690
  if (state.anchor !== null) {
2676
2691
  state.anchorMap[state.anchor] = state.result;
2677
2692
  }
@@ -2680,27 +2695,27 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact
2680
2695
  }
2681
2696
  } else if (state.tag !== "!") {
2682
2697
  if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) {
2683
- type2 = state.typeMap[state.kind || "fallback"][state.tag];
2698
+ type = state.typeMap[state.kind || "fallback"][state.tag];
2684
2699
  } else {
2685
- type2 = null;
2700
+ type = null;
2686
2701
  typeList = state.typeMap.multi[state.kind || "fallback"];
2687
2702
  for (typeIndex = 0, typeQuantity = typeList.length;typeIndex < typeQuantity; typeIndex += 1) {
2688
2703
  if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
2689
- type2 = typeList[typeIndex];
2704
+ type = typeList[typeIndex];
2690
2705
  break;
2691
2706
  }
2692
2707
  }
2693
2708
  }
2694
- if (!type2) {
2709
+ if (!type) {
2695
2710
  throwError(state, "unknown tag !<" + state.tag + ">");
2696
2711
  }
2697
- if (state.result !== null && type2.kind !== state.kind) {
2698
- throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"');
2712
+ if (state.result !== null && type.kind !== state.kind) {
2713
+ throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"');
2699
2714
  }
2700
- if (!type2.resolve(state.result, state.tag)) {
2715
+ if (!type.resolve(state.result, state.tag)) {
2701
2716
  throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag");
2702
2717
  } else {
2703
- state.result = type2.construct(state.result, state.tag);
2718
+ state.result = type.construct(state.result, state.tag);
2704
2719
  if (state.anchor !== null) {
2705
2720
  state.anchorMap[state.anchor] = state.result;
2706
2721
  }
@@ -2904,21 +2919,21 @@ var DEPRECATED_BOOLEANS_SYNTAX = [
2904
2919
  "OFF"
2905
2920
  ];
2906
2921
  var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;
2907
- function compileStyleMap(schema2, map2) {
2908
- var result, keys, index, length, tag, style, type2;
2909
- if (map2 === null)
2922
+ function compileStyleMap(schema, map) {
2923
+ var result, keys, index, length, tag, style, type;
2924
+ if (map === null)
2910
2925
  return {};
2911
2926
  result = {};
2912
- keys = Object.keys(map2);
2927
+ keys = Object.keys(map);
2913
2928
  for (index = 0, length = keys.length;index < length; index += 1) {
2914
2929
  tag = keys[index];
2915
- style = String(map2[tag]);
2930
+ style = String(map[tag]);
2916
2931
  if (tag.slice(0, 2) === "!!") {
2917
2932
  tag = "tag:yaml.org,2002:" + tag.slice(2);
2918
2933
  }
2919
- type2 = schema2.compiledTypeMap["fallback"][tag];
2920
- if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) {
2921
- style = type2.styleAliases[style];
2934
+ type = schema.compiledTypeMap["fallback"][tag];
2935
+ if (type && _hasOwnProperty.call(type.styleAliases, style)) {
2936
+ style = type.styleAliases[style];
2922
2937
  }
2923
2938
  result[tag] = style;
2924
2939
  }
@@ -2988,11 +3003,11 @@ function generateNextLine(state, level) {
2988
3003
  return `
2989
3004
  ` + common.repeat(" ", state.indent * level);
2990
3005
  }
2991
- function testImplicitResolving(state, str2) {
2992
- var index, length, type2;
3006
+ function testImplicitResolving(state, str) {
3007
+ var index, length, type;
2993
3008
  for (index = 0, length = state.implicitTypes.length;index < length; index += 1) {
2994
- type2 = state.implicitTypes[index];
2995
- if (type2.resolve(str2)) {
3009
+ type = state.implicitTypes[index];
3010
+ if (type.resolve(str)) {
2996
3011
  return true;
2997
3012
  }
2998
3013
  }
@@ -3038,7 +3053,7 @@ var STYLE_LITERAL = 3;
3038
3053
  var STYLE_FOLDED = 4;
3039
3054
  var STYLE_DOUBLE = 5;
3040
3055
  function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {
3041
- var i2;
3056
+ var i;
3042
3057
  var char = 0;
3043
3058
  var prevChar = null;
3044
3059
  var hasLineBreak = false;
@@ -3047,8 +3062,8 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te
3047
3062
  var previousLineBreak = -1;
3048
3063
  var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1));
3049
3064
  if (singleLineOnly || forceQuotes) {
3050
- for (i2 = 0;i2 < string.length; char >= 65536 ? i2 += 2 : i2++) {
3051
- char = codePointAt(string, i2);
3065
+ for (i = 0;i < string.length; char >= 65536 ? i += 2 : i++) {
3066
+ char = codePointAt(string, i);
3052
3067
  if (!isPrintable(char)) {
3053
3068
  return STYLE_DOUBLE;
3054
3069
  }
@@ -3056,13 +3071,13 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te
3056
3071
  prevChar = char;
3057
3072
  }
3058
3073
  } else {
3059
- for (i2 = 0;i2 < string.length; char >= 65536 ? i2 += 2 : i2++) {
3060
- char = codePointAt(string, i2);
3074
+ for (i = 0;i < string.length; char >= 65536 ? i += 2 : i++) {
3075
+ char = codePointAt(string, i);
3061
3076
  if (char === CHAR_LINE_FEED) {
3062
3077
  hasLineBreak = true;
3063
3078
  if (shouldTrackWidth) {
3064
- hasFoldableLine = hasFoldableLine || i2 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
3065
- previousLineBreak = i2;
3079
+ hasFoldableLine = hasFoldableLine || i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ";
3080
+ previousLineBreak = i;
3066
3081
  }
3067
3082
  } else if (!isPrintable(char)) {
3068
3083
  return STYLE_DOUBLE;
@@ -3070,7 +3085,7 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, te
3070
3085
  plain = plain && isPlainSafe(char, prevChar, inblock);
3071
3086
  prevChar = char;
3072
3087
  }
3073
- hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i2 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ");
3088
+ hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " ");
3074
3089
  }
3075
3090
  if (!hasLineBreak && !hasFoldableLine) {
3076
3091
  if (plain && !forceQuotes && !testAmbiguousType(string)) {
@@ -3099,8 +3114,8 @@ function writeScalar(state, string, level, iskey, inblock) {
3099
3114
  var indent = state.indent * Math.max(1, level);
3100
3115
  var lineWidth = state.lineWidth === -1 ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);
3101
3116
  var singleLineOnly = iskey || state.flowLevel > -1 && level >= state.flowLevel;
3102
- function testAmbiguity(string2) {
3103
- return testImplicitResolving(state, string2);
3117
+ function testAmbiguity(string) {
3118
+ return testImplicitResolving(state, string);
3104
3119
  }
3105
3120
  switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {
3106
3121
  case STYLE_PLAIN:
@@ -3186,13 +3201,13 @@ function escapeString(string) {
3186
3201
  var result = "";
3187
3202
  var char = 0;
3188
3203
  var escapeSeq;
3189
- for (var i2 = 0;i2 < string.length; char >= 65536 ? i2 += 2 : i2++) {
3190
- char = codePointAt(string, i2);
3204
+ for (var i = 0;i < string.length; char >= 65536 ? i += 2 : i++) {
3205
+ char = codePointAt(string, i);
3191
3206
  escapeSeq = ESCAPE_SEQUENCES[char];
3192
3207
  if (!escapeSeq && isPrintable(char)) {
3193
- result += string[i2];
3208
+ result += string[i];
3194
3209
  if (char >= 65536)
3195
- result += string[i2 + 1];
3210
+ result += string[i + 1];
3196
3211
  } else {
3197
3212
  result += escapeSeq || encodeHex(char);
3198
3213
  }
@@ -3314,28 +3329,28 @@ function writeBlockMapping(state, level, object, compact) {
3314
3329
  state.dump = _result || "{}";
3315
3330
  }
3316
3331
  function detectType(state, object, explicit) {
3317
- var _result, typeList, index, length, type2, style;
3332
+ var _result, typeList, index, length, type, style;
3318
3333
  typeList = explicit ? state.explicitTypes : state.implicitTypes;
3319
3334
  for (index = 0, length = typeList.length;index < length; index += 1) {
3320
- type2 = typeList[index];
3321
- if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === "object" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) {
3335
+ type = typeList[index];
3336
+ if ((type.instanceOf || type.predicate) && (!type.instanceOf || typeof object === "object" && object instanceof type.instanceOf) && (!type.predicate || type.predicate(object))) {
3322
3337
  if (explicit) {
3323
- if (type2.multi && type2.representName) {
3324
- state.tag = type2.representName(object);
3338
+ if (type.multi && type.representName) {
3339
+ state.tag = type.representName(object);
3325
3340
  } else {
3326
- state.tag = type2.tag;
3341
+ state.tag = type.tag;
3327
3342
  }
3328
3343
  } else {
3329
3344
  state.tag = "?";
3330
3345
  }
3331
- if (type2.represent) {
3332
- style = state.styleMap[type2.tag] || type2.defaultStyle;
3333
- if (_toString.call(type2.represent) === "[object Function]") {
3334
- _result = type2.represent(object, style);
3335
- } else if (_hasOwnProperty.call(type2.represent, style)) {
3336
- _result = type2.represent[style](object, style);
3346
+ if (type.represent) {
3347
+ style = state.styleMap[type.tag] || type.defaultStyle;
3348
+ if (_toString.call(type.represent) === "[object Function]") {
3349
+ _result = type.represent(object, style);
3350
+ } else if (_hasOwnProperty.call(type.represent, style)) {
3351
+ _result = type.represent[style](object, style);
3337
3352
  } else {
3338
- throw new exception("!<" + type2.tag + '> tag resolver accepts not "' + style + '" style');
3353
+ throw new exception("!<" + type.tag + '> tag resolver accepts not "' + style + '" style');
3339
3354
  }
3340
3355
  state.dump = _result;
3341
3356
  }
@@ -3350,13 +3365,13 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq) {
3350
3365
  if (!detectType(state, object, false)) {
3351
3366
  detectType(state, object, true);
3352
3367
  }
3353
- var type2 = _toString.call(state.dump);
3368
+ var type = _toString.call(state.dump);
3354
3369
  var inblock = block;
3355
3370
  var tagStr;
3356
3371
  if (block) {
3357
3372
  block = state.flowLevel < 0 || state.flowLevel > level;
3358
3373
  }
3359
- var objectOrArray = type2 === "[object Object]" || type2 === "[object Array]", duplicateIndex, duplicate;
3374
+ var objectOrArray = type === "[object Object]" || type === "[object Array]", duplicateIndex, duplicate;
3360
3375
  if (objectOrArray) {
3361
3376
  duplicateIndex = state.duplicates.indexOf(object);
3362
3377
  duplicate = duplicateIndex !== -1;
@@ -3370,7 +3385,7 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq) {
3370
3385
  if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {
3371
3386
  state.usedDuplicates[duplicateIndex] = true;
3372
3387
  }
3373
- if (type2 === "[object Object]") {
3388
+ if (type === "[object Object]") {
3374
3389
  if (block && Object.keys(state.dump).length !== 0) {
3375
3390
  writeBlockMapping(state, level, state.dump, compact);
3376
3391
  if (duplicate) {
@@ -3382,7 +3397,7 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq) {
3382
3397
  state.dump = "&ref_" + duplicateIndex + " " + state.dump;
3383
3398
  }
3384
3399
  }
3385
- } else if (type2 === "[object Array]") {
3400
+ } else if (type === "[object Array]") {
3386
3401
  if (block && state.dump.length !== 0) {
3387
3402
  if (state.noArrayIndent && !isblockseq && level > 0) {
3388
3403
  writeBlockSequence(state, level - 1, state.dump, compact);
@@ -3398,16 +3413,16 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq) {
3398
3413
  state.dump = "&ref_" + duplicateIndex + " " + state.dump;
3399
3414
  }
3400
3415
  }
3401
- } else if (type2 === "[object String]") {
3416
+ } else if (type === "[object String]") {
3402
3417
  if (state.tag !== "?") {
3403
3418
  writeScalar(state, state.dump, level, iskey, inblock);
3404
3419
  }
3405
- } else if (type2 === "[object Undefined]") {
3420
+ } else if (type === "[object Undefined]") {
3406
3421
  return false;
3407
3422
  } else {
3408
3423
  if (state.skipInvalid)
3409
3424
  return false;
3410
- throw new exception("unacceptable kind of an object to dump " + type2);
3425
+ throw new exception("unacceptable kind of an object to dump " + type);
3411
3426
  }
3412
3427
  if (state.tag !== null && state.tag !== "?") {
3413
3428
  tagStr = encodeURI(state.tag[0] === "!" ? state.tag.slice(1) : state.tag).replace(/!/g, "%21");
@@ -3838,8 +3853,8 @@ function normalizePath(path) {
3838
3853
  }
3839
3854
  function lineNumber(content, offset) {
3840
3855
  let count = 1;
3841
- for (let i2 = 0;i2 < offset && i2 < content.length; i2++) {
3842
- if (content[i2] === `
3856
+ for (let i = 0;i < offset && i < content.length; i++) {
3857
+ if (content[i] === `
3843
3858
  `)
3844
3859
  count++;
3845
3860
  }
@@ -3847,10 +3862,10 @@ function lineNumber(content, offset) {
3847
3862
  }
3848
3863
  function buildLineIndex(content) {
3849
3864
  const offsets = [0];
3850
- for (let i2 = 0;i2 < content.length; i2++) {
3851
- if (content[i2] === `
3865
+ for (let i = 0;i < content.length; i++) {
3866
+ if (content[i] === `
3852
3867
  `)
3853
- offsets.push(i2 + 1);
3868
+ offsets.push(i + 1);
3854
3869
  }
3855
3870
  return {
3856
3871
  lineAt(offset) {
@@ -4065,8 +4080,8 @@ var django = {
4065
4080
  const pyFiles = ctx.iterFiles(PY_EXTS3);
4066
4081
  const dirOf2 = (f) => {
4067
4082
  const norm = f.replace(/\\/g, "/");
4068
- const i2 = norm.lastIndexOf("/");
4069
- return i2 < 0 ? "" : norm.slice(0, i2);
4083
+ const i = norm.lastIndexOf("/");
4084
+ return i < 0 ? "" : norm.slice(0, i);
4070
4085
  };
4071
4086
  const classesByDir = /* @__PURE__ */ new Map;
4072
4087
  const funcsByDir = /* @__PURE__ */ new Map;
@@ -4260,67 +4275,67 @@ var PAGE_RENDER_RE = /\bres\s*\.\s*render\s*\(/;
4260
4275
  var PAGE_SENDFILE_RE = /\bres\s*\.\s*sendFile\s*\(/;
4261
4276
  function findMatchingParen(content, start) {
4262
4277
  let depth = 0;
4263
- let i2 = start;
4278
+ let i = start;
4264
4279
  const len = content.length;
4265
- while (i2 < len) {
4266
- const ch = content[i2];
4267
- if (ch === "/" && content[i2 + 1] === "/") {
4280
+ while (i < len) {
4281
+ const ch = content[i];
4282
+ if (ch === "/" && content[i + 1] === "/") {
4268
4283
  const nl = content.indexOf(`
4269
- `, i2);
4284
+ `, i);
4270
4285
  if (nl === -1)
4271
4286
  return -1;
4272
- i2 = nl + 1;
4287
+ i = nl + 1;
4273
4288
  continue;
4274
4289
  }
4275
- if (ch === "/" && content[i2 + 1] === "*") {
4276
- const end = content.indexOf("*/", i2 + 2);
4290
+ if (ch === "/" && content[i + 1] === "*") {
4291
+ const end = content.indexOf("*/", i + 2);
4277
4292
  if (end === -1)
4278
4293
  return -1;
4279
- i2 = end + 2;
4294
+ i = end + 2;
4280
4295
  continue;
4281
4296
  }
4282
4297
  if (ch === "'" || ch === '"') {
4283
- i2++;
4284
- while (i2 < len) {
4285
- const c = content[i2];
4298
+ i++;
4299
+ while (i < len) {
4300
+ const c = content[i];
4286
4301
  if (c === "\\") {
4287
- i2 += 2;
4302
+ i += 2;
4288
4303
  continue;
4289
4304
  }
4290
4305
  if (c === ch) {
4291
- i2++;
4306
+ i++;
4292
4307
  break;
4293
4308
  }
4294
- i2++;
4309
+ i++;
4295
4310
  }
4296
4311
  continue;
4297
4312
  }
4298
4313
  if (ch === "`") {
4299
- i2++;
4300
- while (i2 < len) {
4301
- const c = content[i2];
4314
+ i++;
4315
+ while (i < len) {
4316
+ const c = content[i];
4302
4317
  if (c === "\\") {
4303
- i2 += 2;
4318
+ i += 2;
4304
4319
  continue;
4305
4320
  }
4306
4321
  if (c === "`") {
4307
- i2++;
4322
+ i++;
4308
4323
  break;
4309
4324
  }
4310
- if (c === "$" && content[i2 + 1] === "{") {
4311
- i2 += 2;
4325
+ if (c === "$" && content[i + 1] === "{") {
4326
+ i += 2;
4312
4327
  let d = 1;
4313
- while (i2 < len && d > 0) {
4314
- const cc = content[i2];
4328
+ while (i < len && d > 0) {
4329
+ const cc = content[i];
4315
4330
  if (cc === "{")
4316
4331
  d++;
4317
4332
  else if (cc === "}")
4318
4333
  d--;
4319
- i2++;
4334
+ i++;
4320
4335
  }
4321
4336
  continue;
4322
4337
  }
4323
- i2++;
4338
+ i++;
4324
4339
  }
4325
4340
  continue;
4326
4341
  }
@@ -4329,9 +4344,9 @@ function findMatchingParen(content, start) {
4329
4344
  else if (ch === ")" || ch === "]" || ch === "}") {
4330
4345
  depth--;
4331
4346
  if (depth === 0 && ch === ")")
4332
- return i2;
4347
+ return i;
4333
4348
  }
4334
- i2++;
4349
+ i++;
4335
4350
  }
4336
4351
  return -1;
4337
4352
  }
@@ -4492,47 +4507,47 @@ var express = {
4492
4507
  };
4493
4508
  function maskComments(src) {
4494
4509
  let out = "";
4495
- let i2 = 0;
4510
+ let i = 0;
4496
4511
  const n = src.length;
4497
- while (i2 < n) {
4498
- const c = src[i2];
4512
+ while (i < n) {
4513
+ const c = src[i];
4499
4514
  if (c === '"' || c === "'" || c === "`") {
4500
4515
  out += c;
4501
- i2++;
4502
- while (i2 < n) {
4503
- if (src[i2] === "\\" && i2 + 1 < n) {
4504
- out += src[i2] + src[i2 + 1];
4505
- i2 += 2;
4516
+ i++;
4517
+ while (i < n) {
4518
+ if (src[i] === "\\" && i + 1 < n) {
4519
+ out += src[i] + src[i + 1];
4520
+ i += 2;
4506
4521
  continue;
4507
4522
  }
4508
- out += src[i2];
4509
- const done = src[i2] === c;
4510
- i2++;
4523
+ out += src[i];
4524
+ const done = src[i] === c;
4525
+ i++;
4511
4526
  if (done)
4512
4527
  break;
4513
4528
  }
4514
- } else if (c === "/" && src[i2 + 1] === "/") {
4515
- while (i2 < n && src[i2] !== `
4529
+ } else if (c === "/" && src[i + 1] === "/") {
4530
+ while (i < n && src[i] !== `
4516
4531
  `) {
4517
4532
  out += " ";
4518
- i2++;
4533
+ i++;
4519
4534
  }
4520
- } else if (c === "/" && src[i2 + 1] === "*") {
4535
+ } else if (c === "/" && src[i + 1] === "*") {
4521
4536
  out += " ";
4522
- i2 += 2;
4523
- while (i2 < n && !(src[i2] === "*" && src[i2 + 1] === "/")) {
4524
- out += src[i2] === `
4537
+ i += 2;
4538
+ while (i < n && !(src[i] === "*" && src[i + 1] === "/")) {
4539
+ out += src[i] === `
4525
4540
  ` ? `
4526
4541
  ` : " ";
4527
- i2++;
4542
+ i++;
4528
4543
  }
4529
- if (i2 < n) {
4544
+ if (i < n) {
4530
4545
  out += " ";
4531
- i2 += 2;
4546
+ i += 2;
4532
4547
  }
4533
4548
  } else {
4534
4549
  out += c;
4535
- i2++;
4550
+ i++;
4536
4551
  }
4537
4552
  }
4538
4553
  return out;
@@ -4995,8 +5010,8 @@ var GO_EXTS = [".go"];
4995
5010
  var GO_GROUP_RE = /(\w+)\s*[:=]+\s*(\w+)\.Group\s*\(\s*['"]([^'"]+)['"]/g;
4996
5011
  var dirOf = (f) => {
4997
5012
  const norm = f.replace(/\\/g, "/");
4998
- const i2 = norm.lastIndexOf("/");
4999
- return i2 < 0 ? "" : norm.slice(0, i2);
5013
+ const i = norm.lastIndexOf("/");
5014
+ return i < 0 ? "" : norm.slice(0, i);
5000
5015
  };
5001
5016
  var GORILLA_WS_IMPORT_RE = /["']github\.com\/gorilla\/websocket["']/;
5002
5017
  var UPGRADE_CALL_RE = /\.\s*Upgrade\s*\(/;
@@ -5010,26 +5025,26 @@ function findWebsocketHandlers(ctx, goFiles) {
5010
5025
  if (!GORILLA_WS_IMPORT_RE.test(content))
5011
5026
  continue;
5012
5027
  const dir = dirOf(f);
5013
- const set2 = byDir.get(dir) ?? /* @__PURE__ */ new Set;
5028
+ const set = byDir.get(dir) ?? /* @__PURE__ */ new Set;
5014
5029
  for (const m of content.matchAll(funcRe)) {
5015
5030
  const name = m[1];
5016
5031
  const bodyStart = m.index + m[0].length;
5017
5032
  let depth = 1;
5018
- let i2 = bodyStart;
5033
+ let i = bodyStart;
5019
5034
  const len = content.length;
5020
- while (i2 < len && depth > 0) {
5021
- const ch = content[i2];
5035
+ while (i < len && depth > 0) {
5036
+ const ch = content[i];
5022
5037
  if (ch === "{")
5023
5038
  depth++;
5024
5039
  else if (ch === "}")
5025
5040
  depth--;
5026
- i2++;
5041
+ i++;
5027
5042
  }
5028
- const body = content.slice(bodyStart, i2 - 1);
5043
+ const body = content.slice(bodyStart, i - 1);
5029
5044
  if (UPGRADE_CALL_RE.test(body))
5030
- set2.add(name);
5045
+ set.add(name);
5031
5046
  }
5032
- byDir.set(dir, set2);
5047
+ byDir.set(dir, set);
5033
5048
  }
5034
5049
  return byDir;
5035
5050
  }
@@ -5410,8 +5425,8 @@ var rails = {
5410
5425
  const nsStack = [];
5411
5426
  let depth = 0;
5412
5427
  const prefixAtLine = new Array(sourceLines.length + 1).fill("");
5413
- for (let i2 = 0;i2 < sourceLines.length; i2++) {
5414
- const line = sourceLines[i2];
5428
+ for (let i = 0;i < sourceLines.length; i++) {
5429
+ const line = sourceLines[i];
5415
5430
  const code = line.replace(/#.*$/, "");
5416
5431
  const nsM = namespaceLineRe.exec(code);
5417
5432
  if (nsM) {
@@ -5428,7 +5443,7 @@ var rails = {
5428
5443
  if (doMatches)
5429
5444
  depth++;
5430
5445
  const prefix = nsStack.length ? "/" + nsStack.map((n) => n.name).join("/") : "";
5431
- prefixAtLine[i2 + 1] = prefix;
5446
+ prefixAtLine[i + 1] = prefix;
5432
5447
  }
5433
5448
  const prefixAt = (offset) => {
5434
5449
  const ln = lines.lineAt(offset);
@@ -5696,15 +5711,15 @@ function splitTopLevel(s) {
5696
5711
  const parts = [];
5697
5712
  let depth = 0;
5698
5713
  let start = 0;
5699
- for (let i2 = 0;i2 < s.length; i2++) {
5700
- const c = s[i2];
5714
+ for (let i = 0;i < s.length; i++) {
5715
+ const c = s[i];
5701
5716
  if (c === "<" || c === "{" || c === "[" || c === "(")
5702
5717
  depth++;
5703
5718
  else if (c === ">" || c === "}" || c === "]" || c === ")")
5704
5719
  depth--;
5705
5720
  else if (c === "," && depth === 0) {
5706
- parts.push(s.slice(start, i2));
5707
- start = i2 + 1;
5721
+ parts.push(s.slice(start, i));
5722
+ start = i + 1;
5708
5723
  }
5709
5724
  }
5710
5725
  parts.push(s.slice(start));
@@ -5712,14 +5727,14 @@ function splitTopLevel(s) {
5712
5727
  }
5713
5728
  function findTopLevelChar(s, targets) {
5714
5729
  let depth = 0;
5715
- for (let i2 = 0;i2 < s.length; i2++) {
5716
- const c = s[i2];
5730
+ for (let i = 0;i < s.length; i++) {
5731
+ const c = s[i];
5717
5732
  if (c === "<" || c === "{" || c === "[" || c === "(")
5718
5733
  depth++;
5719
5734
  else if (c === ">" || c === "}" || c === "]" || c === ")")
5720
5735
  depth--;
5721
5736
  else if (depth === 0 && targets.includes(c))
5722
- return i2;
5737
+ return i;
5723
5738
  }
5724
5739
  return -1;
5725
5740
  }
@@ -5743,14 +5758,14 @@ function parseParams(funcParams) {
5743
5758
  if (trimmed.startsWith("{")) {
5744
5759
  let depth = 0;
5745
5760
  let close = -1;
5746
- for (let i2 = 0;i2 < trimmed.length; i2++) {
5747
- const c = trimmed[i2];
5761
+ for (let i = 0;i < trimmed.length; i++) {
5762
+ const c = trimmed[i];
5748
5763
  if (c === "{")
5749
5764
  depth++;
5750
5765
  else if (c === "}") {
5751
5766
  depth--;
5752
5767
  if (depth === 0) {
5753
- close = i2;
5768
+ close = i;
5754
5769
  break;
5755
5770
  }
5756
5771
  }
@@ -5882,11 +5897,11 @@ var openapi = {
5882
5897
  for (const p of allParams) {
5883
5898
  if (!p || typeof p !== "object")
5884
5899
  continue;
5885
- const schema2 = p.schema;
5900
+ const schema = p.schema;
5886
5901
  params.push({
5887
5902
  name: p.name ?? "?",
5888
5903
  location: p.in ?? "query",
5889
- type: schema2?.type,
5904
+ type: schema?.type,
5890
5905
  required: p.required ?? false
5891
5906
  });
5892
5907
  }
@@ -5955,46 +5970,46 @@ function makeConnectResolver(ctx) {
5955
5970
  }
5956
5971
  function stripComments(src) {
5957
5972
  let out = "";
5958
- for (let i2 = 0;i2 < src.length; ) {
5959
- const c = src[i2];
5973
+ for (let i = 0;i < src.length; ) {
5974
+ const c = src[i];
5960
5975
  if (c === '"' || c === "'") {
5961
5976
  out += c;
5962
- i2++;
5963
- while (i2 < src.length && src[i2] !== c) {
5964
- if (src[i2] === "\\" && i2 + 1 < src.length) {
5965
- out += src[i2] + src[i2 + 1];
5966
- i2 += 2;
5977
+ i++;
5978
+ while (i < src.length && src[i] !== c) {
5979
+ if (src[i] === "\\" && i + 1 < src.length) {
5980
+ out += src[i] + src[i + 1];
5981
+ i += 2;
5967
5982
  } else {
5968
- out += src[i2];
5969
- i2++;
5983
+ out += src[i];
5984
+ i++;
5970
5985
  }
5971
5986
  }
5972
- if (i2 < src.length) {
5973
- out += src[i2];
5974
- i2++;
5987
+ if (i < src.length) {
5988
+ out += src[i];
5989
+ i++;
5975
5990
  }
5976
- } else if (c === "/" && src[i2 + 1] === "/") {
5977
- while (i2 < src.length && src[i2] !== `
5991
+ } else if (c === "/" && src[i + 1] === "/") {
5992
+ while (i < src.length && src[i] !== `
5978
5993
  `) {
5979
5994
  out += " ";
5980
- i2++;
5995
+ i++;
5981
5996
  }
5982
- } else if (c === "/" && src[i2 + 1] === "*") {
5997
+ } else if (c === "/" && src[i + 1] === "*") {
5983
5998
  out += " ";
5984
- i2 += 2;
5985
- while (i2 < src.length && !(src[i2] === "*" && src[i2 + 1] === "/")) {
5986
- out += src[i2] === `
5999
+ i += 2;
6000
+ while (i < src.length && !(src[i] === "*" && src[i + 1] === "/")) {
6001
+ out += src[i] === `
5987
6002
  ` ? `
5988
6003
  ` : " ";
5989
- i2++;
6004
+ i++;
5990
6005
  }
5991
- if (i2 < src.length) {
6006
+ if (i < src.length) {
5992
6007
  out += " ";
5993
- i2 += 2;
6008
+ i += 2;
5994
6009
  }
5995
6010
  } else {
5996
6011
  out += c;
5997
- i2++;
6012
+ i++;
5998
6013
  }
5999
6014
  }
6000
6015
  return out;
@@ -6123,33 +6138,33 @@ function inferServiceType(absDir) {
6123
6138
  try {
6124
6139
  const content = readFileSync42(join10(absDir, "package.json"), "utf-8");
6125
6140
  const lower = content.toLowerCase();
6126
- for (const [dep, type2] of PKG_DEP_TO_TYPE) {
6141
+ for (const [dep, type] of PKG_DEP_TO_TYPE) {
6127
6142
  if (lower.includes(`"${dep}"`))
6128
- return type2;
6143
+ return type;
6129
6144
  }
6130
6145
  return "generic";
6131
6146
  } catch {}
6132
6147
  try {
6133
6148
  const content = readFileSync42(join10(absDir, "go.mod"), "utf-8");
6134
- for (const [dep, type2] of GO_DEP_TO_TYPE) {
6149
+ for (const [dep, type] of GO_DEP_TO_TYPE) {
6135
6150
  if (content.includes(dep))
6136
- return type2;
6151
+ return type;
6137
6152
  }
6138
6153
  return "generic";
6139
6154
  } catch {}
6140
6155
  try {
6141
6156
  const content = readFileSync42(join10(absDir, "Cargo.toml"), "utf-8");
6142
- for (const [dep, type2] of CARGO_DEP_TO_TYPE) {
6157
+ for (const [dep, type] of CARGO_DEP_TO_TYPE) {
6143
6158
  if (content.includes(dep))
6144
- return type2;
6159
+ return type;
6145
6160
  }
6146
6161
  return "generic";
6147
6162
  } catch {}
6148
6163
  try {
6149
6164
  const content = readFileSync42(join10(absDir, "requirements.txt"), "utf-8");
6150
- for (const [dep, type2] of PY_DEP_TO_TYPE) {
6165
+ for (const [dep, type] of PY_DEP_TO_TYPE) {
6151
6166
  if (content.includes(dep))
6152
- return type2;
6167
+ return type;
6153
6168
  }
6154
6169
  return "generic";
6155
6170
  } catch {}
@@ -6965,10 +6980,10 @@ function mapAppWithSurface(appPath, repoRoot, options) {
6965
6980
  }
6966
6981
  const narrow = map2(absApp, { includeInternal: false });
6967
6982
  if (narrow.frameworks.length > 0 && narrow.endpoints.all.length > 0) {
6968
- const rebased2 = rebaseFileToRepoRoot(narrow.endpoints.all, absApp, absRoot);
6983
+ const rebased = rebaseFileToRepoRoot(narrow.endpoints.all, absApp, absRoot);
6969
6984
  return {
6970
6985
  mode: "surface",
6971
- endpoints: consolidateBySameRoute(rebased2),
6986
+ endpoints: consolidateBySameRoute(rebased),
6972
6987
  frameworks: narrow.frameworks
6973
6988
  };
6974
6989
  }
@@ -7006,6 +7021,7 @@ var TASK_TYPE_LABELS = {
7006
7021
  apiEndpoints: "API Endpoints",
7007
7022
  cloudResourceEndpoints: "Cloud Resources"
7008
7023
  };
7024
+ var NON_SERVICE_TYPES = ["cloud_resource", "storage", "database"];
7009
7025
  function sanitizeName(name) {
7010
7026
  return name.toLowerCase().replace(/[^a-z0-9-_.]/g, "_");
7011
7027
  }
@@ -7018,6 +7034,129 @@ function toAppMetadata(app) {
7018
7034
  location: app.location
7019
7035
  };
7020
7036
  }
7037
+ async function runWhiteboxAttackSurfaceApp(app, appIndex, input) {
7038
+ const {
7039
+ codebasePath,
7040
+ model,
7041
+ session,
7042
+ authConfig,
7043
+ abortSignal,
7044
+ eventBus,
7045
+ attackSurfaceRegistry,
7046
+ onStepFinish,
7047
+ onCacheMetrics,
7048
+ openAIReasoningEffort,
7049
+ enableThinking,
7050
+ thinkingEffort,
7051
+ projectThreatModel,
7052
+ environments,
7053
+ surfaceIntegrationEnabled,
7054
+ isSingleAppRepo,
7055
+ umbrellaId,
7056
+ mintChildId,
7057
+ agentLimiter,
7058
+ subagentSpawner,
7059
+ hooks: sharedHooks,
7060
+ seams
7061
+ } = input;
7062
+ const appNodeId = `app:${sanitizeName(app.name)}`;
7063
+ const hooksForApp = resolveItemHooks(sharedHooks, seams, app, appIndex);
7064
+ let failed = false;
7065
+ const spawnDiscoveryAgent = async (type, objective) => {
7066
+ const subagentId = mintChildId(TASK_TYPE_LABELS[type]);
7067
+ log4.debug(`Phase 2: spawning agent id="${subagentId}" parent="${appNodeId}" (app="${app.name}", type=${type}, appType=${app.type})`);
7068
+ const spawner = subagentSpawner ?? inProcessSubagentSpawner;
7069
+ try {
7070
+ await agentLimiter(() => spawner.spawn({
7071
+ spec: {
7072
+ type: "code",
7073
+ codebasePath,
7074
+ objective,
7075
+ system: WHITEBOX_DISCOVERY_SYSTEM_PROMPT2,
7076
+ excludeTools: ["document_app"],
7077
+ responseSchema: DiscoverySummarySchema2,
7078
+ projectThreatModel,
7079
+ attackSurfaceRegistry
7080
+ },
7081
+ runtime: {
7082
+ model,
7083
+ session,
7084
+ authConfig,
7085
+ abortSignal,
7086
+ enableThinking,
7087
+ thinkingEffort,
7088
+ openAIReasoningEffort,
7089
+ onStepFinish,
7090
+ onCacheMetrics,
7091
+ backends: hooksForApp.backends,
7092
+ sandbox: hooksForApp.sandbox,
7093
+ languageModelMiddleware: hooksForApp.languageModelMiddleware,
7094
+ usageRecorder: hooksForApp.usageRecorder,
7095
+ streamIdFactory: hooksForApp.streamIdFactory
7096
+ },
7097
+ subagentId,
7098
+ subagentName: TASK_TYPE_LABELS[type],
7099
+ parentBus: eventBus,
7100
+ parentSubagentId: appNodeId,
7101
+ lifecycleInput: { app: app.name, type }
7102
+ }));
7103
+ log4.debug(`Phase 2: agent "${subagentId}" completed`);
7104
+ } catch (error) {
7105
+ log4.error(`Phase 2: agent "${subagentId}" FAILED`, error instanceof Error ? error : undefined, { error: String(error) });
7106
+ failed = true;
7107
+ }
7108
+ };
7109
+ const spawnPagesAgent = () => spawnDiscoveryAgent("pages", buildPagesDiscoveryObjective(codebasePath, app));
7110
+ const spawnApiEndpointsAgent = () => spawnDiscoveryAgent("apiEndpoints", buildApiEndpointsDiscoveryObjective(codebasePath, app));
7111
+ const spawnCloudResourceAgent = () => spawnDiscoveryAgent("cloudResourceEndpoints", buildCloudResourceEndpointsObjective(codebasePath, app, environments));
7112
+ try {
7113
+ if (NON_SERVICE_TYPES.includes(app.type)) {
7114
+ await spawnCloudResourceAgent();
7115
+ } else if (!surfaceIntegrationEnabled) {
7116
+ log4.debug(`${app.name}: legacy (surfaceIntegrationEnabled=false)`);
7117
+ await Promise.all([spawnPagesAgent(), spawnApiEndpointsAgent()]);
7118
+ } else {
7119
+ const surfaceResult = mapAppWithSurface(join16(codebasePath, app.location), codebasePath, { isSingleAppRepo });
7120
+ if (surfaceResult.mode === "surface") {
7121
+ log4.debug(`${app.name}: surface-driven (${surfaceResult.endpoints.length} endpoints, frameworks=${surfaceResult.frameworks.join(",")})`);
7122
+ await runAppEndpointDocumentation({
7123
+ codebasePath,
7124
+ app,
7125
+ endpoints: surfaceResult.endpoints,
7126
+ frameworks: surfaceResult.frameworks,
7127
+ model,
7128
+ session,
7129
+ authConfig,
7130
+ abortSignal,
7131
+ eventBus,
7132
+ attackSurfaceRegistry,
7133
+ onStepFinish,
7134
+ onCacheMetrics,
7135
+ openAIReasoningEffort,
7136
+ enableThinking,
7137
+ thinkingEffort,
7138
+ projectThreatModel,
7139
+ parentSubagentId: appNodeId,
7140
+ agentLimiter,
7141
+ subagentSpawner,
7142
+ hooks: hooksForApp,
7143
+ mintChildId
7144
+ });
7145
+ } else {
7146
+ log4.debug(`${app.name}: fallback (${surfaceResult.reason})`);
7147
+ await Promise.all([spawnPagesAgent(), spawnApiEndpointsAgent()]);
7148
+ }
7149
+ }
7150
+ } catch {
7151
+ failed = true;
7152
+ }
7153
+ eventBus?.emit("subagent-complete", {
7154
+ subagentId: appNodeId,
7155
+ status: failed ? "failed" : "completed",
7156
+ parentSubagentId: umbrellaId
7157
+ });
7158
+ return failed;
7159
+ }
7021
7160
  async function runWhiteboxAttackSurfaceWorkflow(input) {
7022
7161
  const {
7023
7162
  codebasePath,
@@ -7036,19 +7175,28 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7036
7175
  projectThreatModel,
7037
7176
  environments,
7038
7177
  surfaceIntegrationEnabled = true,
7039
- maxConcurrentAgents = MAX_CONCURRENT_AGENTS
7178
+ maxConcurrentAgents = MAX_CONCURRENT_AGENTS,
7179
+ subagentSpawner,
7180
+ hooks,
7181
+ seams: inputSeams
7040
7182
  } = input;
7183
+ const seams = inputSeams ?? inProcessSeams();
7184
+ const sharedHooks = { subagentSpawner, ...hooks };
7185
+ let nextChildOrdinal = 0;
7186
+ const mintChildId = (name) => seams.ids.newSessionId(name, nextChildOrdinal++);
7041
7187
  const agentSlots = pLimit(Math.max(1, maxConcurrentAgents));
7042
7188
  const agentLimiter = (fn) => agentSlots(fn);
7043
- const WORKFLOW_UMBRELLA_ID = newSessionId();
7044
- const appsAgent = new CodeAgent({
7189
+ const WORKFLOW_UMBRELLA_ID = mintChildId("whitebox-apps-discovery");
7190
+ if (input.incremental && !hooks?.backends)
7191
+ throw new Error("Incremental recon requires owned artifact backends");
7192
+ const appsAgent = new CodeAgent2({
7045
7193
  codebasePath,
7046
- objective: buildAppsDiscoveryObjective(codebasePath, domains, environments),
7047
- system: WHITEBOX_APPS_DISCOVERY_SYSTEM_PROMPT,
7194
+ objective: input.incremental ? buildIncrementalObjective(codebasePath, input.incremental.diffPath, input.incremental.assetsPath, input.incremental.existingResult, domains, environments).replace("- **Non-route changes** (e.g. utility functions, configs, tests) → skip", "- **Shared-library/configuration changes** → trace affected consumers and update only impacted endpoint assets; skip unrelated changes") + `
7195
+ Trace changed shared libraries, deleted files, and root/build/deployment configuration to the applications that consume them. A path outside an application directory does not prove that application is unaffected. Leave unrelated endpoint artifacts unchanged.` : buildAppsDiscoveryObjective(codebasePath, domains, environments),
7196
+ system: input.incremental ? WHITEBOX_DISCOVERY_SYSTEM_PROMPT2 : WHITEBOX_APPS_DISCOVERY_SYSTEM_PROMPT2,
7048
7197
  model,
7049
7198
  session,
7050
7199
  authConfig,
7051
- abortSignal,
7052
7200
  attackSurfaceRegistry,
7053
7201
  eventBus,
7054
7202
  subagentId: WORKFLOW_UMBRELLA_ID,
@@ -7058,9 +7206,12 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7058
7206
  openAIReasoningEffort,
7059
7207
  enableThinking,
7060
7208
  thinkingEffort,
7061
- responseSchema: AppsDiscoveryResultSchema,
7209
+ responseSchema: input.incremental ? IncrementalReconResultSchema : AppsDiscoveryResultSchema2,
7062
7210
  projectThreatModel,
7063
- excludeTools: ["document_endpoint"]
7211
+ excludeTools: input.incremental ? [] : ["document_endpoint"],
7212
+ ...sharedHooks,
7213
+ ...input.incremental ? { attackSurfaceArtifactsPath: input.incremental.assetsPath } : {},
7214
+ abortSignal
7064
7215
  });
7065
7216
  log4.info(`Phase 1: discovering apps in ${codebasePath}${domains?.length ? ` (${domains.length} known domains)` : ""}`);
7066
7217
  eventBus?.emit("subagent-spawn", {
@@ -7069,6 +7220,16 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7069
7220
  input: { codebasePath }
7070
7221
  });
7071
7222
  const appsResult = await agentLimiter(() => appsAgent.consume());
7223
+ if (input.incremental) {
7224
+ if (!hooks?.backends)
7225
+ throw new Error("Incremental recon requires owned artifact backends");
7226
+ const result = await readIncrementalReconAssets(hooks.backends, input.incremental.assetsPath, input.incremental.existingResult, abortSignal);
7227
+ eventBus?.emit("subagent-complete", {
7228
+ subagentId: WORKFLOW_UMBRELLA_ID,
7229
+ status: "completed"
7230
+ });
7231
+ return result;
7232
+ }
7072
7233
  log4.info(`Phase 1 complete: ${appsResult?.apps.length ?? 0} apps discovered` + (appsResult ? ` (repoType=${appsResult.repoType}, packageManager=${appsResult.packageManager})` : " (no result returned)"));
7073
7234
  if (appsResult?.apps.length) {
7074
7235
  for (const app of appsResult.apps) {
@@ -7100,7 +7261,6 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7100
7261
  writeFileSync3(join16(appDir, "app.json"), JSON.stringify(toAppMetadata(app), null, 2), "utf-8");
7101
7262
  }
7102
7263
  log4.info(`Phase 2: surfaceIntegrationEnabled=${surfaceIntegrationEnabled}`);
7103
- const NON_SERVICE_TYPES = ["cloud_resource", "storage", "database"];
7104
7264
  const serviceApps = appsResult.apps.filter((app) => !NON_SERVICE_TYPES.includes(app.type));
7105
7265
  const cloudApps = appsResult.apps.filter((app) => NON_SERVICE_TYPES.includes(app.type));
7106
7266
  log4.info(`Phase 2: ${serviceApps.length} service apps (surface or fallback per app), ${cloudApps.length} cloud resources → ${appsResult.apps.length} total apps`);
@@ -7110,130 +7270,48 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7110
7270
  totalApps,
7111
7271
  completedApps: 0
7112
7272
  });
7113
- const appNodeIdFor = (appName) => `app:${sanitizeName(appName)}`;
7114
- const appAnyTaskFailed = new Map;
7115
7273
  for (const app of appsResult.apps) {
7116
- const appNodeId = appNodeIdFor(app.name);
7117
- appAnyTaskFailed.set(app.name, false);
7118
7274
  eventBus?.emit("subagent-spawn", {
7119
- subagentId: appNodeId,
7275
+ subagentId: `app:${sanitizeName(app.name)}`,
7120
7276
  name: app.name,
7121
7277
  input: { app: app.name, type: app.type, framework: app.framework },
7122
7278
  parentSubagentId: WORKFLOW_UMBRELLA_ID
7123
7279
  });
7124
7280
  }
7125
- const spawnDiscoveryAgent = async (app, type2, objective) => {
7126
- const subagentId = newSessionId();
7127
- const appNodeId = appNodeIdFor(app.name);
7128
- log4.debug(`Phase 2: spawning agent id="${subagentId}" parent="${appNodeId}" (app="${app.name}", type=${type2}, appType=${app.type})`);
7129
- eventBus?.emit("subagent-spawn", {
7130
- subagentId,
7131
- name: TASK_TYPE_LABELS[type2],
7132
- input: { app: app.name, type: type2 },
7133
- parentSubagentId: appNodeId
7134
- });
7135
- const agent = new CodeAgent({
7136
- codebasePath,
7137
- objective,
7138
- system: WHITEBOX_DISCOVERY_SYSTEM_PROMPT,
7139
- model,
7140
- session,
7141
- authConfig,
7142
- abortSignal,
7143
- attackSurfaceRegistry,
7144
- eventBus,
7145
- subagentId,
7146
- subagentName: TASK_TYPE_LABELS[type2],
7147
- onStepFinish: (event) => onStepFinish?.(event),
7148
- onCacheMetrics,
7149
- openAIReasoningEffort,
7150
- enableThinking,
7151
- thinkingEffort,
7152
- responseSchema: DiscoverySummarySchema,
7153
- excludeTools: ["document_app"],
7154
- projectThreatModel
7155
- });
7156
- try {
7157
- await agentLimiter(() => agent.consume());
7158
- log4.debug(`Phase 2: agent "${subagentId}" completed`);
7159
- eventBus?.emit("subagent-complete", {
7160
- subagentId,
7161
- status: "completed",
7162
- parentSubagentId: appNodeId
7163
- });
7164
- } catch (error) {
7165
- log4.error(`Phase 2: agent "${subagentId}" FAILED`, error instanceof Error ? error : undefined, { error: String(error) });
7166
- appAnyTaskFailed.set(app.name, true);
7167
- eventBus?.emit("subagent-complete", {
7168
- subagentId,
7169
- status: "failed",
7170
- parentSubagentId: appNodeId
7171
- });
7172
- }
7281
+ const appWorkerInput = {
7282
+ codebasePath,
7283
+ model,
7284
+ session,
7285
+ authConfig,
7286
+ abortSignal,
7287
+ eventBus,
7288
+ attackSurfaceRegistry,
7289
+ onStepFinish,
7290
+ onCacheMetrics,
7291
+ openAIReasoningEffort,
7292
+ enableThinking,
7293
+ thinkingEffort,
7294
+ projectThreatModel,
7295
+ environments,
7296
+ surfaceIntegrationEnabled,
7297
+ isSingleAppRepo: serviceApps.length === 1,
7298
+ umbrellaId: WORKFLOW_UMBRELLA_ID,
7299
+ mintChildId,
7300
+ agentLimiter,
7301
+ subagentSpawner,
7302
+ hooks: sharedHooks,
7303
+ seams
7173
7304
  };
7174
- const spawnPagesAgent = (app) => spawnDiscoveryAgent(app, "pages", buildPagesDiscoveryObjective(codebasePath, app));
7175
- const spawnApiEndpointsAgent = (app) => spawnDiscoveryAgent(app, "apiEndpoints", buildApiEndpointsDiscoveryObjective(codebasePath, app));
7176
- const spawnCloudResourceAgent = (app) => spawnDiscoveryAgent(app, "cloudResourceEndpoints", buildCloudResourceEndpointsObjective(codebasePath, app, environments));
7177
- await runWithBoundedConcurrency(appsResult.apps, DEFAULT_CONCURRENCY, async (app) => {
7178
- const appNodeId = appNodeIdFor(app.name);
7179
- try {
7180
- if (NON_SERVICE_TYPES.includes(app.type)) {
7181
- await spawnCloudResourceAgent(app);
7182
- } else if (!surfaceIntegrationEnabled) {
7183
- log4.debug(`${app.name}: legacy (surfaceIntegrationEnabled=false)`);
7184
- await Promise.all([
7185
- spawnPagesAgent(app),
7186
- spawnApiEndpointsAgent(app)
7187
- ]);
7188
- } else {
7189
- const surfaceResult = mapAppWithSurface(join16(codebasePath, app.location), codebasePath, { isSingleAppRepo: serviceApps.length === 1 });
7190
- if (surfaceResult.mode === "surface") {
7191
- log4.debug(`${app.name}: surface-driven (${surfaceResult.endpoints.length} endpoints, frameworks=${surfaceResult.frameworks.join(",")})`);
7192
- await runAppEndpointDocumentation({
7193
- codebasePath,
7194
- app,
7195
- endpoints: surfaceResult.endpoints,
7196
- frameworks: surfaceResult.frameworks,
7197
- model,
7198
- session,
7199
- authConfig,
7200
- abortSignal,
7201
- eventBus,
7202
- attackSurfaceRegistry,
7203
- onStepFinish,
7204
- onCacheMetrics,
7205
- openAIReasoningEffort,
7206
- enableThinking,
7207
- thinkingEffort,
7208
- projectThreatModel,
7209
- parentSubagentId: appNodeId,
7210
- agentLimiter
7211
- });
7212
- } else {
7213
- log4.debug(`${app.name}: fallback (${surfaceResult.reason})`);
7214
- await Promise.all([
7215
- spawnPagesAgent(app),
7216
- spawnApiEndpointsAgent(app)
7217
- ]);
7218
- }
7219
- }
7220
- } catch {
7221
- appAnyTaskFailed.set(app.name, true);
7222
- } finally {
7223
- completedAppCount++;
7224
- const appStatus = appAnyTaskFailed.get(app.name) ? "failed" : "completed";
7225
- eventBus?.emit("subagent-complete", {
7226
- subagentId: appNodeId,
7227
- status: appStatus,
7228
- parentSubagentId: WORKFLOW_UMBRELLA_ID
7229
- });
7230
- eventBus?.emit("app-analysis-progress", {
7231
- totalApps,
7232
- completedApps: completedAppCount,
7233
- appName: app.name
7234
- });
7235
- }
7236
- });
7305
+ assertDepth(1, seams.limits);
7306
+ await seams.fanOut.spawnMany(appsResult.apps, async (app, appIndex) => {
7307
+ await runWhiteboxAttackSurfaceApp(app, appIndex, appWorkerInput);
7308
+ completedAppCount++;
7309
+ eventBus?.emit("app-analysis-progress", {
7310
+ totalApps,
7311
+ completedApps: completedAppCount,
7312
+ appName: app.name
7313
+ });
7314
+ }, { concurrency: DEFAULT_CONCURRENCY });
7237
7315
  eventBus?.emit("subagent-complete", {
7238
7316
  subagentId: WORKFLOW_UMBRELLA_ID,
7239
7317
  status: "completed"
@@ -7266,7 +7344,7 @@ async function runWhiteboxAttackSurfaceWorkflow(input) {
7266
7344
  function readAppsFromAssetsDirectory(assetsPath, appsDiscovery) {
7267
7345
  const repoType = appsDiscovery?.repoType ?? "unknown";
7268
7346
  const packageManager = appsDiscovery?.packageManager ?? "unknown";
7269
- if (!existsSync12(assetsPath)) {
7347
+ if (!existsSync11(assetsPath)) {
7270
7348
  log4.debug(`readAssets: assets directory does not exist: ${assetsPath}`);
7271
7349
  return { apps: [], repoType, packageManager };
7272
7350
  }
@@ -7281,7 +7359,7 @@ function readAppsFromAssetsDirectory(assetsPath, appsDiscovery) {
7281
7359
  }
7282
7360
  const appJsonPath = join16(entryPath, "app.json");
7283
7361
  let metadata;
7284
- if (existsSync12(appJsonPath)) {
7362
+ if (existsSync11(appJsonPath)) {
7285
7363
  try {
7286
7364
  metadata = JSON.parse(readFileSync9(appJsonPath, "utf-8"));
7287
7365
  } catch {
@@ -7301,16 +7379,16 @@ function readAppsFromAssetsDirectory(assetsPath, appsDiscovery) {
7301
7379
  try {
7302
7380
  const raw = readFileSync9(join16(entryPath, file), "utf-8");
7303
7381
  const data = JSON.parse(raw);
7304
- const endpoint2 = assetRecordToEndpoint(data);
7305
- if (!endpoint2) {
7382
+ const endpoint = assetRecordToEndpoint(data);
7383
+ if (!endpoint) {
7306
7384
  log4.debug(`readAssets: ${file}: failed schema validation (assetRecordToEndpoint returned null)`);
7307
7385
  parseFailed++;
7308
7386
  continue;
7309
7387
  }
7310
7388
  if (isPageEndpoint(data)) {
7311
- pages.push(endpoint2);
7389
+ pages.push(endpoint);
7312
7390
  } else {
7313
- apiEndpoints.push(endpoint2);
7391
+ apiEndpoints.push(endpoint);
7314
7392
  }
7315
7393
  } catch {
7316
7394
  log4.warn(`readAssets: skipping unreadable asset file: ${entry}/${file}`);
@@ -7335,7 +7413,7 @@ function assetRecordToEndpoint(record) {
7335
7413
  const method = Array.isArray(rawMethod) ? rawMethod.join(", ") : rawMethod ?? "UNKNOWN";
7336
7414
  const path = record.routePath;
7337
7415
  const file = record.file ?? "";
7338
- const parsed = EndpointSchema.safeParse({
7416
+ const parsed = EndpointSchema2.safeParse({
7339
7417
  method,
7340
7418
  path,
7341
7419
  handler: record.handler,
@@ -7653,169 +7731,415 @@ For each entry point, call \`document_endpoint\` with:
7653
7731
 
7654
7732
  When finished, call \`response\` with a summary of how many entry points you documented. The reported count must equal the number of successful \`document_endpoint\` calls you made.`;
7655
7733
  }
7734
+ function buildIncrementalObjective(codebasePath, diffPath, assetsPath, existingResult, domains, environments) {
7735
+ const appsSummary = existingResult.apps.map((app) => {
7736
+ const epCount = app.pages.length + app.apiEndpoints.length;
7737
+ return ` - **${app.name}** (${app.framework}) at \`${app.location}\` — ${epCount} endpoints`;
7738
+ }).join(`
7739
+ `);
7740
+ const domainSection = domains?.length ? `
7741
+ ## Known Domains
7742
+ The following domains are associated with this project. When documenting new apps, set the \`domain\` field on \`document_app\` if you can determine which domain serves the app:
7743
+ ${domains.map((d) => `- ${d}`).join(`
7744
+ `)}
7745
+ ` : "";
7746
+ const environmentsSection = environments?.length ? `
7747
+ ## Target Environments
7748
+ This project is deployed to: ${environments.join(", ")}. When the diff introduces new dynamically-named resources (e.g. environment-prefixed S3 buckets, stage-scoped databases), create a **separate app entry per environment** using the environment name as a prefix (e.g. \`${environments[0]}-<resource>\`). Use environment-specific identifiers in domains and endpoints.
7749
+ ` : "";
7750
+ return `# Incremental Attack Surface Update
7751
+
7752
+ ## Context
7753
+ You are updating the attack surface map for a repository after a new commit. Rather than analyzing the entire codebase, you will analyze only the **changed files** and update the existing endpoint assets accordingly. Also check for any new cloud resources (S3 buckets, storage, CDN origins, etc.) introduced in the diff.
7754
+
7755
+ ## Codebase
7756
+ - **Path:** ${codebasePath}
7757
+ - **Diff file:** ${diffPath} (contains \`git diff\` output between the previous and current commit)
7758
+ - **Existing assets directory:** ${assetsPath}
7759
+ ${domainSection}${environmentsSection}
7760
+ ## Directory Structure
7761
+ The assets directory uses app-scoped folders:
7762
+ \`\`\`
7763
+ assets/
7764
+ <app-name>/
7765
+ app.json — app metadata (name, framework, description, location)
7766
+ asset_*.json — one file per endpoint (written by document_endpoint)
7767
+ \`\`\`
7768
+
7769
+ ## Existing Applications
7770
+ ${appsSummary}
7771
+
7772
+ ## Task
7773
+
7774
+ ### Step 1: Read and understand the diff
7775
+ Read the diff file at \`${diffPath}\`. If it's very large, read it in chunks. Identify which files were added, modified, or deleted.
7776
+
7777
+ ### Step 2: Determine impact on the attack surface
7778
+ For each changed file, determine if it affects any endpoints:
7779
+ - **New route/endpoint definitions** → use \`document_endpoint\` with the appropriate \`appName\`
7780
+ - **Modified route handlers** → read the existing asset file, then use \`execute_command\` to update it
7781
+ - **Deleted route files or endpoint definitions** → delete the corresponding asset file
7782
+ - **Non-route changes** (e.g. utility functions, configs, tests) → skip
7783
+
7784
+ ### Step 3: Update assets
7785
+ For new endpoints, use \`document_endpoint\` with:
7786
+ - \`appName\` set to the correct application name
7787
+ - \`routePath\` set to the HTTP route (e.g., \`/api/users\`) — this is NOT a file path
7788
+ - \`method\` as an array of ALL HTTP methods the path supports
7789
+ - \`file\` set to the source-code file (e.g., \`src/routes/users.ts\`) — this is NOT the route
7790
+ - \`line\`, \`handler\`, \`authRequired\` filled in
7791
+
7792
+ For modified endpoints, update the existing JSON file via \`execute_command\`.
7793
+ For removed endpoints, delete the file via \`execute_command\`.
7794
+
7795
+ **IMPORTANT: ONE entry per route path.** Do NOT create separate entries for different HTTP methods on the same path.
7796
+
7797
+ **IMPORTANT: NO MANIFESTS, NO BATCHING.** Call \`document_endpoint\` directly, one new endpoint at a time, the moment you identify it. Do not build a JSON file or list of endpoints-to-document and process it later, and do not write a script that emits \`document_endpoint\` calls — that pattern hits output-token limits and silently drops endpoints.
7798
+
7799
+ ### Step 4: Report
7800
+ When finished, call the \`response\` tool with a summary of your changes.
7801
+
7802
+ **IMPORTANT:** Be conservative. Only add/modify/remove endpoints that are clearly affected by the diff. Do not re-analyze the entire codebase.`;
7803
+ }
7804
+ var IncrementalReconResultSchema = object({
7805
+ repoType: string(),
7806
+ packageManager: string(),
7807
+ changedApps: array(string()).describe("Names of applications that were affected by the diff"),
7808
+ addedEndpoints: number().describe("Count of new endpoints added"),
7809
+ modifiedEndpoints: number().describe("Count of existing endpoints modified"),
7810
+ removedEndpoints: number().describe("Count of endpoints removed"),
7811
+ summary: string().describe("Brief summary of what changed")
7812
+ });
7813
+ async function readIncrementalReconAssets(backends, assetsPath, existing, abortSignal) {
7814
+ const fs = backends.fs;
7815
+ const list = async (path) => {
7816
+ abortSignal?.throwIfAborted();
7817
+ const result = await fs.list(path);
7818
+ if (!result.success)
7819
+ throw new Error(`Incomplete recon asset listing: ${path}`);
7820
+ if (!result.truncated)
7821
+ return result.files;
7822
+ const files = [];
7823
+ let total;
7824
+ for (let offset = 0;; ) {
7825
+ abortSignal?.throwIfAborted();
7826
+ const quote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
7827
+ const output = await collectCommand(backends.command.run(`python3 -c ${quote(RECON_ARTIFACT_PAGE_SCRIPT)} ${quote(assetsPath)} ${quote(path)} ${offset}`, { timeoutSeconds: 30, abortSignal }));
7828
+ if (output.exitCode !== 0 || output.timedOut || output.stdoutTruncated)
7829
+ throw new Error(`Recon artifact enumeration failed: ${path}`);
7830
+ const page = object({
7831
+ files: array(string()).max(64),
7832
+ total: number().int().min(0).max(1e5),
7833
+ next: number().int().min(1).nullable()
7834
+ }).parse(JSON.parse(output.stdout));
7835
+ total ??= page.total;
7836
+ if (page.total !== total || page.next !== null && page.next !== offset + page.files.length || page.next !== null && (page.files.length === 0 || page.next >= total))
7837
+ throw new Error("Recon artifact enumeration did not advance consistently");
7838
+ files.push(...page.files);
7839
+ if (page.next === null) {
7840
+ if (files.length !== total || new Set(files).size !== total)
7841
+ throw new Error("Incomplete recon artifact pagination");
7842
+ return files;
7843
+ }
7844
+ offset = page.next;
7845
+ }
7846
+ };
7847
+ const read = async (path) => {
7848
+ abortSignal?.throwIfAborted();
7849
+ const result = await fs.readRaw(path);
7850
+ if (!result.success)
7851
+ throw new Error(`Recon artifact read failed: ${path}`);
7852
+ return JSON.parse(result.content);
7853
+ };
7854
+ const apps = [];
7855
+ for (const directory of await list(assetsPath)) {
7856
+ if (!directory.endsWith("/"))
7857
+ continue;
7858
+ if (directory === "../" || directory === "./" || directory.slice(0, -1).includes("/"))
7859
+ throw new Error("Invalid recon artifact directory");
7860
+ const appPath = join16(assetsPath, directory);
7861
+ const metadata = AppInfoSchema2.parse(await read(join16(appPath, "app.json")));
7862
+ const previousApp = existing.apps.find((app) => app.name === metadata.name);
7863
+ const app = {
7864
+ ...previousApp,
7865
+ ...metadata,
7866
+ pages: [],
7867
+ apiEndpoints: []
7868
+ };
7869
+ for (const file of await list(appPath)) {
7870
+ if (file === "app.json" || !file.endsWith(".json"))
7871
+ continue;
7872
+ if (file.includes("/") || file === "..")
7873
+ throw new Error("Invalid recon artifact filename");
7874
+ const raw = await read(join16(appPath, file));
7875
+ const record = object({
7876
+ method: union([string(), array(string())]),
7877
+ routePath: string()
7878
+ }).passthrough().parse(raw);
7879
+ const endpoint = assetRecordToEndpoint(record);
7880
+ if (!endpoint)
7881
+ throw new Error(`Invalid recon endpoint artifact: ${file}`);
7882
+ const previous = previousApp && [...previousApp.pages, ...previousApp.apiEndpoints].find((ep) => ep.method === endpoint.method && ep.file === endpoint.file && ep.path === endpoint.path);
7883
+ const restored = {
7884
+ ...previous,
7885
+ ...endpoint,
7886
+ ...endpoint.riskScore ? {} : previous?.riskScore ? { riskScore: previous.riskScore } : {}
7887
+ };
7888
+ (isPageEndpoint(record) ? app.pages : app.apiEndpoints).push(restored);
7889
+ }
7890
+ apps.push(app);
7891
+ }
7892
+ return {
7893
+ ...existing,
7894
+ apps,
7895
+ summary: {
7896
+ totalApps: apps.length,
7897
+ totalPages: apps.reduce((sum, app) => sum + app.pages.length, 0),
7898
+ totalApiEndpoints: apps.reduce((sum, app) => sum + app.apiEndpoints.length, 0),
7899
+ totalPentestObjectives: apps.reduce((sum, app) => sum + [...app.pages, ...app.apiEndpoints].reduce((count, ep) => count + ep.pentestObjectives.length, 0), 0)
7900
+ }
7901
+ };
7902
+ }
7903
+ var RECON_ARTIFACT_PAGE_SCRIPT = `import os,sys,json,itertools
7904
+ base=os.path.realpath(sys.argv[1]); directory=os.path.realpath(sys.argv[2]); offset=int(sys.argv[3])
7905
+ if os.path.commonpath([base,directory]) != base: raise ValueError("Artifact directory escaped root")
7906
+ with os.scandir(directory) as scan:
7907
+ entries=list(itertools.islice(scan,100001))
7908
+ if len(entries)>100000: raise ValueError("Artifact inventory exceeds limit")
7909
+ if any(entry.is_symlink() for entry in entries): raise ValueError("Artifact links are not supported")
7910
+ files=sorted(entry.name+("/" if entry.is_dir() else "") for entry in entries)
7911
+ end=min(len(files),offset+64)
7912
+ print(json.dumps({"files":files[offset:end],"total":len(files),"next":end if end<len(files) else None}))`;
7656
7913
 
7657
7914
  // src/core/workflows/pentest.ts
7658
7915
  var log5 = scopedLogger(() => createLogger("pentest-swarm"));
7659
7916
  var DEFAULT_CONCURRENCY2 = 10;
7660
- async function runPentestSwarm(input) {
7917
+ async function runPentestSwarmTarget(target, index, input) {
7661
7918
  const {
7662
- targets,
7663
7919
  model,
7664
7920
  session,
7665
7921
  authConfig,
7666
7922
  abortSignal,
7667
7923
  findingsRegistry,
7668
7924
  eventBus,
7669
- onError,
7670
- concurrency = DEFAULT_CONCURRENCY2,
7671
7925
  onStepFinish,
7672
7926
  onCacheMetrics,
7673
7927
  enableThinking,
7674
7928
  thinkingEffort,
7675
7929
  openAIReasoningEffort,
7676
- display
7930
+ display,
7931
+ onError,
7932
+ hooks: sharedHooks,
7933
+ seams,
7934
+ manifestEntries,
7935
+ completedIds
7677
7936
  } = input;
7678
- const completedIds = getCompletedAgentIds(session);
7679
- const existingManifest = readAgentManifest(session);
7680
- const freshEntries = buildManifestEntries(targets);
7681
- const manifestEntries = reconcileManifestOnResume(existingManifest, freshEntries);
7682
- writeAgentManifest(session, manifestEntries);
7683
- const results = await runWithBoundedConcurrency(targets, concurrency, async (target, index) => {
7684
- const entry = manifestEntries[index];
7685
- const subagentId = entry.id;
7686
- const subagentName = target.name ?? entry.name;
7687
- if (completedIds.has(subagentId))
7688
- return null;
7689
- const previousMessages = loadSubagentMessages(session, subagentId);
7690
- let lastMessages = [];
7691
- const handleStepFinish = (e) => {
7692
- if (e.response.messages) {
7693
- lastMessages = e.response.messages;
7694
- }
7695
- onStepFinish?.(e);
7696
- };
7697
- eventBus?.emit("subagent-spawn", {
7698
- subagentId,
7699
- name: subagentName,
7700
- input: { target: target.target, objectives: target.objectives }
7701
- });
7702
- if (session.config?.requirePlan && session.config?.taskDriven && previousMessages.length === 0) {
7703
- try {
7704
- eventBus?.emit("subagent-spawn", {
7705
- subagentId: `${subagentId}-plan`,
7706
- name: `${subagentName} (plan)`,
7707
- input: { target: target.target, objectives: target.objectives },
7708
- parentSubagentId: subagentId
7709
- });
7710
- const executionTasksDir = join18(session.rootPath, "subagents", `${subagentId}-tasks`);
7711
- const planAgent = new OffensiveSecurityAgent({
7712
- system: PLAN_PHASE_SYSTEM_PROMPT,
7713
- prompt: buildPlanPrompt(target.target, target.objectives, target.grpc),
7714
- model,
7715
- session,
7716
- target: target.target,
7717
- grpc: target.grpc,
7718
- mode: "plan",
7719
- activeTools: [...PLAN_MODE_TOOL_NAMES],
7720
- stopWhen: hasToolCall("submit_plan"),
7721
- authConfig,
7722
- abortSignal,
7723
- findingsRegistry,
7724
- subagentId: `${subagentId}-plan`,
7725
- subagentName: `${subagentName} (plan)`,
7726
- tasksDir: executionTasksDir,
7727
- planSubagentId: subagentId,
7728
- eventBus,
7729
- onStepFinish,
7730
- onCacheMetrics,
7731
- enableThinking,
7732
- thinkingEffort,
7733
- openAIReasoningEffort,
7734
- display
7735
- });
7736
- await planAgent.consume();
7737
- eventBus?.emit("subagent-complete", {
7738
- subagentId: `${subagentId}-plan`,
7739
- status: "completed",
7740
- parentSubagentId: subagentId
7741
- });
7742
- } catch (planErr) {
7743
- eventBus?.emit("subagent-complete", {
7744
- subagentId: `${subagentId}-plan`,
7745
- status: "failed",
7746
- parentSubagentId: subagentId
7747
- });
7748
- log5.warn(`Plan phase failed for ${subagentId}: ${planErr}`);
7749
- }
7937
+ const entry = manifestEntries[index];
7938
+ const subagentId = entry.id;
7939
+ const subagentName = target.name ?? entry.name;
7940
+ if (completedIds.has(subagentId))
7941
+ return null;
7942
+ const itemHooks = resolveItemHooks(sharedHooks, seams, target, index);
7943
+ const childSignal = abortSignal && itemHooks.abortSignal ? AbortSignal.any([abortSignal, itemHooks.abortSignal]) : abortSignal ?? itemHooks.abortSignal;
7944
+ const previousMessages = loadSubagentMessages(session, subagentId);
7945
+ let lastMessages = [];
7946
+ const handleStepFinish = (e) => {
7947
+ if (e.response.messages) {
7948
+ lastMessages = e.response.messages;
7750
7949
  }
7751
- const objectiveStr = target.objectives.join("; ");
7752
- let agent;
7950
+ onStepFinish?.(e);
7951
+ };
7952
+ await seams.hooks.onEndpointStart?.({
7953
+ subagentId,
7954
+ subagentName,
7955
+ target: target.target
7956
+ });
7957
+ eventBus?.emit("subagent-spawn", {
7958
+ subagentId,
7959
+ name: subagentName,
7960
+ input: { target: target.target, objectives: target.objectives }
7961
+ });
7962
+ if (session.config?.requirePlan && session.config?.taskDriven && previousMessages.length === 0) {
7753
7963
  try {
7754
- agent = new TargetedPentestAgent({
7755
- target: target.target,
7756
- grpc: target.grpc,
7757
- objectives: target.objectives,
7964
+ eventBus?.emit("subagent-spawn", {
7965
+ subagentId: `${subagentId}-plan`,
7966
+ name: `${subagentName} (plan)`,
7967
+ input: { target: target.target, objectives: target.objectives },
7968
+ parentSubagentId: subagentId
7969
+ });
7970
+ const executionTasksDir = join17(session.rootPath, "subagents", `${subagentId}-tasks`);
7971
+ const planAgent = new OffensiveSecurityAgent({
7972
+ system: PLAN_PHASE_SYSTEM_PROMPT,
7973
+ prompt: buildPlanPrompt(target.target, target.objectives, target.grpc),
7758
7974
  model,
7759
7975
  session,
7976
+ target: target.target,
7977
+ grpc: target.grpc,
7978
+ mode: "plan",
7979
+ activeTools: [...PLAN_MODE_TOOL_NAMES],
7980
+ stopWhen: hasToolCall("submit_plan"),
7760
7981
  authConfig,
7761
- abortSignal,
7762
7982
  findingsRegistry,
7763
- onStepFinish: handleStepFinish,
7764
- onCacheMetrics,
7765
- forwardUsageCallbacksToSpawnedAgents: true,
7766
- messages: previousMessages.length > 0 ? previousMessages : undefined,
7983
+ subagentId: `${subagentId}-plan`,
7984
+ subagentName: `${subagentName} (plan)`,
7985
+ tasksDir: executionTasksDir,
7986
+ planSubagentId: subagentId,
7767
7987
  eventBus,
7768
- subagentId,
7769
- subagentName,
7988
+ onStepFinish,
7989
+ onCacheMetrics,
7770
7990
  enableThinking,
7771
7991
  thinkingEffort,
7772
7992
  openAIReasoningEffort,
7773
- display
7993
+ display,
7994
+ ...itemHooks,
7995
+ abortSignal: childSignal
7774
7996
  });
7775
- const result = await agent.consume();
7776
- saveSubagentData(session, {
7777
- agentName: subagentId,
7778
- target: target.target,
7779
- objective: objectiveStr,
7997
+ await planAgent.consume();
7998
+ eventBus?.emit("subagent-complete", {
7999
+ subagentId: `${subagentId}-plan`,
7780
8000
  status: "completed",
7781
- findingsCount: result.findings.length,
7782
- messages: [...previousMessages, ...lastMessages],
7783
- systemPrompt: buildPentestSystemPrompt(session),
7784
- userPrompt: agent.userPrompt
8001
+ parentSubagentId: subagentId
7785
8002
  });
7786
- updateManifestEntryStatus(session, subagentId, "completed");
8003
+ } catch (planErr) {
7787
8004
  eventBus?.emit("subagent-complete", {
7788
- subagentId,
7789
- status: "completed"
7790
- });
7791
- return result;
7792
- } catch (error) {
7793
- saveSubagentData(session, {
7794
- agentName: subagentId,
7795
- target: target.target,
7796
- objective: objectiveStr,
8005
+ subagentId: `${subagentId}-plan`,
7797
8006
  status: "failed",
7798
- error: error instanceof Error ? error.message : String(error),
7799
- messages: [...previousMessages, ...lastMessages],
7800
- systemPrompt: buildPentestSystemPrompt(session),
7801
- userPrompt: agent?.userPrompt ?? ""
8007
+ parentSubagentId: subagentId
7802
8008
  });
7803
- updateManifestEntryStatus(session, subagentId, "failed");
7804
- eventBus?.emit("subagent-complete", {
7805
- subagentId,
7806
- status: "failed"
7807
- });
7808
- eventBus?.emit("error", { error, subagentId });
7809
- onError?.(error);
7810
- throw error;
8009
+ log5.warn(`Plan phase failed for ${subagentId}: ${planErr}`);
7811
8010
  }
7812
- }, abortSignal);
8011
+ }
8012
+ const objectiveStr = target.objectives.join("; ");
8013
+ let agent;
8014
+ try {
8015
+ agent = new TargetedPentestAgent2({
8016
+ target: target.target,
8017
+ grpc: target.grpc,
8018
+ objectives: target.objectives,
8019
+ model,
8020
+ session,
8021
+ authConfig,
8022
+ findingsRegistry,
8023
+ onStepFinish: handleStepFinish,
8024
+ onCacheMetrics,
8025
+ forwardUsageCallbacksToSpawnedAgents: true,
8026
+ messages: previousMessages.length > 0 ? previousMessages : undefined,
8027
+ eventBus,
8028
+ subagentId,
8029
+ subagentName,
8030
+ enableThinking,
8031
+ thinkingEffort,
8032
+ openAIReasoningEffort,
8033
+ display,
8034
+ ...itemHooks,
8035
+ abortSignal: childSignal
8036
+ });
8037
+ const result = await agent.consume();
8038
+ saveSubagentData(session, {
8039
+ agentName: subagentId,
8040
+ target: target.target,
8041
+ objective: objectiveStr,
8042
+ status: "completed",
8043
+ findingsCount: result.findings.length,
8044
+ messages: [...previousMessages, ...lastMessages],
8045
+ systemPrompt: buildPentestSystemPrompt2(session),
8046
+ userPrompt: agent.userPrompt
8047
+ });
8048
+ updateManifestEntryStatus(session, subagentId, "completed");
8049
+ eventBus?.emit("subagent-complete", {
8050
+ subagentId,
8051
+ status: "completed"
8052
+ });
8053
+ await seams.hooks.onEndpointDone?.({ subagentId, subagentName, target: target.target }, result);
8054
+ return result;
8055
+ } catch (error) {
8056
+ saveSubagentData(session, {
8057
+ agentName: subagentId,
8058
+ target: target.target,
8059
+ objective: objectiveStr,
8060
+ status: "failed",
8061
+ error: error instanceof Error ? error.message : String(error),
8062
+ messages: [...previousMessages, ...lastMessages],
8063
+ systemPrompt: buildPentestSystemPrompt2(session),
8064
+ userPrompt: agent?.userPrompt ?? ""
8065
+ });
8066
+ updateManifestEntryStatus(session, subagentId, "failed");
8067
+ eventBus?.emit("subagent-complete", {
8068
+ subagentId,
8069
+ status: "failed"
8070
+ });
8071
+ eventBus?.emit("error", { error, subagentId });
8072
+ await seams.hooks.onEndpointFailed?.({ subagentId, subagentName, target: target.target }, error);
8073
+ onError?.(error);
8074
+ throw error;
8075
+ }
8076
+ }
8077
+ async function runPentestSwarm2(input) {
8078
+ const {
8079
+ targets,
8080
+ model,
8081
+ session,
8082
+ authConfig,
8083
+ abortSignal,
8084
+ findingsRegistry: rawFindingsRegistry,
8085
+ eventBus,
8086
+ onError,
8087
+ concurrency = DEFAULT_CONCURRENCY2,
8088
+ onStepFinish,
8089
+ onCacheMetrics,
8090
+ enableThinking,
8091
+ thinkingEffort,
8092
+ openAIReasoningEffort,
8093
+ display,
8094
+ subagentSpawner,
8095
+ languageModelMiddleware,
8096
+ usageRecorder,
8097
+ streamIdFactory,
8098
+ hooks,
8099
+ seams: inputSeams
8100
+ } = input;
8101
+ const seams = inputSeams ?? inProcessSeams({ fanOut: hooks?.subagentSpawner ?? subagentSpawner });
8102
+ assertDepth(1, seams.limits);
8103
+ const spawner = subagentSpawner ?? inProcessSubagentSpawner;
8104
+ const sharedHooks = {
8105
+ subagentSpawner: spawner,
8106
+ languageModelMiddleware,
8107
+ usageRecorder,
8108
+ streamIdFactory,
8109
+ ...hooks
8110
+ };
8111
+ const findingsRegistry = withFindingPersistedHook(rawFindingsRegistry, seams.hooks.onFindingPersisted);
8112
+ const completedIds = getCompletedAgentIds(session);
8113
+ const existingManifest = readAgentManifest(session);
8114
+ const freshEntries = buildManifestEntries(targets, (name, ordinal) => seams.ids.newSessionId(name, ordinal));
8115
+ const manifestEntries = reconcileManifestOnResume(existingManifest, freshEntries);
8116
+ writeAgentManifest(session, manifestEntries);
8117
+ const targetInput = {
8118
+ model,
8119
+ session,
8120
+ authConfig,
8121
+ abortSignal,
8122
+ findingsRegistry,
8123
+ eventBus,
8124
+ onStepFinish,
8125
+ onCacheMetrics,
8126
+ enableThinking,
8127
+ thinkingEffort,
8128
+ openAIReasoningEffort,
8129
+ display,
8130
+ onError,
8131
+ hooks: sharedHooks,
8132
+ seams,
8133
+ manifestEntries,
8134
+ completedIds
8135
+ };
8136
+ const results = await seams.fanOut.spawnMany(targets, (target, index) => runPentestSwarmTarget(target, index, targetInput), { concurrency, abortSignal });
7813
8137
  finalizeManifest(session, manifestEntries, results);
7814
8138
  return results;
7815
8139
  }
7816
- async function runPentestWorkflow(input) {
8140
+ async function runPentestWorkflow2(input) {
7817
8141
  if (input.fastStrike) {
7818
- const { runFastStrike } = await import("./fastStrike-a54atjc8.js");
8142
+ const { runFastStrike } = await import("./fastStrike-mgws2nav.js");
7819
8143
  return runFastStrike(input);
7820
8144
  }
7821
8145
  const {
@@ -7835,6 +8159,18 @@ async function runPentestWorkflow(input) {
7835
8159
  threatModel,
7836
8160
  surfaceIntegrationEnabled
7837
8161
  } = input;
8162
+ const seams = input.seams ?? inProcessSeams({
8163
+ fanOut: input.hooks?.subagentSpawner ?? input.subagentSpawner,
8164
+ registries: {
8165
+ findings: () => FindingsRegistry.fromDirectory(session.findingsPath, {
8166
+ model,
8167
+ authConfig,
8168
+ abortSignal,
8169
+ sessionId: session.id
8170
+ }),
8171
+ attackSurface: inMemoryRegistryProvider.attackSurface
8172
+ }
8173
+ });
7838
8174
  if (prompt || threatModel) {
7839
8175
  const parts = [];
7840
8176
  if (threatModel)
@@ -7891,7 +8227,16 @@ ${combined}` : combined;
7891
8227
  onStepFinish,
7892
8228
  onCacheMetrics,
7893
8229
  openAIReasoningEffort,
7894
- surfaceIntegrationEnabled
8230
+ surfaceIntegrationEnabled,
8231
+ subagentSpawner: input.subagentSpawner,
8232
+ hooks: {
8233
+ subagentSpawner: input.subagentSpawner,
8234
+ languageModelMiddleware: input.languageModelMiddleware,
8235
+ usageRecorder: input.usageRecorder,
8236
+ streamIdFactory: input.streamIdFactory,
8237
+ ...input.hooks
8238
+ },
8239
+ seams
7895
8240
  });
7896
8241
  } else {
7897
8242
  swarmTargets = await runBlackboxPhase({
@@ -7903,7 +8248,14 @@ ${combined}` : combined;
7903
8248
  eventBus,
7904
8249
  onStepFinish,
7905
8250
  onCacheMetrics,
7906
- openAIReasoningEffort
8251
+ openAIReasoningEffort,
8252
+ hooks: {
8253
+ subagentSpawner: input.subagentSpawner,
8254
+ languageModelMiddleware: input.languageModelMiddleware,
8255
+ usageRecorder: input.usageRecorder,
8256
+ streamIdFactory: input.streamIdFactory,
8257
+ ...input.hooks
8258
+ }
7907
8259
  });
7908
8260
  }
7909
8261
  eventBus?.emit("workflow-phase-complete", {
@@ -7918,35 +8270,31 @@ ${combined}` : combined;
7918
8270
  throw new DOMException("Pentest aborted by user", "AbortError");
7919
8271
  }
7920
8272
  if (swarmTargets.length === 0) {
7921
- const report2 = buildPentestReport([], {
8273
+ const report = buildPentestReport([], {
7922
8274
  target,
7923
8275
  model,
7924
8276
  sessionId: session.id,
7925
8277
  mode
7926
8278
  });
7927
- const mdPath2 = join18(session.rootPath, REPORT_FILENAME_MD);
7928
- const jsonPath2 = join18(session.rootPath, REPORT_FILENAME_JSON);
7929
- writeFileSync4(mdPath2, renderMarkdown(report2));
7930
- writeFileSync4(jsonPath2, renderJson(report2));
8279
+ const mdPath = join17(session.rootPath, REPORT_FILENAME_MD);
8280
+ const jsonPath = join17(session.rootPath, REPORT_FILENAME_JSON);
8281
+ writeFileSync4(mdPath, renderMarkdown(report));
8282
+ writeFileSync4(jsonPath, renderJson(report));
7931
8283
  return {
7932
8284
  findings: [],
7933
8285
  findingsPath: session.findingsPath,
7934
8286
  pocsPath: session.pocsPath,
7935
- reportPath: mdPath2
8287
+ reportPath: mdPath
7936
8288
  };
7937
8289
  }
7938
8290
  eventBus?.emit("workflow-phase-start", {
7939
8291
  phase: "pentesting",
7940
8292
  label: `Pentest Swarm (${swarmTargets.length} targets)`
7941
8293
  });
7942
- const findingsRegistry = FindingsRegistry.fromDirectory(session.findingsPath, {
7943
- model,
7944
- authConfig,
7945
- abortSignal
7946
- });
8294
+ const findingsRegistry = seams.registries.findings();
7947
8295
  const completedCount = getCompletedAgentIds(session).size;
7948
8296
  if (completedCount < swarmTargets.length) {
7949
- await runPentestSwarm({
8297
+ await runPentestSwarm2({
7950
8298
  targets: swarmTargets,
7951
8299
  model,
7952
8300
  session,
@@ -7958,7 +8306,13 @@ ${combined}` : combined;
7958
8306
  onCacheMetrics,
7959
8307
  enableThinking,
7960
8308
  thinkingEffort,
7961
- openAIReasoningEffort
8309
+ openAIReasoningEffort,
8310
+ subagentSpawner: input.subagentSpawner,
8311
+ languageModelMiddleware: input.languageModelMiddleware,
8312
+ usageRecorder: input.usageRecorder,
8313
+ streamIdFactory: input.streamIdFactory,
8314
+ hooks: input.hooks,
8315
+ seams
7962
8316
  });
7963
8317
  }
7964
8318
  if (abortSignal?.aborted) {
@@ -7976,8 +8330,8 @@ ${combined}` : combined;
7976
8330
  sessionId: session.id,
7977
8331
  mode
7978
8332
  });
7979
- const mdPath = join18(session.rootPath, REPORT_FILENAME_MD);
7980
- const jsonPath = join18(session.rootPath, REPORT_FILENAME_JSON);
8333
+ const mdPath = join17(session.rootPath, REPORT_FILENAME_MD);
8334
+ const jsonPath = join17(session.rootPath, REPORT_FILENAME_JSON);
7981
8335
  writeFileSync4(mdPath, renderMarkdown(report));
7982
8336
  writeFileSync4(jsonPath, renderJson(report));
7983
8337
  const severityCounts = {};
@@ -8018,26 +8372,30 @@ async function runWhiteboxPhase(opts) {
8018
8372
  onStepFinish: opts.onStepFinish,
8019
8373
  onCacheMetrics: opts.onCacheMetrics,
8020
8374
  openAIReasoningEffort: opts.openAIReasoningEffort,
8021
- surfaceIntegrationEnabled: opts.surfaceIntegrationEnabled
8375
+ surfaceIntegrationEnabled: opts.surfaceIntegrationEnabled,
8376
+ subagentSpawner: opts.subagentSpawner,
8377
+ hooks: opts.hooks,
8378
+ seams: opts.seams
8022
8379
  };
8023
8380
  const result = await runWhiteboxAttackSurfaceWorkflow(workflowInput);
8024
8381
  return result.apps.flatMap((app) => [...app.pages, ...app.apiEndpoints].map((ep) => {
8025
- const grpc2 = toGrpcPentestContext(ep.transport, ep.grpc, ep.path);
8382
+ const grpc = toGrpcPentestContext(ep.transport, ep.grpc, ep.path);
8026
8383
  return {
8027
- target: grpcAuthorityTarget(grpc2, ep.path) ?? (ep.path.startsWith("http") ? ep.path : `${opts.baseTarget}${ep.path}`),
8384
+ target: grpcAuthorityTarget(grpc, ep.path) ?? (ep.path.startsWith("http") ? ep.path : `${opts.baseTarget}${ep.path}`),
8028
8385
  objectives: ep.pentestObjectives,
8029
- grpc: grpc2
8386
+ grpc
8030
8387
  };
8031
8388
  }));
8032
8389
  }
8033
8390
  async function runBlackboxPhase(opts) {
8034
8391
  let lastMessages = [];
8035
8392
  const agentInput = {
8393
+ ...opts.hooks,
8036
8394
  target: opts.target,
8037
8395
  model: opts.model,
8038
8396
  session: opts.session,
8039
8397
  authConfig: opts.authConfig,
8040
- abortSignal: opts.abortSignal,
8398
+ abortSignal: opts.abortSignal && opts.hooks?.abortSignal ? AbortSignal.any([opts.abortSignal, opts.hooks.abortSignal]) : opts.abortSignal ?? opts.hooks?.abortSignal,
8041
8399
  eventBus: opts.eventBus,
8042
8400
  subagentId: "attack-surface-agent",
8043
8401
  onStepFinish: (e) => {
@@ -8049,7 +8407,7 @@ async function runBlackboxPhase(opts) {
8049
8407
  onCacheMetrics: opts.onCacheMetrics,
8050
8408
  openAIReasoningEffort: opts.openAIReasoningEffort
8051
8409
  };
8052
- const agent = new BlackboxAttackSurfaceAgent(agentInput);
8410
+ const agent = new BlackboxAttackSurfaceAgent2(agentInput);
8053
8411
  opts.eventBus?.emit("subagent-spawn", {
8054
8412
  subagentId: "attack-surface-agent",
8055
8413
  name: "Attack Surface Discovery",
@@ -8086,4 +8444,4 @@ async function runBlackboxPhase(opts) {
8086
8444
  throw e;
8087
8445
  }
8088
8446
  }
8089
- export { readExecutionMetrics, writeExecutionMetrics, convertModelMessagesToUI, loadSubagents, DEFAULT_CONCURRENCY2 as DEFAULT_CONCURRENCY, runPentestSwarm, runPentestWorkflow };
8447
+ export { readExecutionMetrics, writeExecutionMetrics, convertModelMessagesToUI, loadSubagents, DEFAULT_CONCURRENCY2, runPentestSwarm2, runPentestWorkflow2 };