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
@@ -1,26 +1,30 @@
1
- import { GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES, VALUE_FLAGS, optionalGlobalValueFlagConsumesNext, stripUpstreamGlobalFlags } from "./argv-grammar.js";
1
+ import { GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES, VALUE_FLAGS, optionalGlobalValueFlagConsumesNext, stripUpstreamGlobalFlags, } from "./argv-grammar.js";
2
2
  import { isOpenNavigationCommand } from "./command-taxonomy.js";
3
3
  function isBooleanLiteral(token) {
4
4
  const normalized = token?.trim().toLowerCase();
5
5
  return normalized === "true" || normalized === "false";
6
6
  }
7
+ function flagConsumesFollowingToken(token, nextToken) {
8
+ const normalizedToken = token.split("=", 1).at(0) ?? token;
9
+ if (optionalGlobalValueFlagConsumesNext(normalizedToken, nextToken)) {
10
+ return true;
11
+ }
12
+ if (token.includes("=")) {
13
+ return false;
14
+ }
15
+ return (VALUE_FLAGS.has(normalizedToken) ||
16
+ (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(normalizedToken) && isBooleanLiteral(nextToken)));
17
+ }
7
18
  export function findCommandStartIndex(args) {
8
19
  for (let index = 0; index < args.length; index += 1) {
9
20
  const token = args[index];
10
- if (token.startsWith("--session=") || token.startsWith("--namespace=") || token.startsWith("--restore=")) {
21
+ if (token.startsWith("--session=") ||
22
+ token.startsWith("--namespace=") ||
23
+ token.startsWith("--restore=")) {
11
24
  continue;
12
25
  }
13
26
  if (token.startsWith("-")) {
14
- const normalizedToken = token.split("=", 1)[0] ?? token;
15
- if (optionalGlobalValueFlagConsumesNext(normalizedToken, args[index + 1])) {
16
- index += 1;
17
- }
18
- else if (VALUE_FLAGS.has(normalizedToken) && !token.includes("=")) {
19
- index += 1;
20
- }
21
- else if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(normalizedToken) &&
22
- !token.includes("=") &&
23
- isBooleanLiteral(args[index + 1])) {
27
+ if (flagConsumesFollowingToken(token, args[index + 1])) {
24
28
  index += 1;
25
29
  }
26
30
  continue;
@@ -36,26 +40,38 @@ export function extractCommandTokens(args) {
36
40
  export function extractUpstreamCommandTokens(args) {
37
41
  return stripUpstreamGlobalFlags(extractCommandTokens(args));
38
42
  }
43
+ function waitDownloadShape(considered, downloadIndex) {
44
+ const next = considered.at(downloadIndex + 1);
45
+ const candidate = next?.token.startsWith("--") === false ? next : undefined;
46
+ return {
47
+ downloadPath: candidate?.token,
48
+ downloadPathIndex: candidate?.index,
49
+ subcommand: considered[downloadIndex].token,
50
+ };
51
+ }
39
52
  export function parseWaitCommandTokens(commandTokens) {
40
- if (commandTokens[0] !== "wait")
53
+ if (commandTokens[0] !== "wait") {
41
54
  return {};
55
+ }
42
56
  const considered = commandTokens.slice(1).map((token, offset) => ({ index: offset + 1, token }));
43
57
  const timeoutIndex = considered.findIndex((entry) => entry.token === "--timeout");
44
- if (timeoutIndex >= 0)
58
+ if (timeoutIndex >= 0) {
45
59
  considered.splice(timeoutIndex, Math.min(2, considered.length - timeoutIndex));
46
- for (const flags of [["--url", "-u"], ["--load", "-l"], ["--fn", "-f"], ["--text", "-t"]]) {
47
- const match = considered.find((entry) => flags.includes(entry.token));
48
- if (match)
60
+ }
61
+ for (const flags of [
62
+ ["--url", "-u"],
63
+ ["--load", "-l"],
64
+ ["--fn", "-f"],
65
+ ["--text", "-t"],
66
+ ]) {
67
+ const match = considered.find((entry) => flags.some((flag) => flag === entry.token));
68
+ if (match) {
49
69
  return { subcommand: match.token };
70
+ }
50
71
  }
51
72
  const downloadIndex = considered.findIndex((entry) => entry.token === "--download" || entry.token === "-d");
52
73
  if (downloadIndex >= 0) {
53
- const candidate = considered[downloadIndex + 1];
54
- return {
55
- downloadPath: candidate && !candidate.token.startsWith("--") ? candidate.token : undefined,
56
- downloadPathIndex: candidate && !candidate.token.startsWith("--") ? candidate.index : undefined,
57
- subcommand: considered[downloadIndex].token,
58
- };
74
+ return waitDownloadShape(considered, downloadIndex);
59
75
  }
60
76
  return { subcommand: considered[0]?.token };
61
77
  }
@@ -76,14 +92,21 @@ function getOpenCommandTarget(commandTokens) {
76
92
  }
77
93
  return undefined;
78
94
  }
95
+ function getCommandSubcommand(tokens) {
96
+ if (isOpenNavigationCommand(tokens.at(0))) {
97
+ return getOpenCommandTarget(tokens);
98
+ }
99
+ if (tokens.at(0) === "wait") {
100
+ return parseWaitCommandTokens(tokens).subcommand;
101
+ }
102
+ return tokens.at(1);
103
+ }
79
104
  function parseCommandInfoFromTokens(commandTokens) {
80
105
  const upstreamCommandTokens = stripUpstreamGlobalFlags(commandTokens);
81
106
  const command = upstreamCommandTokens[0];
82
107
  return {
83
108
  command,
84
- subcommand: isOpenNavigationCommand(command)
85
- ? getOpenCommandTarget(upstreamCommandTokens)
86
- : command === "wait" ? parseWaitCommandTokens(upstreamCommandTokens).subcommand : upstreamCommandTokens[1],
109
+ subcommand: getCommandSubcommand(upstreamCommandTokens),
87
110
  };
88
111
  }
89
112
  export function parseCommandInfo(args) {
@@ -1,4 +1,6 @@
1
1
  import { isKnownCommandToken } from "./command-taxonomy.js";
2
+ import { canonicalizeAgentBrowserNamespace } from "./session-identity.js";
3
+ export { canonicalizeAgentBrowserNamespace, foldAgentBrowserFilesystemIdentity, getAgentBrowserSessionIdentityKey, isAgentBrowserSessionIdentityKeyInNamespace, deleteIdentityKeysInNamespace, } from "./session-identity.js";
2
4
  export const GLOBAL_VALUE_FLAGS = [
3
5
  "--session",
4
6
  "--namespace",
@@ -80,9 +82,15 @@ const COMMAND_VALUE_FLAGS = [
80
82
  "--wait-until",
81
83
  ];
82
84
  const OPTIONAL_GLOBAL_VALUE_FLAGS = new Set(["--restore"]);
83
- export const VALUE_FLAGS = new Set([...GLOBAL_VALUE_FLAGS, ...COMMAND_VALUE_FLAGS]);
85
+ export const VALUE_FLAGS = new Set([
86
+ ...GLOBAL_VALUE_FLAGS,
87
+ ...COMMAND_VALUE_FLAGS,
88
+ ]);
84
89
  export const PREVALIDATED_VALUE_FLAGS = new Set(GLOBAL_VALUE_FLAGS);
85
- export const GLOBAL_VALUE_FLAGS_ALLOWING_DASH_VALUE = new Set(["--args", "--session"]);
90
+ export const GLOBAL_VALUE_FLAGS_ALLOWING_DASH_VALUE = new Set([
91
+ "--args",
92
+ "--session",
93
+ ]);
86
94
  export const GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES = new Set([
87
95
  "--allow-file-access",
88
96
  "--annotate",
@@ -108,7 +116,6 @@ export const GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES = new Set([
108
116
  "-v",
109
117
  "--webgpu",
110
118
  ]);
111
- const SESSION_COMPONENT_ALPHANUMERIC = /^[\p{Alphabetic}\p{Number}]$/u;
112
119
  /** Match upstream's last-wins, case-sensitive boolean semantics; only exact `false` disables a present flag. */
113
120
  export function getBooleanFlagValue(args, flag) {
114
121
  let enabled;
@@ -116,16 +123,19 @@ export function getBooleanFlagValue(args, flag) {
116
123
  const token = args[index];
117
124
  if (token === flag) {
118
125
  enabled = args[index + 1] !== "false";
119
- if (["true", "false"].includes(args[index + 1] ?? ""))
126
+ if (["true", "false"].includes(args[index + 1] ?? "")) {
120
127
  index += 1;
128
+ }
121
129
  continue;
122
130
  }
123
131
  if (PREVALIDATED_VALUE_FLAGS.has(token)) {
124
132
  index += 1;
125
133
  continue;
126
134
  }
127
- if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) && ["true", "false"].includes(args[index + 1] ?? ""))
135
+ if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) &&
136
+ ["true", "false"].includes(args[index + 1] ?? "")) {
128
137
  index += 1;
138
+ }
129
139
  }
130
140
  return enabled;
131
141
  }
@@ -136,52 +146,6 @@ export function isBooleanFlagEnabled(args, flag) {
136
146
  export function isUpstreamEnvFlagEnabled(value) {
137
147
  return value !== undefined && !["", "0", "false", "no"].includes(value.toLowerCase());
138
148
  }
139
- /** Mirror upstream sanitize_session_component for namespace/socket/state identity. */
140
- export function canonicalizeAgentBrowserNamespace(value) {
141
- if (value === undefined)
142
- return undefined;
143
- let normalized = "";
144
- let lastWasSeparator = false;
145
- for (const character of value) {
146
- if (SESSION_COMPONENT_ALPHANUMERIC.test(character)) {
147
- normalized += character.toLowerCase();
148
- lastWasSeparator = false;
149
- }
150
- else if (character === "-" || character === "_") {
151
- if (normalized && !lastWasSeparator) {
152
- normalized += character;
153
- lastWasSeparator = true;
154
- }
155
- }
156
- else if (normalized && !lastWasSeparator) {
157
- normalized += "-";
158
- lastWasSeparator = true;
159
- }
160
- }
161
- return normalized.replace(/[-_]+$/u, "") || undefined;
162
- }
163
- export function foldAgentBrowserFilesystemIdentity(value, platform) {
164
- if (platform !== "darwin" && platform !== "win32")
165
- return value;
166
- // APFS aliases include full Unicode folds such as ß/SS and ς/Σ, not just ASCII case.
167
- return value.normalize("NFC").toLowerCase().toUpperCase().toLowerCase().normalize("NFC");
168
- }
169
- export function getAgentBrowserSessionIdentityKey(sessionName, namespace, platform = process.platform) {
170
- const canonicalNamespace = canonicalizeAgentBrowserNamespace(namespace);
171
- const identityNamespace = canonicalNamespace ? foldAgentBrowserFilesystemIdentity(canonicalNamespace, platform) : undefined;
172
- const canonicalSessionName = foldAgentBrowserFilesystemIdentity(sessionName, platform);
173
- return identityNamespace ? `${identityNamespace}\0${canonicalSessionName}` : canonicalSessionName;
174
- }
175
- export function isAgentBrowserSessionIdentityKeyInNamespace(identityKey, namespace) {
176
- const prefix = getAgentBrowserSessionIdentityKey("", namespace);
177
- return prefix ? identityKey.startsWith(prefix) : !identityKey.includes("\0");
178
- }
179
- export function deleteIdentityKeysInNamespace(entries, namespace) {
180
- for (const key of entries.keys()) {
181
- if (isAgentBrowserSessionIdentityKeyInNamespace(key, namespace))
182
- entries.delete(key);
183
- }
184
- }
185
149
  /** Mirror upstream global parsing: full argv, no `--` sentinel, and only global value payloads are skipped. */
186
150
  export function scanUpstreamGlobalFlagOccurrences(args, targetFlag) {
187
151
  const occurrences = [];
@@ -196,8 +160,10 @@ export function scanUpstreamGlobalFlagOccurrences(args, targetFlag) {
196
160
  index += 1;
197
161
  continue;
198
162
  }
199
- if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) && ["true", "false"].includes(args[index + 1] ?? ""))
163
+ if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) &&
164
+ ["true", "false"].includes(args[index + 1] ?? "")) {
200
165
  index += 1;
166
+ }
201
167
  }
202
168
  return occurrences;
203
169
  }
@@ -209,45 +175,53 @@ export function extractExplicitNamespace(args) {
209
175
  }
210
176
  export function resolveAgentBrowserNamespace(args, envValue) {
211
177
  const occurrences = scanUpstreamGlobalFlagOccurrences(args, "--namespace");
212
- if (occurrences.length > 0)
178
+ if (occurrences.length > 0) {
213
179
  return canonicalizeAgentBrowserNamespace(occurrences.at(-1)?.value) ?? "";
180
+ }
214
181
  return canonicalizeAgentBrowserNamespace(envValue);
215
182
  }
183
+ function getRestoreFlag(token, next, seenCommand, sessionName) {
184
+ if (token.startsWith("--restore=")) {
185
+ const requested = token.slice("--restore=".length);
186
+ return { key: requested.length > 0 ? requested : sessionName, consumed: 0 };
187
+ }
188
+ if (token !== "--restore") {
189
+ return undefined;
190
+ }
191
+ if (!seenCommand && optionalGlobalValueFlagConsumesNext(token, next) && next !== undefined) {
192
+ return { key: next, consumed: 1 };
193
+ }
194
+ return { key: sessionName, consumed: 0 };
195
+ }
216
196
  /** Mirror upstream's optional restore value and full-argv last-wins parsing. */
217
197
  export function extractRequestedRestoreKey(args, sessionName, envValue) {
218
- let restoreKey = envValue || null;
198
+ let restoreKey = envValue !== undefined && envValue.length > 0 ? envValue : null;
219
199
  let seenCommand = false;
220
200
  for (let index = 0; index < args.length; index += 1) {
221
201
  const token = args[index];
222
- if (token.startsWith("--restore=")) {
223
- restoreKey = token.slice("--restore=".length) || sessionName;
224
- continue;
225
- }
226
- if (token === "--restore") {
227
- if (!seenCommand && optionalGlobalValueFlagConsumesNext(token, args[index + 1])) {
228
- restoreKey = args[index + 1];
229
- index += 1;
230
- }
231
- else {
232
- restoreKey = sessionName;
233
- }
202
+ const restore = getRestoreFlag(token, args[index + 1], seenCommand, sessionName);
203
+ if (restore !== undefined) {
204
+ restoreKey = restore.key;
205
+ index += restore.consumed;
234
206
  continue;
235
207
  }
236
208
  if (PREVALIDATED_VALUE_FLAGS.has(token)) {
237
209
  index += 1;
238
210
  continue;
239
211
  }
240
- if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) && ["true", "false"].includes(args[index + 1] ?? "")) {
212
+ if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token) &&
213
+ ["true", "false"].includes(args[index + 1] ?? "")) {
241
214
  index += 1;
242
215
  continue;
243
216
  }
244
- if (isKnownCommandToken(token))
217
+ if (isKnownCommandToken(token)) {
245
218
  seenCommand = true;
219
+ }
246
220
  }
