pi-agent-browser-native 0.9.3 → 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 (391) hide show
  1. package/CHANGELOG.md +77 -5
  2. package/README.md +103 -81
  3. package/dist/extensions/agent-browser/index.js +43057 -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 +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 +43 -9
  82. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +106 -59
  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 +164 -60
  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 +199 -154
  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 -205
  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 -1123
  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 -968
  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 -765
  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 -821
  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 -157
  228. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +124 -58
  229. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +197 -99
  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 +55 -246
  236. package/dist/extensions/agent-browser/lib/parsing.js +13 -4
  237. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +133 -68
  238. package/dist/extensions/agent-browser/lib/playbook.js +16 -12
  239. package/dist/extensions/agent-browser/lib/process-child.js +284 -0
  240. package/dist/extensions/agent-browser/lib/process-environment.js +13 -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 +145 -536
  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 +131 -68
  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 -13
  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 +90 -67
  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 -555
  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 -1052
  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 +116 -240
  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 -261
  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 +119 -119
  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 -1041
  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 +178 -333
  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 +17 -5
  360. package/docs/CODE_QUALITY.md +242 -0
  361. package/docs/COMMAND_REFERENCE.md +251 -220
  362. package/docs/ELECTRON.md +53 -44
  363. package/docs/RELEASE.md +18 -15
  364. package/docs/REQUIREMENTS.md +1 -0
  365. package/docs/SUPPORT_MATRIX.md +76 -75
  366. package/docs/TOOL_CONTRACT.md +145 -116
  367. package/docs/platform-smoke.md +5 -5
  368. package/package.json +143 -120
  369. package/scripts/agent-browser-capability-baseline.mjs +361 -957
  370. package/scripts/agent-browser-target.mjs +6 -2
  371. package/scripts/build.mjs +37 -8
  372. package/scripts/capability-core-commands.mjs +193 -0
  373. package/scripts/capability-options.mjs +283 -0
  374. package/scripts/capability-samples.mjs +133 -0
  375. package/scripts/capability-section.mjs +11 -0
  376. package/scripts/config.mjs +213 -114
  377. package/scripts/convert-browser-session.mjs +30 -9
  378. package/scripts/doctor-sources.mjs +195 -0
  379. package/scripts/doctor.mjs +92 -247
  380. package/scripts/platform-smoke/artifacts.mjs +38 -11
  381. package/scripts/platform-smoke/commands.mjs +104 -0
  382. package/scripts/platform-smoke/crabbox-runner.mjs +167 -80
  383. package/scripts/platform-smoke/doctor-support.mjs +157 -0
  384. package/scripts/platform-smoke/doctor-windows.mjs +230 -0
  385. package/scripts/platform-smoke/doctor.mjs +212 -320
  386. package/scripts/platform-smoke/lease-evidence.mjs +134 -0
  387. package/scripts/platform-smoke/suite-checks.mjs +98 -0
  388. package/scripts/platform-smoke/suite-evidence.mjs +281 -0
  389. package/scripts/platform-smoke/targets.mjs +158 -472
  390. package/scripts/platform-smoke.mjs +55 -40
  391. 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
+ }