pi-agent-browser-native 0.9.3 → 0.9.5

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 (394) hide show
  1. package/CHANGELOG.md +106 -5
  2. package/README.md +58 -791
  3. package/dist/extensions/agent-browser/index.js +43101 -2031
  4. package/dist/extensions/agent-browser/lib/argv-descriptor.js +49 -26
  5. package/dist/extensions/agent-browser/lib/argv-grammar.js +82 -93
  6. package/dist/extensions/agent-browser/lib/bash-guard.js +129 -126
  7. package/dist/extensions/agent-browser/lib/batch-lifecycle.js +112 -51
  8. package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +61 -0
  9. package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +232 -0
  10. package/dist/extensions/agent-browser/lib/browser-execution-claims.js +202 -0
  11. package/dist/extensions/agent-browser/lib/browser-execution-identity.js +77 -0
  12. package/dist/extensions/agent-browser/lib/browser-journal-branch.js +98 -0
  13. package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +1 -0
  14. package/dist/extensions/agent-browser/lib/browser-journal-projection.js +221 -0
  15. package/dist/extensions/agent-browser/lib/browser-journal-reader.js +89 -0
  16. package/dist/extensions/agent-browser/lib/browser-journal-replay.js +246 -0
  17. package/dist/extensions/agent-browser/lib/browser-journal.js +103 -394
  18. package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +220 -0
  19. package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +282 -0
  20. package/dist/extensions/agent-browser/lib/browser-legacy-types.js +1 -0
  21. package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +217 -0
  22. package/dist/extensions/agent-browser/lib/browser-session-conversion.js +80 -335
  23. package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +35 -0
  24. package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +166 -0
  25. package/dist/extensions/agent-browser/lib/browser-transcript.js +137 -82
  26. package/dist/extensions/agent-browser/lib/browser-value-parsing.js +15 -0
  27. package/dist/extensions/agent-browser/lib/command-capabilities.js +340 -0
  28. package/dist/extensions/agent-browser/lib/command-policy.js +107 -88
  29. package/dist/extensions/agent-browser/lib/command-taxonomy.js +49 -322
  30. package/dist/extensions/agent-browser/lib/config-policy.js +138 -343
  31. package/dist/extensions/agent-browser/lib/config-providers.js +71 -0
  32. package/dist/extensions/agent-browser/lib/config-validation.js +231 -0
  33. package/dist/extensions/agent-browser/lib/config.js +20 -8
  34. package/dist/extensions/agent-browser/lib/electron/cdp.js +20 -8
  35. package/dist/extensions/agent-browser/lib/electron/cleanup.js +128 -83
  36. package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +109 -0
  37. package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +136 -0
  38. package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +90 -0
  39. package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +93 -0
  40. package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +162 -0
  41. package/dist/extensions/agent-browser/lib/electron/discovery-types.js +2 -0
  42. package/dist/extensions/agent-browser/lib/electron/discovery.js +140 -549
  43. package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +102 -0
  44. package/dist/extensions/agent-browser/lib/electron/launch-process.js +209 -0
  45. package/dist/extensions/agent-browser/lib/electron/launch-types.js +2 -0
  46. package/dist/extensions/agent-browser/lib/electron/launch.js +261 -355
  47. package/dist/extensions/agent-browser/lib/executable-path.js +21 -12
  48. package/dist/extensions/agent-browser/lib/execution-cwd.js +35 -18
  49. package/dist/extensions/agent-browser/lib/fs-utils.js +1 -9
  50. package/dist/extensions/agent-browser/lib/input-modes/electron.js +162 -121
  51. package/dist/extensions/agent-browser/lib/input-modes/job.js +123 -317
  52. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +116 -0
  53. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +132 -0
  54. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +57 -0
  55. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +151 -0
  56. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +142 -0
  57. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +58 -412
  58. package/dist/extensions/agent-browser/lib/input-modes/params.js +86 -40
  59. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +268 -0
  60. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +117 -0
  61. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +396 -0
  62. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +86 -0
  63. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +1 -0
  64. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +60 -0
  65. package/dist/extensions/agent-browser/lib/input-modes/script.js +60 -409
  66. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +218 -128
  67. package/dist/extensions/agent-browser/lib/input-modes/shared.js +15 -4
  68. package/dist/extensions/agent-browser/lib/input-modes/types.js +56 -7
  69. package/dist/extensions/agent-browser/lib/json-schema.js +22 -10
  70. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +17 -5
  71. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +92 -425
  72. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +58 -0
  73. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +244 -0
  74. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +84 -0
  75. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +119 -0
  76. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +83 -0
  77. package/dist/extensions/agent-browser/lib/managed-session-restore.js +168 -300
  78. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +277 -0
  79. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +128 -305
  80. package/dist/extensions/agent-browser/lib/managed-session-storage.js +56 -253
  81. package/dist/extensions/agent-browser/lib/native-confirmation.js +140 -0
  82. package/dist/extensions/agent-browser/lib/native-output.js +43 -9
  83. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +106 -59
  84. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +14 -6
  85. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +109 -57
  86. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +82 -0
  87. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +164 -60
  88. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +31 -0
  89. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +152 -781
  90. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +203 -0
  91. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +109 -0
  92. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +119 -0
  93. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +147 -0
  94. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +144 -0
  95. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +123 -0
  96. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +1 -0
  97. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +156 -0
  98. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +187 -0
  99. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +39 -0
  100. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +89 -0
  101. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +97 -0
  102. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +106 -0
  103. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +110 -0
  104. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +41 -538
  105. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +199 -154
  106. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +290 -0
  107. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +167 -0
  108. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +108 -0
  109. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +127 -205
  110. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +65 -0
  111. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +1 -0
  112. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +120 -0
  113. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +113 -30
  114. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +109 -28
  115. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +150 -0
  116. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +147 -253
  117. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +147 -0
  118. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +59 -24
  119. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +159 -0
  120. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +131 -0
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +1 -0
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +93 -0
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +42 -0
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +242 -0
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +75 -0
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +92 -0
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +254 -0
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +121 -0
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +130 -0
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +114 -0
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +121 -0
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +222 -0
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +68 -0
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +176 -1123
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +191 -0
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +152 -0
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +182 -0
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +150 -0
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +1 -0
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +1 -0
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +115 -0
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +256 -0
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +1 -0
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +256 -0
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +1 -0
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +93 -0
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +113 -0
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +1 -0
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +316 -0
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +28 -0
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +1 -0
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +142 -0
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +1 -0
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +333 -0
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +1 -0
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +71 -0
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +201 -0
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +183 -0
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +200 -0
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +142 -0
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +18 -968
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +23 -13
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +198 -0
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +1 -0
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +154 -0
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +68 -151
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +14 -0
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +169 -46
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +130 -0
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +212 -0
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +61 -0
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +187 -0
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +169 -0
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +228 -0
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +77 -765
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +182 -0
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +256 -0
  178. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +108 -0
  179. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +39 -0
  180. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +119 -0
  181. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +93 -0
  182. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +58 -0
  183. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +78 -0
  184. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +1 -0
  185. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +106 -0
  186. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +48 -821
  187. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +86 -0
  188. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +68 -0
  189. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +169 -0
  190. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +182 -0
  191. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +161 -0
  192. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +167 -0
  193. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +22 -10
  194. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +211 -0
  195. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +23 -0
  196. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +99 -0
  197. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +275 -0
  198. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +280 -0
  199. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +303 -0
  200. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +36 -0
  201. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +335 -0
  202. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +227 -0
  203. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +1 -0
  204. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +204 -0
  205. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +139 -0
  206. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +24 -0
  207. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +98 -0
  208. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +295 -0
  209. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +41 -0
  210. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +7 -0
  211. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +102 -0
  212. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +133 -0
  213. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +120 -0
  214. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +180 -0
  215. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +290 -0
  216. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +1 -0
  217. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +269 -0
  218. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +113 -0
  219. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +146 -0
  220. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +58 -0
  221. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +62 -0
  222. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +54 -0
  223. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +1 -0
  224. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +261 -185
  225. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +62 -0
  226. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +144 -0
  227. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +77 -0
  228. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +210 -157
  229. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +124 -58
  230. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +197 -99
  231. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +199 -96
  232. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +55 -0
  233. package/dist/extensions/agent-browser/lib/page-target-batch.js +118 -0
  234. package/dist/extensions/agent-browser/lib/page-target-guards.js +50 -0
  235. package/dist/extensions/agent-browser/lib/page-target-navigation.js +104 -0
  236. package/dist/extensions/agent-browser/lib/page-target-validation.js +55 -246
  237. package/dist/extensions/agent-browser/lib/parsing.js +13 -4
  238. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +133 -68
  239. package/dist/extensions/agent-browser/lib/playbook.js +16 -12
  240. package/dist/extensions/agent-browser/lib/process-child.js +284 -0
  241. package/dist/extensions/agent-browser/lib/process-environment.js +13 -6
  242. package/dist/extensions/agent-browser/lib/process-errors.js +23 -0
  243. package/dist/extensions/agent-browser/lib/process-identity.js +47 -15
  244. package/dist/extensions/agent-browser/lib/process-socket-storage.js +256 -0
  245. package/dist/extensions/agent-browser/lib/process-stdout.js +74 -0
  246. package/dist/extensions/agent-browser/lib/process.js +145 -536
  247. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +287 -0
  248. package/dist/extensions/agent-browser/lib/prompt-policy.js +15 -194
  249. package/dist/extensions/agent-browser/lib/read-command.js +41 -0
  250. package/dist/extensions/agent-browser/lib/read-confirmation.js +131 -68
  251. package/dist/extensions/agent-browser/lib/recording-reservations.js +118 -45
  252. package/dist/extensions/agent-browser/lib/redaction-fields.js +75 -0
  253. package/dist/extensions/agent-browser/lib/redaction-json.js +149 -0
  254. package/dist/extensions/agent-browser/lib/redaction-url.js +88 -0
  255. package/dist/extensions/agent-browser/lib/results/action-contracts.js +1 -0
  256. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +28 -271
  257. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +1 -0
  258. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +133 -0
  259. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +96 -94
  260. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +73 -0
  261. package/dist/extensions/agent-browser/lib/results/categories.js +111 -54
  262. package/dist/extensions/agent-browser/lib/results/confirmation.js +29 -13
  263. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +62 -27
  264. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +83 -0
  265. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +48 -0
  266. package/dist/extensions/agent-browser/lib/results/envelope.js +90 -67
  267. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +1 -0
  268. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +180 -0
  269. package/dist/extensions/agent-browser/lib/results/network-routes.js +86 -45
  270. package/dist/extensions/agent-browser/lib/results/network.js +35 -12
  271. package/dist/extensions/agent-browser/lib/results/next-actions.js +49 -19
  272. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +320 -0
  273. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +138 -0
  274. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +113 -0
  275. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +145 -0
  276. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +99 -555
  277. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +1 -0
  278. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +118 -0
  279. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +68 -0
  280. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +135 -0
  281. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +227 -0
  282. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +91 -0
  283. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +91 -460
  284. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +9 -5
  285. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +216 -0
  286. package/dist/extensions/agent-browser/lib/results/presentation/common.js +26 -9
  287. package/dist/extensions/agent-browser/lib/results/presentation/content.js +86 -29
  288. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +67 -0
  289. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +79 -0
  290. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +199 -0
  291. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +75 -0
  292. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +216 -0
  293. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +124 -0
  294. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +64 -0
  295. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +209 -0
  296. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +69 -0
  297. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +222 -0
  298. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +103 -1052
  299. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +70 -0
  300. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +130 -60
  301. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +1 -0
  302. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +60 -145
  303. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +147 -88
  304. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +75 -0
  305. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +1 -0
  306. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +127 -0
  307. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +120 -0
  308. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +77 -0
  309. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +51 -0
  310. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +116 -240
  311. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +35 -21
  312. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +109 -73
  313. package/dist/extensions/agent-browser/lib/results/presentation/source.js +109 -0
  314. package/dist/extensions/agent-browser/lib/results/presentation.js +17 -261
  315. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +1 -0
  316. package/dist/extensions/agent-browser/lib/results/recording.js +52 -14
  317. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +14 -5
  318. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +30 -22
  319. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +83 -0
  320. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +119 -119
  321. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +266 -0
  322. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +32 -0
  323. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +104 -71
  324. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +31 -11
  325. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +125 -66
  326. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +26 -7
  327. package/dist/extensions/agent-browser/lib/results/snapshot.js +28 -248
  328. package/dist/extensions/agent-browser/lib/results/text.js +16 -5
  329. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +133 -0
  330. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +81 -0
  331. package/dist/extensions/agent-browser/lib/runtime-contracts.js +1 -0
  332. package/dist/extensions/agent-browser/lib/runtime-redaction.js +118 -0
  333. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +144 -0
  334. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +76 -0
  335. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +114 -0
  336. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +123 -0
  337. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +65 -0
  338. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +28 -0
  339. package/dist/extensions/agent-browser/lib/runtime.js +137 -1041
  340. package/dist/extensions/agent-browser/lib/session-identity.js +51 -0
  341. package/dist/extensions/agent-browser/lib/session-page-observation.js +357 -0
  342. package/dist/extensions/agent-browser/lib/session-page-state.js +178 -333
  343. package/dist/extensions/agent-browser/lib/session-page-types.js +1 -0
  344. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +81 -0
  345. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +7 -0
  346. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +234 -0
  347. package/dist/extensions/agent-browser/lib/temp-root.js +211 -0
  348. package/dist/extensions/agent-browser/lib/temp.js +33 -446
  349. package/dist/extensions/agent-browser/lib/tool-surface.js +94 -24
  350. package/dist/extensions/agent-browser/lib/upstream-version.js +3 -2
  351. package/dist/extensions/agent-browser/lib/web-search-providers.js +193 -0
  352. package/dist/extensions/agent-browser/lib/web-search-request.js +102 -0
  353. package/dist/extensions/agent-browser/lib/web-search-results.js +281 -0
  354. package/dist/extensions/agent-browser/lib/web-search-schema.js +82 -0
  355. package/dist/extensions/agent-browser/lib/web-search.js +124 -614
  356. package/dist/extensions/agent-browser/lib/webmcp-observation.js +13 -6
  357. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +63 -37
  358. package/dist/extensions/agent-browser/script-worker.js +80 -43
  359. package/dist/scripts/agent-browser-target.mjs +4 -2
  360. package/docs/ARCHITECTURE.md +19 -6
  361. package/docs/CODE_QUALITY.md +267 -0
  362. package/docs/COMMAND_REFERENCE.md +272 -241
  363. package/docs/ELECTRON.md +77 -46
  364. package/docs/REFERENCE.md +869 -0
  365. package/docs/RELEASE.md +25 -22
  366. package/docs/REQUIREMENTS.md +2 -1
  367. package/docs/SUPPORT_MATRIX.md +81 -79
  368. package/docs/TOOL_CONTRACT.md +158 -125
  369. package/docs/platform-smoke.md +8 -8
  370. package/package.json +144 -120
  371. package/scripts/agent-browser-capability-baseline.mjs +361 -957
  372. package/scripts/agent-browser-target.mjs +6 -2
  373. package/scripts/build.mjs +37 -8
  374. package/scripts/capability-core-commands.mjs +193 -0
  375. package/scripts/capability-options.mjs +283 -0
  376. package/scripts/capability-samples.mjs +133 -0
  377. package/scripts/capability-section.mjs +11 -0
  378. package/scripts/config.mjs +235 -132
  379. package/scripts/convert-browser-session.mjs +30 -9
  380. package/scripts/doctor-sources.mjs +195 -0
  381. package/scripts/doctor.mjs +94 -249
  382. package/scripts/platform-smoke/artifacts.mjs +38 -11
  383. package/scripts/platform-smoke/commands.mjs +104 -0
  384. package/scripts/platform-smoke/crabbox-runner.mjs +167 -80
  385. package/scripts/platform-smoke/doctor-support.mjs +157 -0
  386. package/scripts/platform-smoke/doctor-windows.mjs +230 -0
  387. package/scripts/platform-smoke/doctor.mjs +212 -320
  388. package/scripts/platform-smoke/lease-evidence.mjs +132 -0
  389. package/scripts/platform-smoke/linux-image/Dockerfile +8 -2
  390. package/scripts/platform-smoke/suite-checks.mjs +98 -0
  391. package/scripts/platform-smoke/suite-evidence.mjs +281 -0
  392. package/scripts/platform-smoke/targets.mjs +154 -472
  393. package/scripts/platform-smoke.mjs +55 -40
  394. package/scripts/prepare.mjs +16 -7
