pi-agent-browser-native 0.9.4 → 0.9.6

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 (388) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +60 -812
  3. package/dist/extensions/agent-browser/index.js +2381 -1706
  4. package/dist/packaged/lib/browser-session-conversion.js +2810 -0
  5. package/dist/packaged/lib/config-policy.js +599 -0
  6. package/dist/packaged/lib/parsing.js +34 -0
  7. package/dist/packaged/lib/playbook.js +694 -0
  8. package/dist/packaged/lib/results/snapshot.js +2671 -0
  9. package/dist/packaged/lib/runtime.js +3027 -0
  10. package/docs/ARCHITECTURE.md +14 -3
  11. package/docs/CODE_QUALITY.md +39 -3
  12. package/docs/COMMAND_REFERENCE.md +22 -22
  13. package/docs/ELECTRON.md +24 -2
  14. package/docs/PERFORMANCE.md +243 -0
  15. package/docs/REFERENCE.md +869 -0
  16. package/docs/RELEASE.md +9 -9
  17. package/docs/REQUIREMENTS.md +1 -1
  18. package/docs/SESSION_STORAGE.md +11 -3
  19. package/docs/SUPPORT_MATRIX.md +16 -11
  20. package/docs/TOOL_CONTRACT.md +17 -13
  21. package/docs/performance/2026-10-12.json +7257 -0
  22. package/docs/platform-smoke.md +3 -3
  23. package/package.json +15 -3
  24. package/scripts/build.mjs +16 -5
  25. package/scripts/config.mjs +24 -20
  26. package/scripts/convert-browser-session.mjs +1 -1
  27. package/scripts/doctor.mjs +2 -2
  28. package/scripts/platform-smoke/lease-evidence.mjs +2 -4
  29. package/scripts/platform-smoke/linux-image/Dockerfile +8 -2
  30. package/scripts/platform-smoke/targets.mjs +1 -5
  31. package/dist/extensions/agent-browser/lib/argv-descriptor.js +0 -123
  32. package/dist/extensions/agent-browser/lib/argv-grammar.js +0 -320
  33. package/dist/extensions/agent-browser/lib/bash-guard.js +0 -193
  34. package/dist/extensions/agent-browser/lib/batch-lifecycle.js +0 -131
  35. package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +0 -61
  36. package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +0 -232
  37. package/dist/extensions/agent-browser/lib/browser-execution-claims.js +0 -202
  38. package/dist/extensions/agent-browser/lib/browser-execution-identity.js +0 -77
  39. package/dist/extensions/agent-browser/lib/browser-journal-branch.js +0 -98
  40. package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +0 -1
  41. package/dist/extensions/agent-browser/lib/browser-journal-projection.js +0 -221
  42. package/dist/extensions/agent-browser/lib/browser-journal-reader.js +0 -89
  43. package/dist/extensions/agent-browser/lib/browser-journal-replay.js +0 -246
  44. package/dist/extensions/agent-browser/lib/browser-journal.js +0 -148
  45. package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +0 -220
  46. package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +0 -282
  47. package/dist/extensions/agent-browser/lib/browser-legacy-types.js +0 -1
  48. package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +0 -217
  49. package/dist/extensions/agent-browser/lib/browser-session-conversion.js +0 -126
  50. package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +0 -35
  51. package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +0 -166
  52. package/dist/extensions/agent-browser/lib/browser-transcript.js +0 -189
  53. package/dist/extensions/agent-browser/lib/browser-value-parsing.js +0 -15
  54. package/dist/extensions/agent-browser/lib/command-capabilities.js +0 -340
  55. package/dist/extensions/agent-browser/lib/command-policy.js +0 -155
  56. package/dist/extensions/agent-browser/lib/command-taxonomy.js +0 -105
  57. package/dist/extensions/agent-browser/lib/config-policy.js +0 -450
  58. package/dist/extensions/agent-browser/lib/config-providers.js +0 -71
  59. package/dist/extensions/agent-browser/lib/config-validation.js +0 -218
  60. package/dist/extensions/agent-browser/lib/config.js +0 -69
  61. package/dist/extensions/agent-browser/lib/electron/cdp.js +0 -58
  62. package/dist/extensions/agent-browser/lib/electron/cleanup.js +0 -308
  63. package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +0 -109
  64. package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +0 -136
  65. package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +0 -89
  66. package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +0 -93
  67. package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +0 -162
  68. package/dist/extensions/agent-browser/lib/electron/discovery-types.js +0 -2
  69. package/dist/extensions/agent-browser/lib/electron/discovery.js +0 -217
  70. package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +0 -102
  71. package/dist/extensions/agent-browser/lib/electron/launch-process.js +0 -209
  72. package/dist/extensions/agent-browser/lib/electron/launch-types.js +0 -2
  73. package/dist/extensions/agent-browser/lib/electron/launch.js +0 -329
  74. package/dist/extensions/agent-browser/lib/executable-path.js +0 -29
  75. package/dist/extensions/agent-browser/lib/execution-cwd.js +0 -67
  76. package/dist/extensions/agent-browser/lib/fs-utils.js +0 -18
  77. package/dist/extensions/agent-browser/lib/input-modes/electron.js +0 -201
  78. package/dist/extensions/agent-browser/lib/input-modes/job.js +0 -195
  79. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +0 -104
  80. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +0 -132
  81. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +0 -57
  82. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +0 -151
  83. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +0 -142
  84. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +0 -83
  85. package/dist/extensions/agent-browser/lib/input-modes/params.js +0 -195
  86. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +0 -268
  87. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +0 -117
  88. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +0 -396
  89. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +0 -86
  90. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +0 -1
  91. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +0 -60
  92. package/dist/extensions/agent-browser/lib/input-modes/script.js +0 -108
  93. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +0 -243
  94. package/dist/extensions/agent-browser/lib/input-modes/shared.js +0 -48
  95. package/dist/extensions/agent-browser/lib/input-modes/types.js +0 -65
  96. package/dist/extensions/agent-browser/lib/json-schema.js +0 -65
  97. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +0 -212
  98. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +0 -165
  99. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +0 -58
  100. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +0 -244
  101. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +0 -84
  102. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +0 -119
  103. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +0 -83
  104. package/dist/extensions/agent-browser/lib/managed-session-restore.js +0 -212
  105. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +0 -277
  106. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +0 -181
  107. package/dist/extensions/agent-browser/lib/managed-session-storage.js +0 -126
  108. package/dist/extensions/agent-browser/lib/native-confirmation.js +0 -140
  109. package/dist/extensions/agent-browser/lib/native-output.js +0 -81
  110. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +0 -182
  111. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +0 -30
  112. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +0 -188
  113. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +0 -82
  114. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +0 -406
  115. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +0 -31
  116. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +0 -240
  117. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +0 -202
  118. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +0 -109
  119. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +0 -119
  120. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +0 -147
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +0 -144
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +0 -123
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +0 -1
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +0 -156
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +0 -179
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +0 -39
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +0 -89
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +0 -97
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +0 -106
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +0 -110
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +0 -53
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +0 -224
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +0 -290
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +0 -167
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +0 -108
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +0 -174
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +0 -65
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +0 -1
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +0 -120
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +0 -192
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +0 -225
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +0 -150
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +0 -165
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +0 -147
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +0 -145
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +0 -159
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +0 -131
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +0 -1
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +0 -93
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +0 -42
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +0 -242
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +0 -75
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +0 -92
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +0 -254
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +0 -121
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +0 -130
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +0 -114
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +0 -121
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +0 -222
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +0 -68
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +0 -202
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +0 -191
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +0 -152
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +0 -182
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +0 -150
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +0 -1
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +0 -1
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +0 -115
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +0 -256
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +0 -1
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +0 -256
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +0 -1
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +0 -93
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +0 -113
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +0 -1
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +0 -316
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +0 -28
  178. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +0 -1
  179. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +0 -142
  180. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +0 -1
  181. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +0 -333
  182. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +0 -1
  183. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +0 -71
  184. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +0 -201
  185. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +0 -183
  186. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +0 -200
  187. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +0 -142
  188. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +0 -25
  189. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +0 -50
  190. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +0 -198
  191. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +0 -1
  192. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +0 -154
  193. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +0 -80
  194. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +0 -14
  195. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +0 -206
  196. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +0 -130
  197. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +0 -210
  198. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +0 -61
  199. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +0 -187
  200. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +0 -171
  201. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +0 -228
  202. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +0 -117
  203. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +0 -182
  204. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +0 -256
  205. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +0 -108
  206. package/dist/extensions/agent-browser/lib/orchestration/browser-run/types.js +0 -1
  207. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +0 -39
  208. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +0 -119
  209. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +0 -92
  210. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +0 -58
  211. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +0 -78
  212. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +0 -1
  213. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +0 -106
  214. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +0 -60
  215. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +0 -86
  216. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +0 -69
  217. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +0 -167
  218. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +0 -164
  219. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +0 -161
  220. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +0 -165
  221. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +0 -98
  222. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +0 -211
  223. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +0 -23
  224. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +0 -99
  225. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +0 -275
  226. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +0 -280
  227. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +0 -303
  228. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +0 -36
  229. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +0 -335
  230. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +0 -227
  231. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +0 -1
  232. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +0 -204
  233. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +0 -139
  234. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +0 -24
  235. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +0 -98
  236. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +0 -295
  237. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +0 -41
  238. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +0 -7
  239. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +0 -102
  240. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +0 -133
  241. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +0 -120
  242. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +0 -180
  243. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +0 -290
  244. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +0 -1
  245. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +0 -269
  246. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +0 -113
  247. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +0 -146
  248. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +0 -58
  249. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +0 -62
  250. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +0 -54
  251. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +0 -1
  252. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +0 -313
  253. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +0 -62
  254. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +0 -144
  255. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +0 -77
  256. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +0 -231
  257. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +0 -142
  258. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +0 -276
  259. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +0 -220
  260. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +0 -55
  261. package/dist/extensions/agent-browser/lib/page-target-batch.js +0 -118
  262. package/dist/extensions/agent-browser/lib/page-target-guards.js +0 -50
  263. package/dist/extensions/agent-browser/lib/page-target-navigation.js +0 -104
  264. package/dist/extensions/agent-browser/lib/page-target-validation.js +0 -90
  265. package/dist/extensions/agent-browser/lib/parsing.js +0 -30
  266. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +0 -343
  267. package/dist/extensions/agent-browser/lib/playbook.js +0 -146
  268. package/dist/extensions/agent-browser/lib/process-child.js +0 -284
  269. package/dist/extensions/agent-browser/lib/process-environment.js +0 -48
  270. package/dist/extensions/agent-browser/lib/process-errors.js +0 -23
  271. package/dist/extensions/agent-browser/lib/process-identity.js +0 -127
  272. package/dist/extensions/agent-browser/lib/process-socket-storage.js +0 -256
  273. package/dist/extensions/agent-browser/lib/process-stdout.js +0 -74
  274. package/dist/extensions/agent-browser/lib/process.js +0 -216
  275. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +0 -287
  276. package/dist/extensions/agent-browser/lib/prompt-policy.js +0 -54
  277. package/dist/extensions/agent-browser/lib/read-command.js +0 -41
  278. package/dist/extensions/agent-browser/lib/read-confirmation.js +0 -162
  279. package/dist/extensions/agent-browser/lib/recording-reservations.js +0 -208
  280. package/dist/extensions/agent-browser/lib/redaction-fields.js +0 -75
  281. package/dist/extensions/agent-browser/lib/redaction-json.js +0 -149
  282. package/dist/extensions/agent-browser/lib/redaction-url.js +0 -88
  283. package/dist/extensions/agent-browser/lib/results/action-contracts.js +0 -1
  284. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +0 -38
  285. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +0 -1
  286. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +0 -133
  287. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +0 -173
  288. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +0 -73
  289. package/dist/extensions/agent-browser/lib/results/categories.js +0 -152
  290. package/dist/extensions/agent-browser/lib/results/confirmation.js +0 -75
  291. package/dist/extensions/agent-browser/lib/results/contracts.js +0 -1
  292. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +0 -99
  293. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +0 -83
  294. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +0 -48
  295. package/dist/extensions/agent-browser/lib/results/envelope.js +0 -198
  296. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +0 -1
  297. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +0 -180
  298. package/dist/extensions/agent-browser/lib/results/network-routes.js +0 -133
  299. package/dist/extensions/agent-browser/lib/results/network.js +0 -89
  300. package/dist/extensions/agent-browser/lib/results/next-actions.js +0 -111
  301. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +0 -320
  302. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +0 -138
  303. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +0 -113
  304. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +0 -145
  305. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +0 -165
  306. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +0 -1
  307. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +0 -118
  308. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +0 -68
  309. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +0 -135
  310. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +0 -227
  311. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +0 -91
  312. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +0 -123
  313. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +0 -54
  314. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +0 -216
  315. package/dist/extensions/agent-browser/lib/results/presentation/common.js +0 -81
  316. package/dist/extensions/agent-browser/lib/results/presentation/content.js +0 -119
  317. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +0 -67
  318. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +0 -79
  319. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +0 -199
  320. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +0 -75
  321. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +0 -216
  322. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +0 -124
  323. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +0 -64
  324. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +0 -209
  325. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +0 -69
  326. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +0 -222
  327. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +0 -124
  328. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +0 -70
  329. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +0 -285
  330. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +0 -1
  331. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +0 -117
  332. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +0 -231
  333. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +0 -75
  334. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +0 -1
  335. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +0 -127
  336. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +0 -120
  337. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +0 -77
  338. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +0 -51
  339. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +0 -145
  340. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +0 -104
  341. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +0 -178
  342. package/dist/extensions/agent-browser/lib/results/presentation/source.js +0 -109
  343. package/dist/extensions/agent-browser/lib/results/presentation.js +0 -19
  344. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +0 -1
  345. package/dist/extensions/agent-browser/lib/results/recording.js +0 -88
  346. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +0 -118
  347. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +0 -60
  348. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +0 -83
  349. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +0 -261
  350. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +0 -266
  351. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +0 -32
  352. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +0 -240
  353. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +0 -103
  354. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +0 -383
  355. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +0 -53
  356. package/dist/extensions/agent-browser/lib/results/snapshot.js +0 -44
  357. package/dist/extensions/agent-browser/lib/results/text.js +0 -44
  358. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +0 -133
  359. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +0 -81
  360. package/dist/extensions/agent-browser/lib/runtime-contracts.js +0 -1
  361. package/dist/extensions/agent-browser/lib/runtime-redaction.js +0 -118
  362. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +0 -144
  363. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +0 -76
  364. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +0 -114
  365. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +0 -123
  366. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +0 -65
  367. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +0 -28
  368. package/dist/extensions/agent-browser/lib/runtime.js +0 -163
  369. package/dist/extensions/agent-browser/lib/session-identity.js +0 -51
  370. package/dist/extensions/agent-browser/lib/session-page-observation.js +0 -357
  371. package/dist/extensions/agent-browser/lib/session-page-state.js +0 -353
  372. package/dist/extensions/agent-browser/lib/session-page-types.js +0 -1
  373. package/dist/extensions/agent-browser/lib/string-enum-schema.js +0 -8
  374. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +0 -78
  375. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +0 -7
  376. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +0 -234
  377. package/dist/extensions/agent-browser/lib/temp-root.js +0 -207
  378. package/dist/extensions/agent-browser/lib/temp.js +0 -91
  379. package/dist/extensions/agent-browser/lib/tool-surface.js +0 -239
  380. package/dist/extensions/agent-browser/lib/upstream-version.js +0 -15
  381. package/dist/extensions/agent-browser/lib/web-search-providers.js +0 -229
  382. package/dist/extensions/agent-browser/lib/web-search-request.js +0 -108
  383. package/dist/extensions/agent-browser/lib/web-search-results.js +0 -281
  384. package/dist/extensions/agent-browser/lib/web-search-schema.js +0 -82
  385. package/dist/extensions/agent-browser/lib/web-search.js +0 -149
  386. package/dist/extensions/agent-browser/lib/webmcp-observation.js +0 -35
  387. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +0 -96
  388. package/dist/scripts/agent-browser-target.mjs +0 -23
