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
|
@@ -6,10 +6,7 @@
|
|
|
6
6
|
import { clickByBackendNodeId, clickAtCoordinates, clickAtElementOffset, typeByBackendNodeId, pressKey, selectOption, hoverByBackendNodeId, } from '../snapshot/index.js';
|
|
7
7
|
import { ClickInputSchema, TypeInputSchema, PressInputSchema, SelectInputSchema, HoverInputSchema, } from './tool-schemas.js';
|
|
8
8
|
import { executeAction, executeActionWithRetry, executeActionWithOutcome, } from './execute-action.js';
|
|
9
|
-
import { getSnapshotStore, requireSnapshot, resolveElementByEid } from './tool-context.js';
|
|
10
9
|
import { prepareActionContext } from './action-context.js';
|
|
11
|
-
// Convenience alias for module-internal use
|
|
12
|
-
const snapshotStore = getSnapshotStore();
|
|
13
10
|
/**
|
|
14
11
|
* Click an element or at viewport coordinates.
|
|
15
12
|
*
|
|
@@ -21,7 +18,7 @@ const snapshotStore = getSnapshotStore();
|
|
|
21
18
|
* @param rawInput - Click options (will be validated)
|
|
22
19
|
* @returns Click result with navigation-aware outcome
|
|
23
20
|
*/
|
|
24
|
-
export async function click(rawInput) {
|
|
21
|
+
export async function click(rawInput, ctx) {
|
|
25
22
|
const input = ClickInputSchema.parse(rawInput);
|
|
26
23
|
const hasEid = input.eid !== undefined;
|
|
27
24
|
const hasCoords = input.x !== undefined && input.y !== undefined;
|
|
@@ -31,12 +28,12 @@ export async function click(rawInput) {
|
|
|
31
28
|
if ((input.x !== undefined) !== (input.y !== undefined)) {
|
|
32
29
|
throw new Error('Both x and y coordinates must be provided together.');
|
|
33
30
|
}
|
|
34
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
31
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
35
32
|
let result;
|
|
36
33
|
if (hasEid) {
|
|
37
34
|
// Mode 1 & 2: element-based click (center or offset)
|
|
38
|
-
const snap = requireSnapshot(pageId);
|
|
39
|
-
const node = resolveElementByEid(pageId, input.eid, snap);
|
|
35
|
+
const snap = ctx.requireSnapshot(pageId);
|
|
36
|
+
const node = ctx.resolveElementByEid(pageId, input.eid, snap);
|
|
40
37
|
result = await executeActionWithOutcome(handleRef.current, node, async (backendNodeId) => {
|
|
41
38
|
if (hasCoords) {
|
|
42
39
|
await clickAtElementOffset(handleRef.current.cdp, backendNodeId, input.x, input.y, input.modifiers);
|
|
@@ -44,15 +41,15 @@ export async function click(rawInput) {
|
|
|
44
41
|
else {
|
|
45
42
|
await clickByBackendNodeId(handleRef.current.cdp, backendNodeId, input.modifiers);
|
|
46
43
|
}
|
|
47
|
-
},
|
|
44
|
+
}, ctx, ctx.getSnapshotStore(), captureSnapshot);
|
|
48
45
|
}
|
|
49
46
|
else {
|
|
50
47
|
// Mode 3: x/y only -> absolute viewport click
|
|
51
48
|
result = await executeAction(handleRef.current, async () => {
|
|
52
49
|
await clickAtCoordinates(handleRef.current.cdp, input.x, input.y, input.modifiers);
|
|
53
|
-
}, captureSnapshot);
|
|
50
|
+
}, ctx, captureSnapshot);
|
|
54
51
|
}
|
|
55
|
-
|
|
52
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
56
53
|
return result.state_response;
|
|
57
54
|
}
|
|
58
55
|
/**
|
|
@@ -61,19 +58,19 @@ export async function click(rawInput) {
|
|
|
61
58
|
* @param rawInput - Type options (will be validated)
|
|
62
59
|
* @returns Type result with delta
|
|
63
60
|
*/
|
|
64
|
-
export async function type(rawInput) {
|
|
61
|
+
export async function type(rawInput, ctx) {
|
|
65
62
|
const input = TypeInputSchema.parse(rawInput);
|
|
66
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
67
|
-
const snap = requireSnapshot(pageId);
|
|
68
|
-
const node = resolveElementByEid(pageId, input.eid, snap);
|
|
63
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
64
|
+
const snap = ctx.requireSnapshot(pageId);
|
|
65
|
+
const node = ctx.resolveElementByEid(pageId, input.eid, snap);
|
|
69
66
|
// Execute action with automatic retry on stale elements
|
|
70
67
|
const result = await executeActionWithRetry(handleRef.current, node, async (backendNodeId) => {
|
|
71
68
|
await typeByBackendNodeId(handleRef.current.cdp, backendNodeId, input.text, {
|
|
72
69
|
clear: input.clear,
|
|
73
70
|
});
|
|
74
|
-
},
|
|
71
|
+
}, ctx, ctx.getSnapshotStore(), captureSnapshot);
|
|
75
72
|
// Store snapshot for future queries
|
|
76
|
-
|
|
73
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
77
74
|
// Return XML state response directly
|
|
78
75
|
return result.state_response;
|
|
79
76
|
}
|
|
@@ -83,15 +80,15 @@ export async function type(rawInput) {
|
|
|
83
80
|
* @param rawInput - Press options (will be validated)
|
|
84
81
|
* @returns Press result with delta
|
|
85
82
|
*/
|
|
86
|
-
export async function press(rawInput) {
|
|
83
|
+
export async function press(rawInput, ctx) {
|
|
87
84
|
const input = PressInputSchema.parse(rawInput);
|
|
88
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
85
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
89
86
|
// Execute action with new simplified wrapper
|
|
90
87
|
const result = await executeAction(handleRef.current, async () => {
|
|
91
88
|
await pressKey(handleRef.current.cdp, input.key, input.modifiers);
|
|
92
|
-
}, captureSnapshot);
|
|
89
|
+
}, ctx, captureSnapshot);
|
|
93
90
|
// Store snapshot for future queries
|
|
94
|
-
|
|
91
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
95
92
|
// Return XML state response directly
|
|
96
93
|
return result.state_response;
|
|
97
94
|
}
|
|
@@ -101,17 +98,17 @@ export async function press(rawInput) {
|
|
|
101
98
|
* @param rawInput - Select options (will be validated)
|
|
102
99
|
* @returns Select result with delta
|
|
103
100
|
*/
|
|
104
|
-
export async function select(rawInput) {
|
|
101
|
+
export async function select(rawInput, ctx) {
|
|
105
102
|
const input = SelectInputSchema.parse(rawInput);
|
|
106
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
107
|
-
const snap = requireSnapshot(pageId);
|
|
108
|
-
const node = resolveElementByEid(pageId, input.eid, snap);
|
|
103
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
104
|
+
const snap = ctx.requireSnapshot(pageId);
|
|
105
|
+
const node = ctx.resolveElementByEid(pageId, input.eid, snap);
|
|
109
106
|
// Execute action with automatic retry on stale elements
|
|
110
107
|
const result = await executeActionWithRetry(handleRef.current, node, async (backendNodeId) => {
|
|
111
108
|
await selectOption(handleRef.current.cdp, backendNodeId, input.value);
|
|
112
|
-
},
|
|
109
|
+
}, ctx, ctx.getSnapshotStore(), captureSnapshot);
|
|
113
110
|
// Store snapshot for future queries
|
|
114
|
-
|
|
111
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
115
112
|
// Return XML state response directly
|
|
116
113
|
return result.state_response;
|
|
117
114
|
}
|
|
@@ -121,17 +118,17 @@ export async function select(rawInput) {
|
|
|
121
118
|
* @param rawInput - Hover options (will be validated)
|
|
122
119
|
* @returns Hover result with delta
|
|
123
120
|
*/
|
|
124
|
-
export async function hover(rawInput) {
|
|
121
|
+
export async function hover(rawInput, ctx) {
|
|
125
122
|
const input = HoverInputSchema.parse(rawInput);
|
|
126
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
127
|
-
const snap = requireSnapshot(pageId);
|
|
128
|
-
const node = resolveElementByEid(pageId, input.eid, snap);
|
|
123
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
124
|
+
const snap = ctx.requireSnapshot(pageId);
|
|
125
|
+
const node = ctx.resolveElementByEid(pageId, input.eid, snap);
|
|
129
126
|
// Execute action with automatic retry on stale elements
|
|
130
127
|
const result = await executeActionWithRetry(handleRef.current, node, async (backendNodeId) => {
|
|
131
128
|
await hoverByBackendNodeId(handleRef.current.cdp, backendNodeId);
|
|
132
|
-
},
|
|
129
|
+
}, ctx, ctx.getSnapshotStore(), captureSnapshot);
|
|
133
130
|
// Store snapshot for future queries
|
|
134
|
-
|
|
131
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
135
132
|
// Return XML state response directly
|
|
136
133
|
return result.state_response;
|
|
137
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction-tools.js","sourceRoot":"","sources":["../../../src/tools/interaction-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interaction-tools.js","sourceRoot":"","sources":["../../../src/tools/interaction-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MCP tool handlers for browser navigation and session management.
|
|
5
5
|
*/
|
|
6
|
+
import type { ToolContext } from './tool-context.types.js';
|
|
6
7
|
/**
|
|
7
8
|
* List all open browser pages with their metadata.
|
|
8
9
|
*
|
|
@@ -11,47 +12,40 @@
|
|
|
11
12
|
*
|
|
12
13
|
* @returns XML result with page list
|
|
13
14
|
*/
|
|
14
|
-
export declare function listPages(): Promise<import('./tool-schemas.js').ListPagesOutput>;
|
|
15
|
+
export declare function listPages(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').ListPagesOutput>;
|
|
15
16
|
/**
|
|
16
17
|
* Close a specific page.
|
|
17
18
|
*
|
|
18
19
|
* @param rawInput - Close options (will be validated)
|
|
19
20
|
* @returns Close result
|
|
20
21
|
*/
|
|
21
|
-
export declare function closePage(rawInput: unknown): Promise<import('./tool-schemas.js').ClosePageOutput>;
|
|
22
|
-
/**
|
|
23
|
-
* Close the entire browser session.
|
|
24
|
-
*
|
|
25
|
-
* @param rawInput - Close options (will be validated)
|
|
26
|
-
* @returns Close result
|
|
27
|
-
*/
|
|
28
|
-
export declare function closeSession(rawInput: unknown): Promise<import('./tool-schemas.js').CloseSessionOutput>;
|
|
22
|
+
export declare function closePage(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').ClosePageOutput>;
|
|
29
23
|
/**
|
|
30
24
|
* Navigate to a URL.
|
|
31
25
|
*
|
|
32
26
|
* @param rawInput - Navigation options (will be validated)
|
|
33
27
|
* @returns Navigation result with snapshot data
|
|
34
28
|
*/
|
|
35
|
-
export declare function navigate(rawInput: unknown): Promise<import('./tool-schemas.js').NavigateOutput>;
|
|
29
|
+
export declare function navigate(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').NavigateOutput>;
|
|
36
30
|
/**
|
|
37
31
|
* Go back in browser history.
|
|
38
32
|
*
|
|
39
33
|
* @param rawInput - Navigation options (will be validated)
|
|
40
34
|
* @returns Navigation result with snapshot data
|
|
41
35
|
*/
|
|
42
|
-
export declare function goBack(rawInput: unknown): Promise<import('./tool-schemas.js').GoBackOutput>;
|
|
36
|
+
export declare function goBack(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').GoBackOutput>;
|
|
43
37
|
/**
|
|
44
38
|
* Go forward in browser history.
|
|
45
39
|
*
|
|
46
40
|
* @param rawInput - Navigation options (will be validated)
|
|
47
41
|
* @returns Navigation result with snapshot data
|
|
48
42
|
*/
|
|
49
|
-
export declare function goForward(rawInput: unknown): Promise<import('./tool-schemas.js').GoForwardOutput>;
|
|
43
|
+
export declare function goForward(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').GoForwardOutput>;
|
|
50
44
|
/**
|
|
51
45
|
* Reload the current page.
|
|
52
46
|
*
|
|
53
47
|
* @param rawInput - Navigation options (will be validated)
|
|
54
48
|
* @returns Navigation result with snapshot data
|
|
55
49
|
*/
|
|
56
|
-
export declare function reload(rawInput: unknown): Promise<import('./tool-schemas.js').ReloadOutput>;
|
|
50
|
+
export declare function reload(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').ReloadOutput>;
|
|
57
51
|
//# sourceMappingURL=navigation-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"navigation-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/navigation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAuE3D;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,eAAe,CAAC,CA2BtD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,eAAe,CAAC,CAStD;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,cAAc,CAAC,CA+CrD;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,CAGnD;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,eAAe,CAAC,CAGtD;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,YAAY,CAAC,CAGnD"}
|
|
@@ -3,17 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MCP tool handlers for browser navigation and session management.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import { ClosePageInputSchema, CloseSessionInputSchema, NavigateInputSchema, GoBackInputSchema, GoForwardInputSchema, ReloadInputSchema, } from './tool-schemas.js';
|
|
8
|
-
import { cleanupTempFiles } from '../lib/temp-file.js';
|
|
9
|
-
import { getStateManager, removeStateManager, clearAllStateManagers, } from './state-manager-registry.js';
|
|
6
|
+
import { ClosePageInputSchema, NavigateInputSchema, GoBackInputSchema, GoForwardInputSchema, ReloadInputSchema, } from './tool-schemas.js';
|
|
10
7
|
import { stabilizeAfterNavigation } from './action-stabilization.js';
|
|
11
|
-
import { buildClosePageResponse,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
import { buildClosePageResponse, buildListPagesResponse } from './response-builder.js';
|
|
9
|
+
function browserConfigDiffers(current, requested) {
|
|
10
|
+
return ((requested.headless !== undefined && requested.headless !== current.headless) ||
|
|
11
|
+
(requested.isolated !== undefined && requested.isolated !== current.isolated) ||
|
|
12
|
+
(requested.autoConnect !== undefined && requested.autoConnect !== current.autoConnect));
|
|
13
|
+
}
|
|
17
14
|
/**
|
|
18
15
|
* Execute a navigation action with snapshot capture.
|
|
19
16
|
* Consolidates goBack, goForward, and reload handlers.
|
|
@@ -25,13 +22,12 @@ const snapshotStore = getSnapshotStore();
|
|
|
25
22
|
* @param action - Navigation action to execute
|
|
26
23
|
* @returns State response after navigation
|
|
27
24
|
*/
|
|
28
|
-
async function executeNavigationAction(pageId, action) {
|
|
29
|
-
|
|
30
|
-
let handle = await session.resolvePageOrCreate(pageId);
|
|
25
|
+
async function executeNavigationAction(pageId, ctx, action) {
|
|
26
|
+
let handle = await ctx.resolvePageOrCreate(pageId);
|
|
31
27
|
const page_id = handle.page_id;
|
|
32
|
-
|
|
28
|
+
ctx.touchPage(page_id);
|
|
33
29
|
// Clear dependency tracker before navigation (old dependencies no longer valid)
|
|
34
|
-
getDependencyTracker().clearPage(page_id);
|
|
30
|
+
ctx.getDependencyTracker().clearPage(page_id);
|
|
35
31
|
// Execute navigation
|
|
36
32
|
switch (action) {
|
|
37
33
|
case 'back':
|
|
@@ -47,14 +43,14 @@ async function executeNavigationAction(pageId, action) {
|
|
|
47
43
|
// Wait for page to stabilize (DOM + network idle)
|
|
48
44
|
await stabilizeAfterNavigation(handle.page);
|
|
49
45
|
// Re-inject observation accumulator (new document context after navigation)
|
|
50
|
-
await
|
|
46
|
+
await ctx.getObservationAccumulator().inject(handle.page);
|
|
51
47
|
// Auto-capture snapshot after navigation
|
|
52
|
-
const captureResult = await captureSnapshotWithRecovery(
|
|
48
|
+
const captureResult = await ctx.captureSnapshotWithRecovery(handle, page_id);
|
|
53
49
|
handle = captureResult.handle;
|
|
54
50
|
const snapshot = captureResult.snapshot;
|
|
55
|
-
|
|
51
|
+
ctx.getSnapshotStore().store(page_id, snapshot);
|
|
56
52
|
// Return XML state response (trimmed for navigation snapshots)
|
|
57
|
-
const stateManager = getStateManager(page_id);
|
|
53
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
58
54
|
return stateManager.generateResponse(snapshot, { trimRegions: true });
|
|
59
55
|
}
|
|
60
56
|
/**
|
|
@@ -65,10 +61,9 @@ async function executeNavigationAction(pageId, action) {
|
|
|
65
61
|
*
|
|
66
62
|
* @returns XML result with page list
|
|
67
63
|
*/
|
|
68
|
-
export async function listPages() {
|
|
69
|
-
const session = getSessionManager();
|
|
64
|
+
export async function listPages(rawInput, ctx) {
|
|
70
65
|
// Sync to pick up any unregistered browser tabs
|
|
71
|
-
const pages = await
|
|
66
|
+
const pages = await ctx.syncPages();
|
|
72
67
|
const pageInfos = await Promise.all(pages.map(async (h) => {
|
|
73
68
|
const liveUrl = h.page.url?.() ?? h.url ?? '';
|
|
74
69
|
let liveTitle = h.title ?? '';
|
|
@@ -96,53 +91,56 @@ export async function listPages() {
|
|
|
96
91
|
* @param rawInput - Close options (will be validated)
|
|
97
92
|
* @returns Close result
|
|
98
93
|
*/
|
|
99
|
-
export async function closePage(rawInput) {
|
|
94
|
+
export async function closePage(rawInput, ctx) {
|
|
100
95
|
const input = ClosePageInputSchema.parse(rawInput);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
getDependencyTracker().clearPage(input.page_id); // Clean up dependencies
|
|
96
|
+
await ctx.closePage(input.page_id);
|
|
97
|
+
ctx.getSnapshotStore().removeByPageId(input.page_id);
|
|
98
|
+
ctx.removeStateManager(input.page_id); // Clean up state manager
|
|
99
|
+
ctx.getDependencyTracker().clearPage(input.page_id); // Clean up dependencies
|
|
106
100
|
return buildClosePageResponse(input.page_id);
|
|
107
101
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Close the entire browser session.
|
|
110
|
-
*
|
|
111
|
-
* @param rawInput - Close options (will be validated)
|
|
112
|
-
* @returns Close result
|
|
113
|
-
*/
|
|
114
|
-
export async function closeSession(rawInput) {
|
|
115
|
-
CloseSessionInputSchema.parse(rawInput);
|
|
116
|
-
const session = getSessionManager();
|
|
117
|
-
await session.shutdown();
|
|
118
|
-
snapshotStore.clear();
|
|
119
|
-
clearAllStateManagers(); // Clean up all state managers
|
|
120
|
-
getDependencyTracker().clearAll(); // Clean up all dependencies
|
|
121
|
-
await cleanupTempFiles(); // Clean up screenshot temp files
|
|
122
|
-
return buildCloseSessionResponse();
|
|
123
|
-
}
|
|
124
102
|
/**
|
|
125
103
|
* Navigate to a URL.
|
|
126
104
|
*
|
|
127
105
|
* @param rawInput - Navigation options (will be validated)
|
|
128
106
|
* @returns Navigation result with snapshot data
|
|
129
107
|
*/
|
|
130
|
-
export async function navigate(rawInput) {
|
|
108
|
+
export async function navigate(rawInput, ctx) {
|
|
131
109
|
const input = NavigateInputSchema.parse(rawInput);
|
|
132
|
-
const
|
|
133
|
-
|
|
110
|
+
const requestedConfig = {
|
|
111
|
+
headless: input.headless,
|
|
112
|
+
isolated: input.isolated,
|
|
113
|
+
autoConnect: input.auto_connect,
|
|
114
|
+
};
|
|
115
|
+
// Apply browser preferences if provided
|
|
116
|
+
if (input.headless !== undefined ||
|
|
117
|
+
input.isolated !== undefined ||
|
|
118
|
+
input.auto_connect !== undefined) {
|
|
119
|
+
// Browser mode is session-scoped. If the caller requests a different mode
|
|
120
|
+
// mid-session, reset first so the next ensureBrowser() actually honors it.
|
|
121
|
+
if (!ctx.canReconfigure() && browserConfigDiffers(ctx.getBrowserConfig(), requestedConfig)) {
|
|
122
|
+
await ctx.resetBrowser();
|
|
123
|
+
}
|
|
124
|
+
if (ctx.canReconfigure()) {
|
|
125
|
+
ctx.setBrowserConfig(requestedConfig);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// navigate is excluded from the pre-handler ensureBrowser() call so that
|
|
129
|
+
// browser config (auto_connect, headless, isolated) can be set first.
|
|
130
|
+
await ctx.ensureBrowser();
|
|
131
|
+
let handle = await ctx.resolvePageOrCreate(input.page_id);
|
|
134
132
|
const page_id = handle.page_id;
|
|
135
|
-
|
|
133
|
+
ctx.touchPage(page_id);
|
|
136
134
|
// Clear dependency tracker before navigation (old dependencies no longer valid)
|
|
137
|
-
getDependencyTracker().clearPage(page_id);
|
|
138
|
-
await
|
|
135
|
+
ctx.getDependencyTracker().clearPage(page_id);
|
|
136
|
+
await ctx.navigateTo(page_id, input.url);
|
|
139
137
|
// Auto-capture snapshot after navigation
|
|
140
|
-
const captureResult = await captureSnapshotWithRecovery(
|
|
138
|
+
const captureResult = await ctx.captureSnapshotWithRecovery(handle, page_id);
|
|
141
139
|
handle = captureResult.handle;
|
|
142
140
|
const snapshot = captureResult.snapshot;
|
|
143
|
-
|
|
141
|
+
ctx.getSnapshotStore().store(page_id, snapshot);
|
|
144
142
|
// Return XML state response directly (trimmed for navigation snapshots)
|
|
145
|
-
const stateManager = getStateManager(page_id);
|
|
143
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
146
144
|
return stateManager.generateResponse(snapshot, { trimRegions: true });
|
|
147
145
|
}
|
|
148
146
|
/**
|
|
@@ -151,9 +149,9 @@ export async function navigate(rawInput) {
|
|
|
151
149
|
* @param rawInput - Navigation options (will be validated)
|
|
152
150
|
* @returns Navigation result with snapshot data
|
|
153
151
|
*/
|
|
154
|
-
export async function goBack(rawInput) {
|
|
152
|
+
export async function goBack(rawInput, ctx) {
|
|
155
153
|
const input = GoBackInputSchema.parse(rawInput);
|
|
156
|
-
return executeNavigationAction(input.page_id, 'back');
|
|
154
|
+
return executeNavigationAction(input.page_id, ctx, 'back');
|
|
157
155
|
}
|
|
158
156
|
/**
|
|
159
157
|
* Go forward in browser history.
|
|
@@ -161,9 +159,9 @@ export async function goBack(rawInput) {
|
|
|
161
159
|
* @param rawInput - Navigation options (will be validated)
|
|
162
160
|
* @returns Navigation result with snapshot data
|
|
163
161
|
*/
|
|
164
|
-
export async function goForward(rawInput) {
|
|
162
|
+
export async function goForward(rawInput, ctx) {
|
|
165
163
|
const input = GoForwardInputSchema.parse(rawInput);
|
|
166
|
-
return executeNavigationAction(input.page_id, 'forward');
|
|
164
|
+
return executeNavigationAction(input.page_id, ctx, 'forward');
|
|
167
165
|
}
|
|
168
166
|
/**
|
|
169
167
|
* Reload the current page.
|
|
@@ -171,8 +169,8 @@ export async function goForward(rawInput) {
|
|
|
171
169
|
* @param rawInput - Navigation options (will be validated)
|
|
172
170
|
* @returns Navigation result with snapshot data
|
|
173
171
|
*/
|
|
174
|
-
export async function reload(rawInput) {
|
|
172
|
+
export async function reload(rawInput, ctx) {
|
|
175
173
|
const input = ReloadInputSchema.parse(rawInput);
|
|
176
|
-
return executeNavigationAction(input.page_id, 'reload');
|
|
174
|
+
return executeNavigationAction(input.page_id, ctx, 'reload');
|
|
177
175
|
}
|
|
178
176
|
//# sourceMappingURL=navigation-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-tools.js","sourceRoot":"","sources":["../../../src/tools/navigation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"navigation-tools.js","sourceRoot":"","sources":["../../../src/tools/navigation-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for inspecting network activity on a page.
|
|
5
|
+
* Provides list and search over recorded HTTP requests/responses.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolContext } from './tool-context.types.js';
|
|
8
|
+
export declare function listNetworkCalls(rawInput: unknown, ctx: ToolContext): string;
|
|
9
|
+
export declare function searchNetworkCalls(rawInput: unknown, ctx: ToolContext): string;
|
|
10
|
+
//# sourceMappingURL=network-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/network-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA8F3D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAoB5E;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAmB9E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handlers for inspecting network activity on a page.
|
|
5
|
+
* Provides list and search over recorded HTTP requests/responses.
|
|
6
|
+
*/
|
|
7
|
+
import { getOrCreateRecorder, } from '../browser/page-network-recorder.js';
|
|
8
|
+
import { escapeXml } from '../lib/text-utils.js';
|
|
9
|
+
import { ListNetworkCallsInputSchema, SearchNetworkCallsInputSchema, } from './tool-schemas.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Helpers
|
|
12
|
+
// ============================================================================
|
|
13
|
+
function formatDuration(ms) {
|
|
14
|
+
if (ms === null)
|
|
15
|
+
return 'pending';
|
|
16
|
+
if (ms < 1000)
|
|
17
|
+
return `${ms}ms`;
|
|
18
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
19
|
+
}
|
|
20
|
+
/** Build a NetworkFilter from the common filter fields shared by both tools. */
|
|
21
|
+
function buildFilter(input) {
|
|
22
|
+
const filter = {};
|
|
23
|
+
if (input.resource_type)
|
|
24
|
+
filter.resource_type = input.resource_type;
|
|
25
|
+
if (input.method)
|
|
26
|
+
filter.method = input.method;
|
|
27
|
+
if (input.status_min != null)
|
|
28
|
+
filter.status_min = input.status_min;
|
|
29
|
+
if (input.status_max != null)
|
|
30
|
+
filter.status_max = input.status_max;
|
|
31
|
+
if (input.failed_only)
|
|
32
|
+
filter.failed_only = true;
|
|
33
|
+
if (input.url_pattern)
|
|
34
|
+
filter.url_pattern = input.url_pattern;
|
|
35
|
+
return filter;
|
|
36
|
+
}
|
|
37
|
+
function entryToXml(entry, includeHeaders, includeBody) {
|
|
38
|
+
const attrs = [
|
|
39
|
+
`id="${entry.id}"`,
|
|
40
|
+
`method="${escapeXml(entry.method)}"`,
|
|
41
|
+
`url="${escapeXml(entry.url)}"`,
|
|
42
|
+
`type="${escapeXml(entry.resource_type)}"`,
|
|
43
|
+
];
|
|
44
|
+
if (entry.status !== null) {
|
|
45
|
+
attrs.push(`status="${entry.status}"`);
|
|
46
|
+
}
|
|
47
|
+
attrs.push(`duration="${formatDuration(entry.duration_ms)}"`);
|
|
48
|
+
if (entry.failed) {
|
|
49
|
+
attrs.push('failed="true"');
|
|
50
|
+
if (entry.failure_text) {
|
|
51
|
+
attrs.push(`error="${escapeXml(entry.failure_text)}"`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (entry.mime_type) {
|
|
55
|
+
attrs.push(`mime="${escapeXml(entry.mime_type)}"`);
|
|
56
|
+
}
|
|
57
|
+
const needsChildren = includeHeaders || (includeBody && entry.post_data);
|
|
58
|
+
if (!needsChildren) {
|
|
59
|
+
return ` <call ${attrs.join(' ')}/>`;
|
|
60
|
+
}
|
|
61
|
+
const lines = [];
|
|
62
|
+
lines.push(` <call ${attrs.join(' ')}>`);
|
|
63
|
+
if (includeHeaders) {
|
|
64
|
+
if (Object.keys(entry.request_headers).length > 0) {
|
|
65
|
+
lines.push(' <request_headers>');
|
|
66
|
+
for (const [k, v] of Object.entries(entry.request_headers)) {
|
|
67
|
+
lines.push(` <h name="${escapeXml(k)}">${escapeXml(v)}</h>`);
|
|
68
|
+
}
|
|
69
|
+
lines.push(' </request_headers>');
|
|
70
|
+
}
|
|
71
|
+
if (entry.response_headers && Object.keys(entry.response_headers).length > 0) {
|
|
72
|
+
lines.push(' <response_headers>');
|
|
73
|
+
for (const [k, v] of Object.entries(entry.response_headers)) {
|
|
74
|
+
lines.push(` <h name="${escapeXml(k)}">${escapeXml(v)}</h>`);
|
|
75
|
+
}
|
|
76
|
+
lines.push(' </response_headers>');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (includeBody && entry.post_data) {
|
|
80
|
+
lines.push(` <body>${escapeXml(entry.post_data)}</body>`);
|
|
81
|
+
}
|
|
82
|
+
lines.push(' </call>');
|
|
83
|
+
return lines.join('\n');
|
|
84
|
+
}
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// Tool Handlers
|
|
87
|
+
// ============================================================================
|
|
88
|
+
export function listNetworkCalls(rawInput, ctx) {
|
|
89
|
+
const input = ListNetworkCallsInputSchema.parse(rawInput);
|
|
90
|
+
const handle = ctx.resolveExistingPage(input.page_id);
|
|
91
|
+
const recorder = getOrCreateRecorder(handle.page);
|
|
92
|
+
const filter = buildFilter(input);
|
|
93
|
+
const result = recorder.getEntries(filter, input.offset, input.limit);
|
|
94
|
+
const stats = recorder.getStats();
|
|
95
|
+
const lines = [];
|
|
96
|
+
lines.push(`<network_calls page_id="${escapeXml(handle.page_id)}" total="${result.total}" shown="${result.entries.length}" offset="${input.offset}" recorded="${stats.total}">`);
|
|
97
|
+
for (const entry of result.entries) {
|
|
98
|
+
lines.push(entryToXml(entry, false, false));
|
|
99
|
+
}
|
|
100
|
+
lines.push('</network_calls>');
|
|
101
|
+
return lines.join('\n');
|
|
102
|
+
}
|
|
103
|
+
export function searchNetworkCalls(rawInput, ctx) {
|
|
104
|
+
const input = SearchNetworkCallsInputSchema.parse(rawInput);
|
|
105
|
+
const handle = ctx.resolveExistingPage(input.page_id);
|
|
106
|
+
const recorder = getOrCreateRecorder(handle.page);
|
|
107
|
+
const filter = buildFilter(input);
|
|
108
|
+
const result = recorder.search(input.url_pattern, input.url_regex, filter, input.limit);
|
|
109
|
+
const lines = [];
|
|
110
|
+
lines.push(`<network_calls page_id="${escapeXml(handle.page_id)}" total="${result.total}" shown="${result.entries.length}" pattern="${escapeXml(input.url_pattern)}">`);
|
|
111
|
+
for (const entry of result.entries) {
|
|
112
|
+
lines.push(entryToXml(entry, input.include_headers, input.include_body));
|
|
113
|
+
}
|
|
114
|
+
lines.push('</network_calls>');
|
|
115
|
+
return lines.join('\n');
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=network-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-tools.js","sourceRoot":"","sources":["../../../src/tools/network-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAG9B,MAAM,mBAAmB,CAAC;AAG3B,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,cAAc,CAAC,EAAiB;IACvC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,KAOpB;IACC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,aAAa;QAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IACpE,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/C,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACnE,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACnE,IAAI,KAAK,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;IACjD,IAAI,KAAK,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAmB,EAAE,cAAuB,EAAE,WAAoB;IACpF,MAAM,KAAK,GAAa;QACtB,OAAO,KAAK,CAAC,EAAE,GAAG;QAClB,WAAW,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;QACrC,QAAQ,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;QAC/B,SAAS,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG;KAC3C,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE9D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAEzE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB,CAAC,QAAiB,EAAE,GAAgB;IAClE,MAAM,KAAK,GAA0B,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,2BAA2B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,KAAK,IAAI,CACrK,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAiB,EAAE,GAAgB;IACpE,MAAM,KAAK,GAA4B,6BAA6B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAExF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CACR,2BAA2B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAC5J,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|