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,193 +0,0 @@
|
|
|
1
|
-
import { isRecord } from "./parsing.js";
|
|
2
|
-
import { fetchSearchJson, SEARCH_REQUEST_TIMEOUT_MS } from "./web-search-request.js";
|
|
3
|
-
import { cleanSearchText, normalizeBraveSearchResult, normalizeExaSearchResult, parseBraveSearchResponse, parseExaSearchResponse, } from "./web-search-results.js";
|
|
4
|
-
const BRAVE_SEARCH_ENDPOINT = "https://api.search.brave.com/res/v1/web/search";
|
|
5
|
-
const EXA_SEARCH_ENDPOINT = "https://api.exa.ai/search";
|
|
6
|
-
const EXA_DYNAMIC_HIGHLIGHTS_BETA = "dynamic-highlights-2026-08-28";
|
|
7
|
-
export const EXA_SEARCH_SYSTEM_PROMPT = "Prefer primary, official sources. Respect any requested version or date. Avoid duplicate or equivalent results.";
|
|
8
|
-
/** Local validation/config failures, not provider outages; reported as `validation-error`. */
|
|
9
|
-
export class WebSearchLocalError extends Error {
|
|
10
|
-
}
|
|
11
|
-
export function buildBraveSearchUrl(params) {
|
|
12
|
-
const url = new URL(BRAVE_SEARCH_ENDPOINT);
|
|
13
|
-
url.searchParams.set("q", params.query);
|
|
14
|
-
url.searchParams.set("count", String(params.count));
|
|
15
|
-
url.searchParams.set("offset", String(params.offset));
|
|
16
|
-
if (params.country !== undefined && params.country.length > 0) {
|
|
17
|
-
url.searchParams.set("country", params.country.toUpperCase());
|
|
18
|
-
}
|
|
19
|
-
if (params.searchLang !== undefined && params.searchLang.length > 0) {
|
|
20
|
-
url.searchParams.set("search_lang", params.searchLang);
|
|
21
|
-
}
|
|
22
|
-
if (params.safesearch !== undefined) {
|
|
23
|
-
url.searchParams.set("safesearch", params.safesearch);
|
|
24
|
-
}
|
|
25
|
-
if (params.freshness !== undefined) {
|
|
26
|
-
url.searchParams.set("freshness", params.freshness);
|
|
27
|
-
}
|
|
28
|
-
return url;
|
|
29
|
-
}
|
|
30
|
-
const FRESHNESS_DAYS = { pd: 1, pw: 7, pm: 31, py: 365 };
|
|
31
|
-
function getStartPublishedDate(freshness, now) {
|
|
32
|
-
if (freshness === undefined) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
return new Date(now().getTime() - FRESHNESS_DAYS[freshness] * 24 * 60 * 60 * 1000).toISOString();
|
|
36
|
-
}
|
|
37
|
-
function hasEntries(values) {
|
|
38
|
-
return values !== undefined && values.length > 0;
|
|
39
|
-
}
|
|
40
|
-
function validateExaFilters(params, searchType) {
|
|
41
|
-
if (hasEntries(params.additionalQueries) && !searchType.startsWith("deep")) {
|
|
42
|
-
throw new WebSearchLocalError(`additionalQueries requires deep-lite, deep, or deep-reasoning; received ${searchType}.`);
|
|
43
|
-
}
|
|
44
|
-
if ((params.category === "company" || params.category === "people") &&
|
|
45
|
-
(params.freshness !== undefined || hasEntries(params.excludeDomains))) {
|
|
46
|
-
throw new WebSearchLocalError(`category ${params.category} cannot be combined with freshness or excludeDomains.`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function exaContentFilters(params) {
|
|
50
|
-
return {
|
|
51
|
-
...(hasEntries(params.includeDomains) ? { includeDomains: params.includeDomains } : {}),
|
|
52
|
-
...(hasEntries(params.excludeDomains) ? { excludeDomains: params.excludeDomains } : {}),
|
|
53
|
-
...(hasEntries(params.additionalQueries)
|
|
54
|
-
? { additionalQueries: params.additionalQueries }
|
|
55
|
-
: {}),
|
|
56
|
-
...(params.safesearch !== undefined && params.safesearch !== "off" ? { moderation: true } : {}),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export function buildExaSearchRequestBody(params, now = () => new Date()) {
|
|
60
|
-
const searchType = params.searchType ?? "auto";
|
|
61
|
-
validateExaFilters(params, searchType);
|
|
62
|
-
const startPublishedDate = getStartPublishedDate(params.freshness, now);
|
|
63
|
-
return {
|
|
64
|
-
query: params.query,
|
|
65
|
-
type: searchType,
|
|
66
|
-
numResults: Math.min(params.count + params.offset, 100),
|
|
67
|
-
contents: { highlights: params.highlightsDynamic === true ? { dynamic: true } : true },
|
|
68
|
-
systemPrompt: EXA_SEARCH_SYSTEM_PROMPT,
|
|
69
|
-
...(params.category !== undefined ? { category: params.category } : {}),
|
|
70
|
-
...(params.country !== undefined && params.country.length > 0
|
|
71
|
-
? { userLocation: params.country.toUpperCase() }
|
|
72
|
-
: {}),
|
|
73
|
-
...exaContentFilters(params),
|
|
74
|
-
...(startPublishedDate !== undefined ? { startPublishedDate } : {}),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
export async function fetchBraveSearchJson(url, apiKey, signal) {
|
|
78
|
-
const data = await fetchSearchJson({
|
|
79
|
-
cancelMessage: "Brave search cancelled",
|
|
80
|
-
init: { headers: { Accept: "application/json", "X-Subscription-Token": apiKey } },
|
|
81
|
-
invalidJsonMessage: "Brave search returned invalid JSON",
|
|
82
|
-
provider: "brave",
|
|
83
|
-
request: url,
|
|
84
|
-
signal,
|
|
85
|
-
timeoutMessage: "Brave search timed out",
|
|
86
|
-
timeoutMs: SEARCH_REQUEST_TIMEOUT_MS,
|
|
87
|
-
});
|
|
88
|
-
return parseBraveSearchResponse(data);
|
|
89
|
-
}
|
|
90
|
-
function getExaRequestTimeoutMs(searchType) {
|
|
91
|
-
switch (searchType) {
|
|
92
|
-
case "deep-lite":
|
|
93
|
-
return 45_000;
|
|
94
|
-
case "deep":
|
|
95
|
-
return 60_000;
|
|
96
|
-
case "deep-reasoning":
|
|
97
|
-
return 90_000;
|
|
98
|
-
case "auto":
|
|
99
|
-
case "fast":
|
|
100
|
-
case "instant":
|
|
101
|
-
case undefined:
|
|
102
|
-
return SEARCH_REQUEST_TIMEOUT_MS;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
function usesDynamicHighlights(body) {
|
|
106
|
-
const contents = body.contents;
|
|
107
|
-
return (isRecord(contents) &&
|
|
108
|
-
!Array.isArray(contents) &&
|
|
109
|
-
isRecord(contents.highlights) &&
|
|
110
|
-
!Array.isArray(contents.highlights) &&
|
|
111
|
-
contents.highlights.dynamic === true);
|
|
112
|
-
}
|
|
113
|
-
export async function fetchExaSearchJson(body, apiKey, signal, timeoutMs = SEARCH_REQUEST_TIMEOUT_MS) {
|
|
114
|
-
const data = await fetchSearchJson({
|
|
115
|
-
cancelMessage: "Exa search cancelled",
|
|
116
|
-
init: {
|
|
117
|
-
body: JSON.stringify(body),
|
|
118
|
-
headers: {
|
|
119
|
-
Accept: "application/json",
|
|
120
|
-
"Content-Type": "application/json",
|
|
121
|
-
"x-api-key": apiKey,
|
|
122
|
-
...(usesDynamicHighlights(body) ? { "Exa-Beta": EXA_DYNAMIC_HIGHLIGHTS_BETA } : {}),
|
|
123
|
-
},
|
|
124
|
-
method: "POST",
|
|
125
|
-
},
|
|
126
|
-
invalidJsonMessage: "Exa search returned invalid JSON",
|
|
127
|
-
provider: "exa",
|
|
128
|
-
request: EXA_SEARCH_ENDPOINT,
|
|
129
|
-
signal,
|
|
130
|
-
timeoutMessage: "Exa search timed out",
|
|
131
|
-
timeoutMs,
|
|
132
|
-
});
|
|
133
|
-
return parseExaSearchResponse(data);
|
|
134
|
-
}
|
|
135
|
-
const BRAVE_WEB_SEARCH_ADAPTER = {
|
|
136
|
-
provider: "brave",
|
|
137
|
-
buildRequest(params) {
|
|
138
|
-
// Brave offsets count pages; fetch the prefix and slice by result like Exa.
|
|
139
|
-
return buildBraveSearchUrl({ ...params, count: params.count + params.offset, offset: 0 });
|
|
140
|
-
},
|
|
141
|
-
fetchJson: fetchBraveSearchJson,
|
|
142
|
-
normalizeResponse(response, params) {
|
|
143
|
-
return {
|
|
144
|
-
results: (response.web?.results ?? [])
|
|
145
|
-
.map(normalizeBraveSearchResult)
|
|
146
|
-
.filter((result) => result !== undefined)
|
|
147
|
-
.slice(params.offset, params.offset + params.count),
|
|
148
|
-
returnedQuery: cleanSearchText(response.query?.altered, 300) ??
|
|
149
|
-
cleanSearchText(response.query?.original, 300) ??
|
|
150
|
-
params.query,
|
|
151
|
-
};
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
const EXA_WEB_SEARCH_ADAPTER = {
|
|
155
|
-
provider: "exa",
|
|
156
|
-
buildRequest(params) {
|
|
157
|
-
return {
|
|
158
|
-
body: buildExaSearchRequestBody(params),
|
|
159
|
-
timeoutMs: getExaRequestTimeoutMs(params.searchType ?? "auto"),
|
|
160
|
-
};
|
|
161
|
-
},
|
|
162
|
-
fetchJson(request, apiKey, signal) {
|
|
163
|
-
return fetchExaSearchJson(request.body, apiKey, signal, request.timeoutMs);
|
|
164
|
-
},
|
|
165
|
-
normalizeResponse(response, params) {
|
|
166
|
-
return {
|
|
167
|
-
extraDetails: {
|
|
168
|
-
requestId: cleanSearchText(response.requestId, 120),
|
|
169
|
-
searchType: params.searchType ?? "auto",
|
|
170
|
-
},
|
|
171
|
-
results: (response.results ?? [])
|
|
172
|
-
.map(normalizeExaSearchResult)
|
|
173
|
-
.filter((result) => result !== undefined)
|
|
174
|
-
.slice(params.offset, params.offset + params.count),
|
|
175
|
-
returnedQuery: params.query,
|
|
176
|
-
};
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
/** Build before queueing so local validation fails without consuming a request slot. */
|
|
180
|
-
export function prepareWebSearchRequest(provider, params, apiKey, signal) {
|
|
181
|
-
if (provider === "exa") {
|
|
182
|
-
const request = EXA_WEB_SEARCH_ADAPTER.buildRequest(params);
|
|
183
|
-
return async () => {
|
|
184
|
-
const response = await EXA_WEB_SEARCH_ADAPTER.fetchJson(request, apiKey, signal);
|
|
185
|
-
return EXA_WEB_SEARCH_ADAPTER.normalizeResponse(response, params);
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
const request = BRAVE_WEB_SEARCH_ADAPTER.buildRequest(params);
|
|
189
|
-
return async () => {
|
|
190
|
-
const response = await BRAVE_WEB_SEARCH_ADAPTER.fetchJson(request, apiKey, signal);
|
|
191
|
-
return BRAVE_WEB_SEARCH_ADAPTER.normalizeResponse(response, params);
|
|
192
|
-
};
|
|
193
|
-
}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { getProviderLabel } from "./web-search-results.js";
|
|
2
|
-
export const SEARCH_REQUEST_TIMEOUT_MS = 15_000;
|
|
3
|
-
export const WEB_SEARCH_MIN_REQUEST_INTERVAL_MS = 1_100;
|
|
4
|
-
function sleepWithAbort(ms, signal) {
|
|
5
|
-
if (ms <= 0) {
|
|
6
|
-
return Promise.resolve();
|
|
7
|
-
}
|
|
8
|
-
if (signal?.aborted === true) {
|
|
9
|
-
const reason = signal.reason;
|
|
10
|
-
// A caller-owned abort reason may be non-Error; preserve the original reason.
|
|
11
|
-
// oxlint-disable-next-line typescript/prefer-promise-reject-errors
|
|
12
|
-
return Promise.reject(reason ?? new Error("Web search cancelled"));
|
|
13
|
-
}
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
const cleanup = () => signal?.removeEventListener("abort", abort);
|
|
16
|
-
const timeout = setTimeout(() => {
|
|
17
|
-
cleanup();
|
|
18
|
-
resolve();
|
|
19
|
-
}, ms);
|
|
20
|
-
const abort = () => {
|
|
21
|
-
clearTimeout(timeout);
|
|
22
|
-
cleanup();
|
|
23
|
-
const reason = signal?.reason;
|
|
24
|
-
// A caller-owned abort reason may be non-Error; preserve the original reason.
|
|
25
|
-
// oxlint-disable-next-line typescript/prefer-promise-reject-errors
|
|
26
|
-
reject(reason ?? new Error("Web search cancelled"));
|
|
27
|
-
};
|
|
28
|
-
signal?.addEventListener("abort", abort, { once: true });
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
export class WebSearchRequestGate {
|
|
32
|
-
lastRequestStartedAt = 0;
|
|
33
|
-
tail = Promise.resolve();
|
|
34
|
-
run(signal, task) {
|
|
35
|
-
const runTask = async () => {
|
|
36
|
-
const elapsedMs = this.lastRequestStartedAt === 0
|
|
37
|
-
? WEB_SEARCH_MIN_REQUEST_INTERVAL_MS
|
|
38
|
-
: Date.now() - this.lastRequestStartedAt;
|
|
39
|
-
const waitMs = Math.max(0, WEB_SEARCH_MIN_REQUEST_INTERVAL_MS - elapsedMs);
|
|
40
|
-
if (waitMs > 0) {
|
|
41
|
-
await sleepWithAbort(waitMs, signal);
|
|
42
|
-
}
|
|
43
|
-
if (signal?.aborted === true) {
|
|
44
|
-
signal.throwIfAborted();
|
|
45
|
-
}
|
|
46
|
-
this.lastRequestStartedAt = Date.now();
|
|
47
|
-
return task();
|
|
48
|
-
};
|
|
49
|
-
const result = this.tail.then(runTask, runTask);
|
|
50
|
-
this.tail = result.catch(() => {
|
|
51
|
-
/* Failed requests release the queue; callers retain the original rejection. */
|
|
52
|
-
});
|
|
53
|
-
return result;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function formatSearchHttpError(options) {
|
|
57
|
-
const { provider, status } = options;
|
|
58
|
-
const providerLabel = getProviderLabel(provider);
|
|
59
|
-
if (status === 429) {
|
|
60
|
-
return `${providerLabel} search rate limit exceeded (HTTP 429). Do not issue parallel or repeated agent_browser_web_search calls; use one high-signal query, inspect those results, then wait before retrying or ask the user to adjust their ${providerLabel} API plan/limits.`;
|
|
61
|
-
}
|
|
62
|
-
if (status === 401 || status === 403) {
|
|
63
|
-
return `${providerLabel} search failed with HTTP ${status}: Check your API credential and permissions.`;
|
|
64
|
-
}
|
|
65
|
-
if (status >= 500) {
|
|
66
|
-
return `${providerLabel} search failed with HTTP ${status}: Provider unavailable; retry later.`;
|
|
67
|
-
}
|
|
68
|
-
return `${providerLabel} search failed with HTTP ${status}: Request rejected; check the search parameters.`;
|
|
69
|
-
}
|
|
70
|
-
export async function fetchSearchJson(options) {
|
|
71
|
-
if (options.signal?.aborted === true) {
|
|
72
|
-
options.signal.throwIfAborted();
|
|
73
|
-
}
|
|
74
|
-
const controller = new AbortController();
|
|
75
|
-
const timeout = setTimeout(() => controller.abort(new Error(options.timeoutMessage)), options.timeoutMs);
|
|
76
|
-
const abort = () => controller.abort(options.signal?.reason ?? new Error(options.cancelMessage));
|
|
77
|
-
options.signal?.addEventListener("abort", abort, { once: true });
|
|
78
|
-
try {
|
|
79
|
-
const response = await fetch(options.request, { ...options.init, signal: controller.signal });
|
|
80
|
-
if (!response.ok) {
|
|
81
|
-
await response.body?.cancel().catch(() => {
|
|
82
|
-
// Disposal errors must not replace the source-free HTTP diagnostic.
|
|
83
|
-
});
|
|
84
|
-
throw new Error(formatSearchHttpError({
|
|
85
|
-
provider: options.provider,
|
|
86
|
-
status: response.status,
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
const text = await response.text();
|
|
90
|
-
try {
|
|
91
|
-
return JSON.parse(text);
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// Parser messages and causes can include partial credentials from the response body.
|
|
95
|
-
throw new Error(options.invalidJsonMessage);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
finally {
|
|
99
|
-
clearTimeout(timeout);
|
|
100
|
-
options.signal?.removeEventListener("abort", abort);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import { isRecord } from "./parsing.js";
|
|
2
|
-
const HTML_ENTITY_REPLACEMENTS = {
|
|
3
|
-
amp: "&",
|
|
4
|
-
apos: "'",
|
|
5
|
-
gt: ">",
|
|
6
|
-
lt: "<",
|
|
7
|
-
nbsp: " ",
|
|
8
|
-
quot: '"',
|
|
9
|
-
};
|
|
10
|
-
const HTML_TAG_NAMES_TO_STRIP = new Set([
|
|
11
|
-
"a",
|
|
12
|
-
"abbr",
|
|
13
|
-
"address",
|
|
14
|
-
"article",
|
|
15
|
-
"aside",
|
|
16
|
-
"audio",
|
|
17
|
-
"b",
|
|
18
|
-
"base",
|
|
19
|
-
"blockquote",
|
|
20
|
-
"body",
|
|
21
|
-
"br",
|
|
22
|
-
"button",
|
|
23
|
-
"canvas",
|
|
24
|
-
"code",
|
|
25
|
-
"div",
|
|
26
|
-
"em",
|
|
27
|
-
"embed",
|
|
28
|
-
"footer",
|
|
29
|
-
"form",
|
|
30
|
-
"h1",
|
|
31
|
-
"h2",
|
|
32
|
-
"h3",
|
|
33
|
-
"h4",
|
|
34
|
-
"h5",
|
|
35
|
-
"h6",
|
|
36
|
-
"head",
|
|
37
|
-
"header",
|
|
38
|
-
"html",
|
|
39
|
-
"i",
|
|
40
|
-
"iframe",
|
|
41
|
-
"img",
|
|
42
|
-
"input",
|
|
43
|
-
"li",
|
|
44
|
-
"link",
|
|
45
|
-
"main",
|
|
46
|
-
"mark",
|
|
47
|
-
"math",
|
|
48
|
-
"meta",
|
|
49
|
-
"nav",
|
|
50
|
-
"object",
|
|
51
|
-
"ol",
|
|
52
|
-
"option",
|
|
53
|
-
"p",
|
|
54
|
-
"pre",
|
|
55
|
-
"script",
|
|
56
|
-
"section",
|
|
57
|
-
"select",
|
|
58
|
-
"source",
|
|
59
|
-
"span",
|
|
60
|
-
"strong",
|
|
61
|
-
"style",
|
|
62
|
-
"svg",
|
|
63
|
-
"table",
|
|
64
|
-
"tbody",
|
|
65
|
-
"td",
|
|
66
|
-
"textarea",
|
|
67
|
-
"tfoot",
|
|
68
|
-
"th",
|
|
69
|
-
"thead",
|
|
70
|
-
"tr",
|
|
71
|
-
"u",
|
|
72
|
-
"ul",
|
|
73
|
-
"video",
|
|
74
|
-
]);
|
|
75
|
-
function decodeHtmlEntity(entity) {
|
|
76
|
-
const named = HTML_ENTITY_REPLACEMENTS[entity.toLowerCase()];
|
|
77
|
-
if (named !== undefined) {
|
|
78
|
-
return named;
|
|
79
|
-
}
|
|
80
|
-
const decimalMatch = /^#(\d+)$/.exec(entity);
|
|
81
|
-
const hexMatch = /^#x([0-9a-f]+)$/i.exec(entity);
|
|
82
|
-
let codePoint;
|
|
83
|
-
if (decimalMatch) {
|
|
84
|
-
codePoint = Number.parseInt(decimalMatch[1], 10);
|
|
85
|
-
}
|
|
86
|
-
else if (hexMatch) {
|
|
87
|
-
codePoint = Number.parseInt(hexMatch[1], 16);
|
|
88
|
-
}
|
|
89
|
-
if (codePoint === undefined || !Number.isFinite(codePoint)) {
|
|
90
|
-
return `&${entity};`;
|
|
91
|
-
}
|
|
92
|
-
try {
|
|
93
|
-
return String.fromCodePoint(codePoint);
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
return `&${entity};`;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export function decodeHtmlEntities(value) {
|
|
100
|
-
return value.replace(/&([a-z][a-z0-9]+|#\d+|#x[0-9a-f]+);/gi, (_match, entity) => decodeHtmlEntity(entity));
|
|
101
|
-
}
|
|
102
|
-
function stripDecodedHtmlTags(value) {
|
|
103
|
-
return value
|
|
104
|
-
.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1>/gi, " ")
|
|
105
|
-
.replace(/<\/?([a-z][a-z0-9-]*)(\s[^>]*)?>/gi, (match, tagName, attributes) => {
|
|
106
|
-
if ((attributes !== undefined && attributes.length > 0) ||
|
|
107
|
-
match.startsWith("</") ||
|
|
108
|
-
HTML_TAG_NAMES_TO_STRIP.has(tagName.toLowerCase())) {
|
|
109
|
-
return " ";
|
|
110
|
-
}
|
|
111
|
-
return match;
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
export function cleanSearchText(value, maxLength = 500) {
|
|
115
|
-
if (typeof value !== "string") {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
const cleaned = stripDecodedHtmlTags(decodeHtmlEntities(value.replace(/<[^>]*>/g, " ")))
|
|
119
|
-
.replace(/\s+/g, " ")
|
|
120
|
-
.trim();
|
|
121
|
-
if (cleaned.length === 0) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
if (cleaned.length <= maxLength) {
|
|
125
|
-
return cleaned;
|
|
126
|
-
}
|
|
127
|
-
return `${cleaned.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;
|
|
128
|
-
}
|
|
129
|
-
function normalizeSearchUrl(value) {
|
|
130
|
-
if (typeof value !== "string") {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
const url = new URL(value);
|
|
135
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
return url.toString();
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
function getHostname(url) {
|
|
145
|
-
try {
|
|
146
|
-
return new URL(url).hostname;
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
function normalizeHighlightList(value) {
|
|
153
|
-
if (!Array.isArray(value)) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const highlights = value
|
|
157
|
-
.map((entry) => cleanSearchText(entry, 320))
|
|
158
|
-
.filter((entry) => entry !== undefined)
|
|
159
|
-
.slice(0, 3);
|
|
160
|
-
return highlights.length > 0 ? highlights : undefined;
|
|
161
|
-
}
|
|
162
|
-
export function normalizeBraveSearchResult(result) {
|
|
163
|
-
const title = cleanSearchText(result.title, 180);
|
|
164
|
-
const url = normalizeSearchUrl(result.url);
|
|
165
|
-
if (title === undefined || url === undefined) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
const pageDate = cleanSearchText(result.page_age, 80);
|
|
169
|
-
return {
|
|
170
|
-
title,
|
|
171
|
-
url,
|
|
172
|
-
description: cleanSearchText(result.description, 320),
|
|
173
|
-
source: cleanSearchText(result.profile?.name, 120) ?? cleanSearchText(result.meta_url?.hostname, 120),
|
|
174
|
-
age: cleanSearchText(result.age, 80),
|
|
175
|
-
...(pageDate !== undefined ? { pageDate } : {}),
|
|
176
|
-
language: cleanSearchText(result.language, 40),
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
export function normalizeExaSearchResult(result) {
|
|
180
|
-
const title = cleanSearchText(result.title, 180);
|
|
181
|
-
const url = normalizeSearchUrl(result.url);
|
|
182
|
-
if (title === undefined || url === undefined) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
const highlights = normalizeHighlightList(result.highlights);
|
|
186
|
-
const pageDate = cleanSearchText(result.publishedDate, 80);
|
|
187
|
-
return {
|
|
188
|
-
title,
|
|
189
|
-
url,
|
|
190
|
-
description: cleanSearchText(result.summary, 320) ?? highlights?.[0] ?? cleanSearchText(result.text, 320),
|
|
191
|
-
highlights,
|
|
192
|
-
source: cleanSearchText(result.author, 120) ?? cleanSearchText(getHostname(url), 120),
|
|
193
|
-
...(pageDate !== undefined ? { pageDate } : {}),
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
export function getProviderLabel(provider) {
|
|
197
|
-
return provider === "exa" ? "Exa" : "Brave";
|
|
198
|
-
}
|
|
199
|
-
function formatResultLines(result, index, provider) {
|
|
200
|
-
const lines = [`${index + 1}. ${result.title}`, ` URL: ${result.url}`];
|
|
201
|
-
if (result.source !== undefined) {
|
|
202
|
-
lines.push(` Source: ${result.source}`);
|
|
203
|
-
}
|
|
204
|
-
if (result.pageDate !== undefined) {
|
|
205
|
-
lines.push(` ${provider === "exa" ? "Published" : "Page date"}: ${result.pageDate}`);
|
|
206
|
-
}
|
|
207
|
-
if (result.age !== undefined) {
|
|
208
|
-
lines.push(` Age: ${result.age}`);
|
|
209
|
-
}
|
|
210
|
-
if (result.description !== undefined) {
|
|
211
|
-
lines.push(` Summary: ${result.description}`);
|
|
212
|
-
}
|
|
213
|
-
if (result.highlights && result.highlights.length > 1) {
|
|
214
|
-
lines.push(" Highlights:", ...result.highlights.map((highlight) => ` - ${highlight}`));
|
|
215
|
-
}
|
|
216
|
-
lines.push("");
|
|
217
|
-
return lines;
|
|
218
|
-
}
|
|
219
|
-
export function formatSearchResults(provider, query, results) {
|
|
220
|
-
const providerLabel = getProviderLabel(provider);
|
|
221
|
-
if (results.length === 0) {
|
|
222
|
-
return `No ${providerLabel} web results found for: ${query}`;
|
|
223
|
-
}
|
|
224
|
-
return [
|
|
225
|
-
`${providerLabel} web search results for: ${query}`,
|
|
226
|
-
"",
|
|
227
|
-
...results.flatMap((result, index) => formatResultLines(result, index, provider)),
|
|
228
|
-
]
|
|
229
|
-
.join("\n")
|
|
230
|
-
.trimEnd();
|
|
231
|
-
}
|
|
232
|
-
export function dedupeSearchResults(results) {
|
|
233
|
-
const seen = new Set();
|
|
234
|
-
return results.filter((result) => {
|
|
235
|
-
if (seen.has(result.url)) {
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
seen.add(result.url);
|
|
239
|
-
return true;
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
function isJsonObject(value) {
|
|
243
|
-
return isRecord(value) && !Array.isArray(value);
|
|
244
|
-
}
|
|
245
|
-
function isOptionalRecord(value) {
|
|
246
|
-
return value === undefined || value === null || isJsonObject(value);
|
|
247
|
-
}
|
|
248
|
-
function isBraveSearchResult(value) {
|
|
249
|
-
return isJsonObject(value) && isOptionalRecord(value.profile) && isOptionalRecord(value.meta_url);
|
|
250
|
-
}
|
|
251
|
-
function isBraveSearchResponse(value) {
|
|
252
|
-
if (!isJsonObject(value) || !isOptionalRecord(value.query) || !isOptionalRecord(value.web)) {
|
|
253
|
-
return false;
|
|
254
|
-
}
|
|
255
|
-
const results = value.web?.results;
|
|
256
|
-
return (results === undefined ||
|
|
257
|
-
results === null ||
|
|
258
|
-
(Array.isArray(results) && results.every(isBraveSearchResult)));
|
|
259
|
-
}
|
|
260
|
-
function isExaSearchResponse(value) {
|
|
261
|
-
if (!isJsonObject(value)) {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
const results = value.results;
|
|
265
|
-
return (results === undefined ||
|
|
266
|
-
results === null ||
|
|
267
|
-
(Array.isArray(results) && results.every((result) => isJsonObject(result))));
|
|
268
|
-
}
|
|
269
|
-
/** Validate every consumed container while retaining extension fields and loose leaf values. */
|
|
270
|
-
export function parseBraveSearchResponse(value) {
|
|
271
|
-
if (!isBraveSearchResponse(value)) {
|
|
272
|
-
throw new Error("Brave search response has invalid result structure");
|
|
273
|
-
}
|
|
274
|
-
return value;
|
|
275
|
-
}
|
|
276
|
-
export function parseExaSearchResponse(value) {
|
|
277
|
-
if (!isExaSearchResponse(value)) {
|
|
278
|
-
throw new Error("Exa search response has invalid result structure");
|
|
279
|
-
}
|
|
280
|
-
return value;
|
|
281
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { JsonSchema as Type } from "./json-schema.js";
|
|
2
|
-
import { StringEnum } from "./string-enum-schema.js";
|
|
3
|
-
import { DEFAULT_WEB_SEARCH_PROVIDER, EXA_SEARCH_TYPES, WEB_SEARCH_PROVIDERS, } from "./config.js";
|
|
4
|
-
export const DEFAULT_SEARCH_RESULT_COUNT = 5;
|
|
5
|
-
export const MAX_SEARCH_RESULT_COUNT = 10;
|
|
6
|
-
const WEB_SEARCH_PROVIDER_PARAM_VALUES = ["auto", ...WEB_SEARCH_PROVIDERS];
|
|
7
|
-
const EXA_SEARCH_CATEGORIES = [
|
|
8
|
-
"company",
|
|
9
|
-
"people",
|
|
10
|
-
"publication",
|
|
11
|
-
"news",
|
|
12
|
-
"personal site",
|
|
13
|
-
"financial report",
|
|
14
|
-
];
|
|
15
|
-
const MAX_EXA_DOMAIN_FILTERS = 20;
|
|
16
|
-
const MAX_EXA_ADDITIONAL_QUERIES = 10;
|
|
17
|
-
function createExaFilterProperties() {
|
|
18
|
-
return {
|
|
19
|
-
includeDomains: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
|
|
20
|
-
minItems: 1,
|
|
21
|
-
maxItems: MAX_EXA_DOMAIN_FILTERS,
|
|
22
|
-
description: `Exa only. Limit results to 1–${MAX_EXA_DOMAIN_FILTERS} hostnames, path prefixes (exa.ai/docs), or wildcard subdomains (*.substack.com).`,
|
|
23
|
-
})),
|
|
24
|
-
excludeDomains: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
|
|
25
|
-
minItems: 1,
|
|
26
|
-
maxItems: MAX_EXA_DOMAIN_FILTERS,
|
|
27
|
-
description: `Exa only. Exclude 1–${MAX_EXA_DOMAIN_FILTERS} hostnames, path prefixes, or wildcard subdomains. Not compatible with category company or people.`,
|
|
28
|
-
})),
|
|
29
|
-
category: Type.Optional(StringEnum(EXA_SEARCH_CATEGORIES, {
|
|
30
|
-
description: "Exa-only result category. company and people cannot be combined with freshness or excludeDomains.",
|
|
31
|
-
})),
|
|
32
|
-
additionalQueries: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
|
|
33
|
-
minItems: 1,
|
|
34
|
-
maxItems: MAX_EXA_ADDITIONAL_QUERIES,
|
|
35
|
-
description: `Exa only. Add 1–${MAX_EXA_ADDITIONAL_QUERIES} query variations when the effective searchType is deep-lite, deep, or deep-reasoning.`,
|
|
36
|
-
})),
|
|
37
|
-
highlightsDynamic: Type.Optional(Type.Boolean({
|
|
38
|
-
description: "Exa-only research preview. Allocate one highlight budget across all results; the wrapper sends the required Exa-Beta header. Regular per-page highlights remain the default.",
|
|
39
|
-
})),
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
export function createAgentBrowserWebSearchParamsSchema() {
|
|
43
|
-
return Type.Object({
|
|
44
|
-
query: Type.String({
|
|
45
|
-
minLength: 1,
|
|
46
|
-
description: "Search query to run with the configured Exa or Brave web search provider.",
|
|
47
|
-
}),
|
|
48
|
-
provider: Type.Optional(StringEnum(WEB_SEARCH_PROVIDER_PARAM_VALUES, {
|
|
49
|
-
description: `Optional provider override. auto uses configured keys and preferredProvider; when both Exa and Brave are available, the default preferred provider is ${DEFAULT_WEB_SEARCH_PROVIDER}.`,
|
|
50
|
-
})),
|
|
51
|
-
searchType: Type.Optional(StringEnum(EXA_SEARCH_TYPES, {
|
|
52
|
-
description: "Exa mode; omitted uses webSearch.defaultSearchType, then auto. instant (~250ms) is only for trivial lookups; fast (~450ms) favors latency; auto (~1s) is balanced. Pass searchType: deep-lite (~4s) for research before implementation unless config already defaults it; do not assume auto is deep enough. deep (4–15s) handles hard multi-source research; deep-reasoning (12–40s) is only for the hardest work. Brave ignores this field.",
|
|
53
|
-
})),
|
|
54
|
-
...createExaFilterProperties(),
|
|
55
|
-
count: Type.Optional(Type.Integer({
|
|
56
|
-
minimum: 1,
|
|
57
|
-
maximum: MAX_SEARCH_RESULT_COUNT,
|
|
58
|
-
description: `Number of web results to return. Defaults to ${DEFAULT_SEARCH_RESULT_COUNT}; max ${MAX_SEARCH_RESULT_COUNT}.`,
|
|
59
|
-
})),
|
|
60
|
-
offset: Type.Optional(Type.Integer({
|
|
61
|
-
minimum: 0,
|
|
62
|
-
maximum: 9,
|
|
63
|
-
description: "Zero-based result offset for pagination. Defaults to 0.",
|
|
64
|
-
})),
|
|
65
|
-
country: Type.Optional(Type.String({
|
|
66
|
-
pattern: "^[A-Za-z]{2}$",
|
|
67
|
-
description: "Optional 2-letter country code, such as US or GB.",
|
|
68
|
-
})),
|
|
69
|
-
searchLang: Type.Optional(Type.String({
|
|
70
|
-
minLength: 2,
|
|
71
|
-
maxLength: 8,
|
|
72
|
-
description: "Optional Brave search language code, such as en or en-US.",
|
|
73
|
-
})),
|
|
74
|
-
safesearch: Type.Optional(StringEnum(["off", "moderate", "strict"], {
|
|
75
|
-
description: "Optional search safety setting. Brave forwards this as safesearch; Exa maps moderate/strict to moderation=true.",
|
|
76
|
-
})),
|
|
77
|
-
freshness: Type.Optional(StringEnum(["pd", "pw", "pm", "py"], {
|
|
78
|
-
description: "Optional freshness window: pd=past day, pw=past week, pm=past month, py=past year.",
|
|
79
|
-
})),
|
|
80
|
-
}, { additionalProperties: false });
|
|
81
|
-
}
|
|
82
|
-
export const AgentBrowserWebSearchParams = createAgentBrowserWebSearchParamsSchema();
|