agent-web-interface 4.4.0 → 4.5.0
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/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 +24 -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 +104 -37
- 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/session-manager.d.ts +20 -0
- package/dist/src/browser/session-manager.d.ts.map +1 -1
- package/dist/src/browser/session-manager.js +122 -17
- 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 +137 -0
- package/dist/src/server/tool-result-handler.js.map +1 -0
- package/dist/src/session/session-controller.d.ts +123 -0
- package/dist/src/session/session-controller.d.ts.map +1 -0
- package/dist/src/session/session-controller.js +273 -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 +3 -2
- package/dist/src/tools/browser-tools.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.js +5 -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 +6 -6
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +7 -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 +52 -59
- package/dist/src/tools/navigation-tools.js.map +1 -1
- 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 +141 -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 +180 -0
- package/dist/src/tools/tool-registration.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +88 -1947
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js +21 -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/package.json +7 -3
- 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
|
@@ -5,42 +5,7 @@
|
|
|
5
5
|
* - State tools return `<state>...</state>` (via StateManager)
|
|
6
6
|
* - Data tools return `<result type="...">...</result>` (via builders here)
|
|
7
7
|
*/
|
|
8
|
-
import { getStateManager } from './state-manager-registry.js';
|
|
9
8
|
import { escapeXml, xmlAttr } from '../lib/text-utils.js';
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// State Response Builders (for mutation/navigation tools)
|
|
12
|
-
// ============================================================================
|
|
13
|
-
/**
|
|
14
|
-
* Build an XML state response for a page snapshot.
|
|
15
|
-
*
|
|
16
|
-
* This is the standard way to generate a response for tools that:
|
|
17
|
-
* - Launch/connect browsers
|
|
18
|
-
* - Navigate to URLs
|
|
19
|
-
* - Capture snapshots directly
|
|
20
|
-
* - Perform mutations (click, type, etc.)
|
|
21
|
-
*
|
|
22
|
-
* @param pageId - The page identifier
|
|
23
|
-
* @param snapshot - The captured snapshot
|
|
24
|
-
* @returns XML state response string
|
|
25
|
-
*/
|
|
26
|
-
export function buildStateResponse(pageId, snapshot) {
|
|
27
|
-
const stateManager = getStateManager(pageId);
|
|
28
|
-
return stateManager.generateResponse(snapshot);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Build an error response.
|
|
32
|
-
*
|
|
33
|
-
* This provides a consistent error format across all tools.
|
|
34
|
-
*
|
|
35
|
-
* @param pageId - The page identifier
|
|
36
|
-
* @param error - The error message or Error object
|
|
37
|
-
* @returns XML state response string with error
|
|
38
|
-
*/
|
|
39
|
-
export function buildErrorResponse(pageId, error) {
|
|
40
|
-
const stateManager = getStateManager(pageId);
|
|
41
|
-
const errorMessage = error instanceof Error ? error.message : error;
|
|
42
|
-
return stateManager.generateErrorResponse(errorMessage);
|
|
43
|
-
}
|
|
44
9
|
/**
|
|
45
10
|
* Build XML response for list_pages tool.
|
|
46
11
|
*
|
|
@@ -66,16 +31,6 @@ export function buildClosePageResponse(pageId) {
|
|
|
66
31
|
<closed page_id="${escapeXml(pageId)}" />
|
|
67
32
|
</result>`;
|
|
68
33
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Build XML response for close_session tool.
|
|
71
|
-
*
|
|
72
|
-
* @returns XML result string
|
|
73
|
-
*/
|
|
74
|
-
export function buildCloseSessionResponse() {
|
|
75
|
-
return `<result type="close_session" status="success">
|
|
76
|
-
<closed />
|
|
77
|
-
</result>`;
|
|
78
|
-
}
|
|
79
34
|
/**
|
|
80
35
|
* Build XML response for find_elements tool.
|
|
81
36
|
*
|
|
@@ -105,11 +60,13 @@ export function buildFindElementsResponse(pageId, snapshotId, matches) {
|
|
|
105
60
|
if (m.state.enabled !== undefined)
|
|
106
61
|
attrs.push(`enabled="${m.state.enabled ? 'true' : 'false'}"`);
|
|
107
62
|
if (m.state.checked)
|
|
108
|
-
attrs.push(`checked="true"`);
|
|
63
|
+
attrs.push(`checked="${m.state.checked === 'mixed' ? 'mixed' : 'true'}"`);
|
|
109
64
|
if (m.state.expanded)
|
|
110
65
|
attrs.push(`expanded="true"`);
|
|
111
66
|
if (m.state.selected)
|
|
112
67
|
attrs.push(`selected="true"`);
|
|
68
|
+
if (m.state.pressed)
|
|
69
|
+
attrs.push(`pressed="true"`);
|
|
113
70
|
if (m.state.focused)
|
|
114
71
|
attrs.push(`focused="true"`);
|
|
115
72
|
}
|
|
@@ -129,6 +86,31 @@ export function buildFindElementsResponse(pageId, snapshotId, matches) {
|
|
|
129
86
|
lines.push(`</result>`);
|
|
130
87
|
return lines.join('\n');
|
|
131
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Build XML response for read_page tool.
|
|
91
|
+
*
|
|
92
|
+
* @param article - Extracted article metadata and content
|
|
93
|
+
* @returns XML result string
|
|
94
|
+
*/
|
|
95
|
+
export function buildReadPageResponse(article) {
|
|
96
|
+
const metaAttrs = [xmlAttr('title', article.title)];
|
|
97
|
+
if (article.byline)
|
|
98
|
+
metaAttrs.push(xmlAttr('byline', article.byline));
|
|
99
|
+
if (article.excerpt)
|
|
100
|
+
metaAttrs.push(xmlAttr('excerpt', article.excerpt));
|
|
101
|
+
if (article.siteName)
|
|
102
|
+
metaAttrs.push(xmlAttr('site_name', article.siteName));
|
|
103
|
+
if (article.lang)
|
|
104
|
+
metaAttrs.push(xmlAttr('lang', article.lang));
|
|
105
|
+
const lines = [];
|
|
106
|
+
lines.push('<result type="read_page">');
|
|
107
|
+
lines.push(` <metadata ${metaAttrs.join(' ')} />`);
|
|
108
|
+
lines.push(` <content length="${article.length}">`);
|
|
109
|
+
lines.push(escapeXml(article.textContent.trim()));
|
|
110
|
+
lines.push(' </content>');
|
|
111
|
+
lines.push('</result>');
|
|
112
|
+
return lines.join('\n');
|
|
113
|
+
}
|
|
132
114
|
/**
|
|
133
115
|
* Build XML response for get_element_details tool.
|
|
134
116
|
*
|
|
@@ -171,11 +153,13 @@ export function buildGetElementDetailsResponse(_pageId, _snapshotId, node) {
|
|
|
171
153
|
if (node.state.enabled === false)
|
|
172
154
|
attrs.push('enabled="false"');
|
|
173
155
|
if (node.state.checked)
|
|
174
|
-
attrs.push(
|
|
156
|
+
attrs.push(`checked="${node.state.checked === 'mixed' ? 'mixed' : 'true'}"`);
|
|
175
157
|
if (node.state.expanded)
|
|
176
158
|
attrs.push('expanded="true"');
|
|
177
159
|
if (node.state.selected)
|
|
178
160
|
attrs.push('selected="true"');
|
|
161
|
+
if (node.state.pressed)
|
|
162
|
+
attrs.push('pressed="true"');
|
|
179
163
|
if (node.state.focused)
|
|
180
164
|
attrs.push('focused="true"');
|
|
181
165
|
if (node.state.required)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../../../src/tools/response-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"response-builder.js","sourceRoot":"","sources":["../../../src/tools/response-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stale-element-retry.d.ts","sourceRoot":"","sources":["../../../src/tools/stale-element-retry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASzD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"stale-element-retry.d.ts","sourceRoot":"","sources":["../../../src/tools/stale-element-retry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASzD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB;AA8CD;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAChD,OAAO,EAAE,iBAAiB,EAC1B,aAAa,CAAC,EAAE;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;CAAE,GAC1E,OAAO,CAAC,uBAAuB,CAAC,CA0ClC"}
|
|
@@ -17,6 +17,41 @@ export function isStaleElementError(err) {
|
|
|
17
17
|
message.includes('node is detached from document') ||
|
|
18
18
|
message.includes('node has been deleted'));
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Find the best matching node in a fresh snapshot using label+kind plus
|
|
22
|
+
* location-based disambiguation scoring.
|
|
23
|
+
*
|
|
24
|
+
* Candidates must match on label and kind. Among those, we score by how many
|
|
25
|
+
* `where` properties (region, heading_context, group_id) also match. Ties are
|
|
26
|
+
* broken by choosing the node whose backend_node_id is closest to the original,
|
|
27
|
+
* as a proxy for DOM proximity.
|
|
28
|
+
*/
|
|
29
|
+
function findBestMatch(original, freshNodes) {
|
|
30
|
+
const candidates = freshNodes.filter((n) => n.label === original.label && n.kind === original.kind);
|
|
31
|
+
if (candidates.length <= 1)
|
|
32
|
+
return candidates[0];
|
|
33
|
+
// Score each candidate by matching where-properties
|
|
34
|
+
const scored = candidates.map((candidate) => {
|
|
35
|
+
let score = 0;
|
|
36
|
+
if (candidate.where.region === original.where.region)
|
|
37
|
+
score++;
|
|
38
|
+
if (original.where.heading_context != null &&
|
|
39
|
+
candidate.where.heading_context === original.where.heading_context)
|
|
40
|
+
score++;
|
|
41
|
+
if (original.where.group_id != null && candidate.where.group_id === original.where.group_id)
|
|
42
|
+
score++;
|
|
43
|
+
return { candidate, score };
|
|
44
|
+
});
|
|
45
|
+
// Sort: highest score first, then closest backend_node_id as tiebreaker
|
|
46
|
+
scored.sort((a, b) => {
|
|
47
|
+
if (b.score !== a.score)
|
|
48
|
+
return b.score - a.score;
|
|
49
|
+
const distA = Math.abs(a.candidate.backend_node_id - original.backend_node_id);
|
|
50
|
+
const distB = Math.abs(b.candidate.backend_node_id - original.backend_node_id);
|
|
51
|
+
return distA - distB;
|
|
52
|
+
});
|
|
53
|
+
return scored[0].candidate;
|
|
54
|
+
}
|
|
20
55
|
/**
|
|
21
56
|
* Handle stale element retry logic.
|
|
22
57
|
*
|
|
@@ -35,8 +70,8 @@ export async function handleStaleElementRetry(handle, node, action, capture, sna
|
|
|
35
70
|
if (snapshotStore) {
|
|
36
71
|
snapshotStore.store(handle.page_id, freshSnapshot);
|
|
37
72
|
}
|
|
38
|
-
// Find element by label
|
|
39
|
-
const freshNode =
|
|
73
|
+
// Find element by label+kind, then disambiguate using location context
|
|
74
|
+
const freshNode = findBestMatch(node, freshSnapshot.nodes);
|
|
40
75
|
if (!freshNode) {
|
|
41
76
|
return {
|
|
42
77
|
success: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stale-element-retry.js","sourceRoot":"","sources":["../../../src/tools/stale-element-retry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACtD,OAAO,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC/D,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAClD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAC1C,CAAC;AACJ,CAAC;AAWD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAkB,EAClB,IAAkB,EAClB,MAAgD,EAChD,OAA0B,EAC1B,aAA2E;IAE3E,IAAI,CAAC;QACH,yBAAyB;QACzB,MAAM,aAAa,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC;QAEjD,oCAAoC;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"stale-element-retry.js","sourceRoot":"","sources":["../../../src/tools/stale-element-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool Context
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Implementation helpers used by SessionController for page resolution
|
|
5
|
+
* and CDP session health. These accept a SessionManager parameter rather
|
|
6
|
+
* than using module-level singletons.
|
|
6
7
|
*/
|
|
7
8
|
import type { SessionManager } from '../browser/session-manager.js';
|
|
8
9
|
import type { PageHandle } from '../browser/page-registry.js';
|
|
9
|
-
import type {
|
|
10
|
-
import type { RuntimeHealth } from '../state/health.types.js';
|
|
11
|
-
import { SnapshotStore } from '../snapshot/index.js';
|
|
12
|
-
/**
|
|
13
|
-
* Initialize shared tool context with a session manager.
|
|
14
|
-
* Must be called once before using any tool handlers.
|
|
15
|
-
*/
|
|
16
|
-
export declare function initializeToolContext(manager: SessionManager): void;
|
|
17
|
-
/**
|
|
18
|
-
* Get the session manager, throwing if not initialized.
|
|
19
|
-
*/
|
|
20
|
-
export declare function getSessionManager(): SessionManager;
|
|
21
|
-
/**
|
|
22
|
-
* Get the shared snapshot store instance.
|
|
23
|
-
*/
|
|
24
|
-
export declare function getSnapshotStore(): SnapshotStore;
|
|
10
|
+
import type { CdpSessionResult } from './tool-context.types.js';
|
|
25
11
|
/**
|
|
26
12
|
* Resolve page_id to a PageHandle, throwing if not found.
|
|
27
13
|
* Also touches the page to mark it as MRU.
|
|
28
14
|
*/
|
|
29
15
|
export declare function resolveExistingPage(session: SessionManager, page_id: string | undefined): PageHandle;
|
|
30
|
-
export interface CdpSessionResult {
|
|
31
|
-
handle: PageHandle;
|
|
32
|
-
recovered: boolean;
|
|
33
|
-
runtime_health: RuntimeHealth;
|
|
34
|
-
}
|
|
35
16
|
/**
|
|
36
17
|
* Ensure CDP session is healthy, attempting repair if needed.
|
|
37
18
|
* Call this before any CDP operation to auto-repair dead sessions.
|
|
38
19
|
*/
|
|
39
20
|
export declare function ensureCdpSession(session: SessionManager, handle: PageHandle): Promise<CdpSessionResult>;
|
|
40
|
-
/**
|
|
41
|
-
* Require snapshot for a page, throwing a consistent error if missing.
|
|
42
|
-
*/
|
|
43
|
-
export declare function requireSnapshot(pageId: string): BaseSnapshot;
|
|
44
|
-
/**
|
|
45
|
-
* Resolve element by eid for action tools.
|
|
46
|
-
* Looks up element in registry and finds corresponding node in snapshot.
|
|
47
|
-
* Includes proactive staleness detection before CDP interaction.
|
|
48
|
-
*
|
|
49
|
-
* @throws {ElementNotFoundError} If eid not found in registry
|
|
50
|
-
* @throws {StaleElementError} If eid reference is stale or element not in current snapshot
|
|
51
|
-
*/
|
|
52
|
-
export declare function resolveElementByEid(pageId: string, eid: string, snapshot: BaseSnapshot): ReadableNode;
|
|
53
21
|
//# sourceMappingURL=tool-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-context.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CASZ;AAMD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAoB3B"}
|
|
@@ -1,43 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool Context
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Implementation helpers used by SessionController for page resolution
|
|
5
|
+
* and CDP session health. These accept a SessionManager parameter rather
|
|
6
|
+
* than using module-level singletons.
|
|
6
7
|
*/
|
|
7
8
|
import { createHealthyRuntime, createRecoveredCdpRuntime } from '../state/health.types.js';
|
|
8
|
-
import { SnapshotStore } from '../snapshot/index.js';
|
|
9
|
-
import { getStateManager } from './state-manager-registry.js';
|
|
10
|
-
import { ElementNotFoundError, StaleElementError, SnapshotRequiredError } from './errors.js';
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// Session Manager Singleton
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
let sessionManager = null;
|
|
15
|
-
/**
|
|
16
|
-
* Initialize shared tool context with a session manager.
|
|
17
|
-
* Must be called once before using any tool handlers.
|
|
18
|
-
*/
|
|
19
|
-
export function initializeToolContext(manager) {
|
|
20
|
-
sessionManager = manager;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Get the session manager, throwing if not initialized.
|
|
24
|
-
*/
|
|
25
|
-
export function getSessionManager() {
|
|
26
|
-
if (!sessionManager) {
|
|
27
|
-
throw new Error('Tools not initialized. Call initializeToolContext() first.');
|
|
28
|
-
}
|
|
29
|
-
return sessionManager;
|
|
30
|
-
}
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
// Snapshot Store Singleton
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
const snapshotStore = new SnapshotStore();
|
|
35
|
-
/**
|
|
36
|
-
* Get the shared snapshot store instance.
|
|
37
|
-
*/
|
|
38
|
-
export function getSnapshotStore() {
|
|
39
|
-
return snapshotStore;
|
|
40
|
-
}
|
|
41
9
|
// ---------------------------------------------------------------------------
|
|
42
10
|
// Page Resolution
|
|
43
11
|
// ---------------------------------------------------------------------------
|
|
@@ -53,6 +21,9 @@ export function resolveExistingPage(session, page_id) {
|
|
|
53
21
|
session.touchPage(handle.page_id);
|
|
54
22
|
return handle;
|
|
55
23
|
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// CDP Session Health
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
56
27
|
/**
|
|
57
28
|
* Ensure CDP session is healthy, attempting repair if needed.
|
|
58
29
|
* Call this before any CDP operation to auto-repair dead sessions.
|
|
@@ -76,44 +47,4 @@ export async function ensureCdpSession(session, handle) {
|
|
|
76
47
|
runtime_health: createRecoveredCdpRuntime('HEALTHY'),
|
|
77
48
|
};
|
|
78
49
|
}
|
|
79
|
-
// ---------------------------------------------------------------------------
|
|
80
|
-
// Snapshot Resolution
|
|
81
|
-
// ---------------------------------------------------------------------------
|
|
82
|
-
/**
|
|
83
|
-
* Require snapshot for a page, throwing a consistent error if missing.
|
|
84
|
-
*/
|
|
85
|
-
export function requireSnapshot(pageId) {
|
|
86
|
-
const snap = snapshotStore.getByPageId(pageId);
|
|
87
|
-
if (!snap) {
|
|
88
|
-
throw new SnapshotRequiredError(pageId);
|
|
89
|
-
}
|
|
90
|
-
return snap;
|
|
91
|
-
}
|
|
92
|
-
// ---------------------------------------------------------------------------
|
|
93
|
-
// Element Resolution
|
|
94
|
-
// ---------------------------------------------------------------------------
|
|
95
|
-
/**
|
|
96
|
-
* Resolve element by eid for action tools.
|
|
97
|
-
* Looks up element in registry and finds corresponding node in snapshot.
|
|
98
|
-
* Includes proactive staleness detection before CDP interaction.
|
|
99
|
-
*
|
|
100
|
-
* @throws {ElementNotFoundError} If eid not found in registry
|
|
101
|
-
* @throws {StaleElementError} If eid reference is stale or element not in current snapshot
|
|
102
|
-
*/
|
|
103
|
-
export function resolveElementByEid(pageId, eid, snapshot) {
|
|
104
|
-
const stateManager = getStateManager(pageId);
|
|
105
|
-
const registry = stateManager.getElementRegistry();
|
|
106
|
-
const elementRef = registry.getByEid(eid);
|
|
107
|
-
if (!elementRef) {
|
|
108
|
-
throw new ElementNotFoundError(eid);
|
|
109
|
-
}
|
|
110
|
-
if (registry.isStale(eid)) {
|
|
111
|
-
throw new StaleElementError(eid);
|
|
112
|
-
}
|
|
113
|
-
const node = snapshot.nodes.find((n) => n.backend_node_id === elementRef.ref.backend_node_id);
|
|
114
|
-
if (!node) {
|
|
115
|
-
throw new StaleElementError(eid);
|
|
116
|
-
}
|
|
117
|
-
return node;
|
|
118
|
-
}
|
|
119
50
|
//# sourceMappingURL=tool-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-context.js","sourceRoot":"","sources":["../../../src/tools/tool-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,OAA2B;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,CAAC,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC,CAAC,6CAA6C,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,MAAkB;IAElB,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CACV,mCAAmC,MAAM,CAAC,OAAO,KAAK,OAAO,qBAAqB,CACnF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,yBAAyB,CAAC,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Context Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the ToolContext interface that all tool handlers receive as a parameter.
|
|
5
|
+
* This decouples tool handlers from global singletons, enabling multi-tenancy
|
|
6
|
+
* where each session has its own isolated context.
|
|
7
|
+
*
|
|
8
|
+
* @module tools/tool-context.types
|
|
9
|
+
*/
|
|
10
|
+
import type { SessionManager } from '../browser/session-manager.js';
|
|
11
|
+
import type { PageHandle } from '../browser/page-registry.js';
|
|
12
|
+
import type { BaseSnapshot, ReadableNode } from '../snapshot/snapshot.types.js';
|
|
13
|
+
import type { SnapshotStore } from '../snapshot/snapshot-store.js';
|
|
14
|
+
import type { StateManager } from '../state/state-manager.js';
|
|
15
|
+
import type { DependencyTracker } from '../form/dependency-tracker.js';
|
|
16
|
+
import type { ObservationAccumulator } from '../observation/observation-accumulator.js';
|
|
17
|
+
import type { RuntimeHealth } from '../state/health.types.js';
|
|
18
|
+
import type { BrowserSessionConfig } from '../browser/browser-session-config.js';
|
|
19
|
+
/**
|
|
20
|
+
* Result of ensuring a CDP session is healthy.
|
|
21
|
+
*/
|
|
22
|
+
export interface CdpSessionResult {
|
|
23
|
+
handle: PageHandle;
|
|
24
|
+
recovered: boolean;
|
|
25
|
+
runtime_health: RuntimeHealth;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of capturing a snapshot with recovery.
|
|
29
|
+
*/
|
|
30
|
+
export interface SnapshotCaptureResult {
|
|
31
|
+
snapshot: BaseSnapshot;
|
|
32
|
+
handle: PageHandle;
|
|
33
|
+
runtime_health: RuntimeHealth;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Context interface for tool handler execution.
|
|
37
|
+
*
|
|
38
|
+
* Provides all per-session state that tool handlers need.
|
|
39
|
+
* Replaces module-level singletons with an injectable context object.
|
|
40
|
+
*
|
|
41
|
+
* In single-tenant (stdio) mode, a DefaultToolContext wraps the existing singletons.
|
|
42
|
+
* In multi-tenant (HTTP) mode, a SessionController implements this interface directly.
|
|
43
|
+
*/
|
|
44
|
+
export interface ToolContext {
|
|
45
|
+
/** Unique session identifier */
|
|
46
|
+
readonly sessionId: string;
|
|
47
|
+
/**
|
|
48
|
+
* Ensure the session's browser is ready.
|
|
49
|
+
* Lazily launches/connects based on the session's BrowserSessionConfig.
|
|
50
|
+
* Idempotent — returns immediately if already running.
|
|
51
|
+
*/
|
|
52
|
+
ensureBrowser(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Set the browser configuration for this session.
|
|
55
|
+
* Must be called before the browser is launched/connected.
|
|
56
|
+
* @throws Error if browser is already running
|
|
57
|
+
*/
|
|
58
|
+
setBrowserConfig(config: BrowserSessionConfig): void;
|
|
59
|
+
/**
|
|
60
|
+
* Check if browser configuration can be changed.
|
|
61
|
+
* Returns true if no browser is running (allows config before launch or after crash).
|
|
62
|
+
*/
|
|
63
|
+
canReconfigure(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Shut down the current browser and clear session state so the browser
|
|
66
|
+
* can be reconfigured (e.g., switch from a launched browser to auto_connect).
|
|
67
|
+
* After this call, canReconfigure() returns true.
|
|
68
|
+
*/
|
|
69
|
+
resetBrowser(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Resolve page_id to a PageHandle, returning undefined if not found.
|
|
72
|
+
*/
|
|
73
|
+
resolvePage(pageId?: string): PageHandle | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Resolve page_id to a PageHandle, creating a new page if needed.
|
|
76
|
+
*/
|
|
77
|
+
resolvePageOrCreate(pageId?: string): Promise<PageHandle>;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve page_id to a PageHandle, throwing if not found.
|
|
80
|
+
* Also touches the page to mark it as MRU.
|
|
81
|
+
*/
|
|
82
|
+
resolveExistingPage(pageId?: string): PageHandle;
|
|
83
|
+
/**
|
|
84
|
+
* Touch a page to mark it as most recently used.
|
|
85
|
+
*/
|
|
86
|
+
touchPage(pageId: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Close a page and clean up its resources.
|
|
89
|
+
*/
|
|
90
|
+
closePage(pageId: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Sync with browser context to pick up unregistered pages.
|
|
93
|
+
* Returns all registered pages after sync.
|
|
94
|
+
*/
|
|
95
|
+
syncPages(): Promise<PageHandle[]>;
|
|
96
|
+
/**
|
|
97
|
+
* Navigate a page to a URL.
|
|
98
|
+
*/
|
|
99
|
+
navigateTo(pageId: string, url: string): Promise<void>;
|
|
100
|
+
/** Get the session manager for browser lifecycle operations. */
|
|
101
|
+
getSessionManager(): SessionManager;
|
|
102
|
+
/** Get the snapshot store for this session. */
|
|
103
|
+
getSnapshotStore(): SnapshotStore;
|
|
104
|
+
/** Get or create a state manager for a specific page. */
|
|
105
|
+
getStateManager(pageId: string): StateManager;
|
|
106
|
+
/** Remove the state manager for a page (on page close). */
|
|
107
|
+
removeStateManager(pageId: string): void;
|
|
108
|
+
/** Clear all state managers (on session close). */
|
|
109
|
+
clearAllStateManagers(): void;
|
|
110
|
+
/** Get the dependency tracker for this session. */
|
|
111
|
+
getDependencyTracker(): DependencyTracker;
|
|
112
|
+
/** Get the observation accumulator for this session. */
|
|
113
|
+
getObservationAccumulator(): ObservationAccumulator;
|
|
114
|
+
/**
|
|
115
|
+
* Ensure CDP session is healthy, attempting repair if needed.
|
|
116
|
+
* Call this before any CDP operation to auto-repair dead sessions.
|
|
117
|
+
*/
|
|
118
|
+
ensureCdpSession(handle: PageHandle): Promise<CdpSessionResult>;
|
|
119
|
+
/**
|
|
120
|
+
* Capture a snapshot with stabilization and CDP recovery when empty.
|
|
121
|
+
*/
|
|
122
|
+
captureSnapshotWithRecovery(handle: PageHandle, pageId: string): Promise<SnapshotCaptureResult>;
|
|
123
|
+
/**
|
|
124
|
+
* Require a snapshot for a page, throwing if none exists.
|
|
125
|
+
*/
|
|
126
|
+
requireSnapshot(pageId: string): BaseSnapshot;
|
|
127
|
+
/**
|
|
128
|
+
* Resolve an element by eid from the snapshot.
|
|
129
|
+
* Includes proactive staleness detection.
|
|
130
|
+
*
|
|
131
|
+
* @throws {ElementNotFoundError} If eid not found in registry
|
|
132
|
+
* @throws {StaleElementError} If eid reference is stale
|
|
133
|
+
*/
|
|
134
|
+
resolveElementByEid(pageId: string, eid: string, snapshot: BaseSnapshot): ReadableNode;
|
|
135
|
+
/**
|
|
136
|
+
* Close the session and clean up all resources (browser, snapshots, state, etc.).
|
|
137
|
+
* Implementations should be idempotent — repeated calls are safe no-ops.
|
|
138
|
+
*/
|
|
139
|
+
close(): Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=tool-context.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.types.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-context.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Context Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the ToolContext interface that all tool handlers receive as a parameter.
|
|
5
|
+
* This decouples tool handlers from global singletons, enabling multi-tenancy
|
|
6
|
+
* where each session has its own isolated context.
|
|
7
|
+
*
|
|
8
|
+
* @module tools/tool-context.types
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=tool-context.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-context.types.js","sourceRoot":"","sources":["../../../src/tools/tool-context.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registration
|
|
3
|
+
*
|
|
4
|
+
* Extracts all 23 MCP tool registrations into a reusable function.
|
|
5
|
+
* Used by both stdio (index.ts) and HTTP (http-gateway.ts) entry points.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolContext } from './tool-context.types.js';
|
|
8
|
+
import type { ToolRegistrar } from '../server/tool-registrar.types.js';
|
|
9
|
+
export type { ToolRegistrar } from '../server/tool-registrar.types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Context resolver function type.
|
|
12
|
+
* Returns a ToolContext for the current request.
|
|
13
|
+
*/
|
|
14
|
+
export type ContextResolver = () => ToolContext | Promise<ToolContext>;
|
|
15
|
+
/**
|
|
16
|
+
* Register all browser automation tools on an MCP server.
|
|
17
|
+
*
|
|
18
|
+
* Browser initialization is session-scoped: each ToolContext owns its own
|
|
19
|
+
* SessionManager and lazily launches/connects via ctx.ensureBrowser().
|
|
20
|
+
*
|
|
21
|
+
* @param server - The MCP server instance
|
|
22
|
+
* @param resolveCtx - Function that returns the ToolContext for the current request
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerAllTools(server: ToolRegistrar, resolveCtx: ContextResolver): void;
|
|
25
|
+
//# sourceMappingURL=tool-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registration.d.ts","sourceRoot":"","sources":["../../../src/tools/tool-registration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,YAAY,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AA4CvE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAKvE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA0RzF"}
|