pi-agent-browser-native 0.9.3 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/CHANGELOG.md +106 -5
  2. package/README.md +58 -791
  3. package/dist/extensions/agent-browser/index.js +43101 -2031
  4. package/dist/extensions/agent-browser/lib/argv-descriptor.js +49 -26
  5. package/dist/extensions/agent-browser/lib/argv-grammar.js +82 -93
  6. package/dist/extensions/agent-browser/lib/bash-guard.js +129 -126
  7. package/dist/extensions/agent-browser/lib/batch-lifecycle.js +112 -51
  8. package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +61 -0
  9. package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +232 -0
  10. package/dist/extensions/agent-browser/lib/browser-execution-claims.js +202 -0
  11. package/dist/extensions/agent-browser/lib/browser-execution-identity.js +77 -0
  12. package/dist/extensions/agent-browser/lib/browser-journal-branch.js +98 -0
  13. package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +1 -0
  14. package/dist/extensions/agent-browser/lib/browser-journal-projection.js +221 -0
  15. package/dist/extensions/agent-browser/lib/browser-journal-reader.js +89 -0
  16. package/dist/extensions/agent-browser/lib/browser-journal-replay.js +246 -0
  17. package/dist/extensions/agent-browser/lib/browser-journal.js +103 -394
  18. package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +220 -0
  19. package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +282 -0
  20. package/dist/extensions/agent-browser/lib/browser-legacy-types.js +1 -0
  21. package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +217 -0
  22. package/dist/extensions/agent-browser/lib/browser-session-conversion.js +80 -335
  23. package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +35 -0
  24. package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +166 -0
  25. package/dist/extensions/agent-browser/lib/browser-transcript.js +137 -82
  26. package/dist/extensions/agent-browser/lib/browser-value-parsing.js +15 -0
  27. package/dist/extensions/agent-browser/lib/command-capabilities.js +340 -0
  28. package/dist/extensions/agent-browser/lib/command-policy.js +107 -88
  29. package/dist/extensions/agent-browser/lib/command-taxonomy.js +49 -322
  30. package/dist/extensions/agent-browser/lib/config-policy.js +138 -343
  31. package/dist/extensions/agent-browser/lib/config-providers.js +71 -0
  32. package/dist/extensions/agent-browser/lib/config-validation.js +231 -0
  33. package/dist/extensions/agent-browser/lib/config.js +20 -8
  34. package/dist/extensions/agent-browser/lib/electron/cdp.js +20 -8
  35. package/dist/extensions/agent-browser/lib/electron/cleanup.js +128 -83
  36. package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +109 -0
  37. package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +136 -0
  38. package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +90 -0
  39. package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +93 -0
  40. package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +162 -0
  41. package/dist/extensions/agent-browser/lib/electron/discovery-types.js +2 -0
  42. package/dist/extensions/agent-browser/lib/electron/discovery.js +140 -549
  43. package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +102 -0
  44. package/dist/extensions/agent-browser/lib/electron/launch-process.js +209 -0
  45. package/dist/extensions/agent-browser/lib/electron/launch-types.js +2 -0
  46. package/dist/extensions/agent-browser/lib/electron/launch.js +261 -355
  47. package/dist/extensions/agent-browser/lib/executable-path.js +21 -12
  48. package/dist/extensions/agent-browser/lib/execution-cwd.js +35 -18
  49. package/dist/extensions/agent-browser/lib/fs-utils.js +1 -9
  50. package/dist/extensions/agent-browser/lib/input-modes/electron.js +162 -121
  51. package/dist/extensions/agent-browser/lib/input-modes/job.js +123 -317
  52. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +116 -0
  53. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +132 -0
  54. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +57 -0
  55. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +151 -0
  56. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +142 -0
  57. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +58 -412
  58. package/dist/extensions/agent-browser/lib/input-modes/params.js +86 -40
  59. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +268 -0
  60. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +117 -0
  61. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +396 -0
  62. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +86 -0
  63. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +1 -0
  64. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +60 -0
  65. package/dist/extensions/agent-browser/lib/input-modes/script.js +60 -409
  66. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +218 -128
  67. package/dist/extensions/agent-browser/lib/input-modes/shared.js +15 -4
  68. package/dist/extensions/agent-browser/lib/input-modes/types.js +56 -7
  69. package/dist/extensions/agent-browser/lib/json-schema.js +22 -10
  70. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +17 -5
  71. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +92 -425
  72. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +58 -0
  73. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +244 -0
  74. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +84 -0
  75. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +119 -0
  76. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +83 -0
  77. package/dist/extensions/agent-browser/lib/managed-session-restore.js +168 -300
  78. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +277 -0
  79. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +128 -305
  80. package/dist/extensions/agent-browser/lib/managed-session-storage.js +56 -253
  81. package/dist/extensions/agent-browser/lib/native-confirmation.js +140 -0
  82. package/dist/extensions/agent-browser/lib/native-output.js +43 -9
  83. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +106 -59
  84. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +14 -6
  85. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +109 -57
  86. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +82 -0
  87. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +164 -60
  88. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +31 -0
  89. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +152 -781
  90. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +203 -0
  91. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +109 -0
  92. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +119 -0
  93. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +147 -0
  94. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +144 -0
  95. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +123 -0
  96. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +1 -0
  97. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +156 -0
  98. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +187 -0
  99. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +39 -0
  100. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +89 -0
  101. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +97 -0
  102. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +106 -0
  103. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +110 -0
  104. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +41 -538
  105. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +199 -154
  106. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +290 -0
  107. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +167 -0
  108. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +108 -0
  109. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +127 -205
  110. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +65 -0
  111. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +1 -0
  112. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +120 -0
  113. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +113 -30
  114. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +109 -28
  115. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +150 -0
  116. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +147 -253
  117. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +147 -0
  118. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +59 -24
  119. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +159 -0
  120. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +131 -0
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +1 -0
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +93 -0
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +42 -0
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +242 -0
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +75 -0
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +92 -0
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +254 -0
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +121 -0
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +130 -0
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +114 -0
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +121 -0
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +222 -0
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +68 -0
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +176 -1123
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +191 -0
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +152 -0
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +182 -0
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +150 -0
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +1 -0
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +1 -0
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +115 -0
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +256 -0
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +1 -0
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +256 -0
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +1 -0
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +93 -0
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +113 -0
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +1 -0
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +316 -0
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +28 -0
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +1 -0
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +142 -0
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +1 -0
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +333 -0
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +1 -0
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +71 -0
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +201 -0
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +183 -0
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +200 -0
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +142 -0
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +18 -968
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +23 -13
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +198 -0
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +1 -0
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +154 -0
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +68 -151
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +14 -0
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +169 -46
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +130 -0
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +212 -0
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +61 -0
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +187 -0
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +169 -0
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +228 -0
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +77 -765
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +182 -0
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +256 -0
  178. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +108 -0
  179. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +39 -0
  180. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +119 -0
  181. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +93 -0
  182. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +58 -0
  183. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +78 -0
  184. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +1 -0
  185. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +106 -0
  186. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +48 -821
  187. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +86 -0
  188. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +68 -0
  189. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +169 -0
  190. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +182 -0
  191. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +161 -0
  192. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +167 -0
  193. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +22 -10
  194. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +211 -0
  195. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +23 -0
  196. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +99 -0
  197. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +275 -0
  198. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +280 -0
  199. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +303 -0
  200. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +36 -0
  201. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +335 -0
  202. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +227 -0
  203. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +1 -0
  204. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +204 -0
  205. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +139 -0
  206. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +24 -0
  207. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +98 -0
  208. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +295 -0
  209. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +41 -0
  210. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +7 -0
  211. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +102 -0
  212. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +133 -0
  213. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +120 -0
  214. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +180 -0
  215. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +290 -0
  216. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +1 -0
  217. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +269 -0
  218. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +113 -0
  219. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +146 -0
  220. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +58 -0
  221. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +62 -0
  222. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +54 -0
  223. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +1 -0
  224. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +261 -185
  225. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +62 -0
  226. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +144 -0
  227. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +77 -0
  228. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +210 -157
  229. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +124 -58
  230. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +197 -99
  231. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +199 -96
  232. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +55 -0
  233. package/dist/extensions/agent-browser/lib/page-target-batch.js +118 -0
  234. package/dist/extensions/agent-browser/lib/page-target-guards.js +50 -0
  235. package/dist/extensions/agent-browser/lib/page-target-navigation.js +104 -0
  236. package/dist/extensions/agent-browser/lib/page-target-validation.js +55 -246
  237. package/dist/extensions/agent-browser/lib/parsing.js +13 -4
  238. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +133 -68
  239. package/dist/extensions/agent-browser/lib/playbook.js +16 -12
  240. package/dist/extensions/agent-browser/lib/process-child.js +284 -0
  241. package/dist/extensions/agent-browser/lib/process-environment.js +13 -6
  242. package/dist/extensions/agent-browser/lib/process-errors.js +23 -0
  243. package/dist/extensions/agent-browser/lib/process-identity.js +47 -15
  244. package/dist/extensions/agent-browser/lib/process-socket-storage.js +256 -0
  245. package/dist/extensions/agent-browser/lib/process-stdout.js +74 -0
  246. package/dist/extensions/agent-browser/lib/process.js +145 -536
  247. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +287 -0
  248. package/dist/extensions/agent-browser/lib/prompt-policy.js +15 -194
  249. package/dist/extensions/agent-browser/lib/read-command.js +41 -0
  250. package/dist/extensions/agent-browser/lib/read-confirmation.js +131 -68
  251. package/dist/extensions/agent-browser/lib/recording-reservations.js +118 -45
  252. package/dist/extensions/agent-browser/lib/redaction-fields.js +75 -0
  253. package/dist/extensions/agent-browser/lib/redaction-json.js +149 -0
  254. package/dist/extensions/agent-browser/lib/redaction-url.js +88 -0
  255. package/dist/extensions/agent-browser/lib/results/action-contracts.js +1 -0
  256. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +28 -271
  257. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +1 -0
  258. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +133 -0
  259. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +96 -94
  260. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +73 -0
  261. package/dist/extensions/agent-browser/lib/results/categories.js +111 -54
  262. package/dist/extensions/agent-browser/lib/results/confirmation.js +29 -13
  263. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +62 -27
  264. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +83 -0
  265. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +48 -0
  266. package/dist/extensions/agent-browser/lib/results/envelope.js +90 -67
  267. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +1 -0
  268. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +180 -0
  269. package/dist/extensions/agent-browser/lib/results/network-routes.js +86 -45
  270. package/dist/extensions/agent-browser/lib/results/network.js +35 -12
  271. package/dist/extensions/agent-browser/lib/results/next-actions.js +49 -19
  272. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +320 -0
  273. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +138 -0
  274. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +113 -0
  275. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +145 -0
  276. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +99 -555
  277. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +1 -0
  278. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +118 -0
  279. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +68 -0
  280. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +135 -0
  281. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +227 -0
  282. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +91 -0
  283. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +91 -460
  284. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +9 -5
  285. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +216 -0
  286. package/dist/extensions/agent-browser/lib/results/presentation/common.js +26 -9
  287. package/dist/extensions/agent-browser/lib/results/presentation/content.js +86 -29
  288. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +67 -0
  289. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +79 -0
  290. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +199 -0
  291. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +75 -0
  292. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +216 -0
  293. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +124 -0
  294. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +64 -0
  295. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +209 -0
  296. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +69 -0
  297. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +222 -0
  298. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +103 -1052
  299. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +70 -0
  300. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +130 -60
  301. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +1 -0
  302. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +60 -145
  303. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +147 -88
  304. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +75 -0
  305. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +1 -0
  306. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +127 -0
  307. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +120 -0
  308. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +77 -0
  309. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +51 -0
  310. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +116 -240
  311. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +35 -21
  312. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +109 -73
  313. package/dist/extensions/agent-browser/lib/results/presentation/source.js +109 -0
  314. package/dist/extensions/agent-browser/lib/results/presentation.js +17 -261
  315. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +1 -0
  316. package/dist/extensions/agent-browser/lib/results/recording.js +52 -14
  317. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +14 -5
  318. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +30 -22
  319. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +83 -0
  320. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +119 -119
  321. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +266 -0
  322. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +32 -0
  323. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +104 -71
  324. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +31 -11
  325. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +125 -66
  326. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +26 -7
  327. package/dist/extensions/agent-browser/lib/results/snapshot.js +28 -248
  328. package/dist/extensions/agent-browser/lib/results/text.js +16 -5
  329. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +133 -0
  330. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +81 -0
  331. package/dist/extensions/agent-browser/lib/runtime-contracts.js +1 -0
  332. package/dist/extensions/agent-browser/lib/runtime-redaction.js +118 -0
  333. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +144 -0
  334. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +76 -0
  335. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +114 -0
  336. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +123 -0
  337. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +65 -0
  338. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +28 -0
  339. package/dist/extensions/agent-browser/lib/runtime.js +137 -1041
  340. package/dist/extensions/agent-browser/lib/session-identity.js +51 -0
  341. package/dist/extensions/agent-browser/lib/session-page-observation.js +357 -0
  342. package/dist/extensions/agent-browser/lib/session-page-state.js +178 -333
  343. package/dist/extensions/agent-browser/lib/session-page-types.js +1 -0
  344. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +81 -0
  345. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +7 -0
  346. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +234 -0
  347. package/dist/extensions/agent-browser/lib/temp-root.js +211 -0
  348. package/dist/extensions/agent-browser/lib/temp.js +33 -446
  349. package/dist/extensions/agent-browser/lib/tool-surface.js +94 -24
  350. package/dist/extensions/agent-browser/lib/upstream-version.js +3 -2
  351. package/dist/extensions/agent-browser/lib/web-search-providers.js +193 -0
  352. package/dist/extensions/agent-browser/lib/web-search-request.js +102 -0
  353. package/dist/extensions/agent-browser/lib/web-search-results.js +281 -0
  354. package/dist/extensions/agent-browser/lib/web-search-schema.js +82 -0
  355. package/dist/extensions/agent-browser/lib/web-search.js +124 -614
  356. package/dist/extensions/agent-browser/lib/webmcp-observation.js +13 -6
  357. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +63 -37
  358. package/dist/extensions/agent-browser/script-worker.js +80 -43
  359. package/dist/scripts/agent-browser-target.mjs +4 -2
  360. package/docs/ARCHITECTURE.md +19 -6
  361. package/docs/CODE_QUALITY.md +267 -0
  362. package/docs/COMMAND_REFERENCE.md +272 -241
  363. package/docs/ELECTRON.md +77 -46
  364. package/docs/REFERENCE.md +869 -0
  365. package/docs/RELEASE.md +25 -22
  366. package/docs/REQUIREMENTS.md +2 -1
  367. package/docs/SUPPORT_MATRIX.md +81 -79
  368. package/docs/TOOL_CONTRACT.md +158 -125
  369. package/docs/platform-smoke.md +8 -8
  370. package/package.json +144 -120
  371. package/scripts/agent-browser-capability-baseline.mjs +361 -957
  372. package/scripts/agent-browser-target.mjs +6 -2
  373. package/scripts/build.mjs +37 -8
  374. package/scripts/capability-core-commands.mjs +193 -0
  375. package/scripts/capability-options.mjs +283 -0
  376. package/scripts/capability-samples.mjs +133 -0
  377. package/scripts/capability-section.mjs +11 -0
  378. package/scripts/config.mjs +235 -132
  379. package/scripts/convert-browser-session.mjs +30 -9
  380. package/scripts/doctor-sources.mjs +195 -0
  381. package/scripts/doctor.mjs +94 -249
  382. package/scripts/platform-smoke/artifacts.mjs +38 -11
  383. package/scripts/platform-smoke/commands.mjs +104 -0
  384. package/scripts/platform-smoke/crabbox-runner.mjs +167 -80
  385. package/scripts/platform-smoke/doctor-support.mjs +157 -0
  386. package/scripts/platform-smoke/doctor-windows.mjs +230 -0
  387. package/scripts/platform-smoke/doctor.mjs +212 -320
  388. package/scripts/platform-smoke/lease-evidence.mjs +132 -0
  389. package/scripts/platform-smoke/linux-image/Dockerfile +8 -2
  390. package/scripts/platform-smoke/suite-checks.mjs +98 -0
  391. package/scripts/platform-smoke/suite-evidence.mjs +281 -0
  392. package/scripts/platform-smoke/targets.mjs +154 -472
  393. package/scripts/platform-smoke.mjs +55 -40
  394. package/scripts/prepare.mjs +16 -7