@@ -0,0 +1,144 @@
1
+ import { readFile, rm } from "node:fs/promises";
2
+ import { isRecord } from "../parsing.js";
3
+ import { isUpstreamEnvFlagEnabled } from "../argv-grammar.js";
4
+ import { runAgentBrowserProcess } from "../process.js";
5
+ import { parseAgentBrowserEnvelope } from "../results/envelope.js";
6
+ // Native local launch defaults must keep their launch-time argument policy stable.
7
+ const VALUE_DEFAULTS = [
8
+ "executablePath",
9
+ "profile",
10
+ "state",
11
+ "proxy",
12
+ "args",
13
+ "userAgent",
14
+ "caCert",
15
+ "colorScheme",
16
+ "downloadPath",
17
+ "engine",
18
+ "allowedDomains",
19
+ ];
20
+ const BOOLEAN_DEFAULTS = ["headed", "allowFileAccess", "webgpu", "noWebmcp"];
21
+ const ARRAY_DEFAULTS = ["extensions", "initScripts", "enable"];
22
+ export function nativeEnvName(key) {
23
+ return `AGENT_BROWSER_${key.replace(/[A-Z]/g, (letter) => `_${letter}`).toUpperCase()}`;
24
+ }
25
+ function nativeBooleanDefault(config, env, key) {
26
+ const value = env[nativeEnvName(key)];
27
+ if (key === "hideScrollbars") {
28
+ return value === undefined ? config[key] === false : !isUpstreamEnvFlagEnabled(value);
29
+ }
30
+ return value === undefined ? config[key] === true : isUpstreamEnvFlagEnabled(value);
31
+ }
32
+ export function hasLocalLaunchDefaults(config, env) {
33
+ return (VALUE_DEFAULTS.some((key) => env[nativeEnvName(key)] !== undefined || config[key] !== undefined) ||
34
+ BOOLEAN_DEFAULTS.some((key) => isUpstreamEnvFlagEnabled(env[nativeEnvName(key)]) || config[key] === true) ||
35
+ ARRAY_DEFAULTS.some((key) => (env[nativeEnvName(key)] ?? "").length > 0 ||
36
+ (Array.isArray(config[key]) && config[key].length > 0)) ||
37
+ nativeBooleanDefault(config, env, "clearCaCert") ||
38
+ nativeBooleanDefault(config, env, "hideScrollbars") ||
39
+ ["HTTP_PROXY", "http_proxy", "HTTPS_PROXY", "https_proxy", "ALL_PROXY", "all_proxy"].some((key) => env[key] !== undefined));
40
+ }
41
+ function localFlag(key) {
42
+ switch (key) {
43
+ case "extensions":
44
+ return "--extension";
45
+ case "initScripts":
46
+ return "--init-script";
47
+ case "clearCaCert":
48
+ return "--no-ca-cert";
49
+ default:
50
+ return `--${key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`;
51
+ }
52
+ }
53
+ export const LOCAL_LAUNCH_DEFAULT_FLAGS = [
54
+ ...VALUE_DEFAULTS,
55
+ ...BOOLEAN_DEFAULTS,
56
+ ...ARRAY_DEFAULTS,
57
+ "hideScrollbars",
58
+ "clearCaCert",
59
+ ].map(localFlag);
60
+ function requestsLaunch(config, options) {
61
+ const browserLaunch = options.browserCommand &&
62
+ (hasLocalLaunchDefaults(config, {}) ||
63
+ ["cdp", "autoConnect", "provider"].some((key) => config[key] !== undefined));
64
+ const rootLaunch = options.rootFallback &&
65
+ ["restore", "sessionName", "state", "allowedDomains", "profile", "executablePath"].some((key) => config[key] !== undefined);
66
+ return browserLaunch || rootLaunch;
67
+ }
68
+ async function readConfigFile(path) {
69
+ try {
70
+ const config = JSON.parse(await readFile(path, "utf8"));
71
+ if (!isRecord(config)) {
72
+ return undefined;
73
+ }
74
+ // Only identity is interpreted here; native validates every launch/config field.
75
+ return {
76
+ ...config,
77
+ session: typeof config.session === "string" ? config.session : undefined,
78
+ namespace: typeof config.namespace === "string" ? config.namespace : undefined,
79
+ };
80
+ }
81
+ catch {
82
+ return undefined;
83
+ }
84
+ }
85
+ function needsIdentityInspection(config, options) {
86
+ return (requestsLaunch(config, options) ||
87
+ config.confirmActions !== undefined ||
88
+ config.session !== undefined ||
89
+ config.namespace !== undefined);
90
+ }
91
+ function resolvedIdentity(config, data) {
92
+ if (!isRecord(data) || typeof data.session !== "string") {
93
+ throw new Error("Native agent-browser session inspection returned no session name; the browser command was not run.");
94
+ }
95
+ const { session: _session, namespace: _namespace, ...defaults } = config;
96
+ return {
97
+ ...defaults,
98
+ ...(config.session !== undefined ? { session: data.session } : {}),
99
+ ...(config.namespace !== undefined ? { namespace: config.namespace } : {}),
100
+ };
101
+ }
102
+ // Native `session` reports resolution, not whether a name was configured.
103
+ async function readNativeIdentity(path, options) {
104
+ const config = await readConfigFile(path);
105
+ if (config === undefined) {
106
+ return {};
107
+ }
108
+ if (!needsIdentityInspection(config, options)) {
109
+ return {};
110
+ }
111
+ const result = await runAgentBrowserProcess({
112
+ args: ["--config", path, "--json", "session"],
113
+ cwd: options.cwd,
114
+ signal: options.signal,
115
+ timeoutMs: 5_000,
116
+ });
117
+ try {
118
+ if (result.aborted || result.timedOut || result.spawnError !== undefined) {
119
+ throw new Error("Could not resolve native agent-browser session configuration; the browser command was not run.");
120
+ }
121
+ if (result.exitCode !== 0) {
122
+ return {};
123
+ } // Discovered invalid files are native-ignored; explicit paths fail on the real command.
124
+ const parsed = await parseAgentBrowserEnvelope({
125
+ stdout: result.stdout,
126
+ stdoutPath: result.stdoutSpillPath,
127
+ });
128
+ return resolvedIdentity(config, parsed.envelope?.data);
129
+ }
130
+ finally {
131
+ if (result.stdoutSpillPath !== undefined && result.stdoutSpillPath.length > 0) {
132
+ await rm(result.stdoutSpillPath, { force: true });
133
+ }
134
+ }
135
+ }
136
+ export async function loadNativeIdentity(paths, options) {
137
+ const identity = {};
138
+ for (const path of paths) {
139
+ // Project defaults override global defaults; native validation must finish in that layer order.
140
+ // oxlint-disable-next-line no-await-in-loop
141
+ Object.assign(identity, await readNativeIdentity(path, options));
142
+ }
143
+ return identity;
144
+ }
@@ -0,0 +1,77 @@
1
+ import { scanUpstreamGlobalFlagOccurrences } from "../argv-grammar.js";
2
+ import { withAgentBrowserProcessEnvironment } from "../process-environment.js";
3
+ import { withChromeStartupArgs } from "../process.js";
4
+ import { buildValidationFailureResult } from "./input-plan.js";
5
+ import { inspectManagedSessionDaemon } from "./browser-run/managed-session-daemon-policy.js";
6
+ import { buildMissingBinaryMessage } from "./browser-run/final-result-missing-binary.js";
7
+ function cliValue(args, flag) {
8
+ return scanUpstreamGlobalFlagOccurrences([...args], flag).at(-1)?.value;
9
+ }
10
+ function bootstrapProfile(policy, bootstrap) {
11
+ const allowed = bootstrap &&
12
+ policy.chromeEngine &&
13
+ policy.restoreEligible &&
14
+ policy.identity.profile === undefined &&
15
+ policy.env.AGENT_BROWSER_PROFILE === undefined;
16
+ return (cliValue(policy.input.toolArgs, "--profile") ?? (allowed ? policy.defaultProfile : undefined));
17
+ }
18
+ function bootstrapExecutable(policy, bootstrap) {
19
+ const allowed = bootstrap &&
20
+ policy.chromeEngine &&
21
+ policy.identity.executablePath === undefined &&
22
+ policy.env.AGENT_BROWSER_EXECUTABLE_PATH === undefined;
23
+ return (cliValue(policy.input.toolArgs, "--executable-path") ??
24
+ (allowed ? policy.defaultExecutable : undefined));
25
+ }
26
+ function rootRestoreKey(policy, status, restoreKey) {
27
+ if (!policy.restoreEligible) {
28
+ return undefined;
29
+ }
30
+ if (status === "active") {
31
+ return restoreKey ?? undefined;
32
+ }
33
+ return status === "inactive" ? policy.rootName : undefined;
34
+ }
35
+ export async function withRootBrowserLaunch(policy, browserRun, signal) {
36
+ const daemon = await inspectManagedSessionDaemon({
37
+ cwd: policy.cwd,
38
+ signal,
39
+ sessionName: policy.rootName,
40
+ namespace: cliValue(policy.input.toolArgs, "--namespace") ?? policy.namespace,
41
+ timeoutMs: 5_000,
42
+ });
43
+ if (daemon.status === "missing-binary") {
44
+ return {
45
+ content: [{ type: "text", text: buildMissingBinaryMessage() }],
46
+ details: {
47
+ agentBrowserStarted: false,
48
+ args: policy.input.redactedArgs,
49
+ sessionName: policy.rootName,
50
+ resultCategory: "failure",
51
+ failureCategory: "missing-binary",
52
+ },
53
+ isError: true,
54
+ };
55
+ }
56
+ if (policy.input.kind === "qa" &&
57
+ policy.input.compiledQaPreset.checks.attached &&
58
+ daemon.status !== "active") {
59
+ return buildValidationFailureResult({
60
+ ...policy.input,
61
+ attemptedKind: "qa",
62
+ kind: "invalid",
63
+ status: "invalid",
64
+ validationError: "qa.attached requires an active attached session. Open the root browser first, or select an existing native session.",
65
+ });
66
+ }
67
+ // Active native daemons own their launch choices; defaults may only bootstrap or preserve explicit local options.
68
+ const bootstrap = daemon.status === "inactive";
69
+ const restore = rootRestoreKey(policy, daemon.status, daemon.status === "active" ? daemon.restoreKey : undefined);
70
+ const profile = bootstrapProfile(policy, bootstrap);
71
+ const executablePath = bootstrapExecutable(policy, bootstrap);
72
+ return withAgentBrowserProcessEnvironment({
73
+ ...(restore !== undefined ? { AGENT_BROWSER_RESTORE: restore } : {}),
74
+ ...(profile !== undefined ? { AGENT_BROWSER_PROFILE: profile } : {}),
75
+ ...(executablePath !== undefined ? { AGENT_BROWSER_EXECUTABLE_PATH: executablePath } : {}),
76
+ }, () => withChromeStartupArgs(bootstrap || policy.configuredChromeLaunch ? policy.chromeStartupArgs : undefined, () => browserRun(bootstrap)));
77
+ }
@@ -1,178 +1,231 @@
1
1
  import { createHash } from "node:crypto";
