pi-agent-browser-native 0.9.2 → 0.9.4

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 (392) hide show
  1. package/CHANGELOG.md +91 -5
  2. package/README.md +120 -86
  3. package/dist/extensions/agent-browser/index.js +43065 -2016
  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 +113 -49
  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 -81
  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 +218 -0
  33. package/dist/extensions/agent-browser/lib/config.js +19 -7
  34. package/dist/extensions/agent-browser/lib/electron/cdp.js +15 -7
  35. package/dist/extensions/agent-browser/lib/electron/cleanup.js +134 -55
  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 +89 -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 +249 -354
  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/input-modes/electron.js +162 -121
  50. package/dist/extensions/agent-browser/lib/input-modes/job.js +116 -313
  51. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +104 -0
  52. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +132 -0
  53. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +57 -0
  54. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +151 -0
  55. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +142 -0
  56. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +57 -412
  57. package/dist/extensions/agent-browser/lib/input-modes/params.js +63 -17
  58. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +268 -0
  59. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +117 -0
  60. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +396 -0
  61. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +86 -0
  62. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +1 -0
  63. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +60 -0
  64. package/dist/extensions/agent-browser/lib/input-modes/script.js +60 -409
  65. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +218 -128
  66. package/dist/extensions/agent-browser/lib/input-modes/shared.js +15 -4
  67. package/dist/extensions/agent-browser/lib/input-modes/types.js +56 -7
  68. package/dist/extensions/agent-browser/lib/json-schema.js +22 -10
  69. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +17 -5
  70. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +92 -425
  71. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +58 -0
  72. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +244 -0
  73. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +84 -0
  74. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +119 -0
  75. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +83 -0
  76. package/dist/extensions/agent-browser/lib/managed-session-restore.js +168 -300
  77. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +277 -0
  78. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +128 -305
  79. package/dist/extensions/agent-browser/lib/managed-session-storage.js +56 -253
  80. package/dist/extensions/agent-browser/lib/native-confirmation.js +140 -0
  81. package/dist/extensions/agent-browser/lib/native-output.js +44 -9
  82. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +107 -66
  83. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +14 -6
  84. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +109 -57
  85. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +82 -0
  86. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +171 -57
  87. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +31 -0
  88. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +152 -781
  89. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +202 -0
  90. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +109 -0
  91. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +119 -0
  92. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +147 -0
  93. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +144 -0
  94. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +123 -0
  95. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +1 -0
  96. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +156 -0
  97. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +179 -0
  98. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +39 -0
  99. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +89 -0
  100. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +97 -0
  101. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +106 -0
  102. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +110 -0
  103. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +41 -538
  104. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +204 -108
  105. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +290 -0
  106. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +167 -0
  107. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +108 -0
  108. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +127 -199
  109. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +65 -0
  110. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +1 -0
  111. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +120 -0
  112. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +113 -30
  113. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +109 -28
  114. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +150 -0
  115. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +138 -253
  116. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +147 -0
  117. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +59 -24
  118. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +159 -0
  119. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +131 -0
  120. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +1 -0
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +93 -0
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +42 -0
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +242 -0
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +75 -0
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +92 -0
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +254 -0
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +121 -0
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +130 -0
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +114 -0
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +121 -0
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +222 -0
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +68 -0
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +176 -1114
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +191 -0
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +152 -0
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +182 -0
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +150 -0
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +1 -0
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +1 -0
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +115 -0
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +256 -0
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +1 -0
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +256 -0
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +1 -0
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +93 -0
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +113 -0
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +1 -0
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +316 -0
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +28 -0
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +1 -0
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +142 -0
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +1 -0
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +333 -0
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +1 -0
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +71 -0
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +201 -0
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +183 -0
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +200 -0
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +142 -0
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +18 -910
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +23 -13
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +198 -0
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +1 -0
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +154 -0
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +68 -151
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +14 -0
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +169 -46
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +130 -0
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +210 -0
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +61 -0
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +187 -0
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +171 -0
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +228 -0
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +77 -753
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +182 -0
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +256 -0
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +108 -0
  178. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +39 -0
  179. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +119 -0
  180. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +92 -0
  181. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +58 -0
  182. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +78 -0
  183. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +1 -0
  184. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +106 -0
  185. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +48 -816
  186. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +86 -0
  187. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +69 -0
  188. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +167 -0
  189. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +164 -0
  190. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +161 -0
  191. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +165 -0
  192. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +21 -9
  193. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +211 -0
  194. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +23 -0
  195. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +99 -0
  196. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +275 -0
  197. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +280 -0
  198. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +303 -0
  199. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +36 -0
  200. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +335 -0
  201. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +227 -0
  202. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +1 -0
  203. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +204 -0
  204. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +139 -0
  205. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +24 -0
  206. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +98 -0
  207. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +295 -0
  208. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +41 -0
  209. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +7 -0
  210. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +102 -0
  211. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +133 -0
  212. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +120 -0
  213. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +180 -0
  214. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +290 -0
  215. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +1 -0
  216. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +269 -0
  217. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +113 -0
  218. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +146 -0
  219. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +58 -0
  220. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +62 -0
  221. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +54 -0
  222. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +1 -0
  223. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +261 -185
  224. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +62 -0
  225. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +144 -0
  226. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +77 -0
  227. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +210 -139
  228. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +124 -58
  229. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +198 -98
  230. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +199 -96
  231. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +55 -0
  232. package/dist/extensions/agent-browser/lib/page-target-batch.js +118 -0
  233. package/dist/extensions/agent-browser/lib/page-target-guards.js +50 -0
  234. package/dist/extensions/agent-browser/lib/page-target-navigation.js +104 -0
  235. package/dist/extensions/agent-browser/lib/page-target-validation.js +59 -243
  236. package/dist/extensions/agent-browser/lib/parsing.js +13 -4
  237. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +134 -68
  238. package/dist/extensions/agent-browser/lib/playbook.js +18 -14
  239. package/dist/extensions/agent-browser/lib/process-child.js +284 -0
  240. package/dist/extensions/agent-browser/lib/process-environment.js +22 -6
  241. package/dist/extensions/agent-browser/lib/process-errors.js +23 -0
  242. package/dist/extensions/agent-browser/lib/process-identity.js +47 -15
  243. package/dist/extensions/agent-browser/lib/process-socket-storage.js +256 -0
  244. package/dist/extensions/agent-browser/lib/process-stdout.js +74 -0
  245. package/dist/extensions/agent-browser/lib/process.js +146 -537
  246. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +287 -0
  247. package/dist/extensions/agent-browser/lib/prompt-policy.js +15 -194
  248. package/dist/extensions/agent-browser/lib/read-command.js +41 -0
  249. package/dist/extensions/agent-browser/lib/read-confirmation.js +138 -35
  250. package/dist/extensions/agent-browser/lib/recording-reservations.js +118 -45
  251. package/dist/extensions/agent-browser/lib/redaction-fields.js +75 -0
  252. package/dist/extensions/agent-browser/lib/redaction-json.js +149 -0
  253. package/dist/extensions/agent-browser/lib/redaction-url.js +88 -0
  254. package/dist/extensions/agent-browser/lib/results/action-contracts.js +1 -0
  255. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +28 -271
  256. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +1 -0
  257. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +133 -0
  258. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +96 -94
  259. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +73 -0
  260. package/dist/extensions/agent-browser/lib/results/categories.js +111 -54
  261. package/dist/extensions/agent-browser/lib/results/confirmation.js +29 -10
  262. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +62 -27
  263. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +83 -0
  264. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +48 -0
  265. package/dist/extensions/agent-browser/lib/results/envelope.js +93 -66
  266. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +1 -0
  267. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +180 -0
  268. package/dist/extensions/agent-browser/lib/results/network-routes.js +86 -45
  269. package/dist/extensions/agent-browser/lib/results/network.js +35 -12
  270. package/dist/extensions/agent-browser/lib/results/next-actions.js +49 -19
  271. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +320 -0
  272. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +138 -0
  273. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +113 -0
  274. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +145 -0
  275. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +99 -552
  276. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +1 -0
  277. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +118 -0
  278. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +68 -0
  279. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +135 -0
  280. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +227 -0
  281. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +91 -0
  282. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +91 -460
  283. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +9 -5
  284. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +216 -0
  285. package/dist/extensions/agent-browser/lib/results/presentation/common.js +26 -9
  286. package/dist/extensions/agent-browser/lib/results/presentation/content.js +86 -29
  287. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +67 -0
  288. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +79 -0
  289. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +199 -0
  290. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +75 -0
  291. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +216 -0
  292. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +124 -0
  293. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +64 -0
  294. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +209 -0
  295. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +69 -0
  296. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +222 -0
  297. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +103 -1019
  298. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +70 -0
  299. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +130 -60
  300. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +1 -0
  301. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +60 -145
  302. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +147 -88
  303. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +75 -0
  304. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +1 -0
  305. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +127 -0
  306. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +120 -0
  307. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +77 -0
  308. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +51 -0
  309. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +117 -237
  310. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +35 -21
  311. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +104 -73
  312. package/dist/extensions/agent-browser/lib/results/presentation/source.js +109 -0
  313. package/dist/extensions/agent-browser/lib/results/presentation.js +17 -248
  314. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +1 -0
  315. package/dist/extensions/agent-browser/lib/results/recording.js +52 -14
  316. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +14 -5
  317. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +30 -22
  318. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +83 -0
  319. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +123 -123
  320. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +266 -0
  321. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +32 -0
  322. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +104 -71
  323. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +31 -11
  324. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +125 -66
  325. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +26 -7
  326. package/dist/extensions/agent-browser/lib/results/snapshot.js +28 -248
  327. package/dist/extensions/agent-browser/lib/results/text.js +16 -5
  328. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +133 -0
  329. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +81 -0
  330. package/dist/extensions/agent-browser/lib/runtime-contracts.js +1 -0
  331. package/dist/extensions/agent-browser/lib/runtime-redaction.js +118 -0
  332. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +144 -0
  333. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +76 -0
  334. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +114 -0
  335. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +123 -0
  336. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +65 -0
  337. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +28 -0
  338. package/dist/extensions/agent-browser/lib/runtime.js +137 -1037
  339. package/dist/extensions/agent-browser/lib/session-identity.js +51 -0
  340. package/dist/extensions/agent-browser/lib/session-page-observation.js +357 -0
  341. package/dist/extensions/agent-browser/lib/session-page-state.js +188 -324
  342. package/dist/extensions/agent-browser/lib/session-page-types.js +1 -0
  343. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +78 -0
  344. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +7 -0
  345. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +234 -0
  346. package/dist/extensions/agent-browser/lib/temp-root.js +207 -0
  347. package/dist/extensions/agent-browser/lib/temp.js +33 -446
  348. package/dist/extensions/agent-browser/lib/tool-surface.js +94 -24
  349. package/dist/extensions/agent-browser/lib/upstream-version.js +3 -2
  350. package/dist/extensions/agent-browser/lib/web-search-providers.js +229 -0
  351. package/dist/extensions/agent-browser/lib/web-search-request.js +108 -0
  352. package/dist/extensions/agent-browser/lib/web-search-results.js +281 -0
  353. package/dist/extensions/agent-browser/lib/web-search-schema.js +82 -0
  354. package/dist/extensions/agent-browser/lib/web-search.js +109 -617
  355. package/dist/extensions/agent-browser/lib/webmcp-observation.js +13 -6
  356. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +63 -37
  357. package/dist/extensions/agent-browser/script-worker.js +80 -43
  358. package/dist/scripts/agent-browser-target.mjs +4 -2
  359. package/docs/ARCHITECTURE.md +22 -10
  360. package/docs/CODE_QUALITY.md +242 -0
  361. package/docs/COMMAND_REFERENCE.md +264 -229
  362. package/docs/ELECTRON.md +53 -44
  363. package/docs/RELEASE.md +21 -17
  364. package/docs/REQUIREMENTS.md +2 -0
  365. package/docs/SESSION_STORAGE.md +1 -1
  366. package/docs/SUPPORT_MATRIX.md +84 -77
  367. package/docs/TOOL_CONTRACT.md +165 -130
  368. package/docs/platform-smoke.md +5 -5
  369. package/package.json +143 -120
  370. package/scripts/agent-browser-capability-baseline.mjs +361 -957
  371. package/scripts/agent-browser-target.mjs +6 -2
  372. package/scripts/build.mjs +37 -8
  373. package/scripts/capability-core-commands.mjs +193 -0
  374. package/scripts/capability-options.mjs +283 -0
  375. package/scripts/capability-samples.mjs +133 -0
  376. package/scripts/capability-section.mjs +11 -0
  377. package/scripts/config.mjs +213 -114
  378. package/scripts/convert-browser-session.mjs +30 -9
  379. package/scripts/doctor-sources.mjs +195 -0
  380. package/scripts/doctor.mjs +92 -247
  381. package/scripts/platform-smoke/artifacts.mjs +38 -11
  382. package/scripts/platform-smoke/commands.mjs +104 -0
  383. package/scripts/platform-smoke/crabbox-runner.mjs +167 -80
  384. package/scripts/platform-smoke/doctor-support.mjs +157 -0
  385. package/scripts/platform-smoke/doctor-windows.mjs +230 -0
  386. package/scripts/platform-smoke/doctor.mjs +212 -320
  387. package/scripts/platform-smoke/lease-evidence.mjs +134 -0
  388. package/scripts/platform-smoke/suite-checks.mjs +98 -0
  389. package/scripts/platform-smoke/suite-evidence.mjs +281 -0
  390. package/scripts/platform-smoke/targets.mjs +158 -472
  391. package/scripts/platform-smoke.mjs +55 -40
  392. package/scripts/prepare.mjs +16 -7