@@ -0,0 +1,133 @@
1
+ /** Audited upstream source evidence and the native help commands sampled for drift. */
2
+ export const sourceEvidence = Object.freeze({
3
+ repository: "vercel-labs/agent-browser",
4
+ upstreamHead: "aff6125c023b810ea3f2e5deec5379e9a4270bdc",
5
+ upstreamPackageVersion: "0.38.1",
6
+ inspectedSources: Object.freeze([
7
+ "agent-browser --version",
8
+ "agent-browser --help",
9
+ "selected agent-browser <command> --help output",
10
+ "agent-browser a11y --help",
11
+ "agent-browser mcp --help",
12
+ "agent-browser plugin --help",
13
+ "agent-browser skills list",
14
+ "agent-browser skills get core --full",
15
+ "agent-browser skills get derive-client --full",
16
+ "agent-browser skills get webmcp-gen --full",
17
+ "README.md",
18
+ "CHANGELOG.md",
19
+ "agent-browser.schema.json",
20
+ "bin/agent-browser.js",
21
+ "cli/src/ca_bundle.rs",
22
+ "cli/src/commands.rs",
23
+ "cli/src/mcp.rs",
24
+ "cli/src/flags.rs",
25
+ "cli/src/read.rs",
26
+ "cli/src/doctor/ffmpeg.rs",
27
+ "cli/src/doctor/webgpu.rs",
28
+ "cli/src/native/actions.rs",
29
+ "cli/src/native/a11y/mod.rs",
30
+ "cli/src/native/browser.rs",
31
+ "cli/src/native/tab_binding.rs",
32
+ "cli/src/native/daemon.rs",
33
+ "cli/src/native/element.rs",
34
+ "cli/src/native/recording.rs",
35
+ "cli/src/native/snapshot.rs",
36
+ "cli/src/native/interaction.rs",
37
+ "cli/src/native/screenshot.rs",
38
+ "cli/src/native/stream/cdp_loop.rs",
39
+ "cli/src/native/stream/dashboard.rs",
40
+ "cli/src/native/test_fixtures/webmcp_frame_probe.html",
41
+ "cli/src/native/test_fixtures/webmcp_probe.html",
42
+ "cli/src/native/webmcp.rs",
43
+ "cli/src/output.rs",
44
+ "docs/src/app/webgpu/page.mdx",
45
+ "docs/src/app/webmcp/page.mdx",
46
+ "docs/src/app/network/page.mdx",
47
+ "docs/src/app/proxy/page.mdx",
48
+ "docs/src/app/selectors/page.mdx",
49
+ "docs/src/app/skills/page.mdx",
50
+ "docs/src/app/commands/page.mdx",
51
+ "skill-data/derive-client/SKILL.md",
52
+ "skill-data/core/SKILL.md",
53
+ "skill-data/core/references/video-recording.md",
54
+ "skill-data/protected-vercel-deployments/SKILL.md",
55
+ "skill-data/webmcp-gen/SKILL.md",
56
+ "test/launcher.test.mjs",
57
+ "packages/@agent-browser/eve/README.md",
58
+ "packages/@agent-browser/eve/package.json",
59
+ "packages/@agent-browser/eve/test/extension.test.mjs",
60
+ "packages/@agent-browser/sandbox/README.md",
61
+ "packages/@agent-browser/sandbox/src/shared.ts",
62
+ "packages/@agent-browser/sandbox/src/vercel.ts",
63
+ "packages/@agent-browser/sandbox/src/eve.ts",
64
+ ]),
65
+ });
66
+
67
+ const helpCommand = (label, args) => Object.freeze({ label, args: Object.freeze(args) });
68
+ export const helpCommands = Object.freeze([
69
+ helpCommand("root help", ["--help"]),
70
+ helpCommand("skills help", ["skills", "--help"]),
71
+ helpCommand("skills list", ["skills", "list"]),
72
+ helpCommand("core skill full", ["skills", "get", "core", "--full"]),
73
+ helpCommand("vercel sandbox skill full", ["skills", "get", "vercel-sandbox", "--full"]),
74
+ helpCommand("protected Vercel deployments skill full", [
75
+ "skills",
76
+ "get",
77
+ "protected-vercel-deployments",
78
+ "--full",
79
+ ]),
80
+ helpCommand("WebMCP generation skill full", ["skills", "get", "webmcp-gen", "--full"]),
81
+ helpCommand("open help", ["open", "--help"]),
82
+ helpCommand("read help", ["read", "--help"]),
83
+ helpCommand("click help", ["click", "--help"]),
84
+ helpCommand("key help", ["key", "--help"]),
85
+ helpCommand("scroll help", ["scroll", "--help"]),
86
+ helpCommand("scrollinto help", ["scrollinto", "--help"]),
87
+ helpCommand("keydown help", ["keydown", "--help"]),
88
+ helpCommand("keyup help", ["keyup", "--help"]),
89
+ helpCommand("get help", ["get", "--help"]),
90
+ helpCommand("is help", ["is", "--help"]),
91
+ helpCommand("mouse help", ["mouse", "--help"]),
92
+ helpCommand("drag help", ["drag", "--help"]),
93
+ helpCommand("set help", ["set", "--help"]),
94
+ helpCommand("tab help", ["tab", "--help"]),
95
+ helpCommand("snapshot help", ["snapshot", "--help"]),
96
+ helpCommand("eval help", ["eval", "--help"]),
97
+ helpCommand("wait help", ["wait", "--help"]),
98
+ helpCommand("screenshot help", ["screenshot", "--help"]),
99
+ helpCommand("pdf help", ["pdf", "--help"]),
100
+ helpCommand("close help", ["close", "--help"]),
101
+ helpCommand("find help", ["find", "--help"]),
102
+ helpCommand("network help", ["network", "--help"]),
103
+ helpCommand("cookies help", ["cookies", "--help"]),
104
+ helpCommand("storage help", ["storage", "--help"]),
105
+ helpCommand("state help", ["state", "--help"]),
106
+ helpCommand("session help", ["session", "--help"]),
107
+ helpCommand("frame help", ["frame", "--help"]),
108
+ helpCommand("dialog help", ["dialog", "--help"]),
109
+ helpCommand("window help", ["window", "--help"]),
110
+ helpCommand("keyboard help", ["keyboard", "--help"]),
111
+ helpCommand("batch help", ["batch", "--help"]),
112
+ helpCommand("auth help", ["auth", "--help"]),
113
+ helpCommand("stream help", ["stream", "--help"]),
114
+ helpCommand("dashboard help", ["dashboard", "--help"]),
115
+ helpCommand("chat help", ["chat", "--help"]),
116
+ helpCommand("doctor help", ["doctor", "--help"]),
117
+ helpCommand("diff help", ["diff", "--help"]),
118
+ helpCommand("trace help", ["trace", "--help"]),
119
+ helpCommand("profiler help", ["profiler", "--help"]),
120
+ helpCommand("record help", ["record", "--help"]),
121
+ helpCommand("console help", ["console", "--help"]),
122
+ helpCommand("errors help", ["errors", "--help"]),
123
+ helpCommand("a11y help", ["a11y", "--help"]),
124
+ helpCommand("clipboard help", ["clipboard", "--help"]),
125
+ helpCommand("tap help", ["tap", "--help"]),
126
+ helpCommand("swipe help", ["swipe", "--help"]),
127
+ helpCommand("device help", ["device", "--help"]),
128
+ helpCommand("install help", ["install", "--help"]),
129
+ helpCommand("upgrade help", ["upgrade", "--help"]),
130
+ helpCommand("profiles help", ["profiles", "--help"]),
131
+ helpCommand("mcp help", ["mcp", "--help"]),
132
+ helpCommand("plugin help", ["plugin", "--help"]),
133
+ ]);
@@ -0,0 +1,11 @@
1
+ /** Immutable help/document inventory section construction for the canonical capability baseline. */
2
+ export const root = (token) => ["root help", token];
3
+ export const section = (id, title, docTokens, upstreamExpectations = []) =>
4
+ Object.freeze({
5
+ id,
6
+ title,
7
+ docTokens: Object.freeze(docTokens),
8
+ upstreamExpectations: Object.freeze(
9
+ upstreamExpectations.map(([help, token]) => Object.freeze({ help, token })),
10
+ ),
11
+ });
@@ -10,8 +10,13 @@ import { dirname } from "node:path";
10
10
  import process from "node:process";
