pi-agent-browser-native 0.9.3 → 0.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +77 -5
  2. package/README.md +103 -81
  3. package/dist/extensions/agent-browser/index.js +43057 -2031
  4. package/dist/extensions/agent-browser/lib/argv-descriptor.js +49 -26
  5. package/dist/extensions/agent-browser/lib/argv-grammar.js +82 -93
  6. package/dist/extensions/agent-browser/lib/bash-guard.js +129 -126
  7. package/dist/extensions/agent-browser/lib/batch-lifecycle.js +112 -51
  8. package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +61 -0
  9. package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +232 -0
  10. package/dist/extensions/agent-browser/lib/browser-execution-claims.js +202 -0
  11. package/dist/extensions/agent-browser/lib/browser-execution-identity.js +77 -0
  12. package/dist/extensions/agent-browser/lib/browser-journal-branch.js +98 -0
  13. package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +1 -0
  14. package/dist/extensions/agent-browser/lib/browser-journal-projection.js +221 -0
  15. package/dist/extensions/agent-browser/lib/browser-journal-reader.js +89 -0
  16. package/dist/extensions/agent-browser/lib/browser-journal-replay.js +246 -0
  17. package/dist/extensions/agent-browser/lib/browser-journal.js +103 -394
  18. package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +220 -0
  19. package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +282 -0
  20. package/dist/extensions/agent-browser/lib/browser-legacy-types.js +1 -0
  21. package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +217 -0
  22. package/dist/extensions/agent-browser/lib/browser-session-conversion.js +80 -335
  23. package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +35 -0
  24. package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +166 -0
  25. package/dist/extensions/agent-browser/lib/browser-transcript.js +137 -82
  26. package/dist/extensions/agent-browser/lib/browser-value-parsing.js +15 -0
  27. package/dist/extensions/agent-browser/lib/command-capabilities.js +340 -0
  28. package/dist/extensions/agent-browser/lib/command-policy.js +107 -88
  29. package/dist/extensions/agent-browser/lib/command-taxonomy.js +49 -322
  30. package/dist/extensions/agent-browser/lib/config-policy.js +138 -343
  31. package/dist/extensions/agent-browser/lib/config-providers.js +71 -0
  32. package/dist/extensions/agent-browser/lib/config-validation.js +218 -0
  33. package/dist/extensions/agent-browser/lib/config.js +19 -7
  34. package/dist/extensions/agent-browser/lib/electron/cdp.js +15 -7
  35. package/dist/extensions/agent-browser/lib/electron/cleanup.js +134 -55
  36. package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +109 -0
  37. package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +136 -0
  38. package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +89 -0
  39. package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +93 -0
  40. package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +162 -0
  41. package/dist/extensions/agent-browser/lib/electron/discovery-types.js +2 -0
  42. package/dist/extensions/agent-browser/lib/electron/discovery.js +140 -549
  43. package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +102 -0
  44. package/dist/extensions/agent-browser/lib/electron/launch-process.js +209 -0
  45. package/dist/extensions/agent-browser/lib/electron/launch-types.js +2 -0
  46. package/dist/extensions/agent-browser/lib/electron/launch.js +249 -354
  47. package/dist/extensions/agent-browser/lib/executable-path.js +21 -12
  48. package/dist/extensions/agent-browser/lib/execution-cwd.js +35 -18
  49. package/dist/extensions/agent-browser/lib/input-modes/electron.js +162 -121
  50. package/dist/extensions/agent-browser/lib/input-modes/job.js +116 -313
  51. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +104 -0
  52. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +132 -0
  53. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +57 -0
  54. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +151 -0
  55. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +142 -0
  56. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +57 -412
  57. package/dist/extensions/agent-browser/lib/input-modes/params.js +63 -17
  58. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +268 -0
  59. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +117 -0
  60. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +396 -0
  61. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +86 -0
  62. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +1 -0
  63. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +60 -0
  64. package/dist/extensions/agent-browser/lib/input-modes/script.js +60 -409
  65. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +218 -128
  66. package/dist/extensions/agent-browser/lib/input-modes/shared.js +15 -4
  67. package/dist/extensions/agent-browser/lib/input-modes/types.js +56 -7
  68. package/dist/extensions/agent-browser/lib/json-schema.js +22 -10
  69. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +17 -5
  70. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +92 -425
  71. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +58 -0
  72. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +244 -0
  73. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +84 -0
  74. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +119 -0
  75. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +83 -0
  76. package/dist/extensions/agent-browser/lib/managed-session-restore.js +168 -300
  77. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +277 -0
  78. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +128 -305
  79. package/dist/extensions/agent-browser/lib/managed-session-storage.js +56 -253
  80. package/dist/extensions/agent-browser/lib/native-confirmation.js +140 -0
  81. package/dist/extensions/agent-browser/lib/native-output.js +43 -9
  82. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +106 -59
  83. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +14 -6
  84. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +109 -57
  85. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +82 -0
  86. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +164 -60
  87. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +31 -0
  88. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +152 -781
  89. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +202 -0
  90. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +109 -0
  91. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +119 -0
  92. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +147 -0
  93. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +144 -0
  94. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +123 -0
  95. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +1 -0
  96. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +156 -0
  97. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +179 -0
  98. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +39 -0
  99. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +89 -0
  100. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +97 -0
  101. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +106 -0
  102. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +110 -0
  103. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +41 -538
  104. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +199 -154
  105. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +290 -0
  106. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +167 -0
  107. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +108 -0
  108. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +127 -205
  109. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +65 -0
  110. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +1 -0
  111. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +120 -0
  112. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +113 -30
  113. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +109 -28
  114. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +150 -0
  115. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +138 -253
  116. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +147 -0
  117. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +59 -24
  118. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +159 -0
  119. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +131 -0
  120. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +1 -0
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +93 -0
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +42 -0
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +242 -0
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +75 -0
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +92 -0
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +254 -0
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +121 -0
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +130 -0
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +114 -0
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +121 -0
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +222 -0
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +68 -0
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +176 -1123
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +191 -0
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +152 -0
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +182 -0
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +150 -0
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +1 -0
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +1 -0
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +115 -0
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +256 -0
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +1 -0
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +256 -0
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +1 -0
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +93 -0
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +113 -0
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +1 -0
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +316 -0
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +28 -0
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +1 -0
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +142 -0
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +1 -0
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +333 -0
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +1 -0
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +71 -0
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +201 -0
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +183 -0
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +200 -0
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +142 -0
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +18 -968
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +23 -13
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +198 -0
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +1 -0
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +154 -0
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +68 -151
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +14 -0
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +169 -46
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +130 -0
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +210 -0
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +61 -0
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +187 -0
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +171 -0
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +228 -0
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +77 -765
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +182 -0
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +256 -0
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +108 -0
  178. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +39 -0
  179. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +119 -0
  180. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +92 -0
  181. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +58 -0
  182. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +78 -0
  183. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +1 -0
  184. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +106 -0
  185. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +48 -821
  186. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +86 -0
  187. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +69 -0
  188. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +167 -0
  189. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +164 -0
  190. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +161 -0
  191. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +165 -0
  192. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +21 -9
  193. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +211 -0
  194. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +23 -0
  195. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +99 -0
  196. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +275 -0
  197. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +280 -0
  198. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +303 -0
  199. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +36 -0
  200. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +335 -0
  201. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +227 -0
  202. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +1 -0
  203. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +204 -0
  204. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +139 -0
  205. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +24 -0
  206. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +98 -0
  207. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +295 -0
  208. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +41 -0
  209. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +7 -0
  210. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +102 -0
  211. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +133 -0
  212. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +120 -0
  213. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +180 -0
  214. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +290 -0
  215. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +1 -0
  216. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +269 -0
  217. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +113 -0
  218. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +146 -0
  219. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +58 -0
  220. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +62 -0
  221. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +54 -0
  222. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +1 -0
  223. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +261 -185
  224. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +62 -0
  225. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +144 -0
  226. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +77 -0
  227. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +210 -157
  228. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +124 -58
  229. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +197 -99
  230. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +199 -96
  231. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +55 -0
  232. package/dist/extensions/agent-browser/lib/page-target-batch.js +118 -0
  233. package/dist/extensions/agent-browser/lib/page-target-guards.js +50 -0
  234. package/dist/extensions/agent-browser/lib/page-target-navigation.js +104 -0
  235. package/dist/extensions/agent-browser/lib/page-target-validation.js +55 -246
  236. package/dist/extensions/agent-browser/lib/parsing.js +13 -4
  237. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +133 -68
  238. package/dist/extensions/agent-browser/lib/playbook.js +16 -12
  239. package/dist/extensions/agent-browser/lib/process-child.js +284 -0
  240. package/dist/extensions/agent-browser/lib/process-environment.js +13 -6
  241. package/dist/extensions/agent-browser/lib/process-errors.js +23 -0
  242. package/dist/extensions/agent-browser/lib/process-identity.js +47 -15
  243. package/dist/extensions/agent-browser/lib/process-socket-storage.js +256 -0
  244. package/dist/extensions/agent-browser/lib/process-stdout.js +74 -0
  245. package/dist/extensions/agent-browser/lib/process.js +145 -536
  246. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +287 -0
  247. package/dist/extensions/agent-browser/lib/prompt-policy.js +15 -194
  248. package/dist/extensions/agent-browser/lib/read-command.js +41 -0
  249. package/dist/extensions/agent-browser/lib/read-confirmation.js +131 -68
  250. package/dist/extensions/agent-browser/lib/recording-reservations.js +118 -45
  251. package/dist/extensions/agent-browser/lib/redaction-fields.js +75 -0
  252. package/dist/extensions/agent-browser/lib/redaction-json.js +149 -0
  253. package/dist/extensions/agent-browser/lib/redaction-url.js +88 -0
  254. package/dist/extensions/agent-browser/lib/results/action-contracts.js +1 -0
  255. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +28 -271
  256. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +1 -0
  257. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +133 -0
  258. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +96 -94
  259. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +73 -0
  260. package/dist/extensions/agent-browser/lib/results/categories.js +111 -54
  261. package/dist/extensions/agent-browser/lib/results/confirmation.js +29 -13
  262. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +62 -27
  263. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +83 -0
  264. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +48 -0
  265. package/dist/extensions/agent-browser/lib/results/envelope.js +90 -67
  266. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +1 -0
  267. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +180 -0
  268. package/dist/extensions/agent-browser/lib/results/network-routes.js +86 -45
  269. package/dist/extensions/agent-browser/lib/results/network.js +35 -12
  270. package/dist/extensions/agent-browser/lib/results/next-actions.js +49 -19
  271. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +320 -0
  272. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +138 -0
  273. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +113 -0
  274. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +145 -0
  275. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +99 -555
  276. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +1 -0
  277. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +118 -0
  278. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +68 -0
  279. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +135 -0
  280. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +227 -0
  281. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +91 -0
  282. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +91 -460
  283. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +9 -5
  284. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +216 -0
  285. package/dist/extensions/agent-browser/lib/results/presentation/common.js +26 -9
  286. package/dist/extensions/agent-browser/lib/results/presentation/content.js +86 -29
  287. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +67 -0
  288. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +79 -0
  289. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +199 -0
  290. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +75 -0
  291. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +216 -0
  292. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +124 -0
  293. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +64 -0
  294. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +209 -0
  295. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +69 -0
  296. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +222 -0
  297. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +103 -1052
  298. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +70 -0
  299. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +130 -60
  300. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +1 -0
  301. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +60 -145
  302. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +147 -88
  303. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +75 -0
  304. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +1 -0
  305. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +127 -0
  306. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +120 -0
  307. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +77 -0
  308. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +51 -0
  309. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +116 -240
  310. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +35 -21
  311. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +104 -73
  312. package/dist/extensions/agent-browser/lib/results/presentation/source.js +109 -0
  313. package/dist/extensions/agent-browser/lib/results/presentation.js +17 -261
  314. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +1 -0
  315. package/dist/extensions/agent-browser/lib/results/recording.js +52 -14
  316. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +14 -5
  317. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +30 -22
  318. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +83 -0
  319. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +119 -119
  320. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +266 -0
  321. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +32 -0
  322. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +104 -71
  323. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +31 -11
  324. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +125 -66
  325. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +26 -7
  326. package/dist/extensions/agent-browser/lib/results/snapshot.js +28 -248
  327. package/dist/extensions/agent-browser/lib/results/text.js +16 -5
  328. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +133 -0
  329. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +81 -0
  330. package/dist/extensions/agent-browser/lib/runtime-contracts.js +1 -0
  331. package/dist/extensions/agent-browser/lib/runtime-redaction.js +118 -0
  332. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +144 -0
  333. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +76 -0
  334. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +114 -0
  335. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +123 -0
  336. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +65 -0
  337. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +28 -0
  338. package/dist/extensions/agent-browser/lib/runtime.js +137 -1041
  339. package/dist/extensions/agent-browser/lib/session-identity.js +51 -0
  340. package/dist/extensions/agent-browser/lib/session-page-observation.js +357 -0
  341. package/dist/extensions/agent-browser/lib/session-page-state.js +178 -333
  342. package/dist/extensions/agent-browser/lib/session-page-types.js +1 -0
  343. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +78 -0
  344. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +7 -0
  345. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +234 -0
  346. package/dist/extensions/agent-browser/lib/temp-root.js +207 -0
  347. package/dist/extensions/agent-browser/lib/temp.js +33 -446
  348. package/dist/extensions/agent-browser/lib/tool-surface.js +94 -24
  349. package/dist/extensions/agent-browser/lib/upstream-version.js +3 -2
  350. package/dist/extensions/agent-browser/lib/web-search-providers.js +229 -0
  351. package/dist/extensions/agent-browser/lib/web-search-request.js +108 -0
  352. package/dist/extensions/agent-browser/lib/web-search-results.js +281 -0
  353. package/dist/extensions/agent-browser/lib/web-search-schema.js +82 -0
  354. package/dist/extensions/agent-browser/lib/web-search.js +109 -617
  355. package/dist/extensions/agent-browser/lib/webmcp-observation.js +13 -6
  356. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +63 -37
  357. package/dist/extensions/agent-browser/script-worker.js +80 -43
  358. package/dist/scripts/agent-browser-target.mjs +4 -2
  359. package/docs/ARCHITECTURE.md +17 -5
  360. package/docs/CODE_QUALITY.md +242 -0
  361. package/docs/COMMAND_REFERENCE.md +251 -220
  362. package/docs/ELECTRON.md +53 -44
  363. package/docs/RELEASE.md +18 -15
  364. package/docs/REQUIREMENTS.md +1 -0
  365. package/docs/SUPPORT_MATRIX.md +76 -75
  366. package/docs/TOOL_CONTRACT.md +145 -116
  367. package/docs/platform-smoke.md +5 -5
  368. package/package.json +143 -120
  369. package/scripts/agent-browser-capability-baseline.mjs +361 -957
  370. package/scripts/agent-browser-target.mjs +6 -2
  371. package/scripts/build.mjs +37 -8
  372. package/scripts/capability-core-commands.mjs +193 -0
  373. package/scripts/capability-options.mjs +283 -0
  374. package/scripts/capability-samples.mjs +133 -0
  375. package/scripts/capability-section.mjs +11 -0
  376. package/scripts/config.mjs +213 -114
  377. package/scripts/convert-browser-session.mjs +30 -9
  378. package/scripts/doctor-sources.mjs +195 -0
  379. package/scripts/doctor.mjs +92 -247
  380. package/scripts/platform-smoke/artifacts.mjs +38 -11
  381. package/scripts/platform-smoke/commands.mjs +104 -0
  382. package/scripts/platform-smoke/crabbox-runner.mjs +167 -80
  383. package/scripts/platform-smoke/doctor-support.mjs +157 -0
  384. package/scripts/platform-smoke/doctor-windows.mjs +230 -0
  385. package/scripts/platform-smoke/doctor.mjs +212 -320
  386. package/scripts/platform-smoke/lease-evidence.mjs +134 -0
  387. package/scripts/platform-smoke/suite-checks.mjs +98 -0
  388. package/scripts/platform-smoke/suite-evidence.mjs +281 -0
  389. package/scripts/platform-smoke/targets.mjs +158 -472
  390. package/scripts/platform-smoke.mjs +55 -40
  391. package/scripts/prepare.mjs +16 -7
@@ -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
  }