agent-web-interface 4.4.0 → 4.5.1
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/README.md +35 -34
- package/dist/src/browser/browser-session-config.d.ts +33 -0
- package/dist/src/browser/browser-session-config.d.ts.map +1 -0
- package/dist/src/browser/browser-session-config.js +25 -0
- package/dist/src/browser/browser-session-config.js.map +1 -0
- package/dist/src/browser/ensure-browser.d.ts +12 -27
- package/dist/src/browser/ensure-browser.d.ts.map +1 -1
- package/dist/src/browser/ensure-browser.js +131 -39
- package/dist/src/browser/ensure-browser.js.map +1 -1
- package/dist/src/browser/index.d.ts +2 -1
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/index.js +1 -0
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/page-network-recorder.d.ts +95 -0
- package/dist/src/browser/page-network-recorder.d.ts.map +1 -0
- package/dist/src/browser/page-network-recorder.js +306 -0
- package/dist/src/browser/page-network-recorder.js.map +1 -0
- package/dist/src/browser/session-manager.d.ts +20 -0
- package/dist/src/browser/session-manager.d.ts.map +1 -1
- package/dist/src/browser/session-manager.js +169 -20
- package/dist/src/browser/session-manager.js.map +1 -1
- package/dist/src/browser/session-manager.types.d.ts +14 -2
- package/dist/src/browser/session-manager.types.d.ts.map +1 -1
- package/dist/src/browser/session-manager.types.js +5 -1
- package/dist/src/browser/session-manager.types.js.map +1 -1
- package/dist/src/cli/args.d.ts +12 -18
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +35 -40
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/form/constraint-extraction.d.ts +5 -0
- package/dist/src/form/constraint-extraction.d.ts.map +1 -1
- package/dist/src/form/constraint-extraction.js +13 -6
- package/dist/src/form/constraint-extraction.js.map +1 -1
- package/dist/src/form/field-extractor.d.ts.map +1 -1
- package/dist/src/form/field-extractor.js +14 -7
- package/dist/src/form/field-extractor.js.map +1 -1
- package/dist/src/form/form-state.d.ts.map +1 -1
- package/dist/src/form/form-state.js +16 -4
- package/dist/src/form/form-state.js.map +1 -1
- package/dist/src/gateway/http-gateway.d.ts +56 -0
- package/dist/src/gateway/http-gateway.d.ts.map +1 -0
- package/dist/src/gateway/http-gateway.js +229 -0
- package/dist/src/gateway/http-gateway.js.map +1 -0
- package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
- package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
- package/dist/src/gateway/json-rpc-errors.js +11 -0
- package/dist/src/gateway/json-rpc-errors.js.map +1 -0
- package/dist/src/gateway/session-router.d.ts +80 -0
- package/dist/src/gateway/session-router.d.ts.map +1 -0
- package/dist/src/gateway/session-router.js +177 -0
- package/dist/src/gateway/session-router.js.map +1 -0
- package/dist/src/http-entry.d.ts +20 -0
- package/dist/src/http-entry.d.ts.map +1 -0
- package/dist/src/http-entry.js +112 -0
- package/dist/src/http-entry.js.map +1 -0
- package/dist/src/index.d.ts +1 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -232
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/text-utils.d.ts +0 -24
- package/dist/src/lib/text-utils.d.ts.map +1 -1
- package/dist/src/lib/text-utils.js +2 -38
- package/dist/src/lib/text-utils.js.map +1 -1
- package/dist/src/observation/eid-linker.d.ts.map +1 -1
- package/dist/src/observation/eid-linker.js +1 -21
- package/dist/src/observation/eid-linker.js.map +1 -1
- package/dist/src/server/index.d.ts +0 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +0 -1
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/mcp-server.d.ts +6 -2
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +3 -91
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/server-config.d.ts +4 -20
- package/dist/src/server/server-config.d.ts.map +1 -1
- package/dist/src/server/server-config.js +6 -50
- package/dist/src/server/server-config.js.map +1 -1
- package/dist/src/server/tool-registrar.types.d.ts +25 -0
- package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
- package/dist/src/server/tool-registrar.types.js +10 -0
- package/dist/src/server/tool-registrar.types.js.map +1 -0
- package/dist/src/server/tool-result-handler.d.ts +61 -0
- package/dist/src/server/tool-result-handler.d.ts.map +1 -0
- package/dist/src/server/tool-result-handler.js +155 -0
- package/dist/src/server/tool-result-handler.js.map +1 -0
- package/dist/src/session/session-controller.d.ts +124 -0
- package/dist/src/session/session-controller.d.ts.map +1 -0
- package/dist/src/session/session-controller.js +276 -0
- package/dist/src/session/session-controller.js.map +1 -0
- package/dist/src/shared/services/index.d.ts +0 -2
- package/dist/src/shared/services/index.d.ts.map +1 -1
- package/dist/src/shared/services/index.js +0 -2
- package/dist/src/shared/services/index.js.map +1 -1
- package/dist/src/shared/version.d.ts +10 -0
- package/dist/src/shared/version.d.ts.map +1 -0
- package/dist/src/shared/version.js +32 -0
- package/dist/src/shared/version.js.map +1 -0
- package/dist/src/snapshot/element-resolver.d.ts +3 -2
- package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
- package/dist/src/snapshot/element-resolver.js +83 -8
- package/dist/src/snapshot/element-resolver.js.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
- package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
- package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
- package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
- package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.js +22 -2
- package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/types.d.ts +6 -0
- package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/types.js.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.js +15 -2
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
- package/dist/src/snapshot/snapshot.types.d.ts +10 -1
- package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot.types.js.map +1 -1
- package/dist/src/state/actionables-filter.d.ts.map +1 -1
- package/dist/src/state/actionables-filter.js +7 -3
- package/dist/src/state/actionables-filter.js.map +1 -1
- package/dist/src/state/atoms-extractor.d.ts.map +1 -1
- package/dist/src/state/atoms-extractor.js +3 -23
- package/dist/src/state/atoms-extractor.js.map +1 -1
- package/dist/src/state/diff-engine.d.ts.map +1 -1
- package/dist/src/state/diff-engine.js +6 -33
- package/dist/src/state/diff-engine.js.map +1 -1
- package/dist/src/state/element-identity.d.ts +3 -6
- package/dist/src/state/element-identity.d.ts.map +1 -1
- package/dist/src/state/element-identity.js +10 -7
- package/dist/src/state/element-identity.js.map +1 -1
- package/dist/src/state/element-ref.types.d.ts +5 -27
- package/dist/src/state/element-ref.types.d.ts.map +1 -1
- package/dist/src/state/state-manager.d.ts.map +1 -1
- package/dist/src/state/state-manager.js +3 -1
- package/dist/src/state/state-manager.js.map +1 -1
- package/dist/src/state/state-renderer.d.ts.map +1 -1
- package/dist/src/state/state-renderer.js +3 -1
- package/dist/src/state/state-renderer.js.map +1 -1
- package/dist/src/state/types.d.ts +2 -1
- package/dist/src/state/types.d.ts.map +1 -1
- package/dist/src/state/url-sanitization.d.ts +1 -1
- package/dist/src/state/url-sanitization.d.ts.map +1 -1
- package/dist/src/state/url-sanitization.js +29 -13
- package/dist/src/state/url-sanitization.js.map +1 -1
- package/dist/src/tools/action-context.d.ts +6 -11
- package/dist/src/tools/action-context.d.ts.map +1 -1
- package/dist/src/tools/action-context.js +10 -19
- package/dist/src/tools/action-context.js.map +1 -1
- package/dist/src/tools/action-stabilization.d.ts.map +1 -1
- package/dist/src/tools/action-stabilization.js +6 -0
- package/dist/src/tools/action-stabilization.js.map +1 -1
- package/dist/src/tools/browser-tools.d.ts +4 -2
- package/dist/src/tools/browser-tools.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.js +7 -3
- package/dist/src/tools/browser-tools.js.map +1 -1
- package/dist/src/tools/canvas-tools.d.ts +2 -1
- package/dist/src/tools/canvas-tools.d.ts.map +1 -1
- package/dist/src/tools/canvas-tools.js +5 -7
- package/dist/src/tools/canvas-tools.js.map +1 -1
- package/dist/src/tools/errors.d.ts +2 -34
- package/dist/src/tools/errors.d.ts.map +1 -1
- package/dist/src/tools/errors.js +1 -44
- package/dist/src/tools/errors.js.map +1 -1
- package/dist/src/tools/execute-action.d.ts +4 -3
- package/dist/src/tools/execute-action.d.ts.map +1 -1
- package/dist/src/tools/execute-action.js +32 -23
- package/dist/src/tools/execute-action.js.map +1 -1
- package/dist/src/tools/form-tools.d.ts +3 -8
- package/dist/src/tools/form-tools.d.ts.map +1 -1
- package/dist/src/tools/form-tools.js +38 -18
- package/dist/src/tools/form-tools.js.map +1 -1
- package/dist/src/tools/index.d.ts +8 -6
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +10 -10
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/interaction-tools.d.ts +6 -5
- package/dist/src/tools/interaction-tools.d.ts.map +1 -1
- package/dist/src/tools/interaction-tools.js +29 -32
- package/dist/src/tools/interaction-tools.js.map +1 -1
- package/dist/src/tools/navigation-tools.d.ts +7 -13
- package/dist/src/tools/navigation-tools.d.ts.map +1 -1
- package/dist/src/tools/navigation-tools.js +57 -59
- package/dist/src/tools/navigation-tools.js.map +1 -1
- package/dist/src/tools/network-tools.d.ts +10 -0
- package/dist/src/tools/network-tools.d.ts.map +1 -0
- package/dist/src/tools/network-tools.js +117 -0
- package/dist/src/tools/network-tools.js.map +1 -0
- package/dist/src/tools/observation-tools.d.ts +6 -5
- package/dist/src/tools/observation-tools.d.ts.map +1 -1
- package/dist/src/tools/observation-tools.js +30 -34
- package/dist/src/tools/observation-tools.js.map +1 -1
- package/dist/src/tools/readability-tools.d.ts +16 -0
- package/dist/src/tools/readability-tools.d.ts.map +1 -0
- package/dist/src/tools/readability-tools.js +45 -0
- package/dist/src/tools/readability-tools.js.map +1 -0
- package/dist/src/tools/response-builder.d.ts +20 -32
- package/dist/src/tools/response-builder.d.ts.map +1 -1
- package/dist/src/tools/response-builder.js +31 -47
- package/dist/src/tools/response-builder.js.map +1 -1
- package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
- package/dist/src/tools/stale-element-retry.js +37 -2
- package/dist/src/tools/stale-element-retry.js.map +1 -1
- package/dist/src/tools/tool-context.d.ts +4 -36
- package/dist/src/tools/tool-context.d.ts.map +1 -1
- package/dist/src/tools/tool-context.js +6 -75
- package/dist/src/tools/tool-context.js.map +1 -1
- package/dist/src/tools/tool-context.types.d.ts +147 -0
- package/dist/src/tools/tool-context.types.d.ts.map +1 -0
- package/dist/src/tools/tool-context.types.js +11 -0
- package/dist/src/tools/tool-context.types.js.map +1 -0
- package/dist/src/tools/tool-registration.d.ts +25 -0
- package/dist/src/tools/tool-registration.d.ts.map +1 -0
- package/dist/src/tools/tool-registration.js +195 -0
- package/dist/src/tools/tool-registration.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +178 -1947
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js +130 -302
- package/dist/src/tools/tool-schemas.js.map +1 -1
- package/dist/src/tools/viewport-tools.d.ts +4 -3
- package/dist/src/tools/viewport-tools.d.ts.map +1 -1
- package/dist/src/tools/viewport-tools.js +17 -21
- package/dist/src/tools/viewport-tools.js.map +1 -1
- package/dist/src/worker/chrome-worker-process.d.ts +4 -0
- package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
- package/dist/src/worker/chrome-worker-process.js +1 -1
- package/dist/src/worker/chrome-worker-process.js.map +1 -1
- package/dist/vitest.config.js +1 -1
- package/dist/vitest.config.js.map +1 -1
- package/dist/vitest.integration.config.d.ts +3 -0
- package/dist/vitest.integration.config.d.ts.map +1 -0
- package/dist/vitest.integration.config.js +11 -0
- package/dist/vitest.integration.config.js.map +1 -0
- package/package.json +20 -5
- package/dist/src/factpack/action-selector.d.ts +0 -36
- package/dist/src/factpack/action-selector.d.ts.map +0 -1
- package/dist/src/factpack/action-selector.js +0 -367
- package/dist/src/factpack/action-selector.js.map +0 -1
- package/dist/src/factpack/dialog-detector.d.ts +0 -19
- package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
- package/dist/src/factpack/dialog-detector.js +0 -354
- package/dist/src/factpack/dialog-detector.js.map +0 -1
- package/dist/src/factpack/form-detector.d.ts +0 -28
- package/dist/src/factpack/form-detector.d.ts.map +0 -1
- package/dist/src/factpack/form-detector.js +0 -555
- package/dist/src/factpack/form-detector.js.map +0 -1
- package/dist/src/factpack/index.d.ts +0 -32
- package/dist/src/factpack/index.d.ts.map +0 -1
- package/dist/src/factpack/index.js +0 -73
- package/dist/src/factpack/index.js.map +0 -1
- package/dist/src/factpack/page-classifier.d.ts +0 -22
- package/dist/src/factpack/page-classifier.d.ts.map +0 -1
- package/dist/src/factpack/page-classifier.js +0 -526
- package/dist/src/factpack/page-classifier.js.map +0 -1
- package/dist/src/factpack/types.d.ts +0 -307
- package/dist/src/factpack/types.d.ts.map +0 -1
- package/dist/src/factpack/types.js +0 -12
- package/dist/src/factpack/types.js.map +0 -1
- package/dist/src/lib/constants.d.ts +0 -27
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -63
- package/dist/src/lib/constants.js.map +0 -1
- package/dist/src/lib/index.d.ts +0 -12
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -17
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/regions.d.ts +0 -29
- package/dist/src/lib/regions.d.ts.map +0 -1
- package/dist/src/lib/regions.js +0 -93
- package/dist/src/lib/regions.js.map +0 -1
- package/dist/src/lib/scoring.d.ts +0 -47
- package/dist/src/lib/scoring.d.ts.map +0 -1
- package/dist/src/lib/scoring.js +0 -79
- package/dist/src/lib/scoring.js.map +0 -1
- package/dist/src/lib/selectors.d.ts +0 -42
- package/dist/src/lib/selectors.d.ts.map +0 -1
- package/dist/src/lib/selectors.js +0 -138
- package/dist/src/lib/selectors.js.map +0 -1
- package/dist/src/renderer/budget-manager.d.ts +0 -46
- package/dist/src/renderer/budget-manager.d.ts.map +0 -1
- package/dist/src/renderer/budget-manager.js +0 -133
- package/dist/src/renderer/budget-manager.js.map +0 -1
- package/dist/src/renderer/constants.d.ts +0 -38
- package/dist/src/renderer/constants.d.ts.map +0 -1
- package/dist/src/renderer/constants.js +0 -29
- package/dist/src/renderer/constants.js.map +0 -1
- package/dist/src/renderer/index.d.ts +0 -12
- package/dist/src/renderer/index.d.ts.map +0 -1
- package/dist/src/renderer/index.js +0 -16
- package/dist/src/renderer/index.js.map +0 -1
- package/dist/src/renderer/section-renderers.d.ts +0 -42
- package/dist/src/renderer/section-renderers.d.ts.map +0 -1
- package/dist/src/renderer/section-renderers.js +0 -252
- package/dist/src/renderer/section-renderers.js.map +0 -1
- package/dist/src/renderer/token-counter.d.ts +0 -45
- package/dist/src/renderer/token-counter.d.ts.map +0 -1
- package/dist/src/renderer/token-counter.js +0 -65
- package/dist/src/renderer/token-counter.js.map +0 -1
- package/dist/src/renderer/types.d.ts +0 -71
- package/dist/src/renderer/types.d.ts.map +0 -1
- package/dist/src/renderer/types.js +0 -7
- package/dist/src/renderer/types.js.map +0 -1
- package/dist/src/renderer/xml-renderer.d.ts +0 -42
- package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
- package/dist/src/renderer/xml-renderer.js +0 -103
- package/dist/src/renderer/xml-renderer.js.map +0 -1
- package/dist/src/server/session-store.d.ts +0 -163
- package/dist/src/server/session-store.d.ts.map +0 -1
- package/dist/src/server/session-store.js +0 -248
- package/dist/src/server/session-store.js.map +0 -1
- package/dist/src/session/session-worker-binding.d.ts +0 -57
- package/dist/src/session/session-worker-binding.d.ts.map +0 -1
- package/dist/src/session/session-worker-binding.js +0 -109
- package/dist/src/session/session-worker-binding.js.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
- package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.js +0 -190
- package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
- package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
- package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
- package/dist/src/shared/services/selector-builder.service.js +0 -240
- package/dist/src/shared/services/selector-builder.service.js.map +0 -1
- package/dist/src/state/constants.d.ts +0 -125
- package/dist/src/state/constants.d.ts.map +0 -1
- package/dist/src/state/constants.js +0 -131
- package/dist/src/state/constants.js.map +0 -1
- package/dist/src/tools/state-manager-registry.d.ts +0 -26
- package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
- package/dist/src/tools/state-manager-registry.js +0 -39
- package/dist/src/tools/state-manager-registry.js.map +0 -1
package/README.md
CHANGED
|
@@ -100,8 +100,6 @@ Example workflows include:
|
|
|
100
100
|
- Handling login and consent flows
|
|
101
101
|
- Performing multi-step UI interactions with lower token usage
|
|
102
102
|
|
|
103
|
-
See the `examples/` directory for concrete agent workflows.
|
|
104
|
-
|
|
105
103
|
---
|
|
106
104
|
|
|
107
105
|
## Claude Code
|
|
@@ -110,33 +108,30 @@ See the `examples/` directory for concrete agent workflows.
|
|
|
110
108
|
# Basic (auto-launches browser)
|
|
111
109
|
claude mcp add agent-web-interface -- npx agent-web-interface@latest
|
|
112
110
|
|
|
113
|
-
# With auto-connect to your Chrome profile
|
|
114
|
-
claude mcp add agent-web-interface -- npx agent-web-interface@latest
|
|
115
|
-
|
|
116
|
-
# Headless mode
|
|
117
|
-
claude mcp add agent-web-interface -- npx agent-web-interface@latest --headless
|
|
111
|
+
# With auto-connect to your Chrome profile (set via env var)
|
|
112
|
+
claude mcp add agent-web-interface -e AWI_CDP_URL=http://localhost:9222 -- npx agent-web-interface@latest
|
|
118
113
|
```
|
|
119
114
|
|
|
120
115
|
---
|
|
121
116
|
|
|
122
117
|
## CLI Arguments
|
|
123
118
|
|
|
124
|
-
The server accepts
|
|
119
|
+
The server accepts transport-level arguments only. Browser configuration is per-session via the `navigate` tool.
|
|
125
120
|
|
|
126
|
-
| Argument
|
|
127
|
-
|
|
|
128
|
-
| `--
|
|
129
|
-
| `--
|
|
130
|
-
| `--wsEndpoint` | WebSocket endpoint to connect to existing browser | - |
|
|
131
|
-
| `--autoConnect` | Auto-connect to Chrome 144+ via DevToolsActivePort | `false` |
|
|
132
|
-
| `--isolated` | Use isolated temp profile instead of persistent | `false` |
|
|
133
|
-
| `--userDataDir` | Chrome user data directory | Platform default |
|
|
134
|
-
| `--channel` | Chrome channel (chrome, chrome-canary, chrome-beta, chrome-dev) | `chrome` |
|
|
135
|
-
| `--executablePath` | Path to Chrome executable | - |
|
|
121
|
+
| Argument | Description | Default |
|
|
122
|
+
| ------------- | --------------------------------- | ------- |
|
|
123
|
+
| `--transport` | Transport mode: `stdio` or `http` | `stdio` |
|
|
124
|
+
| `--port` | Port for HTTP transport | `3000` |
|
|
136
125
|
|
|
137
|
-
###
|
|
126
|
+
### Browser Session Configuration
|
|
138
127
|
|
|
139
|
-
|
|
128
|
+
Browser initialization is automatic on the first tool call. The `navigate` tool accepts optional parameters to configure the session:
|
|
129
|
+
|
|
130
|
+
| Parameter | Description | Default |
|
|
131
|
+
| -------------- | -------------------------------------------------- | ------- |
|
|
132
|
+
| `headless` | Run browser in headless mode | `false` |
|
|
133
|
+
| `isolated` | Use an isolated temp profile instead of persistent | `false` |
|
|
134
|
+
| `auto_connect` | Auto-connect to Chrome 144+ via DevToolsActivePort | `false` |
|
|
140
135
|
|
|
141
136
|
Examples:
|
|
142
137
|
|
|
@@ -144,14 +139,11 @@ Examples:
|
|
|
144
139
|
# Auto-launch visible browser (default)
|
|
145
140
|
npx agent-web-interface
|
|
146
141
|
|
|
147
|
-
#
|
|
148
|
-
npx agent-web-interface --
|
|
149
|
-
|
|
150
|
-
# Auto-connect to Chrome with remote debugging enabled
|
|
151
|
-
npx agent-web-interface --autoConnect
|
|
142
|
+
# HTTP transport mode
|
|
143
|
+
npx agent-web-interface --transport http --port 8080
|
|
152
144
|
|
|
153
|
-
# Connect to
|
|
154
|
-
npx agent-web-interface
|
|
145
|
+
# Connect to existing CDP endpoint via env var
|
|
146
|
+
AWI_CDP_URL=http://localhost:9222 npx agent-web-interface
|
|
155
147
|
```
|
|
156
148
|
|
|
157
149
|
---
|
|
@@ -162,14 +154,17 @@ To connect with your bookmarks, extensions, and logged-in sessions:
|
|
|
162
154
|
|
|
163
155
|
1. Navigate to `chrome://inspect/#remote-debugging` in Chrome
|
|
164
156
|
2. Enable remote debugging and allow the connection
|
|
165
|
-
3. Use
|
|
157
|
+
3. Use the `auto_connect` parameter on the `navigate` tool, or set `AWI_CDP_URL`
|
|
166
158
|
|
|
167
159
|
```json
|
|
168
160
|
{
|
|
169
161
|
"mcpServers": {
|
|
170
162
|
"agent-web-interface": {
|
|
171
163
|
"command": "npx",
|
|
172
|
-
"args": ["agent-web-interface@latest",
|
|
164
|
+
"args": ["agent-web-interface@latest"],
|
|
165
|
+
"env": {
|
|
166
|
+
"AWI_CDP_URL": "http://localhost:9222"
|
|
167
|
+
}
|
|
173
168
|
}
|
|
174
169
|
}
|
|
175
170
|
}
|
|
@@ -179,11 +174,17 @@ To connect with your bookmarks, extensions, and logged-in sessions:
|
|
|
179
174
|
|
|
180
175
|
## Environment Variables
|
|
181
176
|
|
|
182
|
-
| Variable | Description
|
|
183
|
-
| ------------------ |
|
|
184
|
-
| `
|
|
185
|
-
| `
|
|
186
|
-
| `
|
|
177
|
+
| Variable | Description | Default |
|
|
178
|
+
| ------------------ | -------------------------------------------------------- | ----------- |
|
|
179
|
+
| `AWI_CDP_URL` | CDP endpoint (http or ws) to connect to existing browser | - |
|
|
180
|
+
| `AWI_TRIM_REGIONS` | Set to `false` to disable region trimming globally | `true` |
|
|
181
|
+
| `TRANSPORT` | Transport mode override (`http`) | - |
|
|
182
|
+
| `HTTP_HOST` | Host for HTTP transport | `127.0.0.1` |
|
|
183
|
+
| `HTTP_PORT` | Port for HTTP transport | `3000` |
|
|
184
|
+
| `LOG_LEVEL` | Logging level | `info` |
|
|
185
|
+
| `CEF_BRIDGE_HOST` | CDP host for CEF bridge connection | `127.0.0.1` |
|
|
186
|
+
| `CEF_BRIDGE_PORT` | CDP port for CEF bridge connection | `9223` |
|
|
187
|
+
| `CHROME_PATH` | Path to Chrome executable (multi-tenant) | - |
|
|
187
188
|
|
|
188
189
|
---
|
|
189
190
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Session Config
|
|
3
|
+
*
|
|
4
|
+
* Defines the browser configuration that agents can specify per session.
|
|
5
|
+
* Each session can independently choose to launch a new browser or connect
|
|
6
|
+
* to an existing one, with its own headless/headed preference.
|
|
7
|
+
*
|
|
8
|
+
* Env var AWI_CDP_URL overrides to connect to an existing CDP endpoint.
|
|
9
|
+
*
|
|
10
|
+
* @module browser/browser-session-config
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Per-session browser configuration.
|
|
14
|
+
*
|
|
15
|
+
* Agents pass browser preferences via the `navigate` tool's optional parameters.
|
|
16
|
+
* If not provided, sensible defaults are used (launch, headed, persistent profile).
|
|
17
|
+
*/
|
|
18
|
+
export interface BrowserSessionConfig {
|
|
19
|
+
/** Run browser in headless mode. Default: false */
|
|
20
|
+
headless?: boolean;
|
|
21
|
+
/** Use an isolated temp profile instead of persistent. Default: false */
|
|
22
|
+
isolated?: boolean;
|
|
23
|
+
/** Auto-connect to Chrome 144+ via DevToolsActivePort */
|
|
24
|
+
autoConnect?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns sensible default browser configuration.
|
|
28
|
+
*
|
|
29
|
+
* Launch a headed Chrome with a persistent profile — the most common
|
|
30
|
+
* configuration for interactive browser automation.
|
|
31
|
+
*/
|
|
32
|
+
export declare function defaultBrowserConfig(): BrowserSessionConfig;
|
|
33
|
+
//# sourceMappingURL=browser-session-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-session-config.d.ts","sourceRoot":"","sources":["../../../src/browser/browser-session-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAM3D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Session Config
|
|
3
|
+
*
|
|
4
|
+
* Defines the browser configuration that agents can specify per session.
|
|
5
|
+
* Each session can independently choose to launch a new browser or connect
|
|
6
|
+
* to an existing one, with its own headless/headed preference.
|
|
7
|
+
*
|
|
8
|
+
* Env var AWI_CDP_URL overrides to connect to an existing CDP endpoint.
|
|
9
|
+
*
|
|
10
|
+
* @module browser/browser-session-config
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Returns sensible default browser configuration.
|
|
14
|
+
*
|
|
15
|
+
* Launch a headed Chrome with a persistent profile — the most common
|
|
16
|
+
* configuration for interactive browser automation.
|
|
17
|
+
*/
|
|
18
|
+
export function defaultBrowserConfig() {
|
|
19
|
+
return {
|
|
20
|
+
headless: false,
|
|
21
|
+
isolated: false,
|
|
22
|
+
autoConnect: true,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=browser-session-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-session-config.js","sourceRoot":"","sources":["../../../src/browser/browser-session-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -2,38 +2,23 @@
|
|
|
2
2
|
* Lazy Browser Initialization
|
|
3
3
|
*
|
|
4
4
|
* Ensures a browser is ready before tool execution.
|
|
5
|
-
* If no browser is running, launches or connects based on
|
|
5
|
+
* If no browser is running, launches or connects based on session configuration.
|
|
6
|
+
*
|
|
7
|
+
* When a persistent profile is in use and Chrome is already running (from a
|
|
8
|
+
* previous session or another agent), reconnects via DevToolsActivePort instead
|
|
9
|
+
* of failing on the profile lock.
|
|
10
|
+
*
|
|
11
|
+
* CDP endpoint can be set via AWI_CDP_URL env var (http or ws) to connect
|
|
12
|
+
* to an existing browser instead of launching.
|
|
6
13
|
*/
|
|
7
14
|
import type { SessionManager } from './session-manager.js';
|
|
8
|
-
|
|
9
|
-
* Options for lazy browser initialization.
|
|
10
|
-
*/
|
|
11
|
-
export interface EnsureBrowserOptions {
|
|
12
|
-
/** Run browser in headless mode (default: false) */
|
|
13
|
-
headless?: boolean;
|
|
14
|
-
/** Use isolated temp profile (default: false) */
|
|
15
|
-
isolated?: boolean;
|
|
16
|
-
/** HTTP endpoint URL for connecting to existing browser */
|
|
17
|
-
browserUrl?: string;
|
|
18
|
-
/** WebSocket endpoint URL for connecting to existing browser */
|
|
19
|
-
wsEndpoint?: string;
|
|
20
|
-
/** Auto-connect to Chrome 144+ via DevToolsActivePort */
|
|
21
|
-
autoConnect?: boolean;
|
|
22
|
-
/** Chrome user data directory */
|
|
23
|
-
userDataDir?: string;
|
|
24
|
-
/** Chrome channel */
|
|
25
|
-
channel?: 'chrome' | 'chrome-canary' | 'chrome-beta' | 'chrome-dev';
|
|
26
|
-
/** Path to Chrome executable */
|
|
27
|
-
executablePath?: string;
|
|
28
|
-
}
|
|
15
|
+
import type { BrowserSessionConfig } from './browser-session-config.js';
|
|
29
16
|
/**
|
|
30
17
|
* Ensure browser is ready for tool execution.
|
|
31
18
|
*
|
|
32
19
|
* If browser is already running, returns immediately.
|
|
33
|
-
* Otherwise, launches or connects based on provided
|
|
34
|
-
*
|
|
35
|
-
* @param session - SessionManager instance
|
|
36
|
-
* @param options - Configuration options from CLI
|
|
20
|
+
* Otherwise, launches or connects based on provided config.
|
|
21
|
+
* Set AWI_CDP_URL env var to connect to an existing CDP endpoint.
|
|
37
22
|
*/
|
|
38
|
-
export declare function ensureBrowserReady(session: SessionManager,
|
|
23
|
+
export declare function ensureBrowserReady(session: SessionManager, config: BrowserSessionConfig): Promise<void>;
|
|
39
24
|
//# sourceMappingURL=ensure-browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-browser.d.ts","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ensure-browser.d.ts","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AASxE;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwFf"}
|
|
@@ -2,64 +2,156 @@
|
|
|
2
2
|
* Lazy Browser Initialization
|
|
3
3
|
*
|
|
4
4
|
* Ensures a browser is ready before tool execution.
|
|
5
|
-
* If no browser is running, launches or connects based on
|
|
5
|
+
* If no browser is running, launches or connects based on session configuration.
|
|
6
|
+
*
|
|
7
|
+
* When a persistent profile is in use and Chrome is already running (from a
|
|
8
|
+
* previous session or another agent), reconnects via DevToolsActivePort instead
|
|
9
|
+
* of failing on the profile lock.
|
|
10
|
+
*
|
|
11
|
+
* CDP endpoint can be set via AWI_CDP_URL env var (http or ws) to connect
|
|
12
|
+
* to an existing browser instead of launching.
|
|
6
13
|
*/
|
|
14
|
+
import fs from 'node:fs';
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
import { DEFAULT_USER_DATA_DIR } from './session-manager.js';
|
|
17
|
+
import { extractErrorMessage } from './connection-utils.js';
|
|
7
18
|
import { getLogger } from '../shared/services/logging.service.js';
|
|
8
19
|
const logger = getLogger();
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
*/
|
|
12
|
-
function shouldConnect(options) {
|
|
13
|
-
return !!(options.browserUrl ?? options.wsEndpoint ?? options.autoConnect);
|
|
14
|
-
}
|
|
20
|
+
/** Short timeout for reconnect attempts — these are fast pre-checks, not full connections */
|
|
21
|
+
const RECONNECT_TIMEOUT_MS = 5000;
|
|
15
22
|
/**
|
|
16
23
|
* Ensure browser is ready for tool execution.
|
|
17
24
|
*
|
|
18
25
|
* If browser is already running, returns immediately.
|
|
19
|
-
* Otherwise, launches or connects based on provided
|
|
20
|
-
*
|
|
21
|
-
* @param session - SessionManager instance
|
|
22
|
-
* @param options - Configuration options from CLI
|
|
26
|
+
* Otherwise, launches or connects based on provided config.
|
|
27
|
+
* Set AWI_CDP_URL env var to connect to an existing CDP endpoint.
|
|
23
28
|
*/
|
|
24
|
-
export async function ensureBrowserReady(session,
|
|
25
|
-
// Fast path: browser already running
|
|
29
|
+
export async function ensureBrowserReady(session, config) {
|
|
26
30
|
if (session.isRunning()) {
|
|
27
31
|
return;
|
|
28
32
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
const inFlightPromise = session.connectionPromise;
|
|
34
|
+
if (session.connectionState === 'connecting' && inFlightPromise) {
|
|
35
|
+
logger.info('Awaiting in-flight browser connection');
|
|
36
|
+
await inFlightPromise;
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty string must be falsy
|
|
40
|
+
const cdpUrl = process.env.AWI_CDP_URL?.trim() || undefined;
|
|
41
|
+
// Explicit CDP URL — connect only, no fallback to launch
|
|
42
|
+
if (cdpUrl) {
|
|
43
|
+
logger.info('Lazy browser initialization triggered', { mode: 'connect', cdpUrl });
|
|
44
|
+
try {
|
|
45
|
+
await session.connect({ endpointUrl: cdpUrl });
|
|
46
|
+
logger.info('Browser initialized successfully', { mode: 'connect' });
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const msg = extractErrorMessage(error);
|
|
50
|
+
logger.error('Browser initialization failed', error instanceof Error ? error : undefined, {
|
|
51
|
+
mode: 'connect',
|
|
39
52
|
});
|
|
53
|
+
throw new Error(`Failed to connect to CDP endpoint (${cdpUrl}): ${msg}. ` +
|
|
54
|
+
'Try removing AWI_CDP_URL to auto-connect to a running Chrome, or launch a new browser with auto_connect=false.');
|
|
40
55
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Auto-connect: try connecting to an existing Chrome first, fall back to launch
|
|
59
|
+
if (config.autoConnect) {
|
|
60
|
+
logger.info('Attempting auto-connect to existing Chrome');
|
|
61
|
+
try {
|
|
62
|
+
await session.connect({ autoConnect: true });
|
|
63
|
+
logger.info('Auto-connected to existing Chrome');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
logger.info('Auto-connect failed, falling back to launch', {
|
|
68
|
+
error: extractErrorMessage(error),
|
|
49
69
|
});
|
|
50
70
|
}
|
|
51
|
-
|
|
71
|
+
}
|
|
72
|
+
// Launch mode — try reconnecting to an existing browser first (persistent profiles only)
|
|
73
|
+
const profileDir = config.isolated ? undefined : DEFAULT_USER_DATA_DIR;
|
|
74
|
+
if (profileDir && (await hasPortFile(profileDir)) && (await tryReconnect(session, profileDir))) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
// Launch a new browser
|
|
78
|
+
logger.info('Lazy browser initialization triggered', { mode: 'launch' });
|
|
79
|
+
try {
|
|
80
|
+
await session.launch({
|
|
81
|
+
headless: config.headless ?? false,
|
|
82
|
+
isolated: config.isolated ?? false,
|
|
83
|
+
});
|
|
84
|
+
logger.info('Browser initialized successfully', { mode: 'launch' });
|
|
52
85
|
}
|
|
53
86
|
catch (error) {
|
|
87
|
+
// Another process may have grabbed the profile between our reconnect attempt
|
|
88
|
+
// and launch (race condition). Try reconnecting one more time.
|
|
89
|
+
if (profileDir && isProfileLockError(error) && (await tryReconnect(session, profileDir))) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const msg = extractErrorMessage(error);
|
|
54
93
|
logger.error('Browser initialization failed', error instanceof Error ? error : undefined, {
|
|
55
|
-
mode,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
94
|
+
mode: 'launch',
|
|
95
|
+
headless: config.headless,
|
|
96
|
+
});
|
|
97
|
+
const suggestions = [];
|
|
98
|
+
if (!config.headless) {
|
|
99
|
+
suggestions.push('try headless=true if no display is available');
|
|
100
|
+
}
|
|
101
|
+
if (!config.isolated) {
|
|
102
|
+
suggestions.push('try isolated=true to use a fresh profile');
|
|
103
|
+
}
|
|
104
|
+
if (config.headless) {
|
|
105
|
+
suggestions.push('try headless=false to launch a visible browser');
|
|
106
|
+
}
|
|
107
|
+
const hint = suggestions.length > 0 ? ` Suggestions: ${suggestions.join('; ')}.` : '';
|
|
108
|
+
throw new Error(`Failed to launch browser: ${msg}.${hint}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if DevToolsActivePort file exists in the profile directory.
|
|
113
|
+
* Used to skip the reconnect attempt entirely on cold starts where
|
|
114
|
+
* Chrome has never run, avoiding wasted I/O.
|
|
115
|
+
*/
|
|
116
|
+
async function hasPortFile(profileDir) {
|
|
117
|
+
try {
|
|
118
|
+
await fs.promises.access(path.join(profileDir, 'DevToolsActivePort'), fs.constants.F_OK);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Attempt to reconnect to an existing Chrome via its DevToolsActivePort file.
|
|
127
|
+
* Returns true on success. On failure, returns false.
|
|
128
|
+
* Uses a short timeout since this is a fast pre-check, not a full connection attempt.
|
|
129
|
+
*/
|
|
130
|
+
async function tryReconnect(session, profileDir) {
|
|
131
|
+
try {
|
|
132
|
+
await session.connect({
|
|
133
|
+
autoConnect: true,
|
|
134
|
+
userDataDir: profileDir,
|
|
135
|
+
ownedReconnect: true,
|
|
136
|
+
timeout: RECONNECT_TIMEOUT_MS,
|
|
137
|
+
});
|
|
138
|
+
logger.info('Reconnected to existing browser');
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger.warning('Reconnect to existing browser failed', {
|
|
143
|
+
error: extractErrorMessage(error),
|
|
61
144
|
});
|
|
62
|
-
|
|
145
|
+
return false;
|
|
63
146
|
}
|
|
64
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Detect Chrome profile-lock errors from Puppeteer.
|
|
150
|
+
* Matches against Puppeteer's error text which includes "already running for <path>"
|
|
151
|
+
* when the SingletonLock file prevents a second Chrome instance.
|
|
152
|
+
*/
|
|
153
|
+
function isProfileLockError(error) {
|
|
154
|
+
const msg = extractErrorMessage(error);
|
|
155
|
+
return /already running for|already in use|SingletonLock/i.test(msg);
|
|
156
|
+
}
|
|
65
157
|
//# sourceMappingURL=ensure-browser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-browser.js","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ensure-browser.js","sourceRoot":"","sources":["../../../src/browser/ensure-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { PageRegistry, type PageHandle } from './page-registry.js';
|
|
7
7
|
export { SessionManager } from './session-manager.js';
|
|
8
|
-
export type { LaunchOptions, ConnectOptions, ConnectionState, ConnectionStateChangeEvent, } from './session-manager.types.js';
|
|
8
|
+
export type { ChromeChannel, LaunchOptions, ConnectOptions, ConnectionState, ConnectionStateChangeEvent, } from './session-manager.types.js';
|
|
9
|
+
export { CHROME_CHANNELS } from './session-manager.types.js';
|
|
9
10
|
export { extractErrorMessage } from './connection-utils.js';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { PageRegistry } from './page-registry.js';
|
|
7
7
|
export { SessionManager } from './session-manager.js';
|
|
8
|
+
export { CHROME_CHANNELS } from './session-manager.types.js';
|
|
8
9
|
export { extractErrorMessage } from './connection-utils.js';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page Network Recorder
|
|
3
|
+
*
|
|
4
|
+
* Records network request/response details per page for the
|
|
5
|
+
* list_network_calls and search_network_calls tools.
|
|
6
|
+
*
|
|
7
|
+
* Uses Puppeteer page events (request, requestfinished, requestfailed)
|
|
8
|
+
* to capture entries. Memory-bounded via a ring buffer with
|
|
9
|
+
* configurable max entries.
|
|
10
|
+
*
|
|
11
|
+
* Follows the same lifecycle pattern as PageNetworkTracker:
|
|
12
|
+
* attach() → markNavigation() → detach()
|
|
13
|
+
*/
|
|
14
|
+
import type { Page } from 'puppeteer-core';
|
|
15
|
+
export interface NetworkEntry {
|
|
16
|
+
id: number;
|
|
17
|
+
url: string;
|
|
18
|
+
method: string;
|
|
19
|
+
resource_type: string;
|
|
20
|
+
is_navigation: boolean;
|
|
21
|
+
request_headers: Record<string, string>;
|
|
22
|
+
post_data: string | null;
|
|
23
|
+
started_at: number;
|
|
24
|
+
status: number | null;
|
|
25
|
+
status_text: string | null;
|
|
26
|
+
response_headers: Record<string, string> | null;
|
|
27
|
+
mime_type: string | null;
|
|
28
|
+
duration_ms: number | null;
|
|
29
|
+
failed: boolean;
|
|
30
|
+
failure_text: string | null;
|
|
31
|
+
navigation_id: number;
|
|
32
|
+
}
|
|
33
|
+
export interface NetworkFilter {
|
|
34
|
+
url_pattern?: string;
|
|
35
|
+
url_regex?: boolean;
|
|
36
|
+
method?: string;
|
|
37
|
+
resource_type?: string;
|
|
38
|
+
status_min?: number;
|
|
39
|
+
status_max?: number;
|
|
40
|
+
failed_only?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface NetworkQueryResult {
|
|
43
|
+
entries: NetworkEntry[];
|
|
44
|
+
total: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Records network request/response details for a single page.
|
|
48
|
+
*
|
|
49
|
+
* Uses a ring buffer (fixed-size array with head pointer) for O(1)
|
|
50
|
+
* insertion and eviction instead of Array.shift().
|
|
51
|
+
*/
|
|
52
|
+
export declare class PageNetworkRecorder {
|
|
53
|
+
private buffer;
|
|
54
|
+
private head;
|
|
55
|
+
private count;
|
|
56
|
+
private nextId;
|
|
57
|
+
private navigationId;
|
|
58
|
+
private maxEntries;
|
|
59
|
+
private page;
|
|
60
|
+
private generation;
|
|
61
|
+
private currentGeneration;
|
|
62
|
+
/** Map from HTTPRequest to NetworkEntry for response correlation */
|
|
63
|
+
private pending;
|
|
64
|
+
private onRequest;
|
|
65
|
+
private onRequestFinished;
|
|
66
|
+
private onRequestFailed;
|
|
67
|
+
constructor(maxEntries?: number);
|
|
68
|
+
attach(page: Page): void;
|
|
69
|
+
detach(): void;
|
|
70
|
+
markNavigation(): void;
|
|
71
|
+
getEntries(filter?: NetworkFilter, offset?: number, limit?: number): NetworkQueryResult;
|
|
72
|
+
search(urlPattern: string, isRegex?: boolean, filter?: NetworkFilter, limit?: number): NetworkQueryResult;
|
|
73
|
+
clear(): void;
|
|
74
|
+
getStats(): {
|
|
75
|
+
total: number;
|
|
76
|
+
pending: number;
|
|
77
|
+
failed: number;
|
|
78
|
+
by_resource_type: Record<string, number>;
|
|
79
|
+
};
|
|
80
|
+
isAttached(): boolean;
|
|
81
|
+
/** Iterate entries in insertion order (oldest first). */
|
|
82
|
+
private iterEntries;
|
|
83
|
+
/** Compile a URL regex once, with a safety check for pathological patterns. */
|
|
84
|
+
private compileUrlRegex;
|
|
85
|
+
private applyFilter;
|
|
86
|
+
/** Add an entry, evicting the oldest if at capacity. O(1). */
|
|
87
|
+
private addEntry;
|
|
88
|
+
private pickHeaders;
|
|
89
|
+
private createAndAttachHandlers;
|
|
90
|
+
private removeHandlers;
|
|
91
|
+
}
|
|
92
|
+
export declare function getOrCreateRecorder(page: Page, maxEntries?: number): PageNetworkRecorder;
|
|
93
|
+
export declare function removeRecorder(page: Page): void;
|
|
94
|
+
export declare function hasRecorder(page: Page): boolean;
|
|
95
|
+
//# sourceMappingURL=page-network-recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-network-recorder.d.ts","sourceRoot":"","sources":["../../../src/browser/page-network-recorder.ts"],"names":[],"mappings":"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"}
|