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,51 @@
1
+ const SESSION_COMPONENT_ALPHANUMERIC = /^[\p{Alphabetic}\p{Number}]$/u;
2
+ /** Mirror upstream sanitize_session_component for namespace/socket/state identity. */
3
+ export function canonicalizeAgentBrowserNamespace(value) {
4
+ if (value === undefined) {
5
+ return undefined;
6
+ }
7
+ let normalized = "";
8
+ let lastWasSeparator = false;
9
+ for (const character of value) {
10
+ if (SESSION_COMPONENT_ALPHANUMERIC.test(character)) {
11
+ normalized += character.toLowerCase();
12
+ lastWasSeparator = false;
13
+ continue;
14
+ }
15
+ if (normalized.length > 0 && !lastWasSeparator) {
16
+ normalized += character === "_" ? "_" : "-";
17
+ lastWasSeparator = true;
18
+ }
19
+ }
20
+ const result = normalized.replace(/[-_]+$/u, "");
21
+ return result.length > 0 ? result : undefined;
22
+ }
23
+ export function foldAgentBrowserFilesystemIdentity(value, platform) {
24
+ if (platform !== "darwin" && platform !== "win32") {
25
+ return value;
26
+ }
27
+ // APFS aliases include full Unicode folds such as ß/SS and ς/Σ, not just ASCII case.
28
+ return value.normalize("NFC").toLowerCase().toUpperCase().toLowerCase().normalize("NFC");
29
+ }
30
+ export function getAgentBrowserSessionIdentityKey(sessionName, namespace, platform = process.platform) {
31
+ const canonicalNamespace = canonicalizeAgentBrowserNamespace(namespace);
32
+ const canonicalSessionName = foldAgentBrowserFilesystemIdentity(sessionName, platform);
33
+ return canonicalNamespace !== undefined
34
+ ? `${foldAgentBrowserFilesystemIdentity(canonicalNamespace, platform)}\0${canonicalSessionName}`
35
+ : canonicalSessionName;
36
+ }
37
+ export function isAgentBrowserSessionIdentityKeyInNamespace(identityKey, namespace) {
38
+ const prefix = getAgentBrowserSessionIdentityKey("", namespace);
39
+ return prefix.length > 0 ? identityKey.startsWith(prefix) : !identityKey.includes("\0");
40
+ }
41
+ /** Namespace close retires keys in the caller's ownership index, not a copy. */
42
+ export function deleteIdentityKeysInNamespace(
43
+ // Caller-owned identity indexes deliberately mutate under the namespace execution barrier.
44
+ // oxlint-disable-next-line typescript/prefer-readonly-parameter-types
45
+ entries, namespace) {
46
+ for (const key of entries.keys()) {
47
+ if (isAgentBrowserSessionIdentityKeyInNamespace(key, namespace)) {
48
+ entries.delete(key);
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,357 @@
1
+ import { browserStringArray } from "./browser-value-parsing.js";
2
+ import { extractUpstreamCommandTokens } from "./argv-descriptor.js";
3
+ import { getAgentBrowserSessionIdentityKey } from "./argv-grammar.js";
4
+ import { isCloseCommand, isOpenNavigationCommand, isReadOnlyDiagnosticSessionTargetCommand, isRecordPageTransitionCommand, isUnverifiedPageTransitionCommand, isWebMcpPageMutationCommand, isWindowOrDiffPageTransitionCommand, } from "./command-taxonomy.js";
5
+ import { isRecord } from "./parsing.js";
6
+ import { detectConfirmationRequired } from "./results/confirmation.js";
7
+ import { isSuccessfulNativeConfirmedClose } from "./read-confirmation.js";
8
+ import { getEditableRefEvidence } from "./results/editable-ref-evidence.js";
9
+ import { enrichSnapshotRefEntries, getFullSnapshotData, getSnapshotRefEntries, } from "./results/snapshot-refs.js";
10
+ import { parseSnapshotLines } from "./results/snapshot-segments.js";
11
+ export function normalizeComparableUrl(url) {
12
+ const normalizedUrl = url?.trim();
13
+ if (normalizedUrl === undefined || normalizedUrl.length === 0) {
14
+ return undefined;
15
+ }
16
+ try {
17
+ const parsedUrl = new URL(normalizedUrl);
18
+ parsedUrl.hash = "";
19
+ return parsedUrl.toString();
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ }
25
+ function trimmedOptionalValue(value) {
26
+ const trimmed = value?.trim();
27
+ return trimmed !== undefined && trimmed.length > 0 ? trimmed : undefined;
28
+ }
29
+ export function normalizeSessionTabTarget(target) {
30
+ if (!target) {
31
+ return undefined;
32
+ }
33
+ const url = trimmedOptionalValue(target.url);
34
+ if (url === undefined || normalizeComparableUrl(url) === undefined) {
35
+ return undefined;
36
+ }
37
+ const targetId = trimmedOptionalValue(target.targetId);
38
+ return {
39
+ ...(targetId !== undefined ? { targetId } : {}),
40
+ title: trimmedOptionalValue(target.title),
41
+ url,
42
+ };
43
+ }
44
+ export function isAboutBlankUrl(url) {
45
+ return normalizeComparableUrl(url) === "about:blank";
46
+ }
47
+ export function isAboutBlankSessionTabTarget(target) {
48
+ return isAboutBlankUrl(target?.url);
49
+ }
50
+ export function commandExplicitlyTargetsAboutBlank(commandTokens) {
51
+ return ((commandTokens[0] === "window" && commandTokens[1] === "new") ||
52
+ commandTokens.some((token) => isAboutBlankUrl(token)));
53
+ }
54
+ export function targetsMatch(left, right) {
55
+ if (!left || !right) {
56
+ return true;
57
+ }
58
+ return normalizeComparableUrl(left.url) === normalizeComparableUrl(right.url);
59
+ }
60
+ function extractStringResultField(data, fieldName) {
61
+ if (typeof data === "string") {
62
+ if (fieldName === "value") {
63
+ return data;
64
+ }
65
+ const text = data.trim();
66
+ return text.length > 0 ? text : undefined;
67
+ }
68
+ if (!isRecord(data) || typeof data[fieldName] !== "string") {
69
+ return undefined;
70
+ }
71
+ if (fieldName === "value") {
72
+ return data[fieldName];
73
+ }
74
+ const text = data[fieldName].trim();
75
+ return text.length > 0 ? text : undefined;
76
+ }
77
+ function extractSessionTabTargetFromData(data) {
78
+ const directTarget = normalizeSessionTabTarget({
79
+ targetId: isRecord(data) && typeof data.targetId === "string" ? data.targetId : undefined,
80
+ title: extractStringResultField(data, "title"),
81
+ url: extractStringResultField(data, "url"),
82
+ });
83
+ if (directTarget) {
84
+ return directTarget;
85
+ }
86
+ if (isRecord(data) && typeof data.origin === "string") {
87
+ return normalizeSessionTabTarget({ url: data.origin });
88
+ }
89
+ return undefined;
90
+ }
91
+ function extractBatchResultCommand(item) {
92
+ return browserStringArray(item.command);
93
+ }
94
+ function confirmedNavigationResult(command, data) {
95
+ if (command === "confirm" &&
96
+ isRecord(data) &&
97
+ data.confirmed === true &&
98
+ (data.action === "navigate" || data.action === "url") &&
99
+ isRecord(data.result) &&
100
+ data.result.success === true &&
101
+ !detectConfirmationRequired(data)) {
102
+ return data.result;
103
+ }
104
+ return undefined;
105
+ }
106
+ export function extractSessionTabTargetFromCommandData(commandTokens, data) {
107
+ const [command, subcommand] = commandTokens;
108
+ const confirmed = confirmedNavigationResult(command, data);
109
+ if (confirmed) {
110
+ return extractSessionTabTargetFromData(confirmed.data);
111
+ }
112
+ if (command === "get" && subcommand === "url") {
113
+ return normalizeSessionTabTarget({
114
+ url: extractStringResultField(data, "url") ?? extractStringResultField(data, "result"),
115
+ });
116
+ }
117
+ return isReadOnlyDiagnosticSessionTargetCommand(command, subcommand)
118
+ ? undefined
119
+ : extractSessionTabTargetFromData(data);
120
+ }
121
+ class BatchTargetObservation {
122
+ target;
123
+ pendingTitle;
124
+ observe(item) {
125
+ if (detectConfirmationRequired(item.result)) {
126
+ return;
127
+ }
128
+ // Only this native row can describe the active tab's identity.
129
+ if (this.target?.targetId !== undefined && this.target.targetId.length > 0) {
130
+ this.target = normalizeSessionTabTarget({ title: this.target.title, url: this.target.url });
131
+ }
132
+ const tokens = extractUpstreamCommandTokens(extractBatchResultCommand(item));
133
+ this.invalidateTransition(tokens);
134
+ if (item.success === false) {
135
+ return;
136
+ }
137
+ this.observeResult(tokens, item.result);
138
+ }
139
+ invalidateTransition(tokens) {
140
+ const [name, subcommand] = tokens;
141
+ if (isOpenNavigationCommand(name) ||
142
+ isUnverifiedPageTransitionCommand(name, subcommand) ||
143
+ (name === "click" && tokens.includes("--new-tab"))) {
144
+ this.target = undefined;
145
+ this.pendingTitle = undefined;
146
+ }
147
+ }
148
+ observeResult(tokens, result) {
149
+ const [name, subcommand] = tokens;
150
+ if (isCloseCommand(name) || isSuccessfulNativeConfirmedClose(tokens, result)) {
151
+ this.target = undefined;
152
+ this.pendingTitle = undefined;
153
+ return;
154
+ }
155
+ if (name === "get" && subcommand === "title") {
156
+ this.pendingTitle = extractStringResultField(result, "title");
157
+ return;
158
+ }
159
+ if (name === "get" && subcommand === "url") {
160
+ const target = normalizeSessionTabTarget({
161
+ title: this.pendingTitle,
162
+ url: extractStringResultField(result, "url"),
163
+ });
164
+ if (target) {
165
+ this.target = target;
166
+ }
167
+ }
168
+ else {
169
+ const target = extractSessionTabTargetFromCommandData(tokens.slice(0, 2), result);
170
+ if (target) {
171
+ this.target = target;
172
+ }
173
+ }
174
+ this.pendingTitle = undefined;
175
+ }
176
+ }
177
+ export function extractSessionTabTargetFromBatchResults(data) {
178
+ if (!Array.isArray(data)) {
179
+ return undefined;
180
+ }
181
+ const observation = new BatchTargetObservation();
182
+ for (const item of data) {
183
+ if (isRecord(item)) {
184
+ observation.observe(item);
185
+ }
186
+ }
187
+ return observation.target;
188
+ }
189
+ export function deriveSessionTabTarget(options) {
190
+ if (isCloseCommand(options.command)) {
191
+ return undefined;
192
+ }
193
+ const commandDataTarget = extractSessionTabTargetFromCommandData([options.command, options.subcommand].filter((token) => token !== undefined), options.data);
194
+ const observedTarget = normalizeSessionTabTarget(options.navigationSummary) ??
195
+ extractSessionTabTargetFromBatchResults(options.data) ??
196
+ commandDataTarget;
197
+ if (observedTarget || !isUnverifiedPageTransitionCommand(options.command, options.subcommand)) {
198
+ return observedTarget ?? options.previousTarget;
199
+ }
200
+ return undefined;
201
+ }
202
+ function extractRefSnapshotRefs(data) {
203
+ if (!isRecord(data) || !isRecord(data.refs)) {
204
+ return undefined;
205
+ }
206
+ const snapshotLines = typeof data.snapshot === "string" ? parseSnapshotLines(data.snapshot) : [];
207
+ const lineByRef = new Map(snapshotLines.flatMap((line) => line.ref !== undefined && line.ref.length > 0 ? [[line.ref, line.raw]] : []));
208
+ const entries = enrichSnapshotRefEntries(getSnapshotRefEntries(data), snapshotLines);
209
+ const refs = Object.fromEntries(entries.flatMap((entry) => {
210
+ if (!/^e\d+$/.test(entry.id) || entry.role.length === 0) {
211
+ return [];
212
+ }
213
+ const isContentEditable = getEditableRefEvidence({
214
+ ref: entry.refData,
215
+ text: lineByRef.get(entry.id),
216
+ });
217
+ return [
218
+ [
219
+ entry.id,
220
+ {
221
+ ...(isContentEditable === true ? { isContentEditable: true } : {}),
222
+ ...(entry.isEditable !== undefined ? { isEditable: entry.isEditable } : {}),
223
+ name: entry.name,
224
+ role: entry.role,
225
+ },
226
+ ],
227
+ ];
228
+ }));
229
+ return Object.keys(refs).length > 0 ? refs : undefined;
230
+ }
231
+ export function extractRefSnapshotFromData(value) {
232
+ if (detectConfirmationRequired(value)) {
233
+ return undefined;
234
+ }
235
+ const data = getFullSnapshotData(value);
236
+ if (!data) {
237
+ return undefined;
238
+ }
239
+ const refs = extractRefSnapshotRefs(data);
240
+ return {
241
+ refIds: isRecord(data.refs)
242
+ ? Object.keys(data.refs).filter((refId) => /^e\d+$/.test(refId))
243
+ : [],
244
+ ...(refs ? { refs } : {}),
245
+ target: extractSessionTabTargetFromData(data),
246
+ };
247
+ }
248
+ function getBatchResultFailureText(item) {
249
+ const result = isRecord(item.result) ? item.result : undefined;
250
+ const parts = [
251
+ item.error,
252
+ result?.error,
253
+ typeof item.result === "string" ? item.result : undefined,
254
+ ].filter((part) => typeof part === "string" && part.trim().length > 0);
255
+ return parts.length > 0 ? parts.join("\n") : undefined;
256
+ }
257
+ export function buildNoActivePageRefSnapshotInvalidation() {
258
+ return {
259
+ reason: "no-active-page",
260
+ summary: "The latest snapshot for this session reported No active page. Old page-scoped refs are invalid until snapshot -i succeeds.",
261
+ };
262
+ }
263
+ export function buildPageTransitionRefSnapshotInvalidation(summary) {
264
+ return {
265
+ reason: "page-transition",
266
+ summary: summary ??
267
+ "Recording starts and URL-bearing restarts conservatively invalidate earlier page-scoped refs. Run snapshot -i before using refs; this is not evidence of a page change.",
268
+ };
269
+ }
270
+ export function getCommandRefSnapshotInvalidation(commandTokens) {
271
+ if (isRecordPageTransitionCommand(commandTokens)) {
272
+ return buildPageTransitionRefSnapshotInvalidation();
273
+ }
274
+ if (isWindowOrDiffPageTransitionCommand(commandTokens[0], commandTokens[1])) {
275
+ return buildPageTransitionRefSnapshotInvalidation("A window new or diff url command replaced or navigated the active page and invalidated prior refs. Run snapshot -i before using page-scoped refs.");
276
+ }
277
+ if (isWebMcpPageMutationCommand(commandTokens)) {
278
+ return buildPageTransitionRefSnapshotInvalidation("A WebMCP invoke, result, or cancel command can mutate, rerender, or navigate the page, so the prior snapshot refs were invalidated. Run snapshot -i before using page-scoped refs.");
279
+ }
280
+ return undefined;
281
+ }
282
+ export function isNoActivePageSnapshotFailure(command, text) {
283
+ return command === "snapshot" && /\bno active page\b/i.test(text ?? "");
284
+ }
285
+ function batchResultClosed(item, tokens) {
286
+ return (item.success !== false &&
287
+ !detectConfirmationRequired(item.result) &&
288
+ (isCloseCommand(tokens[0]) || isSuccessfulNativeConfirmedClose(tokens, item.result)));
289
+ }
290
+ function nextBatchRefState(item, previous) {
291
+ const tokens = extractUpstreamCommandTokens(extractBatchResultCommand(item));
292
+ if (batchResultClosed(item, tokens)) {
293
+ return undefined;
294
+ }
295
+ const invalidation = getCommandRefSnapshotInvalidation(tokens);
296
+ if (invalidation) {
297
+ return { invalidation };
298
+ }
299
+ if (tokens[0] !== "snapshot") {
300
+ return previous;
301
+ }
302
+ if (item.success === false) {
303
+ return isNoActivePageSnapshotFailure(tokens[0], getBatchResultFailureText(item))
304
+ ? { invalidation: buildNoActivePageRefSnapshotInvalidation() }
305
+ : previous;
306
+ }
307
+ const snapshot = extractRefSnapshotFromData(item.result);
308
+ if (snapshot) {
309
+ return { snapshot };
310
+ }
311
+ if (isRecord(item.result) && isRecord(item.result.snapshot)) {
312
+ return { refreshArgs: tokens.filter((token) => token !== "--delta" && token !== "--full") };
313
+ }
314
+ return previous;
315
+ }
316
+ export function extractLatestRefSnapshotStateFromBatchResults(data) {
317
+ if (!Array.isArray(data)) {
318
+ return undefined;
319
+ }
320
+ let latest;
321
+ for (const item of data) {
322
+ if (isRecord(item)) {
323
+ latest = nextBatchRefState(item, latest);
324
+ }
325
+ }
326
+ return latest;
327
+ }
328
+ export function shouldApplyTabTargetUpdate(current, unknownOrder, updateOrder) {
329
+ return updateOrder >= Math.max(current?.order ?? 0, unknownOrder ?? 0);
330
+ }
331
+ export function shouldApplyRefStateUpdate(options) {
332
+ const currentOrder = Math.max(options.currentSnapshot?.order ?? 0, options.currentInvalidation?.order ?? 0);
333
+ return options.updateOrder >= currentOrder;
334
+ }
335
+ export function stripRefSnapshotOrder(snapshot) {
336
+ return snapshot
337
+ ? {
338
+ ...(snapshot.snapshotId !== undefined && snapshot.snapshotId.length > 0
339
+ ? { snapshotId: snapshot.snapshotId }
340
+ : {}),
341
+ ...(snapshot.generation !== undefined && snapshot.generation.length > 0
342
+ ? { generation: snapshot.generation }
343
+ : {}),
344
+ refIds: snapshot.refIds,
345
+ ...(snapshot.refs ? { refs: snapshot.refs } : {}),
346
+ target: snapshot.target,
347
+ }
348
+ : undefined;
349
+ }
350
+ export function stripRefSnapshotInvalidationOrder(invalidation) {
351
+ return invalidation ? { reason: invalidation.reason, summary: invalidation.summary } : undefined;
352
+ }
353
+ export function getSessionPageStateKey(sessionName, namespace) {
354
+ return sessionName !== undefined && sessionName.length > 0
355
+ ? getAgentBrowserSessionIdentityKey(sessionName, namespace)
356
+ : undefined;
357
+ }