pi-agent-browser-native 0.9.5 → 0.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +3 -0
- package/dist/extensions/agent-browser/index.js +1214 -583
- package/dist/packaged/lib/browser-session-conversion.js +2810 -0
- package/dist/packaged/lib/config-policy.js +599 -0
- package/dist/packaged/lib/parsing.js +34 -0
- package/dist/packaged/lib/playbook.js +694 -0
- package/dist/packaged/lib/results/snapshot.js +2671 -0
- package/dist/packaged/lib/runtime.js +3027 -0
- package/docs/ARCHITECTURE.md +11 -1
- package/docs/CODE_QUALITY.md +11 -0
- package/docs/COMMAND_REFERENCE.md +2 -2
- package/docs/PERFORMANCE.md +243 -0
- package/docs/REFERENCE.md +3 -3
- package/docs/SESSION_STORAGE.md +11 -3
- package/docs/SUPPORT_MATRIX.md +8 -4
- package/docs/TOOL_CONTRACT.md +4 -4
- package/docs/performance/2026-10-12.json +7257 -0
- package/package.json +13 -2
- package/scripts/build.mjs +16 -5
- package/scripts/config.mjs +1 -1
- package/scripts/convert-browser-session.mjs +1 -1
- 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,231 +0,0 @@
|
|
|
1
|
-
// @ts-check
|
|
2
|
-
import { EXA_SEARCH_TYPES, WEB_SEARCH_PROVIDERS, getWebSearchProviderDescriptor, isWebSearchProvider, } from "./config-providers.js";
|
|
3
|
-
/** @typedef {import("./config-providers.js").WebSearchProvider} WebSearchProvider */
|
|
4
|
-
/** @typedef {import("./config-providers.js").ExaSearchType} ExaSearchType */
|
|
5
|
-
/** @typedef {"explicit-only" | "authenticated-only" | "always"} BrowserDefaultProfilePolicy */
|
|
6
|
-
/** @typedef {"global" | "project" | "override"} ConfigLayerScope */
|
|
7
|
-
/** @typedef {{ readonly name: string; readonly policy?: BrowserDefaultProfilePolicy }} BrowserDefaultProfileConfig */
|
|
8
|
-
/** @typedef {{ readonly enabled?: boolean; readonly preferredProvider?: WebSearchProvider; readonly defaultSearchType?: ExaSearchType; readonly braveApiKey?: string; readonly exaApiKey?: string }} WebSearchConfig */
|
|
9
|
-
/** @typedef {{ readonly defaultProfile?: BrowserDefaultProfileConfig; readonly executablePath?: string }} BrowserConfig */
|
|
10
|
-
/** @typedef {{ readonly version?: 1; readonly webSearch?: WebSearchConfig; readonly browser?: BrowserConfig }} AgentBrowserConfig */
|
|
11
|
-
/** @typedef {{ readonly config: AgentBrowserConfig; readonly path: string; readonly scope: ConfigLayerScope }} ConfigLayer */
|
|
12
|
-
/** Validation deliberately appends diagnostics to the caller's collectors.
|
|
13
|
-
* @typedef {string[]} ConfigDiagnostics */
|
|
14
|
-
/** @param {unknown} value
|
|
15
|
-
* @returns {value is Readonly<Record<string, unknown>>} */
|
|
16
|
-
function isRecord(value) {
|
|
17
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
18
|
-
}
|
|
19
|
-
/** @param {unknown} value
|
|
20
|
-
* @param {string} path
|
|
21
|
-
* @param {ConfigDiagnostics} errors */
|
|
22
|
-
function validateString(value, path, errors) {
|
|
23
|
-
if (value === undefined) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (typeof value !== "string") {
|
|
27
|
-
errors.push(`${path} must be a string.`);
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
31
|
-
}
|
|
32
|
-
/** @param {unknown} value
|
|
33
|
-
* @param {string} path
|
|
34
|
-
* @param {ConfigDiagnostics} errors */
|
|
35
|
-
function validateBoolean(value, path, errors) {
|
|
36
|
-
if (value === undefined) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (typeof value !== "boolean") {
|
|
40
|
-
errors.push(`${path} must be a boolean.`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
return value;
|
|
44
|
-
}
|
|
45
|
-
/** @param {unknown} value
|
|
46
|
-
* @param {string} path
|
|
47
|
-
* @param {ConfigDiagnostics} errors
|
|
48
|
-
* @returns {WebSearchProvider | undefined} */
|
|
49
|
-
export function validateWebSearchProvider(value, path, errors) {
|
|
50
|
-
if (value === undefined) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const provider = validateString(value, path, errors)?.trim();
|
|
54
|
-
if (provider === undefined) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (!isWebSearchProvider(provider)) {
|
|
58
|
-
errors.push(`${path} must be one of ${WEB_SEARCH_PROVIDERS.join(", ")}.`);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
return provider;
|
|
62
|
-
}
|
|
63
|
-
/** @param {unknown} value
|
|
64
|
-
* @param {string} path
|
|
65
|
-
* @param {ConfigDiagnostics} errors
|
|
66
|
-
* @returns {ExaSearchType | undefined} */
|
|
67
|
-
function validateExaSearchType(value, path, errors) {
|
|
68
|
-
if (value === undefined) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
const searchType = validateString(value, path, errors)?.trim();
|
|
72
|
-
if (searchType === undefined) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const supported = EXA_SEARCH_TYPES.find((candidate) => candidate === searchType);
|
|
76
|
-
if (supported === undefined) {
|
|
77
|
-
errors.push(`${path} must be one of ${EXA_SEARCH_TYPES.join(", ")}.`);
|
|
78
|
-
}
|
|
79
|
-
return supported;
|
|
80
|
-
}
|
|
81
|
-
/** @param {unknown} value
|
|
82
|
-
* @param {string} path
|
|
83
|
-
* @param {ConfigDiagnostics} errors
|
|
84
|
-
* @returns {BrowserDefaultProfileConfig | undefined} */
|
|
85
|
-
function validateBrowserDefaultProfile(value, path, errors) {
|
|
86
|
-
if (value === undefined) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (!isRecord(value)) {
|
|
90
|
-
errors.push(`${path} must be an object.`);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const name = validateString(value.name, `${path}.name`, errors)?.trim();
|
|
94
|
-
if (name === undefined || name.length === 0) {
|
|
95
|
-
errors.push(`${path}.name must not be blank.`);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const policy = validateString(value.policy, `${path}.policy`, errors) ?? "authenticated-only";
|
|
99
|
-
if (policy !== "explicit-only" && policy !== "authenticated-only" && policy !== "always") {
|
|
100
|
-
errors.push(`${path}.policy must be one of explicit-only, authenticated-only, always.`);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
return { name, policy };
|
|
104
|
-
}
|
|
105
|
-
/** @param {unknown} value
|
|
106
|
-
* @param {string} path
|
|
107
|
-
* @param {ConfigDiagnostics} errors
|
|
108
|
-
* @returns {WebSearchConfig | undefined} */
|
|
109
|
-
function validateWebSearchConfig(value, path, errors) {
|
|
110
|
-
if (value === undefined) {
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (!isRecord(value)) {
|
|
114
|
-
errors.push(`${path} must be an object.`);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const enabled = validateBoolean(value.enabled, `${path}.enabled`, errors);
|
|
118
|
-
const preferredProvider = validateWebSearchProvider(value.preferredProvider, `${path}.preferredProvider`, errors);
|
|
119
|
-
const defaultSearchType = validateExaSearchType(value.defaultSearchType, `${path}.defaultSearchType`, errors);
|
|
120
|
-
/** @type {Partial<Record<import("./config-providers.js").WebSearchProviderConfigKey, string>>} */
|
|
121
|
-
const keys = {};
|
|
122
|
-
for (const provider of WEB_SEARCH_PROVIDERS) {
|
|
123
|
-
const { configKey } = getWebSearchProviderDescriptor(provider);
|
|
124
|
-
const apiKey = validateString(value[configKey], `${path}.${configKey}`, errors);
|
|
125
|
-
if (apiKey !== undefined) {
|
|
126
|
-
keys[configKey] = apiKey;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const config = {
|
|
130
|
-
...(enabled !== undefined ? { enabled } : {}),
|
|
131
|
-
...(preferredProvider !== undefined ? { preferredProvider } : {}),
|
|
132
|
-
...(defaultSearchType !== undefined ? { defaultSearchType } : {}),
|
|
133
|
-
...keys,
|
|
134
|
-
};
|
|
135
|
-
return Object.keys(config).length > 0 ? config : undefined;
|
|
136
|
-
}
|
|
137
|
-
/** @param {unknown} value
|
|
138
|
-
* @param {string} path
|
|
139
|
-
* @param {ConfigDiagnostics} errors
|
|
140
|
-
* @returns {BrowserConfig | undefined} */
|
|
141
|
-
function validateBrowserConfig(value, path, errors) {
|
|
142
|
-
if (value === undefined) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
if (!isRecord(value)) {
|
|
146
|
-
errors.push(`${path} must be an object.`);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
const defaultProfile = validateBrowserDefaultProfile(value.defaultProfile, `${path}.defaultProfile`, errors);
|
|
150
|
-
const executablePath = validateString(value.executablePath, `${path}.executablePath`, errors)?.trim();
|
|
151
|
-
return {
|
|
152
|
-
...(defaultProfile !== undefined ? { defaultProfile } : {}),
|
|
153
|
-
...(executablePath !== undefined && executablePath.length > 0 ? { executablePath } : {}),
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
/** @param {unknown} value
|
|
157
|
-
* @param {string} path
|
|
158
|
-
* @param {ConfigDiagnostics} errors
|
|
159
|
-
* @param {ConfigDiagnostics} warnings
|
|
160
|
-
* @returns {AgentBrowserConfig | undefined} */
|
|
161
|
-
export function validateAgentBrowserConfig(value, path, errors, warnings) {
|
|
162
|
-
if (!isRecord(value)) {
|
|
163
|
-
errors.push(`${path} must contain a JSON object.`);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (value.version !== undefined && value.version !== 1) {
|
|
167
|
-
errors.push(`${path}.version must be 1 when present.`);
|
|
168
|
-
}
|
|
169
|
-
const webSearch = validateWebSearchConfig(value.webSearch, `${path}.webSearch`, errors);
|
|
170
|
-
const browser = validateBrowserConfig(value.browser, `${path}.browser`, errors);
|
|
171
|
-
for (const key of Object.keys(value)) {
|
|
172
|
-
if (!["version", "webSearch", "browser"].includes(key)) {
|
|
173
|
-
warnings.push(`${path}.${key} is not a recognized pi-agent-browser-native config field and was ignored.`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
...(value.version === 1 ? { version: 1 } : {}),
|
|
178
|
-
...(webSearch !== undefined ? { webSearch } : {}),
|
|
179
|
-
...(browser !== undefined ? { browser } : {}),
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
/** Parse config without retaining native token previews or source-bearing error causes.
|
|
183
|
-
* @param {string} raw
|
|
184
|
-
* @returns {{ readonly ok: true; readonly value: unknown } | { readonly ok: false; readonly error: string }} */
|
|
185
|
-
export function parseAgentBrowserConfigJson(raw) {
|
|
186
|
-
try {
|
|
187
|
-
return { ok: true, value: JSON.parse(raw) };
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
const location = error instanceof Error
|
|
191
|
-
? error.message.match(/at position \d+(?: \(line \d+ column \d+\))?/)?.[0]
|
|
192
|
-
: undefined;
|
|
193
|
-
return {
|
|
194
|
-
ok: false,
|
|
195
|
-
error: location === undefined ? "Invalid JSON." : `Invalid JSON ${location}.`,
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/** @param {string} raw
|
|
200
|
-
* @param {string} path
|
|
201
|
-
* @param {ConfigLayerScope} scope
|
|
202
|
-
* @param {ConfigDiagnostics} errors
|
|
203
|
-
* @param {ConfigDiagnostics} warnings
|
|
204
|
-
* @returns {ConfigLayer | undefined} */
|
|
205
|
-
export function parseAgentBrowserConfigLayer(raw, path, scope, errors, warnings) {
|
|
206
|
-
const parsed = parseAgentBrowserConfigJson(raw);
|
|
207
|
-
if (!parsed.ok) {
|
|
208
|
-
errors.push(`Could not parse ${scope} config ${path}: ${parsed.error}`);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
const config = validateAgentBrowserConfig(parsed.value, path, errors, warnings);
|
|
212
|
-
return config ? { config, path, scope } : undefined;
|
|
213
|
-
}
|
|
214
|
-
/** @param {unknown} value */
|
|
215
|
-
export function describeUnknownError(value) {
|
|
216
|
-
switch (typeof value) {
|
|
217
|
-
case "string":
|
|
218
|
-
return value;
|
|
219
|
-
case "number":
|
|
220
|
-
case "bigint":
|
|
221
|
-
case "boolean":
|
|
222
|
-
case "symbol":
|
|
223
|
-
return String(value);
|
|
224
|
-
case "undefined":
|
|
225
|
-
return "undefined";
|
|
226
|
-
case "object":
|
|
227
|
-
return value === null ? "null" : Object.prototype.toString.call(value);
|
|
228
|
-
case "function":
|
|
229
|
-
return value.toString();
|
|
230
|
-
}
|
|
231
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { exec as execCallback } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
import { SECRET_COMMAND_TIMEOUT_MS, getWebSearchCredentialSource, getWebSearchProviderOrder, loadAgentBrowserConfigStateSync, resolveEnvInterpolations, } from "./config-policy.js";
|
|
4
|
-
export { AGENT_BROWSER_CONFIG_ENV, BRAVE_API_KEY_ENV, CONFIG_RELATIVE_PATH, DEFAULT_WEB_SEARCH_PROVIDER, EXA_API_KEY_ENV, EXA_SEARCH_TYPES, GLOBAL_CONFIG_RELATIVE_PATH, SECRET_COMMAND_TIMEOUT_MS, WEB_SEARCH_PROVIDER_CONFIG_KEYS, WEB_SEARCH_PROVIDER_ENV_VARS, WEB_SEARCH_PROVIDERS, buildAgentBrowserConfigState, buildWebSearchCredentialSources, canRegisterWebSearchTool, classifyCredentialSource, formatBrowserExecutableStatus, formatBrowserProfileStatus, getAgentBrowserConfigPaths, getCredentialSourceSummary, getGlobalAgentBrowserConfigPath, getProjectAgentBrowserConfigPath, getWebSearchCredentialSource, getWebSearchProviderDescriptor, getWebSearchProviderLabel, getWebSearchProviderOrder, hasPotentialCredentialSource, isWebSearchProvider, loadAgentBrowserConfigStateSync, mergeAgentBrowserConfig, parseAgentBrowserConfigJson, parseAgentBrowserConfigLayer, resolveEnvInterpolations, summarizeConfigFiles, validateAgentBrowserConfig, validateWebSearchProvider, } from "./config-policy.js";
|
|
5
|
-
// Node's callback-oriented exec returns ChildProcess; promisify intentionally ignores that return.
|
|
6
|
-
// oxlint-disable-next-line typescript/strict-void-return
|
|
7
|
-
const exec = promisify(execCallback);
|
|
8
|
-
export function loadAgentBrowserConfigSync(options = {}) {
|
|
9
|
-
return loadAgentBrowserConfigStateSync(options);
|
|
10
|
-
}
|
|
11
|
-
async function resolveCommandCredential(rawValue, signal) {
|
|
12
|
-
const command = rawValue.slice(1).trim();
|
|
13
|
-
if (command.length === 0) {
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
const result = await exec(command, {
|
|
18
|
-
signal,
|
|
19
|
-
timeout: SECRET_COMMAND_TIMEOUT_MS,
|
|
20
|
-
maxBuffer: 1024 * 1024,
|
|
21
|
-
});
|
|
22
|
-
const value = result.stdout.trim();
|
|
23
|
-
return value.length > 0 ? value : undefined;
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
if (signal?.aborted === true) {
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
29
|
-
// The native exec error contains the secret command/stdout/stderr; never expose it as a cause.
|
|
30
|
-
// oxlint-disable-next-line eslint/preserve-caught-error
|
|
31
|
-
throw new Error("Credential command failed without exposing command output. Check pi-agent-browser-config web-search status and the configured secret manager command.");
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async function resolveCredentialSource(source, options = {}) {
|
|
35
|
-
if (!source) {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
let value;
|
|
39
|
-
if (source.kind === "command") {
|
|
40
|
-
value = await resolveCommandCredential(source.rawValue, options.signal);
|
|
41
|
-
}
|
|
42
|
-
else if (source.kind === "env") {
|
|
43
|
-
value = resolveEnvInterpolations(source.rawValue, options.env ?? process.env)?.trim();
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
value = source.rawValue.trim();
|
|
47
|
-
}
|
|
48
|
-
return value !== undefined && value.length > 0 ? { source, value } : undefined;
|
|
49
|
-
}
|
|
50
|
-
export async function resolveWebSearchCredential(state, provider, options = {}) {
|
|
51
|
-
if (!state.webSearchEnabled || state.errors.length > 0) {
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
return resolveCredentialSource(getWebSearchCredentialSource(state, provider), options);
|
|
55
|
-
}
|
|
56
|
-
export async function resolvePreferredWebSearchCredential(state, options = {}) {
|
|
57
|
-
if (!state.webSearchEnabled || state.errors.length > 0) {
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
for (const provider of getWebSearchProviderOrder(state, options.provider)) {
|
|
61
|
-
// Resolve in configured preference order; later secret commands must not run once a key resolves.
|
|
62
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
63
|
-
const credential = await resolveWebSearchCredential(state, provider, options);
|
|
64
|
-
if (credential) {
|
|
65
|
-
return { provider, credential };
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { isRecord } from "../parsing.js";
|
|
2
|
-
const ELECTRON_CDP_FETCH_TIMEOUT_MS = 1_000;
|
|
3
|
-
function asString(value) {
|
|
4
|
-
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
5
|
-
}
|
|
6
|
-
export function parseCdpVersion(value) {
|
|
7
|
-
if (!isRecord(value)) {
|
|
8
|
-
return undefined;
|
|
9
|
-
}
|
|
10
|
-
const browser = asString(value.Browser) ?? asString(value.browser);
|
|
11
|
-
if (browser === undefined) {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
return {
|
|
15
|
-
browser,
|
|
16
|
-
protocolVersion: asString(value["Protocol-Version"]) ?? asString(value.protocolVersion),
|
|
17
|
-
userAgent: asString(value["User-Agent"]) ?? asString(value.userAgent),
|
|
18
|
-
v8Version: asString(value["V8-Version"]) ?? asString(value.v8Version),
|
|
19
|
-
webKitVersion: asString(value["WebKit-Version"]) ?? asString(value.webKitVersion),
|
|
20
|
-
webSocketDebuggerUrl: asString(value.webSocketDebuggerUrl),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function parseCdpTargets(value) {
|
|
24
|
-
if (!Array.isArray(value)) {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
return value.filter(isRecord).map((target) => ({
|
|
28
|
-
id: asString(target.id),
|
|
29
|
-
title: asString(target.title),
|
|
30
|
-
type: asString(target.type),
|
|
31
|
-
url: asString(target.url),
|
|
32
|
-
webSocketDebuggerUrl: asString(target.webSocketDebuggerUrl),
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
export async function fetchCdpJson(url, signal) {
|
|
36
|
-
const controller = new AbortController();
|
|
37
|
-
const timeout = setTimeout(() => controller.abort(), ELECTRON_CDP_FETCH_TIMEOUT_MS);
|
|
38
|
-
try {
|
|
39
|
-
const response = await fetch(url, {
|
|
40
|
-
signal: signal ? AbortSignal.any([signal, controller.signal]) : controller.signal,
|
|
41
|
-
});
|
|
42
|
-
if (!response.ok) {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
return (await response.json());
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
clearTimeout(timeout);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function boundElectronProbeString(value, maxLength = 240) {
|
|
55
|
-
const trimmed = value?.trim();
|
|
56
|
-
if (trimmed === undefined || trimmed.length === 0) {
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
return trimmed.length > maxLength
|
|
60
|
-
? `${trimmed.slice(0, Math.max(0, maxLength - 3))}...`
|
|
61
|
-
: trimmed;
|
|
62
|
-
}
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import { lstat, rm } from "node:fs/promises";
|
|
2
|
-
import { fetchCdpJson, parseCdpTargets, parseCdpVersion, } from "./cdp.js";
|
|
3
|
-
import { ELECTRON_PROFILE_DIR_PREFIX } from "./launch-types.js";
|
|
4
|
-
import { pathExists } from "../fs-utils.js";
|
|
5
|
-
import { isRecord } from "../parsing.js";
|
|
6
|
-
import { readProcessStartIdentity, processStartIdentitiesMatch } from "../process-identity.js";
|
|
7
|
-
import { stringifyUnknown } from "../results/text.js";
|
|
8
|
-
import { getSecureTempChildDirectoryValidationError } from "../temp.js";
|
|
9
|
-
const ELECTRON_CLEANUP_DEFAULT_TIMEOUT_MS = 5_000;
|
|
10
|
-
const ELECTRON_CLEANUP_POLL_INTERVAL_MS = 100;
|
|
11
|
-
function sleep(ms) {
|
|
12
|
-
return new Promise((resolve) => {
|
|
13
|
-
setTimeout(resolve, ms);
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function isPidAlive(pid) {
|
|
17
|
-
if (pid === undefined || !Number.isSafeInteger(pid) || pid <= 0) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
process.kill(pid, 0);
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
return isRecord(error) && error.code === "EPERM";
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
async function isPortAlive(port, signal) {
|
|
29
|
-
const version = parseCdpVersion(await fetchCdpJson(`http://127.0.0.1:${port}/json/version`, signal));
|
|
30
|
-
if (!version) {
|
|
31
|
-
return { targets: [] };
|
|
32
|
-
}
|
|
33
|
-
const targets = parseCdpTargets(await fetchCdpJson(`http://127.0.0.1:${port}/json/list`, signal));
|
|
34
|
-
return { targets, version };
|
|
35
|
-
}
|
|
36
|
-
export async function inspectElectronLaunchStatus(record, signal) {
|
|
37
|
-
const cdp = await isPortAlive(record.port, signal);
|
|
38
|
-
let userDataDirState;
|
|
39
|
-
try {
|
|
40
|
-
await lstat(record.userDataDir);
|
|
41
|
-
userDataDirState = "present";
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
userDataDirState = isRecord(error) && error.code === "ENOENT" ? "absent" : "unknown";
|
|
45
|
-
}
|
|
46
|
-
return {
|
|
47
|
-
cleanupState: record.cleanupState,
|
|
48
|
-
launchId: record.launchId,
|
|
49
|
-
pid: record.pid,
|
|
50
|
-
pidAlive: isPidAlive(record.pid),
|
|
51
|
-
port: record.port,
|
|
52
|
-
portAlive: cdp.version !== undefined,
|
|
53
|
-
targets: cdp.targets,
|
|
54
|
-
userDataDirState,
|
|
55
|
-
version: cdp.version,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
function hasProcessExited(child, pid) {
|
|
59
|
-
// A Windows PID probe can report ESRCH during termination, before the
|
|
60
|
-
// tracked process has exited and released its executable/resources.
|
|
61
|
-
return child ? child.exitCode !== null || child.signalCode !== null : isPidAlive(pid) === false;
|
|
62
|
-
}
|
|
63
|
-
async function waitForProcessExit(child, pid, deadlineMs) {
|
|
64
|
-
while (Date.now() <= deadlineMs) {
|
|
65
|
-
if (hasProcessExited(child, pid)) {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
// Polling observes exit between sleeps; parallel waits cannot preserve the deadline.
|
|
69
|
-
// oxlint-disable-next-line no-await-in-loop
|
|
70
|
-
await sleep(ELECTRON_CLEANUP_POLL_INTERVAL_MS);
|
|
71
|
-
}
|
|
72
|
-
return hasProcessExited(child, pid);
|
|
73
|
-
}
|
|
74
|
-
async function getRestoredProcessVerificationError(record) {
|
|
75
|
-
if (record.startIdentity === undefined || record.startIdentity.length === 0) {
|
|
76
|
-
return `PID ${String(record.pid)} is alive, but this session has no tracked child handle or recorded start identity; refusing to signal a restored PID that may have been reused.`;
|
|
77
|
-
}
|
|
78
|
-
const currentIdentity = record.pid === undefined ? undefined : await readProcessStartIdentity(record.pid);
|
|
79
|
-
if (currentIdentity === undefined) {
|
|
80
|
-
return `PID ${String(record.pid)} is alive, but its current start identity could not be inspected; refusing to signal a restored PID that may have been reused.`;
|
|
81
|
-
}
|
|
82
|
-
if (!processStartIdentitiesMatch(record.startIdentity, currentIdentity)) {
|
|
83
|
-
return `PID ${String(record.pid)} is alive, but its start identity does not match the wrapper launch record; refusing to signal a restored PID that may have been reused.`;
|
|
84
|
-
}
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
function killPid(pid, signal) {
|
|
88
|
-
if (pid === undefined || !Number.isSafeInteger(pid) || pid <= 0) {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
process.kill(pid, signal);
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
function killProcessGroup(processGroupId, signal) {
|
|
100
|
-
if (process.platform === "win32" ||
|
|
101
|
-
processGroupId === undefined ||
|
|
102
|
-
!Number.isSafeInteger(processGroupId) ||
|
|
103
|
-
processGroupId <= 0) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
try {
|
|
107
|
-
process.kill(-processGroupId, signal);
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
function signalRestoredLaunchProcess(record, signal) {
|
|
115
|
-
return killProcessGroup(record.processGroupId, signal) || killPid(record.pid, signal);
|
|
116
|
-
}
|
|
117
|
-
async function cleanupProcess(record, child, deadlineMs) {
|
|
118
|
-
if (record.pid === undefined || record.pid === 0 || Number.isNaN(record.pid)) {
|
|
119
|
-
return { resource: "process", state: "skipped" };
|
|
120
|
-
}
|
|
121
|
-
if (hasProcessExited(child, record.pid)) {
|
|
122
|
-
return { resource: "process", state: "already-gone" };
|
|
123
|
-
}
|
|
124
|
-
return child === undefined
|
|
125
|
-
? cleanupRestoredProcess(record, deadlineMs)
|
|
126
|
-
: cleanupTrackedProcess(record, child, deadlineMs);
|
|
127
|
-
}
|
|
128
|
-
async function cleanupRestoredProcess(record, deadlineMs) {
|
|
129
|
-
const verificationError = await getRestoredProcessVerificationError(record);
|
|
130
|
-
if (verificationError !== undefined) {
|
|
131
|
-
return { error: verificationError, resource: "process", state: "failed" };
|
|
132
|
-
}
|
|
133
|
-
if (!signalRestoredLaunchProcess(record, "SIGTERM")) {
|
|
134
|
-
return {
|
|
135
|
-
error: `PID ${String(record.pid)} matched wrapper launch metadata but could not be signaled.`,
|
|
136
|
-
resource: "process",
|
|
137
|
-
state: "failed",
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
if (await waitForProcessExit(undefined, record.pid, deadlineMs)) {
|
|
141
|
-
return { resource: "process", state: "removed" };
|
|
142
|
-
}
|
|
143
|
-
const killVerificationError = await getRestoredProcessVerificationError(record);
|
|
144
|
-
if (killVerificationError !== undefined) {
|
|
145
|
-
return { error: killVerificationError, resource: "process", state: "failed" };
|
|
146
|
-
}
|
|
147
|
-
signalRestoredLaunchProcess(record, "SIGKILL");
|
|
148
|
-
if (await waitForProcessExit(undefined, record.pid, Date.now() + 1_000)) {
|
|
149
|
-
return { resource: "process", state: "removed" };
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
error: `PID ${String(record.pid)} remained alive after SIGTERM/SIGKILL.`,
|
|
153
|
-
resource: "process",
|
|
154
|
-
state: "failed",
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
async function cleanupTrackedProcess(record, child, deadlineMs) {
|
|
158
|
-
if (child.exitCode === null && child.signalCode === null) {
|
|
159
|
-
child.kill("SIGTERM");
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
killPid(record.pid, "SIGTERM");
|
|
163
|
-
}
|
|
164
|
-
if (await waitForProcessExit(child, record.pid, deadlineMs)) {
|
|
165
|
-
return { resource: "process", state: "removed" };
|
|
166
|
-
}
|
|
167
|
-
if (child.exitCode === null && child.signalCode === null) {
|
|
168
|
-
child.kill("SIGKILL");
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
killPid(record.pid, "SIGKILL");
|
|
172
|
-
}
|
|
173
|
-
if (await waitForProcessExit(child, record.pid, Date.now() + 1_000)) {
|
|
174
|
-
return { resource: "process", state: "removed" };
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
error: `PID ${String(record.pid)} remained alive after SIGTERM/SIGKILL.`,
|
|
178
|
-
resource: "process",
|
|
179
|
-
state: "failed",
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
async function cleanupUserDataDir(record) {
|
|
183
|
-
if (record.userDataDir.length === 0) {
|
|
184
|
-
return { resource: "user-data-dir", state: "skipped" };
|
|
185
|
-
}
|
|
186
|
-
if (!(await pathExists(record.userDataDir))) {
|
|
187
|
-
return { resource: "user-data-dir", state: "already-gone" };
|
|
188
|
-
}
|
|
189
|
-
const validationError = await getSecureTempChildDirectoryValidationError(record.userDataDir, ELECTRON_PROFILE_DIR_PREFIX);
|
|
190
|
-
if (validationError !== undefined) {
|
|
191
|
-
return { error: validationError, resource: "user-data-dir", state: "failed" };
|
|
192
|
-
}
|
|
193
|
-
try {
|
|
194
|
-
await rm(record.userDataDir, { force: true, recursive: true });
|
|
195
|
-
return {
|
|
196
|
-
resource: "user-data-dir",
|
|
197
|
-
state: (await pathExists(record.userDataDir)) ? "failed" : "removed",
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
return {
|
|
202
|
-
error: error instanceof Error ? error.message : stringifyUnknown(error),
|
|
203
|
-
resource: "user-data-dir",
|
|
204
|
-
state: "failed",
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
function shouldSkipUserDataDirCleanup(processStep, debugPortStep) {
|
|
209
|
-
if (processStep.state === "failed") {
|
|
210
|
-
return `Skipped because process cleanup failed: ${processStep.error ?? "process state could not be verified"}.`;
|
|
211
|
-
}
|
|
212
|
-
if (debugPortStep.state === "failed") {
|
|
213
|
-
return `Skipped because debug port cleanup is incomplete: ${debugPortStep.error ?? "debug port still responds"}.`;
|
|
214
|
-
}
|
|
215
|
-
return undefined;
|
|
216
|
-
}
|
|
217
|
-
async function cleanupDebugPort(record) {
|
|
218
|
-
const cdp = await isPortAlive(record.port);
|
|
219
|
-
return cdp.version
|
|
220
|
-
? {
|
|
221
|
-
resource: "debug-port",
|
|
222
|
-
state: "failed",
|
|
223
|
-
error: `/json/version still responds on port ${record.port}.`,
|
|
224
|
-
}
|
|
225
|
-
: { resource: "debug-port", state: "already-gone" };
|
|
226
|
-
}
|
|
227
|
-
function summarizeCleanup(launchId, steps) {
|
|
228
|
-
const remainingResources = steps
|
|
229
|
-
.filter((step) => step.state === "failed" ||
|
|
230
|
-
(step.resource === "user-data-dir" &&
|
|
231
|
-
step.state === "skipped" &&
|
|
232
|
-
step.error !== undefined &&
|
|
233
|
-
step.error.length > 0))
|
|
234
|
-
.map((step) => step.resource);
|
|
235
|
-
const partial = remainingResources.length > 0;
|
|
236
|
-
return {
|
|
237
|
-
partial,
|
|
238
|
-
remainingResources,
|
|
239
|
-
summary: partial
|
|
240
|
-
? `Electron cleanup for ${launchId} is partial; remaining resources: ${remainingResources.join(", ")}.`
|
|
241
|
-
: `Electron cleanup for ${launchId} completed.`,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
export async function cleanupElectronLaunchResources(options) {
|
|
245
|
-
const timeoutMs = typeof options.timeoutMs === "number" &&
|
|
246
|
-
Number.isSafeInteger(options.timeoutMs) &&
|
|
247
|
-
options.timeoutMs > 0
|
|
248
|
-
? options.timeoutMs
|
|
249
|
-
: ELECTRON_CLEANUP_DEFAULT_TIMEOUT_MS;
|
|
250
|
-
const deadlineMs = Date.now() + timeoutMs;
|
|
251
|
-
const processStep = await cleanupProcess(options.record, options.child, deadlineMs);
|
|
252
|
-
const debugPortStep = await cleanupDebugPort(options.record);
|
|
253
|
-
const userDataDirSkipReason = shouldSkipUserDataDirCleanup(processStep, debugPortStep);
|
|
254
|
-
const userDataDirStep = userDataDirSkipReason !== undefined
|
|
255
|
-
? {
|
|
256
|
-
error: userDataDirSkipReason,
|
|
257
|
-
resource: "user-data-dir",
|
|
258
|
-
state: "skipped",
|
|
259
|
-
}
|
|
260
|
-
: await cleanupUserDataDir(options.record);
|
|
261
|
-
const steps = [processStep, debugPortStep, userDataDirStep];
|
|
262
|
-
const summary = summarizeCleanup(options.record.launchId, steps);
|
|
263
|
-
return {
|
|
264
|
-
launchId: options.record.launchId,
|
|
265
|
-
partial: summary.partial,
|
|
266
|
-
record: {
|
|
267
|
-
...options.record,
|
|
268
|
-
cleanupState: summary.partial ? "partial" : "cleaned",
|
|
269
|
-
},
|
|
270
|
-
remainingResources: summary.remainingResources,
|
|
271
|
-
steps,
|
|
272
|
-
summary: summary.summary,
|
|
273
|
-
};
|
|
274
|
-
}
|