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
@@ -9,145 +9,235 @@ export function getCompiledSemanticActionSessionPrefix(compiled) {
9
9
  return commandIndex > 0 ? compiled.args.slice(0, commandIndex) : [];
10
10
  }
11
11
  export function isCompiledSemanticActionFindCommand(compiled) {
12
- if (!compiled || compiled.action === "select")
13
- return false;
14
- return compiled.args[getCompiledSemanticActionCommandIndex(compiled)] === "find";
12
+ return (compiled !== undefined &&
13
+ compiled.action !== "select" &&
14
+ compiled.args[getCompiledSemanticActionCommandIndex(compiled)] === "find");
15
15
  }
16
- export function compileAgentBrowserSemanticAction(input) {
17
- if (!isRecord(input)) {
18
- return { error: "semanticAction must be an object." };
16
+ function sessionArgs(session, args) {
17
+ return typeof session === "string" ? ["--session", session, ...args] : [...args];
18
+ }
19
+ function textError(action, text) {
20
+ if (text !== undefined && typeof text !== "string") {
21
+ return "semanticAction.text must be a string when provided.";
19
22
  }
20
- const action = input.action;
21
- const locator = input.locator;
22
- const value = input.value;
23
- const values = input.values;
24
- const selector = input.selector;
25
- const text = input.text;
26
- const role = input.role;
27
- const name = typeof input.name === "string" && input.name.trim().length === 0 ? undefined : input.name;
28
- const session = input.session;
29
- if (typeof action !== "string" || !AGENT_BROWSER_SEMANTIC_ACTIONS.includes(action)) {
30
- return { error: `semanticAction.action must be one of: ${AGENT_BROWSER_SEMANTIC_ACTIONS.join(", ")}.` };
31
- }
32
- if (session !== undefined && (typeof session !== "string" || session.trim().length === 0)) {
33
- return { error: "semanticAction.session must be a non-empty string when provided." };
23
+ if (action === "fill" && (typeof text !== "string" || text.length === 0)) {
24
+ return `semanticAction.text is required for ${action}.`;
34
25
  }
35
- if (action === "select") {
36
- if (text !== undefined) {
37
- return { error: "semanticAction.text is not supported for select; use value or values for option values." };
38
- }
39
- if (typeof selector === "string" && selector.trim().length > 0) {
40
- if (locator !== undefined || role !== undefined || name !== undefined) {
41
- return { error: "semanticAction.selector cannot be combined with locator, role, or name for select; use selector plus value/values, or locator fields plus values." };
42
- }
43
- const selectedValues = getSelectValues(input, "semanticAction");
44
- if (selectedValues.error)
45
- return { error: selectedValues.error };
46
- const args = typeof session === "string" ? ["--session", session, "select", selector, ...selectedValues.values] : ["select", selector, ...selectedValues.values];
47
- return { compiled: { action: "select", selector, values: selectedValues.values, args } };
48
- }
49
- if (selector !== undefined) {
50
- return { error: "semanticAction.selector must be a non-empty string when provided." };
51
- }
52
- if (locator === undefined) {
53
- return { error: "semanticAction.selector or semanticAction.locator is required for select." };
54
- }
55
- if (locator !== "role" && locator !== "label") {
56
- return { error: "semanticAction select locator must be role or label; use selector plus value/values for other targets." };
57
- }
58
- if (locator === "role") {
59
- if (typeof role !== "string" || !/^(?:combobox|listbox)$/i.test(role)) {
60
- return { error: "semanticAction.role must be combobox or listbox for locator=role select." };
61
- }
62
- if (typeof name !== "string" || name.trim().length === 0) {
63
- return { error: "semanticAction.name is required for locator=role select." };
64
- }
65
- const optionValues = getSelectValues({ value, values }, "semanticAction");
66
- if (optionValues.error)
67
- return { error: optionValues.error };
68
- const args = typeof session === "string"
69
- ? ["--session", session, "find", "role", role, "select", ...optionValues.values, "--name", name]
70
- : ["find", "role", role, "select", ...optionValues.values, "--name", name];
71
- return { compiled: { action: "select", locator: "role", values: optionValues.values, args } };
72
- }
73
- if (typeof value !== "string" || value.trim().length === 0) {
74
- return { error: "semanticAction.value must be the accessible label text for locator=label select." };
75
- }
76
- if (role !== undefined || name !== undefined) {
77
- return { error: "semanticAction.role and name are only supported for locator=role select." };
78
- }
79
- const optionValues = getSelectValues({ values }, "semanticAction");
80
- if (optionValues.error) {
81
- return { error: optionValues.error.includes("required")
82
- ? "semanticAction.values is required for locator=label select (value is the label text)."
83
- : optionValues.error };
84
- }
85
- const args = typeof session === "string"
86
- ? ["--session", session, "find", "label", value, "select", ...optionValues.values]
87
- : ["find", "label", value, "select", ...optionValues.values];
88
- return { compiled: { action: "select", locator: "label", values: optionValues.values, args } };
89
- }
90
- if (values !== undefined) {
91
- return { error: "semanticAction.values is only supported for select actions." };
26
+ if (action !== "fill" && text !== undefined) {
27
+ return "semanticAction.text is only supported for fill actions.";
92
28
  }
93
- if (selector !== undefined) {
94
- if (typeof selector !== "string" || selector.trim().length === 0) {
95
- return { error: "semanticAction.selector must be a non-empty string when provided." };
96
- }
97
- if (locator !== undefined || value !== undefined || role !== undefined || name !== undefined) {
98
- return { error: "semanticAction.selector cannot be combined with locator, value, role, or name; use selector for a direct click/check/fill target or locator fields for find-based actions." };
99
- }
100
- if (text !== undefined && typeof text !== "string") {
101
- return { error: "semanticAction.text must be a string when provided." };
102
- }
103
- if (action === "fill" && (typeof text !== "string" || text.length === 0)) {
104
- return { error: `semanticAction.text is required for ${action}.` };
105
- }
106
- if (action !== "fill" && text !== undefined) {
107
- return { error: "semanticAction.text is only supported for fill actions." };
108
- }
109
- const directArgs = typeof session === "string" ? ["--session", session, action, selector] : [action, selector];
110
- if (action === "fill")
111
- directArgs.push(text);
112
- return { compiled: { action: action, selector, args: directArgs } };
113
- }
114
- if (typeof locator !== "string" || !AGENT_BROWSER_SEMANTIC_LOCATORS.includes(locator)) {
115
- return { error: `semanticAction.locator must be one of: ${AGENT_BROWSER_SEMANTIC_LOCATORS.join(", ")}.` };
116
- }
117
- if (value !== undefined && (typeof value !== "string" || value.trim().length === 0)) {
118
- return { error: "semanticAction.value must be a non-empty string when provided." };
119
- }
120
- if (role !== undefined && (typeof role !== "string" || role.trim().length === 0)) {
121
- return { error: "semanticAction.role must be a non-empty string when provided." };
122
- }
123
- const locatorValue = locator === "role" && typeof role === "string" ? role : value;
124
- if (typeof locatorValue !== "string" || locatorValue.trim().length === 0) {
125
- return { error: locator === "role" ? "semanticAction.value or semanticAction.role must be a non-empty string for locator=role." : "semanticAction.value must be a non-empty string." };
29
+ return undefined;
30
+ }
31
+ function directAction(input, action, selector) {
32
+ if (input.locator !== undefined ||
33
+ input.value !== undefined ||
34
+ input.role !== undefined ||
35
+ input.name !== undefined) {
36
+ return {
37
+ error: "semanticAction.selector cannot be combined with locator, value, role, or name; use selector for a direct click/check/fill target or locator fields for find-based actions.",
38
+ };
39
+ }
40
+ const error = textError(action, input.text);
41
+ if (error !== undefined) {
42
+ return { error };
43
+ }
44
+ const args = sessionArgs(input.session, [action, selector]);
45
+ if (action === "fill" && typeof input.text === "string") {
46
+ args.push(input.text);
47
+ }
48
+ return { compiled: { action, selector, args } };
49
+ }
50
+ function roleSelect(input) {
51
+ const { role, name } = input;
52
+ if (typeof role !== "string" || !/^(?:combobox|listbox)$/i.test(role)) {
53
+ return { error: "semanticAction.role must be combobox or listbox for locator=role select." };
54
+ }
55
+ if (typeof name !== "string" || name.trim().length === 0) {
56
+ return { error: "semanticAction.name is required for locator=role select." };
57
+ }
58
+ const options = getSelectValues({ value: input.value, values: input.values }, "semanticAction");
59
+ if (options.error !== undefined) {
60
+ return { error: options.error };
61
+ }
62
+ return {
63
+ compiled: {
64
+ action: "select",
65
+ locator: "role",
66
+ values: options.values,
67
+ args: sessionArgs(input.session, [
68
+ "find",
69
+ "role",
70
+ role,
71
+ "select",
72
+ ...options.values,
73
+ "--name",
74
+ name,
75
+ ]),
76
+ },
77
+ };
78
+ }
79
+ function labelSelect(input) {
80
+ if (typeof input.value !== "string" || input.value.trim().length === 0) {
81
+ return {
82
+ error: "semanticAction.value must be the accessible label text for locator=label select.",
83
+ };
84
+ }
85
+ if (input.role !== undefined || input.name !== undefined) {
86
+ return { error: "semanticAction.role and name are only supported for locator=role select." };
87
+ }
88
+ const options = getSelectValues({ values: input.values }, "semanticAction");
89
+ if (options.error !== undefined) {
90
+ return {
91
+ error: options.error.includes("required")
92
+ ? "semanticAction.values is required for locator=label select (value is the label text)."
93
+ : options.error,
94
+ };
95
+ }
96
+ return {
97
+ compiled: {
98
+ action: "select",
99
+ locator: "label",
100
+ values: options.values,
101
+ args: sessionArgs(input.session, ["find", "label", input.value, "select", ...options.values]),
102
+ },
103
+ };
104
+ }
105
+ function selectAction(input) {
106
+ if (input.text !== undefined) {
107
+ return {
108
+ error: "semanticAction.text is not supported for select; use value or values for option values.",
109
+ };
126
110
  }
127
- if (text !== undefined && typeof text !== "string") {
128
- return { error: "semanticAction.text must be a string when provided." };
111
+ if (typeof input.selector === "string" && input.selector.trim().length > 0) {
112
+ return directSelect(input, input.selector);
129
113
  }
130
- if (action === "fill" && (typeof text !== "string" || text.length === 0)) {
131
- return { error: `semanticAction.text is required for ${action}.` };
114
+ if (input.selector !== undefined) {
115
+ return { error: "semanticAction.selector must be a non-empty string when provided." };
132
116
  }
133
- if (action !== "fill" && text !== undefined) {
134
- return { error: "semanticAction.text is only supported for fill actions." };
117
+ if (input.locator === undefined) {
118
+ return { error: "semanticAction.selector or semanticAction.locator is required for select." };
135
119
  }
136
- if (role !== undefined && locator !== "role") {
137
- return { error: "semanticAction.role is only supported for locator=role." };
120
+ if (input.locator !== "role" && input.locator !== "label") {
121
+ return {
122
+ error: "semanticAction select locator must be role or label; use selector plus value/values for other targets.",
123
+ };
138
124
  }
139
- if (role !== undefined && value !== undefined && role !== value) {
140
- return { error: "semanticAction.role must match value when both are provided for locator=role." };
125
+ return input.locator === "role" ? roleSelect(input) : labelSelect(input);
126
+ }
127
+ function directSelect(input, selector) {
128
+ if (input.locator !== undefined || input.role !== undefined || input.name !== undefined) {
129
+ return {
130
+ error: "semanticAction.selector cannot be combined with locator, role, or name for select; use selector plus value/values, or locator fields plus values.",
131
+ };
132
+ }
133
+ const options = getSelectValues(input, "semanticAction");
134
+ if (options.error !== undefined) {
135
+ return { error: options.error };
136
+ }
137
+ return {
138
+ compiled: {
139
+ action: "select",
140
+ selector,
141
+ values: options.values,
142
+ args: sessionArgs(input.session, ["select", selector, ...options.values]),
143
+ },
144
+ };
145
+ }
146
+ function locatorValueError(input) {
147
+ if (input.value !== undefined &&
148
+ (typeof input.value !== "string" || input.value.trim().length === 0)) {
149
+ return "semanticAction.value must be a non-empty string when provided.";
141
150
  }
142
- if (name !== undefined && (locator !== "role" || typeof name !== "string" || name.length === 0)) {
143
- return { error: "semanticAction.name is only supported as a non-empty string for locator=role." };
151
+ if (input.role !== undefined &&
152
+ (typeof input.role !== "string" || input.role.trim().length === 0)) {
153
+ return "semanticAction.role must be a non-empty string when provided.";
144
154
  }
145
- const args = typeof session === "string" ? ["--session", session, "find", locator, locatorValue, action] : ["find", locator, locatorValue, action];
146
- if (action === "fill") {
147
- args.push(text);
155
+ return undefined;
156
+ }
157
+ function roleFieldsError(input, locator) {
158
+ if (input.role !== undefined && locator !== "role") {
159
+ return "semanticAction.role is only supported for locator=role.";
160
+ }
161
+ if (input.role !== undefined && input.value !== undefined && input.role !== input.value) {
162
+ return "semanticAction.role must match value when both are provided for locator=role.";
163
+ }
164
+ if (input.name !== undefined &&
165
+ (locator !== "role" || typeof input.name !== "string" || input.name.length === 0)) {
166
+ return "semanticAction.name is only supported as a non-empty string for locator=role.";
167
+ }
168
+ return undefined;
169
+ }
170
+ function findAction(input, action) {
171
+ const locator = AGENT_BROWSER_SEMANTIC_LOCATORS.find((value) => value === input.locator);
172
+ if (locator === undefined) {
173
+ return {
174
+ error: `semanticAction.locator must be one of: ${AGENT_BROWSER_SEMANTIC_LOCATORS.join(", ")}.`,
175
+ };
176
+ }
177
+ const valueError = locatorValueError(input);
178
+ if (valueError !== undefined) {
179
+ return { error: valueError };
180
+ }
181
+ const locatorValue = locator === "role" && typeof input.role === "string" ? input.role : input.value;
182
+ if (typeof locatorValue !== "string" || locatorValue.trim().length === 0) {
183
+ return {
184
+ error: locator === "role"
185
+ ? "semanticAction.value or semanticAction.role must be a non-empty string for locator=role."
186
+ : "semanticAction.value must be a non-empty string.",
187
+ };
188
+ }
189
+ const error = textError(action, input.text) ?? roleFieldsError(input, locator);
190
+ if (error !== undefined) {
191
+ return { error };
192
+ }
193
+ return {
194
+ compiled: { action, locator, args: findActionArgs(input, { action, locator, locatorValue }) },
195
+ };
196
+ }
197
+ function findActionArgs(input, target) {
198
+ const args = sessionArgs(input.session, [
199
+ "find",
200
+ target.locator,
201
+ target.locatorValue,
202
+ target.action,
203
+ ]);
204
+ if (target.action === "fill" && typeof input.text === "string") {
205
+ args.push(input.text);
206
+ }
207
+ if (target.locator === "role" && typeof input.name === "string") {
208
+ args.push("--name", input.name);
209
+ }
210
+ return args;
211
+ }
212
+ function nonSelectAction(input, action) {
213
+ if (input.values !== undefined) {
214
+ return { error: "semanticAction.values is only supported for select actions." };
148
215
  }
149
- if (locator === "role" && typeof name === "string") {
150
- args.push("--name", name);
216
+ if (input.selector === undefined) {
217
+ return findAction(input, action);
218
+ }
219
+ if (typeof input.selector !== "string" || input.selector.trim().length === 0) {
220
+ return { error: "semanticAction.selector must be a non-empty string when provided." };
221
+ }
222
+ return directAction(input, action, input.selector);
223
+ }
224
+ export function compileAgentBrowserSemanticAction(input) {
225
+ if (!isRecord(input)) {
226
+ return { error: "semanticAction must be an object." };
227
+ }
228
+ const action = AGENT_BROWSER_SEMANTIC_ACTIONS.find((value) => value === input.action);
229
+ if (action === undefined) {
230
+ return {
231
+ error: `semanticAction.action must be one of: ${AGENT_BROWSER_SEMANTIC_ACTIONS.join(", ")}.`,
232
+ };
233
+ }
234
+ if (input.session !== undefined &&
235
+ (typeof input.session !== "string" || input.session.trim().length === 0)) {
236
+ return { error: "semanticAction.session must be a non-empty string when provided." };
151
237
  }
152
- return { compiled: { action: action, locator: locator, args } };
238
+ const normalized = {
239
+ ...input,
240
+ name: typeof input.name === "string" && input.name.trim().length === 0 ? undefined : input.name,
241
+ };
242
+ return action === "select" ? selectAction(normalized) : nonSelectAction(normalized, action);
153
243
  }
@@ -1,5 +1,11 @@
1
1
  import { isRecord } from "../parsing.js";
2
- import { SOURCE_LOOKUP_DEFAULT_MAX_WORKSPACE_FILES, SOURCE_LOOKUP_MAX_WORKSPACE_FILES } from "./types.js";
2
+ import { SOURCE_LOOKUP_DEFAULT_MAX_WORKSPACE_FILES, SOURCE_LOOKUP_MAX_WORKSPACE_FILES, } from "./types.js";
3
+ function isString(value) {
4
+ return typeof value === "string";
5
+ }
6
+ export function isStringArray(value) {
7
+ return Array.isArray(value) && value.every(isString);
8
+ }
3
9
  export function getSelectValues(input, context) {
4
10
  const rawValue = input.value;
5
11
  const rawValues = input.values;
@@ -7,8 +13,12 @@ export function getSelectValues(input, context) {
7
13
  return { error: `${context}.value and ${context}.values cannot both be provided for select.` };
8
14
  }
9
15
  if (rawValues !== undefined) {
10
- if (!Array.isArray(rawValues) || rawValues.length === 0 || rawValues.some((value) => typeof value !== "string" || value.trim().length === 0)) {
11
- return { error: `${context}.values must be a non-empty array of non-empty strings for select.` };
16
+ if (!isStringArray(rawValues) ||
17
+ rawValues.length === 0 ||
18
+ rawValues.some((value) => value.trim().length === 0)) {
19
+ return {
20
+ error: `${context}.values must be a non-empty array of non-empty strings for select.`,
21
+ };
12
22
  }
13
23
  return { values: rawValues };
14
24
  }
@@ -25,8 +35,9 @@ export function getCommandNameFromBatchItem(item) {
25
35
  return Array.isArray(command) && typeof command[0] === "string" ? command[0] : undefined;
26
36
  }
27
37
  export function validateLookupMaxWorkspaceFiles(value, fieldName) {
28
- if (value === undefined)
38
+ if (value === undefined) {
29
39
  return { value: SOURCE_LOOKUP_DEFAULT_MAX_WORKSPACE_FILES };
40
+ }
30
41
  if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
31
42
  return { error: `${fieldName} must be a positive integer when provided.` };
32
43
  }
@@ -1,16 +1,65 @@
1
1
  export const DEFAULT_SESSION_MODE = "auto";
2
2
  export const AGENT_BROWSER_CODE_MAX_TIMEOUT_MS = 300_000;
3
3
  export const AGENT_BROWSER_SEMANTIC_ACTIONS = ["check", "click", "fill", "select"];
4
- export const AGENT_BROWSER_SEMANTIC_LOCATORS = ["alt", "label", "placeholder", "role", "testid", "text", "title"];
5
- const AGENT_BROWSER_JOB_STEP_ACTIONS = ["open", "click", "fill", "type", "select", "wait", "assertText", "assertUrl", "waitForDownload", "screenshot", "snapshot"];
4
+ export const AGENT_BROWSER_SEMANTIC_LOCATORS = [
5
+ "alt",
6
+ "label",
7
+ "placeholder",
8
+ "role",
9
+ "testid",
10
+ "text",
11
+ "title",
12
+ ];
13
+ const AGENT_BROWSER_JOB_STEP_ACTIONS = [
14
+ "open",
15
+ "click",
16
+ "fill",
17
+ "type",
18
+ "select",
19
+ "wait",
20
+ "assertText",
21
+ "assertUrl",
22
+ "waitForDownload",
23
+ "screenshot",
24
+ "snapshot",
25
+ ];
6
26
  export const AGENT_BROWSER_QA_LOAD_STATES = ["domcontentloaded", "load", "networkidle"];
7
- export const AGENT_BROWSER_ELECTRON_ACTIONS = ["list", "launch", "status", "cleanup", "probe"];
27
+ export const AGENT_BROWSER_ELECTRON_ACTIONS = [
28
+ "list",
29
+ "launch",
30
+ "status",
31
+ "cleanup",
32
+ "probe",
33
+ ];
8
34
  export const AGENT_BROWSER_ELECTRON_HANDOFFS = ["connect", "tabs", "snapshot"];
9
35
  export const AGENT_BROWSER_ELECTRON_TARGET_TYPES = ["page", "webview", "any"];
10
- export const AGENT_BROWSER_ELECTRON_LIST_FIELDS = new Set(["action", "query", "maxResults"]);
11
- export const AGENT_BROWSER_ELECTRON_PROBE_FIELDS = new Set(["action", "launchId", "timeoutMs"]);
12
- export const AGENT_BROWSER_ELECTRON_RESERVED_APP_ARGS = ["--user-data-dir", "--remote-debugging-port", "--remote-debugging-address", "--remote-debugging-pipe"];
36
+ export const AGENT_BROWSER_ELECTRON_LIST_FIELDS = [
37
+ "action",
38
+ "query",
39
+ "maxResults",
40
+ ];
41
+ export const AGENT_BROWSER_ELECTRON_PROBE_FIELDS = [
42
+ "action",
43
+ "launchId",
44
+ "timeoutMs",
45
+ ];
46
+ export const AGENT_BROWSER_ELECTRON_RESERVED_APP_ARGS = [
47
+ "--user-data-dir",
48
+ "--remote-debugging-port",
49
+ "--remote-debugging-address",
50
+ "--remote-debugging-pipe",
51
+ ];
13
52
  export const SOURCE_LOOKUP_WORKSPACE_EXTENSIONS = new Set([".ts", ".tsx", ".js", ".jsx"]);
14
- export const SOURCE_LOOKUP_IGNORED_DIRECTORIES = new Set([".git", "node_modules", "dist", "build", "coverage", ".next", "out", "tmp", "temp"]);
53
+ export const SOURCE_LOOKUP_IGNORED_DIRECTORIES = new Set([
54
+ ".git",
55
+ "node_modules",
56
+ "dist",
57
+ "build",
58
+ "coverage",
59
+ ".next",
60
+ "out",
61
+ "tmp",
62
+ "temp",
63
+ ]);
15
64
  export const SOURCE_LOOKUP_DEFAULT_MAX_WORKSPACE_FILES = 2_000;
16
65
  export const SOURCE_LOOKUP_MAX_WORKSPACE_FILES = 5_000;
@@ -1,17 +1,27 @@
1
1
  const OPTIONAL_SCHEMA = Symbol("pi-agent-browser-optional-schema");
2
2
  function withOptions(schema, options) {
3
- return { ...schema, ...(options ?? {}) };
3
+ return { ...schema, ...options };
4
4
  }
5
5
  function literalType(value) {
6
6
  const valueType = typeof value;
7
- return valueType === "string" || valueType === "number" || valueType === "boolean" ? valueType : undefined;
7
+ return valueType === "string" || valueType === "number" || valueType === "boolean"
8
+ ? valueType
9
+ : undefined;
8
10
  }
9
11
  function propertySchema(schema) {
10
12
  const clone = { ...schema };
11
- delete clone[OPTIONAL_SCHEMA];
13
+ if (OPTIONAL_SCHEMA in clone) {
14
+ delete clone[OPTIONAL_SCHEMA];
15
+ }
12
16
  return clone;
13
17
  }
14
- export const JsonSchema = {
18
+ function isOptional(schema) {
19
+ return OPTIONAL_SCHEMA in schema && schema[OPTIONAL_SCHEMA] === true;
20
+ }
21
+ function unsafeSchema(schema) {
22
+ return schema;
23
+ }
24
+ const nativeJsonSchemaBuilder = {
15
25
  Array(items, options) {
16
26
  return withOptions({ type: "array", items }, options);
17
27
  },
@@ -23,18 +33,21 @@ export const JsonSchema = {
23
33
  },
24
34
  Literal(value, options) {
25
35
  const type = literalType(value);
26
- return withOptions(type ? { type, const: value } : { const: value }, options);
36
+ return withOptions(type !== undefined ? { type, const: value } : { const: value }, options);
27
37
  },
28
38
  Number(options) {
29
39
  return withOptions({ type: "number" }, options);
30
40
  },
31
41
  Object(properties, options) {
32
42
  const required = globalThis.Object.entries(properties)
33
- .filter(([, schema]) => schema[OPTIONAL_SCHEMA] !== true)
43
+ .filter(([, schema]) => !isOptional(schema))
34
44
  .map(([key]) => key);
35
45
  return withOptions({
36
46
  type: "object",
37
- properties: globalThis.Object.fromEntries(globalThis.Object.entries(properties).map(([key, schema]) => [key, propertySchema(schema)])),
47
+ properties: globalThis.Object.fromEntries(globalThis.Object.entries(properties).map(([key, schema]) => [
48
+ key,
49
+ propertySchema(schema),
50
+ ])),
38
51
  ...(required.length > 0 ? { required } : {}),
39
52
  }, options);
40
53
  },
@@ -47,7 +60,6 @@ export const JsonSchema = {
47
60
  Union(types, options) {
48
61
  return withOptions({ anyOf: types }, options);
49
62
  },
50
- Unsafe(schema) {
51
- return schema;
52
- },
63
+ Unsafe: unsafeSchema,
53
64
  };
65
+ export const JsonSchema = nativeJsonSchemaBuilder;
@@ -112,7 +112,12 @@ export const LAUNCH_SCOPED_FLAG_DEFINITIONS = [
112
112
  ];
113
113
  export const LAUNCH_SCOPED_FLAGS = LAUNCH_SCOPED_FLAG_DEFINITIONS.map((definition) => definition.flag);
114
114
  export const LAUNCH_SCOPED_FLAG_LABEL = LAUNCH_SCOPED_FLAGS.join(", ");
115
- export const OPEN_RESULT_TAB_CORRECTION_FLAGS = new Set(["--profile", "--restore", "--session-name", "--state"]);
115
+ export const OPEN_RESULT_TAB_CORRECTION_FLAGS = new Set([
116
+ "--profile",
117
+ "--restore",
118
+ "--session-name",
119
+ "--state",
120
+ ]);
116
121
  /** Launch modes that must never be combined with wrapper-managed restore state. */
117
122
  export const MANAGED_RESTORE_INCOMPATIBLE_FLAGS = [
118
123
  "--restore",
@@ -187,14 +192,21 @@ export function hasLaunchScopedFlagToken(args, flag) {
187
192
  const commandStartIndex = findCommandStartIndex(args);
188
193
  const command = commandStartIndex === undefined ? undefined : args[commandStartIndex];
189
194
  return args.some((token, index) => {
190
- if (token.startsWith(`${flag}=`))
195
+ if (token.startsWith(`${flag}=`)) {
191
196
  return flag === "--restore";
192
- if (token !== flag)
197
+ }
198
+ if (token !== flag) {
193
199
  return false;
194
- if (flag === "--auto-connect")
200
+ }
201
+ if (flag === "--auto-connect") {
195
202
  return isBooleanFlagEnabled(args, flag);
196
- if (flag === "--state" && command === "wait" && commandStartIndex !== undefined && index > commandStartIndex)
203
+ }
204
+ if (flag === "--state" &&
205
+ command === "wait" &&
206
+ commandStartIndex !== undefined &&
207
+ index > commandStartIndex) {
197
208
  return false;
209
+ }
198
210
  return true;
199
211
  });
200
212
  }