2
- import { readFile, rm } from "node:fs/promises";
3
2
  import { homedir } from "node:os";
4
3
  import { join, resolve } from "node:path";
5
- import { extractExplicitSessionName, getBooleanFlagValue, isUpstreamEnvFlagEnabled, scanUpstreamGlobalFlagOccurrences } from "../argv-grammar.js";
6
- import { isRecord } from "../parsing.js";
4
+ import { extractExplicitSessionName, getBooleanFlagValue, isUpstreamEnvFlagEnabled, scanUpstreamGlobalFlagOccurrences, } from "../argv-grammar.js";
7
5
  import { parseArgvDescriptor } from "../argv-descriptor.js";
8
6
  import { needsManagedSession } from "../command-policy.js";
9
7
  import { getUpstreamEffectiveBatchSteps } from "./batch-stdin.js";
10
8
  import { hasLaunchScopedFlagToken } from "../launch-scoped-flags.js";
11
- import { getAgentBrowserProcessEnvironment, withAgentBrowserProcessEnvironment } from "../process-environment.js";
12
- import { runAgentBrowserProcess, withChromeStartupArgs } from "../process.js";
13
- import { parseAgentBrowserEnvelope } from "../results/envelope.js";
9
+ import { getAgentBrowserProcessEnvironment, withAgentBrowserProcessEnvironment, } from "../process-environment.js";
14
10
  import { isPlainTextInspectionArgs } from "../runtime.js";
