pi-agent-browser-native 0.9.5 → 0.9.7

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 (398) hide show
  1. package/CHANGELOG.md +114 -1
  2. package/README.md +17 -6
  3. package/dist/extensions/agent-browser/index.js +2482 -925
  4. package/dist/packaged/lib/browser-session-conversion.js +2946 -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 +728 -0
  8. package/dist/packaged/lib/results/snapshot.js +2800 -0
  9. package/dist/packaged/lib/runtime.js +3075 -0
  10. package/docs/ARCHITECTURE.md +29 -10
  11. package/docs/CODE_QUALITY.md +32 -5
  12. package/docs/COMMAND_REFERENCE.md +156 -40
  13. package/docs/ELECTRON.md +1 -1
  14. package/docs/PERFORMANCE.md +252 -0
  15. package/docs/REFERENCE.md +15 -15
  16. package/docs/RELEASE.md +41 -18
  17. package/docs/REQUIREMENTS.md +6 -0
  18. package/docs/SESSION_STORAGE.md +13 -5
  19. package/docs/SUPPORT_MATRIX.md +31 -25
  20. package/docs/TOOL_CONTRACT.md +41 -18
  21. package/docs/performance/2026-10-12.json +7257 -0
  22. package/docs/platform-smoke.md +18 -14
  23. package/package.json +18 -4
  24. package/platform-smoke.config.mjs +3 -2
  25. package/scripts/agent-browser-capability-baseline.mjs +16 -2
  26. package/scripts/agent-browser-target.mjs +1 -1
  27. package/scripts/build.mjs +16 -5
  28. package/scripts/capability-options.mjs +20 -0
  29. package/scripts/capability-samples.mjs +23 -10
  30. package/scripts/config.mjs +1 -1
  31. package/scripts/convert-browser-session.mjs +1 -1
  32. package/scripts/platform-smoke/commands.mjs +30 -4
  33. package/scripts/platform-smoke/doctor-support.mjs +11 -2
  34. package/scripts/platform-smoke/doctor-windows.mjs +1 -1
  35. package/scripts/platform-smoke/doctor.mjs +26 -11
  36. package/scripts/platform-smoke/linux-image/Dockerfile +6 -3
  37. package/scripts/platform-smoke/platform-build-windows.ps1 +23 -3
  38. package/scripts/platform-smoke/suite-checks.mjs +11 -1
  39. package/scripts/platform-smoke/targets.mjs +4 -3
  40. package/scripts/platform-smoke.mjs +68 -25
  41. package/dist/extensions/agent-browser/lib/argv-descriptor.js +0 -123
  42. package/dist/extensions/agent-browser/lib/argv-grammar.js +0 -320
  43. package/dist/extensions/agent-browser/lib/bash-guard.js +0 -193
  44. package/dist/extensions/agent-browser/lib/batch-lifecycle.js +0 -131
  45. package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +0 -61
  46. package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +0 -232
  47. package/dist/extensions/agent-browser/lib/browser-execution-claims.js +0 -202
  48. package/dist/extensions/agent-browser/lib/browser-execution-identity.js +0 -77
  49. package/dist/extensions/agent-browser/lib/browser-journal-branch.js +0 -98
  50. package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +0 -1
  51. package/dist/extensions/agent-browser/lib/browser-journal-projection.js +0 -221
  52. package/dist/extensions/agent-browser/lib/browser-journal-reader.js +0 -89
  53. package/dist/extensions/agent-browser/lib/browser-journal-replay.js +0 -246
  54. package/dist/extensions/agent-browser/lib/browser-journal.js +0 -148
  55. package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +0 -220
  56. package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +0 -282
  57. package/dist/extensions/agent-browser/lib/browser-legacy-types.js +0 -1
  58. package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +0 -217
  59. package/dist/extensions/agent-browser/lib/browser-session-conversion.js +0 -126
  60. package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +0 -35
  61. package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +0 -166
  62. package/dist/extensions/agent-browser/lib/browser-transcript.js +0 -189
  63. package/dist/extensions/agent-browser/lib/browser-value-parsing.js +0 -15
  64. package/dist/extensions/agent-browser/lib/command-capabilities.js +0 -340
  65. package/dist/extensions/agent-browser/lib/command-policy.js +0 -155
  66. package/dist/extensions/agent-browser/lib/command-taxonomy.js +0 -105
  67. package/dist/extensions/agent-browser/lib/config-policy.js +0 -450
  68. package/dist/extensions/agent-browser/lib/config-providers.js +0 -71
  69. package/dist/extensions/agent-browser/lib/config-validation.js +0 -231
  70. package/dist/extensions/agent-browser/lib/config.js +0 -69
  71. package/dist/extensions/agent-browser/lib/electron/cdp.js +0 -62
  72. package/dist/extensions/agent-browser/lib/electron/cleanup.js +0 -274
  73. package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +0 -109
  74. package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +0 -136
  75. package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +0 -90
  76. package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +0 -93
  77. package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +0 -162
  78. package/dist/extensions/agent-browser/lib/electron/discovery-types.js +0 -2
  79. package/dist/extensions/agent-browser/lib/electron/discovery.js +0 -217
  80. package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +0 -102
  81. package/dist/extensions/agent-browser/lib/electron/launch-process.js +0 -209
  82. package/dist/extensions/agent-browser/lib/electron/launch-types.js +0 -2
  83. package/dist/extensions/agent-browser/lib/electron/launch.js +0 -340
  84. package/dist/extensions/agent-browser/lib/executable-path.js +0 -29
  85. package/dist/extensions/agent-browser/lib/execution-cwd.js +0 -67
  86. package/dist/extensions/agent-browser/lib/fs-utils.js +0 -10
  87. package/dist/extensions/agent-browser/lib/input-modes/electron.js +0 -201
  88. package/dist/extensions/agent-browser/lib/input-modes/job.js +0 -198
  89. package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +0 -116
  90. package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +0 -132
  91. package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +0 -57
  92. package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +0 -151
  93. package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +0 -142
  94. package/dist/extensions/agent-browser/lib/input-modes/lookups.js +0 -84
  95. package/dist/extensions/agent-browser/lib/input-modes/params.js +0 -195
  96. package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +0 -268
  97. package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +0 -117
  98. package/dist/extensions/agent-browser/lib/input-modes/script-child.js +0 -396
  99. package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +0 -86
  100. package/dist/extensions/agent-browser/lib/input-modes/script-types.js +0 -1
  101. package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +0 -60
  102. package/dist/extensions/agent-browser/lib/input-modes/script.js +0 -108
  103. package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +0 -243
  104. package/dist/extensions/agent-browser/lib/input-modes/shared.js +0 -48
  105. package/dist/extensions/agent-browser/lib/input-modes/types.js +0 -65
  106. package/dist/extensions/agent-browser/lib/json-schema.js +0 -65
  107. package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +0 -212
  108. package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +0 -165
  109. package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +0 -58
  110. package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +0 -244
  111. package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +0 -84
  112. package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +0 -119
  113. package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +0 -83
  114. package/dist/extensions/agent-browser/lib/managed-session-restore.js +0 -212
  115. package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +0 -277
  116. package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +0 -181
  117. package/dist/extensions/agent-browser/lib/managed-session-storage.js +0 -126
  118. package/dist/extensions/agent-browser/lib/native-confirmation.js +0 -140
  119. package/dist/extensions/agent-browser/lib/native-output.js +0 -81
  120. package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +0 -182
  121. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +0 -30
  122. package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +0 -188
  123. package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +0 -82
  124. package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +0 -406
  125. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +0 -31
  126. package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +0 -240
  127. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +0 -203
  128. package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +0 -109
  129. package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +0 -119
  130. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +0 -147
  131. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +0 -144
  132. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +0 -123
  133. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +0 -1
  134. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +0 -156
  135. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +0 -187
  136. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +0 -39
  137. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +0 -89
  138. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +0 -97
  139. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +0 -106
  140. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +0 -110
  141. package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +0 -53
  142. package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +0 -224
  143. package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +0 -290
  144. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +0 -167
  145. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +0 -108
  146. package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +0 -174
  147. package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +0 -65
  148. package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +0 -1
  149. package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +0 -120
  150. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +0 -192
  151. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +0 -225
  152. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +0 -150
  153. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +0 -174
  154. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +0 -147
  155. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +0 -145
  156. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +0 -159
  157. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +0 -131
  158. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +0 -1
  159. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +0 -93
  160. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +0 -42
  161. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +0 -242
  162. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +0 -75
  163. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +0 -92
  164. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +0 -254
  165. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +0 -121
  166. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +0 -130
  167. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +0 -114
  168. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +0 -121
  169. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +0 -222
  170. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +0 -68
  171. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +0 -202
  172. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +0 -191
  173. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +0 -152
  174. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +0 -182
  175. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +0 -150
  176. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +0 -1
  177. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +0 -1
  178. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +0 -115
  179. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +0 -256
  180. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +0 -1
  181. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +0 -256
  182. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +0 -1
  183. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +0 -93
  184. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +0 -113
  185. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +0 -1
  186. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +0 -316
  187. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +0 -28
  188. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +0 -1
  189. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +0 -142
  190. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +0 -1
  191. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +0 -333
  192. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +0 -1
  193. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +0 -71
  194. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +0 -201
  195. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +0 -183
  196. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +0 -200
  197. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +0 -142
  198. package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +0 -25
  199. package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +0 -50
  200. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +0 -198
  201. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +0 -1
  202. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +0 -154
  203. package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +0 -80
  204. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +0 -14
  205. package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +0 -206
  206. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +0 -130
  207. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +0 -212
  208. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +0 -61
  209. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +0 -187
  210. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +0 -169
  211. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +0 -228
  212. package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +0 -117
  213. package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +0 -182
  214. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +0 -256
  215. package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +0 -108
  216. package/dist/extensions/agent-browser/lib/orchestration/browser-run/types.js +0 -1
  217. package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +0 -39
  218. package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +0 -119
  219. package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +0 -93
  220. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +0 -58
  221. package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +0 -78
  222. package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +0 -1
  223. package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +0 -106
  224. package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +0 -60
  225. package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +0 -86
  226. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +0 -68
  227. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +0 -169
  228. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +0 -182
  229. package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +0 -161
  230. package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +0 -167
  231. package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +0 -98
  232. package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +0 -211
  233. package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +0 -23
  234. package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +0 -99
  235. package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +0 -275
  236. package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +0 -280
  237. package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +0 -303
  238. package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +0 -36
  239. package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +0 -335
  240. package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +0 -227
  241. package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +0 -1
  242. package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +0 -204
  243. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +0 -139
  244. package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +0 -24
  245. package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +0 -98
  246. package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +0 -295
  247. package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +0 -41
  248. package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +0 -7
  249. package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +0 -102
  250. package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +0 -133
  251. package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +0 -120
  252. package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +0 -180
  253. package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +0 -290
  254. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +0 -1
  255. package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +0 -269
  256. package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +0 -113
  257. package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +0 -146
  258. package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +0 -58
  259. package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +0 -62
  260. package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +0 -54
  261. package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +0 -1
  262. package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +0 -313
  263. package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +0 -62
  264. package/dist/extensions/agent-browser/lib/orchestration/native-config.js +0 -144
  265. package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +0 -77
  266. package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +0 -231
  267. package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +0 -142
  268. package/dist/extensions/agent-browser/lib/orchestration/output-file.js +0 -276
  269. package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +0 -220
  270. package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +0 -55
  271. package/dist/extensions/agent-browser/lib/page-target-batch.js +0 -118
  272. package/dist/extensions/agent-browser/lib/page-target-guards.js +0 -50
  273. package/dist/extensions/agent-browser/lib/page-target-navigation.js +0 -104
  274. package/dist/extensions/agent-browser/lib/page-target-validation.js +0 -90
  275. package/dist/extensions/agent-browser/lib/parsing.js +0 -30
  276. package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +0 -343
  277. package/dist/extensions/agent-browser/lib/playbook.js +0 -146
  278. package/dist/extensions/agent-browser/lib/process-child.js +0 -284
  279. package/dist/extensions/agent-browser/lib/process-environment.js +0 -48
  280. package/dist/extensions/agent-browser/lib/process-errors.js +0 -23
  281. package/dist/extensions/agent-browser/lib/process-identity.js +0 -127
  282. package/dist/extensions/agent-browser/lib/process-socket-storage.js +0 -256
  283. package/dist/extensions/agent-browser/lib/process-stdout.js +0 -74
  284. package/dist/extensions/agent-browser/lib/process.js +0 -216
  285. package/dist/extensions/agent-browser/lib/prompt-artifacts.js +0 -287
  286. package/dist/extensions/agent-browser/lib/prompt-policy.js +0 -54
  287. package/dist/extensions/agent-browser/lib/read-command.js +0 -41
  288. package/dist/extensions/agent-browser/lib/read-confirmation.js +0 -162
  289. package/dist/extensions/agent-browser/lib/recording-reservations.js +0 -208
  290. package/dist/extensions/agent-browser/lib/redaction-fields.js +0 -75
  291. package/dist/extensions/agent-browser/lib/redaction-json.js +0 -149
  292. package/dist/extensions/agent-browser/lib/redaction-url.js +0 -88
  293. package/dist/extensions/agent-browser/lib/results/action-contracts.js +0 -1
  294. package/dist/extensions/agent-browser/lib/results/action-recommendations.js +0 -38
  295. package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +0 -1
  296. package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +0 -133
  297. package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +0 -173
  298. package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +0 -73
  299. package/dist/extensions/agent-browser/lib/results/categories.js +0 -152
  300. package/dist/extensions/agent-browser/lib/results/confirmation.js +0 -75
  301. package/dist/extensions/agent-browser/lib/results/contracts.js +0 -1
  302. package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +0 -99
  303. package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +0 -83
  304. package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +0 -48
  305. package/dist/extensions/agent-browser/lib/results/envelope.js +0 -198
  306. package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +0 -1
  307. package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +0 -180
  308. package/dist/extensions/agent-browser/lib/results/network-routes.js +0 -133
  309. package/dist/extensions/agent-browser/lib/results/network.js +0 -89
  310. package/dist/extensions/agent-browser/lib/results/next-actions.js +0 -111
  311. package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +0 -320
  312. package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +0 -138
  313. package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +0 -113
  314. package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +0 -145
  315. package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +0 -165
  316. package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +0 -1
  317. package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +0 -118
  318. package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +0 -68
  319. package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +0 -135
  320. package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +0 -227
  321. package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +0 -91
  322. package/dist/extensions/agent-browser/lib/results/presentation/batch.js +0 -123
  323. package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +0 -54
  324. package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +0 -216
  325. package/dist/extensions/agent-browser/lib/results/presentation/common.js +0 -81
  326. package/dist/extensions/agent-browser/lib/results/presentation/content.js +0 -119
  327. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +0 -67
  328. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +0 -79
  329. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +0 -199
  330. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +0 -75
  331. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +0 -216
  332. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +0 -124
  333. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +0 -64
  334. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +0 -209
  335. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +0 -69
  336. package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +0 -222
  337. package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +0 -124
  338. package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +0 -70
  339. package/dist/extensions/agent-browser/lib/results/presentation/errors.js +0 -285
  340. package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +0 -1
  341. package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +0 -117
  342. package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +0 -231
  343. package/dist/extensions/agent-browser/lib/results/presentation/notices.js +0 -75
  344. package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +0 -1
  345. package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +0 -127
  346. package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +0 -120
  347. package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +0 -77
  348. package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +0 -51
  349. package/dist/extensions/agent-browser/lib/results/presentation/registry.js +0 -145
  350. package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +0 -104
  351. package/dist/extensions/agent-browser/lib/results/presentation/skills.js +0 -183
  352. package/dist/extensions/agent-browser/lib/results/presentation/source.js +0 -109
  353. package/dist/extensions/agent-browser/lib/results/presentation.js +0 -19
  354. package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +0 -1
  355. package/dist/extensions/agent-browser/lib/results/recording.js +0 -88
  356. package/dist/extensions/agent-browser/lib/results/recovery-actions.js +0 -118
  357. package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +0 -60
  358. package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +0 -83
  359. package/dist/extensions/agent-browser/lib/results/selector-recovery.js +0 -261
  360. package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +0 -266
  361. package/dist/extensions/agent-browser/lib/results/snapshot-content.js +0 -32
  362. package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +0 -240
  363. package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +0 -103
  364. package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +0 -383
  365. package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +0 -53
  366. package/dist/extensions/agent-browser/lib/results/snapshot.js +0 -44
  367. package/dist/extensions/agent-browser/lib/results/text.js +0 -44
  368. package/dist/extensions/agent-browser/lib/runtime-args-validation.js +0 -133
  369. package/dist/extensions/agent-browser/lib/runtime-compatibility.js +0 -81
  370. package/dist/extensions/agent-browser/lib/runtime-contracts.js +0 -1
  371. package/dist/extensions/agent-browser/lib/runtime-redaction.js +0 -118
  372. package/dist/extensions/agent-browser/lib/runtime-replay-events.js +0 -144
  373. package/dist/extensions/agent-browser/lib/runtime-session-identity.js +0 -76
  374. package/dist/extensions/agent-browser/lib/runtime-session-plan.js +0 -114
  375. package/dist/extensions/agent-browser/lib/runtime-session-replay.js +0 -123
  376. package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +0 -65
  377. package/dist/extensions/agent-browser/lib/runtime-timeouts.js +0 -28
  378. package/dist/extensions/agent-browser/lib/runtime.js +0 -163
  379. package/dist/extensions/agent-browser/lib/session-identity.js +0 -51
  380. package/dist/extensions/agent-browser/lib/session-page-observation.js +0 -357
  381. package/dist/extensions/agent-browser/lib/session-page-state.js +0 -353
  382. package/dist/extensions/agent-browser/lib/session-page-types.js +0 -1
  383. package/dist/extensions/agent-browser/lib/string-enum-schema.js +0 -8
  384. package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +0 -81
  385. package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +0 -7
  386. package/dist/extensions/agent-browser/lib/temp-root-ownership.js +0 -234
  387. package/dist/extensions/agent-browser/lib/temp-root.js +0 -211
  388. package/dist/extensions/agent-browser/lib/temp.js +0 -91
  389. package/dist/extensions/agent-browser/lib/tool-surface.js +0 -239
  390. package/dist/extensions/agent-browser/lib/upstream-version.js +0 -15
  391. package/dist/extensions/agent-browser/lib/web-search-providers.js +0 -193
  392. package/dist/extensions/agent-browser/lib/web-search-request.js +0 -102
  393. package/dist/extensions/agent-browser/lib/web-search-results.js +0 -281
  394. package/dist/extensions/agent-browser/lib/web-search-schema.js +0 -82
  395. package/dist/extensions/agent-browser/lib/web-search.js +0 -167
  396. package/dist/extensions/agent-browser/lib/webmcp-observation.js +0 -35
  397. package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +0 -96
  398. package/dist/scripts/agent-browser-target.mjs +0 -23