@@ -4,22 +4,29 @@ const observation = new AsyncLocalStorage();
4
4
  export function getNativeWebMcpCatalog(data) {
5
5
  if (Array.isArray(data)) {
6
6
  for (let index = data.length - 1; index >= 0; index -= 1) {
7
- const catalog = getNativeWebMcpCatalog(isRecord(data[index]) ? data[index].result : undefined);
8
- if (catalog)
7
+ const row = data[index];
8
+ const catalog = getNativeWebMcpCatalog(isRecord(row) ? row.result : undefined);
9
+ if (catalog) {
9
10
  return catalog;
11
+ }
10
12
  }
11
13
  }
12
- if (!isRecord(data) || !isRecord(data.webmcp))
14
+ if (!isRecord(data) || !isRecord(data.webmcp)) {
13
15
  return undefined;
14
- return Array.isArray(data.webmcp.tools) || data.webmcp.status === "unavailable" ? data.webmcp : undefined;
16
+ }
17
+ return Array.isArray(data.webmcp.tools) || data.webmcp.status === "unavailable"
18
+ ? data.webmcp
19
+ : undefined;
15
20
  }
16
21
  export function observeNativeWebMcp(data) {
17
22
  const current = observation.getStore();
18
- if (!current)
23
+ if (!current) {
19
24
  return;
25
+ }
20
26
  const catalog = getNativeWebMcpCatalog(data);
21
- if (catalog)
27
+ if (catalog) {
22
28
  current.catalog = catalog;
29
+ }
23
30
  }