15
- import { buildValidationFailureResult } from "./input-plan.js";
16
- import { inspectManagedSessionDaemon } from "./browser-run/managed-session-daemon-policy.js";
17
- import { buildMissingBinaryMessage } from "./browser-run/final-result.js";
18
- // These native defaults already send a local launch command on every call; keep its args stable too.
19
- const LOCAL_VALUE_DEFAULTS = ["executablePath", "profile", "state", "proxy", "args", "userAgent", "caCert", "colorScheme", "downloadPath", "engine", "allowedDomains"];
20
- const LOCAL_BOOLEAN_DEFAULTS = ["headed", "allowFileAccess", "webgpu", "noWebmcp"];
21
- const LOCAL_ARRAY_DEFAULTS = ["extensions", "initScripts", "enable"];
22
- const nativeEnvName = (key) => `AGENT_BROWSER_${key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase()}`;
23
- function hasLocalLaunchDefaults(config, env) {
24
- return LOCAL_VALUE_DEFAULTS.some(key => env[nativeEnvName(key)] !== undefined || config[key] !== undefined)
25
- || LOCAL_BOOLEAN_DEFAULTS.some(key => isUpstreamEnvFlagEnabled(env[nativeEnvName(key)]) || config[key] === true)
26
- || LOCAL_ARRAY_DEFAULTS.some(key => (env[nativeEnvName(key)]?.length ?? 0) > 0 || Array.isArray(config[key]) && config[key].length > 0)
27
- || (env.AGENT_BROWSER_CLEAR_CA_CERT !== undefined ? isUpstreamEnvFlagEnabled(env.AGENT_BROWSER_CLEAR_CA_CERT) : config.clearCaCert === true)
28
- || (env.AGENT_BROWSER_HIDE_SCROLLBARS !== undefined ? !isUpstreamEnvFlagEnabled(env.AGENT_BROWSER_HIDE_SCROLLBARS) : config.hideScrollbars === false)
29
- || ["HTTP_PROXY", "http_proxy", "HTTPS_PROXY", "https_proxy", "ALL_PROXY", "all_proxy"].some(key => env[key] !== undefined);
11
+ import { hasLocalLaunchDefaults, loadNativeIdentity, LOCAL_LAUNCH_DEFAULT_FLAGS, } from "./native-config.js";
12
+ import { withRootBrowserLaunch } from "./native-root-launch.js";
13
+ function cliValue(args, flag) {
14
+ return scanUpstreamGlobalFlagOccurrences([...args], flag).at(-1)?.value;
30
15
  }
31
16
  function requestsConnection(tokens, stdin) {
32
- return tokens[0] === "connect" || getUpstreamEffectiveBatchSteps(tokens, stdin).some(step => requestsConnection(step));
17
+ return (tokens[0] === "connect" ||
18
+ getUpstreamEffectiveBatchSteps(tokens, stdin).some((step) => requestsConnection(step)));
33
19
  }
34
20
  function rootBrowserSessionName(rootSessionId) {
35
21
  return `pi-root-${createHash("sha256").update(rootSessionId).digest("hex").slice(0, 24)}`;
36
22
  }
37
- // Native `session` reports the resolved name, but not whether it was configured.
38
- // Native validates its schema; retain configured launch defaults so root fallbacks never replace them.
39
- async function readNativeIdentity(path, cwd, signal, rootFallback, browserCommand) {
40
- let config;
41
- try {
42
- config = JSON.parse(await readFile(path, "utf8"));
43
- }
44
- catch {
45
- return {};
46
- }
47
- if (!isRecord(config))
48
- return {};
49
- const rootLaunchConfig = browserCommand && (hasLocalLaunchDefaults(config, {}) || ["cdp", "autoConnect", "provider"].some((key) => config[key] !== undefined))
50
- || rootFallback && ["restore", "sessionName", "state", "allowedDomains", "profile", "executablePath"].some((key) => config[key] !== undefined);
51
- if (!rootLaunchConfig && config.confirmActions === undefined && typeof config.session !== "string" && typeof config.namespace !== "string")
52
- return {};
53
- const result = await runAgentBrowserProcess({ args: ["--config", path, "--json", "session"], cwd, signal, timeoutMs: 5_000 });
54
- try {
55
- if (result.aborted || result.timedOut || result.spawnError)
56
- throw new Error("Could not resolve native agent-browser session configuration; the browser command was not run.");
57
- if (result.exitCode !== 0)
58
- return {}; // Native ignores invalid discovered files; explicit files fail again in the actual command.
59
- const parsed = await parseAgentBrowserEnvelope({ stdout: result.stdout, stdoutPath: result.stdoutSpillPath });
60
- const data = parsed.envelope?.data;
61
- if (!isRecord(data) || typeof data.session !== "string")
62
- throw new Error("Native agent-browser session inspection returned no session name; the browser command was not run.");
63
- const { session: _session, namespace: _namespace, ...defaults } = config;
23
+ function nativeBooleanOverrides(args) {
24
+ const overrides = [];
25
+ for (const flag of ["--debug", "--no-auto-dialog"]) {
26
+ const value = getBooleanFlagValue([...args], flag);
27
+ if (value !== undefined) {
28
+ overrides.push([flag, String(value)]);
29
+ }
30
+ }
31
+ return overrides;
32
+ }
33
+ /** Owns one native config resolution and pure adaptation, never browser/auth authority. */
34
+ class NativeSessionCall {
35
+ input;
36
+ context;
37
+ runner;
38
+ env = getAgentBrowserProcessEnvironment();
39
+ configPath;
40
+ configPaths;
41
+ rootName;
42
+ browserCommand;
43
+ rootFallback;
44
+ identity = {};
45
+ constructor(input, context, runner) {
46
+ this.input = input;
47
+ this.context = context;
48
+ this.runner = runner;
49
+ const configArg = scanUpstreamGlobalFlagOccurrences([...input.toolArgs], "--config").at(0);
50
+ this.configPath = configArg?.value ?? this.env.AGENT_BROWSER_CONFIG;
51
+ this.configPaths =
52
+ this.configPath !== undefined
53
+ ? [resolve(context.cwd, this.configPath)]
54
+ : [
55
+ join(homedir(), ".agent-browser", "config.json"),
56
+ join(context.cwd, "agent-browser.json"),
57
+ ];
58
+ this.rootName =
59
+ context.root === undefined ? undefined : rootBrowserSessionName(context.root.id);
60
+ this.browserCommand =
61
+ input.kind !== "electron" &&
62
+ needsManagedSession(parseArgvDescriptor([...input.toolArgs]), input.toolStdin);
63
+ const session = extractExplicitSessionName([...input.toolArgs]);
64
+ this.rootFallback =
65
+ context.root !== undefined &&
66
+ this.env.AGENT_BROWSER_SESSION === undefined &&
67
+ (session === undefined || session === this.rootName) &&
68
+ this.browserCommand;
69
+ }
70
+ attachment() {
71
+ const autoConnect = getBooleanFlagValue([...this.input.toolArgs], "--auto-connect") ??
72
+ (isUpstreamEnvFlagEnabled(this.env.AGENT_BROWSER_AUTO_CONNECT) ||
73
+ this.identity.autoConnect === true);
74
+ return (hasLaunchScopedFlagToken([...this.input.toolArgs], "--cdp") ||
75
+ this.env.AGENT_BROWSER_CDP !== undefined ||
76
+ this.identity.cdp !== undefined ||
77
+ autoConnect ||
78
+ parseArgvDescriptor([...this.input.toolArgs]).upstreamCommandTokens[0] === "connect");
79
+ }
80
+ restoreEligible() {
81
+ return (![
82
+ "--restore",
83
+ "--session-name",
84
+ "--state",
85
+ "--allowed-domains",
86
+ "--provider",
87
+ "-p",
88
+ "--device",
89
+ ].some((flag) => hasLaunchScopedFlagToken([...this.input.toolArgs], flag)) &&
90
+ !["restore", "sessionName", "state", "allowedDomains", "provider"].some((key) => this.identity[key] !== undefined) &&
91
+ ![
92
+ "AGENT_BROWSER_RESTORE",
93
+ "AGENT_BROWSER_SESSION_NAME",
94
+ "AGENT_BROWSER_STATE",
95
+ "AGENT_BROWSER_ALLOWED_DOMAINS",
96
+ "AGENT_BROWSER_PROVIDER",
97
+ ].some((key) => this.env[key] !== undefined));
98
+ }
99
+ chromeLaunch() {
100
+ const args = this.input.toolArgs;
101
+ const engine = cliValue(args, "--engine") ?? this.env.AGENT_BROWSER_ENGINE ?? this.identity.engine;
102
+ const chromeEngine = engine === undefined || engine === "chrome";
103
+ const nativeLaunchDefaults = hasLocalLaunchDefaults(this.identity, this.env);
104
+ // Native config/env can submit launch options on local commands too. Leave their args
105
+ // unchanged so browser calls and sessionless helpers do not reconfigure the same daemon.
106
+ const chromeStartupArgs = nativeLaunchDefaults
107
+ ? undefined
108
+ : this.chromeStartupArgs(chromeEngine);
109
+ const configuredChromeLaunch = nativeLaunchDefaults ||
110
+ LOCAL_LAUNCH_DEFAULT_FLAGS.some((flag) => scanUpstreamGlobalFlagOccurrences([...args], flag).length > 0);
111
+ return { chromeEngine, chromeStartupArgs, configuredChromeLaunch };
112
+ }
113
+ chromeStartupArgs(chromeEngine) {
114
+ if (!this.localChrome(chromeEngine)) {
115
+ return undefined;
116
+ }
117
+ const launchArgs = cliValue(this.input.toolArgs, "--args") ?? this.env.AGENT_BROWSER_ARGS ?? this.identity.args;
118
+ return ["--no-startup-window", ...(typeof launchArgs === "string" ? [launchArgs] : [])].join(",");
119
+ }
120
+ localChrome(chromeEngine) {
121
+ const args = this.input.toolArgs;
122
+ const provider = cliValue(args, "--provider") ??
123
+ cliValue(args, "-p") ??
124
+ this.env.AGENT_BROWSER_PROVIDER ??
125
+ this.identity.provider;
126
+ const batchAttaches = requestsConnection(parseArgvDescriptor([...args]).upstreamCommandTokens, this.input.toolStdin);
127
+ return (this.browserCommand &&
128
+ !this.attachment() &&
129
+ !batchAttaches &&
130
+ provider === undefined &&
131
+ chromeEngine);
132
+ }
133
+ confirmationActions(args) {
134
+ return (cliValue(args, "--confirm-actions") ??
135
+ this.env.AGENT_BROWSER_CONFIRM_ACTIONS ??
136
+ (typeof this.identity.confirmActions === "string" ? this.identity.confirmActions : undefined));
137
+ }
138
+ configEnvironment() {
139
+ return this.configPath === undefined
140
+ ? {}
141
+ : { AGENT_BROWSER_CONFIG: resolve(this.context.cwd, this.configPath) };
142
+ }
143
+ executionEnvironment(args, session, namespace) {
144
+ const idle = cliValue(args, "--idle-timeout");
145
+ const actionPolicy = cliValue(args, "--action-policy");
146
+ const confirm = cliValue(args, "--confirm-actions");
147
+ return {
148
+ ...(idle !== undefined ? { AGENT_BROWSER_IDLE_TIMEOUT_MS: idle } : {}),
149
+ ...(actionPolicy !== undefined ? { AGENT_BROWSER_ACTION_POLICY: actionPolicy } : {}),
150
+ ...(confirm !== undefined ? { AGENT_BROWSER_CONFIRM_ACTIONS: confirm } : {}),
151
+ ...this.booleanEnvironment(args),
152
+ ...this.configEnvironment(),
153
+ ...(session !== undefined ? { AGENT_BROWSER_SESSION: session } : {}),
154
+ ...(namespace !== undefined ? { AGENT_BROWSER_NAMESPACE: namespace } : {}),
155
+ };
156
+ }
157
+ booleanEnvironment(args) {
158
+ const debug = getBooleanFlagValue([...args], "--debug");
159
+ const noAutoDialog = getBooleanFlagValue([...args], "--no-auto-dialog");
64
160
  return {
65
- ...defaults,
66
- ...(typeof config.session === "string" ? { session: data.session } : {}),
67
- ...(typeof config.namespace === "string" ? { namespace: config.namespace } : {}),
161
+ ...(debug !== undefined ? { AGENT_BROWSER_DEBUG: debug ? "1" : undefined } : {}),
162
+ ...(noAutoDialog !== undefined
163
+ ? { AGENT_BROWSER_NO_AUTO_DIALOG: noAutoDialog ? "1" : "0" }
164
+ : {}),
68
165
  };
69
166
  }
70
- finally {
71
- if (result.stdoutSpillPath)
72
- await rm(result.stdoutSpillPath, { force: true });
167
+ runElectron() {
168
+ const nativeConfirmActions = this.env.AGENT_BROWSER_CONFIRM_ACTIONS ??
169
+ (typeof this.identity.confirmActions === "string" ? this.identity.confirmActions : undefined);
170
+ const launch = this.input.kind === "electron" && this.input.compiledElectron.action === "launch";
171
+ return withAgentBrowserProcessEnvironment({ ...(launch ? { AGENT_BROWSER_SESSION: undefined } : {}), ...this.configEnvironment() }, () => this.runner({ ...this.input, nativeConfirmActions }));
172
+ }
173
+ rootDefaultSession(configuredSession) {
174
+ return this.rootName !== undefined &&
175
+ configuredSession === undefined &&
176
+ this.rootFallback &&
177
+ !this.attachment()
178
+ ? this.rootName
179
+ : undefined;
180
+ }
181
+ runBrowser() {
182
+ const configuredSession = this.env.AGENT_BROWSER_SESSION ?? this.identity.session;
183
+ const rootDefault = this.rootDefaultSession(configuredSession);
184
+ const session = configuredSession ?? rootDefault;
185
+ const namespace = this.env.AGENT_BROWSER_NAMESPACE ?? this.identity.namespace;
186
+ const args = session !== undefined && extractExplicitSessionName([...this.input.toolArgs]) === undefined
187
+ ? ["--session", session, ...this.input.toolArgs]
188
+ : this.input.toolArgs;
189
+ const launch = this.chromeLaunch();
190
+ const input = {
191
+ ...this.input,
192
+ toolArgs: args,
193
+ nativeConfirmActions: this.confirmationActions(args),
194
+ chromeStartupArgs: launch.chromeStartupArgs,
195
+ configuredChromeLaunch: launch.configuredChromeLaunch,
196
+ };
197
+ const defaults = rootDefault === undefined
198
+ ? undefined
199
+ : this.rootLaunchRunner({
200
+ ...launch,
201
+ cwd: this.context.cwd,
202
+ rootName: rootDefault,
203
+ namespace,
204
+ input,
205
+ env: this.env,
206
+ identity: this.identity,
207
+ restoreEligible: this.restoreEligible(),
208
+ defaultProfile: this.context.root?.profile,
209
+ defaultExecutable: this.context.root?.executablePath,
210
+ });
211
+ return withAgentBrowserProcessEnvironment(this.executionEnvironment(args, session, namespace), () => this.runner(input, defaults), nativeBooleanOverrides(args));
212
+ }
213
+ rootLaunchRunner(policy) {
214
+ return (browserRun, signal = this.context.signal) => withRootBrowserLaunch(policy, browserRun, signal);
215
+ }
216
+ async run() {
217
+ this.identity = await loadNativeIdentity(this.configPaths, {
218
+ cwd: this.context.cwd,
219
+ signal: this.context.signal,
220
+ rootFallback: this.rootFallback,
221
+ browserCommand: this.browserCommand,
222
+ });
223
+ return this.input.kind === "electron" ? this.runElectron() : this.runBrowser();
73
224
  }
74
225
  }
75
- export async function withNativeSessionDefaults(input, cwd, signal, run, root) {
76
- if (isPlainTextInspectionArgs(input.toolArgs))
226
+ export async function withNativeSessionDefaults(input, context, run) {
227
+ if (isPlainTextInspectionArgs([...input.toolArgs])) {
77
228
  return run(input);
78
- const env = getAgentBrowserProcessEnvironment();
79
- const configArg = scanUpstreamGlobalFlagOccurrences(input.toolArgs, "--config")[0];
80
- const configPath = configArg?.value ?? env.AGENT_BROWSER_CONFIG;
81
- const paths = configPath !== undefined
82
- ? [resolve(cwd, configPath)]
83
- : [join(homedir(), ".agent-browser", "config.json"), join(cwd, "agent-browser.json")];
84
- const rootName = root && rootBrowserSessionName(root.id);
85
- const explicitSession = extractExplicitSessionName(input.toolArgs);
86
- const browserCommand = input.kind !== "electron" && needsManagedSession(parseArgvDescriptor(input.toolArgs), input.toolStdin);
87
- const rootFallback = root !== undefined && env.AGENT_BROWSER_SESSION === undefined && (explicitSession === undefined || explicitSession === rootName)
88
- && browserCommand;
89
- let identity = {};
90
- for (const path of paths)
91
- identity = { ...identity, ...await readNativeIdentity(path, cwd, signal, rootFallback, browserCommand) };
92
- if (input.kind === "electron") {
93
- const nativeConfirmActions = env.AGENT_BROWSER_CONFIRM_ACTIONS ?? (typeof identity.confirmActions === "string" ? identity.confirmActions : undefined);
94
- return withAgentBrowserProcessEnvironment({
95
- ...(input.compiledElectron.action === "launch" ? { AGENT_BROWSER_SESSION: undefined } : {}),
96
- ...(configPath !== undefined ? { AGENT_BROWSER_CONFIG: resolve(cwd, configPath) } : {}),
97
- }, () => run({ ...input, nativeConfirmActions }));
98
- }
99
- // Native ORs environment/config booleans; only CLI false overrides configured auto-connect.
100
- const autoConnect = getBooleanFlagValue(input.toolArgs, "--auto-connect")
101
- ?? (isUpstreamEnvFlagEnabled(env.AGENT_BROWSER_AUTO_CONNECT) || identity.autoConnect === true);
102
- const attachment = hasLaunchScopedFlagToken(input.toolArgs, "--cdp")
103
- || env.AGENT_BROWSER_CDP !== undefined || identity.cdp !== undefined || autoConnect
104
- || parseArgvDescriptor(input.toolArgs).upstreamCommandTokens[0] === "connect";
105
- const configuredSession = env.AGENT_BROWSER_SESSION ?? identity.session;
106
- const launchArgs = scanUpstreamGlobalFlagOccurrences(input.toolArgs, "--args").at(-1)?.value ?? env.AGENT_BROWSER_ARGS ?? identity.args;
107
- const engine = scanUpstreamGlobalFlagOccurrences(input.toolArgs, "--engine").at(-1)?.value ?? env.AGENT_BROWSER_ENGINE ?? identity.engine;
108
- const chromeEngine = engine === undefined || engine === "chrome";
109
- const provider = scanUpstreamGlobalFlagOccurrences(input.toolArgs, "--provider").at(-1)?.value ?? scanUpstreamGlobalFlagOccurrences(input.toolArgs, "-p").at(-1)?.value ?? env.AGENT_BROWSER_PROVIDER ?? identity.provider;
110
- const tokens = parseArgvDescriptor(input.toolArgs).upstreamCommandTokens;
111
- const batchAttaches = requestsConnection(tokens, input.toolStdin);
112
- const localChrome = browserCommand && !attachment && !batchAttaches && provider === undefined
113
- && chromeEngine;
114
- const chromeStartupArgs = localChrome ? ["--no-startup-window", ...(typeof launchArgs === "string" ? [launchArgs] : [])].join(",") : undefined;
115
- const persistentChromeArgs = hasLocalLaunchDefaults(identity, env) ? chromeStartupArgs : undefined;
116
- const configuredChromeLaunch = persistentChromeArgs !== undefined || [...LOCAL_VALUE_DEFAULTS, ...LOCAL_BOOLEAN_DEFAULTS, ...LOCAL_ARRAY_DEFAULTS, "hideScrollbars", "clearCaCert"].some(key => {
117
- const flag = { extensions: "--extension", initScripts: "--init-script", clearCaCert: "--no-ca-cert" }[key] ?? `--${key.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`)}`;
118
- return scanUpstreamGlobalFlagOccurrences(input.toolArgs, flag).length > 0;
119
- });
120
- const rootDefault = rootName && configuredSession === undefined && rootFallback && !attachment
121
- ? rootName : undefined;
122
- const session = configuredSession ?? rootDefault;
123
- const restoreEligible = !["--restore", "--session-name", "--state", "--allowed-domains", "--provider", "-p", "--device"].some((flag) => hasLaunchScopedFlagToken(input.toolArgs, flag))
124
- && !["restore", "sessionName", "state", "allowedDomains", "provider"].some((key) => identity[key] !== undefined)
125
- && !["AGENT_BROWSER_RESTORE", "AGENT_BROWSER_SESSION_NAME", "AGENT_BROWSER_STATE", "AGENT_BROWSER_ALLOWED_DOMAINS", "AGENT_BROWSER_PROVIDER"].some((key) => env[key] !== undefined);
126
- const namespace = env.AGENT_BROWSER_NAMESPACE ?? identity.namespace;
127
- let args = input.toolArgs;
128
- if (session !== undefined && extractExplicitSessionName(args) === undefined)
129
- args = ["--session", session, ...args];
130
- const idleTimeout = scanUpstreamGlobalFlagOccurrences(args, "--idle-timeout").at(-1)?.value;
131
- const actionPolicy = scanUpstreamGlobalFlagOccurrences(args, "--action-policy").at(-1)?.value;
132
- const confirmActions = scanUpstreamGlobalFlagOccurrences(args, "--confirm-actions").at(-1)?.value;
133
- const nativeConfirmActions = confirmActions ?? env.AGENT_BROWSER_CONFIRM_ACTIONS
134
- ?? (typeof identity.confirmActions === "string" ? identity.confirmActions : undefined);
135
- const debug = getBooleanFlagValue(args, "--debug");
136
- const noAutoDialog = getBooleanFlagValue(args, "--no-auto-dialog");
137
- return withAgentBrowserProcessEnvironment({
138
- ...(idleTimeout !== undefined ? { AGENT_BROWSER_IDLE_TIMEOUT_MS: idleTimeout } : {}),
139
- ...(actionPolicy !== undefined ? { AGENT_BROWSER_ACTION_POLICY: actionPolicy } : {}),
140
- ...(confirmActions !== undefined ? { AGENT_BROWSER_CONFIRM_ACTIONS: confirmActions } : {}),
141
- ...(debug !== undefined ? { AGENT_BROWSER_DEBUG: debug ? "1" : undefined } : {}),
142
- ...(noAutoDialog !== undefined ? { AGENT_BROWSER_NO_AUTO_DIALOG: noAutoDialog ? "1" : "0" } : {}),
143
- ...(configPath !== undefined ? { AGENT_BROWSER_CONFIG: resolve(cwd, configPath) } : {}),
144
- ...(session !== undefined ? { AGENT_BROWSER_SESSION: session } : {}),
145
- ...(namespace !== undefined ? { AGENT_BROWSER_NAMESPACE: namespace } : {}),
146
- }, () => run({ ...input, toolArgs: args, nativeConfirmActions, chromeStartupArgs, persistentChromeArgs, configuredChromeLaunch }, !rootDefault ? undefined : async (browserRun, launchSignal = signal) => {
147
- const daemon = await inspectManagedSessionDaemon({ cwd, signal: launchSignal, sessionName: rootDefault,
148
- namespace: scanUpstreamGlobalFlagOccurrences(args, "--namespace").at(-1)?.value ?? namespace, timeoutMs: 5_000 });
149
- if (daemon.status === "missing-binary")
150
- return {
151
- content: [{ type: "text", text: buildMissingBinaryMessage() }],
152
- details: { agentBrowserStarted: false, args: input.redactedArgs, sessionName: rootDefault, resultCategory: "failure", failureCategory: "missing-binary" },
153
- isError: true,
154
- };
155
- if (input.kind === "qa" && input.compiledQaPreset.checks.attached && daemon.status !== "active") {
156
- return buildValidationFailureResult({ ...input, attemptedKind: "qa", kind: "invalid", status: "invalid", validationError: "qa.attached requires an active attached session. Open the root browser first, or select an existing native session." });
157
- }
158
- // An active daemon already owns its launch settings. Re-sending defaults can replace an explicitly profiled browser.
159
- const bootstrap = daemon.status === "inactive";
160
- let restore;
161
- if (restoreEligible && daemon.status === "active")
162
- restore = daemon.restoreKey ?? undefined;
163
- if (restoreEligible && bootstrap)
164
- restore = rootDefault;
165
- const profile = scanUpstreamGlobalFlagOccurrences(args, "--profile").at(-1)?.value
166
- ?? (bootstrap && chromeEngine && restoreEligible && identity.profile === undefined && env.AGENT_BROWSER_PROFILE === undefined ? root?.profile : undefined);
167
- const executablePath = scanUpstreamGlobalFlagOccurrences(args, "--executable-path").at(-1)?.value
168
- ?? (bootstrap && chromeEngine && identity.executablePath === undefined && env.AGENT_BROWSER_EXECUTABLE_PATH === undefined ? root?.executablePath : undefined);
169
- return withAgentBrowserProcessEnvironment({
170
- ...(restore !== undefined ? { AGENT_BROWSER_RESTORE: restore } : {}),
171
- ...(profile !== undefined ? { AGENT_BROWSER_PROFILE: profile } : {}),
172
- ...(executablePath !== undefined ? { AGENT_BROWSER_EXECUTABLE_PATH: executablePath } : {}),
173
- }, () => withChromeStartupArgs(bootstrap || configuredChromeLaunch ? chromeStartupArgs : undefined, () => browserRun(bootstrap)));
174
- }), [
175
- ...(debug !== undefined ? [["--debug", String(debug)]] : []),
176
- ...(noAutoDialog !== undefined ? [["--no-auto-dialog", String(noAutoDialog)]] : []),
177
- ]); // Native ORs env/config booleans; helpers need CLI false to override true config.
229
+ }
230
+ return new NativeSessionCall(input, context, run).run();
178
231
  }