247
221
  return restoreKey;
248
222
  }
249
223
  function getFlagName(token) {
250
- return token.split("=", 1)[0] ?? token;
224
+ return token.split("=", 1).at(0) ?? token;
251
225
  }
252
226
  export function isNonFlagToken(token) {
253
227
  return typeof token === "string" && !token.startsWith("-");
@@ -258,53 +232,66 @@ export function hasOnlyBooleanFlags(tokens, allowedFlags) {
258
232
  export function hasOnlyOptionFlags(tokens, allowedBooleanFlags, allowedValueFlags) {
259
233
  for (let index = 0; index < tokens.length; index += 1) {
260
234
  const token = tokens[index];
261
- if (!token.startsWith("-"))
235
+ if (!token.startsWith("-")) {
262
236
  return false;
237
+ }
263
238
  const flagName = getFlagName(token);
264
- if (allowedBooleanFlags.has(flagName))
239
+ if (allowedBooleanFlags.has(flagName)) {
265
240
  continue;
266
- if (!allowedValueFlags.has(flagName))
241
+ }
242
+ if (!allowedValueFlags.has(flagName)) {
267
243
  return false;
268
- if (token.includes("="))
244
+ }
245
+ if (token.includes("=")) {
269
246
  continue;
270
- const value = tokens[index + 1];
271
- if (!isNonFlagToken(value))
247
+ }
248
+ const value = tokens.at(index + 1);
249
+ if (!isNonFlagToken(value)) {
272
250
  return false;
251
+ }
273
252
  index += 1;
274
253
  }
275
254
  return true;
276
255
  }
277
256
  export function optionalGlobalValueFlagConsumesNext(flag, nextToken) {
278
- if (!OPTIONAL_GLOBAL_VALUE_FLAGS.has(flag) || nextToken === undefined || nextToken.startsWith("-"))
257
+ if (!OPTIONAL_GLOBAL_VALUE_FLAGS.has(flag) ||
258
+ nextToken === undefined ||
259
+ nextToken.startsWith("-")) {
279
260
  return false;
261
+ }
280
262
  return !isKnownCommandToken(nextToken);
281
263
  }
264
+ function globalFlagWidth(token, next, seenCommand) {
265
+ if (token.startsWith("--restore=")) {
266
+ return 1;
267
+ }
268
+ if (token === "--restore") {
269
+ return !seenCommand && optionalGlobalValueFlagConsumesNext(token, next) ? 2 : 1;
270
+ }
271
+ if (PREVALIDATED_VALUE_FLAGS.has(token)) {
272
+ return 2;
273
+ }
274
+ if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token)) {
275
+ return ["true", "false"].includes(next ?? "") ? 2 : 1;
276
+ }
277
+ return 0;
278
+ }
282
279
  export function projectUpstreamGlobalFlags(args) {
283
280
  const indices = [];
284
281
  const tokens = [];
285
282
  let seenCommand = false;
286
283
  for (let index = 0; index < args.length; index += 1) {
287
284
  const token = args[index];
288
- if (token.startsWith("--restore="))
289
- continue;
290
- if (token === "--restore") {
291
- if (!seenCommand && optionalGlobalValueFlagConsumesNext(token, args[index + 1]))
292
- index += 1;
293
- continue;
294
- }
295
- if (PREVALIDATED_VALUE_FLAGS.has(token)) {
296
- index += 1;
297
- continue;
298
- }
299
- if (GLOBAL_BOOLEAN_FLAGS_WITH_OPTIONAL_VALUES.has(token)) {
300
- if (["true", "false"].includes(args[index + 1] ?? ""))
301
- index += 1;
285
+ const width = globalFlagWidth(token, args[index + 1], seenCommand);
286
+ if (width > 0) {
287
+ index += width - 1;
302
288
  continue;
303
289
  }
304
290
  tokens.push(token);
305
291
  indices.push(index);
306
- if (isKnownCommandToken(token))
292
+ if (isKnownCommandToken(token)) {
307
293
  seenCommand = true;
294
+ }
308
295
  }
309
296
  return { indices, tokens };
310
297
  }
@@ -317,14 +304,16 @@ export function stripSessionlessShapeGlobalFlags(commandTokens) {
317
304
  for (let index = 0; index < commandTokens.length; index += 1) {
318
305
  const token = commandTokens[index];
319
306
  const flagName = getFlagName(token);
320
- if (token === "--json")
307
+ if (token === "--json") {
321
308
  continue;
309
+ }
322
310
  if ((flagName === "--session" || flagName === "--namespace") && !token.includes("=")) {
323
311
  index += 1;
324
312
  continue;
325
313
  }
326
- if (token.startsWith("--session=") || token.startsWith("--namespace="))
314
+ if (token.startsWith("--session=") || token.startsWith("--namespace=")) {
327
315
  continue;
316
+ }
328
317
  stripped.push(token);
329
318
  }
330
319
  return stripped;