11
11
 
12
12
  async function loadConfigPolicyModule() {
13
- const sourcePolicyUrl = new URL("../extensions/agent-browser/lib/config-policy.js", import.meta.url);
14
- if (existsSync(sourcePolicyUrl)) return import(sourcePolicyUrl.href);
13
+ const sourcePolicyUrl = new URL(
14
+ "../extensions/agent-browser/lib/config-policy.js",
15
+ import.meta.url,
16
+ );
17
+ if (existsSync(sourcePolicyUrl)) {
18
+ return import(sourcePolicyUrl.href);
19
+ }
15
20
  return import("../dist/extensions/agent-browser/lib/config-policy.js");
16
21
  }
17
22
 
@@ -30,6 +35,7 @@ const {
30
35
  getWebSearchProviderLabel,
31
36
  isWebSearchProvider,
32
37
  loadAgentBrowserConfigStateSync,
38
+ parseAgentBrowserConfigJson,
33
39
  summarizeConfigFiles,
34
40
  } = await loadConfigPolicyModule();
35
41
 
@@ -46,22 +52,22 @@ function usage() {
46
52
  return `pi-agent-browser-native config helper
47
53
 
48
54
  Usage through npm exec:
49
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config paths
50
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config show
51
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search status
52
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search set-key --stdin --provider <exa|brave> [--global|--project]
53
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search set-env <ENV_VAR> [--provider brave|exa] [--global|--project]
54
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search set-command <command> --provider <exa|brave> [--global|--project]
55
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search clear --provider <exa|brave|all> [--global|--project]
56
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search prefer <exa|brave|auto> [--global|--project]
57
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search enable [--global|--project]
58
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config web-search disable [--global|--project]
59
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser profile status
60
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser profile set <name|path> [--policy explicit-only|authenticated-only|always] [--global|--project]
61
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser profile clear [--global|--project]
62
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser executable status
63
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser executable set <path> [--global|--project]
64
- npm exec --yes --package pi-agent-browser-native@latest -- pi-agent-browser-config browser executable clear [--global|--project]
55
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config paths
56
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config show
57
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search status
58
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search set-key --stdin --provider <exa|brave> [--global|--project]
59
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search set-env <ENV_VAR> [--provider brave|exa] [--global|--project]
60
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search set-command <command> --provider <exa|brave> [--global|--project]
61
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search clear --provider <exa|brave|all> [--global|--project]
62
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search prefer <exa|brave|auto> [--global|--project]
63
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search enable [--global|--project]
64
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config web-search disable [--global|--project]
65
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser profile status
66
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser profile set <name|path> [--policy explicit-only|authenticated-only|always] [--global|--project]
67
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser profile clear [--global|--project]
68
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser executable status
69
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser executable set <path> [--global|--project]
70
+ npm exec --yes --package pi-agent-browser-native -- pi-agent-browser-config browser executable clear [--global|--project]
65
71
 
66
72
  Notes:
67
73
  Global config: ~/.pi/config/pi-agent-browser-native/config.json
@@ -81,28 +87,39 @@ function parseArgs(argv) {
81
87
  positional.push(arg);
82
88
  continue;
83
89
  }
84
- if (arg === "--global" || arg === "--project" || arg === "--stdin" || arg === "--help") {
90
+ if (["--global", "--project", "--stdin", "--help"].includes(arg)) {
85
91
  flags.set(arg, true);
86
92
  continue;
87
93
  }
88
94
  if (arg === "--policy" || arg === "--provider") {
89
95
  const value = argv[index + 1];
90
- if (!value || value.startsWith("--")) throw new UsageError(`${arg} requires a value.`);
96
+ if (!value || value.startsWith("--")) {
97
+ throw new UsageError(`${arg} requires a value.`);
98
+ }
91
99
  flags.set(arg, value);
92
100
  index += 1;
93
101
  continue;
94
102
  }
95
103
  throw new UsageError(`Unknown option: ${arg}`);
96
104
  }
97
- if (flags.get("--global") && flags.get("--project")) throw new UsageError("Use only one of --global or --project.");
105
+ if (flags.get("--global") && flags.get("--project")) {
106
+ throw new UsageError("Use only one of --global or --project.");
107
+ }
98
108
  return { flags, positional };
99
109
  }
100
110
 
101
111
  function readConfig(path) {
102
- if (!existsSync(path)) return { ...DEFAULT_CONFIG };
103
- const parsed = JSON.parse(readFileSync(path, "utf8"));
104
- if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error(`${path} must contain a JSON object.`);
105
- return { ...DEFAULT_CONFIG, ...parsed };
112
+ if (!existsSync(path)) {
113
+ return { ...DEFAULT_CONFIG };
114
+ }
115
+ const parsed = parseAgentBrowserConfigJson(readFileSync(path, "utf8"));
116
+ if (!parsed.ok) {
117
+ throw new Error(`${path}: ${parsed.error}`);
118
+ }
119
+ if (!parsed.value || typeof parsed.value !== "object" || Array.isArray(parsed.value)) {
120
+ throw new Error(`${path} must contain a JSON object.`);
121
+ }
122
+ return { ...DEFAULT_CONFIG, ...parsed.value };
106
123
  }
107
124
 
108
125
  function writeConfig(path, config) {
@@ -118,36 +135,60 @@ function writeConfig(path, config) {
118
135
 
119
136
  function selectWritePath(flags) {
120
137
  const paths = getAgentBrowserConfigPaths();
121
- if (flags.get("--project")) return { path: paths.project, scope: "project" };
138
+ if (flags.get("--project")) {
139
+ return { path: paths.project, scope: "project" };
140
+ }
122
141
  return { path: paths.global, scope: "global" };
123
142
  }
124
143
 
125
144
  function validateWebSearchProviderArg(provider, { allowAll = false } = {}) {
126
- if (isWebSearchProvider(provider) || (allowAll && provider === "all")) return provider;
127
- throw new UsageError(`--provider must be one of ${allowAll ? `${WEB_SEARCH_PROVIDERS.join(", ")}, all` : WEB_SEARCH_PROVIDERS.join(", ")}.`);
145
+ if (isWebSearchProvider(provider) || (allowAll && provider === "all")) {
146
+ return provider;
147
+ }
148
+ throw new UsageError(
149
+ `--provider must be one of ${allowAll ? `${WEB_SEARCH_PROVIDERS.join(", ")}, all` : WEB_SEARCH_PROVIDERS.join(", ")}.`,
150
+ );
128
151
  }
129
152
 
130
153
  function inferWebSearchProviderFromEnvName(envName) {
131
154
  for (const provider of WEB_SEARCH_PROVIDERS) {
132
- if (envName === getWebSearchProviderEnvVar(provider)) return provider;
155
+ if (envName === getWebSearchProviderEnvVar(provider)) {
156
+ return provider;
157
+ }
133
158
  }
134
- return undefined;
159
+ return;
135
160
  }
136
161
 
137
162
  function getWebSearchProvider(flags, options = {}) {
138
163
  const configured = flags.get("--provider");
139
- if (configured) return validateWebSearchProviderArg(configured, options);
164
+ if (configured) {
165
+ return validateWebSearchProviderArg(configured, options);
166
+ }
140
167
  const inferred = options.envName ? inferWebSearchProviderFromEnvName(options.envName) : undefined;
141
- if (inferred) return inferred;
142
- throw new UsageError(options.allowAll ? "--provider is required and must be exa, brave, or all." : "--provider is required and must be exa or brave.");
168
+ if (inferred) {
169
+ return inferred;
170
+ }
171
+ throw new UsageError(
172
+ options.allowAll
173
+ ? "--provider is required and must be exa, brave, or all."
174
+ : "--provider is required and must be exa or brave.",
175
+ );
143
176
  }
144
177
 
145
178
  function setWebSearchCredential(config, provider, value) {
146
- config.webSearch = { ...(config.webSearch ?? {}), [getWebSearchProviderConfigKey(provider)]: value };
179
+ return {
180
+ ...config,
181
+ webSearch: { ...config.webSearch, [getWebSearchProviderConfigKey(provider)]: value },
182
+ };
147
183
  }
148
184
 
149
185
  function clearWebSearchCredential(config, provider) {
150
- if (config.webSearch) delete config.webSearch[getWebSearchProviderConfigKey(provider)];
186
+ if (!config.webSearch) {
187
+ return config;
188
+ }
189
+ const webSearch = { ...config.webSearch };
190
+ delete webSearch[getWebSearchProviderConfigKey(provider)];
191
+ return { ...config, webSearch };
151
192
  }
152
193
 
153
194
  function printPaths() {
@@ -168,171 +209,233 @@ function printStatus() {
168
209
  console.log("");
169
210
  console.log("Effective config:");
170
211
  console.log(` webSearch.enabled: ${state.webSearchEnabled ? "true" : "false"}`);
171
- console.log(` webSearch.preferredProvider: ${state.config.webSearch?.preferredProvider ?? `auto (default ${DEFAULT_WEB_SEARCH_PROVIDER})`}`);
172
- console.log(` webSearch.defaultSearchType: ${state.config.webSearch?.defaultSearchType ?? "not configured (Exa auto)"}`);
212
+ console.log(
213
+ ` webSearch.preferredProvider: ${state.config.webSearch?.preferredProvider ?? `auto (default ${DEFAULT_WEB_SEARCH_PROVIDER})`}`,
214
+ );
215
+ console.log(
216
+ ` webSearch.defaultSearchType: ${state.config.webSearch?.defaultSearchType ?? "not configured (Exa auto)"}`,
217
+ );
173
218
  for (const provider of WEB_SEARCH_PROVIDERS) {
174
219
  const field = getWebSearchProviderConfigKey(provider);
175
- console.log(` webSearch.${field}: ${getCredentialSourceSummary(state.webSearchCredentialSources[provider], provider)}`);
220
+ console.log(
221
+ ` webSearch.${field}: ${getCredentialSourceSummary(state.webSearchCredentialSources[provider], provider)}`,
222
+ );
176
223
  }
177
224
  console.log(` browser.defaultProfile: ${formatBrowserProfileStatus(state)}`);
178
225
  console.log(` browser.executablePath: ${formatBrowserExecutableStatus(state)}`);
179
- if (state.layers.length === 0) console.log(" layers: none");
180
- if (state.warnings.length > 0) {
181
- console.log("");
182
- console.log("Warnings:");
183
- for (const warning of state.warnings) console.log(` - ${warning}`);
226
+ if (state.layers.length === 0) {
227
+ console.log(" layers: none");
184
228
  }
185
- if (state.errors.length > 0) {
229
+ printDiagnostics("Warnings", state.warnings);
230
+ printDiagnostics("Validation errors", state.errors);
231
+ }
232
+
233
+ function printDiagnostics(label, diagnostics) {
234
+ if (diagnostics.length > 0) {
186
235
  console.log("");
187
- console.log("Validation errors:");
188
- for (const error of state.errors) console.log(` - ${error}`);
236
+ console.log(`${label}:`);
237
+ for (const diagnostic of diagnostics) {
238
+ console.log(` - ${diagnostic}`);
239
+ }
189
240
  }
190
241
  }
191
242
 
192
243
  async function readSecretFromStdin(useStdin) {
193
- if (!useStdin) throw new UsageError("set-key requires --stdin so the key is not passed through argv or an echoed prompt.");
244
+ if (!useStdin) {
245
+ throw new UsageError(
246
+ "set-key requires --stdin so the key is not passed through argv or an echoed prompt.",
247
+ );
248
+ }
194
249
  let input = "";
195
- for await (const chunk of process.stdin) input += chunk;
250
+ for await (const chunk of process.stdin) {
251
+ input += chunk;
252
+ }
196
253
  const value = input.trim();
197
- if (!value) throw new UsageError("No key was provided on stdin.");
254
+ if (!value) {
255
+ throw new UsageError("No key was provided on stdin.");
256
+ }
198
257
  return value;
199
258
  }
200
259
 
201
260
  function mutateConfig(path, mutate) {
202
261
  const config = readConfig(path);
203
- mutate(config);
204
- writeConfig(path, config);
262
+ writeConfig(path, mutate(config));
205
263
  }
206
264
 
207
265
  async function handleWebSearch(args, flags) {
208
266
  const action = args[0];
267
+ if (action === "prefer" || action === "enable" || action === "disable") {
268
+ handleWebSearchPreference(action, args, flags);
269
+ return;
270
+ }
209
271
  if (action === "status") {
210
272
  printStatus();
211
273
  return;
212
274
  }
275
+ if (action === "clear") {
276
+ clearWebSearch(flags);
277
+ return;
278
+ }
279
+ await handleWebSearchCredential(action, args, flags);
280
+ }
281
+
282
+ async function handleWebSearchCredential(action, args, flags) {
213
283
  if (action === "set-key") {
214
284
  const provider = getWebSearchProvider(flags);
215
285
  const key = await readSecretFromStdin(Boolean(flags.get("--stdin")));
216
286
  const { path, scope } = selectWritePath(flags);
217
- mutateConfig(path, (config) => {
218
- setWebSearchCredential(config, provider, key);
219
- });
287
+ mutateConfig(path, (config) => setWebSearchCredential(config, provider, key));
220
288
  console.log(`Saved ${getWebSearchProviderLabel(provider)} key to ${scope} config: ${path}`);
221
289
  return;
222
290
  }
223
291
  if (action === "set-env") {
224
292
  const envName = args[1];
225
- if (!envName || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(envName)) throw new UsageError("set-env requires a valid environment variable name.");
293
+ if (!envName || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(envName)) {
294
+ throw new UsageError("set-env requires a valid environment variable name.");
295
+ }
226
296
  const provider = getWebSearchProvider(flags, { envName });
227
297
  const envReference = `$${envName}`;
228
298
  const { path, scope } = selectWritePath(flags);
229
- mutateConfig(path, (config) => {
230
- setWebSearchCredential(config, provider, envReference);
231
- });
299
+ mutateConfig(path, (config) => setWebSearchCredential(config, provider, envReference));
232
300
  console.log(`Saved ${getWebSearchProviderLabel(provider)} ${scope} env reference to: ${path}`);
233
301
  return;
234
302
  }
235
303
  if (action === "set-command") {
236
304
  const provider = getWebSearchProvider(flags);
237
305
  const command = args.slice(1).join(" ").trim();
238
- if (!command) throw new UsageError("set-command requires a command string.");
306
+ if (!command) {
307
+ throw new UsageError("set-command requires a command string.");
308
+ }
239
309
  const { path, scope } = selectWritePath(flags);
240
- mutateConfig(path, (config) => {
241
- setWebSearchCredential(config, provider, `!${command}`);
242
- });
310
+ mutateConfig(path, (config) => setWebSearchCredential(config, provider, `!${command}`));
243
311
  console.log(`Saved ${getWebSearchProviderLabel(provider)} ${scope} command source to: ${path}`);
244
312
  return;
245
313
  }
246
- if (action === "clear") {
247
- const provider = getWebSearchProvider(flags, { allowAll: true });
248
- const { path, scope } = selectWritePath(flags);
249
- mutateConfig(path, (config) => {
250
- if (provider === "all") {
251
- for (const entry of WEB_SEARCH_PROVIDERS) clearWebSearchCredential(config, entry);
252
- } else {
253
- clearWebSearchCredential(config, provider);
254
- }
255
- });
256
- console.log(`Cleared ${provider === "all" ? "all web-search" : getWebSearchProviderLabel(provider)} credential source in ${scope} config: ${path}`);
257
- return;
258
- }
314
+ throw new UsageError(`Unsupported web-search action: ${action ?? ""}`);
315
+ }
316
+
317
+ function clearWebSearch(flags) {
318
+ const provider = getWebSearchProvider(flags, { allowAll: true });
319
+ const { path, scope } = selectWritePath(flags);
320
+ mutateConfig(path, (config) => {
321
+ const providers = provider === "all" ? WEB_SEARCH_PROVIDERS : [provider];
322
+ return providers.reduce(clearWebSearchCredential, config);
323
+ });
324
+ console.log(
325
+ `Cleared ${provider === "all" ? "all web-search" : getWebSearchProviderLabel(provider)} credential source in ${scope} config: ${path}`,
326
+ );
327
+ }
328
+
329
+ function handleWebSearchPreference(action, args, flags) {
259
330
  if (action === "prefer") {
260
331
  const provider = args[1];
261
- if (!provider || (!isWebSearchProvider(provider) && provider !== "auto")) throw new UsageError("prefer requires exa, brave, or auto.");
332
+ if (!provider || (!isWebSearchProvider(provider) && provider !== "auto")) {
333
+ throw new UsageError("prefer requires exa, brave, or auto.");
334
+ }
262
335
  const { path, scope } = selectWritePath(flags);
263
336
  mutateConfig(path, (config) => {
264
- config.webSearch = { ...(config.webSearch ?? {}) };
265
- if (provider === "auto") delete config.webSearch.preferredProvider;
266
- else config.webSearch.preferredProvider = provider;
337
+ const webSearch = { ...config.webSearch };
338
+ if (provider === "auto") {
339
+ delete webSearch.preferredProvider;
340
+ } else {
341
+ webSearch.preferredProvider = provider;
342
+ }
343
+ return { ...config, webSearch };
267
344
  });
268
- console.log(`${provider === "auto" ? "Cleared" : "Saved"} web-search preferred provider in ${scope} config: ${path}`);
345
+ console.log(
346
+ `${provider === "auto" ? "Cleared" : "Saved"} web-search preferred provider in ${scope} config: ${path}`,
347
+ );
269
348
  return;
270
349
  }
271
350
  if (action === "enable" || action === "disable") {
272
351
  const { path, scope } = selectWritePath(flags);
273
- mutateConfig(path, (config) => {
274
- config.webSearch = { ...(config.webSearch ?? {}), enabled: action === "enable" };
275
- });
276
- console.log(`${action === "enable" ? "Enabled" : "Disabled"} agent_browser_web_search in ${scope} config: ${path}`);
352
+ mutateConfig(path, (config) => ({
353
+ ...config,
354
+ webSearch: { ...config.webSearch, enabled: action === "enable" },
355
+ }));
356
+ console.log(
357
+ `${action === "enable" ? "Enabled" : "Disabled"} agent_browser_web_search in ${scope} config: ${path}`,
358
+ );
277
359
  return;
278
360
  }
279
361
  throw new UsageError(`Unsupported web-search action: ${action ?? ""}`);
280
362
  }
281
363
 
282
- function handleBrowser(args, flags) {
283
- const target = args[0];
364
+ function clearBrowserSetting(config, key) {
365
+ if (!config.browser) {
366
+ return config;
367
+ }
368
+ const browser = { ...config.browser };
369
+ delete browser[key];
370
+ return { ...config, browser };
371
+ }
372
+
373
+ function handleBrowserProfile(args, flags) {
284
374
  const action = args[1];
285
- if (target === "profile") {
286
- if (action === "status") {
287
- printStatus();
288
- return;
375
+ if (action === "status") {
376
+ printStatus();
377
+ return;
378
+ }
379
+ if (action === "set") {
380
+ const name = args.slice(2).join(" ").trim();
381
+ if (!name) {
382
+ throw new UsageError(
383
+ "browser profile set requires a profile name or profile directory path.",
384
+ );
289
385
  }
290
- if (action === "set") {
291
- const name = args.slice(2).join(" ").trim();
292
- if (!name) throw new UsageError("browser profile set requires a profile name or profile directory path.");
293
- const policy = flags.get("--policy") || "authenticated-only";
294
- if (!["explicit-only", "authenticated-only", "always"].includes(policy)) throw new UsageError("Invalid --policy value.");
295
- const { path, scope } = selectWritePath(flags);
296
- mutateConfig(path, (config) => {
297
- config.browser = { ...(config.browser ?? {}), defaultProfile: { name, policy } };
298
- });
299
- console.log(`Saved browser default profile in ${scope} config: ${path}`);
300
- return;
386
+ const policy = flags.get("--policy") || "authenticated-only";
387
+ if (!["explicit-only", "authenticated-only", "always"].includes(policy)) {
388
+ throw new UsageError("Invalid --policy value.");
301
389
  }
302
- if (action === "clear") {
303
- const { path, scope } = selectWritePath(flags);
304
- mutateConfig(path, (config) => {
305
- if (config.browser) delete config.browser.defaultProfile;
306
- });
307
- console.log(`Cleared browser default profile in ${scope} config: ${path}`);
308
- return;
390
+ const { path, scope } = selectWritePath(flags);
391
+ mutateConfig(path, (config) => ({
392
+ ...config,
393
+ browser: { ...config.browser, defaultProfile: { name, policy } },
394
+ }));
395
+ console.log(`Saved browser default profile in ${scope} config: ${path}`);
396
+ return;
397
+ }
398
+ if (action === "clear") {
399
+ const { path, scope } = selectWritePath(flags);
400
+ mutateConfig(path, (config) => clearBrowserSetting(config, "defaultProfile"));
401
+ console.log(`Cleared browser default profile in ${scope} config: ${path}`);
402
+ return;
403
+ }
404
+ throw new UsageError(`Unsupported browser profile action: ${action ?? ""}`);
405
+ }
406
+
407
+ function handleBrowserExecutable(args, flags) {
408
+ const action = args[1];
409
+ if (action === "status") {
410
+ printStatus();
411
+ return;
412
+ }
413
+ if (action === "set") {
414
+ const executablePath = args.slice(2).join(" ").trim();
415
+ if (!executablePath) {
416
+ throw new UsageError("browser executable set requires a browser executable path.");
309
417
  }
310
- throw new UsageError(`Unsupported browser profile action: ${action ?? ""}`);
418
+ const { path, scope } = selectWritePath(flags);
419
+ mutateConfig(path, (config) => ({ ...config, browser: { ...config.browser, executablePath } }));
420
+ console.log(`Saved browser executable path in ${scope} config: ${path}`);
421
+ return;
422
+ }
423
+ if (action === "clear") {
424
+ const { path, scope } = selectWritePath(flags);
425
+ mutateConfig(path, (config) => clearBrowserSetting(config, "executablePath"));
426
+ console.log(`Cleared browser executable path in ${scope} config: ${path}`);
427
+ return;
428
+ }
429
+ throw new UsageError(`Unsupported browser executable action: ${action ?? ""}`);
430
+ }
431
+
432
+ function handleBrowser(args, flags) {
433
+ const target = args[0];
434
+ if (target === "profile") {
435
+ return handleBrowserProfile(args, flags);
311
436
  }
312
437
  if (target === "executable") {
313
- if (action === "status") {
314
- printStatus();
315
- return;
316
- }
317
- if (action === "set") {
318
- const executablePath = args.slice(2).join(" ").trim();
319
- if (!executablePath) throw new UsageError("browser executable set requires a browser executable path.");
320
- const { path, scope } = selectWritePath(flags);
321
- mutateConfig(path, (config) => {
322
- config.browser = { ...(config.browser ?? {}), executablePath };
323
- });
324
- console.log(`Saved browser executable path in ${scope} config: ${path}`);
325
- return;
326
- }
327
- if (action === "clear") {
328
- const { path, scope } = selectWritePath(flags);
329
- mutateConfig(path, (config) => {
330
- if (config.browser) delete config.browser.executablePath;
331
- });
332
- console.log(`Cleared browser executable path in ${scope} config: ${path}`);
333
- return;
334
- }
335
- throw new UsageError(`Unsupported browser executable action: ${action ?? ""}`);
438
+ return handleBrowserExecutable(args, flags);
336
439
  }
337
440
  throw new UsageError(`Unsupported browser action: ${target ?? ""}`);
338
441
  }