@@ -1,14 +1,14 @@
1
1
  # Platform smoke testing
2
2
 
3
- `pi-agent-browser-native` uses a Crabbox-backed local platform smoke gate to prove the package on macOS, Ubuntu Linux, and native Windows before release.
3
+ `pi-agent-browser-native` uses a Crabbox-backed required local platform gate on **macOS and Ubuntu Linux**. Native Windows is **best-effort and explicitly on demand**, not a required default PR or release target.
4
4
 
5
- **Current 0.6.16 rollout exception:** the owner explicitly waived Windows qualification on 2026-09-21, including available runners. Windows failures remain visible but nonblocking, not passed; no further Windows repair experiments are part of this rollout. Linux/macOS and all other required checks remain required. See [release waiver and artifact requirements](RELEASE.md#current-0616-rollout-waiver) and [follow-up #191](https://github.com/fitchmultz/pi-agent-browser-native/issues/191). The commands below are unchanged and a waived Windows result does not make the full composition a passing matrix.
5
+ The owner's 2026-10-22 best-effort decision supersedes [#191](https://github.com/fitchmultz/pi-agent-browser-native/issues/191) / PR291's blocking policy, not their unresolved process-lock/Electron failures. The September waiver is historical, not current authority. Routine Windows CI is one nonblocking official-host build/import/process smoke; broader official/fork full qualification and its environment self-check require manual `windows-qualification=true`. Neither a green required aggregate nor a not-run deep suite is a Windows pass.
6
6
 
7
- Outside that rollout exception, this is a release-blocking gate. Missing setup is not a skipped pass. When a maintainer approves an [alternate native transport](#alternate-native-transports), it must prove the same target-local suites; missing upstream `agent-browser` or browser dependencies still blocks that target.
7
+ Missing macOS/Ubuntu setup is not a skipped pass. Default doctor requires only their providers/setup, not Windows, Parallels or Windows credentials. Explicit Windows doctor/run remains strict and returns real nonzero status. No test assertions, runtime ownership checks or budgets are relaxed.
8
8
 
9
9
  ## Required release gate
10
10
 
11
- Run the cheap harness checks first, build the project-owned Ubuntu image, run doctor explicitly, then run the full matrix and inspect the evidence:
11
+ Run the cheap harness checks first, build the project-owned Ubuntu image, run doctor explicitly, then run the required matrix and inspect the evidence:
12
12
 
13
13
  ```sh
14
14
  npm run check:platform-smoke
@@ -16,33 +16,34 @@ npm run smoke:platform:ubuntu-image
16
16
  npm run smoke:platform:doctor
17
17
  npm run smoke:platform:all
18
18
  crabbox list --provider local-container
19
- crabbox list --provider parallels
20
19
  ```
21
20
 
22
- `smoke:platform:all` also runs `smoke:platform:doctor` before any target suite starts, so the explicit doctor step is a readable release checklist step rather than a hidden precondition. The canonical `npm run verify -- release` gate also runs the configured-source lifecycle harness, then the same platform doctor and full `macos,ubuntu,windows-native` matrix after default verification and packaged Pi smoke, so `npm publish` cannot pass `prepublishOnly` without lifecycle and platform gates. After the matrix, inspect `.artifacts/platform-smoke/<run-id>/...` summaries and manifests; a green Crabbox exit without matching suite assertions is not release proof. Use provider-specific `crabbox list` commands for cleanup review because this host may have unrelated Crabbox providers configured that require credentials.
21
+ `smoke:platform:all` means all **required** configured targets, not optional Windows. It also runs `smoke:platform:doctor` before any target suite starts, so the explicit doctor step is a readable release checklist step rather than a hidden precondition. The canonical `npm run verify -- release` gate also runs the configured-source lifecycle harness, then the same platform doctor and configured required `macos,ubuntu` matrix after default verification and packaged Pi smoke, so `npm publish` cannot pass `prepublishOnly` without lifecycle and platform gates. After the matrix, inspect `.artifacts/platform-smoke/<run-id>/...` summaries and manifests; a green Crabbox exit without matching suite assertions is not release proof. Use provider-specific `crabbox list` commands for cleanup review because this host may have unrelated Crabbox providers configured that require credentials.
23
22
 
24
23
  Per-target commands are for diagnosis:
25
24
 
26
25
  ```sh
27
26
  npm run smoke:platform:macos
28
27
  npm run smoke:platform:ubuntu
28
+ node scripts/platform-smoke.mjs doctor --target windows-native
29
29
  npm run smoke:platform:windows-native
30
+ crabbox list --provider parallels # only after an explicitly selected Windows run
30
31
  npm run verify -- platform-smoke run --target ubuntu --suite platform-build
31
32
  ```
32
33
 
33
34
  ## Targets
34
35
 
35
- | Target | Crabbox provider | Shell contract | Release status |
36
- | ---------------- | ---------------------- | -------------------------------------------------- | ------------------------------------------------------------------- |
37
- | `macos` | `ssh` static localhost | POSIX shell on macOS | Required |
38
- | `ubuntu` | `local-container` | POSIX shell in a Docker-compatible local container | Required |
39
- | `windows-native` | `parallels` | native Windows PowerShell over OpenSSH | Nonblocking for the owner-waived 0.6.16 rollout; otherwise required |
36
+ | Target | Crabbox provider | Shell contract | Release status |
37
+ | ---------------- | ---------------------- | -------------------------------------------------- | ------------------------------------ |
38
+ | `macos` | `ssh` static localhost | POSIX shell on macOS | Required |
39
+ | `ubuntu` | `local-container` | POSIX shell in a Docker-compatible local container | Required |
40
+ | `windows-native` | `parallels` | native Windows PowerShell over OpenSSH | Best-effort; explicit selection only |
40
41
 
41
42
  ## Alternate native transports
42
43
 
43
- With maintainer approval, local macOS execution can replace localhost SSH. Routine GitHub Actions has no Windows job; the separate Crabbox/Parallels release target remains as documented above. Record alternate native checks separately from Crabbox SSH or Parallels results. The default `release` and `prepublishOnly` commands still select the Crabbox matrix; record alternate suite evidence separately rather than reporting those commands as passed.
44
+ With maintainer approval, local macOS execution can replace localhost SSH. For native Windows, routine GitHub Actions includes only the nonblocking smoke. On-demand full Windows jobs and Crabbox/Parallels target results retain their own scope and failures; neither is substituted for required macOS/Ubuntu evidence or relabeled a browser-dogfood pass. Record alternate native checks separately from Crabbox SSH or Parallels results. The default `release` and `prepublishOnly` commands still select the Crabbox matrix; record alternate suite evidence separately rather than reporting those commands as passed.
44
45
 
45
- On macOS, run the unchanged commands returned by `buildPlatformBuildCommand('macos', 'pi-agent-browser-native', '24.21.0')` and `buildBrowserDogfoodCommand('macos', '0.38.1', true)` in [`scripts/platform-smoke/targets.mjs`](../scripts/platform-smoke/targets.mjs), serially in a clean private source copy. Use private HOME, npm and Pi settings, and headless browser profiles, and clear inherited `PI_*` variables first: a shell started from Pi exports `PI_PACKAGE_DIR` and `PI_MANAGED_CLI`, which make the archived Pi CLI report the host package instead of the locked suite version. No Remote Login or host security change is required.
46
+ On macOS, run the unchanged commands returned by `buildPlatformBuildCommand('macos', 'pi-agent-browser-native', '24.21.0')` and `buildBrowserDogfoodCommand('macos', '0.41.0', true)` in [`scripts/platform-smoke/targets.mjs`](../scripts/platform-smoke/targets.mjs), serially in a clean private source copy. Use private HOME, npm and Pi settings, and headless browser profiles, and clear inherited `PI_*` variables first: a shell started from Pi exports `PI_PACKAGE_DIR` and `PI_MANAGED_CLI`, which make the archived Pi CLI report the host package instead of the locked suite version. No Remote Login or host security change is required.
46
47
 
47
48
  Retain the exact source head/tree, package and tool versions, native OS/architecture, generated commands, stdout/stderr, every `PLATFORM_*` exit marker, actual Pi registration output, dogfood JSON and verified screenshot. Check the suite assertions below and clean up only the run's processes and temporary files. These alternatives do not waive Ubuntu or any non-platform release check.
48
49
 
@@ -71,6 +72,7 @@ PLATFORM_SMOKE_MAC_PORT=22
71
72
  # The tag suffix is derived from scripts/agent-browser-capability-baseline.mjs.
72
73
  PLATFORM_SMOKE_UBUNTU_IMAGE="pi-agent-browser-native-platform:node24-agent-browser<baseline-version>"
73
74
 
75
+ # Optional: needed only when windows-native is explicitly selected.
74
76
  PLATFORM_SMOKE_WINDOWS_VM="pi-extension-windows-template"
75
77
  PLATFORM_SMOKE_WINDOWS_SNAPSHOT="crabbox-ready-ab-0.33.0"
76
78
  PLATFORM_SMOKE_WINDOWS_USER="<windows-ssh-user>"
@@ -80,7 +82,7 @@ PLATFORM_SMOKE_WINDOWS_WORK_ROOT="C:\\crabbox\\pi-agent-browser-native"
80
82
  PLATFORM_SMOKE_AUTH_ENV=""
81
83
  ```
82
84
 
83
- The Ubuntu target image is derived from `node:24-bookworm`, installs the `agent-browser` version from [`scripts/agent-browser-capability-baseline.mjs`](../scripts/agent-browser-capability-baseline.mjs), installs Debian Chromium plus the upstream Linux WebGPU/Xvfb runtime packages (`libvulkan1`, `mesa-vulkan-drivers`, and `xvfb`) through apt, copies the official Go 1.27.1 toolchain onto `PATH` so `platform-target` can build the [corrected quality checker](CODE_QUALITY.md), creates a non-root `circleci` user, and sets `AGENT_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium`. Rebuild it after upstream rebaselining, or override `PLATFORM_SMOKE_UBUNTU_IMAGE` with an equivalent prepared local image. Do not install `agent-browser` ad hoc inside the Ubuntu smoke command; a missing tool is image/template drift.
85
+ The Ubuntu target image is derived from `node:24-bookworm`, installs the latest stock `agent-browser` and checks it against [`scripts/agent-browser-capability-baseline.mjs`](../scripts/agent-browser-capability-baseline.mjs), installs Debian Chromium plus the upstream Linux WebGPU/Xvfb runtime packages (`libvulkan1`, `mesa-vulkan-drivers`, and `xvfb`) through apt, copies the official Go 1.27.1 toolchain onto `PATH` so `platform-target` can build the [corrected quality checker](CODE_QUALITY.md), creates a non-root `circleci` user, and sets `AGENT_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium`. Rebaseline the project when current upstream differs from the audited version, then rebuild the image, or override `PLATFORM_SMOKE_UBUNTU_IMAGE` with an equivalent prepared local image. Do not install `agent-browser` ad hoc inside the Ubuntu smoke command; a missing tool is image/template drift.
84
86
 
85
87
  The configured upstream `agent-browser` baseline is imported from [`scripts/agent-browser-capability-baseline.mjs`](../scripts/agent-browser-capability-baseline.mjs). Target-local browser suites verify that exact `agent-browser` version before running. Bake the exact upstream CLI and browser runtime into the Windows template/snapshot for speed and reproducibility; missing or stale Windows `agent-browser` / browser readiness is a blocked setup, not something the smoke command repairs. The Windows browser suite checks the preinstalled browser cache and prewarms one short loopback HTTP URL before the extension harness runs.
86
88
 
@@ -112,6 +114,8 @@ Each required target runs `platform-build` and `browser-dogfood-smoke` on one Cr
112
114
  8. Run `pi list --approve` and assert the package is registered under project packages from the packed install.
113
115
  9. Assert the release proof did not use `pi -e .` or `pi --extension .`.
114
116
 
117
+ When `PI_AGENT_BROWSER_RELEASE_TARBALL` names a retained release candidate, the harness copies it through the ordinary Crabbox workspace sync and installs that archive in step 6 instead of the target-local pack. The target-local `npm pack` still runs. Each target records and checks the candidate SHA-256 before and after installation; the caller remains responsible for comparing the original archive with the shared preparation receipt.
118
+
115
119
  ### `browser-dogfood-smoke`
116
120
 
117
121
  1. Run `npm ci` in the synced checkout if needed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-agent-browser-native",
3
- "version": "0.9.5",
3
+ "version": "0.9.7",
4
4
  "description": "pi extension that exposes agent-browser as a native tool for browser automation",
5
5
  "type": "module",
6
6
  "author": "Mitch Fultz (https://github.com/fitchmultz)",
@@ -32,7 +32,14 @@
32
32
  "pi-agent-browser-doctor": "scripts/doctor.mjs"
33
33
  },
34
34
  "files": [
35
- "dist",
35
+ "dist/extensions/agent-browser/index.js",
36
+ "dist/extensions/agent-browser/script-worker.js",
37
+ "dist/packaged/lib/config-policy.js",
38
+ "dist/packaged/lib/browser-session-conversion.js",
39
+ "dist/packaged/lib/parsing.js",
40
+ "dist/packaged/lib/playbook.js",
41
+ "dist/packaged/lib/results/snapshot.js",
42
+ "dist/packaged/lib/runtime.js",
36
43
  "platform-smoke.config.mjs",
37
44
  "scripts/config.mjs",
38
45
  "scripts/convert-browser-session.mjs",
@@ -53,6 +60,8 @@
53
60
  "LICENSE",
54
61
  "docs/ARCHITECTURE.md",
55
62
  "docs/CODE_QUALITY.md",
63
+ "docs/PERFORMANCE.md",
64
+ "docs/performance/2026-10-12.json",
56
65
  "docs/COMMAND_REFERENCE.md",
57
66
  "docs/ELECTRON.md",
58
67
  "docs/RELEASE.md",
@@ -111,14 +120,15 @@
111
120
  "smoke:platform:macos": "node scripts/platform-smoke.mjs run --target macos",
112
121
  "smoke:platform:ubuntu": "node scripts/platform-smoke.mjs run --target ubuntu",
113
122
  "smoke:platform:windows-native": "node scripts/platform-smoke.mjs run --target windows-native",
114
- "smoke:platform:all": "npm run smoke:platform:doctor && node scripts/platform-smoke.mjs run --target macos,ubuntu,windows-native",
123
+ "smoke:platform:all": "npm run smoke:platform:doctor && node scripts/platform-smoke.mjs run",
115
124
  "check:compat": "node scripts/compat-host.mjs && npm run typecheck && npm test && node scripts/verify-package.mjs --smoke-pi",
116
125
  "typecheck": "node ./scripts/project.mjs verify typecheck",
117
- "test": "node ./scripts/build.mjs && node ./scripts/prepare-quality-checker.mjs && tsx --test --test-reporter=tap \"test/**/!(*.serial).test.ts\" && tsx --test --test-reporter=tap --test-concurrency=1 \"test/**/*.serial.test.ts\"",
126
+ "test": "node ./scripts/project.mjs test",
118
127
  "verify": "node ./scripts/project.mjs verify",
119
128
  "prepublishOnly": "npm run verify -- release && npm pack --dry-run",
120
129
  "build": "node ./scripts/build.mjs",
121
130
  "startup-profile": "node ./scripts/profile-startup.mjs",
131
+ "performance-profile": "node --expose-gc ./scripts/profile-performance.mjs",
122
132
  "prepare": "node ./scripts/prepare.mjs"
123
133
  },
124
134
  "packageManager": "npm@12.2.0",
@@ -139,8 +149,12 @@
139
149
  "dependencies": {
140
150
  "cross-spawn": "7.0.6",
141
151
  "path-key": "3.1.1",
152
+ "stream-chain": "4.2.6",
142
153
  "stream-json": "3.7.0",
143
154
  "strip-json-comments": "5.0.3",
144
155
  "which": "2.0.2"
156
+ },
157
+ "overrides": {
158
+ "undici": "8.12.3"
145
159
  }
146
160
  }
@@ -1,5 +1,5 @@
1
1
  // Platform smoke configuration for pi-agent-browser-native.
2
- // Crabbox owns the target lease/sync loop; this file is the project source of truth for release-blocking platform coverage.
2
+ // Crabbox owns the target lease/sync loop; this file is the project source of truth for required and explicitly selected best-effort platform coverage.
3
3
 
4
4
  import packageJson from "./package.json" with { type: "json" };
5
5
  import { CAPABILITY_BASELINE } from "./scripts/agent-browser-capability-baseline.mjs";
@@ -10,7 +10,8 @@ const PLATFORM_SMOKE_UBUNTU_IMAGE = `pi-agent-browser-native-platform:node24-age
10
10
  export default {
11
11
  packageName: "pi-agent-browser-native",
12
12
  artifactRoot: ".artifacts/platform-smoke",
13
- requiredTargets: ["macos", "ubuntu", "windows-native"],
13
+ requiredTargets: ["macos", "ubuntu"],
14
+ optionalTargets: ["windows-native"],
14
15
  requiredSuites: ["platform-build", "browser-dogfood-smoke"],
15
16
  requiredCrabbox: {
16
17
  install: "Homebrew package or PLATFORM_SMOKE_CRABBOX override",
@@ -89,6 +89,8 @@ const inventorySections = Object.freeze([
89
89
  "session list",
90
90
  "state save <path>",
91
91
  "state load <path>",
92
+ "skippedOrigins",
93
+ "restoreSkippedOrigins",
92
94
  "state list",
93
95
  "state show <filename>",
94
96
  "state rename <old-name> <new-name>",
@@ -118,6 +120,7 @@ const inventorySections = Object.freeze([
118
120
  ["session help", "--namespace <name>"],
119
121
  ["state help", "save <path>"],
120
122
  ["state help", "load <path>"],
123
+ ["state help", "elsewhere are skipped and listed"],
121
124
  ["state help", "list"],
122
125
  ["state help", "show <filename>"],
123
126
  ["state help", "rename <old-name> <new-name>"],
@@ -144,7 +147,8 @@ const inventorySections = Object.freeze([
144
147
  "Network, storage, artifacts, diagnostics, and performance",
145
148
  [
146
149
  "network <action>",
147
- "network route <url> [--abort|--body <json>] [--resource-type <csv>]",
150
+ "network route <url> [--abort|--body <json> [--allow-origin <origin>]] [--resource-type <csv>]",
151
+ "--allow-origin <origin>",
148
152
  "network unroute [url]",
149
153
  "network requests [--clear] [--filter <pattern>] [--type <csv>] [--method <method>] [--status <code|range>]",
150
154
  "network request <requestId>",
@@ -210,6 +214,7 @@ const inventorySections = Object.freeze([
210
214
  root("network <action>"),
211
215
  root("--resource-type <csv>"),
212
216
  ["network help", "unroute [url]"],
217
+ ["network help", "--allow-origin <origin>"],
213
218
  ["network help", "network har start"],
214
219
  ["network help", "network har start --content all"],
215
220
  ["network help", "--content <mode>"],
@@ -285,6 +290,7 @@ const inventorySections = Object.freeze([
285
290
  "Batch, auth, confirmations, setup, dashboard, devices, and AI commands",
286
291
  [
287
292
  "batch [--bail]",
293
+ "batch --bail --omit-command",
288
294
  "auth save <name>",
289
295
  "auth save <name> --url <url> --username <user> --password <pass>",
290
296
  "auth save <name> --username-selector <s> --password-selector <s> --submit-selector <s>",
@@ -314,8 +320,10 @@ const inventorySections = Object.freeze([
314
320
  "doctor --webgpu --headed",
315
321
  "doctor --json",
316
322
  "mcp",
323
+ "mcp call <tool>",
317
324
  "mcp --tools core,webmcp",
318
325
  "plugin add <ref>",
326
+ "plugin add <ref> --project",
319
327
  "plugin [list]",
320
328
  "plugin show <name>",
321
329
  "plugin run <name> <type>",
@@ -323,7 +331,7 @@ const inventorySections = Object.freeze([
323
331
  "profiles",
324
332
  ],
325
333
  [
326
- root("batch [--bail]"),
334
+ root('batch [options] ["cmd" ...]'),
327
335
  root("auth save <name>"),
328
336
  root("auth login <name>"),
329
337
  root("confirm <id>"),
@@ -340,6 +348,8 @@ const inventorySections = Object.freeze([
340
348
  root("doctor [--fix]"),
341
349
  root("profiles"),
342
350
  ["batch help", "--bail"],
351
+ ["batch help", "--omit-command"],
352
+ ["batch help", "does not make output safe for secrets"],
343
353
  ["auth help", "--url <url>"],
344
354
  ["auth help", "--username <user>"],
345
355
  ["auth help", "--password <pass>"],
@@ -361,8 +371,12 @@ const inventorySections = Object.freeze([
361
371
  ["auth help", "--credential-provider <p>"],
362
372
  ["auth help", "--no-navigate"],
363
373
  ["mcp help", "agent_browser_open"],
374
+ ["mcp help", "mcp call <tool>"],
375
+ ["mcp help", "_meta.agentBrowserVersion"],
364
376
  ["mcp help", "--tools"],
365
377
  ["plugin help", "Add a plugin from npm or GitHub"],
378
+ ["plugin help", "plugin add writes ~/.agent-browser/config.json by default"],
379
+ ["plugin help", "--project"],
366
380
  ["plugin help", "credential.read"],
367
381
  ],
368
382
  ),
@@ -1,5 +1,5 @@
1
1
  export const TARGET_AGENT_BROWSER_SOURCE = "scripts/agent-browser-target.mjs";
2
- export const TARGET_AGENT_BROWSER_VERSION = "0.38.1";
2
+ export const TARGET_AGENT_BROWSER_VERSION = "0.41.0";
3
3
  export const TARGET_AGENT_BROWSER_VERSION_LABEL = `agent-browser ${TARGET_AGENT_BROWSER_VERSION}`;
4
4
  export const MINIMUM_AGENT_BROWSER_VERSION = "0.35.0";
5
5
  export const MINIMUM_AGENT_BROWSER_VERSION_LABEL = `agent-browser ${MINIMUM_AGENT_BROWSER_VERSION}`;
package/scripts/build.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Purpose: Produce the compiled runtime files that the published Pi package loads.
4
- * Responsibilities: Remove stale dist output, emit runtime assets, bundle the native entrypoint, and fail with clear build output.
4
+ * Responsibilities: Remove stale dist output, emit all checkout runtime assets, bundle the packaged entrypoints, and fail with clear build output.
5
5
  * Scope: Maintainer/package build only; runtime behavior remains in extensions/agent-browser TypeScript sources.
6
6
  * Usage: `npm run build` before package verification, lifecycle validation, and npm pack/publish.
7
7
  * Invariants/Assumptions: `node_modules` provides `typescript` and `esbuild`; Termux supplies Android-native `tsgo` on PATH. `dist/` is generated output.
@@ -51,14 +51,25 @@ async function main() {
51
51
  }
52
52
  throw error;
53
53
  }
54
- // Retain emitted workers and CLI modules; bundle the extension's reachable modules with package imports external.
55
- const entrypoint = join(process.cwd(), "dist", "extensions", "agent-browser", "index.js");
54
+ // Raw checkout libraries share module-owned state; package-only bundles must not overwrite them.
55
+ const distDirectory = join(process.cwd(), "dist");
56
+ const runtimeDirectory = join(process.cwd(), "dist", "extensions", "agent-browser");
56
57
  await build({
57
58
  allowOverwrite: true,
58
59
  bundle: true,
59
- entryPoints: [entrypoint],
60
+ entryPoints: [
61
+ { in: join(runtimeDirectory, "index.js"), out: "extensions/agent-browser/index" },
62
+ ...[
63
+ "lib/config-policy",
64
+ "lib/browser-session-conversion",
65
+ "lib/parsing",
66
+ "lib/playbook",
67
+ "lib/results/snapshot",
68
+ "lib/runtime",
69
+ ].map((path) => ({ in: join(runtimeDirectory, `${path}.js`), out: `packaged/${path}` })),
70
+ ],
60
71
  format: "esm",
61
- outfile: entrypoint,
72
+ outdir: distDirectory,
62
73
  packages: "external",
63
74
  platform: "node",
64
75
  target: "node24.21",
@@ -56,6 +56,9 @@ export const optionsAndEnv = section(
56
56
  "--no-ca-cert",
57
57
  "AGENT_BROWSER_CA_CERT",
58
58
  "AGENT_BROWSER_CLEAR_CA_CERT",
59
+ "--use-system-ca",
60
+ "AGENT_BROWSER_USE_SYSTEM_CA",
61
+ "SSL_CERT_FILE",
59
62
  "--allow-file-access",
60
63
  "AGENT_BROWSER_ALLOW_FILE_ACCESS",
61
64
  "--hide-scrollbars <bool>",
@@ -75,6 +78,9 @@ export const optionsAndEnv = section(
75
78
  "AGENT_BROWSER_DOWNLOAD_PATH",
76
79
  "--engine <name>",
77
80
  "AGENT_BROWSER_ENGINE",
81
+ "--engine obscura",
82
+ "OBSCURA_ALLOW_PRIVATE_NETWORK",
83
+ "AGENT_BROWSER_OBSCURA_STEALTH",
78
84
  "--input-mode <mode>",
79
85
  "--no-auto-dialog",
80
86
  "AGENT_BROWSER_NO_AUTO_DIALOG",
@@ -141,11 +147,15 @@ export const optionsAndEnv = section(
141
147
  "BROWSERLESS_STEALTH",
142
148
  "BROWSERLESS_TTL",
143
149
  "BROWSER_USE_API_KEY",
150
+ "BROWSER_USE_PROFILE_ID",
151
+ "BROWSER_USE_PROXY_COUNTRY",
152
+ "BROWSER_USE_ENABLE_RECORDING",
144
153
  "KERNEL_API_KEY",
145
154
  "KERNEL_HEADLESS",
146
155
  "KERNEL_STEALTH",
147
156
  "KERNEL_TIMEOUT_SECONDS",
148
157
  "KERNEL_PROFILE_NAME",
158
+ "KERNEL_PROFILE_SAVE_CHANGES",
149
159
  "AGENTCORE_API_KEY",
150
160
  "AGENTCORE_REGION",
151
161
  "AGENTCORE_BROWSER_ID",
@@ -210,6 +220,9 @@ export const optionsAndEnv = section(
210
220
  root("--no-ca-cert"),
211
221
  root("AGENT_BROWSER_CA_CERT"),
212
222
  root("AGENT_BROWSER_CLEAR_CA_CERT"),
223
+ root("--use-system-ca"),
224
+ root("AGENT_BROWSER_USE_SYSTEM_CA"),
225
+ ["core skill full", "SSL_CERT_FILE"],
213
226
  root("--allow-file-access"),
214
227
  root("AGENT_BROWSER_ALLOW_FILE_ACCESS"),
215
228
  root("--hide-scrollbars <bool>"),
@@ -226,6 +239,12 @@ export const optionsAndEnv = section(
226
239
  root("AGENT_BROWSER_DOWNLOAD_PATH"),
227
240
  root("--engine <name>"),
228
241
  root("AGENT_BROWSER_ENGINE"),
242
+ root("--engine obscura"),
243
+ root("OBSCURA_ALLOW_PRIVATE_NETWORK"),
244
+ root("AGENT_BROWSER_OBSCURA_STEALTH"),
245
+ root("BROWSER_USE_PROFILE_ID"),
246
+ root("BROWSER_USE_PROXY_COUNTRY"),
247
+ root("BROWSER_USE_ENABLE_RECORDING"),
229
248
  root("--input-mode <mode>"),
230
249
  root("--no-auto-dialog"),
231
250
  root("AGENT_BROWSER_NO_AUTO_DIALOG"),
@@ -266,6 +285,7 @@ export const optionsAndEnv = section(
266
285
  root("--debug"),
267
286
  root("AGENT_BROWSER_DEBUG"),
268
287
  root("--config <path>"),
288
+ root("The auto-discovered ./agent-browser.json cannot set executablePath, args or plugins"),
269
289
  root("AGENT_BROWSER_CONFIG"),
270
290
  root("AGENT_BROWSER_DEFAULT_TIMEOUT"),
271
291
  root("AGENT_BROWSER_AUTOSAVE_INTERVAL_MS"),
@@ -1,9 +1,10 @@
1
1
  /** Audited upstream source evidence and the native help commands sampled for drift. */
2
2
  export const sourceEvidence = Object.freeze({
3
3
  repository: "vercel-labs/agent-browser",
4
- upstreamHead: "aff6125c023b810ea3f2e5deec5379e9a4270bdc",
5
- upstreamPackageVersion: "0.38.1",
4
+ upstreamHead: "1453dd37a40c730fe00f592bc32198a896ff8747",
5
+ upstreamPackageVersion: "0.41.0",
6
6
  inspectedSources: Object.freeze([
7
+ "stock npm agent-browser@0.41.0 tarball and skill-data/",
7
8
  "agent-browser --version",
8
9
  "agent-browser --help",
9
10
  "selected agent-browser <command> --help output",
@@ -20,19 +21,28 @@ export const sourceEvidence = Object.freeze({
20
21
  "bin/agent-browser.js",
21
22
  "cli/src/ca_bundle.rs",
22
23
  "cli/src/commands.rs",
24
+ "cli/src/connection.rs",
23
25
  "cli/src/mcp.rs",
24
26
  "cli/src/flags.rs",
27
+ "cli/src/main.rs",
28
+ "cli/src/session_files.rs",
29
+ "cli/src/plugins.rs",
25
30
  "cli/src/read.rs",
31
+ "cli/src/tls.rs",
26
32
  "cli/src/doctor/ffmpeg.rs",
27
33
  "cli/src/doctor/webgpu.rs",
28
34
  "cli/src/native/actions.rs",
29
35
  "cli/src/native/a11y/mod.rs",
30
36
  "cli/src/native/browser.rs",
37
+ "cli/src/native/cdp/obscura.rs",
38
+ "cli/src/native/policy.rs",
39
+ "cli/src/native/providers.rs",
31
40
  "cli/src/native/tab_binding.rs",
32
41
  "cli/src/native/daemon.rs",
33
42
  "cli/src/native/element.rs",
34
43
  "cli/src/native/recording.rs",
35
44
  "cli/src/native/snapshot.rs",
45
+ "cli/src/native/state.rs",
36
46
  "cli/src/native/interaction.rs",
37
47
  "cli/src/native/screenshot.rs",
38
48
  "cli/src/native/stream/cdp_loop.rs",
@@ -41,13 +51,17 @@ export const sourceEvidence = Object.freeze({
41
51
  "cli/src/native/test_fixtures/webmcp_probe.html",
42
52
  "cli/src/native/webmcp.rs",
43
53
  "cli/src/output.rs",
44
- "docs/src/app/webgpu/page.mdx",
45
- "docs/src/app/webmcp/page.mdx",
46
- "docs/src/app/network/page.mdx",
47
- "docs/src/app/proxy/page.mdx",
48
- "docs/src/app/selectors/page.mdx",
49
- "docs/src/app/skills/page.mdx",
50
- "docs/src/app/commands/page.mdx",
54
+ "docs/content/docs/webgpu.mdx",
55
+ "docs/content/docs/webmcp.mdx",
56
+ "docs/content/docs/network.mdx",
57
+ "docs/content/docs/proxy.mdx",
58
+ "docs/content/docs/selectors.mdx",
59
+ "docs/content/docs/skills.mdx",
60
+ "docs/content/docs/commands.mdx",
61
+ "docs/content/docs/engines/obscura.mdx",
62
+ "docs/content/docs/providers/browser-use.mdx",
63
+ "docs/content/docs/providers/kernel.mdx",
64
+ "cli/tests/tls_cli.rs",
51
65
  "skill-data/derive-client/SKILL.md",
52
66
  "skill-data/core/SKILL.md",
53
67
  "skill-data/core/references/video-recording.md",
@@ -60,7 +74,6 @@ export const sourceEvidence = Object.freeze({
60
74
  "packages/@agent-browser/sandbox/README.md",
61
75
  "packages/@agent-browser/sandbox/src/shared.ts",
62
76
  "packages/@agent-browser/sandbox/src/vercel.ts",
63
- "packages/@agent-browser/sandbox/src/eve.ts",
64
77
  ]),
65
78
  });
66
79
 
@@ -17,7 +17,7 @@ async function loadConfigPolicyModule() {
17
17
  if (existsSync(sourcePolicyUrl)) {
18
18
  return import(sourcePolicyUrl.href);
19
19
  }
20
- return import("../dist/extensions/agent-browser/lib/config-policy.js");
20
+ return import("../dist/packaged/lib/config-policy.js");
21
21
  }
22
22
 
23
23
  const {
@@ -23,7 +23,7 @@ if (values.help) {
23
23
  );
24
24
  }
25
25
  const { convertBrowserSession } =
26
- await import("../dist/extensions/agent-browser/lib/browser-session-conversion.js");
26
+ await import("../dist/packaged/lib/browser-session-conversion.js");
27
27
  const receipt = await convertBrowserSession({
28
28
  source: values.source,
29
29
  destination: values.output,
@@ -10,10 +10,19 @@ function psSingleQuote(value) {
10
10
  return `'${String(value).replace(/'/g, "''")}'`;
11
11
  }
12
12
 
13
- export function buildPlatformBuildCommand(targetName, packageName, nodeValidationVersion) {
13
+ export function buildPlatformBuildCommand(
14
+ targetName,
15
+ packageName,
16
+ nodeValidationVersion,
17
+ candidate,
18
+ ) {
14
19
  if (platformFor(targetName) === "powershell") {
15
- return `powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File .\\scripts\\platform-smoke\\platform-build-windows.ps1 -PackageName ${psSingleQuote(packageName)} -NodeValidationVersion ${psSingleQuote(nodeValidationVersion)}`;
20
+ const candidateArgs = candidate
21
+ ? ` -CandidatePath ${psSingleQuote(candidate.path)} -CandidateSha256 ${psSingleQuote(candidate.sha256)}`
22
+ : "";
23
+ return `powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File .\\scripts\\platform-smoke\\platform-build-windows.ps1 -PackageName ${psSingleQuote(packageName)} -NodeValidationVersion ${psSingleQuote(nodeValidationVersion)}${candidateArgs}`;
16
24
  }
25
+ const candidateHash = `node -e 'process.stdout.write(require("node:crypto").createHash("sha256").update(require("node:fs").readFileSync(process.argv[1])).digest("hex"))' "$PACK_FILE"`;
17
26
  return [
18
27
  `echo "Starting platform-build in $(pwd) at $(date -u +%Y-%m-%dT%H:%M:%SZ)"`,
19
28
  `RUN_ROOT=".platform-smoke-runs/platform-build-$(date -u +%Y%m%dT%H%M%SZ)-$$"`,
@@ -37,11 +46,21 @@ export function buildPlatformBuildCommand(targetName, packageName, nodeValidatio
37
46
  `cat "$PACK_DIR/npm-pack.stderr.txt"`,
38
47
  `PACK_FILE="$PACK_DIR/$PACK_TARBALL"`,
39
48
  `echo "PLATFORM_NPM_PACK_EXIT=$PACK_EXIT"`,
49
+ ...(candidate
50
+ ? [
51
+ `CANDIDATE_EXIT=0`,
52
+ `CANDIDATE_SOURCE=${shellQuote(candidate.path)}`,
53
+ `PACK_FILE="$PACK_DIR/release-candidate.tgz"`,
54
+ `if cp "$SOURCE_ROOT/$CANDIDATE_SOURCE" "$PACK_FILE"; then CANDIDATE_BEFORE=$(${candidateHash}); else CANDIDATE_BEFORE=""; fi`,
55
+ `echo "PLATFORM_CANDIDATE_SHA256_BEFORE=$CANDIDATE_BEFORE"`,
56
+ `if [ "$CANDIDATE_BEFORE" != ${shellQuote(candidate.sha256)} ]; then CANDIDATE_EXIT=1; fi`,
57
+ ]
58
+ : []),
40
59
  `echo "PLATFORM_PACKED_TARBALL=$PACK_FILE"`,
41
60
  `PI_CLI="$SOURCE_ROOT/node_modules/.bin/pi"`,
42
61
  `if [ ! -x "$PI_CLI" ]; then PI_CLI="$(command -v pi || true)"; fi`,
43
62
  `echo "PLATFORM_PI_CLI=$PI_CLI"`,
44
- `if [ -n "$PACK_TARBALL" ] && [ -f "$PACK_FILE" ]; then (cd "$PI_PROJECT" && npm init -y >"$PACK_DIR/packed-node-install.stdout.txt" 2>"$PACK_DIR/packed-node-install.stderr.txt" && npm install --no-save "$PACK_FILE" >>"$PACK_DIR/packed-node-install.stdout.txt" 2>>"$PACK_DIR/packed-node-install.stderr.txt"); PACKED_NODE_INSTALL_EXIT=$?; else echo "missing tarball" >"$PACK_DIR/packed-node-install.stderr.txt"; PACKED_NODE_INSTALL_EXIT=1; fi`,
63
+ `if [ -n "$PACK_TARBALL" ] && [ -f "$PACK_FILE" ]${candidate ? ' && [ "$CANDIDATE_EXIT" -eq 0 ]' : ""}; then (cd "$PI_PROJECT" && npm init -y >"$PACK_DIR/packed-node-install.stdout.txt" 2>"$PACK_DIR/packed-node-install.stderr.txt" && npm install --no-save "$PACK_FILE" >>"$PACK_DIR/packed-node-install.stdout.txt" 2>>"$PACK_DIR/packed-node-install.stderr.txt"); PACKED_NODE_INSTALL_EXIT=$?; else echo "missing or invalid tarball" >"$PACK_DIR/packed-node-install.stderr.txt"; PACKED_NODE_INSTALL_EXIT=1; fi`,
45
64
  `echo "PLATFORM_PACKED_NODE_INSTALL_EXIT=$PACKED_NODE_INSTALL_EXIT"`,
46
65
  `echo "--- PACKED_NODE_INSTALL_STDOUT START ---"; cat "$PACK_DIR/packed-node-install.stdout.txt" 2>/dev/null || true; echo "--- PACKED_NODE_INSTALL_STDOUT END ---"`,
47
66
  `echo "--- PACKED_NODE_INSTALL_STDERR START ---"; cat "$PACK_DIR/packed-node-install.stderr.txt" 2>/dev/null || true; echo "--- PACKED_NODE_INSTALL_STDERR END ---"`,
@@ -53,7 +72,14 @@ export function buildPlatformBuildCommand(targetName, packageName, nodeValidatio
53
72
  `echo "PLATFORM_PI_LIST_EXIT=$PI_LIST_EXIT"`,
54
73
  `echo "--- PI_LIST_STDOUT START ---"; cat "$PACK_DIR/pi-list.stdout.txt" 2>/dev/null || true; echo "--- PI_LIST_STDOUT END ---"`,
55
74
  `echo "--- PI_LIST_STDERR START ---"; cat "$PACK_DIR/pi-list.stderr.txt" 2>/dev/null || true; echo "--- PI_LIST_STDERR END ---"`,
56
- `if [ "$NODE_VERSION_EXIT" -ne 0 ] || [ "$NPM_CI_EXIT" -ne 0 ] || [ "$VERIFY_EXIT" -ne 0 ] || [ "$PACK_EXIT" -ne 0 ] || [ "$PACKED_NODE_INSTALL_EXIT" -ne 0 ] || [ "$PI_INSTALL_EXIT" -ne 0 ] || [ "$PI_LIST_EXIT" -ne 0 ]; then echo "PLATFORM_BUILD_FAILED"; exit 1; fi`,
75
+ ...(candidate
76
+ ? [
77
+ `CANDIDATE_AFTER=$(${candidateHash})`,
78
+ `echo "PLATFORM_CANDIDATE_SHA256_AFTER=$CANDIDATE_AFTER"`,
79
+ `if [ "$CANDIDATE_AFTER" != ${shellQuote(candidate.sha256)} ]; then CANDIDATE_EXIT=1; fi`,
80
+ ]
81
+ : []),
82
+ `if [ "$NODE_VERSION_EXIT" -ne 0 ] || [ "$NPM_CI_EXIT" -ne 0 ] || [ "$VERIFY_EXIT" -ne 0 ] || [ "$PACK_EXIT" -ne 0 ] || [ "$PACKED_NODE_INSTALL_EXIT" -ne 0 ] || [ "$PI_INSTALL_EXIT" -ne 0 ] || [ "$PI_LIST_EXIT" -ne 0 ]${candidate ? ' || [ "$CANDIDATE_EXIT" -ne 0 ]' : ""}; then echo "PLATFORM_BUILD_FAILED"; exit 1; fi`,
57
83
  `echo "PLATFORM_BUILD_OK"`,
58
84
  ].join("\n");
59
85
  }
@@ -85,12 +85,21 @@ function isForbiddenProjectPath(path) {
85
85
  );
86
86
  }
87
87
  function npmPackFiles() {
88
- const output = silent("npm", ["pack", "--dry-run", "--json"]);
88
+ const windows = process.platform === "win32";
89
+ const output = silent(windows ? "npm.cmd" : "npm", ["pack", "--dry-run", "--json"], {
90
+ timeout: 0,
91
+ shell: windows,
92
+ });
89
93
  if (!output) {
90
94
  return null;
91
95
  }
92
96
  try {
93
- return JSON.parse(output)[0]?.files?.map((file) => file.path) ?? [];
97
+ const parsed = JSON.parse(output);
98
+ const packages = Array.isArray(parsed) ? parsed : Object.values(parsed);
99
+ if (packages.length !== 1 || !Array.isArray(packages[0]?.files)) {
100
+ return null;
101
+ }
102
+ return packages[0].files.map((file) => file.path);
94
103
  } catch {
95
104
  return null;
96
105
  }
@@ -183,7 +183,7 @@ export function checkWindows({
183
183
  }) {
184
184
  console.log("\n── Windows native / Parallels ──");
185
185
  if (!(config?.requiredTargets ?? []).includes("windows-native")) {
186
- report.warn("windows-native is not listed in requiredTargets for this configuration");
186
+ report.warn("windows-native not selected (best-effort); setup not checked, not a pass");
187
187
  return;
188
188
  }
189
189
  if (!commandPath("prlctl")) {
@@ -51,13 +51,19 @@ function crabboxProviders(cbox) {
51
51
  .filter(Boolean);
52
52
  }
53
53
 
54
- function checkRequiredProviders(cbox, report) {
54
+ function checkRequiredProviders(cbox, config, report) {
55
55
  const providers = crabboxProviders(cbox);
56
56
  if (providers.length === 0) {
57
57
  report.fail("could not read crabbox providers");
58
58
  return;
59
59
  }
60
- for (const provider of ["ssh", "local-container", "parallels"]) {
60
+ const providersByTarget = {
61
+ macos: "ssh",
62
+ ubuntu: "local-container",
63
+ "windows-native": "parallels",
64
+ };
65
+ for (const target of config.requiredTargets) {
66
+ const provider = providersByTarget[target];
61
67
  if (providers.includes(provider)) {
62
68
  report.ok(`crabbox provider available: ${provider}`);
63
69
  } else {
@@ -163,13 +169,18 @@ function macSettings(config, packageName) {
163
169
  }
164
170
 
165
171
  function checkProviders(cbox, config, settings, report) {
166
- checkRequiredProviders(cbox, report);
167
- checkCrabboxProvider(
168
- cbox,
169
- ["--provider", "local-container", "--local-container-image", settings.ubuntuImage],
170
- "ubuntu local-container",
171
- report,
172
- );
172
+ checkRequiredProviders(cbox, config, report);
173
+ if (config.requiredTargets.includes("ubuntu")) {
174
+ checkCrabboxProvider(
175
+ cbox,
176
+ ["--provider", "local-container", "--local-container-image", settings.ubuntuImage],
177
+ "ubuntu local-container",
178
+ report,
179
+ );
180
+ }
181
+ if (!config.requiredTargets.includes("macos")) {
182
+ return;
183
+ }
173
184
  const mac = macSettings(config, settings.packageName);
174
185
  checkCrabboxProvider(
175
186
  cbox,
@@ -251,8 +262,12 @@ export async function runDoctor(config) {
251
262
  if (cboxPath) {
252
263
  checkProviders(cbox, config, { packageName, ubuntuImage }, report);
253
264
  }
254
- checkDocker(ubuntuImage, report);
255
- checkMacSsh(config, packageName, report);
265
+ if (config.requiredTargets.includes("ubuntu")) {
266
+ checkDocker(ubuntuImage, report);
267
+ }
268
+ if (config.requiredTargets.includes("macos")) {
269
+ checkMacSsh(config, packageName, report);
270
+ }
256
271
  checkWindows({
257
272
  cbox,
258
273
  config,