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
@@ -25,7 +25,14 @@ const SNAPSHOT_SIGNAL_ROLES = new Set([
25
25
  "tab",
26
26
  "textbox",
27
27
  ]);
28
- const SNAPSHOT_SEGMENT_ROOT_ROLES = new Set(["article", "dialog", "heading", "main", "menu", "region"]);
28
+ const SNAPSHOT_SEGMENT_ROOT_ROLES = new Set([
29
+ "article",
30
+ "dialog",
31
+ "heading",
32
+ "main",
33
+ "menu",
34
+ "region",
35
+ ]);
29
36
  const SNAPSHOT_ROLE_PRIORITY = {
30
37
  article: 0,
31
38
  main: 1,
@@ -71,20 +78,23 @@ const SNAPSHOT_CHROME_SECTION_PATTERNS = [
71
78
  export function getSnapshotRolePriority(role) {
72
79
  return SNAPSHOT_ROLE_PRIORITY[role] ?? 50;
73
80
  }
81
+ function parseSnapshotHeadingLevel(text) {
82
+ const level = text.match(/\blevel=(\d+)/)?.[1];
83
+ return level !== undefined && level.length > 0 ? Number(level) : undefined;
84
+ }
74
85
  export function parseSnapshotLines(snapshot) {
75
86
  return snapshot
76
87
  .split("\n")
77
88
  .filter((line) => line.length > 0)
78
89
  .map((raw, index) => {
79
90
  const trimmed = raw.trimStart();
80
- const depth = Math.floor(((raw.match(/^\s*/) ?? [""])[0].length ?? 0) / 2);
91
+ const depth = Math.floor((raw.match(/^\s*/)?.[0].length ?? 0) / 2);
81
92
  const role = trimmed.match(/^[-*]\s+([^\s"]+)/)?.[1] ?? "unknown";
82
93
  const name = normalizeWhitespace(trimmed.match(/"([^"]*)"/)?.[1] ?? "");
83
94
  const ref = trimmed.match(/\bref=([^,\]\s]+)/)?.[1];
84
- const headingLevel = trimmed.match(/\blevel=(\d+)/)?.[1];
85
95
  return {
86
96
  depth,
87
- headingLevel: headingLevel ? Number(headingLevel) : undefined,
97
+ headingLevel: parseSnapshotHeadingLevel(trimmed),
88
98
  index,
89
99
  name,
90
100
  raw,
@@ -100,16 +110,19 @@ export function isChromeSectionName(name) {
100
110
  return SNAPSHOT_CHROME_SECTION_PATTERNS.some((pattern) => pattern.test(name));
101
111
  }
102
112
  function isNoiseSnapshotLine(line) {
103
- if (line.name.length > 0 && isNoiseName(line.name))
113
+ if (line.name.length > 0 && isNoiseName(line.name)) {
104
114
  return true;
115
+ }
105
116
  const loweredRaw = line.raw.toLowerCase();
106
117
  return loweredRaw.includes("promoted") || loweredRaw.includes("sponsored");
107
118
  }
108
119
  function isPotentialSegmentRootLine(line) {
109
- if (!SNAPSHOT_SEGMENT_ROOT_ROLES.has(line.role))
120
+ if (!SNAPSHOT_SEGMENT_ROOT_ROLES.has(line.role)) {
110
121
  return false;
111
- if (isNoiseSnapshotLine(line))
122
+ }
123
+ if (isNoiseSnapshotLine(line)) {
112
124
  return false;
125
+ }
113
126
  if (line.role === "heading") {
114
127
  return line.name.length > 0 && (line.headingLevel ?? 99) <= 3;
115
128
  }
@@ -118,9 +131,23 @@ function isPotentialSegmentRootLine(line) {
118
131
  }
119
132
  return true;
120
133
  }
134
+ function getHeadingPriorityScore(level) {
135
+ switch (level) {
136
+ case 1:
137
+ return 40;
138
+ case 2:
139
+ return 22;
140
+ case 3:
141
+ return 12;
142
+ case undefined:
143
+ return 0;
144
+ default:
145
+ return 0;
146
+ }
147
+ }
121
148
  function scoreSegment(segment) {
122
149
  const { root } = segment;
123
- const distinctRefs = new Set(segment.lines.flatMap((line) => (line.ref ? [line.ref] : []))).size;
150
+ const distinctRefs = new Set(segment.lines.flatMap((line) => line.ref !== undefined && line.ref.length > 0 ? [line.ref] : [])).size;
124
151
  let score = 0;
125
152
  score += 120 - getSnapshotRolePriority(root.role) * 8;
126
153
  score += Math.min(distinctRefs, 16);
@@ -128,43 +155,44 @@ function scoreSegment(segment) {
128
155
  score -= Math.min(root.index, 60) / 3;
129
156
  score -= root.depth * 6;
130
157
  if (root.role === "heading") {
131
- if (root.headingLevel === 1)
132
- score += 40;
133
- else if (root.headingLevel === 2)
134
- score += 22;
135
- else if (root.headingLevel === 3)
136
- score += 12;
158
+ score += getHeadingPriorityScore(root.headingLevel);
137
159
  }
138
- if (root.name.length > 0)
160
+ if (root.name.length > 0) {
139
161
  score += 10;
140
- if (root.name.length <= 2)
162
+ }
163
+ if (root.name.length <= 2) {
141
164
  score -= 18;
142
- if (isChromeSectionName(root.name))
165
+ }
166
+ if (isChromeSectionName(root.name)) {
143
167
  score -= 45;
144
- if (isNoiseName(root.name))
168
+ }
169
+ if (isNoiseName(root.name)) {
145
170
  score -= 1000;
171
+ }
146
172
  return score;
147
173
  }
174
+ function hasDuplicateSegmentAncestor(line, stack) {
175
+ const name = normalizeWhitespace(line.name.toLowerCase());
176
+ if (name.length === 0) {
177
+ return false;
178
+ }
179
+ for (let index = stack.length - 1; index >= 0; index -= 1) {
180
+ const ancestor = stack.at(index);
181
+ if (ancestor &&
182
+ normalizeWhitespace(ancestor.name.toLowerCase()) === name &&
183
+ SNAPSHOT_SEGMENT_ROOT_ROLES.has(ancestor.role)) {
184
+ return true;
185
+ }
186
+ }
187
+ return false;
188
+ }
148
189
  export function buildSnapshotSegments(snapshotLines) {
149
190
  const roots = [];
150
191
  const stack = [];
151
192
  for (const line of snapshotLines) {
152
193
  stack.length = line.depth;
153
- if (isPotentialSegmentRootLine(line)) {
154
- const normalizedName = normalizeWhitespace(line.name.toLowerCase());
155
- let duplicateAncestor;
156
- for (let index = stack.length - 1; index >= 0; index -= 1) {
157
- const ancestor = stack[index];
158
- if (normalizedName.length > 0 &&
159
- normalizeWhitespace(ancestor.name.toLowerCase()) === normalizedName &&
160
- SNAPSHOT_SEGMENT_ROOT_ROLES.has(ancestor.role)) {
161
- duplicateAncestor = ancestor;
162
- break;
163
- }
164
- }
165
- if (!duplicateAncestor) {
166
- roots.push(line);
167
- }
194
+ if (isPotentialSegmentRootLine(line) && !hasDuplicateSegmentAncestor(line, stack)) {
195
+ roots.push(line);
168
196
  }
169
197
  stack[line.depth] = line;
170
198
  }
@@ -185,58 +213,75 @@ export function buildSnapshotSegments(snapshotLines) {
185
213
  score: 0,
186
214
  startIndex: root.index,
187
215
  };
188
- segment.score = scoreSegment(segment);
189
- return segment;
216
+ return Object.assign({}, segment, { score: scoreSegment(segment) });
190
217
  });
191
218
  }
192
219
  export function choosePrimarySegment(segments) {
193
- if (segments.length === 0)
220
+ if (segments.length === 0) {
194
221
  return undefined;
222
+ }
195
223
  return (segments.find((segment) => segment.root.role === "main" || segment.root.role === "article") ??
196
224
  segments.find((segment) => segment.root.role === "heading" && segment.root.headingLevel === 1) ??
197
225
  segments.find((segment) => segment.score >= 90) ??
198
- [...segments].sort((left, right) => right.score - left.score || left.startIndex - right.startIndex)[0]);
226
+ [...segments].sort((left, right) => {
227
+ const difference = right.score - left.score;
228
+ return difference !== 0 && !Number.isNaN(difference)
229
+ ? difference
230
+ : left.startIndex - right.startIndex;
231
+ })[0]);
232
+ }
233
+ function isChromePreviewSegment(segment) {
234
+ return (isChromeSectionName(segment.root.name) ||
235
+ (segment.root.role === "heading" && segment.root.name.length <= 2));
199
236
  }
200
237
  export function chooseAdditionalSegments(segments, primary) {
201
- if (!primary)
238
+ if (!primary) {
202
239
  return [];
240
+ }
203
241
  const seenNames = new Set([normalizeWhitespace(primary.root.name.toLowerCase())]);
204
242
  const rankedCandidates = segments
205
243
  .filter((segment) => segment !== primary && segment.score >= 45)
206
244
  .sort((left, right) => {
207
245
  const leftDistance = Math.abs(left.startIndex - primary.startIndex);
208
246
  const rightDistance = Math.abs(right.startIndex - primary.startIndex);
209
- if (leftDistance !== rightDistance)
247
+ if (leftDistance !== rightDistance) {
210
248
  return leftDistance - rightDistance;
211
- if (right.score !== left.score)
249
+ }
250
+ if (right.score !== left.score) {
212
251
  return right.score - left.score;
252
+ }
213
253
  return left.startIndex - right.startIndex;
214
254
  });
215
255
  const chosen = [];
216
256
  for (const segment of rankedCandidates) {
217
- if (chosen.length >= SNAPSHOT_MAX_ADDITIONAL_SECTIONS)
257
+ if (chosen.length >= SNAPSHOT_MAX_ADDITIONAL_SECTIONS) {
218
258
  break;
219
- if (isChromeSectionName(segment.root.name))
220
- continue;
221
- if (segment.root.role === "heading" && segment.root.name.length <= 2)
259
+ }
260
+ if (isChromePreviewSegment(segment)) {
222
261
  continue;
262
+ }
223
263
  const nameKey = normalizeWhitespace(segment.root.name.toLowerCase());
224
- if (nameKey && seenNames.has(nameKey))
264
+ if (nameKey.length > 0 && seenNames.has(nameKey)) {
225
265
  continue;
266
+ }
226
267
  chosen.push(segment);
227
- if (nameKey)
268
+ if (nameKey.length > 0) {
228
269
  seenNames.add(nameKey);
270
+ }
229
271
  }
230
272
  return chosen.sort((left, right) => left.startIndex - right.startIndex);
231
273
  }
232
274
  export function getMeaningfulSegmentLines(segment) {
233
275
  return segment.lines.filter((line) => {
234
- if (isNoiseSnapshotLine(line))
276
+ if (isNoiseSnapshotLine(line)) {
235
277
  return false;
236
- if (line.role === "generic" && !line.ref && line.name.length === 0)
278
+ }
279
+ if (line.role === "generic" && (line.ref ?? "") === "" && line.name.length === 0) {
237
280
  return false;
238
- if (line.role === "link" && line.name.length === 0)
281
+ }
282
+ if (line.role === "link" && line.name.length === 0) {
239
283
  return false;
284
+ }
240
285
  return true;
241
286
  });
242
287
  }
@@ -245,6 +290,15 @@ function formatPreviewLine(line, baseDepth) {
245
290
  const stripChars = Math.min(leadingWhitespace, Math.max(0, baseDepth) * 2);
246
291
  return truncateText(line.raw.slice(stripChars), SNAPSHOT_LINE_MAX_CHARS);
247
292
  }
293
+ function isRedundantPreviewLine(line, root) {
294
+ if (line === root) {
295
+ return false;
296
+ }
297
+ return ((root.role !== "heading" && line.depth - root.depth > 2) ||
298
+ (root.name.length > 0 &&
299
+ line.name === root.name &&
300
+ (line.role === "heading" || line.role === "link")));
301
+ }
248
302
  export function buildSegmentPreview(segment, maxLines) {
249
303
  const meaningfulLines = getMeaningfulSegmentLines(segment);
250
304
  if (meaningfulLines.length === 0) {
@@ -255,23 +309,21 @@ export function buildSegmentPreview(segment, maxLines) {
255
309
  const seenPreviewKeys = new Set();
256
310
  const rootDepth = segment.root.depth;
257
311
  for (const line of meaningfulLines) {
258
- if (previewLines.length >= maxLines)
312
+ if (previewLines.length >= maxLines) {
259
313
  break;
260
- if (line !== segment.root) {
261
- const relativeDepth = line.depth - rootDepth;
262
- if (segment.root.role !== "heading" && relativeDepth > 2)
263
- continue;
264
- if (segment.root.name.length > 0 && line.name === segment.root.name && (line.role === "heading" || line.role === "link")) {
265
- continue;
266
- }
314
+ }
315
+ if (isRedundantPreviewLine(line, segment.root)) {
316
+ continue;
267
317
  }
268
318
  const key = `${line.role}:${line.name}:${line.ref ?? ""}:${line.depth}`;
269
- if (seenPreviewKeys.has(key))
319
+ if (seenPreviewKeys.has(key)) {
270
320
  continue;
321
+ }
271
322
  seenPreviewKeys.add(key);
272
323
  previewLines.push(line);
273
- if (line.ref)
324
+ if (line.ref !== undefined && line.ref.length > 0) {
274
325
  previewRefIds.add(line.ref);
326
+ }
275
327
  }
276
328
  return {
277
329
  omittedCount: Math.max(0, meaningfulLines.length - previewLines.length),
@@ -279,17 +331,22 @@ export function buildSegmentPreview(segment, maxLines) {
279
331
  lines: previewLines.map((line) => formatPreviewLine(line, rootDepth)),
280
332
  };
281
333
  }
334
+ function hasSnapshotSignal(line) {
335
+ return (SNAPSHOT_SIGNAL_ROLES.has(line.role) || (line.ref ?? "").length > 0 || line.name.length > 0);
336
+ }
282
337
  export function buildFallbackSnapshotOutline(snapshotLines) {
283
338
  const selected = new Set();
284
339
  for (let index = 0; index < snapshotLines.length && selected.size < 4; index += 1) {
285
- if (!isNoiseSnapshotLine(snapshotLines[index]))
340
+ if (!isNoiseSnapshotLine(snapshotLines[index])) {
286
341
  selected.add(index);
342
+ }
287
343
  }
288
344
  for (let index = 0; index < snapshotLines.length && selected.size < SNAPSHOT_FALLBACK_PREVIEW_MAX_LINES; index += 1) {
289
345
  const line = snapshotLines[index];
290
- if (isNoiseSnapshotLine(line))
346
+ if (isNoiseSnapshotLine(line)) {
291
347
  continue;
292
- if (SNAPSHOT_SIGNAL_ROLES.has(line.role) || line.ref || line.name.length > 0) {
348
+ }
349
+ if (hasSnapshotSignal(line)) {
293
350
  selected.add(index);
294
351
  }
295
352
  }
@@ -299,25 +356,27 @@ export function buildFallbackSnapshotOutline(snapshotLines) {
299
356
  .map((index) => snapshotLines[index]);
300
357
  return {
301
358
  omittedCount: Math.max(0, snapshotLines.length - chosenLines.length),
302
- refIds: chosenLines.flatMap((line) => (line.ref ? [line.ref] : [])),
359
+ refIds: chosenLines.flatMap((line) => line.ref !== undefined && line.ref.length > 0 ? [line.ref] : []),
303
360
  lines: chosenLines.map((line) => truncateText(line.raw, SNAPSHOT_LINE_MAX_CHARS)),
304
361
  };
305
362
  }
306
363
  export function buildRefLineOrderMap(snapshotLines) {
307
364
  const map = new Map();
308
365
  for (const line of snapshotLines) {
309
- if (!line.ref || map.has(line.ref))
366
+ if (line.ref === undefined || line.ref.length === 0 || map.has(line.ref)) {
310
367
  continue;
368
+ }
311
369
  map.set(line.ref, line.index);
312
370
  }
313
371
  return map;
314
372
  }
315
373
  export function canUseStructuredSnapshotPreview(snapshotLines, refEntries) {
316
- if (snapshotLines.length === 0)
374
+ if (snapshotLines.length === 0) {
317
375
  return false;
376
+ }
318
377
  const linesWithRecognizedRoles = snapshotLines.filter((line) => line.role !== "unknown").length;
319
378
  const linesWithNames = snapshotLines.filter((line) => line.name.length > 0).length;
320
- const parsedRefIds = new Set(snapshotLines.flatMap((line) => (line.ref ? [line.ref] : [])));
379
+ const parsedRefIds = new Set(snapshotLines.flatMap((line) => line.ref !== undefined && line.ref.length > 0 ? [line.ref] : []));
321
380
  return (linesWithRecognizedRoles >= Math.min(snapshotLines.length, 3) ||
322
381
  linesWithNames >= Math.min(snapshotLines.length, 3) ||
323
382
  parsedRefIds.size >= Math.min(refEntries.length, 3));
@@ -1,5 +1,5 @@
1
- import { redactSensitiveValue } from "../runtime.js";
2
- import { writePersistentSessionArtifactFile, writeSecureTempFile } from "../temp.js";
1
+ import { redactSensitiveValue } from "../runtime-redaction.js";
2
+ import { writePersistentSessionArtifactFile, writeSecureTempFile, } from "../temp.js";
3
3
  import { buildEvictedSessionArtifactEntries, formatSessionArtifactRetentionSummary, mergeSessionArtifactManifest, } from "./artifact-manifest.js";
4
4
  const SNAPSHOT_SPILL_FILE_PREFIX = "pi-agent-browser-snapshot";
5
5
  export async function writeSnapshotSpillFile(data, persistentArtifactStore) {
@@ -9,14 +9,24 @@ export async function writeSnapshotSpillFile(data, persistentArtifactStore) {
9
9
  suffix: ".json",
10
10
  };
11
11
  if (persistentArtifactStore) {
12
- const result = await writePersistentSessionArtifactFile({ ...options, store: persistentArtifactStore });
12
+ const result = await writePersistentSessionArtifactFile({
13
+ ...options,
14
+ store: persistentArtifactStore,
15
+ });
13
16
  return { ...result, storageScope: "persistent-session" };
14
17
  }
15
- return { evictedArtifacts: [], path: await writeSecureTempFile(options), storageScope: "process-temp" };
18
+ return {
19
+ evictedArtifacts: [],
20
+ path: await writeSecureTempFile(options),
21
+ storageScope: "process-temp",
22
+ };
16
23
  }
17
24
  export function applySnapshotArtifactManifest(options) {
18
- if (!options.fullOutputPath || !options.spill)
25
+ if (options.fullOutputPath === undefined ||
26
+ options.fullOutputPath.length === 0 ||
27
+ !options.spill) {
19
28
  return {};
29
+ }
20
30
  const nowMs = Date.now();
21
31
  const entries = [
22
32
  {
@@ -29,6 +39,15 @@ export function applySnapshotArtifactManifest(options) {
29
39
  },
30
40
  ...buildEvictedSessionArtifactEntries(options.spill.evictedArtifacts, nowMs),
31
41
  ];
32
- const artifactManifest = mergeSessionArtifactManifest({ base: options.baseManifest, entries, nowMs });
33
- return artifactManifest ? { artifactManifest, artifactRetentionSummary: formatSessionArtifactRetentionSummary(artifactManifest) } : {};
42
+ const artifactManifest = mergeSessionArtifactManifest({
43
+ base: options.baseManifest,
44
+ entries,
45
+ nowMs,
46
+ });
47
+ return artifactManifest
48
+ ? {
49
+ artifactManifest,
50
+ artifactRetentionSummary: formatSessionArtifactRetentionSummary(artifactManifest),
51
+ }
52
+ : {};
34
53
  }