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
@@ -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;