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.
- package/CHANGELOG.md +114 -1
- package/README.md +17 -6
- package/dist/extensions/agent-browser/index.js +2482 -925
- package/dist/packaged/lib/browser-session-conversion.js +2946 -0
- package/dist/packaged/lib/config-policy.js +599 -0
- package/dist/packaged/lib/parsing.js +34 -0
- package/dist/packaged/lib/playbook.js +728 -0
- package/dist/packaged/lib/results/snapshot.js +2800 -0
- package/dist/packaged/lib/runtime.js +3075 -0
- package/docs/ARCHITECTURE.md +29 -10
- package/docs/CODE_QUALITY.md +32 -5
- package/docs/COMMAND_REFERENCE.md +156 -40
- package/docs/ELECTRON.md +1 -1
- package/docs/PERFORMANCE.md +252 -0
- package/docs/REFERENCE.md +15 -15
- package/docs/RELEASE.md +41 -18
- package/docs/REQUIREMENTS.md +6 -0
- package/docs/SESSION_STORAGE.md +13 -5
- package/docs/SUPPORT_MATRIX.md +31 -25
- package/docs/TOOL_CONTRACT.md +41 -18
- package/docs/performance/2026-10-12.json +7257 -0
- package/docs/platform-smoke.md +18 -14
- package/package.json +18 -4
- package/platform-smoke.config.mjs +3 -2
- package/scripts/agent-browser-capability-baseline.mjs +16 -2
- package/scripts/agent-browser-target.mjs +1 -1
- package/scripts/build.mjs +16 -5
- package/scripts/capability-options.mjs +20 -0
- package/scripts/capability-samples.mjs +23 -10
- package/scripts/config.mjs +1 -1
- package/scripts/convert-browser-session.mjs +1 -1
- package/scripts/platform-smoke/commands.mjs +30 -4
- package/scripts/platform-smoke/doctor-support.mjs +11 -2
- package/scripts/platform-smoke/doctor-windows.mjs +1 -1
- package/scripts/platform-smoke/doctor.mjs +26 -11
- package/scripts/platform-smoke/linux-image/Dockerfile +6 -3
- package/scripts/platform-smoke/platform-build-windows.ps1 +23 -3
- package/scripts/platform-smoke/suite-checks.mjs +11 -1
- package/scripts/platform-smoke/targets.mjs +4 -3
- package/scripts/platform-smoke.mjs +68 -25
- package/dist/extensions/agent-browser/lib/argv-descriptor.js +0 -123
- package/dist/extensions/agent-browser/lib/argv-grammar.js +0 -320
- package/dist/extensions/agent-browser/lib/bash-guard.js +0 -193
- package/dist/extensions/agent-browser/lib/batch-lifecycle.js +0 -131
- package/dist/extensions/agent-browser/lib/browser-execution-claim-codec.js +0 -61
- package/dist/extensions/agent-browser/lib/browser-execution-claim-storage.js +0 -232
- package/dist/extensions/agent-browser/lib/browser-execution-claims.js +0 -202
- package/dist/extensions/agent-browser/lib/browser-execution-identity.js +0 -77
- package/dist/extensions/agent-browser/lib/browser-journal-branch.js +0 -98
- package/dist/extensions/agent-browser/lib/browser-journal-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/browser-journal-projection.js +0 -221
- package/dist/extensions/agent-browser/lib/browser-journal-reader.js +0 -89
- package/dist/extensions/agent-browser/lib/browser-journal-replay.js +0 -246
- package/dist/extensions/agent-browser/lib/browser-journal.js +0 -148
- package/dist/extensions/agent-browser/lib/browser-legacy-pages.js +0 -220
- package/dist/extensions/agent-browser/lib/browser-legacy-projection.js +0 -282
- package/dist/extensions/agent-browser/lib/browser-legacy-types.js +0 -1
- package/dist/extensions/agent-browser/lib/browser-session-conversion-stream.js +0 -217
- package/dist/extensions/agent-browser/lib/browser-session-conversion.js +0 -126
- package/dist/extensions/agent-browser/lib/browser-transcript-contracts.js +0 -35
- package/dist/extensions/agent-browser/lib/browser-transcript-validation.js +0 -166
- package/dist/extensions/agent-browser/lib/browser-transcript.js +0 -189
- package/dist/extensions/agent-browser/lib/browser-value-parsing.js +0 -15
- package/dist/extensions/agent-browser/lib/command-capabilities.js +0 -340
- package/dist/extensions/agent-browser/lib/command-policy.js +0 -155
- package/dist/extensions/agent-browser/lib/command-taxonomy.js +0 -105
- package/dist/extensions/agent-browser/lib/config-policy.js +0 -450
- package/dist/extensions/agent-browser/lib/config-providers.js +0 -71
- package/dist/extensions/agent-browser/lib/config-validation.js +0 -231
- package/dist/extensions/agent-browser/lib/config.js +0 -69
- package/dist/extensions/agent-browser/lib/electron/cdp.js +0 -62
- package/dist/extensions/agent-browser/lib/electron/cleanup.js +0 -274
- package/dist/extensions/agent-browser/lib/electron/discovery-darwin.js +0 -109
- package/dist/extensions/agent-browser/lib/electron/discovery-desktop.js +0 -136
- package/dist/extensions/agent-browser/lib/electron/discovery-evidence.js +0 -90
- package/dist/extensions/agent-browser/lib/electron/discovery-linux.js +0 -93
- package/dist/extensions/agent-browser/lib/electron/discovery-packages.js +0 -162
- package/dist/extensions/agent-browser/lib/electron/discovery-types.js +0 -2
- package/dist/extensions/agent-browser/lib/electron/discovery.js +0 -217
- package/dist/extensions/agent-browser/lib/electron/launch-monitor.js +0 -102
- package/dist/extensions/agent-browser/lib/electron/launch-process.js +0 -209
- package/dist/extensions/agent-browser/lib/electron/launch-types.js +0 -2
- package/dist/extensions/agent-browser/lib/electron/launch.js +0 -340
- package/dist/extensions/agent-browser/lib/executable-path.js +0 -29
- package/dist/extensions/agent-browser/lib/execution-cwd.js +0 -67
- package/dist/extensions/agent-browser/lib/fs-utils.js +0 -10
- package/dist/extensions/agent-browser/lib/input-modes/electron.js +0 -201
- package/dist/extensions/agent-browser/lib/input-modes/job.js +0 -198
- package/dist/extensions/agent-browser/lib/input-modes/lookup-network-evidence.js +0 -116
- package/dist/extensions/agent-browser/lib/input-modes/lookup-plan.js +0 -132
- package/dist/extensions/agent-browser/lib/input-modes/lookup-redaction.js +0 -57
- package/dist/extensions/agent-browser/lib/input-modes/lookup-source-evidence.js +0 -151
- package/dist/extensions/agent-browser/lib/input-modes/lookup-workspace.js +0 -142
- package/dist/extensions/agent-browser/lib/input-modes/lookups.js +0 -84
- package/dist/extensions/agent-browser/lib/input-modes/params.js +0 -195
- package/dist/extensions/agent-browser/lib/input-modes/qa-analysis.js +0 -268
- package/dist/extensions/agent-browser/lib/input-modes/qa-presentation.js +0 -117
- package/dist/extensions/agent-browser/lib/input-modes/script-child.js +0 -396
- package/dist/extensions/agent-browser/lib/input-modes/script-protocol.js +0 -86
- package/dist/extensions/agent-browser/lib/input-modes/script-types.js +0 -1
- package/dist/extensions/agent-browser/lib/input-modes/script-validation.js +0 -60
- package/dist/extensions/agent-browser/lib/input-modes/script.js +0 -108
- package/dist/extensions/agent-browser/lib/input-modes/semantic-action.js +0 -243
- package/dist/extensions/agent-browser/lib/input-modes/shared.js +0 -48
- package/dist/extensions/agent-browser/lib/input-modes/types.js +0 -65
- package/dist/extensions/agent-browser/lib/json-schema.js +0 -65
- package/dist/extensions/agent-browser/lib/launch-scoped-flags.js +0 -212
- package/dist/extensions/agent-browser/lib/managed-session-policy-lock.js +0 -165
- package/dist/extensions/agent-browser/lib/managed-session-posix-storage.js +0 -58
- package/dist/extensions/agent-browser/lib/managed-session-project-identity.js +0 -244
- package/dist/extensions/agent-browser/lib/managed-session-restore-context.js +0 -84
- package/dist/extensions/agent-browser/lib/managed-session-restore-policy.js +0 -119
- package/dist/extensions/agent-browser/lib/managed-session-restore-state.js +0 -83
- package/dist/extensions/agent-browser/lib/managed-session-restore.js +0 -212
- package/dist/extensions/agent-browser/lib/managed-session-snapshot-records.js +0 -277
- package/dist/extensions/agent-browser/lib/managed-session-snapshots.js +0 -181
- package/dist/extensions/agent-browser/lib/managed-session-storage.js +0 -126
- package/dist/extensions/agent-browser/lib/native-confirmation.js +0 -140
- package/dist/extensions/agent-browser/lib/native-output.js +0 -81
- package/dist/extensions/agent-browser/lib/orchestration/batch-stdin.js +0 -182
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-merge.js +0 -30
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/artifact-paths.js +0 -188
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/browser-observation-result.js +0 -82
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/click-dispatch.js +0 -406
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostic-values.js +0 -31
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/diagnostics.js +0 -240
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-observation.js +0 -203
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/electron-text-diagnostics.js +0 -109
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/fill-diagnostics.js +0 -119
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-action-recovery.js +0 -147
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-actions.js +0 -144
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-content.js +0 -123
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-details.js +0 -156
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-electron.js +0 -187
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-evidence.js +0 -39
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-missing-binary.js +0 -89
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-recovery.js +0 -97
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-redaction.js +0 -106
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result-timeout.js +0 -110
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/final-result.js +0 -53
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/index.js +0 -224
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/interaction-diagnostics.js +0 -290
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-close.js +0 -167
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-inspection.js +0 -108
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/managed-session-daemon-policy.js +0 -174
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/native-helper-observation.js +0 -65
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/observation-types.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/overlay-diagnostics.js +0 -120
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/network-page-filter.js +0 -192
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/scroll-shims.js +0 -225
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter-data.js +0 -150
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-filter.js +0 -174
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/snapshot-rendered-text.js +0 -147
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare/wait-timeouts.js +0 -145
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-artifacts.js +0 -159
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-command.js +0 -131
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-daemon.js +0 -93
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-failure.js +0 -42
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-guards.js +0 -242
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-input.js +0 -75
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-observations.js +0 -92
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-selection.js +0 -254
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-page-state.js +0 -121
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-refs.js +0 -130
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-resources.js +0 -114
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-semantic.js +0 -121
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-session-plan.js +0 -222
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare-timeouts.js +0 -68
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prepare.js +0 -202
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-analysis.js +0 -191
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-confirmation.js +0 -152
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-diagnostics.js +0 -182
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-electron.js +0 -150
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle-phase.js +0 -115
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-lifecycle.js +0 -256
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-managed.js +0 -256
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native-phase.js +0 -93
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-native.js +0 -113
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-navigation.js +0 -316
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-ownership.js +0 -28
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-page-phase.js +0 -142
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-presentation.js +0 -333
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication-phase.js +0 -71
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-publication.js +0 -201
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-receipts.js +0 -183
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-refs.js +0 -200
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output-tabs.js +0 -142
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/process-output.js +0 -25
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/prompt-guards.js +0 -50
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-receipt-reconciliation.js +0 -198
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery-presentation.js +0 -154
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/recording-recovery.js +0 -80
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-capture.js +0 -14
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/screenshot-observation.js +0 -206
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-commands.js +0 -130
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-electron.js +0 -212
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-observations.js +0 -61
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-outcomes.js +0 -187
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-refs.js +0 -169
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state-tabs.js +0 -228
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/session-state.js +0 -117
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/text-visibility-diagnostics.js +0 -182
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-diagnostics.js +0 -256
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/timeout-progress.js +0 -108
- package/dist/extensions/agent-browser/lib/orchestration/browser-run/types.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/code-artifact-observation.js +0 -39
- package/dist/extensions/agent-browser/lib/orchestration/code-image-observation.js +0 -119
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/branch.js +0 -93
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup-result.js +0 -58
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/cleanup.js +0 -78
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/discovery.js +0 -106
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/index.js +0 -60
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/policy.js +0 -86
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-collection.js +0 -68
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-data.js +0 -169
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe-presentation.js +0 -182
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/probe.js +0 -161
- package/dist/extensions/agent-browser/lib/orchestration/electron-host/status.js +0 -167
- package/dist/extensions/agent-browser/lib/orchestration/execution-queue.js +0 -98
- package/dist/extensions/agent-browser/lib/orchestration/extension-artifact-preflight.js +0 -211
- package/dist/extensions/agent-browser/lib/orchestration/extension-artifacts.js +0 -23
- package/dist/extensions/agent-browser/lib/orchestration/extension-attachment-replay.js +0 -99
- package/dist/extensions/agent-browser/lib/orchestration/extension-branch-restore.js +0 -275
- package/dist/extensions/agent-browser/lib/orchestration/extension-code.js +0 -280
- package/dist/extensions/agent-browser/lib/orchestration/extension-command-admission.js +0 -303
- package/dist/extensions/agent-browser/lib/orchestration/extension-command-output.js +0 -36
- package/dist/extensions/agent-browser/lib/orchestration/extension-command-result.js +0 -335
- package/dist/extensions/agent-browser/lib/orchestration/extension-command-run.js +0 -227
- package/dist/extensions/agent-browser/lib/orchestration/extension-command-state.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/extension-electron-ownership.js +0 -204
- package/dist/extensions/agent-browser/lib/orchestration/extension-execution-locks.js +0 -139
- package/dist/extensions/agent-browser/lib/orchestration/extension-execution-queue.js +0 -24
- package/dist/extensions/agent-browser/lib/orchestration/extension-host-coordination.js +0 -98
- package/dist/extensions/agent-browser/lib/orchestration/extension-host-run.js +0 -295
- package/dist/extensions/agent-browser/lib/orchestration/extension-intent-replay.js +0 -41
- package/dist/extensions/agent-browser/lib/orchestration/extension-invocation.js +0 -7
- package/dist/extensions/agent-browser/lib/orchestration/extension-lifecycle.js +0 -102
- package/dist/extensions/agent-browser/lib/orchestration/extension-managed-ownership.js +0 -133
- package/dist/extensions/agent-browser/lib/orchestration/extension-observation.js +0 -120
- package/dist/extensions/agent-browser/lib/orchestration/extension-prompt.js +0 -180
- package/dist/extensions/agent-browser/lib/orchestration/extension-recording.js +0 -290
- package/dist/extensions/agent-browser/lib/orchestration/extension-resource-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/extension-resource-replay.js +0 -269
- package/dist/extensions/agent-browser/lib/orchestration/extension-result-state.js +0 -113
- package/dist/extensions/agent-browser/lib/orchestration/extension-runtime.js +0 -146
- package/dist/extensions/agent-browser/lib/orchestration/extension-script-leases.js +0 -58
- package/dist/extensions/agent-browser/lib/orchestration/extension-tool-boundary.js +0 -62
- package/dist/extensions/agent-browser/lib/orchestration/extension-version-check.js +0 -54
- package/dist/extensions/agent-browser/lib/orchestration/input-plan-types.js +0 -1
- package/dist/extensions/agent-browser/lib/orchestration/input-plan.js +0 -313
- package/dist/extensions/agent-browser/lib/orchestration/input-redaction.js +0 -62
- package/dist/extensions/agent-browser/lib/orchestration/native-config.js +0 -144
- package/dist/extensions/agent-browser/lib/orchestration/native-root-launch.js +0 -77
- package/dist/extensions/agent-browser/lib/orchestration/native-session-defaults.js +0 -231
- package/dist/extensions/agent-browser/lib/orchestration/operation-paths.js +0 -142
- package/dist/extensions/agent-browser/lib/orchestration/output-file.js +0 -276
- package/dist/extensions/agent-browser/lib/orchestration/script-mode.js +0 -220
- package/dist/extensions/agent-browser/lib/owned-managed-session-context.js +0 -55
- package/dist/extensions/agent-browser/lib/page-target-batch.js +0 -118
- package/dist/extensions/agent-browser/lib/page-target-guards.js +0 -50
- package/dist/extensions/agent-browser/lib/page-target-navigation.js +0 -104
- package/dist/extensions/agent-browser/lib/page-target-validation.js +0 -90
- package/dist/extensions/agent-browser/lib/parsing.js +0 -30
- package/dist/extensions/agent-browser/lib/pi-tool-rendering.js +0 -343
- package/dist/extensions/agent-browser/lib/playbook.js +0 -146
- package/dist/extensions/agent-browser/lib/process-child.js +0 -284
- package/dist/extensions/agent-browser/lib/process-environment.js +0 -48
- package/dist/extensions/agent-browser/lib/process-errors.js +0 -23
- package/dist/extensions/agent-browser/lib/process-identity.js +0 -127
- package/dist/extensions/agent-browser/lib/process-socket-storage.js +0 -256
- package/dist/extensions/agent-browser/lib/process-stdout.js +0 -74
- package/dist/extensions/agent-browser/lib/process.js +0 -216
- package/dist/extensions/agent-browser/lib/prompt-artifacts.js +0 -287
- package/dist/extensions/agent-browser/lib/prompt-policy.js +0 -54
- package/dist/extensions/agent-browser/lib/read-command.js +0 -41
- package/dist/extensions/agent-browser/lib/read-confirmation.js +0 -162
- package/dist/extensions/agent-browser/lib/recording-reservations.js +0 -208
- package/dist/extensions/agent-browser/lib/redaction-fields.js +0 -75
- package/dist/extensions/agent-browser/lib/redaction-json.js +0 -149
- package/dist/extensions/agent-browser/lib/redaction-url.js +0 -88
- package/dist/extensions/agent-browser/lib/results/action-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/action-recommendations.js +0 -38
- package/dist/extensions/agent-browser/lib/results/artifact-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/artifact-manifest-validation.js +0 -133
- package/dist/extensions/agent-browser/lib/results/artifact-manifest.js +0 -173
- package/dist/extensions/agent-browser/lib/results/artifact-recommendations.js +0 -73
- package/dist/extensions/agent-browser/lib/results/categories.js +0 -152
- package/dist/extensions/agent-browser/lib/results/confirmation.js +0 -75
- package/dist/extensions/agent-browser/lib/results/contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/editable-ref-evidence.js +0 -99
- package/dist/extensions/agent-browser/lib/results/electron-recommendations.js +0 -83
- package/dist/extensions/agent-browser/lib/results/envelope-decoding.js +0 -48
- package/dist/extensions/agent-browser/lib/results/envelope.js +0 -198
- package/dist/extensions/agent-browser/lib/results/evidence-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/failure-recommendations.js +0 -180
- package/dist/extensions/agent-browser/lib/results/network-routes.js +0 -133
- package/dist/extensions/agent-browser/lib/results/network.js +0 -89
- package/dist/extensions/agent-browser/lib/results/next-actions.js +0 -111
- package/dist/extensions/agent-browser/lib/results/presentation/artifact-files.js +0 -320
- package/dist/extensions/agent-browser/lib/results/presentation/artifact-format.js +0 -138
- package/dist/extensions/agent-browser/lib/results/presentation/artifact-images.js +0 -113
- package/dist/extensions/agent-browser/lib/results/presentation/artifact-verification.js +0 -145
- package/dist/extensions/agent-browser/lib/results/presentation/artifacts.js +0 -165
- package/dist/extensions/agent-browser/lib/results/presentation/batch-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/presentation/batch-recording.js +0 -118
- package/dist/extensions/agent-browser/lib/results/presentation/batch-redaction.js +0 -68
- package/dist/extensions/agent-browser/lib/results/presentation/batch-rendering.js +0 -135
- package/dist/extensions/agent-browser/lib/results/presentation/batch-step.js +0 -227
- package/dist/extensions/agent-browser/lib/results/presentation/batch-summary.js +0 -91
- package/dist/extensions/agent-browser/lib/results/presentation/batch.js +0 -123
- package/dist/extensions/agent-browser/lib/results/presentation/browser-profile-recovery.js +0 -54
- package/dist/extensions/agent-browser/lib/results/presentation/command-presenters.js +0 -216
- package/dist/extensions/agent-browser/lib/results/presentation/common.js +0 -81
- package/dist/extensions/agent-browser/lib/results/presentation/content.js +0 -119
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-a11y.js +0 -67
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-health.js +0 -79
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-identity.js +0 -199
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-logs.js +0 -75
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network-actions.js +0 -216
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-network.js +0 -124
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-redaction.js +0 -64
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-storage.js +0 -209
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-stream.js +0 -69
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostic-summary.js +0 -222
- package/dist/extensions/agent-browser/lib/results/presentation/diagnostics.js +0 -124
- package/dist/extensions/agent-browser/lib/results/presentation/early-result.js +0 -70
- package/dist/extensions/agent-browser/lib/results/presentation/errors.js +0 -285
- package/dist/extensions/agent-browser/lib/results/presentation/input-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/presentation/large-output.js +0 -117
- package/dist/extensions/agent-browser/lib/results/presentation/navigation.js +0 -231
- package/dist/extensions/agent-browser/lib/results/presentation/notices.js +0 -75
- package/dist/extensions/agent-browser/lib/results/presentation/observation-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/presentation/observation-rendering.js +0 -127
- package/dist/extensions/agent-browser/lib/results/presentation/outcomes.js +0 -120
- package/dist/extensions/agent-browser/lib/results/presentation/output-completion.js +0 -77
- package/dist/extensions/agent-browser/lib/results/presentation/output-spill.js +0 -51
- package/dist/extensions/agent-browser/lib/results/presentation/registry.js +0 -145
- package/dist/extensions/agent-browser/lib/results/presentation/semantic-action.js +0 -104
- package/dist/extensions/agent-browser/lib/results/presentation/skills.js +0 -183
- package/dist/extensions/agent-browser/lib/results/presentation/source.js +0 -109
- package/dist/extensions/agent-browser/lib/results/presentation.js +0 -19
- package/dist/extensions/agent-browser/lib/results/recommendation-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/results/recording.js +0 -88
- package/dist/extensions/agent-browser/lib/results/recovery-actions.js +0 -118
- package/dist/extensions/agent-browser/lib/results/recovery-next-actions.js +0 -60
- package/dist/extensions/agent-browser/lib/results/selector-recovery-target.js +0 -83
- package/dist/extensions/agent-browser/lib/results/selector-recovery.js +0 -261
- package/dist/extensions/agent-browser/lib/results/snapshot-compact.js +0 -266
- package/dist/extensions/agent-browser/lib/results/snapshot-content.js +0 -32
- package/dist/extensions/agent-browser/lib/results/snapshot-high-value-controls.js +0 -240
- package/dist/extensions/agent-browser/lib/results/snapshot-refs.js +0 -103
- package/dist/extensions/agent-browser/lib/results/snapshot-segments.js +0 -383
- package/dist/extensions/agent-browser/lib/results/snapshot-spill.js +0 -53
- package/dist/extensions/agent-browser/lib/results/snapshot.js +0 -44
- package/dist/extensions/agent-browser/lib/results/text.js +0 -44
- package/dist/extensions/agent-browser/lib/runtime-args-validation.js +0 -133
- package/dist/extensions/agent-browser/lib/runtime-compatibility.js +0 -81
- package/dist/extensions/agent-browser/lib/runtime-contracts.js +0 -1
- package/dist/extensions/agent-browser/lib/runtime-redaction.js +0 -118
- package/dist/extensions/agent-browser/lib/runtime-replay-events.js +0 -144
- package/dist/extensions/agent-browser/lib/runtime-session-identity.js +0 -76
- package/dist/extensions/agent-browser/lib/runtime-session-plan.js +0 -114
- package/dist/extensions/agent-browser/lib/runtime-session-replay.js +0 -123
- package/dist/extensions/agent-browser/lib/runtime-tab-correction.js +0 -65
- package/dist/extensions/agent-browser/lib/runtime-timeouts.js +0 -28
- package/dist/extensions/agent-browser/lib/runtime.js +0 -163
- package/dist/extensions/agent-browser/lib/session-identity.js +0 -51
- package/dist/extensions/agent-browser/lib/session-page-observation.js +0 -357
- package/dist/extensions/agent-browser/lib/session-page-state.js +0 -353
- package/dist/extensions/agent-browser/lib/session-page-types.js +0 -1
- package/dist/extensions/agent-browser/lib/string-enum-schema.js +0 -8
- package/dist/extensions/agent-browser/lib/temp-artifact-budget.js +0 -81
- package/dist/extensions/agent-browser/lib/temp-mutation-queue.js +0 -7
- package/dist/extensions/agent-browser/lib/temp-root-ownership.js +0 -234
- package/dist/extensions/agent-browser/lib/temp-root.js +0 -211
- package/dist/extensions/agent-browser/lib/temp.js +0 -91
- package/dist/extensions/agent-browser/lib/tool-surface.js +0 -239
- package/dist/extensions/agent-browser/lib/upstream-version.js +0 -15
- package/dist/extensions/agent-browser/lib/web-search-providers.js +0 -193
- package/dist/extensions/agent-browser/lib/web-search-request.js +0 -102
- package/dist/extensions/agent-browser/lib/web-search-results.js +0 -281
- package/dist/extensions/agent-browser/lib/web-search-schema.js +0 -82
- package/dist/extensions/agent-browser/lib/web-search.js +0 -167
- package/dist/extensions/agent-browser/lib/webmcp-observation.js +0 -35
- package/dist/extensions/agent-browser/lib/windows-stock-launcher.js +0 -96
- package/dist/scripts/agent-browser-target.mjs +0 -23
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { lstat, mkdir, readdir, readlink, stat } from "node:fs/promises";
|
|
2
|
-
import { dirname, isAbsolute, join } from "node:path";
|
|
3
|
-
import { env as processEnv, platform as processPlatform } from "node:process";
|
|
4
|
-
import { parseArgvDescriptor } from "./argv-descriptor.js";
|
|
5
|
-
import { extractExplicitSessionName, resolveAgentBrowserNamespace } from "./argv-grammar.js";
|
|
6
|
-
import { getAgentBrowserProcessEnvironment } from "./process-environment.js";
|
|
7
|
-
import { getCurrentProcessUid } from "./process-identity.js";
|
|
8
|
-
import { getErrorCode } from "./process-errors.js";
|
|
9
|
-
const AGENT_BROWSER_SOCKET_DIR_ENV = "AGENT_BROWSER_SOCKET_DIR";
|
|
10
|
-
const PI_AGENT_BROWSER_SOCKET_DIR_ENV = "PI_AGENT_BROWSER_SOCKET_DIR";
|
|
11
|
-
const TERMUX_PACKAGE_NAME_PATTERN = /^[A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)+$/;
|
|
12
|
-
function isTermuxAppRoot(platform, packageName) {
|
|
13
|
-
return (platform === "android" &&
|
|
14
|
-
packageName !== undefined &&
|
|
15
|
-
packageName.length > 0 &&
|
|
16
|
-
TERMUX_PACKAGE_NAME_PATTERN.test(packageName));
|
|
17
|
-
}
|
|
18
|
-
export function getAgentBrowserSocketDir(platform = processPlatform, uid = getCurrentProcessUid(), termuxPackageName = processEnv.TERMUX_APP__PACKAGE_NAME) {
|
|
19
|
-
if (platform === "win32") {
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
const termuxAppRoot = isTermuxAppRoot(platform, termuxPackageName);
|
|
23
|
-
let prefix = "/tmp/piab";
|
|
24
|
-
if (platform === "darwin") {
|
|
25
|
-
prefix = "/private/tmp/piab";
|
|
26
|
-
}
|
|
27
|
-
else if (termuxAppRoot) {
|
|
28
|
-
prefix = `/data/data/${termuxPackageName ?? ""}/piab`;
|
|
29
|
-
}
|
|
30
|
-
return `${prefix}${!termuxAppRoot && typeof uid === "number" ? `-${uid}` : ""}`;
|
|
31
|
-
}
|
|
32
|
-
export function resolveAgentBrowserSocketDir(options = {}) {
|
|
33
|
-
const parentEnv = options.parentEnv ?? getAgentBrowserProcessEnvironment();
|
|
34
|
-
return (options.env?.[AGENT_BROWSER_SOCKET_DIR_ENV] ??
|
|
35
|
-
parentEnv[PI_AGENT_BROWSER_SOCKET_DIR_ENV] ??
|
|
36
|
-
(options.ownedManagedSession !== true ? parentEnv[AGENT_BROWSER_SOCKET_DIR_ENV] : undefined) ??
|
|
37
|
-
getAgentBrowserSocketDir());
|
|
38
|
-
}
|
|
39
|
-
export function isTrustedAndroidAppDataRoot(path, metadata, uid, platform = processPlatform) {
|
|
40
|
-
if (platform !== "android" ||
|
|
41
|
-
metadata.uid !== uid ||
|
|
42
|
-
metadata.isSymbolicLink() ||
|
|
43
|
-
!metadata.isDirectory() ||
|
|
44
|
-
(metadata.mode & 0o777) !== 0o700) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
const parent = dirname(path);
|
|
48
|
-
return parent === "/data/data" || /^\/data\/user\/\d+$/.test(parent);
|
|
49
|
-
}
|
|
50
|
-
function isPrivateAndroidAncestor(metadata, uid, platform) {
|
|
51
|
-
return platform === "android" && uid !== 0 && metadata.uid === uid && metadata.gid === uid;
|
|
52
|
-
}
|
|
53
|
-
export function isTrustedSocketDirAncestor(metadata, uid, platform = processPlatform) {
|
|
54
|
-
if (metadata.isSymbolicLink()) {
|
|
55
|
-
return metadata.uid === 0;
|
|
56
|
-
}
|
|
57
|
-
if (!metadata.isDirectory()) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
const mode = metadata.mode & 0o7777;
|
|
61
|
-
if (isPrivateAndroidAncestor(metadata, uid, platform)) {
|
|
62
|
-
return (mode & 0o002) === 0;
|
|
63
|
-
}
|
|
64
|
-
if (metadata.uid === uid && uid !== 0) {
|
|
65
|
-
return (mode & 0o022) === 0;
|
|
66
|
-
}
|
|
67
|
-
return metadata.uid === 0 && ((mode & 0o022) === 0 || (mode & 0o1000) !== 0);
|
|
68
|
-
}
|
|
69
|
-
class SocketStorageInspection {
|
|
70
|
-
uid;
|
|
71
|
-
visited = new Set();
|
|
72
|
-
entryCount = 0;
|
|
73
|
-
constructor(uid) {
|
|
74
|
-
this.uid = uid;
|
|
75
|
-
}
|
|
76
|
-
async ancestry(socketDir) {
|
|
77
|
-
let current = dirname(socketDir);
|
|
78
|
-
while (true) {
|
|
79
|
-
current = current.replace(/\/+$/, "");
|
|
80
|
-
if (current.length === 0) {
|
|
81
|
-
current = "/";
|
|
82
|
-
}
|
|
83
|
-
if (this.visited.has(current)) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
this.visited.add(current);
|
|
87
|
-
// Each ancestor and symlink destination must be inspected before advancing the walk.
|
|
88
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
89
|
-
const metadata = await lstat(current);
|
|
90
|
-
if (this.isSystemRoot(current, metadata)) {
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
if (!isTrustedSocketDirAncestor(metadata, this.uid)) {
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
if (metadata.isSymbolicLink()) {
|
|
97
|
-
// Resolving one link requires validating its target before continuing this ancestry.
|
|
98
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
99
|
-
if (!(await this.symlink(current))) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
const parent = dirname(current);
|
|
104
|
-
if (parent === current) {
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
current = parent;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
isSystemRoot(path, metadata) {
|
|
111
|
-
// The environment supplies /; its owner may be unmapped in a user namespace.
|
|
112
|
-
return ((path === "/" && metadata.isDirectory() && (metadata.mode & 0o022) === 0) ||
|
|
113
|
-
isTrustedAndroidAppDataRoot(path, metadata, this.uid));
|
|
114
|
-
}
|
|
115
|
-
async symlink(current) {
|
|
116
|
-
if (!isTrustedSocketDirAncestor(await stat(current), this.uid)) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
const target = await readlink(current);
|
|
120
|
-
const targetPath = isAbsolute(target) ? target : `${dirname(current)}/${target}`;
|
|
121
|
-
// Keep '..' after symlinks intact; '/.' includes the target itself in the parent walk.
|
|
122
|
-
return await this.ancestry(`${targetPath}/.`);
|
|
123
|
-
}
|
|
124
|
-
async entries(socketDir) {
|
|
125
|
-
for (const name of await readdir(socketDir)) {
|
|
126
|
-
this.entryCount += 1;
|
|
127
|
-
if (this.entryCount > 16_384) {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
// A single shared bound and fail-closed traversal prevent unbounded recursive inspection.
|
|
131
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
132
|
-
if (!(await this.entry(join(socketDir, name)))) {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
async entry(path) {
|
|
139
|
-
try {
|
|
140
|
-
const metadata = await lstat(path);
|
|
141
|
-
if (metadata.uid !== this.uid || metadata.isSymbolicLink()) {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
if (metadata.isDirectory()) {
|
|
145
|
-
return await this.entries(path);
|
|
146
|
-
}
|
|
147
|
-
return metadata.isFile() || metadata.isSocket();
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
return getErrorCode(error) === "ENOENT";
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
async function validateWindowsDirectory(socketDir) {
|
|
155
|
-
try {
|
|
156
|
-
try {
|
|
157
|
-
await mkdir(socketDir);
|
|
158
|
-
}
|
|
159
|
-
catch (error) {
|
|
160
|
-
if (getErrorCode(error) !== "EEXIST") {
|
|
161
|
-
throw error;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
const metadata = await lstat(socketDir);
|
|
165
|
-
if (metadata.isSymbolicLink()) {
|
|
166
|
-
return "the directory is a symlink";
|
|
167
|
-
}
|
|
168
|
-
return metadata.isDirectory() ? undefined : "the path is not a directory";
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
return `the directory could not be inspected (${getErrorCode(error) ?? "unknown error"})`;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
export async function getAgentBrowserSocketDirValidationError(socketDir, uid = getCurrentProcessUid(), platform = processPlatform) {
|
|
175
|
-
if (!isAbsolute(socketDir)) {
|
|
176
|
-
return "the path is not absolute";
|
|
177
|
-
}
|
|
178
|
-
// Windows uses native ACLs and named pipes, but still requires a real directory.
|
|
179
|
-
if (platform === "win32") {
|
|
180
|
-
return await validateWindowsDirectory(socketDir);
|
|
181
|
-
}
|
|
182
|
-
if (typeof uid !== "number") {
|
|
183
|
-
return "POSIX ownership metadata is unavailable";
|
|
184
|
-
}
|
|
185
|
-
try {
|
|
186
|
-
if (!(await new SocketStorageInspection(uid).ancestry(socketDir))) {
|
|
187
|
-
return "an ancestor is writable, foreign-owned, a non-directory, or an untrusted symlink";
|
|
188
|
-
}
|
|
189
|
-
const creationError = await createPosixSocketDirectory(socketDir);
|
|
190
|
-
return creationError ?? (await validatePosixDirectory(socketDir, uid));
|
|
191
|
-
}
|
|
192
|
-
catch (error) {
|
|
193
|
-
return `the directory could not be inspected (${getErrorCode(error) ?? "unknown error"})`;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
async function createPosixSocketDirectory(socketDir) {
|
|
197
|
-
try {
|
|
198
|
-
await mkdir(socketDir, { mode: 0o700 });
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
if (getErrorCode(error) !== "EEXIST") {
|
|
202
|
-
return `the directory could not be created (${getErrorCode(error) ?? "unknown error"})`;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return undefined;
|
|
206
|
-
}
|
|
207
|
-
async function validatePosixDirectory(socketDir, uid) {
|
|
208
|
-
const metadata = await lstat(socketDir);
|
|
209
|
-
if (!metadata.isDirectory()) {
|
|
210
|
-
return "the path is not a directory";
|
|
211
|
-
}
|
|
212
|
-
if (metadata.isSymbolicLink()) {
|
|
213
|
-
return "the directory is a symlink";
|
|
214
|
-
}
|
|
215
|
-
if (metadata.uid !== uid) {
|
|
216
|
-
return `the directory is owned by uid ${metadata.uid}, not uid ${uid}`;
|
|
217
|
-
}
|
|
218
|
-
if ((metadata.mode & 0o777) !== 0o700) {
|
|
219
|
-
return `the directory mode is ${(metadata.mode & 0o777).toString(8)}, not 700`;
|
|
220
|
-
}
|
|
221
|
-
if (!(await new SocketStorageInspection(uid).ancestry(socketDir))) {
|
|
222
|
-
return "an ancestor became untrusted during validation";
|
|
223
|
-
}
|
|
224
|
-
if (!(await new SocketStorageInspection(uid).entries(socketDir))) {
|
|
225
|
-
return "the directory contains a foreign-owned, symlink, special, or excessively deep entry";
|
|
226
|
-
}
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
function nativeSocketRoot(options) {
|
|
230
|
-
const namespace = resolveAgentBrowserNamespace(options.args, options.env?.AGENT_BROWSER_NAMESPACE);
|
|
231
|
-
return namespace !== undefined && namespace.length > 0
|
|
232
|
-
? join(options.socketDir, "namespaces", namespace, "run")
|
|
233
|
-
: options.socketDir;
|
|
234
|
-
}
|
|
235
|
-
export function getAgentBrowserSocketPathValidationError(options) {
|
|
236
|
-
if ((options.platform ?? processPlatform) === "win32") {
|
|
237
|
-
return undefined;
|
|
238
|
-
}
|
|
239
|
-
const { command } = parseArgvDescriptor(options.args).commandInfo;
|
|
240
|
-
// Preflight browser-launch/navigation only; follow-up/cleanup may inspect an earlier daemon.
|
|
241
|
-
if (command === undefined ||
|
|
242
|
-
command.length === 0 ||
|
|
243
|
-
!["batch", "connect", "goto", "navigate", "open", "visit"].includes(command)) {
|
|
244
|
-
return undefined;
|
|
245
|
-
}
|
|
246
|
-
const sessionName = extractExplicitSessionName(options.args);
|
|
247
|
-
if (sessionName === undefined || sessionName.length === 0) {
|
|
248
|
-
return undefined;
|
|
249
|
-
}
|
|
250
|
-
const socketRoot = nativeSocketRoot(options);
|
|
251
|
-
const pathBytes = Buffer.byteLength(join(socketRoot, `${sessionName}.sock`));
|
|
252
|
-
if (pathBytes <= 103) {
|
|
253
|
-
return undefined;
|
|
254
|
-
}
|
|
255
|
-
return `Agent-browser Unix socket path would be ${pathBytes} bytes (max 103) for session ${JSON.stringify(sessionName)} under ${JSON.stringify(options.socketDir)}. Set PI_AGENT_BROWSER_SOCKET_DIR to a shorter absolute private directory such as /tmp/piab-<uid> with mode 0700; retrying sessionMode "fresh" cannot shorten this configured root.`;
|
|
256
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { normalizeProcessError } from "./process-errors.js";
|
|
2
|
-
import { openSecureTempFile, writeSecureTempChunk } from "./temp.js";
|
|
3
|
-
const MAX_BUFFERED_STDOUT_BYTES = 512 * 1_024;
|
|
4
|
-
const MAX_BUFFERED_STDOUT_TAIL_CHARS = 32_000;
|
|
5
|
-
export function appendProcessOutputTail(text, addition, maxChars) {
|
|
6
|
-
const combined = text + addition;
|
|
7
|
-
return combined.length <= maxChars ? combined : combined.slice(combined.length - maxChars);
|
|
8
|
-
}
|
|
9
|
-
/** Own buffered output, sequential spill writes and the spill handle through subprocess completion. */
|
|
10
|
-
export class ProcessStdout {
|
|
11
|
-
buffers = [];
|
|
12
|
-
bufferedBytes = 0;
|
|
13
|
-
tail = "";
|
|
14
|
-
handle;
|
|
15
|
-
spillPath;
|
|
16
|
-
spillPending = false;
|
|
17
|
-
pendingWrite = Promise.resolve();
|
|
18
|
-
spillError;
|
|
19
|
-
queue(buffer) {
|
|
20
|
-
this.tail = appendProcessOutputTail(this.tail, buffer.toString("utf8"), MAX_BUFFERED_STDOUT_TAIL_CHARS);
|
|
21
|
-
if (this.spillError) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
if (!this.spillPending &&
|
|
25
|
-
this.spillPath === undefined &&
|
|
26
|
-
this.bufferedBytes + buffer.length <= MAX_BUFFERED_STDOUT_BYTES) {
|
|
27
|
-
this.buffers.push(buffer);
|
|
28
|
-
this.bufferedBytes += buffer.length;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
this.spillPending = true;
|
|
32
|
-
this.pendingWrite = this.pendingWrite
|
|
33
|
-
.then(() => this.write(buffer))
|
|
34
|
-
.catch((error) => {
|
|
35
|
-
this.spillError = normalizeProcessError(error);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
async write(buffer) {
|
|
39
|
-
if (this.spillError) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (!this.handle || this.spillPath === undefined) {
|
|
43
|
-
const file = await openSecureTempFile("process-stdout", ".json");
|
|
44
|
-
this.handle = file.fileHandle;
|
|
45
|
-
this.spillPath = file.path;
|
|
46
|
-
if (this.buffers.length > 0) {
|
|
47
|
-
await writeSecureTempChunk({
|
|
48
|
-
content: Buffer.concat(this.buffers),
|
|
49
|
-
fileHandle: this.handle,
|
|
50
|
-
path: this.spillPath,
|
|
51
|
-
});
|
|
52
|
-
this.buffers = [];
|
|
53
|
-
this.bufferedBytes = 0;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
await writeSecureTempChunk({ content: buffer, fileHandle: this.handle, path: this.spillPath });
|
|
57
|
-
}
|
|
58
|
-
async drain() {
|
|
59
|
-
await this.pendingWrite;
|
|
60
|
-
}
|
|
61
|
-
async finish() {
|
|
62
|
-
await this.pendingWrite;
|
|
63
|
-
if (this.handle) {
|
|
64
|
-
await this.handle.close().catch(() => {
|
|
65
|
-
/* Spill close is best-effort after all writes settled. */
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
stdout: this.spillPath === undefined ? Buffer.concat(this.buffers).toString("utf8") : this.tail,
|
|
70
|
-
stdoutSpillPath: this.spillPath,
|
|
71
|
-
error: this.spillError,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
import { env as processEnv } from "node:process";
|
|
3
|
-
import { runBrowserChild } from "./process-child.js";
|
|
4
|
-
export { resolveSpawnedChildExitCode } from "./process-child.js";
|
|
5
|
-
import { scanUpstreamGlobalFlagOccurrences } from "./argv-grammar.js";
|
|
6
|
-
import { commitManagedSessionRestoreSuppression, getManagedSessionRestoreEnv, getManagedSessionRestoreProtectedEnv, getOwnedManagedSessionCompatibilityEnv, getOwnedManagedSessionNamespaceEnv, isOwnedManagedSessionTarget, validateManagedSessionRestoreContextForSpawn, } from "./managed-session-restore.js";
|
|
7
|
-
import { getPageTargetValidationError } from "./page-target-validation.js";
|
|
8
|
-
import { getImplicitSessionIdleTimeoutMs } from "./runtime-timeouts.js";
|
|
9
|
-
import { getAgentBrowserProcessArgs, getAgentBrowserProcessEnvironment, } from "./process-environment.js";
|
|
10
|
-
import { resolveWindowsStockLauncher } from "./windows-stock-launcher.js";
|
|
11
|
-
const AGENT_BROWSER_SOCKET_DIR_ENV = "AGENT_BROWSER_SOCKET_DIR";
|
|
12
|
-
const AGENT_BROWSER_DEFAULT_TIMEOUT_ENV = "AGENT_BROWSER_DEFAULT_TIMEOUT";
|
|
13
|
-
const AGENT_BROWSER_IDLE_TIMEOUT_ENV = "AGENT_BROWSER_IDLE_TIMEOUT_MS";
|
|
14
|
-
const PI_AGENT_BROWSER_PROCESS_TIMEOUT_ENV = "PI_AGENT_BROWSER_PROCESS_TIMEOUT_MS";
|
|
15
|
-
import { getAgentBrowserSocketDirValidationError, getAgentBrowserSocketPathValidationError, resolveAgentBrowserSocketDir, } from "./process-socket-storage.js";
|
|
16
|
-
export { getAgentBrowserSocketDir, getAgentBrowserSocketDirValidationError, getAgentBrowserSocketPathValidationError, isTrustedAndroidAppDataRoot, isTrustedSocketDirAncestor, resolveAgentBrowserSocketDir, } from "./process-socket-storage.js";
|
|
17
|
-
export const SAFE_AGENT_BROWSER_OPERATION_TIMEOUT_MS = 25_000;
|
|
18
|
-
const DEFAULT_AGENT_BROWSER_PROCESS_TIMEOUT_MS = 35_000;
|
|
19
|
-
const attachedBrowserSessionContext = new AsyncLocalStorage();
|
|
20
|
-
const chromeStartupArgsContext = new AsyncLocalStorage();
|
|
21
|
-
export function withChromeStartupArgs(args, run) {
|
|
22
|
-
return chromeStartupArgsContext.run(args ?? chromeStartupArgsContext.getStore(), run);
|
|
23
|
-
}
|
|
24
|
-
export function withAttachedBrowserSessionContext(preserve, run) {
|
|
25
|
-
return attachedBrowserSessionContext.run(preserve || attachedBrowserSessionContext.getStore() === true, run);
|
|
26
|
-
}
|
|
27
|
-
export function prepareAgentBrowserSpawnArgs(args, wrapperCompatibilityUserAgent, preserveAttachedBrowserSession = false, startupArgs) {
|
|
28
|
-
if (preserveAttachedBrowserSession) {
|
|
29
|
-
return args;
|
|
30
|
-
}
|
|
31
|
-
const occurrence = scanUpstreamGlobalFlagOccurrences(args, "--args").at(-1);
|
|
32
|
-
const customArgs = wrapperCompatibilityUserAgent !== undefined &&
|
|
33
|
-
wrapperCompatibilityUserAgent.length > 0 &&
|
|
34
|
-
!occurrence
|
|
35
|
-
? `${startupArgs ?? "--no-startup-window"},--user-agent=${wrapperCompatibilityUserAgent.replaceAll(/[\r\n,]/g, "")}`
|
|
36
|
-
: startupArgs;
|
|
37
|
-
if (customArgs === undefined) {
|
|
38
|
-
return args;
|
|
39
|
-
}
|
|
40
|
-
if (!occurrence) {
|
|
41
|
-
return ["--args", customArgs, ...args];
|
|
42
|
-
}
|
|
43
|
-
const normalized = [...args];
|
|
44
|
-
normalized[occurrence.index + 1] = customArgs;
|
|
45
|
-
return normalized;
|
|
46
|
-
}
|
|
47
|
-
function parsePositiveIntegerEnv(value) {
|
|
48
|
-
if (value === undefined || !/^\d+$/.test(value.trim())) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
const parsed = Number(value.trim());
|
|
52
|
-
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;
|
|
53
|
-
}
|
|
54
|
-
export function getAgentBrowserProcessTimeoutMs(env = processEnv) {
|
|
55
|
-
return (parsePositiveIntegerEnv(env[PI_AGENT_BROWSER_PROCESS_TIMEOUT_ENV]) ??
|
|
56
|
-
DEFAULT_AGENT_BROWSER_PROCESS_TIMEOUT_MS);
|
|
57
|
-
}
|
|
58
|
-
export function buildAgentBrowserProcessEnv(baseEnv = processEnv, overrides) {
|
|
59
|
-
const childEnv = {};
|
|
60
|
-
for (const [name, value] of Object.entries(baseEnv)) {
|
|
61
|
-
if (value !== undefined) {
|
|
62
|
-
childEnv[name] = value;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
for (const [name, value] of Object.entries(overrides ?? {})) {
|
|
66
|
-
if (value === undefined) {
|
|
67
|
-
delete childEnv[name];
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
childEnv[name] = value;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const requestedTimeout = parsePositiveIntegerEnv(childEnv[AGENT_BROWSER_DEFAULT_TIMEOUT_ENV]);
|
|
74
|
-
if (requestedTimeout === undefined ||
|
|
75
|
-
requestedTimeout > SAFE_AGENT_BROWSER_OPERATION_TIMEOUT_MS) {
|
|
76
|
-
childEnv[AGENT_BROWSER_DEFAULT_TIMEOUT_ENV] = String(SAFE_AGENT_BROWSER_OPERATION_TIMEOUT_MS);
|
|
77
|
-
}
|
|
78
|
-
return childEnv;
|
|
79
|
-
}
|
|
80
|
-
function getManagedPreSpawnPolicyError(options, currentPageUrl, pageUrlUnknown = false, nativeConfirmationDecision = false) {
|
|
81
|
-
if (!validateManagedSessionRestoreContextForSpawn(options)) {
|
|
82
|
-
return "Managed session restore policy, storage, or checkout identity changed after planning; refusing to start agent-browser.";
|
|
83
|
-
}
|
|
84
|
-
if (nativeConfirmationDecision) {
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
return getPageTargetValidationError({
|
|
88
|
-
args: options.args,
|
|
89
|
-
currentPageUrl,
|
|
90
|
-
pageUrlUnknown,
|
|
91
|
-
stdin: options.stdin,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
function failureResult(error) {
|
|
95
|
-
return {
|
|
96
|
-
aborted: false,
|
|
97
|
-
agentBrowserStarted: false,
|
|
98
|
-
exitCode: 1,
|
|
99
|
-
spawnError: new Error(error),
|
|
100
|
-
stderr: "",
|
|
101
|
-
stdout: "",
|
|
102
|
-
timedOut: false,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
async function prepareProcessEnvironment(options) {
|
|
106
|
-
const restoreEnv = getManagedSessionRestoreEnv(options);
|
|
107
|
-
const compatibilityEnv = getOwnedManagedSessionCompatibilityEnv(options);
|
|
108
|
-
const overrides = {
|
|
109
|
-
...(options.ownedManagedSession === true
|
|
110
|
-
? { [AGENT_BROWSER_IDLE_TIMEOUT_ENV]: String(getImplicitSessionIdleTimeoutMs()) }
|
|
111
|
-
: {}),
|
|
112
|
-
...restoreEnv,
|
|
113
|
-
...options.env,
|
|
114
|
-
...getManagedSessionRestoreProtectedEnv(options, restoreEnv),
|
|
115
|
-
...getOwnedManagedSessionNamespaceEnv(options),
|
|
116
|
-
...compatibilityEnv,
|
|
117
|
-
};
|
|
118
|
-
let effectiveEnv = overrides[AGENT_BROWSER_SOCKET_DIR_ENV] === undefined
|
|
119
|
-
? { ...overrides, [AGENT_BROWSER_SOCKET_DIR_ENV]: undefined }
|
|
120
|
-
: overrides;
|
|
121
|
-
const socketDir = resolveAgentBrowserSocketDir({
|
|
122
|
-
env: overrides,
|
|
123
|
-
ownedManagedSession: options.ownedManagedSession,
|
|
124
|
-
parentEnv: options.parentEnv,
|
|
125
|
-
});
|
|
126
|
-
if (socketDir !== undefined) {
|
|
127
|
-
const directoryError = socketDir.length > 0
|
|
128
|
-
? await getAgentBrowserSocketDirValidationError(socketDir)
|
|
129
|
-
: "the configured path is empty";
|
|
130
|
-
const pathError = directoryError === undefined
|
|
131
|
-
? getAgentBrowserSocketPathValidationError({
|
|
132
|
-
args: options.args,
|
|
133
|
-
env: effectiveEnv,
|
|
134
|
-
socketDir,
|
|
135
|
-
})
|
|
136
|
-
: undefined;
|
|
137
|
-
if (directoryError !== undefined || pathError !== undefined) {
|
|
138
|
-
return {
|
|
139
|
-
env: effectiveEnv,
|
|
140
|
-
error: pathError ??
|
|
141
|
-
`Agent-browser socket storage ${JSON.stringify(socketDir)} is unusable: ${directoryError ?? "unknown error"}. Use an absolute directory owned by the current uid with mode 0700 and remove foreign, symlink, or special entries.`,
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
effectiveEnv = { ...effectiveEnv, [AGENT_BROWSER_SOCKET_DIR_ENV]: socketDir };
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
env: buildAgentBrowserProcessEnv(options.parentEnv, effectiveEnv),
|
|
148
|
-
userAgent: compatibilityEnv.AGENT_BROWSER_USER_AGENT,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
function restoreOptionsForProcess(options) {
|
|
152
|
-
return {
|
|
153
|
-
args: options.args,
|
|
154
|
-
cwd: options.cwd,
|
|
155
|
-
env: options.env,
|
|
156
|
-
ownedManagedSession: options.ownedManagedSession === true || isOwnedManagedSessionTarget(options.args),
|
|
157
|
-
parentEnv: getAgentBrowserProcessEnvironment(),
|
|
158
|
-
restoreState: options.managedSessionRestoreState,
|
|
159
|
-
stdin: options.stdin,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
function effectiveBrowserSpawnArgs(args, userAgent, preserveAttached) {
|
|
163
|
-
return prepareAgentBrowserSpawnArgs(getAgentBrowserProcessArgs(args), userAgent, preserveAttached === true || attachedBrowserSessionContext.getStore() === true, chromeStartupArgsContext.getStore());
|
|
164
|
-
}
|
|
165
|
-
export async function runAgentBrowserProcess(options) {
|
|
166
|
-
const { signal } = options;
|
|
167
|
-
const timeoutMs = options.timeoutMs ?? getAgentBrowserProcessTimeoutMs();
|
|
168
|
-
const deadlineExpired = () => signal?.reason instanceof Error && signal.reason.name === "TimeoutError";
|
|
169
|
-
const cancelledResult = () => ({
|
|
170
|
-
aborted: !deadlineExpired(),
|
|
171
|
-
agentBrowserStarted: false,
|
|
172
|
-
exitCode: deadlineExpired() ? 124 : 1,
|
|
173
|
-
stderr: "",
|
|
174
|
-
stdout: "",
|
|
175
|
-
timedOut: deadlineExpired(),
|
|
176
|
-
timeoutMs: deadlineExpired() ? timeoutMs : undefined,
|
|
177
|
-
});
|
|
178
|
-
if (signal?.aborted === true) {
|
|
179
|
-
return cancelledResult();
|
|
180
|
-
}
|
|
181
|
-
const restoreOptions = restoreOptionsForProcess(options);
|
|
182
|
-
const policyError = () => getManagedPreSpawnPolicyError(restoreOptions, options.managedStateCurrentPageUrl, options.managedStatePageUrlUnknown, options.nativeConfirmationDecision);
|
|
183
|
-
const planningError = policyError();
|
|
184
|
-
if (planningError !== undefined) {
|
|
185
|
-
return failureResult(planningError);
|
|
186
|
-
}
|
|
187
|
-
const prepared = await prepareProcessEnvironment(restoreOptions);
|
|
188
|
-
// Cancellation can arrive while filesystem validation is suspended.
|
|
189
|
-
// oxlint-disable-next-line typescript/no-unnecessary-condition
|
|
190
|
-
if (signal && signal.aborted) {
|
|
191
|
-
return cancelledResult();
|
|
192
|
-
}
|
|
193
|
-
if (prepared.error !== undefined) {
|
|
194
|
-
return failureResult(prepared.error);
|
|
195
|
-
}
|
|
196
|
-
const stockLauncher = resolveWindowsStockLauncher(options.cwd, prepared.env);
|
|
197
|
-
// A reentrant launch/environment observer can cancel during synchronous launch preparation.
|
|
198
|
-
// oxlint-disable-next-line typescript/no-unnecessary-condition
|
|
199
|
-
if (signal && signal.aborted) {
|
|
200
|
-
return cancelledResult();
|
|
201
|
-
}
|
|
202
|
-
return await runBrowserChild({
|
|
203
|
-
args: effectiveBrowserSpawnArgs(options.args, prepared.userAgent, options.preserveAttachedBrowserSession),
|
|
204
|
-
cwd: options.cwd,
|
|
205
|
-
env: prepared.env,
|
|
206
|
-
stockLauncher,
|
|
207
|
-
signal,
|
|
208
|
-
stdin: options.stdin,
|
|
209
|
-
timeoutMs,
|
|
210
|
-
deadlineExpired,
|
|
211
|
-
policyError,
|
|
212
|
-
onStarted: () => {
|
|
213
|
-
commitManagedSessionRestoreSuppression(restoreOptions);
|
|
214
|
-
},
|
|
215
|
-
});
|
|
216
|
-
}
|