24
31
  /** Native discovery is edge-triggered; helper reads must not swallow its updates. */
25
32
  export async function collectNativeWebMcp(run) {
@@ -3,42 +3,46 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
3
3
  import { isMainThread } from "node:worker_threads";
4
4
  import pathKey from "path-key";
5
5
  import which from "which";
6
- /** Bypass only upstream's optimized npm CMD shim: cmd.exe loses literal CR/LF.
7
- * Keep which/path-key aligned with cross-spawn's public dependency versions.
8
- * Unknown/custom launchers (including other npm layouts) stay on cross-spawn.
9
- */
10
- export function resolveWindowsStockLauncher(cwd, env) {
11
- if (process.platform !== "win32" || !isMainThread)
12
- return undefined;
13
- // which reads parent PATHEXT; cmd.exe reads the child's. Node also handles
14
- // duplicate case-insensitive environment keys differently from path-key.
15
- // In those ambiguous cases, keep the original transport and its selection.
16
- const values = (name) => Object.entries(env)
17
- .filter(([key, value]) => key.toUpperCase() === name && value !== undefined).map(([, value]) => value);
18
- const paths = values("PATH"), extensions = values("PATHEXT");
19
- if (paths.length !== 1 || !paths[0] || extensions.length !== 1 || extensions[0] !== process.env.PATHEXT
20
- || values("NODEFAULTCURRENTDIRECTORYINEXEPATH").length)
21
- return undefined;
22
- // A custom COMSPEC can implement different command selection/semantics.
23
- // Compare filesystem identity, not short/long Windows path spellings.
6
+ import { isRecord } from "./parsing.js";
7
+ function environmentValues(env, name) {
8
+ return Object.entries(env)
9
+ .filter(([key, value]) => key.toUpperCase() === name && value !== undefined)
10
+ .map(([, value]) => value);
11
+ }
12
+ function hasStockEnvironment(env) {
13
+ const paths = environmentValues(env, "PATH");
14
+ const extensions = environmentValues(env, "PATHEXT");
15
+ return (paths.length === 1 &&
16
+ paths.at(0) !== undefined &&
17
+ paths.at(0) !== "" &&
18
+ extensions.length === 1 &&
19
+ extensions.at(0) === process.env.PATHEXT &&
20
+ environmentValues(env, "NODEFAULTCURRENTDIRECTORYINEXEPATH").length === 0);
21
+ }
22
+ function hasNativeCommandShell() {
23
+ const { comspec, SystemRoot } = process.env;
24
+ if (comspec === undefined ||
25
+ comspec.length === 0 ||
26
+ !isAbsolute(comspec) ||
27
+ SystemRoot === undefined ||
28
+ SystemRoot.length === 0) {
29
+ return false;
30
+ }
24
31
  try {
25
- if (!process.env.comspec || !isAbsolute(process.env.comspec) || !process.env.SystemRoot)
26
- return undefined;
27
- const shell = statSync(process.env.comspec, { bigint: true });
28
- const native = statSync(join(process.env.SystemRoot, "System32", "cmd.exe"), { bigint: true });
29
- if (shell.dev !== native.dev || shell.ino !== native.ino)
30
- return undefined;
32
+ const shell = statSync(comspec, { bigint: true });
33
+ const native = statSync(join(SystemRoot, "System32", "cmd.exe"), { bigint: true });
34
+ return shell.dev === native.dev && shell.ino === native.ino;
31
35
  }
32
36
  catch {
33
- return undefined;
37
+ return false;
34
38
  }
39
+ }
40
+ function selectLauncher(cwd, env) {
35
41
  const previousCwd = process.cwd();
36
- let selected;
37
42
  try {
38
- // which 2 has no cwd option. Like cross-spawn, change cwd only during
39
- // synchronous resolution, restoring it before any caller can await.
43
+ // which 2 has no cwd option; synchronous resolution matches cross-spawn's child cwd.
40
44
  process.chdir(cwd);
41
- selected = which.sync("agent-browser", { path: env[pathKey({ env })], nothrow: true });
45
+ return which.sync("agent-browser", { path: env[pathKey({ env })], nothrow: true });
42
46
  }
43
47
  catch {
44
48
  return undefined;
@@ -46,21 +50,25 @@ export function resolveWindowsStockLauncher(cwd, env) {
46
50
  finally {
47
51
  process.chdir(previousCwd);
48
52
  }
49
- // cross-spawn's second (extensionless) lookup cannot select this CMD shim.
50
- if (!selected || !selected.toLowerCase().endsWith(".cmd"))
51
- return undefined;
53
+ }
54
+ function stockLauncherBinary(absoluteShim) {
52
55
  try {
53
- // which can return a relative PATH result; interpret it in the child cwd.
54
- const absoluteShim = resolve(cwd, selected);
55
- if (statSync(absoluteShim).size > 512)
56
+ if (statSync(absoluteShim).size > 512) {
56
57
  return undefined;
58
+ }
57
59
  const text = readFileSync(absoluteShim, "utf8");
58
- if (!/^@ECHO off\r?\n"%~dp0node_modules\\agent-browser\\bin\\agent-browser-win32-x64\.exe" %\*(?:\r?\n)?(?![\s\S])/.test(text))
60
+ if (!/^@ECHO off\r?\n"%~dp0node_modules\\agent-browser\\bin\\agent-browser-win32-x64\.exe" %\*(?:\r?\n)?(?![\s\S])/.test(text)) {
59
61
  return undefined;
62
+ }
60
63
  const packageRoot = join(dirname(absoluteShim), "node_modules", "agent-browser");
61
64
  const manifest = JSON.parse(readFileSync(join(packageRoot, "package.json"), "utf8"));
62
- if (manifest.name !== "agent-browser" || !["bin/agent-browser.js", "./bin/agent-browser.js"].includes(manifest.bin?.["agent-browser"]))
65
+ if (!isRecord(manifest) || manifest.name !== "agent-browser" || !isRecord(manifest.bin)) {
66
+ return undefined;
67
+ }
68
+ const entrypoint = manifest.bin["agent-browser"];
69
+ if (entrypoint !== "bin/agent-browser.js" && entrypoint !== "./bin/agent-browser.js") {
63
70
  return undefined;
71
+ }
64
72
  const binary = join(packageRoot, "bin", "agent-browser-win32-x64.exe");
65
73
  return statSync(binary).isFile() ? binary : undefined;
66
74
  }
@@ -68,3 +76,21 @@ export function resolveWindowsStockLauncher(cwd, env) {
68
76
  return undefined;
69
77
  }
70
78
  }
79
+ /** Bypass only upstream's optimized npm CMD shim: cmd.exe loses literal CR/LF.
80
+ * Keep which/path-key aligned with cross-spawn's public dependency versions.
81
+ * Unknown/custom launchers stay on cross-spawn.
82
+ */
83
+ export function resolveWindowsStockLauncher(cwd, env) {
84
+ if (process.platform !== "win32" ||
85
+ !isMainThread ||
86
+ !hasStockEnvironment(env) ||
87
+ !hasNativeCommandShell()) {
88
+ return undefined;
89
+ }
90
+ const selected = selectLauncher(cwd, env);
91
+ // cross-spawn's extensionless lookup cannot select this CMD shim.
92
+ if (selected === undefined || selected === null || !selected.toLowerCase().endsWith(".cmd")) {
93
+ return undefined;
94
+ }
95
+ return stockLauncherBinary(resolve(cwd, selected));
96
+ }
@@ -2,8 +2,9 @@ import { randomBytes } from "node:crypto";
2
2
  import { createContext, runInContext, Script } from "node:vm";
3
3
  function parseLimit(value, label) {
4
4
  const parsed = Number(value);
5
- if (!Number.isSafeInteger(parsed) || parsed <= 0)
5
+ if (!Number.isSafeInteger(parsed) || parsed <= 0) {
6
6
  throw new Error(`Invalid ${label}.`);
7
+ }
7
8
  return parsed;
8
9
  }
9
10
  const maxMessageBytes = parseLimit(process.argv[2], "script IPC message limit");
@@ -11,7 +12,8 @@ const maxCumulativeBytes = parseLimit(process.argv[3], "script IPC cumulative li
11
12
  let cumulativeBytes = 0;
12
13
  let inputBuffer = Buffer.alloc(0);
13
14
  let started = false;
14
- const sandbox = Object.create(null);
15
+ const sandbox = {};
16
+ Object.setPrototypeOf(sandbox, null);
15
17
  const context = createContext(sandbox, {
16
18
  codeGeneration: { strings: false, wasm: false },
17
19
  name: "agent-browser-script",
@@ -19,11 +21,13 @@ const context = createContext(sandbox, {
19
21
  const bridgeKey = `__piab_send_${randomBytes(16).toString("hex")}`;
20
22
  const stateName = `__piab_state_${randomBytes(16).toString("hex")}`;
21
23
  const hostSend = (json) => {
22
- if (typeof json !== "string")
24
+ if (typeof json !== "string") {
23
25
  return false;
26
+ }
24
27
  const bytes = Buffer.byteLength(json, "utf8") + 1;
25
- if (bytes > maxMessageBytes || cumulativeBytes + bytes > maxCumulativeBytes)
28
+ if (bytes > maxMessageBytes || cumulativeBytes + bytes > maxCumulativeBytes) {
26
29
  return false;
30
+ }
27
31
  cumulativeBytes += bytes;
28
32
  try {
29
33
  process.stdout.write(`${json}\n`);
@@ -36,10 +40,16 @@ const hostSend = (json) => {
36
40
  Object.setPrototypeOf(hostSend, null);
37
41
  Object.freeze(hostSend);
38
42
  sandbox[bridgeKey] = hostSend;
39
- runInContext("const " + stateName + " = (() => {\n" +
43
+ runInContext("const " +
44
+ stateName +
45
+ " = (() => {\n" +
40
46
  " 'use strict';\n" +
41
- " const send = globalThis[" + JSON.stringify(bridgeKey) + "];\n" +
42
- " delete globalThis[" + JSON.stringify(bridgeKey) + "];\n" +
47
+ " const send = globalThis[" +
48
+ JSON.stringify(bridgeKey) +
49
+ "];\n" +
50
+ " delete globalThis[" +
51
+ JSON.stringify(bridgeKey) +
52
+ "];\n" +
43
53
  " for (const name of ['console','process','require','Buffer','fetch','WebSocket','setTimeout','setInterval','setImmediate','queueMicrotask','clearTimeout','clearInterval','clearImmediate']) Object.defineProperty(globalThis, name, { value: undefined, writable: false, configurable: false });\n" +
44
54
  " const NativePromise = Promise;\n" +
45
55
  " const promiseThen = Promise.prototype.then;\n" +
@@ -47,7 +57,9 @@ runInContext("const " + stateName + " = (() => {\n" +
47
57
  " const pending = new Map();\n" +
48
58
  " let nextId = 0;\n" +
49
59
  " const encode = (value) => { const json = JSON.stringify(value); if (typeof json !== 'string') throw new TypeError('Value must be JSON-serializable.'); return json; };\n" +
50
- " const sendValue = (value) => { const json = encode(value); if (json.length + 1 > " + maxMessageBytes + " || send(json) !== true) throw new RangeError('Script IPC limit exceeded.'); };\n" +
60
+ " const sendValue = (value) => { const json = encode(value); if (json.length + 1 > " +
61
+ String(maxMessageBytes) +
62
+ " || send(json) !== true) throw new RangeError('Script IPC limit exceeded.'); };\n" +
51
63
  " const browser = function browser(params) {\n" +
52
64
  " return new NativePromise((resolve, reject) => {\n" +
53
65
  " const id = ++nextId;\n" +
@@ -91,18 +103,67 @@ runInContext("const " + stateName + " = (() => {\n" +
91
103
  " });\n" +
92
104
  "})();", context, { timeout: 1_000 });
93
105
  const deliver = runInContext(`${stateName}.deliver`, context, { timeout: 1_000 });
106
+ if (typeof deliver !== "function") {
107
+ throw new Error("Script response bridge was not initialized.");
108
+ }
94
109
  function fail(name, message) {
95
110
  hostSend(JSON.stringify({ type: "complete", error: { name, message } }));
96
111
  }
97
112
  function describeError(error, fallback) {
98
- if (!error || typeof error !== "object")
113
+ if (error === null || typeof error !== "object") {
99
114
  return { message: fallback, name: "Error" };
100
- const candidate = error;
115
+ }
116
+ const message = "message" in error ? error.message : undefined;
117
+ const name = "name" in error ? error.name : undefined;
101
118
  return {
102
- message: typeof candidate.message === "string" ? candidate.message.replace(/[\r\n]+/g, " ").slice(0, 400) : fallback,
103
- name: typeof candidate.name === "string" ? candidate.name.slice(0, 80) : "Error",
119
+ message: typeof message === "string" ? message.replace(/[\r\n]+/g, " ").slice(0, 400) : fallback,
120
+ name: typeof name === "string" ? name.slice(0, 80) : "Error",
104
121
  };
105
122
  }
123
+ function startScript(message) {
124
+ if (message === null ||
125
+ typeof message !== "object" ||
126
+ !("type" in message) ||
127
+ message.type !== "start" ||
128
+ !("code" in message) ||
129
+ typeof message.code !== "string") {
130
+ fail("Error", "Invalid script start message.");
131
+ return;
132
+ }
133
+ started = true;
134
+ try {
135
+ const source = `'use strict';\n${stateName}.run(async function () {\n'use strict';\n${message.code}\n});`;
136
+ const script = new Script(source, {
137
+ filename: "agent-browser-script.js",
138
+ importModuleDynamically() {
139
+ process.exit(70);
140
+ },
141
+ });
142
+ script.runInContext(context);
143
+ }
144
+ catch (error) {
145
+ const described = describeError(error, "Script compilation failed.");
146
+ fail(described.name, described.message);
147
+ }
148
+ }
149
+ function deliverBrowserResponse(message, line) {
150
+ if (message === null ||
151
+ typeof message !== "object" ||
152
+ !("type" in message) ||
153
+ message.type !== "response") {
154
+ fail("Error", "Invalid parent IPC response.");
155
+ return;
156
+ }
157
+ try {
158
+ if (typeof deliver !== "function") {
159
+ throw new Error("Script response bridge is unavailable.");
160
+ }
161
+ Reflect.apply(deliver, undefined, [line]);
162
+ }
163
+ catch {
164
+ fail("Error", "Invalid browser response envelope.");
165
+ }
166
+ }
106
167
  function handleLine(line) {
107
168
  const bytes = Buffer.byteLength(line, "utf8") + 1;
108
169
  if (bytes > maxMessageBytes || cumulativeBytes + bytes > maxCumulativeBytes) {
@@ -119,37 +180,10 @@ function handleLine(line) {
119
180
  return;
120
181
  }
121
182
  if (!started) {
122
- if (!message || typeof message !== "object" || message.type !== "start" || typeof message.code !== "string") {
123
- fail("Error", "Invalid script start message.");
124
- return;
125
- }
126
- started = true;
127
- try {
128
- const source = `'use strict';\n${stateName}.run(async function () {\n'use strict';\n${message.code}\n});`;
129
- const script = new Script(source, {
130
- filename: "agent-browser-script.js",
131
- importModuleDynamically() {
132
- process.exit(70);
133
- },
134
- });
135
- script.runInContext(context, { timeout: undefined });
136
- }
137
- catch (error) {
138
- const described = describeError(error, "Script compilation failed.");
139
- fail(described.name, described.message);
140
- }
183
+ startScript(message);
141
184
  return;
142
185
  }
143
- if (!message || typeof message !== "object" || message.type !== "response") {
144
- fail("Error", "Invalid parent IPC response.");
145
- return;
146
- }
147
- try {
148
- deliver(line);
149
- }
150
- catch {
151
- fail("Error", "Invalid browser response envelope.");
152
- }
186
+ deliverBrowserResponse(message, line);
153
187
  }
154
188
  process.stdin.on("data", (rawChunk) => {
155
189
  const chunk = Buffer.isBuffer(rawChunk) ? rawChunk : Buffer.from(rawChunk);
@@ -161,12 +195,15 @@ process.stdin.on("data", (rawChunk) => {
161
195
  }
162
196
  for (;;) {
163
197
  const newline = inputBuffer.indexOf(10);
164
- if (newline < 0)
198
+ if (newline < 0) {
165
199
  break;
200
+ }
166
201
  const line = inputBuffer.subarray(0, newline).toString("utf8");
167
202
  inputBuffer = inputBuffer.subarray(newline + 1);
168
203
  handleLine(line);
169
204
  }
170
205
  });
171
- process.stdin.on("error", () => undefined);
206
+ process.stdin.on("error", () => {
207
+ // Parent transport teardown is handled by the parent's worker lifecycle owner.
208
+ });
172
209
  hostSend(JSON.stringify({ type: "ready" }));
@@ -11,11 +11,13 @@ function stableVersionParts(version) {
11
11
  export function isSupportedAgentBrowserVersion(version) {
12
12
  const actual = stableVersionParts(version);
13
13
  const minimum = stableVersionParts(MINIMUM_AGENT_BROWSER_VERSION);
14
- if (!actual || !minimum)
14
+ if (!actual || !minimum) {
15
15
  return false;
16
+ }
16
17
  for (let index = 0; index < minimum.length; index += 1) {
17
- if (actual[index] !== minimum[index])
18
+ if (actual[index] !== minimum[index]) {
18
19
  return actual[index] > minimum[index];
20
+ }
19
21
  }
20
22
  return true;
21
23
  }