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
|
@@ -3,17 +3,9 @@
|
|
|
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
|
-
import { getDependencyTracker } from '../form/index.js';
|
|
13
|
-
import { getSessionManager, getSnapshotStore } from './tool-context.js';
|
|
14
|
-
import { captureSnapshotWithRecovery } from './action-context.js';
|
|
15
|
-
// Convenience alias for module-internal use
|
|
16
|
-
const snapshotStore = getSnapshotStore();
|
|
8
|
+
import { buildClosePageResponse, buildListPagesResponse } from './response-builder.js';
|
|
17
9
|
/**
|
|
18
10
|
* Execute a navigation action with snapshot capture.
|
|
19
11
|
* Consolidates goBack, goForward, and reload handlers.
|
|
@@ -25,13 +17,12 @@ const snapshotStore = getSnapshotStore();
|
|
|
25
17
|
* @param action - Navigation action to execute
|
|
26
18
|
* @returns State response after navigation
|
|
27
19
|
*/
|
|
28
|
-
async function executeNavigationAction(pageId, action) {
|
|
29
|
-
|
|
30
|
-
let handle = await session.resolvePageOrCreate(pageId);
|
|
20
|
+
async function executeNavigationAction(pageId, ctx, action) {
|
|
21
|
+
let handle = await ctx.resolvePageOrCreate(pageId);
|
|
31
22
|
const page_id = handle.page_id;
|
|
32
|
-
|
|
23
|
+
ctx.touchPage(page_id);
|
|
33
24
|
// Clear dependency tracker before navigation (old dependencies no longer valid)
|
|
34
|
-
getDependencyTracker().clearPage(page_id);
|
|
25
|
+
ctx.getDependencyTracker().clearPage(page_id);
|
|
35
26
|
// Execute navigation
|
|
36
27
|
switch (action) {
|
|
37
28
|
case 'back':
|
|
@@ -47,14 +38,14 @@ async function executeNavigationAction(pageId, action) {
|
|
|
47
38
|
// Wait for page to stabilize (DOM + network idle)
|
|
48
39
|
await stabilizeAfterNavigation(handle.page);
|
|
49
40
|
// Re-inject observation accumulator (new document context after navigation)
|
|
50
|
-
await
|
|
41
|
+
await ctx.getObservationAccumulator().inject(handle.page);
|
|
51
42
|
// Auto-capture snapshot after navigation
|
|
52
|
-
const captureResult = await captureSnapshotWithRecovery(
|
|
43
|
+
const captureResult = await ctx.captureSnapshotWithRecovery(handle, page_id);
|
|
53
44
|
handle = captureResult.handle;
|
|
54
45
|
const snapshot = captureResult.snapshot;
|
|
55
|
-
|
|
46
|
+
ctx.getSnapshotStore().store(page_id, snapshot);
|
|
56
47
|
// Return XML state response (trimmed for navigation snapshots)
|
|
57
|
-
const stateManager = getStateManager(page_id);
|
|
48
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
58
49
|
return stateManager.generateResponse(snapshot, { trimRegions: true });
|
|
59
50
|
}
|
|
60
51
|
/**
|
|
@@ -65,10 +56,9 @@ async function executeNavigationAction(pageId, action) {
|
|
|
65
56
|
*
|
|
66
57
|
* @returns XML result with page list
|
|
67
58
|
*/
|
|
68
|
-
export async function listPages() {
|
|
69
|
-
const session = getSessionManager();
|
|
59
|
+
export async function listPages(rawInput, ctx) {
|
|
70
60
|
// Sync to pick up any unregistered browser tabs
|
|
71
|
-
const pages = await
|
|
61
|
+
const pages = await ctx.syncPages();
|
|
72
62
|
const pageInfos = await Promise.all(pages.map(async (h) => {
|
|
73
63
|
const liveUrl = h.page.url?.() ?? h.url ?? '';
|
|
74
64
|
let liveTitle = h.title ?? '';
|
|
@@ -96,53 +86,56 @@ export async function listPages() {
|
|
|
96
86
|
* @param rawInput - Close options (will be validated)
|
|
97
87
|
* @returns Close result
|
|
98
88
|
*/
|
|
99
|
-
export async function closePage(rawInput) {
|
|
89
|
+
export async function closePage(rawInput, ctx) {
|
|
100
90
|
const input = ClosePageInputSchema.parse(rawInput);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
getDependencyTracker().clearPage(input.page_id); // Clean up dependencies
|
|
91
|
+
await ctx.closePage(input.page_id);
|
|
92
|
+
ctx.getSnapshotStore().removeByPageId(input.page_id);
|
|
93
|
+
ctx.removeStateManager(input.page_id); // Clean up state manager
|
|
94
|
+
ctx.getDependencyTracker().clearPage(input.page_id); // Clean up dependencies
|
|
106
95
|
return buildClosePageResponse(input.page_id);
|
|
107
96
|
}
|
|
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
97
|
/**
|
|
125
98
|
* Navigate to a URL.
|
|
126
99
|
*
|
|
127
100
|
* @param rawInput - Navigation options (will be validated)
|
|
128
101
|
* @returns Navigation result with snapshot data
|
|
129
102
|
*/
|
|
130
|
-
export async function navigate(rawInput) {
|
|
103
|
+
export async function navigate(rawInput, ctx) {
|
|
131
104
|
const input = NavigateInputSchema.parse(rawInput);
|
|
132
|
-
|
|
133
|
-
|
|
105
|
+
// Apply browser preferences if provided
|
|
106
|
+
if (input.headless !== undefined ||
|
|
107
|
+
input.isolated !== undefined ||
|
|
108
|
+
input.auto_connect !== undefined) {
|
|
109
|
+
// auto_connect means "connect to my existing Chrome, not a launched browser".
|
|
110
|
+
// If a launched browser is already running, shut it down first so we can
|
|
111
|
+
// reconnect to the user's Chrome instead.
|
|
112
|
+
if (input.auto_connect && !ctx.canReconfigure()) {
|
|
113
|
+
await ctx.resetBrowser();
|
|
114
|
+
}
|
|
115
|
+
if (ctx.canReconfigure()) {
|
|
116
|
+
ctx.setBrowserConfig({
|
|
117
|
+
headless: input.headless,
|
|
118
|
+
isolated: input.isolated,
|
|
119
|
+
autoConnect: input.auto_connect,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// navigate is excluded from the pre-handler ensureBrowser() call so that
|
|
124
|
+
// browser config (auto_connect, headless, isolated) can be set first.
|
|
125
|
+
await ctx.ensureBrowser();
|
|
126
|
+
let handle = await ctx.resolvePageOrCreate(input.page_id);
|
|
134
127
|
const page_id = handle.page_id;
|
|
135
|
-
|
|
128
|
+
ctx.touchPage(page_id);
|
|
136
129
|
// Clear dependency tracker before navigation (old dependencies no longer valid)
|
|
137
|
-
getDependencyTracker().clearPage(page_id);
|
|
138
|
-
await
|
|
130
|
+
ctx.getDependencyTracker().clearPage(page_id);
|
|
131
|
+
await ctx.navigateTo(page_id, input.url);
|
|
139
132
|
// Auto-capture snapshot after navigation
|
|
140
|
-
const captureResult = await captureSnapshotWithRecovery(
|
|
133
|
+
const captureResult = await ctx.captureSnapshotWithRecovery(handle, page_id);
|
|
141
134
|
handle = captureResult.handle;
|
|
142
135
|
const snapshot = captureResult.snapshot;
|
|
143
|
-
|
|
136
|
+
ctx.getSnapshotStore().store(page_id, snapshot);
|
|
144
137
|
// Return XML state response directly (trimmed for navigation snapshots)
|
|
145
|
-
const stateManager = getStateManager(page_id);
|
|
138
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
146
139
|
return stateManager.generateResponse(snapshot, { trimRegions: true });
|
|
147
140
|
}
|
|
148
141
|
/**
|
|
@@ -151,9 +144,9 @@ export async function navigate(rawInput) {
|
|
|
151
144
|
* @param rawInput - Navigation options (will be validated)
|
|
152
145
|
* @returns Navigation result with snapshot data
|
|
153
146
|
*/
|
|
154
|
-
export async function goBack(rawInput) {
|
|
147
|
+
export async function goBack(rawInput, ctx) {
|
|
155
148
|
const input = GoBackInputSchema.parse(rawInput);
|
|
156
|
-
return executeNavigationAction(input.page_id, 'back');
|
|
149
|
+
return executeNavigationAction(input.page_id, ctx, 'back');
|
|
157
150
|
}
|
|
158
151
|
/**
|
|
159
152
|
* Go forward in browser history.
|
|
@@ -161,9 +154,9 @@ export async function goBack(rawInput) {
|
|
|
161
154
|
* @param rawInput - Navigation options (will be validated)
|
|
162
155
|
* @returns Navigation result with snapshot data
|
|
163
156
|
*/
|
|
164
|
-
export async function goForward(rawInput) {
|
|
157
|
+
export async function goForward(rawInput, ctx) {
|
|
165
158
|
const input = GoForwardInputSchema.parse(rawInput);
|
|
166
|
-
return executeNavigationAction(input.page_id, 'forward');
|
|
159
|
+
return executeNavigationAction(input.page_id, ctx, 'forward');
|
|
167
160
|
}
|
|
168
161
|
/**
|
|
169
162
|
* Reload the current page.
|
|
@@ -171,8 +164,8 @@ export async function goForward(rawInput) {
|
|
|
171
164
|
* @param rawInput - Navigation options (will be validated)
|
|
172
165
|
* @returns Navigation result with snapshot data
|
|
173
166
|
*/
|
|
174
|
-
export async function reload(rawInput) {
|
|
167
|
+
export async function reload(rawInput, ctx) {
|
|
175
168
|
const input = ReloadInputSchema.parse(rawInput);
|
|
176
|
-
return executeNavigationAction(input.page_id, 'reload');
|
|
169
|
+
return executeNavigationAction(input.page_id, ctx, 'reload');
|
|
177
170
|
}
|
|
178
171
|
//# 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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"}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* MCP tool handlers for page observation: snapshots, find, get_element, scroll.
|
|
5
5
|
*/
|
|
6
6
|
import type { NodeKind } from '../snapshot/snapshot.types.js';
|
|
7
|
+
import type { ToolContext } from './tool-context.types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Capture a fresh snapshot of the current page.
|
|
9
10
|
*
|
|
10
11
|
* @param rawInput - Capture options (will be validated)
|
|
11
12
|
* @returns Snapshot data for the current page
|
|
12
13
|
*/
|
|
13
|
-
export declare function captureSnapshot(rawInput: unknown): Promise<import('./tool-schemas.js').CaptureSnapshotOutput>;
|
|
14
|
+
export declare function captureSnapshot(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').CaptureSnapshotOutput>;
|
|
14
15
|
/**
|
|
15
16
|
* Map schema kind values to internal NodeKind values.
|
|
16
17
|
*
|
|
@@ -28,26 +29,26 @@ export declare function mapSchemaKindToNodeKind(schemaKind: string): NodeKind |
|
|
|
28
29
|
* @param rawInput - Query filters (will be validated)
|
|
29
30
|
* @returns Matched nodes
|
|
30
31
|
*/
|
|
31
|
-
export declare function findElements(rawInput: unknown): import('./tool-schemas.js').FindElementsOutput;
|
|
32
|
+
export declare function findElements(rawInput: unknown, ctx: ToolContext): import('./tool-schemas.js').FindElementsOutput;
|
|
32
33
|
/**
|
|
33
34
|
* Get full details for a specific node.
|
|
34
35
|
*
|
|
35
36
|
* @param rawInput - Node details request (will be validated)
|
|
36
37
|
* @returns Full node details
|
|
37
38
|
*/
|
|
38
|
-
export declare function getNodeDetails(rawInput: unknown): import('./tool-schemas.js').GetNodeDetailsOutput;
|
|
39
|
+
export declare function getNodeDetails(rawInput: unknown, ctx: ToolContext): import('./tool-schemas.js').GetNodeDetailsOutput;
|
|
39
40
|
/**
|
|
40
41
|
* Scroll an element into view.
|
|
41
42
|
*
|
|
42
43
|
* @param rawInput - Scroll options (will be validated)
|
|
43
44
|
* @returns Scroll result with delta
|
|
44
45
|
*/
|
|
45
|
-
export declare function scrollElementIntoView(rawInput: unknown): Promise<import('./tool-schemas.js').ScrollElementIntoViewOutput>;
|
|
46
|
+
export declare function scrollElementIntoView(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').ScrollElementIntoViewOutput>;
|
|
46
47
|
/**
|
|
47
48
|
* Scroll the page up or down.
|
|
48
49
|
*
|
|
49
50
|
* @param rawInput - Scroll options (will be validated)
|
|
50
51
|
* @returns Scroll result with delta
|
|
51
52
|
*/
|
|
52
|
-
export declare function scrollPage(rawInput: unknown): Promise<import('./tool-schemas.js').ScrollPageOutput>;
|
|
53
|
+
export declare function scrollPage(rawInput: unknown, ctx: ToolContext): Promise<import('./tool-schemas.js').ScrollPageOutput>;
|
|
53
54
|
//# sourceMappingURL=observation-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/observation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"observation-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/observation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,+BAA+B,CAAC;AAW9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,qBAAqB,CAAC,CA8B5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,CASjF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,mBAAmB,EAAE,kBAAkB,CA0FhD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,mBAAmB,EAAE,oBAAoB,CAoDlD;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,2BAA2B,CAAC,CAwBlE;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,OAAO,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,OAAO,mBAAmB,EAAE,gBAAgB,CAAC,CAmBvD"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* MCP tool handlers for page observation: snapshots, find, get_element, scroll.
|
|
5
5
|
*/
|
|
6
6
|
import { scrollIntoView, scrollPage as scrollPageByAmount } from '../snapshot/index.js';
|
|
7
|
-
import { observationAccumulator } from '../observation/index.js';
|
|
8
7
|
import { ATTACHMENT_SIGNIFICANCE_THRESHOLD } from '../observation/observation.types.js';
|
|
9
8
|
import { CaptureSnapshotInputSchema, FindElementsInputSchema, GetNodeDetailsInputSchema, ScrollElementIntoViewInputSchema, ScrollPageInputSchema, } from './tool-schemas.js';
|
|
10
9
|
import { QueryEngine } from '../query/query-engine.js';
|
|
@@ -12,37 +11,36 @@ import { isReadableNode, isStructuralNode, isLiveRegionNode } from '../snapshot/
|
|
|
12
11
|
import { computeEid } from '../state/element-identity.js';
|
|
13
12
|
import { LIVE_REGION_KINDS } from '../state/actionables-filter.js';
|
|
14
13
|
import { executeAction, executeActionWithRetry } from './execute-action.js';
|
|
15
|
-
import { getStateManager } from './state-manager-registry.js';
|
|
16
14
|
import { buildFindElementsResponse, buildGetElementDetailsResponse, } from './response-builder.js';
|
|
17
|
-
import {
|
|
18
|
-
import { captureSnapshotWithRecovery, prepareActionContext } from './action-context.js';
|
|
19
|
-
// Convenience alias for module-internal use
|
|
20
|
-
const snapshotStore = getSnapshotStore();
|
|
15
|
+
import { prepareActionContext } from './action-context.js';
|
|
21
16
|
/**
|
|
22
17
|
* Capture a fresh snapshot of the current page.
|
|
23
18
|
*
|
|
24
19
|
* @param rawInput - Capture options (will be validated)
|
|
25
20
|
* @returns Snapshot data for the current page
|
|
26
21
|
*/
|
|
27
|
-
export async function captureSnapshot(rawInput) {
|
|
22
|
+
export async function captureSnapshot(rawInput, ctx) {
|
|
28
23
|
const input = CaptureSnapshotInputSchema.parse(rawInput);
|
|
29
|
-
|
|
30
|
-
let handle = resolveExistingPage(session, input.page_id);
|
|
24
|
+
let handle = ctx.resolveExistingPage(input.page_id);
|
|
31
25
|
const page_id = handle.page_id;
|
|
32
26
|
// Capture any accumulated observations (no action window)
|
|
33
|
-
const observations = await
|
|
34
|
-
|
|
27
|
+
const observations = await ctx
|
|
28
|
+
.getObservationAccumulator()
|
|
29
|
+
.getAccumulatedObservations(handle.page);
|
|
30
|
+
const captureResult = await ctx.captureSnapshotWithRecovery(handle, page_id);
|
|
35
31
|
handle = captureResult.handle;
|
|
36
32
|
const snapshot = captureResult.snapshot;
|
|
37
33
|
// Filter observations to reduce noise (threshold 5 requires semantic signals)
|
|
38
|
-
const filteredObservations =
|
|
34
|
+
const filteredObservations = ctx
|
|
35
|
+
.getObservationAccumulator()
|
|
36
|
+
.filterBySignificance(observations, ATTACHMENT_SIGNIFICANCE_THRESHOLD);
|
|
39
37
|
// Attach accumulated observations to snapshot if any
|
|
40
38
|
if (filteredObservations.sincePrevious.length > 0) {
|
|
41
39
|
snapshot.observations = filteredObservations;
|
|
42
40
|
}
|
|
43
|
-
|
|
41
|
+
ctx.getSnapshotStore().store(page_id, snapshot);
|
|
44
42
|
// Return XML state response directly (trimmed for observation snapshots)
|
|
45
|
-
const stateManager = getStateManager(page_id);
|
|
43
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
46
44
|
return stateManager.generateResponse(snapshot, { trimRegions: true });
|
|
47
45
|
}
|
|
48
46
|
/**
|
|
@@ -71,12 +69,11 @@ export function mapSchemaKindToNodeKind(schemaKind) {
|
|
|
71
69
|
* @param rawInput - Query filters (will be validated)
|
|
72
70
|
* @returns Matched nodes
|
|
73
71
|
*/
|
|
74
|
-
export function findElements(rawInput) {
|
|
72
|
+
export function findElements(rawInput, ctx) {
|
|
75
73
|
const input = FindElementsInputSchema.parse(rawInput);
|
|
76
|
-
const
|
|
77
|
-
const handle = resolveExistingPage(session, input.page_id);
|
|
74
|
+
const handle = ctx.resolveExistingPage(input.page_id);
|
|
78
75
|
const page_id = handle.page_id;
|
|
79
|
-
const snap =
|
|
76
|
+
const snap = ctx.getSnapshotStore().getByPageId(page_id);
|
|
80
77
|
if (!snap) {
|
|
81
78
|
throw new Error(`No snapshot for page ${page_id} - capture a snapshot first`);
|
|
82
79
|
}
|
|
@@ -96,7 +93,7 @@ export function findElements(rawInput) {
|
|
|
96
93
|
const engine = new QueryEngine(snap);
|
|
97
94
|
const response = engine.find(request);
|
|
98
95
|
// Get registry and state manager for EID lookup
|
|
99
|
-
const stateManager = getStateManager(page_id);
|
|
96
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
100
97
|
const registry = stateManager.getElementRegistry();
|
|
101
98
|
const activeLayer = stateManager.getActiveLayer();
|
|
102
99
|
const matches = response.matches.map((m) => {
|
|
@@ -159,17 +156,16 @@ export function findElements(rawInput) {
|
|
|
159
156
|
* @param rawInput - Node details request (will be validated)
|
|
160
157
|
* @returns Full node details
|
|
161
158
|
*/
|
|
162
|
-
export function getNodeDetails(rawInput) {
|
|
159
|
+
export function getNodeDetails(rawInput, ctx) {
|
|
163
160
|
const input = GetNodeDetailsInputSchema.parse(rawInput);
|
|
164
|
-
const
|
|
165
|
-
const handle = resolveExistingPage(session, input.page_id);
|
|
161
|
+
const handle = ctx.resolveExistingPage(input.page_id);
|
|
166
162
|
const page_id = handle.page_id;
|
|
167
|
-
const snap =
|
|
163
|
+
const snap = ctx.getSnapshotStore().getByPageId(page_id);
|
|
168
164
|
if (!snap) {
|
|
169
165
|
throw new Error(`No snapshot for page ${page_id} - capture a snapshot first`);
|
|
170
166
|
}
|
|
171
167
|
// Look up element by EID from registry
|
|
172
|
-
const stateManager = getStateManager(page_id);
|
|
168
|
+
const stateManager = ctx.getStateManager(page_id);
|
|
173
169
|
const elementRef = stateManager.getElementRegistry().getByEid(input.eid);
|
|
174
170
|
if (!elementRef) {
|
|
175
171
|
throw new Error(`Element with eid ${input.eid} not found in registry`);
|
|
@@ -212,17 +208,17 @@ export function getNodeDetails(rawInput) {
|
|
|
212
208
|
* @param rawInput - Scroll options (will be validated)
|
|
213
209
|
* @returns Scroll result with delta
|
|
214
210
|
*/
|
|
215
|
-
export async function scrollElementIntoView(rawInput) {
|
|
211
|
+
export async function scrollElementIntoView(rawInput, ctx) {
|
|
216
212
|
const input = ScrollElementIntoViewInputSchema.parse(rawInput);
|
|
217
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
218
|
-
const snap = requireSnapshot(pageId);
|
|
219
|
-
const node = resolveElementByEid(pageId, input.eid, snap);
|
|
213
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
214
|
+
const snap = ctx.requireSnapshot(pageId);
|
|
215
|
+
const node = ctx.resolveElementByEid(pageId, input.eid, snap);
|
|
220
216
|
// Execute action with automatic retry on stale elements
|
|
221
217
|
const result = await executeActionWithRetry(handleRef.current, node, async (backendNodeId) => {
|
|
222
218
|
await scrollIntoView(handleRef.current.cdp, backendNodeId);
|
|
223
|
-
},
|
|
219
|
+
}, ctx, ctx.getSnapshotStore(), captureSnapshot);
|
|
224
220
|
// Store snapshot for future queries
|
|
225
|
-
|
|
221
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
226
222
|
// Return XML state response directly
|
|
227
223
|
return result.state_response;
|
|
228
224
|
}
|
|
@@ -232,15 +228,15 @@ export async function scrollElementIntoView(rawInput) {
|
|
|
232
228
|
* @param rawInput - Scroll options (will be validated)
|
|
233
229
|
* @returns Scroll result with delta
|
|
234
230
|
*/
|
|
235
|
-
export async function scrollPage(rawInput) {
|
|
231
|
+
export async function scrollPage(rawInput, ctx) {
|
|
236
232
|
const input = ScrollPageInputSchema.parse(rawInput);
|
|
237
|
-
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id);
|
|
233
|
+
const { handleRef, pageId, captureSnapshot } = await prepareActionContext(input.page_id, ctx);
|
|
238
234
|
// Execute action with new simplified wrapper
|
|
239
235
|
const result = await executeAction(handleRef.current, async () => {
|
|
240
236
|
await scrollPageByAmount(handleRef.current.cdp, input.direction, input.amount);
|
|
241
|
-
}, captureSnapshot);
|
|
237
|
+
}, ctx, captureSnapshot);
|
|
242
238
|
// Store snapshot for future queries
|
|
243
|
-
|
|
239
|
+
ctx.getSnapshotStore().store(pageId, result.snapshot);
|
|
244
240
|
// Return XML state response directly
|
|
245
241
|
return result.state_response;
|
|
246
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observation-tools.js","sourceRoot":"","sources":["../../../src/tools/observation-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"observation-tools.js","sourceRoot":"","sources":["../../../src/tools/observation-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Readability Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handler for extracting clean, readable page content
|
|
5
|
+
* using Mozilla's Readability.js (the engine behind Firefox Reader View).
|
|
6
|
+
*/
|
|
7
|
+
import { type ReadPageOutput } from './tool-schemas.js';
|
|
8
|
+
import type { ToolContext } from './tool-context.types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Extract the main readable content from the page.
|
|
11
|
+
*
|
|
12
|
+
* Uses Mozilla Readability (Firefox Reader View engine) to strip
|
|
13
|
+
* navigation, ads, and clutter, returning clean text with metadata.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readPage(rawInput: unknown, ctx: ToolContext): Promise<ReadPageOutput>;
|
|
16
|
+
//# sourceMappingURL=readability-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readability-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/readability-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CA+B3F"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Readability Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool handler for extracting clean, readable page content
|
|
5
|
+
* using Mozilla's Readability.js (the engine behind Firefox Reader View).
|
|
6
|
+
*/
|
|
7
|
+
import { Readability } from '@mozilla/readability';
|
|
8
|
+
import { JSDOM } from 'jsdom';
|
|
9
|
+
import { ReadPageInputSchema } from './tool-schemas.js';
|
|
10
|
+
import { buildReadPageResponse } from './response-builder.js';
|
|
11
|
+
/**
|
|
12
|
+
* Extract the main readable content from the page.
|
|
13
|
+
*
|
|
14
|
+
* Uses Mozilla Readability (Firefox Reader View engine) to strip
|
|
15
|
+
* navigation, ads, and clutter, returning clean text with metadata.
|
|
16
|
+
*/
|
|
17
|
+
export async function readPage(rawInput, ctx) {
|
|
18
|
+
const input = ReadPageInputSchema.parse(rawInput);
|
|
19
|
+
const handle = ctx.resolveExistingPage(input.page_id);
|
|
20
|
+
// Get full page HTML and URL
|
|
21
|
+
const html = await handle.page.content();
|
|
22
|
+
const url = handle.page.url();
|
|
23
|
+
// Parse with JSDOM and extract with Readability
|
|
24
|
+
const doc = new JSDOM(html, { url });
|
|
25
|
+
try {
|
|
26
|
+
const reader = new Readability(doc.window.document);
|
|
27
|
+
const article = reader.parse();
|
|
28
|
+
if (!article) {
|
|
29
|
+
return '<result type="read_page"><error>Could not extract readable content from this page. The page may not have article-like content. Try using snapshot instead for structured page state.</error></result>';
|
|
30
|
+
}
|
|
31
|
+
return buildReadPageResponse({
|
|
32
|
+
title: article.title ?? '',
|
|
33
|
+
byline: article.byline ?? null,
|
|
34
|
+
excerpt: article.excerpt ?? null,
|
|
35
|
+
siteName: article.siteName ?? null,
|
|
36
|
+
lang: article.lang ?? null,
|
|
37
|
+
textContent: article.textContent ?? '',
|
|
38
|
+
length: article.length ?? 0,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
doc.window.close();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=readability-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readability-tools.js","sourceRoot":"","sources":["../../../src/tools/readability-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAuB,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAiB,EAAE,GAAgB;IAChE,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAE9B,gDAAgD;IAChD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,uMAAuM,CAAC;QACjN,CAAC;QAED,OAAO,qBAAqB,CAAC;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -5,33 +5,8 @@
|
|
|
5
5
|
* - State tools return `<state>...</state>` (via StateManager)
|
|
6
6
|
* - Data tools return `<result type="...">...</result>` (via builders here)
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
9
|
-
import type { StateResponse } from '../state/types.js';
|
|
8
|
+
import type { NodeState } from '../snapshot/snapshot.types.js';
|
|
10
9
|
import type { NodeDetails } from './tool-schemas.js';
|
|
11
|
-
/**
|
|
12
|
-
* Build an XML state response for a page snapshot.
|
|
13
|
-
*
|
|
14
|
-
* This is the standard way to generate a response for tools that:
|
|
15
|
-
* - Launch/connect browsers
|
|
16
|
-
* - Navigate to URLs
|
|
17
|
-
* - Capture snapshots directly
|
|
18
|
-
* - Perform mutations (click, type, etc.)
|
|
19
|
-
*
|
|
20
|
-
* @param pageId - The page identifier
|
|
21
|
-
* @param snapshot - The captured snapshot
|
|
22
|
-
* @returns XML state response string
|
|
23
|
-
*/
|
|
24
|
-
export declare function buildStateResponse(pageId: string, snapshot: BaseSnapshot): StateResponse;
|
|
25
|
-
/**
|
|
26
|
-
* Build an error response.
|
|
27
|
-
*
|
|
28
|
-
* This provides a consistent error format across all tools.
|
|
29
|
-
*
|
|
30
|
-
* @param pageId - The page identifier
|
|
31
|
-
* @param error - The error message or Error object
|
|
32
|
-
* @returns XML state response string with error
|
|
33
|
-
*/
|
|
34
|
-
export declare function buildErrorResponse(pageId: string, error: Error | string): StateResponse;
|
|
35
10
|
/**
|
|
36
11
|
* Page metadata for list_pages response.
|
|
37
12
|
*/
|
|
@@ -54,12 +29,6 @@ export declare function buildListPagesResponse(pages: PageInfo[]): string;
|
|
|
54
29
|
* @returns XML result string
|
|
55
30
|
*/
|
|
56
31
|
export declare function buildClosePageResponse(pageId: string): string;
|
|
57
|
-
/**
|
|
58
|
-
* Build XML response for close_session tool.
|
|
59
|
-
*
|
|
60
|
-
* @returns XML result string
|
|
61
|
-
*/
|
|
62
|
-
export declare function buildCloseSessionResponse(): string;
|
|
63
32
|
/**
|
|
64
33
|
* Match item from find_elements query.
|
|
65
34
|
*/
|
|
@@ -83,6 +52,25 @@ export interface FindElementsMatch {
|
|
|
83
52
|
* @returns XML result string
|
|
84
53
|
*/
|
|
85
54
|
export declare function buildFindElementsResponse(pageId: string, snapshotId: string, matches: FindElementsMatch[]): string;
|
|
55
|
+
/**
|
|
56
|
+
* Article metadata for read_page response.
|
|
57
|
+
*/
|
|
58
|
+
export interface ReadPageArticle {
|
|
59
|
+
title: string;
|
|
60
|
+
byline: string | null;
|
|
61
|
+
excerpt: string | null;
|
|
62
|
+
siteName: string | null;
|
|
63
|
+
lang: string | null;
|
|
64
|
+
textContent: string;
|
|
65
|
+
length: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build XML response for read_page tool.
|
|
69
|
+
*
|
|
70
|
+
* @param article - Extracted article metadata and content
|
|
71
|
+
* @returns XML result string
|
|
72
|
+
*/
|
|
73
|
+
export declare function buildReadPageResponse(article: ReadPageArticle): string;
|
|
86
74
|
/**
|
|
87
75
|
* Build XML response for get_element_details tool.
|
|
88
76
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../../../src/tools/response-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"response-builder.d.ts","sourceRoot":"","sources":["../../../src/tools/response-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAWhE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,EAAE,GAC3B,MAAM,CAiDR;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,MAAM,CAuER"}
|