@pensar/apex 2.5.0 → 2.6.1-canary.025b1ecf

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 (1509) hide show
  1. package/README.md +38 -0
  2. package/bin/pensar.js +12 -4
  3. package/build/agent-b37fm1yh.js +13 -0
  4. package/build/{agent-m30a62kh.js → agent-f8rpt4sb.js} +48 -50
  5. package/build/agent-gqexqg2q.js +13 -0
  6. package/build/agent-qk30vqmf.js +15 -0
  7. package/build/agent-runs-nw7dwp1d.js +313 -0
  8. package/build/{apps-x4ef2gpc.js → apps-zeqbjbs4.js} +50 -58
  9. package/build/{auth-7ay8qgxm.js → auth-038hsg1s.js} +61 -68
  10. package/build/blackboxAgent-fjrv4q3d.js +13 -0
  11. package/build/blackboxPentest-6dtb7vnq.js +59 -0
  12. package/build/{cli-73k43t1r.js → cli-17ndymmb.js} +53 -78
  13. package/build/{cli-3py0a0wg.js → cli-1rwe9a9v.js} +206 -136
  14. package/build/{cli-y3dpm18e.js → cli-2tfnaeca.js} +75 -92
  15. package/build/{cli-ee3axgts.js → cli-3gt761d2.js} +7 -1
  16. package/build/cli-3qznjsnr.js +14 -0
  17. package/build/{cli-sx3jkv7p.js → cli-3w0mx2mv.js} +28872 -25951
  18. package/build/cli-5qq1655n.js +175 -0
  19. package/build/{cli-53rm0rrz.js → cli-8w8k4dph.js} +1 -1
  20. package/build/{cli-68260ckj.js → cli-91gs9whc.js} +1658 -1606
  21. package/build/cli-99gxp2yb.js +62 -0
  22. package/build/cli-ayqhdajr.js +22 -0
  23. package/build/{cli-knd276ed.js → cli-bb02pjt0.js} +31 -31
  24. package/build/{cli-p4r7q012.js → cli-bw31v3z7.js} +16743 -13352
  25. package/build/{cli-j54qa6tm.js → cli-c2k4xxaw.js} +42 -42
  26. package/build/{cli-z5c0ypg1.js → cli-czwr2xmh.js} +4 -4
  27. package/build/{cli-k71t434r.js → cli-ec2hwkv3.js} +34 -76
  28. package/build/{cli-vkbzcnw1.js → cli-fxmref08.js} +43 -40
  29. package/build/cli-g06s7edq.js +11 -0
  30. package/build/cli-gsaf4jk3.js +280 -0
  31. package/build/{cli-bc05qbss.js → cli-h6y3bt60.js} +13 -21
  32. package/build/cli-jdrx44ge.js +14 -0
  33. package/build/{cli-x92fkt2f.js → cli-m3btkdbx.js} +55 -97
  34. package/build/cli-mdk51kby.js +429 -0
  35. package/build/{cli-bw2ddttk.js → cli-mnpzhtg6.js} +4730 -267
  36. package/build/cli-mz5pk30x.js +5508 -0
  37. package/build/cli-pwm29ks7.js +6337 -0
  38. package/build/cli-retw3rw5.js +12 -0
  39. package/build/{cli-kff2bbq7.js → cli-rxj14t82.js} +43 -43
  40. package/build/cli-se8ae8z3.js +2250 -0
  41. package/build/cli-skedjgqy.js +186 -0
  42. package/build/{cli-dm0fc0bm.js → cli-v1sarr4y.js} +5 -9
  43. package/build/cli-vfzpbv3g.js +355 -0
  44. package/build/cli-xcy2vxj2.js +1732 -0
  45. package/build/{cli-zav1yx5k.js → cli-yn4sj3z1.js} +990 -632
  46. package/build/{cli-7vg06q5r.js → cli-zsq8kfgc.js} +135 -125
  47. package/build/cli.js +769 -195
  48. package/build/{config-4kzh88xz.js → config-4emx9c35.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-mnn8g4ay.js} +56 -31
  52. package/build/{fixes-fv66yn1z.js → fixes-hm5569vq.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-0yfxwj9h.js +25 -0
  59. package/build/{index-kyd1jm89.js → index-1qjwwg4x.js} +159 -169
  60. package/build/index-939ypn8a.js +12 -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-fpwr10qm.js → index-f2xpfw4x.js} +5106 -3803
  65. package/build/index-g9akqryt.js +9 -0
  66. package/build/index-mrrfbsyz.js +17 -0
  67. package/build/index-qnyevb6q.js +1563 -0
  68. package/build/index-ttwhf2se.js +36 -0
  69. package/build/index-vy2pm5zf.js +121 -0
  70. package/build/index-x8ab8x86.js +102 -0
  71. package/build/{issues-019678t0.js → issues-wxd3ca1d.js} +51 -47
  72. package/build/knowledge-rvcpbak8.js +139 -0
  73. package/build/lib/chunk-0y40tebt.js +102 -0
  74. package/build/lib/chunk-0ydfy4hq.js +510 -0
  75. package/build/lib/chunk-2njv7wz3.js +178 -0
  76. package/build/lib/chunk-3q89v4xv.js +21 -0
  77. package/build/lib/chunk-4p2n69vn.js +62 -0
  78. package/build/lib/chunk-7gjdygcx.js +171 -0
  79. package/build/lib/chunk-8d8w07a9.js +431 -0
  80. package/build/lib/chunk-8dqz8cwa.js +27 -0
  81. package/build/lib/chunk-8vhr65w3.js +272 -0
  82. package/build/lib/chunk-8xnzgfs0.js +56 -0
  83. package/build/lib/chunk-9nsrd4xg.js +12 -0
  84. package/build/lib/chunk-a3gxgj9r.js +317 -0
  85. package/build/lib/chunk-afef65e0.js +7150 -0
  86. package/build/lib/chunk-b8eq85d2.js +143 -0
  87. package/build/lib/chunk-bqrmw2tn.js +439 -0
  88. package/build/lib/chunk-bx94rwt5.js +24 -0
  89. package/build/lib/chunk-c2b0hxs7.js +143 -0
  90. package/build/lib/chunk-cwj17b1f.js +345 -0
  91. package/build/lib/chunk-cx7yrzh1.js +2429 -0
  92. package/build/lib/chunk-eb4h4k1f.js +213 -0
  93. package/build/lib/chunk-esymacwg.js +14 -0
  94. package/build/lib/chunk-fy3bbbqy.js +7896 -0
  95. package/build/lib/chunk-gdrv2h1p.js +11157 -0
  96. package/build/lib/chunk-ja7j565c.js +743 -0
  97. package/build/lib/chunk-jdjagvgr.js +85 -0
  98. package/build/lib/chunk-k4rz1yvj.js +31 -0
  99. package/build/lib/chunk-kfvq4m1s.js +685 -0
  100. package/build/lib/chunk-mgppdr6j.js +980 -0
  101. package/build/lib/chunk-mhxe717m.js +572 -0
  102. package/build/lib/chunk-mv74mq5n.js +59 -0
  103. package/build/lib/chunk-n0ba7khr.js +64 -0
  104. package/build/lib/chunk-q5e23acz.js +52 -0
  105. package/build/lib/chunk-q8bk9dys.js +922 -0
  106. package/build/lib/chunk-sgd2126b.js +9294 -0
  107. package/build/lib/chunk-t5bt5vn1.js +146 -0
  108. package/build/lib/chunk-v2q8anzw.js +120 -0
  109. package/build/lib/chunk-vd6hr8pm.js +212 -0
  110. package/build/lib/chunk-ve7m90fb.js +317 -0
  111. package/build/lib/chunk-vx228eeq.js +82 -0
  112. package/build/lib/chunk-wchtd611.js +186 -0
  113. package/build/lib/chunk-ws86wx87.js +1412 -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 +342 -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 +7 -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-v5503qqk.js} +22 -30
  564. package/build/{multipart-parser-g2xxkezz.js → multipart-parser-vjjdbpd1.js} +10 -10
  565. package/build/native-rollout-evidence-1qwze8nm.js +135 -0
  566. package/build/offesecAgent-w5a2r0wa.js +22 -0
  567. package/build/{parse-rtccymzn.js → parse-cqecqrc5.js} +0 -4
  568. package/build/pentest-fxya42cg.js +22 -0
  569. package/build/pentests-6qntz6wz.js +143 -0
  570. package/build/recordedRunClient-rtdeagzx.js +11 -0
  571. package/build/{targetedPentest-tdwtgmxm.js → targetedPentest-khnxcvmb.js} +22 -22
  572. package/build/{targets-763n91t7.js → targets-ty7dahv4.js} +24 -32
  573. package/build/threatModel-28ayxe0n.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-nrhvt32a.js} +3 -3
  577. package/build/{upload-9qj1kpt9.js → upload-sx9gth59.js} +8 -14
  578. package/build/{utils-t7gc2903.js → utils-qetcfvgg.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 +690 -0
  872. package/src/core/ai/ai.ts +2377 -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 +151 -0
  930. package/src/core/ai/models/bedrock.ts +618 -0
  931. package/src/core/ai/models/claude-capabilities.ts +43 -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 +253 -0
  936. package/src/core/ai/models/mantle.ts +14 -0
  937. package/src/core/ai/models/models.test.ts +313 -0
  938. package/src/core/ai/models/openai.ts +409 -0
  939. package/src/core/ai/models/openrouter.ts +342 -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 +348 -0
  953. package/src/core/ai/providers/anthropic.ts +73 -0
  954. package/src/core/ai/providers/bedrock-models.test.ts +81 -0
  955. package/src/core/ai/providers/concentrate.live.test.ts +71 -0
  956. package/src/core/ai/providers/concentrate.test.ts +160 -0
  957. package/src/core/ai/providers/concentrate.ts +145 -0
  958. package/src/core/ai/providers/custom.live.test.ts +42 -0
  959. package/src/core/ai/providers/custom.test.ts +474 -0
  960. package/src/core/ai/providers/custom.ts +70 -0
  961. package/src/core/ai/providers/gateway-models.test.ts +648 -0
  962. package/src/core/ai/providers/hoonify.live.test.ts +72 -0
  963. package/src/core/ai/providers/hoonify.test.ts +284 -0
  964. package/src/core/ai/providers/hoonify.ts +32 -0
  965. package/src/core/ai/providers/openai-models.test.ts +356 -0
  966. package/src/core/ai/providers/openai-pro-fetch.test.ts +64 -0
  967. package/src/core/ai/providers/openai-pro-fetch.ts +32 -0
  968. package/src/core/ai/providers/pensar.ts +645 -0
  969. package/src/core/ai/providers/pensarFormatters.test.ts +272 -0
  970. package/src/core/ai/providers/pensarFormatters.ts +533 -0
  971. package/src/core/ai/providers/pensarResponsesStream.test.ts +191 -0
  972. package/src/core/ai/providers/pensarResponsesStream.ts +294 -0
  973. package/src/core/ai/providers/pensarSSE.test.ts +83 -0
  974. package/src/core/ai/providers/pensarSSE.ts +128 -0
  975. package/src/core/ai/providers/pensarSigning.ts +2 -0
  976. package/src/core/ai/providers/pensarStreamUsage.test.ts +79 -0
  977. package/src/core/ai/providers/pensarStreamUsage.ts +62 -0
  978. package/src/core/ai/stepContext.test.ts +61 -0
  979. package/src/core/ai/streamIdleTimeout.test.ts +390 -0
  980. package/src/core/ai/streamTelemetry.ts +90 -0
  981. package/src/core/ai/usage-callback.test.ts +511 -0
  982. package/src/core/ai/utils.native-rollout-evidence.test.ts +135 -0
  983. package/src/core/ai/utils.pensar.test.ts +59 -0
  984. package/src/core/ai/utils.ts +795 -0
  985. package/src/core/api/apiClient.test.ts +58 -0
  986. package/src/core/api/apiClient.ts +73 -0
  987. package/src/core/api/apps.test.ts +78 -0
  988. package/src/core/api/apps.ts +388 -0
  989. package/src/core/api/attackSurface.test.ts +24 -0
  990. package/src/core/api/attackSurface.ts +89 -0
  991. package/src/core/api/authentication.ts +8 -0
  992. package/src/core/api/benchmark.ts +35 -0
  993. package/src/core/api/blackboxPentest.test.ts +89 -0
  994. package/src/core/api/blackboxPentest.ts +64 -0
  995. package/src/core/api/clientIdentity.test.ts +61 -0
  996. package/src/core/api/clientIdentity.ts +57 -0
  997. package/src/core/api/comments.test.ts +69 -0
  998. package/src/core/api/constants.ts +15 -0
  999. package/src/core/api/domains.test.ts +35 -0
  1000. package/src/core/api/domains.ts +32 -0
  1001. package/src/core/api/environment.ts +47 -0
  1002. package/src/core/api/index.ts +219 -0
  1003. package/src/core/api/issues.test.ts +82 -0
  1004. package/src/core/api/issues.ts +439 -0
  1005. package/src/core/api/knowledge.ts +70 -0
  1006. package/src/core/api/localWorker.ts +29 -0
  1007. package/src/core/api/offesecAgent.test.ts +289 -0
  1008. package/src/core/api/offesecAgent.ts +77 -0
  1009. package/src/core/api/patching.ts +44 -0
  1010. package/src/core/api/recordedRun.control.test.ts +830 -0
  1011. package/src/core/api/recordedRun.inference.test.ts +529 -0
  1012. package/src/core/api/recordedRun.loop.test.ts +290 -0
  1013. package/src/core/api/recordedRun.recovery.test.ts +651 -0
  1014. package/src/core/api/recordedRun.test.ts +646 -0
  1015. package/src/core/api/recordedRun.ts +542 -0
  1016. package/src/core/api/targetedPentest.test.ts +177 -0
  1017. package/src/core/api/targetedPentest.ts +83 -0
  1018. package/src/core/api/threatModel.ts +5 -0
  1019. package/src/core/api/trajectoryExport.test.ts +299 -0
  1020. package/src/core/api/trajectoryExport.ts +362 -0
  1021. package/src/core/api/vulnerabilityReproduction.test.ts +56 -0
  1022. package/src/core/api/vulnerabilityReproduction.ts +54 -0
  1023. package/src/core/assets/wordlists.test.ts +85 -0
  1024. package/src/core/assets/wordlists.ts +111 -0
  1025. package/src/core/atif/compatibility.test.ts +107 -0
  1026. package/src/core/atif/convert.test.ts +815 -0
  1027. package/src/core/atif/convert.ts +1658 -0
  1028. package/src/core/atif/fixtures/portable-bundle-v1.json +813 -0
  1029. package/src/core/atif/index.ts +34 -0
  1030. package/src/core/atif/schema.ts +345 -0
  1031. package/src/core/atif/serialize.test.ts +244 -0
  1032. package/src/core/atif/serialize.ts +419 -0
  1033. package/src/core/atif/test-fixtures.ts +184 -0
  1034. package/src/core/atif/validate.test.ts +188 -0
  1035. package/src/core/atif/validate.ts +289 -0
  1036. package/src/core/auth/connection.ts +26 -0
  1037. package/src/core/auth/device-flow.ts +203 -0
  1038. package/src/core/auth/gateway.ts +66 -0
  1039. package/src/core/auth/index.ts +29 -0
  1040. package/src/core/auth/signing.ts +25 -0
  1041. package/src/core/auth/token.ts +140 -0
  1042. package/src/core/auth/types.ts +106 -0
  1043. package/src/core/auth/workspaces.ts +192 -0
  1044. package/src/core/benchmark/index.ts +11 -0
  1045. package/src/core/benchmark/report.ts +257 -0
  1046. package/src/core/benchmark/runner.ts +698 -0
  1047. package/src/core/benchmark/types.ts +80 -0
  1048. package/src/core/cli/logLevelArgs.test.ts +83 -0
  1049. package/src/core/cli/logLevelArgs.ts +62 -0
  1050. package/src/core/cli/model.ts +35 -0
  1051. package/src/core/cli/pentestMode.test.ts +24 -0
  1052. package/src/core/cli/pentestMode.ts +23 -0
  1053. package/src/core/cli/tuiArgs.test.ts +58 -0
  1054. package/src/core/cli/tuiArgs.ts +28 -0
  1055. package/src/core/config/config.test.ts +183 -0
  1056. package/src/core/config/config.ts +201 -0
  1057. package/src/core/config/customProviders.test.ts +183 -0
  1058. package/src/core/config/customProviders.ts +190 -0
  1059. package/src/core/config/index.ts +7 -0
  1060. package/src/core/credentials/index.ts +6 -0
  1061. package/src/core/credentials/manager.ts +313 -0
  1062. package/src/core/credentials/types.ts +112 -0
  1063. package/src/core/doctor.ts +138 -0
  1064. package/src/core/eventBus.test.ts +374 -0
  1065. package/src/core/eventBus.ts +410 -0
  1066. package/src/core/findings/attackSurfaceRegistry.ts +294 -0
  1067. package/src/core/findings/registry.test.ts +1680 -0
  1068. package/src/core/findings/registry.ts +800 -0
  1069. package/src/core/history.ts +82 -0
  1070. package/src/core/hoonify.test.ts +250 -0
  1071. package/src/core/hoonify.ts +163 -0
  1072. package/src/core/http/headers.contract.test.ts +1161 -0
  1073. package/src/core/http/parse.ts +257 -0
  1074. package/src/core/http/redirects.test.ts +207 -0
  1075. package/src/core/http/redirects.ts +145 -0
  1076. package/src/core/http/targetHeaders.ts +604 -0
  1077. package/src/core/http/targetScope.ts +52 -0
  1078. package/src/core/http/types.ts +39 -0
  1079. package/src/core/id/id.test.ts +88 -0
  1080. package/src/core/id/id.ts +138 -0
  1081. package/src/core/installation/index.ts +222 -0
  1082. package/src/core/installation/installation.test.ts +415 -0
  1083. package/src/core/integrations/herdr.test.ts +335 -0
  1084. package/src/core/integrations/herdr.ts +163 -0
  1085. package/src/core/integrations/surface/index.test.ts +534 -0
  1086. package/src/core/integrations/surface/index.ts +224 -0
  1087. package/src/core/integrations/surface/types.ts +29 -0
  1088. package/src/core/integrations/wandb/client.ts +167 -0
  1089. package/src/core/integrations/wandb/upload.test.ts +415 -0
  1090. package/src/core/integrations/wandb/upload.ts +76 -0
  1091. package/src/core/logger/errorLog.test.ts +98 -0
  1092. package/src/core/logger/index.ts +214 -0
  1093. package/src/core/logger/structured.test.ts +212 -0
  1094. package/src/core/logger/structured.ts +207 -0
  1095. package/src/core/memory/backend.test.ts +186 -0
  1096. package/src/core/memory/index.ts +279 -0
  1097. package/src/core/memory/memory.test.ts +362 -0
  1098. package/src/core/messages/types.ts +141 -0
  1099. package/src/core/obfuscation/engine.test.ts +314 -0
  1100. package/src/core/obfuscation/engine.ts +647 -0
  1101. package/src/core/obfuscation/index.ts +27 -0
  1102. package/src/core/observability/active-root-spans.ts +30 -0
  1103. package/src/core/observability/active-spans.ts +80 -0
  1104. package/src/core/observability/index.ts +91 -0
  1105. package/src/core/observability/log-correlation.test.ts +276 -0
  1106. package/src/core/observability/payload-capture.test.ts +59 -0
  1107. package/src/core/observability/runtime.test.ts +743 -0
  1108. package/src/core/observability/runtime.ts +371 -0
  1109. package/src/core/observability/shutdown.test.ts +551 -0
  1110. package/src/core/observability/telemetry.test.ts +895 -0
  1111. package/src/core/observability/telemetry.ts +220 -0
  1112. package/src/core/observability/testkit.test.ts +66 -0
  1113. package/src/core/observability/testkit.ts +97 -0
  1114. package/src/core/observability/trace-contract.test.ts +1031 -0
  1115. package/src/core/observability.test.ts +135 -0
  1116. package/src/core/operator/approvalGate.test.ts +300 -0
  1117. package/src/core/operator/approvalGate.ts +287 -0
  1118. package/src/core/operator/index.ts +30 -0
  1119. package/src/core/operator/types.ts +355 -0
  1120. package/src/core/plan/index.ts +44 -0
  1121. package/src/core/prompt-injections/index.test.ts +248 -0
  1122. package/src/core/prompt-injections/index.ts +350 -0
  1123. package/src/core/providers/index.ts +5 -0
  1124. package/src/core/providers/types.ts +87 -0
  1125. package/src/core/providers/utils.test.ts +189 -0
  1126. package/src/core/providers/utils.ts +183 -0
  1127. package/src/core/providers/verify.test.ts +49 -0
  1128. package/src/core/providers/verify.ts +198 -0
  1129. package/src/core/report/builder.test.ts +229 -0
  1130. package/src/core/report/builder.ts +58 -0
  1131. package/src/core/report/index.ts +13 -0
  1132. package/src/core/report/renderers/json.test.ts +76 -0
  1133. package/src/core/report/renderers/json.ts +5 -0
  1134. package/src/core/report/renderers/markdown.test.ts +366 -0
  1135. package/src/core/report/renderers/markdown.ts +133 -0
  1136. package/src/core/report/schemas.ts +48 -0
  1137. package/src/core/runtime/agentExecution.test.ts +94 -0
  1138. package/src/core/runtime/agentExecution.ts +27 -0
  1139. package/src/core/runtime/launchLocalWorker.test.ts +707 -0
  1140. package/src/core/runtime/launchLocalWorker.ts +273 -0
  1141. package/src/core/runtime/localRunLock.ts +118 -0
  1142. package/src/core/runtime/localRunWorker.test.ts +381 -0
  1143. package/src/core/runtime/localRunWorker.ts +287 -0
  1144. package/src/core/runtime/localWorker.acceptance.test.ts +548 -0
  1145. package/src/core/runtime/localWorkerEndpoint.test.ts +145 -0
  1146. package/src/core/runtime/localWorkerEndpoint.ts +82 -0
  1147. package/src/core/runtime/localWorkerProtocol.ts +176 -0
  1148. package/src/core/runtime/localWorkerTransport.test.ts +841 -0
  1149. package/src/core/runtime/localWorkerTransport.ts +434 -0
  1150. package/src/core/runtime/persistenceError.ts +14 -0
  1151. package/src/core/runtime/recordedExecution.ts +43 -0
  1152. package/src/core/runtime/recordedRunClient.integration.test.ts +106 -0
  1153. package/src/core/runtime/recordedRunClient.test.ts +677 -0
  1154. package/src/core/runtime/recordedRunClient.ts +303 -0
  1155. package/src/core/runtime/runCheckpointStore.ts +23 -0
  1156. package/src/core/runtime/runContext.test.ts +445 -0
  1157. package/src/core/runtime/runContext.ts +184 -0
  1158. package/src/core/runtime/runControl.test.ts +923 -0
  1159. package/src/core/runtime/runControl.ts +419 -0
  1160. package/src/core/runtime/runControlStore.ts +106 -0
  1161. package/src/core/runtime/runDeadline.test.ts +44 -0
  1162. package/src/core/runtime/runDeadline.ts +28 -0
  1163. package/src/core/runtime/runEvidence.test.ts +384 -0
  1164. package/src/core/runtime/runEvidence.ts +267 -0
  1165. package/src/core/runtime/runInference.test.ts +408 -0
  1166. package/src/core/runtime/runInference.ts +125 -0
  1167. package/src/core/runtime/runModelStore.ts +55 -0
  1168. package/src/core/runtime/runObservation.ts +24 -0
  1169. package/src/core/runtime/runRecoveryContext.test.ts +602 -0
  1170. package/src/core/runtime/runRecoveryContext.ts +195 -0
  1171. package/src/core/runtime/runRecoveryPlan.test.ts +851 -0
  1172. package/src/core/runtime/runRecoveryPlan.ts +540 -0
  1173. package/src/core/runtime/runRecoveryStore.ts +78 -0
  1174. package/src/core/runtime/runStore.ts +148 -0
  1175. package/src/core/runtime/runStorePath.ts +13 -0
  1176. package/src/core/runtime/runToolStore.ts +66 -0
  1177. package/src/core/runtime/runTools.crash.test.ts +414 -0
  1178. package/src/core/runtime/runTools.test.ts +689 -0
  1179. package/src/core/runtime/runTools.ts +208 -0
  1180. package/src/core/runtime/sqliteControlStore.test.ts +917 -0
  1181. package/src/core/runtime/sqliteControlStore.ts +555 -0
  1182. package/src/core/runtime/sqliteModelStore.test.ts +619 -0
  1183. package/src/core/runtime/sqliteModelStore.ts +286 -0
  1184. package/src/core/runtime/sqliteRecoveryStore.public.test.ts +374 -0
  1185. package/src/core/runtime/sqliteRecoveryStore.test.ts +836 -0
  1186. package/src/core/runtime/sqliteRecoveryStore.ts +435 -0
  1187. package/src/core/runtime/sqliteRunContext.test.ts +1000 -0
  1188. package/src/core/runtime/sqliteRunObservation.test.ts +432 -0
  1189. package/src/core/runtime/sqliteRunStore.test.ts +698 -0
  1190. package/src/core/runtime/sqliteRunStore.ts +593 -0
  1191. package/src/core/runtime/sqliteToolStore.test.ts +1231 -0
  1192. package/src/core/runtime/sqliteToolStore.ts +419 -0
  1193. package/src/core/runtime/testfixtures/localWorkerChild.ts +254 -0
  1194. package/src/core/runtime/testfixtures/localWorkerLauncher.ts +15 -0
  1195. package/src/core/runtime/testfixtures/recoveryChild.ts +159 -0
  1196. package/src/core/services/rateLimiter/index.test.ts +106 -0
  1197. package/src/core/services/rateLimiter/index.ts +157 -0
  1198. package/src/core/services/rateLimiter/types.ts +10 -0
  1199. package/src/core/session/admitted-config.test.ts +50 -0
  1200. package/src/core/session/deprecated-headers-shim.test.ts +111 -0
  1201. package/src/core/session/execution-metrics.test.ts +297 -0
  1202. package/src/core/session/execution-metrics.ts +176 -0
  1203. package/src/core/session/index.ts +1085 -0
  1204. package/src/core/session/loader.ts +212 -0
  1205. package/src/core/session/persistence.test.ts +1210 -0
  1206. package/src/core/session/persistence.ts +1076 -0
  1207. package/src/core/session/rehydrate.test.ts +393 -0
  1208. package/src/core/session/types.ts +139 -0
  1209. package/src/core/session/usage.test.ts +99 -0
  1210. package/src/core/session/usage.ts +84 -0
  1211. package/src/core/skills/builtins/index.ts +22 -0
  1212. package/src/core/skills/builtins/pentest.ts +135 -0
  1213. package/src/core/skills/builtins/promptInjection.ts +44 -0
  1214. package/src/core/skills/builtins/threatModel.ts +336 -0
  1215. package/src/core/skills/index.ts +15 -0
  1216. package/src/core/skills/parser.test.ts +120 -0
  1217. package/src/core/skills/parser.ts +106 -0
  1218. package/src/core/skills/registry.test.ts +202 -0
  1219. package/src/core/skills/registry.ts +109 -0
  1220. package/src/core/skills/scanner.test.ts +157 -0
  1221. package/src/core/skills/scanner.ts +115 -0
  1222. package/src/core/skills/types.ts +45 -0
  1223. package/src/core/skills/utils.ts +16 -0
  1224. package/src/core/storage/index.ts +150 -0
  1225. package/src/core/tasks/index.ts +242 -0
  1226. package/src/core/tools/backends/capture.ts +38 -0
  1227. package/src/core/tools/backends/collectCommand.test.ts +33 -0
  1228. package/src/core/tools/backends/collectCommand.ts +28 -0
  1229. package/src/core/tools/backends/helpers.ts +140 -0
  1230. package/src/core/tools/backends/httpTransport.ts +534 -0
  1231. package/src/core/tools/backends/index.ts +61 -0
  1232. package/src/core/tools/backends/local.test.ts +307 -0
  1233. package/src/core/tools/backends/local.ts +820 -0
  1234. package/src/core/tools/backends/policy.test.ts +137 -0
  1235. package/src/core/tools/backends/policy.ts +129 -0
  1236. package/src/core/tools/backends/resolve.test.ts +309 -0
  1237. package/src/core/tools/backends/resolve.ts +152 -0
  1238. package/src/core/tools/backends/types.ts +279 -0
  1239. package/src/core/tools/backends/whitebox.test.ts +275 -0
  1240. package/src/core/tools/backends/whitebox.ts +14 -0
  1241. package/src/core/tools/backends/whiteboxJobs.test.ts +375 -0
  1242. package/src/core/tools/backends/whiteboxJobs.ts +157 -0
  1243. package/src/core/tools/backends/windowsProgram.ts +36 -0
  1244. package/src/core/tools/daytonaSandbox.test.ts +491 -0
  1245. package/src/core/tools/daytonaSandbox.ts +232 -0
  1246. package/src/core/toolset/index.ts +583 -0
  1247. package/src/core/util/lazyLogger.ts +32 -0
  1248. package/src/core/utils/concurrency.test.ts +204 -0
  1249. package/src/core/utils/concurrency.ts +75 -0
  1250. package/src/core/utils/prompt.ts +28 -0
  1251. package/src/core/whitebox/adapters.ts +277 -0
  1252. package/src/core/whitebox/artifacts.ts +128 -0
  1253. package/src/core/whitebox/boundedProcess.ts +265 -0
  1254. package/src/core/whitebox/candidates.ts +268 -0
  1255. package/src/core/whitebox/catalog.ts +82 -0
  1256. package/src/core/whitebox/index.ts +53 -0
  1257. package/src/core/whitebox/jobKernel.test.ts +91 -0
  1258. package/src/core/whitebox/jobKernel.ts +347 -0
  1259. package/src/core/whitebox/jobSupervisor.ts +264 -0
  1260. package/src/core/whitebox/jobs.ts +21 -0
  1261. package/src/core/whitebox/paths.ts +94 -0
  1262. package/src/core/whitebox/profileTransport.ts +225 -0
  1263. package/src/core/whitebox/profiles.ts +294 -0
  1264. package/src/core/whitebox/repoProfile.test.ts +217 -0
  1265. package/src/core/whitebox/repoProfile.ts +256 -0
  1266. package/src/core/whitebox/types.ts +189 -0
  1267. package/src/core/whitebox/whitebox.test.ts +789 -0
  1268. package/src/core/workflows/fastStrike.seams.test.ts +217 -0
  1269. package/src/core/workflows/fastStrike.test.ts +29 -0
  1270. package/src/core/workflows/fastStrike.ts +239 -0
  1271. package/src/core/workflows/pentest.test.ts +575 -0
  1272. package/src/core/workflows/pentest.ts +1022 -0
  1273. package/src/core/workflows/seams.test.ts +386 -0
  1274. package/src/core/workflows/seams.ts +276 -0
  1275. package/src/core/workflows/threatModel.ts +108 -0
  1276. package/src/core/workflows/usage-forwarding.test.ts +203 -0
  1277. package/src/core/workflows/whiteboxAttackSurface.test.ts +695 -0
  1278. package/src/core/workflows/whiteboxAttackSurface.ts +1740 -0
  1279. package/src/index.ts +49 -0
  1280. package/src/lib/attack-path/types.ts +13 -0
  1281. package/src/lib/cvss/calculator.test.ts +2090 -0
  1282. package/src/lib/cvss/calculator.ts +643 -0
  1283. package/src/lib/cvss/index.ts +65 -0
  1284. package/src/lib/cvss/macrovector-scores.ts +402 -0
  1285. package/src/lib/cvss/types.ts +241 -0
  1286. package/src/lib/cwe/cwe-catalog.ts +444 -0
  1287. package/src/lib/cwe/types.test.ts +142 -0
  1288. package/src/lib/cwe/types.ts +37 -0
  1289. package/src/lib/cwe/validate.test.ts +110 -0
  1290. package/src/lib/cwe/validate.ts +53 -0
  1291. package/src/lib/evidence/types.ts +9 -0
  1292. package/src/tests/agentWorkingDirectory.test.ts +175 -0
  1293. package/src/tests/attackSurface.test.ts +35 -0
  1294. package/src/tests/auth.test.ts +196 -0
  1295. package/src/tests/authCookieExport.test.ts +143 -0
  1296. package/src/tests/authPentestHandoff.test.ts +231 -0
  1297. package/src/tests/browserCookies.test.ts +128 -0
  1298. package/src/tests/credentialManager.test.ts +657 -0
  1299. package/src/tests/data/console.openapi.json +1037 -0
  1300. package/src/tests/data/console.sitemap.xml +348 -0
  1301. package/src/tests/delegateAuthMerge.test.ts +48 -0
  1302. package/src/tui/auto-copy.ts +36 -0
  1303. package/src/tui/clipboard.ts +65 -0
  1304. package/src/tui/command-registry.test.ts +124 -0
  1305. package/src/tui/command-registry.ts +645 -0
  1306. package/src/tui/command-router.ts +81 -0
  1307. package/src/tui/components/agent-display.tsx +480 -0
  1308. package/src/tui/components/ascii-art.tsx +225 -0
  1309. package/src/tui/components/chat/approval-inline.tsx +51 -0
  1310. package/src/tui/components/chat/config-view.tsx +279 -0
  1311. package/src/tui/components/chat/home-view.tsx +288 -0
  1312. package/src/tui/components/chat/index.tsx +161 -0
  1313. package/src/tui/components/chat/input-area.tsx +529 -0
  1314. package/src/tui/components/chat/lib/play-core/num.ts +102 -0
  1315. package/src/tui/components/chat/lib/wave-simulation.ts +124 -0
  1316. package/src/tui/components/chat/loading-indicator.test.ts +33 -0
  1317. package/src/tui/components/chat/loading-indicator.tsx +131 -0
  1318. package/src/tui/components/chat/message-list.tsx +265 -0
  1319. package/src/tui/components/chat/petri-animation.tsx +175 -0
  1320. package/src/tui/components/chat/plan-review-message.tsx +49 -0
  1321. package/src/tui/components/chat/questions-form.tsx +756 -0
  1322. package/src/tui/components/commands/__tests__/recorded-runs-lifecycle.tsx +907 -0
  1323. package/src/tui/components/commands/advanced-settings.tsx +94 -0
  1324. package/src/tui/components/commands/api-key-input.tsx +122 -0
  1325. package/src/tui/components/commands/auth-flow-logic.test.ts +58 -0
  1326. package/src/tui/components/commands/auth-flow-logic.ts +30 -0
  1327. package/src/tui/components/commands/auth-flow.tsx +702 -0
  1328. package/src/tui/components/commands/credits-flow.tsx +210 -0
  1329. package/src/tui/components/commands/help-dialog.tsx +238 -0
  1330. package/src/tui/components/commands/models-display.tsx +111 -0
  1331. package/src/tui/components/commands/operator-wizard.tsx +328 -0
  1332. package/src/tui/components/commands/provider-manager.tsx +241 -0
  1333. package/src/tui/components/commands/provider-selection.tsx +129 -0
  1334. package/src/tui/components/commands/recorded-runs.test.ts +40 -0
  1335. package/src/tui/components/commands/recorded-runs.tsx +793 -0
  1336. package/src/tui/components/commands/sessions-display.tsx +365 -0
  1337. package/src/tui/components/commands/shortcuts-dialog.tsx +52 -0
  1338. package/src/tui/components/commands/skills-dialog.tsx +308 -0
  1339. package/src/tui/components/commands/theme-picker.tsx +177 -0
  1340. package/src/tui/components/commands/web-wizard.tsx +965 -0
  1341. package/src/tui/components/dialog-layout.tsx +73 -0
  1342. package/src/tui/components/error-boundary.tsx +82 -0
  1343. package/src/tui/components/footer.tsx +101 -0
  1344. package/src/tui/components/input.tsx +43 -0
  1345. package/src/tui/components/loaders.tsx +784 -0
  1346. package/src/tui/components/model-picker/ModelPicker.tsx +907 -0
  1347. package/src/tui/components/model-picker/ModelPickerDialog.tsx +75 -0
  1348. package/src/tui/components/model-picker/index.ts +2 -0
  1349. package/src/tui/components/model-picker/model-navigation.test.ts +102 -0
  1350. package/src/tui/components/model-picker/model-navigation.ts +54 -0
  1351. package/src/tui/components/model-picker/model-search.test.ts +62 -0
  1352. package/src/tui/components/model-picker/model-search.ts +42 -0
  1353. package/src/tui/components/model-picker/model-visibility.test.ts +65 -0
  1354. package/src/tui/components/model-picker/model-visibility.ts +59 -0
  1355. package/src/tui/components/operator-dashboard/conversation.test.ts +431 -0
  1356. package/src/tui/components/operator-dashboard/conversation.ts +179 -0
  1357. package/src/tui/components/operator-dashboard/display-state.test.ts +369 -0
  1358. package/src/tui/components/operator-dashboard/display-state.ts +163 -0
  1359. package/src/tui/components/operator-dashboard/herdr-state.test.ts +162 -0
  1360. package/src/tui/components/operator-dashboard/herdr-state.ts +81 -0
  1361. package/src/tui/components/operator-dashboard/index.tsx +2044 -0
  1362. package/src/tui/components/operator-dashboard/logic.test.ts +753 -0
  1363. package/src/tui/components/operator-dashboard/logic.ts +465 -0
  1364. package/src/tui/components/operator-dashboard/queue.test.ts +147 -0
  1365. package/src/tui/components/operator-dashboard/queue.ts +55 -0
  1366. package/src/tui/components/operator-dashboard/queued-messages.tsx +50 -0
  1367. package/src/tui/components/operator-dashboard/run-events.test.ts +915 -0
  1368. package/src/tui/components/operator-dashboard/run-events.ts +507 -0
  1369. package/src/tui/components/operator-dashboard/run-tracing.test.ts +206 -0
  1370. package/src/tui/components/operator-dashboard/run-tracing.ts +105 -0
  1371. package/src/tui/components/operator-dashboard/subagent-detail-view.tsx +51 -0
  1372. package/src/tui/components/operator-dashboard/subagent-dialog.tsx +142 -0
  1373. package/src/tui/components/operator-dashboard/subagent-hub.test.ts +162 -0
  1374. package/src/tui/components/operator-dashboard/subagent-hub.tsx +266 -0
  1375. package/src/tui/components/operator-dashboard/subagent-state.test.ts +431 -0
  1376. package/src/tui/components/operator-dashboard/subagent-state.ts +404 -0
  1377. package/src/tui/components/operator-dashboard/subagent-status-bar.tsx +80 -0
  1378. package/src/tui/components/operator-dashboard/tool-argument-buffer.test.ts +317 -0
  1379. package/src/tui/components/operator-dashboard/tool-arguments.perf.test.ts +121 -0
  1380. package/src/tui/components/operator-dashboard/welcome-logo.tsx +79 -0
  1381. package/src/tui/components/operator-dashboard/workflow-data.test.ts +291 -0
  1382. package/src/tui/components/operator-dashboard/workflow-data.ts +130 -0
  1383. package/src/tui/components/report-viewer-dialog.tsx +98 -0
  1384. package/src/tui/components/responsible-use-disclosure.tsx +55 -0
  1385. package/src/tui/components/screenshot-modal.tsx +204 -0
  1386. package/src/tui/components/shared/__tests__/prompt-input-lifecycle.tsx +64 -0
  1387. package/src/tui/components/shared/__tests__/tool-renderer-lifecycle.tsx +87 -0
  1388. package/src/tui/components/shared/action-label.test.ts +142 -0
  1389. package/src/tui/components/shared/action-label.ts +18 -0
  1390. package/src/tui/components/shared/ascii-spinner.tsx +40 -0
  1391. package/src/tui/components/shared/compacting-icon.tsx +18 -0
  1392. package/src/tui/components/shared/dialog-controls.tsx +76 -0
  1393. package/src/tui/components/shared/index.ts +38 -0
  1394. package/src/tui/components/shared/markdown-viewer.tsx +188 -0
  1395. package/src/tui/components/shared/markdown.ts +239 -0
  1396. package/src/tui/components/shared/message-renderer.tsx +178 -0
  1397. package/src/tui/components/shared/message-utils.ts +175 -0
  1398. package/src/tui/components/shared/pentest-workflow-display.tsx +330 -0
  1399. package/src/tui/components/shared/prompt-input-lifecycle.test.ts +22 -0
  1400. package/src/tui/components/shared/prompt-input-logic.test.ts +782 -0
  1401. package/src/tui/components/shared/prompt-input-logic.ts +423 -0
  1402. package/src/tui/components/shared/prompt-input.tsx +782 -0
  1403. package/src/tui/components/shared/result-registry.test.ts +90 -0
  1404. package/src/tui/components/shared/result-registry.ts +900 -0
  1405. package/src/tui/components/shared/syntax-highlight.ts +242 -0
  1406. package/src/tui/components/shared/tool-registry.test.ts +59 -0
  1407. package/src/tui/components/shared/tool-registry.ts +280 -0
  1408. package/src/tui/components/shared/tool-renderer.test.ts +13 -0
  1409. package/src/tui/components/shared/tool-renderer.tsx +237 -0
  1410. package/src/tui/components/shared/type-guards.ts +64 -0
  1411. package/src/tui/components/shared/use-paste-extmarks.ts +109 -0
  1412. package/src/tui/components/switch.tsx +81 -0
  1413. package/src/tui/components/terminal-focus-handler.tsx +34 -0
  1414. package/src/tui/components/toast.tsx +82 -0
  1415. package/src/tui/components/usage-labels.test.ts +191 -0
  1416. package/src/tui/components/usage-labels.ts +78 -0
  1417. package/src/tui/console-theme.ts +59 -0
  1418. package/src/tui/context/agent.tsx +251 -0
  1419. package/src/tui/context/command.tsx +291 -0
  1420. package/src/tui/context/config.tsx +59 -0
  1421. package/src/tui/context/dialog.tsx +206 -0
  1422. package/src/tui/context/dimensions.tsx +31 -0
  1423. package/src/tui/context/focus-ownership.test.ts +26 -0
  1424. package/src/tui/context/focus-ownership.ts +12 -0
  1425. package/src/tui/context/focus.tsx +86 -0
  1426. package/src/tui/context/herdr.tsx +28 -0
  1427. package/src/tui/context/input.tsx +45 -0
  1428. package/src/tui/context/keybinding.tsx +92 -0
  1429. package/src/tui/context/obfuscation.tsx +114 -0
  1430. package/src/tui/context/route.tsx +127 -0
  1431. package/src/tui/context/session-usage.test.ts +295 -0
  1432. package/src/tui/context/session-usage.ts +204 -0
  1433. package/src/tui/context/session.tsx +62 -0
  1434. package/src/tui/context/toast.tsx +66 -0
  1435. package/src/tui/generated-ascii-art.json +1 -0
  1436. package/src/tui/generated-ascii-art.json.d.ts +2 -0
  1437. package/src/tui/herdr-startup.test.ts +157 -0
  1438. package/src/tui/hooks/use-sessions-list.ts +165 -0
  1439. package/src/tui/index.tsx +838 -0
  1440. package/src/tui/keybindings/index.ts +126 -0
  1441. package/src/tui/keybindings/registry.ts +146 -0
  1442. package/src/tui/keybindings-registry.ts +43 -0
  1443. package/src/tui/obfuscation/patch.ts +139 -0
  1444. package/src/tui/terminal-focus.ts +218 -0
  1445. package/src/tui/theme/colors.ts +43 -0
  1446. package/src/tui/theme/context.tsx +137 -0
  1447. package/src/tui/theme/detect-mode.ts +56 -0
  1448. package/src/tui/theme/index.ts +75 -0
  1449. package/src/tui/theme/registry.ts +29 -0
  1450. package/src/tui/theme/themes/apex.ts +190 -0
  1451. package/src/tui/theme/themes/ayu.ts +189 -0
  1452. package/src/tui/theme/themes/catppuccin.ts +189 -0
  1453. package/src/tui/theme/themes/dracula.ts +190 -0
  1454. package/src/tui/theme/themes/everforest.ts +189 -0
  1455. package/src/tui/theme/themes/flexoki.ts +190 -0
  1456. package/src/tui/theme/themes/github.ts +189 -0
  1457. package/src/tui/theme/themes/gruvbox.ts +189 -0
  1458. package/src/tui/theme/themes/index.ts +54 -0
  1459. package/src/tui/theme/themes/kanagawa.ts +189 -0
  1460. package/src/tui/theme/themes/material.ts +190 -0
  1461. package/src/tui/theme/themes/monokai.ts +190 -0
  1462. package/src/tui/theme/themes/nightfox.ts +189 -0
  1463. package/src/tui/theme/themes/nord.ts +190 -0
  1464. package/src/tui/theme/themes/onedark.ts +190 -0
  1465. package/src/tui/theme/themes/rose-pine.ts +189 -0
  1466. package/src/tui/theme/themes/solarized.ts +189 -0
  1467. package/src/tui/theme/themes/tokyonight.ts +189 -0
  1468. package/src/tui/theme/themes/vesper.ts +191 -0
  1469. package/src/tui/theme/types.ts +143 -0
  1470. package/src/tui/utils/command-flags.test.ts +269 -0
  1471. package/src/tui/utils/command-flags.ts +377 -0
  1472. package/src/tui/utils/kitty-graphics.ts +76 -0
  1473. package/src/tui/utils/open-file.ts +37 -0
  1474. package/src/tui/utils/open-report.ts +34 -0
  1475. package/src/tui/utils/open-url.ts +39 -0
  1476. package/src/tui/utils/paste.ts +8 -0
  1477. package/src/tui/utils/scroll.ts +81 -0
  1478. package/src/util/errors.ts +58 -0
  1479. package/src/util/lock.ts +100 -0
  1480. package/src/util/name.ts +148 -0
  1481. package/src/util/url.test.ts +162 -0
  1482. package/src/util/url.ts +107 -0
  1483. package/build/agent-13rrhp8d.js +0 -20
  1484. package/build/agent-zbj2331s.js +0 -30
  1485. package/build/authentication-f4j3w5vs.js +0 -20
  1486. package/build/blackboxAgent-v2vx9ws4.js +0 -20
  1487. package/build/blackboxPentest-w5nwzpvk.js +0 -70
  1488. package/build/cli-5wemv37a.js +0 -194
  1489. package/build/cli-7s062hr6.js +0 -22
  1490. package/build/cli-9qbxkhye.js +0 -55
  1491. package/build/cli-avmhkjtv.js +0 -22961
  1492. package/build/cli-g3czc3jz.js +0 -204
  1493. package/build/cli-ww7hbazg.js +0 -88
  1494. package/build/index-18vyy6mj.js +0 -19
  1495. package/build/index-5wh7gq37.js +0 -12858
  1496. package/build/index-e23zc8g4.js +0 -34
  1497. package/build/index-hnwhswqj.js +0 -213
  1498. package/build/index-wkmnr4nm.js +0 -39
  1499. package/build/index-ywmfnd30.js +0 -12
  1500. package/build/offesecAgent-c97pqzcn.js +0 -27
  1501. package/build/pentest-4p5jt7gj.js +0 -30
  1502. package/build/pentests-v98eg8n3.js +0 -92
  1503. package/build/threatModel-81d4rcbk.js +0 -29
  1504. /package/build/{cli-c8131c4q.js → cli-0wsh8j2t.js} +0 -0
  1505. /package/build/{cli-9pbk8m32.js → cli-ag6jtndp.js} +0 -0
  1506. /package/build/{cli-e08r86zk.js → cli-b3dvxjgk.js} +0 -0
  1507. /package/build/{cli-fw5r7pfj.js → cli-q126f6ef.js} +0 -0
  1508. /package/build/{cli-9fsre5pt.js → cli-qba2x69h.js} +0 -0
  1509. /package/build/{cli-7q3ae3ft.js → cli-z82n3qk1.js} +0 -0
@@ -0,0 +1,2429 @@
1
+ import {
2
+ AgentEventBus2
3
+ } from "./chunk-7gjdygcx.js";
4
+ import {
5
+ newMessageId2,
6
+ newPartId2
7
+ } from "./chunk-jdjagvgr.js";
8
+ import {
9
+ registerActiveRootSpan2,
10
+ unregisterActiveRootSpan2,
11
+ getApexTracer2,
12
+ shouldRecordAiPayloads2,
13
+ withSubagentSessionBaggage2,
14
+ getActiveTraceCorrelation2
15
+ } from "./chunk-2njv7wz3.js";
16
+ import {
17
+ create2,
18
+ createLogger,
19
+ scopedLogger,
20
+ normalizeStepUsage2,
21
+ streamResponse2
22
+ } from "./chunk-sgd2126b.js";
23
+ import {
24
+ PerCommandShell2,
25
+ resolveBrowserHeaderPolicy2,
26
+ transformScriptToFunction2,
27
+ parseStorageStateResult2,
28
+ setHeadlessMode2,
29
+ setUserAgent2,
30
+ setViewportSize2,
31
+ PlaywrightMcpSession2,
32
+ createBrowserTools2,
33
+ ScopeViolationError2,
34
+ getAllowedHosts2,
35
+ isHostAllowed2,
36
+ extractHostname2,
37
+ assertUrlInScope2,
38
+ extractHostsFromCommand2,
39
+ assertCommandInScope2,
40
+ checkSandboxPlaywright2,
41
+ installSandboxPlaywright2,
42
+ ensureSandboxPlaywright2,
43
+ ensureSandboxBrowser2,
44
+ SandboxBrowserBackend2,
45
+ createSandboxBrowserTools2,
46
+ resolveBackends2
47
+ } from "./chunk-fy3bbbqy.js";
48
+ import {
49
+ inProcessSubagentSpawner2
50
+ } from "./chunk-ve7m90fb.js";
51
+ import {
52
+ addMemory2,
53
+ ASK_USER_QUESTIONS_TOOL_NAME2,
54
+ AskUserQuestionSchema2,
55
+ BROWSER_TOOL_NAMES2,
56
+ createBrowserToolset2,
57
+ CallbackListenerRegistry2,
58
+ checkpointState2,
59
+ completeAuthentication2,
60
+ crawlAuthenticated2,
61
+ createAttackSurfaceReport2,
62
+ createFile2,
63
+ createTask2,
64
+ delegateAuth2,
65
+ detectAuthScheme2,
66
+ documentApp2,
67
+ documentEndpoint2,
68
+ documentVulnerability2,
69
+ createEmailToolset2,
70
+ EMAIL_TOOL_NAMES2,
71
+ SEND_EMAIL_TOOL_NAME2,
72
+ executeCommand2,
73
+ extractJsEndpoints2,
74
+ getMemory2,
75
+ getPage2,
76
+ grep2,
77
+ httpRequest2,
78
+ listFiles2,
79
+ listMemories2,
80
+ listTasksTool2,
81
+ probeAuthEndpoints2,
82
+ provideComparisonResults2,
83
+ readFile2,
84
+ readSkill2,
85
+ REPORT_ERROR_TOOL_NAME2,
86
+ ReportErrorReasonSchema2,
87
+ createReportErrorTool2,
88
+ PentestReportedError2,
89
+ RESPONSE_TOOL_NAME2,
90
+ createResponseTool2,
91
+ runAttackSurface2,
92
+ runPentestWorkflow3,
93
+ SMS_LIST_MESSAGES_TOOL_NAME2,
94
+ SMS_TOOL_NAMES2,
95
+ sessionHasSmsPasswordless2,
96
+ spawnCodingAgent2,
97
+ spawnPentestAgent2,
98
+ spawnPentestSwarm2,
99
+ submitPlan2,
100
+ testEndpointVariations2,
101
+ updateFile2,
102
+ updateTask2,
103
+ validateDiscovery2,
104
+ webSearch2,
105
+ listWorkspaceApps2,
106
+ createWorkspaceApp2,
107
+ updateWorkspaceApp2,
108
+ listWorkspaceEndpoints2,
109
+ createWorkspaceEndpoint2,
110
+ updateWorkspaceEndpoint2,
111
+ listWorkspaceDomains2,
112
+ createWorkspaceDomain2,
113
+ writePlan2,
114
+ listToolRegistryNames2,
115
+ createAllTools2,
116
+ createToolsForNames2,
117
+ WORKSPACE_TOOL_NAMES2,
118
+ WORKSPACE_WRITE_TOOL_NAMES2,
119
+ ALL_TOOL_NAMES2,
120
+ FAST_STRIKE_EXCLUDED_TOOL_NAMES2,
121
+ PLAN_MODE_TOOL_NAMES2,
122
+ SKILL_TOOL_NAMES2
123
+ } from "./chunk-gdrv2h1p.js";
124
+ import {
125
+ ApexFindingObject2
126
+ } from "./chunk-q5e23acz.js";
127
+ import {
128
+ __export
129
+ } from "./chunk-n0ba7khr.js";
130
+
131
+ // src/core/agents/offSecAgent/index.ts
132
+ var exports_offSecAgent = {};
133
+ __export(exports_offSecAgent, {
134
+ ALL_TOOL_NAMES: () => ALL_TOOL_NAMES2,
135
+ ASK_USER_QUESTIONS_TOOL_NAME: () => ASK_USER_QUESTIONS_TOOL_NAME2,
136
+ AgentEventBus: () => AgentEventBus2,
137
+ ApexFindingObject: () => ApexFindingObject2,
138
+ AskUserQuestionSchema: () => AskUserQuestionSchema2,
139
+ BASE_SYSTEM_PROMPT: () => BASE_SYSTEM_PROMPT2,
140
+ BROWSER_TOOL_NAMES: () => BROWSER_TOOL_NAMES2,
141
+ EMAIL_TOOL_NAMES: () => EMAIL_TOOL_NAMES2,
142
+ EMAIL_TOOL_NAMES_ACTIVE: () => EMAIL_TOOL_NAMES2,
143
+ FAST_STRIKE_EXCLUDED_TOOL_NAMES: () => FAST_STRIKE_EXCLUDED_TOOL_NAMES2,
144
+ OffensiveSecurityAgent: () => OffensiveSecurityAgent2,
145
+ PLAN_MODE_TOOL_NAMES: () => PLAN_MODE_TOOL_NAMES2,
146
+ PentestReportedError: () => PentestReportedError2,
147
+ PerCommandShell: () => PerCommandShell2,
148
+ PlaywrightMcpSession: () => PlaywrightMcpSession2,
149
+ REPORT_ERROR_TOOL_NAME: () => REPORT_ERROR_TOOL_NAME2,
150
+ RESPONSE_TOOL_NAME: () => RESPONSE_TOOL_NAME2,
151
+ ReportErrorReasonSchema: () => ReportErrorReasonSchema2,
152
+ SEND_EMAIL_TOOL_NAME: () => SEND_EMAIL_TOOL_NAME2,
153
+ SKILL_TOOL_NAMES: () => SKILL_TOOL_NAMES2,
154
+ SMS_LIST_MESSAGES_TOOL_NAME: () => SMS_LIST_MESSAGES_TOOL_NAME2,
155
+ SMS_TOOL_NAMES: () => SMS_TOOL_NAMES2,
156
+ SMS_TOOL_NAMES_ACTIVE: () => SMS_TOOL_NAMES2,
157
+ SandboxBrowserBackend: () => SandboxBrowserBackend2,
158
+ ScopeViolationError: () => ScopeViolationError2,
159
+ StepTraceWriter: () => StepTraceWriter2,
160
+ addMemory: () => addMemory2,
161
+ assertCommandInScope: () => assertCommandInScope2,
162
+ assertUrlInScope: () => assertUrlInScope2,
163
+ buildBaseSystemPrompt: () => buildBaseSystemPrompt2,
164
+ buildProvidedFilesSection: () => buildProvidedFilesSection2,
165
+ buildSessionWorkspaceSection: () => buildSessionWorkspaceSection2,
166
+ checkSandboxPlaywright: () => checkSandboxPlaywright2,
167
+ checkpointState: () => checkpointState2,
168
+ completeAuthentication: () => completeAuthentication2,
169
+ crawlAuthenticated: () => crawlAuthenticated2,
170
+ createAllTools: () => createAllTools2,
171
+ createAttackSurfaceReport: () => createAttackSurfaceReport2,
172
+ createBrowserTools: () => createBrowserTools2,
173
+ createBrowserToolset: () => createBrowserToolset2,
174
+ createEmailToolset: () => createEmailToolset2,
175
+ createFile: () => createFile2,
176
+ createReportErrorTool: () => createReportErrorTool2,
177
+ createResponseTool: () => createResponseTool2,
178
+ createSandboxBrowserTools: () => createSandboxBrowserTools2,
179
+ createTask: () => createTask2,
180
+ createToolsForNames: () => createToolsForNames2,
181
+ createWorkspaceApp: () => createWorkspaceApp2,
182
+ createWorkspaceDomain: () => createWorkspaceDomain2,
183
+ createWorkspaceEndpoint: () => createWorkspaceEndpoint2,
184
+ delegateAuth: () => delegateAuth2,
185
+ detectAuthScheme: () => detectAuthScheme2,
186
+ documentApp: () => documentApp2,
187
+ documentEndpoint: () => documentEndpoint2,
188
+ documentVulnerability: () => documentVulnerability2,
189
+ ensureSandboxBrowser: () => ensureSandboxBrowser2,
190
+ ensureSandboxPlaywright: () => ensureSandboxPlaywright2,
191
+ executeCommand: () => executeCommand2,
192
+ extractHostname: () => extractHostname2,
193
+ extractHostsFromCommand: () => extractHostsFromCommand2,
194
+ extractJsEndpoints: () => extractJsEndpoints2,
195
+ getAllowedHosts: () => getAllowedHosts2,
196
+ getMemory: () => getMemory2,
197
+ getPage: () => getPage2,
198
+ grep: () => grep2,
199
+ httpRequest: () => httpRequest2,
200
+ installSandboxPlaywright: () => installSandboxPlaywright2,
201
+ isHostAllowed: () => isHostAllowed2,
202
+ listFiles: () => listFiles2,
203
+ listMemories: () => listMemories2,
204
+ listTasksTool: () => listTasksTool2,
205
+ listToolRegistryNames: () => listToolRegistryNames2,
206
+ listWorkspaceApps: () => listWorkspaceApps2,
207
+ listWorkspaceDomains: () => listWorkspaceDomains2,
208
+ listWorkspaceEndpoints: () => listWorkspaceEndpoints2,
209
+ parseStorageStateResult: () => parseStorageStateResult2,
210
+ probeAuthEndpoints: () => probeAuthEndpoints2,
211
+ provideComparisonResults: () => provideComparisonResults2,
212
+ readFile: () => readFile2,
213
+ readSkill: () => readSkill2,
214
+ runAttackSurface: () => runAttackSurface2,
215
+ runPentestWorkflow: () => runPentestWorkflow3,
216
+ sessionHasSmsPasswordless: () => sessionHasSmsPasswordless2,
217
+ setHeadlessMode: () => setHeadlessMode2,
218
+ setUserAgent: () => setUserAgent2,
219
+ setViewportSize: () => setViewportSize2,
220
+ spawnCodingAgent: () => spawnCodingAgent2,
221
+ spawnPentestAgent: () => spawnPentestAgent2,
222
+ spawnPentestSwarm: () => spawnPentestSwarm2,
223
+ submitPlan: () => submitPlan2,
224
+ testEndpointVariations: () => testEndpointVariations2,
225
+ transformScriptToFunction: () => transformScriptToFunction2,
226
+ updateFile: () => updateFile2,
227
+ updateTask: () => updateTask2,
228
+ updateWorkspaceApp: () => updateWorkspaceApp2,
229
+ updateWorkspaceEndpoint: () => updateWorkspaceEndpoint2,
230
+ validateDiscovery: () => validateDiscovery2,
231
+ webSearch: () => webSearch2,
232
+ writePlan: () => writePlan2
233
+ });
234
+ // src/core/agents/offSecAgent/offensiveSecurityAgent.ts
235
+ import { existsSync as existsSync4, mkdirSync as mkdirSync2 } from "node:fs";
236
+ import { join as join3 } from "node:path";
237
+ import { SpanStatusCode } from "@opentelemetry/api";
238
+ import { hasToolCall } from "ai";
239
+
240
+ // src/core/operator/approvalGate.ts
241
+ var DEFAULT_DECISION_TIMEOUT_MS = 15 * 60 * 1000;
242
+ class ApprovalDeniedError extends Error {
243
+ constructor(message) {
244
+ super(message);
245
+ this.name = "ApprovalDeniedError";
246
+ }
247
+ }
248
+ // src/core/operator/types.ts
249
+ import { z } from "zod";
250
+ var OperatorSettingsObject = z.object({
251
+ initialMode: z.enum(["plan", "manual", "auto"]).default("manual"),
252
+ requireApproval: z.boolean().default(true)
253
+ });
254
+ // src/core/agents/offSecAgent/interruptedStepFinalization.ts
255
+ import { existsSync, readFileSync } from "node:fs";
256
+
257
+ // src/core/agents/offSecAgent/interruptedStepMessages.ts
258
+ function buildSyntheticToolResults(input) {
259
+ const output = {
260
+ type: "error-text",
261
+ value: `Tool execution aborted: ${input.reason}`
262
+ };
263
+ const parts = [];
264
+ for (const [toolCallId, toolName] of input.inFlightTools) {
265
+ const result = toolName === input.responseToolName && input.responseSubmitted ? { type: "text", value: "Response submitted." } : output;
266
+ parts.push({
267
+ type: "tool-result",
268
+ toolCallId,
269
+ toolName,
270
+ output: result
271
+ });
272
+ }
273
+ return parts;
274
+ }
275
+ function baseContainsToolCalls(msg, toolCallIds) {
276
+ if (!Array.isArray(msg.content))
277
+ return false;
278
+ const contentToolIds = new Set(msg.content.filter((p) => p.type === "tool-call" && p.toolCallId).map((p) => p.toolCallId));
279
+ return [...toolCallIds].every((id) => contentToolIds.has(id));
280
+ }
281
+ function buildInterruptedStepMessages(input) {
282
+ const { base, inFlightTools, completedResults, syntheticParts } = input;
283
+ const allToolCallIds = new Set([
284
+ ...inFlightTools.keys(),
285
+ ...completedResults.map((r) => r.toolCallId)
286
+ ]);
287
+ const lastMsg = base[base.length - 1];
288
+ const needsStepReconstruction = !lastMsg || lastMsg.role !== "assistant" || !baseContainsToolCalls(lastMsg, allToolCallIds);
289
+ const appended = [];
290
+ if (needsStepReconstruction) {
291
+ const stepTools = [
292
+ ...inFlightTools,
293
+ ...completedResults.map((r) => [
294
+ r.toolCallId,
295
+ r.toolName
296
+ ])
297
+ ];
298
+ const reconstructInput = (toolCallId) => {
299
+ const raw = input.streamedArgText?.get(toolCallId);
300
+ if (!raw)
301
+ return {};
302
+ try {
303
+ return JSON.parse(raw);
304
+ } catch {
305
+ return { _partial: raw };
306
+ }
307
+ };
308
+ appended.push({
309
+ role: "assistant",
310
+ content: stepTools.map(([toolCallId, toolName]) => ({
311
+ type: "tool-call",
312
+ toolCallId,
313
+ toolName,
314
+ input: reconstructInput(toolCallId)
315
+ }))
316
+ });
317
+ }
318
+ appended.push({
319
+ role: "tool",
320
+ content: [...completedResults, ...syntheticParts]
321
+ });
322
+ return { appended, needsStepReconstruction };
323
+ }
324
+
325
+ // src/core/agents/offSecAgent/interruptedStepFinalization.ts
326
+ function createInterruptedStepFinalizer(deps) {
327
+ const debug = deps.debugLog;
328
+ const readBaseFromDisk = deps.readBaseFromDisk ?? (() => {
329
+ const path = deps.writer.messagesPath;
330
+ if (!path || !existsSync(path))
331
+ return null;
332
+ try {
333
+ return JSON.parse(readFileSync(path, "utf-8"));
334
+ } catch {
335
+ return null;
336
+ }
337
+ });
338
+ return async (input) => {
339
+ const { snapshot, reason } = input;
340
+ const { inFlightTools, completedResults, streamedArgText } = snapshot;
341
+ const syntheticParts = buildSyntheticToolResults({
342
+ inFlightTools,
343
+ reason,
344
+ responseToolName: deps.responseToolName,
345
+ responseSubmitted: deps.responseToolFired()
346
+ });
347
+ let emissionError;
348
+ let hasEmissionError = false;
349
+ if (debug) {
350
+ const responseInFlight = [...inFlightTools.entries()].filter(([, n]) => n === deps.responseToolName);
351
+ if (responseInFlight.length > 0) {
352
+ debug(`[response-debug] emitSyntheticToolResults closing ${responseInFlight.length} response call(s) ` + `ids=${responseInFlight.map(([id]) => id).join(",")} reason="${reason}" ` + `responseToolFired=${deps.responseToolFired()}`);
353
+ }
354
+ }
355
+ for (const part of syntheticParts) {
356
+ try {
357
+ deps.eventBus.emit("tool-result", {
358
+ toolCallId: part.toolCallId,
359
+ toolName: part.toolName,
360
+ result: part.output,
361
+ sessionId: deps.sessionId,
362
+ subagentId: deps.subagentId,
363
+ partId: input.partIdFor?.(part.toolCallId),
364
+ messageId: input.messageId
365
+ });
366
+ } catch (error) {
367
+ if (!hasEmissionError) {
368
+ emissionError = error;
369
+ hasEmissionError = true;
370
+ }
371
+ }
372
+ }
373
+ if (!deps.writer.messagesPath) {
374
+ if (hasEmissionError)
375
+ throw emissionError;
376
+ return;
377
+ }
378
+ deps.writer.cancelTimer();
379
+ await deps.writer.waitForPendingWrites();
380
+ let base = deps.writer.latest ?? [];
381
+ if (base.length === 0) {
382
+ base = readBaseFromDisk() ?? [];
383
+ }
384
+ const { appended, needsStepReconstruction } = buildInterruptedStepMessages({
385
+ base,
386
+ inFlightTools,
387
+ completedResults,
388
+ syntheticParts,
389
+ streamedArgText
390
+ });
391
+ if (needsStepReconstruction && debug) {
392
+ const responseReconstructed = [
393
+ ...inFlightTools,
394
+ ...completedResults.map((r) => [r.toolCallId, r.toolName])
395
+ ].filter(([, n]) => n === deps.responseToolName).map(([id]) => id);
396
+ if (responseReconstructed.length > 0) {
397
+ debug(`[response-debug] step-reconstruction for response call(s) ` + `ids=${responseReconstructed.join(",")} ` + `preservedArgChars=${responseReconstructed.map((id) => streamedArgText?.get(id)?.length ?? 0).join(",")}`);
398
+ }
399
+ }
400
+ const next = [...base, ...appended];
401
+ deps.writer.setLatest(next);
402
+ try {
403
+ await deps.writer.enqueueWrite(next);
404
+ deps.writer.markSyntheticsPersisted();
405
+ } catch {}
406
+ if (hasEmissionError)
407
+ throw emissionError;
408
+ };
409
+ }
410
+
411
+ // src/core/agents/offSecAgent/messagePersistence.ts
412
+ import { writeFile } from "node:fs/promises";
413
+ var PERSIST_INTERVAL_MS = 15000;
414
+
415
+ class AgentMessageWriter {
416
+ intervalMs;
417
+ writeImpl;
418
+ path;
419
+ pending = null;
420
+ tail = Promise.resolve();
421
+ persistTimer = null;
422
+ syntheticsWritten = false;
423
+ constructor(options) {
424
+ this.path = options.messagesPath;
425
+ this.intervalMs = options.intervalMs ?? PERSIST_INTERVAL_MS;
426
+ this.writeImpl = options.writeImpl ?? ((p, contents) => writeFile(p, contents));
427
+ }
428
+ get messagesPath() {
429
+ return this.path;
430
+ }
431
+ get latest() {
432
+ return this.pending;
433
+ }
434
+ setLatest(messages) {
435
+ this.pending = messages;
436
+ }
437
+ get syntheticsPersisted() {
438
+ return this.syntheticsWritten;
439
+ }
440
+ markSyntheticsPersisted() {
441
+ this.syntheticsWritten = true;
442
+ }
443
+ schedulePersist() {
444
+ if (this.persistTimer)
445
+ return;
446
+ this.persistTimer = setTimeout(() => {
447
+ this.persistTimer = null;
448
+ const toWrite = this.pending;
449
+ if (!toWrite)
450
+ return;
451
+ this.enqueueWrite(toWrite).then(() => {
452
+ if (this.pending === toWrite)
453
+ this.pending = null;
454
+ }).catch(() => {});
455
+ }, this.intervalMs);
456
+ }
457
+ cancelTimer() {
458
+ if (this.persistTimer) {
459
+ clearTimeout(this.persistTimer);
460
+ this.persistTimer = null;
461
+ }
462
+ }
463
+ async enqueueWrite(messages) {
464
+ const path = this.path;
465
+ if (!path)
466
+ return;
467
+ const contents = JSON.stringify(messages);
468
+ const write = this.tail.then(() => this.writeImpl(path, contents));
469
+ this.tail = write.catch(() => {});
470
+ await write;
471
+ }
472
+ async waitForPendingWrites() {
473
+ let pending;
474
+ do {
475
+ pending = this.tail;
476
+ await pending;
477
+ } while (pending !== this.tail);
478
+ }
479
+ }
480
+
481
+ // src/core/agents/offSecAgent/prompt.ts
482
+ import { existsSync as existsSync2, readdirSync, statSync } from "node:fs";
483
+ import { join } from "node:path";
484
+ function buildProvidedFilesSection2(sessionRootPath, fileWorkspaceRoot) {
485
+ const providedDir = join(sessionRootPath, "provided_files");
486
+ if (!existsSync2(providedDir))
487
+ return "";
488
+ let entries;
489
+ try {
490
+ entries = readdirSync(providedDir);
491
+ } catch {
492
+ return "";
493
+ }
494
+ const fileEntries = entries.filter((name) => name !== "README.md").map((name) => {
495
+ try {
496
+ const stat = statSync(join(providedDir, name));
497
+ if (!stat.isFile())
498
+ return null;
499
+ return { name, size: stat.size };
500
+ } catch {
501
+ return null;
502
+ }
503
+ }).filter((e) => e !== null);
504
+ if (fileEntries.length === 0)
505
+ return "";
506
+ const lines = fileEntries.map((f) => `- \`provided_files/${f.name}\` (${f.size} bytes)`);
507
+ const readGuidance = fileWorkspaceRoot ? "Use `execute_command` with the absolute directory above to inspect these files, or copy inputs into the file workspace before using `read_file` / `list_files`." : "Read these with `read_file` and list directory contents with `list_files provided_files/` as needed.";
508
+ return `
509
+
510
+ # Provided Files
511
+
512
+ The user has uploaded the following files for this session. They are available at \`${providedDir}\` (relative path: \`provided_files/\`) and may include sample payloads, reference documentation, test data, or other context the agent should consult when planning and executing its work.
513
+
514
+ ${lines.join(`
515
+ `)}
516
+
517
+ ${readGuidance} A \`README.md\` inside \`provided_files/\` may include per-file descriptions supplied by the user — check it first before diving into individual files.`;
518
+ }
519
+ function buildSessionWorkspaceSection2(session, agentCwd, activeTools, fileWorkspaceRoot) {
520
+ const sandboxMode = agentCwd === session.rootPath;
521
+ const providedFilesSection = buildProvidedFilesSection2(session.rootPath, fileWorkspaceRoot);
522
+ const sourceAssessmentSection = buildSourceAssessmentSection(session, agentCwd, { sandboxMode, activeTools, fileWorkspaceRoot });
523
+ if (fileWorkspaceRoot) {
524
+ return `
525
+
526
+ # Working Directory and File Workspace
527
+
528
+ Your shell starts in ${agentCwd}. Native file tools are confined to ${fileWorkspaceRoot}; their relative paths resolve inside that directory, independently of the shell's working directory.
529
+
530
+ Create and edit helper scripts inside the file workspace. Use absolute helper paths with \`execute_command\` to check and run them. Do not prefix native file-tool paths with \`scratchpad/\` or \`provided_files/\` to reach session directories outside the file workspace.
531
+
532
+ Session artifacts live at ${session.rootPath}. Findings and published PoCs are written by \`document_vulnerability\`, and browser tools save their own evidence. Session logs and provided files outside the file workspace must be inspected through command tools or copied into the file workspace before native file tools can read them.${providedFilesSection}${sourceAssessmentSection}`;
533
+ }
534
+ if (sandboxMode) {
535
+ return `
536
+
537
+ # Session Workspace
538
+
539
+ Your shell is already set to the session directory. **Do not \`cd\` into it** — you are already there. Just run commands directly (e.g. \`npx create-next-app my-app\`, \`mkdir test\`, \`curl ...\`). Use relative paths for everything.
540
+
541
+ The session directory (${session.rootPath}) contains these subdirectories:
542
+ - **findings/** — vulnerability findings (written by \`document_vulnerability\`)
543
+ - **pocs/** — proof-of-concept scripts (written by \`document_vulnerability\`)
544
+ - **scratchpad/** — your scratch space for working notes, intermediate data, wordlists, temporary scripts. **Do NOT write reports, executive summaries, or finding compilations here** — reports are generated automatically from findings/.
545
+ - **logs/** — execution logs
546
+ - **evidence/** — screenshots and evidence (written by browser tools)
547
+ - **provided_files/** — user-uploaded files (sample payloads, docs, test data); populated when the project has workspace files configured.
548
+
549
+ Tools like \`document_vulnerability\` and browser evidence capture write to the correct subdirectories automatically.${providedFilesSection}${sourceAssessmentSection}`;
550
+ }
551
+ return `
552
+
553
+ # Working Directory
554
+
555
+ Your shell starts in the user's project directory: ${agentCwd}
556
+ Use relative paths to reference project files.
557
+
558
+ Session artifacts are stored separately at ${session.rootPath}:
559
+ - **findings/** — written by \`document_vulnerability\`
560
+ - **pocs/** — written by \`document_vulnerability\`
561
+ - **scratchpad/** — your scratch space
562
+ - **logs/** — execution logs
563
+ - **evidence/** — screenshots and evidence
564
+ - **provided_files/** — user-uploaded files (sample payloads, docs, test data); populated when the project has workspace files configured.
565
+
566
+ Tools like \`document_vulnerability\` and browser evidence capture write to the session directory automatically.${providedFilesSection}${sourceAssessmentSection}`;
567
+ }
568
+ var SOURCE_ASSESSMENT_TOOL_NAMES = [
569
+ "profile_codebase",
570
+ "query_whitebox_catalog",
571
+ "run_code_query",
572
+ "run_whitebox_scan"
573
+ ];
574
+ var REPO_MUTATION_TOOL_NAMES = [
575
+ "update_file",
576
+ "apply_patch",
577
+ "create_file",
578
+ "delete_file"
579
+ ];
580
+ function buildSourceAssessmentSection(session, agentCwd, {
581
+ sandboxMode,
582
+ activeTools,
583
+ fileWorkspaceRoot
584
+ }) {
585
+ const codebasePath = session.config?.codebasePath;
586
+ const hasSourceAccess = Boolean(codebasePath) || !sandboxMode && !fileWorkspaceRoot;
587
+ if (!hasSourceAccess)
588
+ return "";
589
+ if (activeTools && !SOURCE_ASSESSMENT_TOOL_NAMES.some((name) => activeTools.includes(name))) {
590
+ return "";
591
+ }
592
+ const sourceRoot = codebasePath ?? agentCwd;
593
+ const alignmentNote = codebasePath && codebasePath !== agentCwd ? `
594
+ The configured codebase path is ${codebasePath}, while your shell starts in ${agentCwd}. Use the configured codebase path for source analysis unless the user says otherwise.` : "";
595
+ const mayEditRepo = !fileWorkspaceRoot && (activeTools?.some((name) => REPO_MUTATION_TOOL_NAMES.includes(name)) ?? false);
596
+ const repoEditBullet = fileWorkspaceRoot ? `
597
+ - Source access is read-only. Keep harnesses, generated inputs, and scratch scripts inside ${fileWorkspaceRoot}. Helper-file tools do not authorize target repository changes. Do not use shell commands to edit target source or bypass the helper workspace.` : mayEditRepo ? `
598
+ - Keep harnesses, generated inputs, and scratch scripts at ${session.scratchpadPath} (an absolute session path, not a repo-relative path). Limit repo edits to the change you were dispatched to make.` : `
599
+ - Do not modify the target repo by default. Put harnesses, generated inputs, and scratch scripts at ${session.scratchpadPath} unless the operator approves repo edits.`;
600
+ const hasTool = (name) => !activeTools || activeTools.includes(name);
601
+ const toolGuidance = [
602
+ hasTool("profile_codebase") && "- Start with `profile_codebase` when the repo is unfamiliar.",
603
+ hasTool("query_whitebox_catalog") && "- Query only relevant playbook slices with `query_whitebox_catalog`; do not carry the whole methodology in context.",
604
+ hasTool("run_code_query") && "- Use `run_code_query` for batched source searches.",
605
+ hasTool("run_whitebox_scan") && "- Use `run_whitebox_scan` for installed scanners.",
606
+ hasTool("spawn_coding_agent") && "- Use `spawn_coding_agent` for independent deep dives.",
607
+ hasTool("create_whitebox_candidate") && "- Track unverified hypotheses with `create_whitebox_candidate`.",
608
+ hasTool("document_vulnerability") && "- Only call `document_vulnerability` after a PoC, crash reproducer, or dynamic check confirms exploitability.",
609
+ hasTool("start_whitebox_job") && hasTool("poll_whitebox_job") && "- Run builds, local servers, sanitizer runs, and microfuzzers through bounded whitebox jobs so logs and crashes are preserved as artifacts."
610
+ ].filter(Boolean).join(`
611
+ `);
612
+ return `
613
+
614
+ # Source Code Assessment
615
+
616
+ Source code is in scope at ${sourceRoot}.${alignmentNote}
617
+
618
+ Use source access as a force multiplier, not as a rigid workflow:
619
+ - Prefer sink-first analysis: find dangerous operations, then trace backward to attacker-controlled entry points and trust boundaries.
620
+ ${toolGuidance}${repoEditBullet}`;
621
+ }
622
+ function buildBaseSystemPrompt2(options) {
623
+ const sandboxMode = options?.sandboxMode ?? true;
624
+ const stayInSessionParagraph = sandboxMode ? `
625
+
626
+ **Stay in the session folder.** Do not \`cd\` to \`/tmp\`, your home directory, or anywhere else unless the user explicitly asks you to work in a specific location. Create files, clone repos, scaffold projects, and run tools right here — everything belongs in the session. Use relative paths (e.g. \`scratchpad/notes.txt\`, \`test-app/\`) rather than absolute paths to external directories.` : "";
627
+ return `You are an expert offensive security engineer. You assist users with penetration testing, vulnerability research, security assessments, and general cybersecurity tasks using the tools at your disposal.
628
+
629
+ You work interactively with the user. Execute the task they ask for, report your results clearly, and then wait for further instructions. When a request is well-defined, carry it out fully — use your tools, show your work, and present findings. When a request is ambiguous, make reasonable assumptions and proceed, but note what you assumed. The user can steer you between turns.
630
+
631
+ # Core Capabilities
632
+
633
+ You can perform the full lifecycle of a penetration test and support a wide range of cybersecurity tasks:
634
+ - **Reconnaissance & attack surface mapping** — subdomain enumeration, endpoint discovery, JS analysis, authenticated crawling
635
+ - **Vulnerability testing** — injection flaws, auth bypasses, access control issues, misconfigurations, business logic flaws
636
+ - **Exploitation & proof-of-concept development** — provide PoC scripts inline to document_vulnerability which executes and validates them
637
+ - **Source code analysis** — read and search codebases for security-relevant patterns, misconfigurations, and vulnerabilities
638
+ - **Reporting** — document confirmed findings with evidence, impact, and remediation
639
+
640
+ # Tool Reference
641
+
642
+ ## Shell & HTTP
643
+ - **execute_command** — Run shell commands (curl, nmap, nikto, ffuf, gobuster, dig, etc.). Use for anything that needs a CLI tool.
644
+ - **http_request** — Make HTTP requests with full control over method, headers, body, and redirect behavior. Redirects are NOT followed by default so you can inspect Location headers and Set-Cookie values.
645
+
646
+ **Wordlist tools (operator-mode addition).** Tier selection is governed by the \`[BUNDLED ASSETS]\` env block. Operator-only rule: before escalating to \`LARGE_WORDLIST\`, confirm with the user via the \`response\` tool with a one-sentence rationale, unless the user pre-directed (e.g. "deep scan", "use the larger wordlist", "quick smoke check").
647
+
648
+ ## Browser Automation
649
+ - **browser_navigate** — Navigate the browser to a URL (renders JS).
650
+ - **browser_snapshot** — Get the accessibility tree with element refs. Always call this before clicking or filling.
651
+ - **browser_screenshot** — Capture a screenshot as evidence.
652
+ - **browser_click** — Click an element by description or ref.
653
+ - **browser_fill** — Clear and fill a form field.
654
+ - **browser_evaluate** — Execute JavaScript in the page context.
655
+ - **browser_console** — Retrieve browser console messages.
656
+ - **browser_get_cookies** — Extract all cookies (including httpOnly) from the browser context.
657
+
658
+ ## Filesystem & Search
659
+ - **read_file** — Read file contents (whole file or line range).
660
+ - **list_files** — List directory contents (optionally recursive).
661
+ - **grep** — Search file contents by pattern with full grep flag support.
662
+
663
+ ## Authentication
664
+ - **delegate_to_auth_subagent** — Hand off authentication (form/JSON/Basic logins as well as complex flows like OAuth, SAML, CSRF-protected forms, and SPA logins) to a specialized auth sub-agent.
665
+ - **detect_auth_scheme** — Analyze an endpoint to identify its authentication mechanism and detect barriers like CAPTCHA or rate limiting.
666
+ - **probe_auth_endpoints** — Probe common auth paths (/login, /token, /api/auth, etc.) to discover where and how to authenticate.
667
+
668
+ ## Reconnaissance & Asset Discovery
669
+ - **document_app** — Record a discovered application in this session's reconnaissance artifacts. This does not update the authenticated Pensar workspace.
670
+ - **document_endpoint** — Record a discovered endpoint in this session and enrich it through endpoint threat modeling. This does not update the authenticated Pensar workspace. Must specify the parent app name.
671
+ - **extract_js_endpoints** — Pull endpoint URLs out of JavaScript bundles on a page.
672
+ - **crawl_authenticated_area** — Recursively crawl an authenticated area, extracting forms and JS endpoints on each page.
673
+ - **test_endpoint_variations** — Probe multiple endpoint URLs for accessibility and status codes.
674
+ - **validate_discovery_completeness** — Evaluate your recon coverage and identify gaps.
675
+ - **create_attack_surface_report** — Produce the final structured attack surface report with targets and pentest objectives.
676
+
677
+ ## Authenticated Pensar Workspace
678
+ - **list_workspace_domains** — List domains in the connected Console workspace and resolve domain IDs.
679
+ - **create_workspace_domain** — Add or resolve a canonical domain without verifying it or starting recon.
680
+ - **list_workspace_apps** — List or search applications in the connected Console workspace.
681
+ - **create_workspace_app** — Add one application to the connected Console workspace.
682
+ - **update_workspace_app** — Change an existing application, including linking or unlinking its domain.
683
+ - **list_workspace_endpoints** — List or search endpoints under a workspace application.
684
+ - **create_workspace_endpoint** — Add one endpoint under a workspace application, with optional HTTP/gRPC/gRPC-Web/Connect transport.
685
+ - **update_workspace_endpoint** — Change or repair an existing endpoint, including its wire transport.
686
+
687
+ These tools use the authenticated API client in the running Apex process. Use them for workspace imports and mutations even when Apex was launched locally with \`bun run dev\`; do not invoke a separate \`pensar apps\` binary through the shell for these operations. A non-HTTP transport classification does not add RPC metadata or make an endpoint scan-ready.
688
+
689
+ ## Findings & PoCs
690
+ - **document_vulnerability** — Create, execute, and validate a proof-of-concept script, then document the confirmed vulnerability with CVSS 4.0 scoring. Provide your POC script inline via pocContent. The tool handles execution, validation, scoring, and persistence.
691
+
692
+ ## Orchestration
693
+ - **run_attack_surface** — Launch a full attack surface discovery workflow. Supports blackbox (live target) and whitebox (source code analysis when a codebase path is provided).
694
+ - **spawn_pentest_swarm** — Fan out targeted pentest agents in parallel across multiple endpoints/objectives.
695
+ - **spawn_coding_agent** — Spawn parallel code analysis agents for source-code tasks.
696
+
697
+ ## Pensar CLI (other Console operations)
698
+
699
+ You run inside Pensar Apex, and the \`pensar\` CLI may also be available on this machine. Invoke it through \`execute_command\` only for Console operations the typed workspace tools do not cover. The shell binary may be a different installed Apex version, so never use it to list, create, or update workspace domains, applications, or endpoints.
700
+
701
+ - **Issues & fixes** — \`pensar issues [--status --severity --scan --branch]\`, \`issues get <id>\`, \`issues update <id>\`, \`issues retest <id>\`; \`pensar fixes <issueId>\`, \`fixes get <fixId>\`.
702
+ - **Scans** — \`pensar pentests\`, \`pentests get <id>\`, \`pentests dispatch [--branch --level]\`.
703
+ - **Agent logs** — \`pensar logs <issueId>\`, \`logs search <issueId> <query>\`.
704
+
705
+ **Destination rule:** When the user explicitly asks to manage domains, applications, or endpoints in their connected/authenticated/Console workspace, use the typed workspace tools above. Do not substitute \`document_app\`, \`document_endpoint\`, shell-based \`pensar apps\` commands, attack-surface discovery, or threat-model generation; those are either session analysis workflows or may resolve a different installed Apex version. If the user supplies a threat model to import or break down into workspace records, treat it as source data rather than a request to generate another threat model.
706
+
707
+ An explicit request for a specific workspace mutation is confirmation for that mutation; do not ask for a second conversational confirmation. The configured approval gate still applies. Ask only when required fields are missing or when you would need to make additional mutations beyond the request. Verify each mutation from the tool's structured result and list the relevant records again when practical.
708
+
709
+ Run \`pensar --help\` or \`pensar <command> --help\` for exact flags — the CLI is the source of truth. These commands require the user to be logged in; if one reports it is not authenticated, tell the user to run \`/login\` in Apex or the local checkout's \`bun src/cli.ts login\` rather than attempting the device flow yourself. Confirm before any CLI mutation the user has not explicitly requested (\`pentests dispatch\`, \`issues update\`, \`issues retest\`). Do NOT launch nested engagements from here (\`pensar pentest\`, \`pensar targeted-pentest\`, \`pensar operator\`, or \`pensar -p\`) — use your own tools for testing.
710
+
711
+ # How to Work
712
+
713
+ 1. **Execute what the user asks.** If they say "scan this target", scan it. If they say "test this endpoint for SQLi", test it. Carry out the requested task using your tools and present the results.
714
+ 2. **Show your work.** Explain what you're doing and why as you go. Summarize results clearly after each step so the user can follow along and redirect you if needed.
715
+ 3. **Be thorough within the ask.** When given a task, see it through completely. Don't do half the work and ask whether to continue — finish the job, then report back.
716
+ 4. **Use the right level of automation.** For large tasks (e.g., "pentest this entire application"), use orchestration tools like \`run_attack_surface\` and \`spawn_pentest_swarm\` to parallelize the work. For focused tasks (e.g., "check if this parameter is vulnerable to XSS"), work directly with \`http_request\`, \`execute_command\`, or the browser tools.
717
+ 5. **Authenticate when needed.** If the user provides credentials or auth instructions, use them. Hand the login off to \`delegate_to_auth_subagent\`, which handles both simple (form/JSON/Basic) and complex flows (OAuth, SAML, CSRF-protected SPAs).
718
+ 6. **Document security work as you go.** During reconnaissance or pentesting, call \`document_app\` for discovered applications and \`document_endpoint\` for individual endpoints. For authenticated workspace additions, use the typed workspace tools instead. Call \`document_vulnerability\` with your POC script inline when you confirm vulnerabilities. Don't defer documentation to the end.
719
+ 7. **Consult memories first.** When you begin testing a specific application, framework, or path, call \`list_memories\` to check for saved knowledge from previous sessions — past findings, useful payloads, endpoint patterns, or target-specific notes. Use relevant memories to inform your approach before starting from scratch.
720
+
721
+ # Command Execution
722
+
723
+ Each \`execute_command\` call runs in a **fresh shell** that starts in your session directory — \`cd\`, \`export\`, aliases, and background jobs do NOT persist between calls. Chain related steps in one command (\`cd dir && ./run\`) or use absolute paths. Environment activation (virtualenv, exports) must happen in the same command that uses it, or come from the session's configured environment.${stayInSessionParagraph}
724
+
725
+ For long-running services (servers, listeners, watchers), background them with **redirected stdio** so the call returns immediately and the service keeps running as a plain process:
726
+ - \`nohup python server.py > scratchpad/server.log 2>&1 & echo $! > scratchpad/server.pid\`
727
+ - Check later with \`cat scratchpad/server.log\`; stop with \`kill $(cat scratchpad/server.pid)\`.
728
+ - There is no shell job table across calls — recorded PIDs/files plus explicit lifecycle are how you manage services. A command that fails (nonzero exit) takes its background children down with it; only a successful launcher leaves its redirected service running.
729
+
730
+ # Rules
731
+
732
+ 1. **Evidence over assumptions.** Every claim must be backed by actual tool output. Never hallucinate findings or fabricate evidence.
733
+ 2. **Stay in scope.** Only test targets and systems explicitly provided by the user or discovered within the authorized scope. Respect any scope constraints in the session config.
734
+ 3. **Handle failures gracefully.** If a tool call fails or a technique doesn't work, try alternative approaches. If your PoC approach fails repeatedly, pivot to a different technique.
735
+ 4. **Summarize results.** After completing a task, give the user a clear summary of what you found, what you tried, and what the next steps could be.
736
+ 5. **No reports in scratchpad.** Do NOT write synthesized report documents to scratchpad/ (e.g., executive summaries, comprehensive pentest reports, finding compilations, risk assessments, or vulnerability rollups). The official report is generated automatically from the findings/ directory. Use scratchpad/ only for working notes, intermediate data, test scripts, wordlists, and temporary files. Summarize results via the \`response\` tool or inline text, not standalone report files.`;
737
+ }
738
+ var BASE_SYSTEM_PROMPT2 = buildBaseSystemPrompt2();
739
+
740
+ // src/core/agents/offSecAgent/recordedTools.ts
741
+ import {
742
+ toolModelMessageSchema
743
+ } from "ai";
744
+ var STREAMING_OUTPUT_REJECTED = "Streaming tool output is not supported in recorded runs; the journal settles one final result per call";
745
+ function defaultModelOutput(output) {
746
+ if (typeof output === "string")
747
+ return { type: "text", value: output };
748
+ const value = output === undefined ? null : output;
749
+ return { type: "json", value };
750
+ }
751
+ function isAsyncIterable(value) {
752
+ return typeof value === "object" && value !== null && Symbol.asyncIterator in value;
753
+ }
754
+ function transportShape(toolCallId, toolName, output) {
755
+ const validated = toolModelMessageSchema.safeParse({
756
+ role: "tool",
757
+ content: [{ type: "tool-result", toolCallId, toolName, output }]
758
+ });
759
+ if (!validated.success) {
760
+ throw new Error(`Tool result for ${toolCallId} is not a valid model-visible output`);
761
+ }
762
+ return JSON.parse(JSON.stringify(output));
763
+ }
764
+ function reuseRaw(output) {
765
+ return output.type === "text" || output.type === "json" ? output.value : output;
766
+ }
767
+ function wrapRecordedTools(tools, recorder) {
768
+ const conversions = new Map;
769
+ const wrapped = {};
770
+ for (const [name, entry] of Object.entries(tools)) {
771
+ const tool = entry;
772
+ if (typeof tool?.execute !== "function") {
773
+ wrapped[name] = entry;
774
+ continue;
775
+ }
776
+ const originalExecute = tool.execute.bind(tool);
777
+ const originalToModelOutput = tool.toModelOutput?.bind(tool);
778
+ wrapped[name] = {
779
+ ...tool,
780
+ execute: async (input, options) => {
781
+ const committedInput = structuredClone(input);
782
+ const gate = await recorder.beforeExecute({
783
+ toolCallId: options.toolCallId,
784
+ toolName: name,
785
+ input: committedInput
786
+ });
787
+ if (gate.kind === "reuse") {
788
+ const settled = structuredClone(gate.output);
789
+ conversions.set(options.toolCallId, settled);
790
+ return reuseRaw(structuredClone(settled));
791
+ }
792
+ try {
793
+ options.abortSignal?.throwIfAborted();
794
+ const raw = await originalExecute(committedInput, options);
795
+ if (isAsyncIterable(raw)) {
796
+ throw new Error(STREAMING_OUTPUT_REJECTED);
797
+ }
798
+ const modelOutput = originalToModelOutput ? await originalToModelOutput({
799
+ toolCallId: options.toolCallId,
800
+ input: committedInput,
801
+ output: raw
802
+ }) : defaultModelOutput(raw);
803
+ const settled = transportShape(options.toolCallId, name, modelOutput);
804
+ await recorder.settle(options.toolCallId, settled);
805
+ conversions.set(options.toolCallId, settled);
806
+ return raw;
807
+ } catch (error) {
808
+ await recorder.unknown(options.toolCallId).catch(() => {});
809
+ throw error;
810
+ }
811
+ },
812
+ toModelOutput: async (call) => {
813
+ const cached = conversions.get(call.toolCallId);
814
+ if (cached)
815
+ return structuredClone(cached);
816
+ if (originalToModelOutput)
817
+ return await originalToModelOutput(call);
818
+ return defaultModelOutput(call.output);
819
+ }
820
+ };
821
+ }
822
+ return wrapped;
823
+ }
824
+
825
+ // src/core/agents/offSecAgent/runtimeContext.ts
826
+ import { createHash } from "node:crypto";
827
+
828
+ // src/core/assets/wordlists.ts
829
+ import { existsSync as existsSync3, readFileSync as readFileSync2, statSync as statSync2 } from "node:fs";
830
+ import { dirname, join as join2, resolve } from "node:path";
831
+ import { fileURLToPath } from "node:url";
832
+ var RELATIVE = {
833
+ tiny: "assets/wordlists/tiny.txt",
834
+ common: "assets/wordlists/common.txt",
835
+ large: "assets/wordlists/large.txt"
836
+ };
837
+ var cached;
838
+ function findPackageRoot(start) {
839
+ let dir = start;
840
+ while (true) {
841
+ const pkgPath = join2(dir, "package.json");
842
+ if (existsSync3(pkgPath)) {
843
+ try {
844
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
845
+ if (pkg.name === "@pensar/apex" && existsSync3(join2(dir, "assets", "wordlists"))) {
846
+ return dir;
847
+ }
848
+ } catch {}
849
+ }
850
+ const parent = dirname(dir);
851
+ if (parent === dir)
852
+ return null;
853
+ dir = parent;
854
+ }
855
+ }
856
+ function getBundledWordlists() {
857
+ if (cached !== undefined)
858
+ return cached;
859
+ const here = dirname(fileURLToPath(import.meta.url));
860
+ const root = findPackageRoot(here);
861
+ if (root === null) {
862
+ cached = null;
863
+ return cached;
864
+ }
865
+ const paths = {
866
+ tiny: resolve(root, RELATIVE.tiny),
867
+ common: resolve(root, RELATIVE.common),
868
+ large: resolve(root, RELATIVE.large)
869
+ };
870
+ for (const p of Object.values(paths)) {
871
+ if (!existsSync3(p) || statSync2(p).size === 0) {
872
+ cached = null;
873
+ return cached;
874
+ }
875
+ }
876
+ cached = paths;
877
+ return cached;
878
+ }
879
+
880
+ // src/core/agents/offSecAgent/runtimeContext.ts
881
+ var UNKNOWN_FACTS = {
882
+ probed: false,
883
+ available: [],
884
+ missing: []
885
+ };
886
+ var PROBE_TOOL_NAMES = [
887
+ "bash",
888
+ "sh",
889
+ "python3",
890
+ "python",
891
+ "node",
892
+ "ffuf",
893
+ "nmap",
894
+ "gobuster",
895
+ "sqlmap",
896
+ "nikto",
897
+ "hydra",
898
+ "john",
899
+ "hashcat",
900
+ "tcpdump",
901
+ "tshark",
902
+ "nc",
903
+ "socat",
904
+ "curl",
905
+ "wget",
906
+ "git"
907
+ ];
908
+ var PROBE_TIMEOUT_SECONDS = 10;
909
+ var MAX_PROBE_OUTPUT_BYTES = 16 * 1024;
910
+ function posixProbeCommand() {
911
+ const checks = PROBE_TOOL_NAMES.map((t) => `if command -v ${t} >/dev/null 2>&1; then echo "AVAIL ${t}"; else echo "MISSING ${t}"; fi`).join("; ");
912
+ return `${checks}; echo "OS: $(uname -sr 2>/dev/null)"`;
913
+ }
914
+ function windowsProbeCommand() {
915
+ const checks = PROBE_TOOL_NAMES.map((t) => `where ${t} >nul 2>&1 && echo AVAIL ${t} || echo MISSING ${t}`).join(" & ");
916
+ return `${checks} & echo OS: & ver`;
917
+ }
918
+ function parseProbeOutput(output) {
919
+ const available = [];
920
+ const missing = [];
921
+ let os;
922
+ let osPending = false;
923
+ for (const rawLine of output.split(/\r?\n/)) {
924
+ const line = rawLine.trim();
925
+ if (!line)
926
+ continue;
927
+ if (osPending) {
928
+ os = line;
929
+ osPending = false;
930
+ continue;
931
+ }
932
+ if (line === "OS:") {
933
+ osPending = true;
934
+ continue;
935
+ }
936
+ const avail = /^AVAIL (\S+)$/.exec(line);
937
+ if (avail) {
938
+ available.push(avail[1]);
939
+ continue;
940
+ }
941
+ const miss = /^MISSING (\S+)$/.exec(line);
942
+ if (miss) {
943
+ missing.push(miss[1]);
944
+ continue;
945
+ }
946
+ const osMatch = /^OS: (.+)$/.exec(line);
947
+ if (osMatch?.[1])
948
+ os = osMatch[1];
949
+ }
950
+ const seen = new Set([...available, ...missing]);
951
+ if (seen.size < PROBE_TOOL_NAMES.length)
952
+ return UNKNOWN_FACTS;
953
+ return {
954
+ probed: true,
955
+ ...os ? { os } : {},
956
+ available: available.sort(),
957
+ missing: missing.sort()
958
+ };
959
+ }
960
+ async function runProbe(ctx) {
961
+ try {
962
+ const backend = resolveBackends2({
963
+ ...ctx,
964
+ abortSignal: undefined,
965
+ commandShell: undefined
966
+ });
967
+ const platform = backend.command.platform ?? "posix";
968
+ const cmd = platform === "windows" ? windowsProbeCommand() : posixProbeCommand();
969
+ const opts = {
970
+ timeoutSeconds: PROBE_TIMEOUT_SECONDS,
971
+ abortSignal: AbortSignal.timeout(PROBE_TIMEOUT_SECONDS * 1000),
972
+ envVars: ctx.environmentVariables
973
+ };
974
+ let output = "";
975
+ let outputTruncated = false;
976
+ let exitCode = null;
977
+ let timedOut = false;
978
+ for await (const event of backend.command.run(cmd, opts)) {
979
+ const e = event;
980
+ if (e.type === "stdout" || e.type === "stderr") {
981
+ if (output.length >= MAX_PROBE_OUTPUT_BYTES) {
982
+ outputTruncated = true;
983
+ } else {
984
+ const room = MAX_PROBE_OUTPUT_BYTES - output.length;
985
+ output += e.bytes.slice(0, room);
986
+ if (e.bytes.length > room)
987
+ outputTruncated = true;
988
+ }
989
+ } else if (e.type === "end") {
990
+ exitCode = e.exitCode;
991
+ timedOut = e.timedOut;
992
+ if (e.stdoutTruncated || e.stderrTruncated)
993
+ outputTruncated = true;
994
+ }
995
+ }
996
+ if (exitCode === null || exitCode !== 0 || timedOut || outputTruncated) {
997
+ return UNKNOWN_FACTS;
998
+ }
999
+ return parseProbeOutput(output);
1000
+ } catch {
1001
+ return UNKNOWN_FACTS;
1002
+ }
1003
+ }
1004
+ var objectId = new WeakMap;
1005
+ var nextObjectId = 0;
1006
+ function idFor(obj) {
1007
+ let id = objectId.get(obj);
1008
+ if (id === undefined) {
1009
+ id = ++nextObjectId;
1010
+ objectId.set(obj, id);
1011
+ }
1012
+ return id;
1013
+ }
1014
+ function envTag(env) {
1015
+ if (!env || Object.keys(env).length === 0)
1016
+ return "";
1017
+ const sorted = JSON.stringify(Object.keys(env).sort().map((k) => [k, env[k]]));
1018
+ return createHash("sha256").update(sorted).digest("hex").slice(0, 16);
1019
+ }
1020
+ function cacheKey(ctx) {
1021
+ return [
1022
+ ctx.session.id,
1023
+ ctx.backends ? `b${idFor(ctx.backends)}` : "local",
1024
+ ctx.sandbox ? `s${idFor(ctx.sandbox)}` : "nosh",
1025
+ ctx.agentCwd,
1026
+ envTag(ctx.environmentVariables)
1027
+ ].join("|");
1028
+ }
1029
+ var MAX_CACHE_ENTRIES = 32;
1030
+ var factsByKey = new Map;
1031
+ var settledFactsByKey = new Map;
1032
+ function waitForProbe(pending, signal) {
1033
+ if (!signal)
1034
+ return pending;
1035
+ if (signal.aborted)
1036
+ return Promise.resolve(UNKNOWN_FACTS);
1037
+ return new Promise((resolve) => {
1038
+ const finish = (facts) => {
1039
+ signal.removeEventListener("abort", onAbort);
1040
+ resolve(facts);
1041
+ };
1042
+ const onAbort = () => finish(UNKNOWN_FACTS);
1043
+ signal.addEventListener("abort", onAbort, { once: true });
1044
+ pending.then(finish, () => finish(UNKNOWN_FACTS));
1045
+ });
1046
+ }
1047
+ function probeRuntimeFacts(ctx) {
1048
+ if (ctx.abortSignal?.aborted)
1049
+ return Promise.resolve(UNKNOWN_FACTS);
1050
+ const key = cacheKey(ctx);
1051
+ const cached = factsByKey.get(key);
1052
+ if (cached)
1053
+ return waitForProbe(cached, ctx.abortSignal);
1054
+ const pending = runProbe(ctx).then((facts) => {
1055
+ if (factsByKey.get(key) !== pending)
1056
+ return facts;
1057
+ if (facts.probed) {
1058
+ settledFactsByKey.set(key, facts);
1059
+ } else {
1060
+ factsByKey.delete(key);
1061
+ settledFactsByKey.delete(key);
1062
+ }
1063
+ return facts;
1064
+ });
1065
+ pending.catch(() => {
1066
+ if (factsByKey.get(key) !== pending)
1067
+ return;
1068
+ factsByKey.delete(key);
1069
+ settledFactsByKey.delete(key);
1070
+ });
1071
+ if (factsByKey.size >= MAX_CACHE_ENTRIES) {
1072
+ factsByKey.clear();
1073
+ settledFactsByKey.clear();
1074
+ }
1075
+ factsByKey.set(key, pending);
1076
+ return waitForProbe(pending, ctx.abortSignal);
1077
+ }
1078
+ function peekSettledRuntimeFacts(ctx) {
1079
+ return settledFactsByKey.get(cacheKey(ctx)) ?? null;
1080
+ }
1081
+ function resolveCommandPlatform(ctx) {
1082
+ return resolveBackends2(ctx).command.platform ?? "posix";
1083
+ }
1084
+ function hasTool(facts, tool) {
1085
+ return facts.available.includes(tool);
1086
+ }
1087
+ function toolFact(facts, tool) {
1088
+ if (!facts.probed)
1089
+ return "unknown";
1090
+ if (hasTool(facts, tool))
1091
+ return "available";
1092
+ return facts.missing.includes(tool) ? "missing" : "unknown";
1093
+ }
1094
+ function shellFact(facts) {
1095
+ if (!facts.probed)
1096
+ return "unknown";
1097
+ if (hasTool(facts, "bash"))
1098
+ return "bash";
1099
+ if (hasTool(facts, "sh"))
1100
+ return "sh (no bash)";
1101
+ return "missing";
1102
+ }
1103
+ function pythonFact(facts) {
1104
+ if (!facts.probed)
1105
+ return "unknown";
1106
+ if (hasTool(facts, "python3"))
1107
+ return "available (python3)";
1108
+ if (hasTool(facts, "python"))
1109
+ return "available (python)";
1110
+ return "missing";
1111
+ }
1112
+ function inventoryLine(facts) {
1113
+ if (!facts.probed) {
1114
+ return "Command-tool inventory: unknown (not established — no probe has settled for this runtime). Verify each tool before first use.";
1115
+ }
1116
+ const lines = [];
1117
+ if (facts.available.length > 0) {
1118
+ lines.push(`Command tools present: ${facts.available.join(", ")}`);
1119
+ }
1120
+ if (facts.missing.length > 0) {
1121
+ lines.push(`Command tools absent: ${facts.missing.join(", ")}`);
1122
+ }
1123
+ return lines.join(`
1124
+ `);
1125
+ }
1126
+ function buildRuntimeContextSection(facts, opts) {
1127
+ const verify = opts.platform === "windows" ? "where <tool>" : "command -v <tool>";
1128
+ const lines = [
1129
+ "[RUNTIME CONTEXT]",
1130
+ `OS: ${facts.probed ? facts.os ?? "unknown" : "unknown"} | Shell: ${shellFact(facts)} | Python: ${pythonFact(facts)} | Node: ${toolFact(facts, "node")} | ffuf: ${toolFact(facts, "ffuf")}`,
1131
+ inventoryLine(facts),
1132
+ `Treat this inventory as facts, not as a checklist: pick techniques from evidence. When a tool is absent, build the equivalent with the available interpreters (shell/Python/Node) instead of assuming the tool exists. For tools listed unknown, verify with \`${verify}\` before first use.`,
1133
+ "Syntax-check or compile new or changed helper scripts with the runtime's available tools before execution; inspect the exit status and output, repair failures, and rerun. A successful file write alone does not establish that a helper works.",
1134
+ "[/RUNTIME CONTEXT]"
1135
+ ];
1136
+ return lines.filter(Boolean).join(`
1137
+ `);
1138
+ }
1139
+ function buildBundledAssetsSection() {
1140
+ const wordlists = getBundledWordlists();
1141
+ if (wordlists === null)
1142
+ return null;
1143
+ return `[BUNDLED ASSETS]
1144
+ This block is your authoritative inventory of wordlist assets shipped with the CLI. When the user asks what wordlists / assets / capabilities you have, answer directly from the entries below — do NOT probe the filesystem (\`ls /usr/share/wordlists\`, \`which gobuster\`, \`find / -name wordlists\`, etc.). Those paths are not where these live; the inventory is here.
1145
+
1146
+ TINY_WORDLIST=${wordlists.tiny} (~200 entries — smoke checks / time-pressured runs)
1147
+ DEFAULT_WORDLIST=${wordlists.common} (~4.7k entries — normal recon, the default)
1148
+ LARGE_WORDLIST=${wordlists.large} (~30k entries — escalation only)
1149
+
1150
+ These paths can be passed as \`-w\` arguments to gobuster/ffuf/dirb/wfuzz/dirsearch, OR iterated line-by-line in shell loops and \`http_request\` scripts. Their presence is NOT a reason to run a wordlist-based tool; choose techniques based on the task.
1151
+
1152
+ If you do invoke a wordlist-based tool: default to DEFAULT_WORDLIST. Use TINY only under explicit time pressure or for a first-pass smoke probe. Use LARGE only after DEFAULT finishes and the target still looks under-mapped, or when the user explicitly asked for a deeper scan. Do NOT chain tiers automatically. Do NOT assume /usr/share/wordlists/* exists — it is missing on macOS, Alpine, most Docker images, and CI.
1153
+ [/BUNDLED ASSETS]`;
1154
+ }
1155
+
1156
+ // src/core/agents/offSecAgent/streamDiagnostics.ts
1157
+ var STREAM_STALL_DEBUG = process.env.STREAM_STALL_DEBUG === "1" || process.env.STREAM_STALL_DEBUG === "true";
1158
+ var STREAM_STALL_TICK_MS = 15000;
1159
+ var STREAM_STALL_WARN_MS = 20000;
1160
+ var STREAM_GAP_RECOVERED_MS = 1e4;
1161
+ var RESPONSE_DEBUG = process.env.RESPONSE_DEBUG === "1" || process.env.RESPONSE_DEBUG === "true";
1162
+ var rlog = scopedLogger(() => createLogger("response-debug"));
1163
+ function responseArgBytes(input) {
1164
+ if (input == null)
1165
+ return 0;
1166
+ if (typeof input === "string")
1167
+ return input.length;
1168
+ try {
1169
+ return JSON.stringify(input).length;
1170
+ } catch {
1171
+ return -1;
1172
+ }
1173
+ }
1174
+
1175
+ class StreamDiagnostics {
1176
+ opts;
1177
+ stallEnabled;
1178
+ responseDebugEnabled;
1179
+ warn;
1180
+ responseArgChars = new Map;
1181
+ responseSawTerminal = new Map;
1182
+ lastChunkAt = Date.now();
1183
+ lastChunkType = "none";
1184
+ stallStepIndex = -1;
1185
+ stallTimer;
1186
+ constructor(options) {
1187
+ this.opts = options;
1188
+ this.stallEnabled = options.stallEnabled ?? STREAM_STALL_DEBUG;
1189
+ this.responseDebugEnabled = options.responseDebugEnabled ?? RESPONSE_DEBUG;
1190
+ this.warn = options.warn ?? ((message) => rlog.warn(message));
1191
+ }
1192
+ start() {
1193
+ if (!this.stallEnabled || this.stallTimer)
1194
+ return;
1195
+ const label = this.opts.sessionId;
1196
+ const sid = this.opts.subagentId;
1197
+ this.stallTimer = setInterval(() => {
1198
+ const gap = Date.now() - this.lastChunkAt;
1199
+ if (gap > STREAM_STALL_WARN_MS) {
1200
+ this.warn(`[stream-stall] no chunk for ${Math.round(gap / 1000)}s ` + `session=${label} subagent=${sid ?? "-"} step=${this.stallStepIndex} ` + `lastChunkType=${this.lastChunkType} ` + `inFlightTools=${[...this.opts.inFlightTools().values()].join(",")} ` + `responseToolFired=${this.opts.responseToolFired()}`);
1201
+ }
1202
+ }, STREAM_STALL_TICK_MS);
1203
+ }
1204
+ observeChunk(chunk) {
1205
+ if (this.stallEnabled) {
1206
+ const now = Date.now();
1207
+ const gap = now - this.lastChunkAt;
1208
+ this.lastChunkAt = now;
1209
+ this.lastChunkType = chunk.type;
1210
+ if (chunk.type === "start-step")
1211
+ this.stallStepIndex++;
1212
+ if (gap > STREAM_GAP_RECOVERED_MS) {
1213
+ this.warn(`[stream-gap] recovered after ${Math.round(gap / 1000)}s ` + `session=${this.opts.sessionId} chunkType=${chunk.type}`);
1214
+ }
1215
+ }
1216
+ if (this.responseDebugEnabled) {
1217
+ this.traceResponseTool(chunk);
1218
+ }
1219
+ }
1220
+ logSurfacedToolError(info) {
1221
+ if (!this.responseDebugEnabled)
1222
+ return;
1223
+ if (info.toolName !== this.opts.responseToolName)
1224
+ return;
1225
+ this.warn(`[response-debug] tool-error SURFACED id=${info.toolCallId} ` + `streamedArgChars=${info.streamedArgChars} ` + `finishReason=${info.finishReason ?? "unknown"} ` + `outputTokenTruncated=${info.truncated} error=${info.message.slice(0, 300)}`);
1226
+ }
1227
+ logClosingInFlightTool(info) {
1228
+ if (!this.responseDebugEnabled)
1229
+ return;
1230
+ if (info.toolName !== this.opts.responseToolName)
1231
+ return;
1232
+ this.warn(`[response-debug] CLOSING response as "did not complete" id=${info.toolCallId} ` + `streamedArgChars=${this.responseArgChars.get(info.toolCallId) ?? 0} ` + `sawTerminalChunk=${this.responseSawTerminal.get(info.toolCallId) ?? "none"} ` + `finishReason=${info.finishReason ?? "unknown"} outputTokenTruncated=${info.truncated} ` + `responseToolFired=${this.opts.responseToolFired()}`);
1233
+ }
1234
+ stop() {
1235
+ if (this.stallTimer)
1236
+ clearInterval(this.stallTimer);
1237
+ this.stallTimer = undefined;
1238
+ }
1239
+ traceResponseTool(chunk) {
1240
+ const idForChunk = chunk.toolCallId ?? chunk.id;
1241
+ const nameForChunk = chunk.toolName ?? (idForChunk ? this.opts.inFlightTools().get(idForChunk) : undefined);
1242
+ if (nameForChunk !== this.opts.responseToolName || !idForChunk) {
1243
+ if (chunk.type === "finish-step") {
1244
+ const responseInFlight = [...this.opts.inFlightTools().entries()].filter(([, n]) => n === this.opts.responseToolName).map(([id]) => id).join(",");
1245
+ if (responseInFlight) {
1246
+ this.warn(`[response-debug] finish-step finishReason=${chunk.finishReason} ` + `responseInFlight=${responseInFlight} ` + `responseToolFired=${this.opts.responseToolFired()}`);
1247
+ }
1248
+ }
1249
+ return;
1250
+ }
1251
+ switch (chunk.type) {
1252
+ case "tool-input-start":
1253
+ this.responseArgChars.set(idForChunk, 0);
1254
+ this.warn(`[response-debug] tool-input-start id=${idForChunk} session=${this.opts.subagentId ?? this.opts.sessionId}`);
1255
+ break;
1256
+ case "tool-input-delta":
1257
+ this.responseArgChars.set(idForChunk, (this.responseArgChars.get(idForChunk) ?? 0) + (chunk.delta?.length ?? 0));
1258
+ break;
1259
+ case "tool-input-end":
1260
+ this.warn(`[response-debug] tool-input-end id=${idForChunk} argChars=${this.responseArgChars.get(idForChunk) ?? 0}`);
1261
+ break;
1262
+ case "tool-call": {
1263
+ this.responseSawTerminal.set(idForChunk, "tool-call");
1264
+ const inputBytes = responseArgBytes(chunk.input ?? chunk.args);
1265
+ this.warn(`[response-debug] tool-call id=${idForChunk} streamedArgChars=${this.responseArgChars.get(idForChunk) ?? 0} parsedInputBytes=${inputBytes} invalid=${chunk.invalid === true}`);
1266
+ break;
1267
+ }
1268
+ case "tool-error": {
1269
+ this.responseSawTerminal.set(idForChunk, "tool-error");
1270
+ const errMsg = chunk.error instanceof Error ? chunk.error.message : typeof chunk.error === "string" ? chunk.error : JSON.stringify(chunk.error)?.slice(0, 300);
1271
+ this.warn(`[response-debug] tool-error id=${idForChunk} streamedArgChars=${this.responseArgChars.get(idForChunk) ?? 0} stillInFlight=${this.opts.inFlightTools().has(idForChunk)} error=${errMsg}`);
1272
+ break;
1273
+ }
1274
+ case "tool-result":
1275
+ this.responseSawTerminal.set(idForChunk, "tool-result");
1276
+ this.warn(`[response-debug] tool-result id=${idForChunk} streamedArgChars=${this.responseArgChars.get(idForChunk) ?? 0}`);
1277
+ break;
1278
+ }
1279
+ }
1280
+ }
1281
+
1282
+ // src/core/agents/offSecAgent/toolLifecycle.ts
1283
+ class ToolLifecycleTracker {
1284
+ inFlight = new Map;
1285
+ completed = [];
1286
+ streamedArgs = new Map;
1287
+ errors = new Map;
1288
+ observePart(chunk) {
1289
+ switch (chunk.type) {
1290
+ case "tool-input-start":
1291
+ this.inFlight.set(chunk.id, chunk.toolName);
1292
+ this.streamedArgs.set(chunk.id, "");
1293
+ break;
1294
+ case "tool-input-delta":
1295
+ this.streamedArgs.set(chunk.id, (this.streamedArgs.get(chunk.id) ?? "") + (chunk.delta ?? ""));
1296
+ break;
1297
+ case "tool-call":
1298
+ this.inFlight.set(chunk.toolCallId, chunk.toolName);
1299
+ break;
1300
+ case "tool-error": {
1301
+ const toolCallId = chunk.toolCallId;
1302
+ this.inFlight.delete(toolCallId);
1303
+ const errMsg = chunk.error instanceof Error ? chunk.error.message : typeof chunk.error === "string" ? chunk.error : (() => {
1304
+ try {
1305
+ return JSON.stringify(chunk.error);
1306
+ } catch {
1307
+ return String(chunk.error);
1308
+ }
1309
+ })();
1310
+ const partialArgs = chunk.input !== undefined && chunk.input !== null && responseArgBytes(chunk.input) > 2 ? chunk.input : this.streamedArgs.get(toolCallId) ?? "";
1311
+ this.errors.set(toolCallId, {
1312
+ message: errMsg,
1313
+ input: partialArgs,
1314
+ toolName: chunk.toolName
1315
+ });
1316
+ break;
1317
+ }
1318
+ case "tool-result":
1319
+ this.inFlight.delete(chunk.toolCallId);
1320
+ this.completed.push({
1321
+ type: "tool-result",
1322
+ toolCallId: chunk.toolCallId,
1323
+ toolName: chunk.toolName,
1324
+ output: chunk.result ?? chunk.output
1325
+ });
1326
+ break;
1327
+ }
1328
+ }
1329
+ onStepPersisted() {
1330
+ this.completed.length = 0;
1331
+ }
1332
+ flushToolErrorsToResults() {
1333
+ const flushed = [];
1334
+ for (const [toolCallId, info] of this.errors) {
1335
+ this.completed.push({
1336
+ type: "tool-result",
1337
+ toolCallId,
1338
+ toolName: info.toolName,
1339
+ output: {
1340
+ type: "error-text",
1341
+ value: `Tool call failed: ${info.message}`
1342
+ }
1343
+ });
1344
+ flushed.push([toolCallId, info]);
1345
+ }
1346
+ this.errors.clear();
1347
+ return flushed;
1348
+ }
1349
+ clearToolErrors() {
1350
+ this.errors.clear();
1351
+ }
1352
+ clearInFlight() {
1353
+ this.inFlight.clear();
1354
+ }
1355
+ hasUnpersistedState() {
1356
+ return this.inFlight.size > 0 || this.completed.length > 0;
1357
+ }
1358
+ get inFlightTools() {
1359
+ return this.inFlight;
1360
+ }
1361
+ get toolErrors() {
1362
+ return this.errors;
1363
+ }
1364
+ get completedResults() {
1365
+ return this.completed;
1366
+ }
1367
+ get streamedArgText() {
1368
+ return this.streamedArgs;
1369
+ }
1370
+ snapshot() {
1371
+ return {
1372
+ inFlightTools: new Map(this.inFlight),
1373
+ completedResults: this.completed.map((r) => ({ ...r })),
1374
+ streamedArgText: new Map(this.streamedArgs),
1375
+ toolErrors: new Map(this.errors)
1376
+ };
1377
+ }
1378
+ }
1379
+
1380
+ // src/core/agents/offSecAgent/trace.ts
1381
+ import { createHash as createHash2 } from "node:crypto";
1382
+ import { appendFileSync, mkdirSync } from "node:fs";
1383
+ import { dirname as dirname2 } from "node:path";
1384
+ var OUTPUT_PREVIEW_LIMIT = 2000;
1385
+ var INPUT_PREVIEW_LIMIT = 1000;
1386
+ var SYSTEM_PROMPT_HASH_PREFIX_LENGTH = 12;
1387
+ function stringifyOutput(output) {
1388
+ if (output == null)
1389
+ return { text: "", type: "text" };
1390
+ if (typeof output === "object" && "type" in output) {
1391
+ const typed = output;
1392
+ switch (typed.type) {
1393
+ case "text":
1394
+ case "error-text":
1395
+ return {
1396
+ text: String(typed.value ?? ""),
1397
+ type: typed.type
1398
+ };
1399
+ case "json":
1400
+ case "error-json":
1401
+ return {
1402
+ text: JSON.stringify(typed.value ?? null),
1403
+ type: typed.type
1404
+ };
1405
+ case "execution-denied":
1406
+ return {
1407
+ text: typed.reason ?? "execution denied",
1408
+ type: typed.type
1409
+ };
1410
+ case "content":
1411
+ return { text: JSON.stringify(typed.value ?? []), type: typed.type };
1412
+ default:
1413
+ return { text: JSON.stringify(output), type: "text" };
1414
+ }
1415
+ }
1416
+ if (typeof output === "string")
1417
+ return { text: output, type: "text" };
1418
+ return { text: JSON.stringify(output), type: "json" };
1419
+ }
1420
+ function preview(str, maxLen) {
1421
+ return str.length <= maxLen ? str : str.slice(0, maxLen);
1422
+ }
1423
+
1424
+ class StepTraceWriter2 {
1425
+ tracePath;
1426
+ agentId;
1427
+ eventBus;
1428
+ stepIndex = 0;
1429
+ cumulativeUsage = {
1430
+ inputTokens: 0,
1431
+ outputTokens: 0
1432
+ };
1433
+ lastStepTime;
1434
+ agentStartTime;
1435
+ summarized = false;
1436
+ previousMessageCount = 0;
1437
+ constructor(opts) {
1438
+ this.tracePath = opts.tracePath;
1439
+ this.agentId = opts.agentId;
1440
+ this.eventBus = opts.eventBus;
1441
+ const now = Date.now();
1442
+ this.agentStartTime = now;
1443
+ this.lastStepTime = now;
1444
+ mkdirSync(dirname2(this.tracePath), { recursive: true });
1445
+ }
1446
+ writeInit(data) {
1447
+ const { systemPrompt, ...rest } = data;
1448
+ const record = {
1449
+ type: "init",
1450
+ timestamp: new Date().toISOString(),
1451
+ agentId: this.agentId,
1452
+ systemPromptHash: createHash2("sha256").update(systemPrompt).digest("hex").slice(0, SYSTEM_PROMPT_HASH_PREFIX_LENGTH),
1453
+ systemPrompt,
1454
+ ...rest
1455
+ };
1456
+ this.appendRecord(record);
1457
+ }
1458
+ markSummarized() {
1459
+ this.summarized = true;
1460
+ this.previousMessageCount = 0;
1461
+ }
1462
+ recordStep(responseMessages, usage, options) {
1463
+ const now = Date.now();
1464
+ const usageOnly = options?.usageOnly ?? false;
1465
+ const newMessages = usageOnly ? [] : responseMessages.slice(this.previousMessageCount);
1466
+ if (!usageOnly) {
1467
+ this.previousMessageCount = responseMessages.length;
1468
+ }
1469
+ const observations = [];
1470
+ const reasoningParts = [];
1471
+ const textParts = [];
1472
+ const actions = [];
1473
+ for (const msg of newMessages) {
1474
+ if (!Array.isArray(msg.content)) {
1475
+ if (typeof msg.content === "string" && msg.role === "assistant") {
1476
+ textParts.push(msg.content);
1477
+ }
1478
+ continue;
1479
+ }
1480
+ for (const part of msg.content) {
1481
+ switch (part.type) {
1482
+ case "tool-result": {
1483
+ const { text, type } = stringifyOutput(part.output);
1484
+ observations.push({
1485
+ toolCallId: part.toolCallId,
1486
+ toolName: part.toolName,
1487
+ outputType: type,
1488
+ outputPreview: preview(text, OUTPUT_PREVIEW_LIMIT),
1489
+ outputLength: Buffer.byteLength(text, "utf-8")
1490
+ });
1491
+ break;
1492
+ }
1493
+ case "reasoning": {
1494
+ reasoningParts.push(part.text);
1495
+ break;
1496
+ }
1497
+ case "text": {
1498
+ textParts.push(part.text);
1499
+ break;
1500
+ }
1501
+ case "tool-call": {
1502
+ const serialized = JSON.stringify(part.input);
1503
+ actions.push({
1504
+ toolCallId: part.toolCallId,
1505
+ toolName: part.toolName,
1506
+ inputPreview: preview(serialized, INPUT_PREVIEW_LIMIT),
1507
+ inputLength: Buffer.byteLength(serialized, "utf-8")
1508
+ });
1509
+ break;
1510
+ }
1511
+ }
1512
+ }
1513
+ }
1514
+ const inputTokens = usage.inputTokens ?? 0;
1515
+ const outputTokens = usage.outputTokens ?? 0;
1516
+ const cacheReadTokens = usage.cacheReadTokens;
1517
+ const cacheWriteTokens = usage.cacheWriteTokens;
1518
+ this.cumulativeUsage.inputTokens += inputTokens;
1519
+ this.cumulativeUsage.outputTokens += outputTokens;
1520
+ if (cacheReadTokens != null) {
1521
+ this.cumulativeUsage.cacheReadTokens = (this.cumulativeUsage.cacheReadTokens ?? 0) + cacheReadTokens;
1522
+ }
1523
+ if (cacheWriteTokens != null) {
1524
+ this.cumulativeUsage.cacheWriteTokens = (this.cumulativeUsage.cacheWriteTokens ?? 0) + cacheWriteTokens;
1525
+ }
1526
+ const record = {
1527
+ type: "step",
1528
+ stepIndex: this.stepIndex,
1529
+ timestamp: new Date(now).toISOString(),
1530
+ agentId: this.agentId,
1531
+ observations: this.stepIndex === 0 ? null : observations.length > 0 ? observations : null,
1532
+ reasoning: reasoningParts.length > 0 ? reasoningParts.join("") : null,
1533
+ text: textParts.length > 0 ? textParts.join("") : null,
1534
+ actions,
1535
+ usage: { inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens },
1536
+ cumulativeUsage: { ...this.cumulativeUsage },
1537
+ stepDurationMs: now - this.lastStepTime,
1538
+ elapsedMs: now - this.agentStartTime,
1539
+ summarized: usageOnly ? false : this.summarized
1540
+ };
1541
+ this.appendRecord(record);
1542
+ this.stepIndex++;
1543
+ this.lastStepTime = now;
1544
+ if (!usageOnly)
1545
+ this.summarized = false;
1546
+ }
1547
+ get currentStepIndex() {
1548
+ return this.stepIndex;
1549
+ }
1550
+ appendCheckpoint(data) {
1551
+ const record = {
1552
+ type: "checkpoint",
1553
+ stepIndex: this.stepIndex,
1554
+ timestamp: new Date().toISOString(),
1555
+ agentId: this.agentId,
1556
+ ...data
1557
+ };
1558
+ this.appendRecord(record);
1559
+ }
1560
+ appendTaskRecord(data) {
1561
+ const record = {
1562
+ type: "task",
1563
+ timestamp: new Date().toISOString(),
1564
+ agentId: this.agentId,
1565
+ stepIndex: this.stepIndex,
1566
+ ...data
1567
+ };
1568
+ this.appendRecord(record);
1569
+ }
1570
+ appendRecord(record) {
1571
+ const correlation = getActiveTraceCorrelation2();
1572
+ const enriched = correlation ? { ...record, correlation } : record;
1573
+ try {
1574
+ appendFileSync(this.tracePath, `${JSON.stringify(enriched)}
1575
+ `);
1576
+ } catch {}
1577
+ try {
1578
+ this.eventBus?.emit("trace-record", {
1579
+ record: enriched,
1580
+ subagentId: this.agentId ?? undefined
1581
+ });
1582
+ } catch {}
1583
+ }
1584
+ }
1585
+
1586
+ // src/core/agents/offSecAgent/offensiveSecurityAgent.ts
1587
+ function isGenericAbortError(error) {
1588
+ return error instanceof Error && error.name === "AbortError" && error.cause === undefined && /^(?:Aborted|Agent aborted by user|(?:This|The) operation was aborted|The user aborted a request)\.?$/.test(error.message);
1589
+ }
1590
+ function agentAbortReason(signal) {
1591
+ const reason = signal.reason;
1592
+ return reason === undefined || isGenericAbortError(reason) ? new DOMException("Agent aborted by user", "AbortError") : reason;
1593
+ }
1594
+ var log = scopedLogger(() => createLogger("approval-gate"));
1595
+ var RESPONSE_DEBUG2 = process.env.RESPONSE_DEBUG === "1" || process.env.RESPONSE_DEBUG === "true";
1596
+ var rlog2 = scopedLogger(() => createLogger("response-debug"));
1597
+ var WORKSPACE_TOOL_NAME_SET = new Set(WORKSPACE_TOOL_NAMES2);
1598
+ var WORKSPACE_WRITE_TOOL_NAME_SET = new Set(WORKSPACE_WRITE_TOOL_NAMES2);
1599
+ var RUNTIME_CAPABLE_TOOL_NAMES = new Set([
1600
+ "execute_command",
1601
+ "read_file",
1602
+ "list_files",
1603
+ "glob",
1604
+ "grep",
1605
+ "create_file",
1606
+ "update_file",
1607
+ "delete_file",
1608
+ "apply_patch",
1609
+ "document_vulnerability"
1610
+ ]);
1611
+ var WORKSPACE_TARGET_RE = /\b(?:console|workspace)\b/i;
1612
+ var WORKSPACE_NOUN_RE = /\b(?:domains?|apps?|applications?|endpoints?|threat\s+models?|attack\s+surfaces?)\b/i;
1613
+ var WORKSPACE_READ_REQUEST_RE = /(?:\b(?:list|show|find|search|get)\s+(?:(?:me|a|an|the|my|our|all|any|list|of|for|in|within|registered|existing|available|console|workspace|which)\s+){0,8}(?:domains?|apps?|applications?|endpoints?)\b|\b(?:what|which)\s+(?:(?:of|a|an|the|my|our|all|any|are|is|do|does|we|i|have|has|there|registered|existing|available|console|workspace)\s+){0,8}(?:domains?|apps?|applications?|endpoints?)\b)/i;
1614
+ var WORKSPACE_WRITE_ACTION = String.raw`(?:add|create|register|import|update|edit|change|set|correct|repair|link|unlink|rename|break\s+down)`;
1615
+ var WORKSPACE_EXPLICIT_WRITE_REQUEST_RE = new RegExp(String.raw`(?:^\s*|[.?!;\n]\s*|\b(?:please|kindly)\s+|\b(?:can|could|would|will)\s+you\s+|\b(?:i|we)\s+(?:want|need)\s+(?:you\s+)?to\s+|\bi(?:['’]d| would)\s+like\s+(?:you\s+)?to\s+|\blet['’]s\s+|\bgo\s+ahead\s+and\s+)${WORKSPACE_WRITE_ACTION}\b`, "i");
1616
+ var WORKSPACE_NEGATED_WRITE_REQUEST_RE = new RegExp(String.raw`\b(?:do\s+not|don't|never|avoid)\b[^.?!;\n]{0,40}\b${WORKSPACE_WRITE_ACTION}\b`, "i");
1617
+ var WORKSPACE_CLAUSE_BOUNDARY_RE = new RegExp(String.raw`(?:[.!?;]+(?=\s|$)\s*|\n+|\s+(?:but|however)\s+|\s+and\s+(?=(?:(?:do\s+not|don't|never|avoid)\s+)?${WORKSPACE_WRITE_ACTION}\b))`, "i");
1618
+ var WORKSPACE_SENTENCE_BOUNDARY_RE = /(?:[.!?;]+(?=\s|$)\s*|\n+)/;
1619
+ var WORKSPACE_CAPABILITY_QUESTION_RE = /^\s*(?:(?:so|and|also|then|ok|okay|well|hey|hi|actually|but)[,\s]+)*(?:is\s+it\s+possible\b|what\s+if\b|how\s+(?:do|can|could|should|would|shall|might)\s+(?:i|we)\b|(?:can|could|should|would|may|will|do|does|did|am|are|is|shall|have|has)\s+(?:i|we)\b)/i;
1620
+ var WORKSPACE_CREATE_REQUEST_RE = /\b(?:add|create|register|import)\s+(?:(?:the|this|that|a|an|my|our|existing|new|current|connected|authenticated|console|workspace|attached|provided)\s+){0,4}(?:domains?|apps?|applications?|endpoints?|threat\s+models?|attack\s+surfaces?)\b/i;
1621
+ var WORKSPACE_DOMAIN_HOST_WRITE_RE = /\b(?:add|create|register|import|link)\s+(?:https?:\/\/)?(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}(?::\d+)?(?:\/\S*)?\s+(?:to|in|under)\s+(?:(?:the|my|our|connected|authenticated)\s+)?(?:console|workspace)\b/i;
1622
+ var WORKSPACE_APP_FIELD_UPDATE_RE = /\b(?:update|edit|change|set|correct|repair)\s+(?:(?:the|this|that|my|our|existing|current|connected|authenticated|console|workspace)\s+){0,4}(?:apps?|applications?)(?:['’]s)?\s+(?:name|description|type|framework|domain|disallowed\s+actions?)\s+(?:(?:to|as|with|from)\b|[:=])/i;
1623
+ var WORKSPACE_ENDPOINT_FIELD_UPDATE_RE = /\b(?:update|edit|change|set|correct|repair)\s+(?:(?:the|this|that|my|our|existing|current|connected|authenticated|console|workspace)\s+){0,4}endpoints?(?:['’]s)?\s+(?:path|route|url|description|type|transport|location|source(?:\s+location)?|start\s+line|end\s+line|line\s+numbers?|objectives?|authentication(?:\s+requirements?)?|business\s+logic|threat\s+model|parent\s+application)\s+(?:(?:to|as|with|from)\b|[:=])/i;
1624
+ var WORKSPACE_LINK_CLAUSE_GAP = String.raw`[^.?!;\n]{0,80}`;
1625
+ var WORKSPACE_APP_RESOURCE = String.raw`\b(?:apps?|applications?)\b`;
1626
+ var WORKSPACE_DOMAIN_RESOURCE = String.raw`\b(?:domains?|(?:https?:\/\/)?(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,})\b`;
1627
+ var WORKSPACE_APP_DOMAIN_LINK_RE = new RegExp(String.raw`(?:\blink\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_APP_RESOURCE}${WORKSPACE_LINK_CLAUSE_GAP}\bto\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_DOMAIN_RESOURCE}|\blink\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_DOMAIN_RESOURCE}${WORKSPACE_LINK_CLAUSE_GAP}\bto\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_APP_RESOURCE}|\bunlink\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_APP_RESOURCE}${WORKSPACE_LINK_CLAUSE_GAP}\bfrom\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_DOMAIN_RESOURCE}|\bunlink\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_DOMAIN_RESOURCE}${WORKSPACE_LINK_CLAUSE_GAP}\bfrom\b${WORKSPACE_LINK_CLAUSE_GAP}${WORKSPACE_APP_RESOURCE})`, "i");
1628
+ var WORKSPACE_APP_RENAME_RE = /\brename\s+(?:(?:the|this|that|my|our|existing|current|connected|authenticated|console|workspace)\s+){0,4}(?:apps?|applications?)\b[^.?!;\n]{0,60}\b(?:to|as)\b/i;
1629
+ var WORKSPACE_BREAK_DOWN_IMPORT_RE = /\bbreak\s+down\b[^.?!;\n]{0,100}\b(?:threat\s+models?|attack\s+surfaces?)\b[^.?!;\n]{0,100}\b(?:into|as)\b[^.?!;\n]{0,40}\b(?:apps?|applications?|endpoints?)\b/i;
1630
+ function hasExplicitWorkspaceWriteRequest(prompt, targetsWorkspace) {
1631
+ return prompt.split(WORKSPACE_SENTENCE_BOUNDARY_RE).some((sentence) => {
1632
+ if (WORKSPACE_CAPABILITY_QUESTION_RE.test(sentence))
1633
+ return false;
1634
+ return sentence.split(WORKSPACE_CLAUSE_BOUNDARY_RE).some((clause) => {
1635
+ if (!WORKSPACE_EXPLICIT_WRITE_REQUEST_RE.test(clause) || WORKSPACE_NEGATED_WRITE_REQUEST_RE.test(clause)) {
1636
+ return false;
1637
+ }
1638
+ return WORKSPACE_DOMAIN_HOST_WRITE_RE.test(clause) || targetsWorkspace && (WORKSPACE_CREATE_REQUEST_RE.test(clause) || WORKSPACE_APP_FIELD_UPDATE_RE.test(clause) || WORKSPACE_ENDPOINT_FIELD_UPDATE_RE.test(clause) || WORKSPACE_APP_DOMAIN_LINK_RE.test(clause) || WORKSPACE_APP_RENAME_RE.test(clause) || WORKSPACE_BREAK_DOWN_IMPORT_RE.test(clause));
1639
+ });
1640
+ });
1641
+ }
1642
+ function filterWorkspaceToolsForRun(activeTools, prompt, hasInteractiveApprovalGate) {
1643
+ const gated = hasInteractiveApprovalGate && !prompt.trimStart().startsWith("<skill ");
1644
+ if (!gated) {
1645
+ return activeTools.filter((name) => !WORKSPACE_TOOL_NAME_SET.has(name));
1646
+ }
1647
+ const targetsWorkspace = WORKSPACE_TARGET_RE.test(prompt) && WORKSPACE_NOUN_RE.test(prompt);
1648
+ const writeRequested = WORKSPACE_WRITE_TOOL_NAMES2.some((name) => prompt.includes(name)) || hasExplicitWorkspaceWriteRequest(prompt, targetsWorkspace);
1649
+ const readRequested = writeRequested || WORKSPACE_TOOL_NAMES2.some((name) => prompt.includes(name)) || targetsWorkspace && WORKSPACE_READ_REQUEST_RE.test(prompt);
1650
+ return activeTools.filter((name) => {
1651
+ if (WORKSPACE_WRITE_TOOL_NAME_SET.has(name))
1652
+ return writeRequested;
1653
+ if (WORKSPACE_TOOL_NAME_SET.has(name))
1654
+ return readRequested;
1655
+ return true;
1656
+ });
1657
+ }
1658
+
1659
+ class OffensiveSecurityAgent2 {
1660
+ _streamResult = null;
1661
+ createStream;
1662
+ initializeStreamOnce;
1663
+ streamInit = null;
1664
+ probesRuntime;
1665
+ toolCtx;
1666
+ eventBus;
1667
+ resolveResult;
1668
+ _capturedResponse = null;
1669
+ _responseToolFired = false;
1670
+ _responseToolResult;
1671
+ _resolveResponseCaptured;
1672
+ _rejectResponseCaptured;
1673
+ responseCaptured = new Promise((resolve, reject) => {
1674
+ this._resolveResponseCaptured = resolve;
1675
+ this._rejectResponseCaptured = reject;
1676
+ });
1677
+ _drainRejection = new Promise(() => {});
1678
+ drained = Promise.resolve();
1679
+ subagentId;
1680
+ subagentName;
1681
+ agentMode;
1682
+ currentMessageId = null;
1683
+ streamStepIndex = -1;
1684
+ streamTextPartIndex = 0;
1685
+ commandShell;
1686
+ browserSession;
1687
+ ownsBrowserSession;
1688
+ browserDisconnected = false;
1689
+ shellDisposed = false;
1690
+ callbackListeners = new CallbackListenerRegistry2;
1691
+ shellDisposeBarrier = null;
1692
+ abortSignal;
1693
+ streamIdFactory;
1694
+ contextRecorder;
1695
+ userPrompt;
1696
+ _session;
1697
+ writer;
1698
+ finalizeInterruptedStep;
1699
+ messagesPath = null;
1700
+ static async create(input) {
1701
+ let session = input.session;
1702
+ if (!session) {
1703
+ session = await create2({
1704
+ targets: input.target ? [input.target] : [],
1705
+ config: input.sessionConfig,
1706
+ model: input.model,
1707
+ authConfig: input.authConfig,
1708
+ userMessage: input.prompt,
1709
+ onNameGenerated: input.onNameGenerated
1710
+ });
1711
+ }
1712
+ return new OffensiveSecurityAgent2({ ...input, session });
1713
+ }
1714
+ get session() {
1715
+ return this._session;
1716
+ }
1717
+ get busSessionId() {
1718
+ return this.subagentId ?? this._session.id;
1719
+ }
1720
+ constructor(input) {
1721
+ this._session = input.session;
1722
+ this.subagentId = input.subagentId;
1723
+ this.subagentName = input.subagentName;
1724
+ this.agentMode = input.mode ?? "default";
1725
+ this.abortSignal = input.abortSignal;
1726
+ this.streamIdFactory = input.streamIdFactory;
1727
+ this.contextRecorder = input.contextRecorder;
1728
+ this.userPrompt = input.prompt;
1729
+ this.eventBus = input.eventBus ?? new AgentEventBus2;
1730
+ const agentCwd = input.agentCwd ?? input.session.config?.agentCwd ?? input.session.rootPath;
1731
+ const fileWorkspaceRoot = input.fileWorkspaceRoot ?? input.session.config?.remoteFileWorkspaceRoot;
1732
+ if (!input.sandbox) {
1733
+ this.commandShell = new PerCommandShell2({
1734
+ cwd: agentCwd,
1735
+ env: input.environmentVariables
1736
+ });
1737
+ if (input.commandCancelHandle) {
1738
+ const shell = this.commandShell;
1739
+ input.commandCancelHandle.cancel = () => shell.cancelCurrentCommand();
1740
+ }
1741
+ }
1742
+ if (!input.sandbox) {
1743
+ this.ownsBrowserSession = !input.browserSession;
1744
+ this.browserSession = input.browserSession ?? new PlaywrightMcpSession2({
1745
+ headerPolicy: resolveBrowserHeaderPolicy2(input.session, input.target),
1746
+ display: input.display,
1747
+ engine: input.browserEngine
1748
+ });
1749
+ if (this.ownsBrowserSession && this.abortSignal) {
1750
+ const onAbort = () => {
1751
+ this.disconnectOwnedBrowser();
1752
+ };
1753
+ if (this.abortSignal.aborted)
1754
+ onAbort();
1755
+ else
1756
+ this.abortSignal.addEventListener("abort", onAbort, { once: true });
1757
+ }
1758
+ } else {
1759
+ this.ownsBrowserSession = false;
1760
+ }
1761
+ const messagesDir = input.messagesDir ?? (input.subagentId ? join3(input.session.rootPath, "subagents", input.subagentId) : input.session.rootPath);
1762
+ const tracePath = input.subagentId ? join3(input.session.rootPath, "subagents", `${input.subagentId}.trace.jsonl`) : join3(messagesDir, "trace.jsonl");
1763
+ const traceWriter = new StepTraceWriter2({
1764
+ tracePath,
1765
+ agentId: input.subagentId ?? null,
1766
+ eventBus: this.eventBus
1767
+ });
1768
+ const taskDriven = input.session.config?.taskDriven ?? false;
1769
+ const tasksDir = input.tasksDir ?? (taskDriven ? input.subagentId ? join3(input.session.rootPath, "subagents", `${input.subagentId}-tasks`) : join3(input.session.rootPath, "tasks") : undefined);
1770
+ const credentialManager = input.credentialManager ?? input.session.credentialManager;
1771
+ const toolCtx = {
1772
+ ...input.attackSurfaceArtifactsPath ? { attackSurfaceArtifactsPath: input.attackSurfaceArtifactsPath } : {},
1773
+ session: input.session,
1774
+ agentCwd,
1775
+ fileWorkspaceRoot,
1776
+ target: input.target,
1777
+ grpc: input.grpc,
1778
+ systemScope: input.systemScope,
1779
+ abortSignal: input.abortSignal,
1780
+ model: input.model,
1781
+ authConfig: input.authConfig,
1782
+ eventBus: this.eventBus,
1783
+ onStepFinish: input.forwardUsageCallbacksToSpawnedAgents ? input.onStepFinish : undefined,
1784
+ onCacheMetrics: input.forwardUsageCallbacksToSpawnedAgents ? input.onCacheMetrics : undefined,
1785
+ sandbox: input.sandbox,
1786
+ backends: input.backends,
1787
+ findingsRegistry: input.findingsRegistry,
1788
+ attackSurfaceRegistry: input.attackSurfaceRegistry,
1789
+ credentialManager,
1790
+ secretValues: input.secretValues,
1791
+ environmentVariables: input.environmentVariables,
1792
+ commandShell: this.commandShell,
1793
+ skillsRegistry: input.skillsRegistry,
1794
+ promptInjectionLibrary: input.promptInjectionLibrary,
1795
+ promptInjectionLibrarySource: input.promptInjectionLibrarySource ?? input.session.config?.promptInjectionLibrarySource,
1796
+ traceWriter,
1797
+ tasksDir,
1798
+ enableThinking: input.enableThinking,
1799
+ thinkingEffort: input.thinkingEffort,
1800
+ openAIReasoningEffort: input.openAIReasoningEffort,
1801
+ surfaceIntegrationEnabled: input.surfaceIntegrationEnabled,
1802
+ projectThreatModel: input.projectThreatModel,
1803
+ planSubagentId: input.planSubagentId,
1804
+ subagentId: input.subagentId,
1805
+ browserSession: this.browserSession,
1806
+ display: input.display,
1807
+ subagentSpawner: input.subagentSpawner ?? inProcessSubagentSpawner2,
1808
+ callbackListeners: this.callbackListeners,
1809
+ smsInbox: input.smsInbox,
1810
+ emailAdapterFor: input.emailAdapterFor,
1811
+ languageModelMiddleware: input.languageModelMiddleware,
1812
+ usageRecorder: input.usageRecorder,
1813
+ streamIdFactory: input.streamIdFactory
1814
+ };
1815
+ const hasEmail = (input.session.config?.emailIntegration?.inboxes?.length ?? 0) > 0;
1816
+ const hasSmtp = !!input.session.config?.smtpConfig;
1817
+ const emailToolSet = new Set(EMAIL_TOOL_NAMES2);
1818
+ const smsToolSet = new Set(SMS_TOOL_NAMES2);
1819
+ const hasSms = sessionHasSmsPasswordless2(input.session);
1820
+ const passesEmailSmsGates = (t) => {
1821
+ if (smsToolSet.has(t))
1822
+ return hasSms;
1823
+ if (!emailToolSet.has(t))
1824
+ return true;
1825
+ if (t === SEND_EMAIL_TOOL_NAME2)
1826
+ return hasSmtp;
1827
+ return hasEmail;
1828
+ };
1829
+ let activeTools = input.activeTools.filter(passesEmailSmsGates);
1830
+ if (input.mode === "plan") {
1831
+ const planSet = new Set(PLAN_MODE_TOOL_NAMES2);
1832
+ activeTools = activeTools.filter((t) => planSet.has(t));
1833
+ } else if (input.mode === "fast-strike") {
1834
+ const excluded = new Set(FAST_STRIKE_EXCLUDED_TOOL_NAMES2);
1835
+ const mergedNames = input.extraTools ? Object.keys({
1836
+ ...Object.fromEntries(listToolRegistryNames2(toolCtx).map((n) => [n, null])),
1837
+ ...input.extraTools
1838
+ }) : listToolRegistryNames2(toolCtx);
1839
+ activeTools = mergedNames.filter((t) => {
1840
+ if (excluded.has(t))
1841
+ return false;
1842
+ return passesEmailSmsGates(t);
1843
+ });
1844
+ if (input.responseSchema && !activeTools.includes(RESPONSE_TOOL_NAME2)) {
1845
+ activeTools = [...activeTools, RESPONSE_TOOL_NAME2];
1846
+ }
1847
+ }
1848
+ activeTools = filterWorkspaceToolsForRun(activeTools, input.prompt, input.approvalGate !== undefined);
1849
+ const builtinTools = createToolsForNames2(toolCtx, activeTools);
1850
+ let tools = input.extraTools ? { ...builtinTools, ...input.extraTools } : { ...builtinTools };
1851
+ if (input.toolExecutionRecorder) {
1852
+ tools = wrapRecordedTools(tools, input.toolExecutionRecorder);
1853
+ }
1854
+ if (input.approvalGate) {
1855
+ tools = wrapToolsWithApprovalGate(tools, input.approvalGate, AGENT_PAUSE_TOOLS);
1856
+ }
1857
+ if (input.responseSchema) {
1858
+ tools = {
1859
+ ...tools,
1860
+ [RESPONSE_TOOL_NAME2]: createResponseTool2(input.responseSchema, (result) => {
1861
+ this._responseToolFired = true;
1862
+ this._responseToolResult = result;
1863
+ if (RESPONSE_DEBUG2) {
1864
+ rlog2.warn(`[response-debug] response tool EXECUTED (captured) session=${this.busSessionId} ` + `resultBytes=${responseArgBytes(result)} — happy path`);
1865
+ }
1866
+ const customResolve = input.resolveResult;
1867
+ if (customResolve) {
1868
+ Promise.resolve().then(() => {
1869
+ const sr = this.streamResult;
1870
+ const guarded = Object.create(sr, {
1871
+ response: {
1872
+ get: () => Promise.race([sr.response, this._drainRejection])
1873
+ }
1874
+ });
1875
+ return customResolve(guarded);
1876
+ }).then((resolved) => {
1877
+ this._capturedResponse = resolved;
1878
+ this._resolveResponseCaptured(resolved);
1879
+ }).catch((err) => {
1880
+ this._rejectResponseCaptured(err);
1881
+ });
1882
+ return;
1883
+ }
1884
+ this._capturedResponse = result;
1885
+ this._resolveResponseCaptured(result);
1886
+ })
1887
+ };
1888
+ }
1889
+ if (input.resolveResult) {
1890
+ this.resolveResult = input.resolveResult;
1891
+ } else if (input.responseSchema) {
1892
+ this.resolveResult = () => {
1893
+ if (this._capturedResponse !== null)
1894
+ return this._capturedResponse;
1895
+ return;
1896
+ };
1897
+ }
1898
+ let stopWhen = input.stopWhen;
1899
+ if (input.responseSchema) {
1900
+ const responseStop = hasToolCall(RESPONSE_TOOL_NAME2);
1901
+ if (!stopWhen) {
1902
+ stopWhen = responseStop;
1903
+ } else if (Array.isArray(stopWhen)) {
1904
+ stopWhen = [...stopWhen, responseStop];
1905
+ } else {
1906
+ stopWhen = [stopWhen, responseStop];
1907
+ }
1908
+ }
1909
+ if (!existsSync4(messagesDir)) {
1910
+ mkdirSync2(messagesDir, { recursive: true });
1911
+ }
1912
+ this.messagesPath = join3(messagesDir, "messages.json");
1913
+ const initialMessagesRef = {
1914
+ current: input.messages ? [...input.messages] : [
1915
+ {
1916
+ role: "user",
1917
+ content: [{ type: "text", text: input.prompt }]
1918
+ }
1919
+ ]
1920
+ };
1921
+ this.writer = new AgentMessageWriter({ messagesPath: this.messagesPath });
1922
+ this.finalizeInterruptedStep = createInterruptedStepFinalizer({
1923
+ eventBus: this.eventBus,
1924
+ sessionId: this.busSessionId,
1925
+ subagentId: this.subagentId,
1926
+ writer: this.writer,
1927
+ responseToolName: RESPONSE_TOOL_NAME2,
1928
+ responseToolFired: () => this._responseToolFired,
1929
+ ...RESPONSE_DEBUG2 ? { debugLog: (message) => rlog2.warn(message) } : {}
1930
+ });
1931
+ const schedulePersist = () => this.writer.schedulePersist();
1932
+ const baseSystemPrompt = input.system ?? buildBaseSystemPrompt2({
1933
+ sandboxMode: agentCwd === input.session.rootPath
1934
+ });
1935
+ const commandPlatform = resolveCommandPlatform(toolCtx);
1936
+ const workspaceSection = buildSessionWorkspaceSection2(input.session, agentCwd, activeTools, fileWorkspaceRoot);
1937
+ const bundledAssets = input.backends || input.sandbox ? null : buildBundledAssetsSection();
1938
+ const assembleBaseSystemPrompt = (facts) => {
1939
+ const sections = [baseSystemPrompt];
1940
+ if (facts) {
1941
+ sections.push(buildRuntimeContextSection(facts, { platform: commandPlatform }));
1942
+ }
1943
+ if (bundledAssets)
1944
+ sections.push(bundledAssets);
1945
+ return sections.join(`
1946
+
1947
+ `);
1948
+ };
1949
+ this.toolCtx = toolCtx;
1950
+ this.probesRuntime = activeTools.some((name) => RUNTIME_CAPABLE_TOOL_NAMES.has(name));
1951
+ this.createStream = (facts) => {
1952
+ const baseWithFacts = assembleBaseSystemPrompt(facts);
1953
+ traceWriter.writeInit({
1954
+ model: input.model,
1955
+ systemPrompt: baseWithFacts,
1956
+ activeTools,
1957
+ sessionId: input.session.id,
1958
+ target: input.target
1959
+ });
1960
+ return streamResponse2({
1961
+ prompt: input.prompt,
1962
+ system: baseWithFacts + workspaceSection,
1963
+ model: input.model,
1964
+ messages: input.messages,
1965
+ tools,
1966
+ activeTools,
1967
+ stopWhen,
1968
+ toolChoice: "auto",
1969
+ languageModelMiddleware: input.languageModelMiddleware,
1970
+ usageRecorder: input.usageRecorder,
1971
+ contextRecorder: input.contextRecorder,
1972
+ inferenceRecorder: input.inferenceRecorder,
1973
+ sessionPath: messagesDir,
1974
+ sessionId: this.busSessionId,
1975
+ onStepFinish: async (event) => {
1976
+ const auxiliaryModelEvent = event.response.id === "summarization" || event.response.id === "tool-repair";
1977
+ const stepUsage = normalizeStepUsage2(event);
1978
+ if (auxiliaryModelEvent) {
1979
+ traceWriter.recordStep([], stepUsage, { usageOnly: true });
1980
+ await input.onStepFinish?.(event);
1981
+ return;
1982
+ }
1983
+ const canonical = input.contextRecorder?.latest() ?? [
1984
+ ...initialMessagesRef.current,
1985
+ ...event.response.messages
1986
+ ];
1987
+ this.writer.setLatest(canonical);
1988
+ schedulePersist();
1989
+ traceWriter.recordStep(event.response.messages, stepUsage);
1990
+ this.eventBus.emit("step-finish", {
1991
+ messages: event.response.messages,
1992
+ subagentId: this.subagentId,
1993
+ sessionId: this.busSessionId,
1994
+ messageId: this.currentMessageId ?? undefined
1995
+ });
1996
+ this.currentMessageId = null;
1997
+ await input.onStepFinish?.(event);
1998
+ },
1999
+ onSummarized: () => {
2000
+ initialMessagesRef.current = [];
2001
+ traceWriter.markSummarized();
2002
+ },
2003
+ onFinish: async (event) => {
2004
+ this.writer.cancelTimer();
2005
+ if (!this.writer.syntheticsPersisted) {
2006
+ const finalMessages = input.contextRecorder?.latest() ?? this.writer.latest ?? [
2007
+ ...initialMessagesRef.current,
2008
+ ...event.response.messages
2009
+ ];
2010
+ this.writer.setLatest(finalMessages);
2011
+ await this.writer.enqueueWrite(finalMessages).catch(() => {});
2012
+ }
2013
+ await input.onFinish?.(event);
2014
+ },
2015
+ abortSignal: input.abortSignal,
2016
+ authConfig: input.authConfig,
2017
+ onCacheMetrics: input.onCacheMetrics,
2018
+ enableThinking: input.enableThinking,
2019
+ thinkingEffort: input.thinkingEffort,
2020
+ openAIReasoningEffort: input.openAIReasoningEffort,
2021
+ silent: true
2022
+ });
2023
+ };
2024
+ this.initializeStreamOnce = async () => {
2025
+ if (this._streamResult !== null)
2026
+ return;
2027
+ const facts = this.probesRuntime && !this.abortSignal?.aborted ? await probeRuntimeFacts(toolCtx).catch(() => UNKNOWN_FACTS) : null;
2028
+ if (this._streamResult !== null)
2029
+ return;
2030
+ this._streamResult = this.createStream(facts);
2031
+ };
2032
+ }
2033
+ streamReady() {
2034
+ this.streamInit ??= this.initializeStreamOnce();
2035
+ return this.streamInit;
2036
+ }
2037
+ get streamResult() {
2038
+ if (this._streamResult === null) {
2039
+ const facts = this.probesRuntime ? peekSettledRuntimeFacts(this.toolCtx) ?? UNKNOWN_FACTS : null;
2040
+ this._streamResult = this.createStream(facts);
2041
+ }
2042
+ return this._streamResult;
2043
+ }
2044
+ get fullStream() {
2045
+ if (this._streamResult !== null) {
2046
+ return this._streamResult.fullStream;
2047
+ }
2048
+ const self = this;
2049
+ return async function* () {
2050
+ await self.streamReady();
2051
+ const stream = self._streamResult;
2052
+ if (stream === null) {
2053
+ throw new Error("Stream initialization did not produce a stream");
2054
+ }
2055
+ yield* stream.fullStream;
2056
+ }();
2057
+ }
2058
+ async* [Symbol.asyncIterator]() {
2059
+ await this.streamReady();
2060
+ for await (const chunk of this.streamResult.fullStream) {
2061
+ yield chunk;
2062
+ }
2063
+ }
2064
+ async consume() {
2065
+ const sid = this.subagentId;
2066
+ const bus = this.eventBus;
2067
+ const runConsume = async () => {
2068
+ this.streamStepIndex = -1;
2069
+ this.streamTextPartIndex = 0;
2070
+ const toolParts = new Map;
2071
+ const ids = {
2072
+ subagentId: this.subagentId,
2073
+ sessionId: this.busSessionId,
2074
+ messageId: undefined,
2075
+ textPartId: undefined,
2076
+ toolPartId: (toolCallId) => {
2077
+ let p = toolParts.get(toolCallId);
2078
+ if (!p) {
2079
+ p = this.streamIdFactory?.({ kind: "tool-part", toolCallId }) ?? newPartId2();
2080
+ toolParts.set(toolCallId, p);
2081
+ }
2082
+ return p;
2083
+ }
2084
+ };
2085
+ const tracker = new ToolLifecycleTracker;
2086
+ let streamError;
2087
+ let hasStreamError = false;
2088
+ const diagnostics = new StreamDiagnostics({
2089
+ sessionId: this._session.id,
2090
+ subagentId: sid,
2091
+ inFlightTools: () => tracker.inFlightTools,
2092
+ responseToolFired: () => this._responseToolFired,
2093
+ responseToolName: RESPONSE_TOOL_NAME2
2094
+ });
2095
+ diagnostics.start();
2096
+ try {
2097
+ await this.streamReady();
2098
+ for await (const chunk of this.streamResult.fullStream) {
2099
+ diagnostics.observeChunk(chunk);
2100
+ this.applyStreamPart(chunk, { ids, tracker, diagnostics });
2101
+ bus.emitStreamPart(chunk, ids);
2102
+ }
2103
+ } catch (err) {
2104
+ streamError = this.abortSignal?.aborted && isGenericAbortError(err) ? agentAbortReason(this.abortSignal) : err;
2105
+ hasStreamError = true;
2106
+ } finally {
2107
+ if (!hasStreamError && this.abortSignal?.aborted) {
2108
+ streamError = agentAbortReason(this.abortSignal);
2109
+ hasStreamError = true;
2110
+ }
2111
+ const finalizeError = await this.finalizeRun({
2112
+ tracker,
2113
+ diagnostics,
2114
+ ids,
2115
+ streamError
2116
+ });
2117
+ if (!hasStreamError && finalizeError !== null) {
2118
+ streamError = finalizeError;
2119
+ hasStreamError = true;
2120
+ }
2121
+ }
2122
+ if (hasStreamError) {
2123
+ throw streamError;
2124
+ }
2125
+ if (this.abortSignal?.aborted) {
2126
+ throw agentAbortReason(this.abortSignal);
2127
+ }
2128
+ if (this.resolveResult) {
2129
+ if (this._responseToolFired) {
2130
+ return;
2131
+ }
2132
+ return this.resolveResult(this.streamResult);
2133
+ }
2134
+ return;
2135
+ };
2136
+ const isSubagent = Boolean(sid);
2137
+ const spanLabel = isSubagent ? this.subagentName ?? sid ?? "subagent" : this.agentMode;
2138
+ const rootSessionId = this._session.id;
2139
+ const agentSessionId = this.busSessionId;
2140
+ const runSpanAttributes = {
2141
+ "gen_ai.operation.name": "invoke_agent",
2142
+ "gen_ai.agent.id": agentSessionId,
2143
+ "gen_ai.agent.name": spanLabel,
2144
+ "gen_ai.conversation.id": rootSessionId,
2145
+ "session.id": rootSessionId,
2146
+ "pensar.session.id": agentSessionId,
2147
+ "pensar.root_session.id": rootSessionId,
2148
+ ...!isSubagent ? { "pensar.agent.mode": this.agentMode } : {}
2149
+ };
2150
+ const runInSpan = () => getApexTracer2().startActiveSpan(`invoke_agent ${spanLabel}`, { attributes: runSpanAttributes }, async (span) => {
2151
+ if (!isSubagent)
2152
+ registerActiveRootSpan2(span);
2153
+ const recordRootIO = (!isSubagent || this.agentMode === "fast-strike") && shouldRecordAiPayloads2();
2154
+ if (recordRootIO && this.userPrompt) {
2155
+ span.setAttribute("gen_ai.prompt", this.userPrompt);
2156
+ }
2157
+ try {
2158
+ const result = await runConsume();
2159
+ const completedResult = result === undefined && this._responseToolFired ? this._responseToolResult : result;
2160
+ if (recordRootIO && completedResult !== undefined && completedResult !== null) {
2161
+ span.setAttribute("gen_ai.completion", safePreview(completedResult));
2162
+ }
2163
+ return result;
2164
+ } catch (err) {
2165
+ span.recordException(err);
2166
+ span.setStatus({ code: SpanStatusCode.ERROR });
2167
+ span.setAttribute("error.type", err instanceof Error ? err.name : "Error");
2168
+ if (recordRootIO) {
2169
+ span.setAttribute("gen_ai.completion", this._responseToolFired ? safePreview(this._responseToolResult) : `Failure: ${err instanceof Error ? err.message : String(err)}`);
2170
+ }
2171
+ throw err;
2172
+ } finally {
2173
+ unregisterActiveRootSpan2(span);
2174
+ if (span.isRecording())
2175
+ span.end();
2176
+ }
2177
+ });
2178
+ const drain = !isSubagent ? runInSpan() : withSubagentSessionBaggage2(sid, runInSpan);
2179
+ let rejectDrain;
2180
+ this._drainRejection = new Promise((_, reject) => {
2181
+ rejectDrain = reject;
2182
+ });
2183
+ this._drainRejection.catch(() => {});
2184
+ this.drained = drain.then(() => {}, () => {});
2185
+ const guardedDrain = drain.then((result) => {
2186
+ if (this._responseToolFired) {
2187
+ rejectDrain?.(new Error("drain resolved"));
2188
+ return this.responseCaptured;
2189
+ }
2190
+ return result;
2191
+ }).catch((err) => {
2192
+ rejectDrain?.(err);
2193
+ if (!this._responseToolFired)
2194
+ throw err;
2195
+ return this.responseCaptured;
2196
+ });
2197
+ guardedDrain.catch(() => {});
2198
+ const result = await Promise.race([guardedDrain, this.responseCaptured]);
2199
+ await this.disconnectOwnedBrowser();
2200
+ return result;
2201
+ }
2202
+ applyStreamPart(chunk, ctx) {
2203
+ const { ids, tracker, diagnostics } = ctx;
2204
+ const sid = this.subagentId;
2205
+ const bus = this.eventBus;
2206
+ switch (chunk.type) {
2207
+ case "start-step":
2208
+ this.streamStepIndex++;
2209
+ this.streamTextPartIndex = 0;
2210
+ ids.messageId = this.streamIdFactory?.({
2211
+ kind: "message",
2212
+ stepIndex: this.streamStepIndex
2213
+ }) ?? newMessageId2();
2214
+ this.currentMessageId = ids.messageId;
2215
+ ids.textPartId = undefined;
2216
+ break;
2217
+ case "text-start":
2218
+ ids.textPartId = this.streamIdFactory?.({
2219
+ kind: "text-part",
2220
+ stepIndex: this.streamStepIndex,
2221
+ textPartIndex: this.streamTextPartIndex
2222
+ }) ?? newPartId2();
2223
+ this.streamTextPartIndex++;
2224
+ break;
2225
+ case "text-end":
2226
+ ids.textPartId = undefined;
2227
+ break;
2228
+ case "finish-step": {
2229
+ tracker.onStepPersisted();
2230
+ const finishReason = chunk.finishReason;
2231
+ const truncated = finishReason === "length";
2232
+ for (const [toolCallId, info] of tracker.toolErrors) {
2233
+ diagnostics.logSurfacedToolError({
2234
+ toolCallId,
2235
+ toolName: info.toolName,
2236
+ message: info.message,
2237
+ streamedArgChars: (tracker.streamedArgText.get(toolCallId) ?? "").length,
2238
+ finishReason,
2239
+ truncated
2240
+ });
2241
+ bus.emit("tool-result", {
2242
+ toolCallId,
2243
+ toolName: info.toolName,
2244
+ result: {
2245
+ type: "error-text",
2246
+ value: truncated ? `Tool call failed: the model's output was truncated at its max output tokens before the "${info.toolName}" arguments were complete. ${info.message}` : `Tool call failed: ${info.message}`
2247
+ },
2248
+ sessionId: this.busSessionId,
2249
+ subagentId: sid,
2250
+ partId: ids.toolPartId?.(toolCallId),
2251
+ messageId: ids.messageId
2252
+ });
2253
+ }
2254
+ tracker.clearToolErrors();
2255
+ for (const [toolCallId, toolName] of tracker.inFlightTools) {
2256
+ diagnostics.logClosingInFlightTool({
2257
+ toolCallId,
2258
+ toolName,
2259
+ finishReason,
2260
+ truncated
2261
+ });
2262
+ const result = toolName === RESPONSE_TOOL_NAME2 && this._responseToolFired ? { type: "text", value: "Response submitted." } : {
2263
+ type: "error-text",
2264
+ value: truncated ? "Tool call did not complete: the model's output was truncated at its max output tokens before the arguments were finalized." : "Tool call did not complete"
2265
+ };
2266
+ bus.emit("tool-result", {
2267
+ toolCallId,
2268
+ toolName,
2269
+ result,
2270
+ sessionId: this.busSessionId,
2271
+ subagentId: sid,
2272
+ partId: ids.toolPartId?.(toolCallId),
2273
+ messageId: ids.messageId
2274
+ });
2275
+ }
2276
+ tracker.clearInFlight();
2277
+ break;
2278
+ }
2279
+ default:
2280
+ tracker.observePart(chunk);
2281
+ }
2282
+ }
2283
+ async finalizeRun(input) {
2284
+ const { tracker, diagnostics, ids, streamError } = input;
2285
+ const sid = this.subagentId;
2286
+ const bus = this.eventBus;
2287
+ diagnostics.stop();
2288
+ let finalizationError;
2289
+ let hasFinalizationError = false;
2290
+ const recordFinalizationError = (error) => {
2291
+ if (hasFinalizationError)
2292
+ return;
2293
+ finalizationError = error;
2294
+ hasFinalizationError = true;
2295
+ };
2296
+ try {
2297
+ try {
2298
+ await this.disposeOwnedShell();
2299
+ } catch (error) {
2300
+ recordFinalizationError(error);
2301
+ }
2302
+ try {
2303
+ const outcomes = await this.callbackListeners.stopAll();
2304
+ const failed = outcomes.find((o) => o.error);
2305
+ if (failed) {
2306
+ recordFinalizationError(new Error(`callback listener cleanup failed for ${failed.jobId}: ${failed.error}`));
2307
+ }
2308
+ } catch (error) {
2309
+ recordFinalizationError(error);
2310
+ }
2311
+ if (this.contextRecorder) {
2312
+ try {
2313
+ await this.contextRecorder.flush();
2314
+ } catch (error) {
2315
+ recordFinalizationError(error);
2316
+ }
2317
+ }
2318
+ for (const [toolCallId, info] of tracker.flushToolErrorsToResults()) {
2319
+ const result = {
2320
+ type: "error-text",
2321
+ value: `Tool call failed: ${info.message}`
2322
+ };
2323
+ try {
2324
+ bus.emit("tool-result", {
2325
+ toolCallId,
2326
+ toolName: info.toolName,
2327
+ result,
2328
+ sessionId: this.busSessionId,
2329
+ subagentId: sid,
2330
+ partId: ids.toolPartId?.(toolCallId),
2331
+ messageId: ids.messageId
2332
+ });
2333
+ } catch (error) {
2334
+ recordFinalizationError(error);
2335
+ }
2336
+ }
2337
+ if (tracker.hasUnpersistedState()) {
2338
+ const failure = streamError ?? (this.abortSignal?.aborted ? agentAbortReason(this.abortSignal) : undefined);
2339
+ const reason = failure instanceof Error && failure.message ? failure.message : failure !== undefined ? String(failure) : "Stream terminated unexpectedly";
2340
+ try {
2341
+ await this.finalizeInterruptedStep({
2342
+ snapshot: tracker.snapshot(),
2343
+ reason,
2344
+ partIdFor: ids.toolPartId,
2345
+ messageId: ids.messageId
2346
+ });
2347
+ } catch (error) {
2348
+ recordFinalizationError(error);
2349
+ }
2350
+ }
2351
+ } catch (error) {
2352
+ recordFinalizationError(error);
2353
+ } finally {
2354
+ await this.disconnectOwnedBrowser();
2355
+ }
2356
+ return hasFinalizationError ? finalizationError : null;
2357
+ }
2358
+ disposeOwnedShell() {
2359
+ if (this.shellDisposed) {
2360
+ return this.shellDisposeBarrier ?? Promise.resolve();
2361
+ }
2362
+ this.shellDisposed = true;
2363
+ this.shellDisposeBarrier = this.commandShell?.dispose() ?? Promise.resolve();
2364
+ return this.shellDisposeBarrier;
2365
+ }
2366
+ async disconnectOwnedBrowser() {
2367
+ if (this.browserDisconnected)
2368
+ return;
2369
+ if (!this.ownsBrowserSession || !this.browserSession)
2370
+ return;
2371
+ this.browserDisconnected = true;
2372
+ await this.browserSession.disconnect().catch(() => {});
2373
+ }
2374
+ async abortAndDrain() {
2375
+ await this.disconnectOwnedBrowser();
2376
+ await this.disposeOwnedShell().catch(() => {});
2377
+ await this.callbackListeners.stopAll().catch(() => {});
2378
+ await this.drained.catch(() => {});
2379
+ }
2380
+ get response() {
2381
+ return this.streamReady().then(() => this.streamResult.response);
2382
+ }
2383
+ }
2384
+ var AGENT_PAUSE_TOOLS = new Set([ASK_USER_QUESTIONS_TOOL_NAME2]);
2385
+ function wrapToolsWithApprovalGate(tools, gate, exemptToolNames) {
2386
+ const wrapped = {};
2387
+ for (const [name, coreTool] of Object.entries(tools)) {
2388
+ if (exemptToolNames?.has(name)) {
2389
+ wrapped[name] = coreTool;
2390
+ continue;
2391
+ }
2392
+ const t = coreTool;
2393
+ if (!t.execute) {
2394
+ wrapped[name] = coreTool;
2395
+ continue;
2396
+ }
2397
+ const originalExecute = t.execute;
2398
+ wrapped[name] = {
2399
+ ...t,
2400
+ execute: async (args, options) => {
2401
+ const toolCallId = args.toolCallId ?? `tc_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
2402
+ log.debug(`${name} (${toolCallId}): checking`);
2403
+ try {
2404
+ await gate.check(name, String(toolCallId), args);
2405
+ } catch (err) {
2406
+ if (err instanceof ApprovalDeniedError) {
2407
+ log.debug(`${name} (${toolCallId}): denied`);
2408
+ return { blocked: true, reason: "Denied by operator" };
2409
+ }
2410
+ throw err;
2411
+ }
2412
+ log.debug(`${name} (${toolCallId}): approved, executing`);
2413
+ const result = await originalExecute(args, options);
2414
+ log.debug(`${name} (${toolCallId}): execute finished`);
2415
+ return result;
2416
+ }
2417
+ };
2418
+ }
2419
+ return wrapped;
2420
+ }
2421
+ function safePreview(value) {
2422
+ try {
2423
+ const text = JSON.stringify(value);
2424
+ return text === undefined ? String(value) : text.slice(0, 2000);
2425
+ } catch {
2426
+ return "[unserializable result]";
2427
+ }
2428
+ }
2429
+ export { buildProvidedFilesSection2, buildSessionWorkspaceSection2, buildBaseSystemPrompt2, BASE_SYSTEM_PROMPT2, StepTraceWriter2, OffensiveSecurityAgent2, exports_offSecAgent };