agent-web-interface 4.4.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -34
- package/dist/src/browser/browser-session-config.d.ts +33 -0
- package/dist/src/browser/browser-session-config.d.ts.map +1 -0
- package/dist/src/browser/browser-session-config.js +25 -0
- package/dist/src/browser/browser-session-config.js.map +1 -0
- package/dist/src/browser/ensure-browser.d.ts +12 -27
- package/dist/src/browser/ensure-browser.d.ts.map +1 -1
- package/dist/src/browser/ensure-browser.js +131 -39
- package/dist/src/browser/ensure-browser.js.map +1 -1
- package/dist/src/browser/index.d.ts +2 -1
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/index.js +1 -0
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/browser/page-network-recorder.d.ts +95 -0
- package/dist/src/browser/page-network-recorder.d.ts.map +1 -0
- package/dist/src/browser/page-network-recorder.js +306 -0
- package/dist/src/browser/page-network-recorder.js.map +1 -0
- package/dist/src/browser/session-manager.d.ts +20 -0
- package/dist/src/browser/session-manager.d.ts.map +1 -1
- package/dist/src/browser/session-manager.js +169 -20
- package/dist/src/browser/session-manager.js.map +1 -1
- package/dist/src/browser/session-manager.types.d.ts +14 -2
- package/dist/src/browser/session-manager.types.d.ts.map +1 -1
- package/dist/src/browser/session-manager.types.js +5 -1
- package/dist/src/browser/session-manager.types.js.map +1 -1
- package/dist/src/cli/args.d.ts +12 -18
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +35 -40
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/form/constraint-extraction.d.ts +5 -0
- package/dist/src/form/constraint-extraction.d.ts.map +1 -1
- package/dist/src/form/constraint-extraction.js +13 -6
- package/dist/src/form/constraint-extraction.js.map +1 -1
- package/dist/src/form/field-extractor.d.ts.map +1 -1
- package/dist/src/form/field-extractor.js +14 -7
- package/dist/src/form/field-extractor.js.map +1 -1
- package/dist/src/form/form-state.d.ts.map +1 -1
- package/dist/src/form/form-state.js +16 -4
- package/dist/src/form/form-state.js.map +1 -1
- package/dist/src/gateway/http-gateway.d.ts +56 -0
- package/dist/src/gateway/http-gateway.d.ts.map +1 -0
- package/dist/src/gateway/http-gateway.js +229 -0
- package/dist/src/gateway/http-gateway.js.map +1 -0
- package/dist/src/gateway/json-rpc-errors.d.ts +6 -0
- package/dist/src/gateway/json-rpc-errors.d.ts.map +1 -0
- package/dist/src/gateway/json-rpc-errors.js +11 -0
- package/dist/src/gateway/json-rpc-errors.js.map +1 -0
- package/dist/src/gateway/session-router.d.ts +80 -0
- package/dist/src/gateway/session-router.d.ts.map +1 -0
- package/dist/src/gateway/session-router.js +177 -0
- package/dist/src/gateway/session-router.js.map +1 -0
- package/dist/src/http-entry.d.ts +20 -0
- package/dist/src/http-entry.d.ts.map +1 -0
- package/dist/src/http-entry.js +112 -0
- package/dist/src/http-entry.js.map +1 -0
- package/dist/src/index.d.ts +1 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +25 -232
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/text-utils.d.ts +0 -24
- package/dist/src/lib/text-utils.d.ts.map +1 -1
- package/dist/src/lib/text-utils.js +2 -38
- package/dist/src/lib/text-utils.js.map +1 -1
- package/dist/src/observation/eid-linker.d.ts.map +1 -1
- package/dist/src/observation/eid-linker.js +1 -21
- package/dist/src/observation/eid-linker.js.map +1 -1
- package/dist/src/server/index.d.ts +0 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +0 -1
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/mcp-server.d.ts +6 -2
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +3 -91
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/server-config.d.ts +4 -20
- package/dist/src/server/server-config.d.ts.map +1 -1
- package/dist/src/server/server-config.js +6 -50
- package/dist/src/server/server-config.js.map +1 -1
- package/dist/src/server/tool-registrar.types.d.ts +25 -0
- package/dist/src/server/tool-registrar.types.d.ts.map +1 -0
- package/dist/src/server/tool-registrar.types.js +10 -0
- package/dist/src/server/tool-registrar.types.js.map +1 -0
- package/dist/src/server/tool-result-handler.d.ts +61 -0
- package/dist/src/server/tool-result-handler.d.ts.map +1 -0
- package/dist/src/server/tool-result-handler.js +155 -0
- package/dist/src/server/tool-result-handler.js.map +1 -0
- package/dist/src/session/session-controller.d.ts +124 -0
- package/dist/src/session/session-controller.d.ts.map +1 -0
- package/dist/src/session/session-controller.js +276 -0
- package/dist/src/session/session-controller.js.map +1 -0
- package/dist/src/shared/services/index.d.ts +0 -2
- package/dist/src/shared/services/index.d.ts.map +1 -1
- package/dist/src/shared/services/index.js +0 -2
- package/dist/src/shared/services/index.js.map +1 -1
- package/dist/src/shared/version.d.ts +10 -0
- package/dist/src/shared/version.d.ts.map +1 -0
- package/dist/src/shared/version.js +32 -0
- package/dist/src/shared/version.js.map +1 -0
- package/dist/src/snapshot/element-resolver.d.ts +3 -2
- package/dist/src/snapshot/element-resolver.d.ts.map +1 -1
- package/dist/src/snapshot/element-resolver.js +83 -8
- package/dist/src/snapshot/element-resolver.js.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/attribute-extractor.js +4 -0
- package/dist/src/snapshot/extractors/attribute-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.d.ts +9 -7
- package/dist/src/snapshot/extractors/layout-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/layout-extractor.js +34 -19
- package/dist/src/snapshot/extractors/layout-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.d.ts +2 -2
- package/dist/src/snapshot/extractors/state-extractor.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/state-extractor.js +22 -2
- package/dist/src/snapshot/extractors/state-extractor.js.map +1 -1
- package/dist/src/snapshot/extractors/types.d.ts +6 -0
- package/dist/src/snapshot/extractors/types.d.ts.map +1 -1
- package/dist/src/snapshot/extractors/types.js.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.js +15 -2
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
- package/dist/src/snapshot/snapshot.types.d.ts +10 -1
- package/dist/src/snapshot/snapshot.types.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot.types.js.map +1 -1
- package/dist/src/state/actionables-filter.d.ts.map +1 -1
- package/dist/src/state/actionables-filter.js +7 -3
- package/dist/src/state/actionables-filter.js.map +1 -1
- package/dist/src/state/atoms-extractor.d.ts.map +1 -1
- package/dist/src/state/atoms-extractor.js +3 -23
- package/dist/src/state/atoms-extractor.js.map +1 -1
- package/dist/src/state/diff-engine.d.ts.map +1 -1
- package/dist/src/state/diff-engine.js +6 -33
- package/dist/src/state/diff-engine.js.map +1 -1
- package/dist/src/state/element-identity.d.ts +3 -6
- package/dist/src/state/element-identity.d.ts.map +1 -1
- package/dist/src/state/element-identity.js +10 -7
- package/dist/src/state/element-identity.js.map +1 -1
- package/dist/src/state/element-ref.types.d.ts +5 -27
- package/dist/src/state/element-ref.types.d.ts.map +1 -1
- package/dist/src/state/state-manager.d.ts.map +1 -1
- package/dist/src/state/state-manager.js +3 -1
- package/dist/src/state/state-manager.js.map +1 -1
- package/dist/src/state/state-renderer.d.ts.map +1 -1
- package/dist/src/state/state-renderer.js +3 -1
- package/dist/src/state/state-renderer.js.map +1 -1
- package/dist/src/state/types.d.ts +2 -1
- package/dist/src/state/types.d.ts.map +1 -1
- package/dist/src/state/url-sanitization.d.ts +1 -1
- package/dist/src/state/url-sanitization.d.ts.map +1 -1
- package/dist/src/state/url-sanitization.js +29 -13
- package/dist/src/state/url-sanitization.js.map +1 -1
- package/dist/src/tools/action-context.d.ts +6 -11
- package/dist/src/tools/action-context.d.ts.map +1 -1
- package/dist/src/tools/action-context.js +10 -19
- package/dist/src/tools/action-context.js.map +1 -1
- package/dist/src/tools/action-stabilization.d.ts.map +1 -1
- package/dist/src/tools/action-stabilization.js +6 -0
- package/dist/src/tools/action-stabilization.js.map +1 -1
- package/dist/src/tools/browser-tools.d.ts +4 -2
- package/dist/src/tools/browser-tools.d.ts.map +1 -1
- package/dist/src/tools/browser-tools.js +7 -3
- package/dist/src/tools/browser-tools.js.map +1 -1
- package/dist/src/tools/canvas-tools.d.ts +2 -1
- package/dist/src/tools/canvas-tools.d.ts.map +1 -1
- package/dist/src/tools/canvas-tools.js +5 -7
- package/dist/src/tools/canvas-tools.js.map +1 -1
- package/dist/src/tools/errors.d.ts +2 -34
- package/dist/src/tools/errors.d.ts.map +1 -1
- package/dist/src/tools/errors.js +1 -44
- package/dist/src/tools/errors.js.map +1 -1
- package/dist/src/tools/execute-action.d.ts +4 -3
- package/dist/src/tools/execute-action.d.ts.map +1 -1
- package/dist/src/tools/execute-action.js +32 -23
- package/dist/src/tools/execute-action.js.map +1 -1
- package/dist/src/tools/form-tools.d.ts +3 -8
- package/dist/src/tools/form-tools.d.ts.map +1 -1
- package/dist/src/tools/form-tools.js +38 -18
- package/dist/src/tools/form-tools.js.map +1 -1
- package/dist/src/tools/index.d.ts +8 -6
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +10 -10
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/interaction-tools.d.ts +6 -5
- package/dist/src/tools/interaction-tools.d.ts.map +1 -1
- package/dist/src/tools/interaction-tools.js +29 -32
- package/dist/src/tools/interaction-tools.js.map +1 -1
- package/dist/src/tools/navigation-tools.d.ts +7 -13
- package/dist/src/tools/navigation-tools.d.ts.map +1 -1
- package/dist/src/tools/navigation-tools.js +57 -59
- package/dist/src/tools/navigation-tools.js.map +1 -1
- package/dist/src/tools/network-tools.d.ts +10 -0
- package/dist/src/tools/network-tools.d.ts.map +1 -0
- package/dist/src/tools/network-tools.js +117 -0
- package/dist/src/tools/network-tools.js.map +1 -0
- package/dist/src/tools/observation-tools.d.ts +6 -5
- package/dist/src/tools/observation-tools.d.ts.map +1 -1
- package/dist/src/tools/observation-tools.js +30 -34
- package/dist/src/tools/observation-tools.js.map +1 -1
- package/dist/src/tools/readability-tools.d.ts +16 -0
- package/dist/src/tools/readability-tools.d.ts.map +1 -0
- package/dist/src/tools/readability-tools.js +45 -0
- package/dist/src/tools/readability-tools.js.map +1 -0
- package/dist/src/tools/response-builder.d.ts +20 -32
- package/dist/src/tools/response-builder.d.ts.map +1 -1
- package/dist/src/tools/response-builder.js +31 -47
- package/dist/src/tools/response-builder.js.map +1 -1
- package/dist/src/tools/stale-element-retry.d.ts.map +1 -1
- package/dist/src/tools/stale-element-retry.js +37 -2
- package/dist/src/tools/stale-element-retry.js.map +1 -1
- package/dist/src/tools/tool-context.d.ts +4 -36
- package/dist/src/tools/tool-context.d.ts.map +1 -1
- package/dist/src/tools/tool-context.js +6 -75
- package/dist/src/tools/tool-context.js.map +1 -1
- package/dist/src/tools/tool-context.types.d.ts +147 -0
- package/dist/src/tools/tool-context.types.d.ts.map +1 -0
- package/dist/src/tools/tool-context.types.js +11 -0
- package/dist/src/tools/tool-context.types.js.map +1 -0
- package/dist/src/tools/tool-registration.d.ts +25 -0
- package/dist/src/tools/tool-registration.d.ts.map +1 -0
- package/dist/src/tools/tool-registration.js +195 -0
- package/dist/src/tools/tool-registration.js.map +1 -0
- package/dist/src/tools/tool-schemas.d.ts +178 -1947
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js +130 -302
- package/dist/src/tools/tool-schemas.js.map +1 -1
- package/dist/src/tools/viewport-tools.d.ts +4 -3
- package/dist/src/tools/viewport-tools.d.ts.map +1 -1
- package/dist/src/tools/viewport-tools.js +17 -21
- package/dist/src/tools/viewport-tools.js.map +1 -1
- package/dist/src/worker/chrome-worker-process.d.ts +4 -0
- package/dist/src/worker/chrome-worker-process.d.ts.map +1 -1
- package/dist/src/worker/chrome-worker-process.js +1 -1
- package/dist/src/worker/chrome-worker-process.js.map +1 -1
- package/dist/vitest.config.js +1 -1
- package/dist/vitest.config.js.map +1 -1
- package/dist/vitest.integration.config.d.ts +3 -0
- package/dist/vitest.integration.config.d.ts.map +1 -0
- package/dist/vitest.integration.config.js +11 -0
- package/dist/vitest.integration.config.js.map +1 -0
- package/package.json +20 -5
- package/dist/src/factpack/action-selector.d.ts +0 -36
- package/dist/src/factpack/action-selector.d.ts.map +0 -1
- package/dist/src/factpack/action-selector.js +0 -367
- package/dist/src/factpack/action-selector.js.map +0 -1
- package/dist/src/factpack/dialog-detector.d.ts +0 -19
- package/dist/src/factpack/dialog-detector.d.ts.map +0 -1
- package/dist/src/factpack/dialog-detector.js +0 -354
- package/dist/src/factpack/dialog-detector.js.map +0 -1
- package/dist/src/factpack/form-detector.d.ts +0 -28
- package/dist/src/factpack/form-detector.d.ts.map +0 -1
- package/dist/src/factpack/form-detector.js +0 -555
- package/dist/src/factpack/form-detector.js.map +0 -1
- package/dist/src/factpack/index.d.ts +0 -32
- package/dist/src/factpack/index.d.ts.map +0 -1
- package/dist/src/factpack/index.js +0 -73
- package/dist/src/factpack/index.js.map +0 -1
- package/dist/src/factpack/page-classifier.d.ts +0 -22
- package/dist/src/factpack/page-classifier.d.ts.map +0 -1
- package/dist/src/factpack/page-classifier.js +0 -526
- package/dist/src/factpack/page-classifier.js.map +0 -1
- package/dist/src/factpack/types.d.ts +0 -307
- package/dist/src/factpack/types.d.ts.map +0 -1
- package/dist/src/factpack/types.js +0 -12
- package/dist/src/factpack/types.js.map +0 -1
- package/dist/src/lib/constants.d.ts +0 -27
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -63
- package/dist/src/lib/constants.js.map +0 -1
- package/dist/src/lib/index.d.ts +0 -12
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -17
- package/dist/src/lib/index.js.map +0 -1
- package/dist/src/lib/regions.d.ts +0 -29
- package/dist/src/lib/regions.d.ts.map +0 -1
- package/dist/src/lib/regions.js +0 -93
- package/dist/src/lib/regions.js.map +0 -1
- package/dist/src/lib/scoring.d.ts +0 -47
- package/dist/src/lib/scoring.d.ts.map +0 -1
- package/dist/src/lib/scoring.js +0 -79
- package/dist/src/lib/scoring.js.map +0 -1
- package/dist/src/lib/selectors.d.ts +0 -42
- package/dist/src/lib/selectors.d.ts.map +0 -1
- package/dist/src/lib/selectors.js +0 -138
- package/dist/src/lib/selectors.js.map +0 -1
- package/dist/src/renderer/budget-manager.d.ts +0 -46
- package/dist/src/renderer/budget-manager.d.ts.map +0 -1
- package/dist/src/renderer/budget-manager.js +0 -133
- package/dist/src/renderer/budget-manager.js.map +0 -1
- package/dist/src/renderer/constants.d.ts +0 -38
- package/dist/src/renderer/constants.d.ts.map +0 -1
- package/dist/src/renderer/constants.js +0 -29
- package/dist/src/renderer/constants.js.map +0 -1
- package/dist/src/renderer/index.d.ts +0 -12
- package/dist/src/renderer/index.d.ts.map +0 -1
- package/dist/src/renderer/index.js +0 -16
- package/dist/src/renderer/index.js.map +0 -1
- package/dist/src/renderer/section-renderers.d.ts +0 -42
- package/dist/src/renderer/section-renderers.d.ts.map +0 -1
- package/dist/src/renderer/section-renderers.js +0 -252
- package/dist/src/renderer/section-renderers.js.map +0 -1
- package/dist/src/renderer/token-counter.d.ts +0 -45
- package/dist/src/renderer/token-counter.d.ts.map +0 -1
- package/dist/src/renderer/token-counter.js +0 -65
- package/dist/src/renderer/token-counter.js.map +0 -1
- package/dist/src/renderer/types.d.ts +0 -71
- package/dist/src/renderer/types.d.ts.map +0 -1
- package/dist/src/renderer/types.js +0 -7
- package/dist/src/renderer/types.js.map +0 -1
- package/dist/src/renderer/xml-renderer.d.ts +0 -42
- package/dist/src/renderer/xml-renderer.d.ts.map +0 -1
- package/dist/src/renderer/xml-renderer.js +0 -103
- package/dist/src/renderer/xml-renderer.js.map +0 -1
- package/dist/src/server/session-store.d.ts +0 -163
- package/dist/src/server/session-store.d.ts.map +0 -1
- package/dist/src/server/session-store.js +0 -248
- package/dist/src/server/session-store.js.map +0 -1
- package/dist/src/session/session-worker-binding.d.ts +0 -57
- package/dist/src/session/session-worker-binding.d.ts.map +0 -1
- package/dist/src/session/session-worker-binding.js +0 -109
- package/dist/src/session/session-worker-binding.js.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.d.ts +0 -71
- package/dist/src/shared/services/dom-transformer.service.d.ts.map +0 -1
- package/dist/src/shared/services/dom-transformer.service.js +0 -190
- package/dist/src/shared/services/dom-transformer.service.js.map +0 -1
- package/dist/src/shared/services/selector-builder.service.d.ts +0 -53
- package/dist/src/shared/services/selector-builder.service.d.ts.map +0 -1
- package/dist/src/shared/services/selector-builder.service.js +0 -240
- package/dist/src/shared/services/selector-builder.service.js.map +0 -1
- package/dist/src/state/constants.d.ts +0 -125
- package/dist/src/state/constants.d.ts.map +0 -1
- package/dist/src/state/constants.js +0 -131
- package/dist/src/state/constants.js.map +0 -1
- package/dist/src/tools/state-manager-registry.d.ts +0 -26
- package/dist/src/tools/state-manager-registry.d.ts.map +0 -1
- package/dist/src/tools/state-manager-registry.js +0 -39
- package/dist/src/tools/state-manager-registry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAC3B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3D;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC5C,aAAa,EAAE,EAAE,CAAC;CACnB;AAED,qBAAa,uBACX,SAAQ,YACR,YAAW,qBAAqB,EAAE,aAAa;IAKnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,SAAS,CAAuB;gBAEX,MAAM,EAAE,YAAY;IAmCjD;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,WAAW,CAAC;KAC5B,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAC5C,IAAI;IAcP;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAC/B,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -9,7 +9,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
9
9
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
10
|
import { getLogger, } from '../shared/services/logging.service.js';
|
|
11
11
|
import { SetLevelRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
12
|
-
import {
|
|
12
|
+
import { wrapToolHandler } from './tool-result-handler.js';
|
|
13
13
|
export class BrowserAutomationServer extends EventEmitter {
|
|
14
14
|
config;
|
|
15
15
|
server;
|
|
@@ -54,101 +54,13 @@ export class BrowserAutomationServer extends EventEmitter {
|
|
|
54
54
|
* Register a custom tool with the MCP server
|
|
55
55
|
*/
|
|
56
56
|
registerTool(name, definition, handler) {
|
|
57
|
+
const wrapped = wrapToolHandler(name, handler, !!definition.outputSchema);
|
|
57
58
|
this.server.registerTool(name, {
|
|
58
59
|
title: definition.title,
|
|
59
60
|
description: definition.description,
|
|
60
61
|
inputSchema: definition.inputSchema,
|
|
61
62
|
outputSchema: definition.outputSchema,
|
|
62
|
-
},
|
|
63
|
-
const logger = getLogger();
|
|
64
|
-
const startTime = Date.now();
|
|
65
|
-
try {
|
|
66
|
-
logger.debug(`Executing tool: ${name}`);
|
|
67
|
-
const result = await handler(input);
|
|
68
|
-
const executionTime = Date.now() - startTime;
|
|
69
|
-
logger.debug(`Tool ${name} completed in ${executionTime}ms`);
|
|
70
|
-
// Composite result - return as multi-content (text + image)
|
|
71
|
-
if (isCompositeResult(result)) {
|
|
72
|
-
if (isImageResult(result.image)) {
|
|
73
|
-
return {
|
|
74
|
-
content: [
|
|
75
|
-
{ type: 'text', text: result.text },
|
|
76
|
-
{
|
|
77
|
-
type: 'image',
|
|
78
|
-
data: result.image.data,
|
|
79
|
-
mimeType: result.image.mimeType,
|
|
80
|
-
},
|
|
81
|
-
],
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
// FileResult fallback - return text + file path
|
|
86
|
-
const sizeMB = (result.image.sizeBytes / 1024 / 1024).toFixed(2);
|
|
87
|
-
return {
|
|
88
|
-
content: [
|
|
89
|
-
{ type: 'text', text: result.text },
|
|
90
|
-
{
|
|
91
|
-
type: 'text',
|
|
92
|
-
text: `Screenshot saved to: ${result.image.path} (${sizeMB} MB, ${result.image.mimeType})`,
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Image result - return as MCP ImageContent (inline base64)
|
|
99
|
-
if (isImageResult(result)) {
|
|
100
|
-
return {
|
|
101
|
-
content: [
|
|
102
|
-
{
|
|
103
|
-
type: 'image',
|
|
104
|
-
data: result.data,
|
|
105
|
-
mimeType: result.mimeType,
|
|
106
|
-
},
|
|
107
|
-
],
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
// File result - return file path as text (for large screenshots)
|
|
111
|
-
if (isFileResult(result)) {
|
|
112
|
-
const sizeMB = (result.sizeBytes / 1024 / 1024).toFixed(2);
|
|
113
|
-
return {
|
|
114
|
-
content: [
|
|
115
|
-
{
|
|
116
|
-
type: 'text',
|
|
117
|
-
text: `Screenshot saved to: ${result.path} (${sizeMB} MB, ${result.mimeType})`,
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
// When outputSchema is defined, return structuredContent for MCP validation
|
|
123
|
-
if (definition.outputSchema) {
|
|
124
|
-
return {
|
|
125
|
-
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
126
|
-
structuredContent: result,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
// If result is already a string (e.g., XML), use it directly
|
|
130
|
-
// Otherwise JSON.stringify it
|
|
131
|
-
const textContent = typeof result === 'string' ? result : JSON.stringify(result);
|
|
132
|
-
return {
|
|
133
|
-
content: [{ type: 'text', text: textContent }],
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
const executionTime = Date.now() - startTime;
|
|
138
|
-
logger.error(`Tool ${name} failed after ${executionTime}ms`, error instanceof Error ? error : undefined);
|
|
139
|
-
return {
|
|
140
|
-
content: [
|
|
141
|
-
{
|
|
142
|
-
type: 'text',
|
|
143
|
-
text: JSON.stringify({
|
|
144
|
-
error: error instanceof Error ? error.message : String(error),
|
|
145
|
-
}),
|
|
146
|
-
},
|
|
147
|
-
],
|
|
148
|
-
isError: true,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
});
|
|
63
|
+
}, wrapped);
|
|
152
64
|
}
|
|
153
65
|
/**
|
|
154
66
|
* Send logging message notification via MCP protocol
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EACL,SAAS,GAGV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server Configuration
|
|
3
3
|
*
|
|
4
|
-
* Global server configuration
|
|
5
|
-
*
|
|
4
|
+
* Global server configuration from CLI args and environment variables.
|
|
5
|
+
* Contains only transport-level settings (transport mode, port).
|
|
6
|
+
*
|
|
7
|
+
* Browser configuration is per-session and managed by SessionController.
|
|
6
8
|
*/
|
|
7
9
|
import { type ServerArgs } from '../cli/args.js';
|
|
8
|
-
import { SessionManager } from '../browser/session-manager.js';
|
|
9
10
|
/**
|
|
10
11
|
* Initialize server configuration from CLI arguments and environment variables.
|
|
11
12
|
*
|
|
@@ -17,23 +18,6 @@ export declare function initServerConfig(argv: string[]): void;
|
|
|
17
18
|
* Throws if not initialized.
|
|
18
19
|
*/
|
|
19
20
|
export declare function getServerConfig(): ServerArgs;
|
|
20
|
-
/**
|
|
21
|
-
* Get or create the SessionManager singleton.
|
|
22
|
-
*/
|
|
23
|
-
export declare function getSessionManager(): SessionManager;
|
|
24
|
-
/**
|
|
25
|
-
* Check if the SessionManager has been initialized.
|
|
26
|
-
* Use this before calling getSessionManager() in cleanup paths
|
|
27
|
-
* to avoid creating a new instance unnecessarily.
|
|
28
|
-
*/
|
|
29
|
-
export declare function isSessionManagerInitialized(): boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Ensure browser is ready for tool execution.
|
|
32
|
-
*
|
|
33
|
-
* This is the main entry point for tools to call before executing.
|
|
34
|
-
* It will lazily launch or connect to a browser based on server configuration.
|
|
35
|
-
*/
|
|
36
|
-
export declare function ensureBrowserForTools(): Promise<void>;
|
|
37
21
|
/**
|
|
38
22
|
* Reset server state (for testing).
|
|
39
23
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../../src/server/server-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../../src/server/server-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAK5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Server Configuration
|
|
3
3
|
*
|
|
4
|
-
* Global server configuration
|
|
5
|
-
*
|
|
4
|
+
* Global server configuration from CLI args and environment variables.
|
|
5
|
+
* Contains only transport-level settings (transport mode, port).
|
|
6
|
+
*
|
|
7
|
+
* Browser configuration is per-session and managed by SessionController.
|
|
6
8
|
*/
|
|
7
9
|
import { parseArgs } from '../cli/args.js';
|
|
8
|
-
|
|
9
|
-
import { ensureBrowserReady } from '../browser/ensure-browser.js';
|
|
10
|
-
// Singleton instances
|
|
10
|
+
// Singleton config
|
|
11
11
|
let serverConfig = null;
|
|
12
|
-
let sessionManager = null;
|
|
13
12
|
/**
|
|
14
13
|
* Initialize server configuration from CLI arguments and environment variables.
|
|
15
14
|
*
|
|
16
15
|
* @param argv - Command line arguments (process.argv.slice(2))
|
|
17
16
|
*/
|
|
18
17
|
export function initServerConfig(argv) {
|
|
19
|
-
|
|
20
|
-
// Apply environment variable overrides
|
|
21
|
-
// Only enable autoConnect from env if no explicit browserUrl/wsEndpoint was provided
|
|
22
|
-
if (process.env.AUTO_CONNECT === 'true' && !args.browserUrl && !args.wsEndpoint) {
|
|
23
|
-
args.autoConnect = true;
|
|
24
|
-
}
|
|
25
|
-
serverConfig = args;
|
|
18
|
+
serverConfig = parseArgs(argv);
|
|
26
19
|
}
|
|
27
20
|
/**
|
|
28
21
|
* Get the current server configuration.
|
|
@@ -34,47 +27,10 @@ export function getServerConfig() {
|
|
|
34
27
|
}
|
|
35
28
|
return serverConfig;
|
|
36
29
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Get or create the SessionManager singleton.
|
|
39
|
-
*/
|
|
40
|
-
export function getSessionManager() {
|
|
41
|
-
sessionManager ??= new SessionManager();
|
|
42
|
-
return sessionManager;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Check if the SessionManager has been initialized.
|
|
46
|
-
* Use this before calling getSessionManager() in cleanup paths
|
|
47
|
-
* to avoid creating a new instance unnecessarily.
|
|
48
|
-
*/
|
|
49
|
-
export function isSessionManagerInitialized() {
|
|
50
|
-
return sessionManager !== null;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Ensure browser is ready for tool execution.
|
|
54
|
-
*
|
|
55
|
-
* This is the main entry point for tools to call before executing.
|
|
56
|
-
* It will lazily launch or connect to a browser based on server configuration.
|
|
57
|
-
*/
|
|
58
|
-
export async function ensureBrowserForTools() {
|
|
59
|
-
const config = getServerConfig();
|
|
60
|
-
const session = getSessionManager();
|
|
61
|
-
const options = {
|
|
62
|
-
headless: config.headless,
|
|
63
|
-
isolated: config.isolated,
|
|
64
|
-
browserUrl: config.browserUrl,
|
|
65
|
-
wsEndpoint: config.wsEndpoint,
|
|
66
|
-
autoConnect: config.autoConnect,
|
|
67
|
-
userDataDir: config.userDataDir,
|
|
68
|
-
channel: config.channel,
|
|
69
|
-
executablePath: config.executablePath,
|
|
70
|
-
};
|
|
71
|
-
await ensureBrowserReady(session, options);
|
|
72
|
-
}
|
|
73
30
|
/**
|
|
74
31
|
* Reset server state (for testing).
|
|
75
32
|
*/
|
|
76
33
|
export function resetServerState() {
|
|
77
34
|
serverConfig = null;
|
|
78
|
-
sessionManager = null;
|
|
79
35
|
}
|
|
80
36
|
//# sourceMappingURL=server-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../../src/server/server-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../../src/server/server-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAE5D,mBAAmB;AACnB,IAAI,YAAY,GAAsB,IAAI,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registrar Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the minimal interface for registering MCP tools.
|
|
5
|
+
* Used by both BrowserAutomationServer (stdio) and HttpGateway (HTTP).
|
|
6
|
+
*
|
|
7
|
+
* @module server/tool-registrar.types
|
|
8
|
+
*/
|
|
9
|
+
import type { ZodRawShape } from 'zod';
|
|
10
|
+
/**
|
|
11
|
+
* Minimal interface for registering tools on an MCP server.
|
|
12
|
+
*
|
|
13
|
+
* Implemented by:
|
|
14
|
+
* - BrowserAutomationServer (stdio transport with logging/error wrapping)
|
|
15
|
+
* - HttpToolRegistrar (HTTP transport, wraps McpServer.registerTool)
|
|
16
|
+
*/
|
|
17
|
+
export interface ToolRegistrar {
|
|
18
|
+
registerTool(name: string, definition: {
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
inputSchema: ZodRawShape;
|
|
22
|
+
outputSchema?: ZodRawShape;
|
|
23
|
+
}, handler: (input: unknown) => Promise<unknown>): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=tool-registrar.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registrar.types.d.ts","sourceRoot":"","sources":["../../../src/server/tool-registrar.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,WAAW,CAAC;QACzB,YAAY,CAAC,EAAE,WAAW,CAAC;KAC5B,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAC5C,IAAI,CAAC;CACT"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Registrar Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the minimal interface for registering MCP tools.
|
|
5
|
+
* Used by both BrowserAutomationServer (stdio) and HttpGateway (HTTP).
|
|
6
|
+
*
|
|
7
|
+
* @module server/tool-registrar.types
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=tool-registrar.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registrar.types.js","sourceRoot":"","sources":["../../../src/server/tool-registrar.types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Result Handler
|
|
3
|
+
*
|
|
4
|
+
* Shared result-wrapping logic for converting tool handler return values
|
|
5
|
+
* into MCP-compatible content arrays. Used by both BrowserAutomationServer
|
|
6
|
+
* (stdio) and HttpToolRegistrar (HTTP) to avoid duplication.
|
|
7
|
+
*
|
|
8
|
+
* @module server/tool-result-handler
|
|
9
|
+
*/
|
|
10
|
+
/** MCP text content */
|
|
11
|
+
interface TextContent {
|
|
12
|
+
readonly type: 'text';
|
|
13
|
+
readonly text: string;
|
|
14
|
+
}
|
|
15
|
+
/** MCP image content */
|
|
16
|
+
interface ImageContent {
|
|
17
|
+
readonly type: 'image';
|
|
18
|
+
readonly data: string;
|
|
19
|
+
readonly mimeType: string;
|
|
20
|
+
}
|
|
21
|
+
/** Union of MCP content types produced by this module */
|
|
22
|
+
export type Content = TextContent | ImageContent;
|
|
23
|
+
/** Formatted tool result ready for MCP response */
|
|
24
|
+
export interface FormattedToolResult {
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
content: Content[];
|
|
27
|
+
structuredContent?: Record<string, unknown>;
|
|
28
|
+
isError?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format a tool handler result into an MCP-compatible content array.
|
|
32
|
+
*
|
|
33
|
+
* Handles CompositeResult, ImageResult, FileResult, structured output,
|
|
34
|
+
* plain strings, and arbitrary objects (JSON-stringified).
|
|
35
|
+
*
|
|
36
|
+
* @param result - The raw return value from a tool handler
|
|
37
|
+
* @param hasOutputSchema - Whether the tool definition has an outputSchema
|
|
38
|
+
* @returns MCP-compatible content array with optional structuredContent
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatToolResult(result: unknown, hasOutputSchema?: boolean): FormattedToolResult;
|
|
41
|
+
/**
|
|
42
|
+
* Format an error into an MCP-compatible error response.
|
|
43
|
+
*
|
|
44
|
+
* @param error - The caught error
|
|
45
|
+
* @returns MCP-compatible error content
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatToolError(error: unknown): FormattedToolResult;
|
|
48
|
+
/**
|
|
49
|
+
* Wrap a tool handler with logging, timing, and MCP result formatting.
|
|
50
|
+
*
|
|
51
|
+
* Shared by both BrowserAutomationServer (stdio) and HttpToolRegistrar (HTTP)
|
|
52
|
+
* to avoid duplicating the try/catch/timing/logging boilerplate.
|
|
53
|
+
*
|
|
54
|
+
* @param name - Tool name used in log messages
|
|
55
|
+
* @param handler - The raw tool handler function
|
|
56
|
+
* @param hasOutputSchema - Whether the tool definition has an outputSchema
|
|
57
|
+
* @returns A wrapped handler that returns a FormattedToolResult
|
|
58
|
+
*/
|
|
59
|
+
export declare function wrapToolHandler<T>(name: string, handler: (input: T) => Promise<unknown>, hasOutputSchema: boolean): (input: T) => Promise<FormattedToolResult>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=tool-result-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-result-handler.d.ts","sourceRoot":"","sources":["../../../src/server/tool-result-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAwB;AACxB,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,yDAAyD;AACzD,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC;AAEjD,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,UAAQ,GAAG,mBAAmB,CAqE9F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAanE;AA4BD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EACvC,eAAe,EAAE,OAAO,GACvB,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAmB5C"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Result Handler
|
|
3
|
+
*
|
|
4
|
+
* Shared result-wrapping logic for converting tool handler return values
|
|
5
|
+
* into MCP-compatible content arrays. Used by both BrowserAutomationServer
|
|
6
|
+
* (stdio) and HttpToolRegistrar (HTTP) to avoid duplication.
|
|
7
|
+
*
|
|
8
|
+
* @module server/tool-result-handler
|
|
9
|
+
*/
|
|
10
|
+
import { isCompositeResult, isImageResult, isFileResult } from '../tools/tool-result.types.js';
|
|
11
|
+
import { getLogger } from '../shared/services/logging.service.js';
|
|
12
|
+
import { BrowserSessionError } from '../shared/errors/browser-session.error.js';
|
|
13
|
+
/**
|
|
14
|
+
* Format a tool handler result into an MCP-compatible content array.
|
|
15
|
+
*
|
|
16
|
+
* Handles CompositeResult, ImageResult, FileResult, structured output,
|
|
17
|
+
* plain strings, and arbitrary objects (JSON-stringified).
|
|
18
|
+
*
|
|
19
|
+
* @param result - The raw return value from a tool handler
|
|
20
|
+
* @param hasOutputSchema - Whether the tool definition has an outputSchema
|
|
21
|
+
* @returns MCP-compatible content array with optional structuredContent
|
|
22
|
+
*/
|
|
23
|
+
export function formatToolResult(result, hasOutputSchema = false) {
|
|
24
|
+
// Composite result - return as multi-content (text + image)
|
|
25
|
+
if (isCompositeResult(result)) {
|
|
26
|
+
if (isImageResult(result.image)) {
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{ type: 'text', text: result.text },
|
|
30
|
+
{
|
|
31
|
+
type: 'image',
|
|
32
|
+
data: result.image.data,
|
|
33
|
+
mimeType: result.image.mimeType,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// FileResult fallback - return text + file path
|
|
40
|
+
const sizeMB = (result.image.sizeBytes / 1024 / 1024).toFixed(2);
|
|
41
|
+
return {
|
|
42
|
+
content: [
|
|
43
|
+
{ type: 'text', text: result.text },
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: `Screenshot saved to: ${result.image.path} (${sizeMB} MB, ${result.image.mimeType})`,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Image result - return as MCP ImageContent (inline base64)
|
|
53
|
+
if (isImageResult(result)) {
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'image',
|
|
58
|
+
data: result.data,
|
|
59
|
+
mimeType: result.mimeType,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// File result - return file path as text (for large screenshots)
|
|
65
|
+
if (isFileResult(result)) {
|
|
66
|
+
const sizeMB = (result.sizeBytes / 1024 / 1024).toFixed(2);
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: 'text',
|
|
71
|
+
text: `Screenshot saved to: ${result.path} (${sizeMB} MB, ${result.mimeType})`,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// When outputSchema is defined, return structuredContent for MCP validation
|
|
77
|
+
if (hasOutputSchema) {
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
80
|
+
structuredContent: result,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// If result is already a string (e.g., XML), use it directly
|
|
84
|
+
// Otherwise JSON.stringify it
|
|
85
|
+
const textContent = typeof result === 'string' ? result : JSON.stringify(result);
|
|
86
|
+
return {
|
|
87
|
+
content: [{ type: 'text', text: textContent }],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format an error into an MCP-compatible error response.
|
|
92
|
+
*
|
|
93
|
+
* @param error - The caught error
|
|
94
|
+
* @returns MCP-compatible error content
|
|
95
|
+
*/
|
|
96
|
+
export function formatToolError(error) {
|
|
97
|
+
const message = formatUserFacingErrorMessage(error);
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: 'text',
|
|
102
|
+
text: JSON.stringify({
|
|
103
|
+
error: message,
|
|
104
|
+
}),
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
isError: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function formatUserFacingErrorMessage(error) {
|
|
111
|
+
if (!BrowserSessionError.isBrowserSessionError(error)) {
|
|
112
|
+
return error instanceof Error ? error.message : String(error);
|
|
113
|
+
}
|
|
114
|
+
if (error.code === 'CONNECTION_FAILED' &&
|
|
115
|
+
error.context?.operation === 'autoConnect' &&
|
|
116
|
+
error.cause?.message.includes('DevToolsActivePort')) {
|
|
117
|
+
return ('Could not connect to your existing Chrome session. Open Chrome first and enable remote debugging, then retry with auto_connect=true. ' +
|
|
118
|
+
'Or launch an AWI-managed browser with isolated=true or headless=true.');
|
|
119
|
+
}
|
|
120
|
+
if (error.code === 'BROWSER_DISCONNECTED' && error.context?.connectionMode === 'external') {
|
|
121
|
+
return ('The connected Chrome session was closed. Open Chrome again and retry with auto_connect=true. ' +
|
|
122
|
+
'Or launch an AWI-managed browser with isolated=true or headless=true.');
|
|
123
|
+
}
|
|
124
|
+
return error.message;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Wrap a tool handler with logging, timing, and MCP result formatting.
|
|
128
|
+
*
|
|
129
|
+
* Shared by both BrowserAutomationServer (stdio) and HttpToolRegistrar (HTTP)
|
|
130
|
+
* to avoid duplicating the try/catch/timing/logging boilerplate.
|
|
131
|
+
*
|
|
132
|
+
* @param name - Tool name used in log messages
|
|
133
|
+
* @param handler - The raw tool handler function
|
|
134
|
+
* @param hasOutputSchema - Whether the tool definition has an outputSchema
|
|
135
|
+
* @returns A wrapped handler that returns a FormattedToolResult
|
|
136
|
+
*/
|
|
137
|
+
export function wrapToolHandler(name, handler, hasOutputSchema) {
|
|
138
|
+
const logger = getLogger();
|
|
139
|
+
return async (input) => {
|
|
140
|
+
const startTime = Date.now();
|
|
141
|
+
logger.debug(`Executing tool: ${name}`);
|
|
142
|
+
try {
|
|
143
|
+
const result = await handler(input);
|
|
144
|
+
const executionTime = Date.now() - startTime;
|
|
145
|
+
logger.debug(`Tool ${name} completed in ${executionTime}ms`);
|
|
146
|
+
return formatToolResult(result, hasOutputSchema);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const executionTime = Date.now() - startTime;
|
|
150
|
+
logger.error(`Tool ${name} failed after ${executionTime}ms`, error instanceof Error ? error : undefined);
|
|
151
|
+
return formatToolError(error);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=tool-result-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-result-handler.js","sourceRoot":"","sources":["../../../src/server/tool-result-handler.ts"],"names":[],"mappings":"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"}
|