@@ -1,221 +0,0 @@
1
- import { Readable, Writable } from "node:stream";
2
- import { pipeline } from "node:stream/promises";
3
- import { isRecord } from "./parsing.js";
4
- import { normalizeProcessError } from "./process-errors.js";
5
- const ENVELOPE_MAX_BYTES = 16 * 1024 * 1024;
6
- function matches(field, key) {
7
- return field === key || (field === "*" && typeof key === "number");
8
- }
9
- function selectedPath(path, fields) {
10
- return fields.some((field) => field.every((key, index) => matches(key, path[index])) ||
11
- path.every((key, index) => matches(field[index], key)));
12
- }
13
- /** Own only selected JSON values; discarded token streams still receive full syntax validation. */
14
- class JsonProjection {
15
- fields;
16
- maxBytes;
17
- stack = [];
18
- root;
19
- literal;
20
- inKey = false;
21
- keyText = "";
22
- bytes = 0;
23
- constructor(fields, maxBytes) {
24
- this.fields = fields;
25
- this.maxBytes = maxBytes;
26
- }
27
- result() {
28
- return isRecord(this.root) ? this.root : undefined;
29
- }
30
- reserve(size) {
31
- this.bytes += size;
32
- if (this.bytes > this.maxBytes) {
33
- throw new Error("Selected journal envelope exceeds its bounded read size.");
34
- }
35
- }
36
- path() {
37
- const frame = this.stack.at(-1);
38
- return frame ? [...frame.path, frame.key ?? frame.index] : [];
39
- }
40
- excluded() {
41
- const frame = this.stack.at(-1);
42
- return frame !== undefined && frame.value === undefined;
43
- }
44
- frame() {
45
- const frame = this.stack.at(-1);
46
- if (!frame) {
47
- throw new Error("Journal JSON container is missing.");
48
- }
49
- return frame;
50
- }
51
- put(value) {
52
- const parent = this.stack.at(-1);
53
- if (!parent) {
54
- this.root = value;
55
- return;
56
- }
57
- if (parent.value && value !== undefined) {
58
- if (Array.isArray(parent.value)) {
59
- parent.value[parent.index] = value;
60
- }
61
- else {
62
- if (parent.key === undefined) {
63
- throw new Error("Journal object key is missing.");
64
- }
65
- Object.defineProperty(parent.value, parent.key, {
66
- value,
67
- writable: true,
68
- enumerable: true,
69
- configurable: true,
70
- });
71
- }
72
- }
73
- parent.key = undefined;
74
- parent.index += 1;
75
- }
76
- consume(token) {
77
- if (token.name === "startKey") {
78
- this.inKey = true;
79
- this.keyText = "";
80
- return;
81
- }
82
- if (token.name === "endKey") {
83
- this.inKey = false;
84
- this.frame().key = this.keyText;
85
- return;
86
- }
87
- if (this.inKey) {
88
- this.consumeKey(token);
89
- return;
90
- }
91
- switch (token.name) {
92
- case "startObject":
93
- case "startArray":
94
- this.startContainer(token.name);
95
- break;
96
- case "endObject":
97
- case "endArray": {
98
- const frame = this.stack.pop();
99
- if (!frame) {
100
- throw new Error("Journal JSON container is missing.");
101
- }
102
- this.put(frame.value);
103
- break;
104
- }
105
- case "startString":
106
- case "startNumber":
107
- this.literal = {
108
- value: "",
109
- selected: !this.excluded() && selectedPath(this.path(), this.fields),
110
- number: token.name === "startNumber",
111
- };
112
- break;
113
- case "stringChunk":
114
- case "numberChunk":
115
- this.consumeLiteral(token.value);
116
- break;
117
- case "endString":
118
- case "endNumber":
119
- this.endLiteral();
120
- break;
121
- case "trueValue":
122
- case "falseValue":
123
- case "nullValue":
124
- this.consumeConstant(token.name);
125
- break;
126
- case "keyValue":
127
- case "numberValue":
128
- case "stringValue":
129
- case "whitespace":
130
- // The unpacked tokenizer emits chunk events; packed/whitespace tokens need no projection.
131
- break;
132
- }
133
- }
134
- consumeKey(token) {
135
- if (token.name !== "stringChunk" || this.excluded()) {
136
- return;
137
- }
138
- const path = this.frame().path;
139
- const wholeContainer = this.fields.some((field) => field.every((key, index) => matches(key, path[index])));
140
- if (wholeContainer || this.keyText.length <= 1024) {
141
- if (wholeContainer) {
142
- this.reserve(Buffer.byteLength(token.value));
143
- }
144
- this.keyText += token.value;
145
- }
146
- }
147
- startContainer(name) {
148
- if (this.stack.length >= 1024) {
149
- throw new Error("Journal JSON nesting exceeds 1024 levels.");
150
- }
151
- // Excluded containers cannot contain a requested descendant; don't allocate their keys/paths.
152
- const currentPath = this.excluded() ? [] : this.path();
153
- const selected = !this.excluded() && selectedPath(currentPath, this.fields);
154
- if (selected) {
155
- this.reserve(32);
156
- }
157
- let value;
158
- if (selected) {
159
- value = name === "startObject" ? {} : [];
160
- }
161
- this.stack.push({ path: currentPath, index: 0, value });
162
- }
163
- consumeLiteral(value) {
164
- if (this.literal?.selected === true) {
165
- this.reserve(Buffer.byteLength(value));
166
- this.literal.value += value;
167
- }
168
- }
169
- endLiteral() {
170
- const literal = this.literal;
171
- let value;
172
- if (literal?.selected === true) {
173
- value = literal.number ? Number(literal.value) : literal.value;
174
- }
175
- this.put(value);
176
- this.literal = undefined;
177
- }
178
- consumeConstant(name) {
179
- const selected = !this.excluded() && selectedPath(this.path(), this.fields);
180
- if (selected) {
181
- this.reserve(8);
182
- }
183
- let value;
184
- if (selected) {
185
- value = name === "nullValue" ? null : name === "trueValue";
186
- }
187
- this.put(value);
188
- }
189
- }
190
- /** Validate discarded values too; the parser never packs their strings or numbers. */
191
- export async function projectJson(
192
- // The native async iterator owns a mutable cursor; this reader consumes bytes without mutating them.
193
- // oxlint-disable-next-line typescript/prefer-readonly-parameter-types
194
- input, fields, maxBytes = ENVELOPE_MAX_BYTES) {
195
- const { parser } = await import("stream-json/parser.js");
196
- async function* decode() {
197
- const decoder = new TextDecoder("utf-8", { fatal: true });
198
- for await (const chunk of input) {
199
- yield decoder.decode(chunk, { stream: true });
200
- }
201
- const tail = decoder.decode();
202
- if (tail.length > 0) {
203
- yield tail;
204
- }
205
- }
206
- const projection = new JsonProjection(fields, maxBytes);
207
- const sink = new Writable({
208
- objectMode: true,
209
- write(token, _encoding, done) {
210
- try {
211
- projection.consume(token);
212
- done();
213
- }
214
- catch (error) {
215
- done(normalizeProcessError(error));
216
- }
217
- },
218
- });
219
- await pipeline(Readable.from(decode()), parser.asStream({ packValues: false, streamValues: true }), sink);
220
- return projection.result();
221
- }
@@ -1,89 +0,0 @@
1
- import { projectJson } from "./browser-journal-projection.js";
2
- export { projectJson } from "./browser-journal-projection.js";
3
- const CHUNK_BYTES = 64 * 1024;
4
- export async function* readRange(file, range) {
5
- let position = range.offset;
6
- const end = range.offset + range.length;
7
- while (position < end) {
8
- const buffer = Buffer.allocUnsafe(Math.min(CHUNK_BYTES, end - position));
9
- // The next range read depends on the bytes actually returned by this read.
10
- // oxlint-disable-next-line no-await-in-loop
11
- const { bytesRead } = await file.read(buffer, 0, buffer.length, position);
12
- if (bytesRead === 0) {
13
- throw new Error("Journal changed or truncated during read.");
14
- }
15
- position += bytesRead;
16
- yield buffer.subarray(0, bytesRead);
17
- }
18
- }
19
- /** Byte framing, not readline: even one discarded value can exceed V8's string limit. */
20
- class JournalLineFramer {
21
- start;
22
- nonblank = false;
23
- constructor(offset) {
24
- this.start = offset;
25
- }
26
- *accept(buffer, position) {
27
- for (let index = 0; index < buffer.length; index++) {
28
- const byte = buffer[index];
29
- if (byte === 10) {
30
- if (this.nonblank) {
31
- yield { offset: this.start, length: position + index + 1 - this.start };
32
- }
33
- this.start = position + index + 1;
34
- this.nonblank = false;
35
- }
36
- else if (![9, 13, 32].includes(byte)) {
37
- this.nonblank = true;
38
- }
39
- }
40
- }
41
- final(end, sealed) {
42
- return this.nonblank && sealed ? { offset: this.start, length: end - this.start } : undefined;
43
- }
44
- }
45
- export async function* journalRanges(file, end, sealed = false, offset = 0) {
46
- let position = offset;
47
- const framer = new JournalLineFramer(offset);
48
- while (position < end) {
49
- const buffer = Buffer.allocUnsafe(Math.min(CHUNK_BYTES, end - position));
50
- // Byte offsets and line framing depend on the preceding read's actual length.
51
- // oxlint-disable-next-line no-await-in-loop
52
- const { bytesRead } = await file.read(buffer, 0, buffer.length, position);
53
- if (bytesRead === 0) {
54
- throw new Error("Journal truncated during read.");
55
- }
56
- yield* framer.accept(buffer.subarray(0, bytesRead), position);
57
- position += bytesRead;
58
- }
59
- const final = framer.final(end, sealed);
60
- if (final) {
61
- yield final;
62
- }
63
- }
64
- const STRUCTURAL_FIELDS = [
65
- ["type"],
66
- ["id"],
67
- ["parentId"],
68
- ["timestamp"],
69
- ["version"],
70
- ["customType"],
71
- ["data", "event", "version"],
72
- ["data", "snapshot", "id"],
73
- ["message", "toolName"],
74
- ["message", "details", "browserEventVersion"],
75
- ["message", "details", "sessionName"],
76
- ["message", "details", "artifactManifest", "version"],
77
- ["message", "details", "electron", "action"],
78
- ];
79
- export async function scanJournalMetadata(file, end, sealed = false) {
80
- const entries = [];
81
- for await (const range of journalRanges(file, end, sealed)) {
82
- const value = await projectJson(readRange(file, range), STRUCTURAL_FIELDS);
83
- if (!value) {
84
- throw new Error(`Expected a journal object at byte ${range.offset}.`);
85
- }
86
- entries.push({ ...range, value });
87
- }
88
- return entries;
89
- }
@@ -1,246 +0,0 @@
1
- import { constants } from "node:fs";
2
- import { open, stat } from "node:fs/promises";
3
- import { BROWSER_TRANSITION_ENTRY, BROWSER_RESULT_TOOLS, applyArtifactChanges, getBrowserRecord, snapshotFromDefinition, } from "./browser-transcript.js";
4
- import { isRecord } from "./parsing.js";
5
- import { getErrorCode } from "./process-errors.js";
6
- import { projectJson, readRange, scanJournalMetadata, } from "./browser-journal-reader.js";
7
- const REPLAY_CUSTOM_TYPES = new Set([
8
- BROWSER_TRANSITION_ENTRY,
9
- "agent-browser-recording-reservation",
10
- "agent-browser-script-session",
11
- ]);
12
- function branchEntries(entries, selectedLeaf) {
13
- const byId = new Map();
14
- for (const entry of entries) {
15
- const id = entry.value.id;
16
- if (typeof id !== "string" || byId.has(id)) {
17
- throw new Error("Journal has a missing or duplicate native entry identity.");
18
- }
19
- byId.set(id, entry);
20
- }
21
- const branch = [];
22
- const seen = new Set();
23
- let leaf = selectedLeaf;
24
- while (leaf !== null) {
25
- if (seen.has(leaf)) {
26
- throw new Error("Journal ancestry contains a cycle.");
27
- }
28
- seen.add(leaf);
29
- const entry = byId.get(leaf);
30
- if (!entry) {
31
- throw new Error(`Selected journal entry ${leaf} is not persisted; browser work requires a committed conversation.`);
32
- }
33
- const parent = entry.value.parentId;
34
- if (parent !== null && typeof parent !== "string") {
35
- throw new Error("Invalid journal parent identity.");
36
- }
37
- branch.push(entry);
38
- leaf = parent;
39
- }
40
- return branch.reverse();
41
- }
42
- function canonicalVersion(entry) {
43
- return isRecord(entry.data) && isRecord(entry.data.event) && entry.data.event.version === 1;
44
- }
45
- function legacyCustom(entry) {
46
- return (entry.type === "custom" &&
47
- (entry.customType === BROWSER_TRANSITION_ENTRY ||
48
- entry.customType === "agent-browser-script-session") &&
49
- !canonicalVersion(entry));
50
- }
51
- function browserMessage(entry) {
52
- const message = isRecord(entry.message) ? entry.message : undefined;
53
- return message &&
54
- typeof message.toolName === "string" &&
55
- BROWSER_RESULT_TOOLS.has(message.toolName)
56
- ? message
57
- : undefined;
58
- }
59
- function legacyBrowserResult(entry) {
60
- const message = browserMessage(entry);
61
- if (!message ||
62
- !isRecord(message.details) ||
63
- message.details.browserEventVersion === 1 ||
64
- canonicalVersion(entry)) {
65
- return false;
66
- }
67
- return (message.details.sessionName !== undefined ||
68
- message.details.artifactManifest !== undefined ||
69
- message.details.electron !== undefined);
70
- }
71
- function validateMemoryEntry(entry) {
72
- if (!isRecord(entry)) {
73
- return;
74
- }
75
- if (legacyCustom(entry) && !getBrowserRecord(entry)) {
76
- throw new Error("Legacy browser records require stopped separate-copy conversion before replay.");
77
- }
78
- const message = browserMessage(entry);
79
- if (entry.type === "message" &&
80
- message &&
81
- isRecord(message.details) &&
82
- message.details.browserEventVersion !== 1 &&
83
- !getBrowserRecord(entry)) {
84
- throw new Error("Legacy browser observations require stopped separate-copy conversion before replay.");
85
- }
86
- }
87
- function inMemoryEntries(manager, physical) {
88
- const entries = physical ? manager.getEntries() : [];
89
- if (!physical) {
90
- const seen = new Set();
91
- let leaf = manager.getLeafId();
92
- while (leaf !== null) {
93
- if (seen.has(leaf)) {
94
- throw new Error("In-memory journal ancestry contains a cycle.");
95
- }
96
- seen.add(leaf);
97
- const entry = manager.getEntry(leaf);
98
- if (!isRecord(entry) || (entry.parentId !== null && typeof entry.parentId !== "string")) {
99
- throw new Error("In-memory journal ancestry is incomplete.");
100
- }
101
- entries.push(entry);
102
- leaf = entry.parentId;
103
- }
104
- entries.reverse();
105
- }
106
- for (const entry of entries) {
107
- validateMemoryEntry(entry);
108
- }
109
- return entries;
110
- }
111
- class PublishedJournalReplay {
112
- file;
113
- projected = [];
114
- definitions = new Map();
115
- constructor(file) {
116
- this.file = file;
117
- }
118
- async project(entries) {
119
- for (const entry of entries) {
120
- // Preserve journal order and bound selected envelope memory during replay.
121
- // oxlint-disable-next-line no-await-in-loop
122
- await this.projectEntry(entry);
123
- }
124
- }
125
- async projectEntry(entry) {
126
- const { value } = entry;
127
- const definition = isRecord(value.data) && isRecord(value.data.snapshot) ? value.data.snapshot.id : undefined;
128
- if (typeof definition === "string") {
129
- if (this.definitions.has(definition)) {
130
- throw new Error("Browser snapshot identity is defined more than once on this ancestry.");
131
- }
132
- this.definitions.set(definition, entry);
133
- }
134
- if (legacyCustom(value) || legacyBrowserResult(value)) {
135
- throw new Error("This session contains legacy browser records. Convert a stopped separate copy with npm exec --package pi-agent-browser-native -- pi-agent-browser-convert before resuming browser work; the original journal is retained.");
136
- }
137
- if (!replayRelevant(value, definition)) {
138
- return;
139
- }
140
- const fields = value.customType === BROWSER_TRANSITION_ENTRY || value.type === "message"
141
- ? [
142
- ["data", "event"],
143
- ["data", "snapshot", "id"],
144
- ]
145
- : [["data"]];
146
- const body = await projectJson(readRange(this.file, entry), fields);
147
- this.projected.push({ ...value, ...body });
148
- }
149
- async resolveWinningDefinitions(physical) {
150
- const { SessionPageState } = await import("./session-page-state.js");
151
- const reduced = SessionPageState.fromBranch(this.projected);
152
- const winners = new Set((physical ? [] : [...reduced.views().values()]).flatMap((page) => page.refSnapshot?.snapshotId !== undefined && page.refSnapshot.snapshotId.length > 0
153
- ? [page.refSnapshot.snapshotId]
154
- : []));
155
- for (const id of winners) {
156
- // Each winning snapshot is materialized once, without retaining unrelated historical ref maps.
157
- // oxlint-disable-next-line no-await-in-loop
158
- await this.resolveDefinition(id);
159
- }
160
- let manifest;
161
- for (const entry of this.projected) {
162
- manifest = applyArtifactChanges(manifest, getBrowserRecord(entry)?.event.artifacts);
163
- }
164
- return this.projected;
165
- }
166
- async resolveDefinition(id) {
167
- const entry = this.definitions.get(id);
168
- if (!entry) {
169
- throw new Error(`Browser snapshot ${id} has no ancestral definition; inspect and take a fresh snapshot.`);
170
- }
171
- // ponytail: a requested individual snapshot must fit the consumer's memory; upgrade with native per-value paging if needed.
172
- const body = await projectJson(readRange(this.file, entry), [["data", "snapshot"]], Infinity);
173
- const destination = this.projected.find((candidate) => isRecord(candidate) && candidate.id === entry.value.id);
174
- if (!isRecord(destination) || !isRecord(destination.data) || !isRecord(body?.data)) {
175
- throw new Error("Winning browser snapshot could not be read.");
176
- }
177
- destination.data.snapshot = body.data.snapshot;
178
- if (!isRecord(body.data.snapshot) || body.data.snapshot.id !== id) {
179
- throw new Error("Winning browser snapshot identity is invalid.");
180
- }
181
- snapshotFromDefinition(body.data.snapshot);
182
- }
183
- }
184
- function replayRelevant(value, definition) {
185
- return ((value.type === "custom" &&
186
- typeof value.customType === "string" &&
187
- REPLAY_CUSTOM_TYPES.has(value.customType)) ||
188
- (isRecord(value.data) && isRecord(value.data.event)) ||
189
- definition !== undefined);
190
- }
191
- async function verifyCapturedFile(file, path, captured) {
192
- const current = await file.stat();
193
- const currentPath = await stat(path);
194
- if (current.dev !== captured.dev ||
195
- current.ino !== captured.ino ||
196
- current.size < captured.size ||
197
- currentPath.dev !== captured.dev ||
198
- currentPath.ino !== captured.ino) {
199
- throw new Error("Pi journal replaced or truncated during replay.");
200
- }
201
- }
202
- function validateJournalHeader(metadata, sessionId) {
203
- const header = metadata.find((entry) => entry.value.type === "session");
204
- if (header?.value.id !== sessionId) {
205
- throw new Error("Pi session journal identity does not match the active session.");
206
- }
207
- }
208
- async function openPublishedJournal(path) {
209
- try {
210
- return await open(path, constants.O_RDONLY);
211
- }
212
- catch (error) {
213
- if (getErrorCode(error) === "ENOENT") {
214
- return undefined;
215
- }
216
- throw error;
217
- }
218
- }
219
- export async function readBrowserEntries(manager, physical = false) {
220
- const path = manager.getSessionFile();
221
- if (path === undefined || path.length === 0) {
222
- return inMemoryEntries(manager, physical);
223
- }
224
- const leaf = physical ? null : manager.getLeafId();
225
- const file = await openPublishedJournal(path);
226
- if (!file) {
227
- return inMemoryEntries(manager, physical);
228
- }
229
- try {
230
- const captured = await file.stat();
231
- if (!captured.isFile()) {
232
- throw new Error("Pi session journal is not a regular file.");
233
- }
234
- const metadata = await scanJournalMetadata(file, captured.size);
235
- validateJournalHeader(metadata, manager.getHeader()?.id ?? manager.getSessionId());
236
- const records = metadata.filter((entry) => entry.value.type !== "session");
237
- const replay = new PublishedJournalReplay(file);
238
- await replay.project(physical ? records : branchEntries(records, leaf));
239
- const entries = await replay.resolveWinningDefinitions(physical);
240
- await verifyCapturedFile(file, path, captured);
241
- return entries;
242
- }
243
- finally {
244
- await file.close();
245
- }
246
- }