@iflow-mcp/shaun0927-openchrome 1.7.13
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/LICENSE +21 -0
- package/README.md +387 -0
- package/assets/chart-tokens.svg +42 -0
- package/assets/demo.svg +278 -0
- package/assets/mascot.png +0 -0
- package/dist/cdp/client.d.ts +265 -0
- package/dist/cdp/client.d.ts.map +1 -0
- package/dist/cdp/client.js +1419 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/connection-pool.d.ts +117 -0
- package/dist/cdp/connection-pool.d.ts.map +1 -0
- package/dist/cdp/connection-pool.js +421 -0
- package/dist/cdp/connection-pool.js.map +1 -0
- package/dist/cdp/screenshot-scheduler.d.ts +55 -0
- package/dist/cdp/screenshot-scheduler.d.ts.map +1 -0
- package/dist/cdp/screenshot-scheduler.js +121 -0
- package/dist/cdp/screenshot-scheduler.js.map +1 -0
- package/dist/chrome/launcher.d.ts +113 -0
- package/dist/chrome/launcher.d.ts.map +1 -0
- package/dist/chrome/launcher.js +850 -0
- package/dist/chrome/launcher.js.map +1 -0
- package/dist/chrome/pool.d.ts +43 -0
- package/dist/chrome/pool.d.ts.map +1 -0
- package/dist/chrome/pool.js +219 -0
- package/dist/chrome/pool.js.map +1 -0
- package/dist/chrome/profile-manager.d.ts +156 -0
- package/dist/chrome/profile-manager.d.ts.map +1 -0
- package/dist/chrome/profile-manager.js +558 -0
- package/dist/chrome/profile-manager.js.map +1 -0
- package/dist/cli/claude-session.d.ts +11 -0
- package/dist/cli/claude-session.js +349 -0
- package/dist/cli/claude-session.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.js +1013 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +16 -0
- package/dist/cli/install.js +185 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/uninstall.d.ts +7 -0
- package/dist/cli/uninstall.js +126 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/update-check.d.ts +10 -0
- package/dist/cli/update-check.js +187 -0
- package/dist/cli/update-check.js.map +1 -0
- package/dist/compression/snapshot-store.d.ts +54 -0
- package/dist/compression/snapshot-store.d.ts.map +1 -0
- package/dist/compression/snapshot-store.js +183 -0
- package/dist/compression/snapshot-store.js.map +1 -0
- package/dist/config/defaults.d.ts +102 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +102 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/global.d.ts +81 -0
- package/dist/config/global.d.ts.map +1 -0
- package/dist/config/global.js +30 -0
- package/dist/config/global.js.map +1 -0
- package/dist/config/index.d.ts +16 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/tool-tiers.d.ts +14 -0
- package/dist/config/tool-tiers.d.ts.map +1 -0
- package/dist/config/tool-tiers.js +69 -0
- package/dist/config/tool-tiers.js.map +1 -0
- package/dist/dashboard/activity-tracker.d.ts +95 -0
- package/dist/dashboard/activity-tracker.d.ts.map +1 -0
- package/dist/dashboard/activity-tracker.js +275 -0
- package/dist/dashboard/activity-tracker.js.map +1 -0
- package/dist/dashboard/ansi.d.ts +117 -0
- package/dist/dashboard/ansi.d.ts.map +1 -0
- package/dist/dashboard/ansi.js +199 -0
- package/dist/dashboard/ansi.js.map +1 -0
- package/dist/dashboard/index.d.ts +110 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +413 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/keyboard-handler.d.ts +43 -0
- package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
- package/dist/dashboard/keyboard-handler.js +230 -0
- package/dist/dashboard/keyboard-handler.js.map +1 -0
- package/dist/dashboard/operation-controller.d.ts +76 -0
- package/dist/dashboard/operation-controller.d.ts.map +1 -0
- package/dist/dashboard/operation-controller.js +167 -0
- package/dist/dashboard/operation-controller.js.map +1 -0
- package/dist/dashboard/renderer.d.ts +76 -0
- package/dist/dashboard/renderer.d.ts.map +1 -0
- package/dist/dashboard/renderer.js +193 -0
- package/dist/dashboard/renderer.js.map +1 -0
- package/dist/dashboard/types.d.ts +74 -0
- package/dist/dashboard/types.d.ts.map +1 -0
- package/dist/dashboard/types.js +12 -0
- package/dist/dashboard/types.js.map +1 -0
- package/dist/dashboard/views/main-view.d.ts +23 -0
- package/dist/dashboard/views/main-view.d.ts.map +1 -0
- package/dist/dashboard/views/main-view.js +143 -0
- package/dist/dashboard/views/main-view.js.map +1 -0
- package/dist/dashboard/views/sessions-view.d.ts +22 -0
- package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
- package/dist/dashboard/views/sessions-view.js +104 -0
- package/dist/dashboard/views/sessions-view.js.map +1 -0
- package/dist/dashboard/views/tabs-view.d.ts +21 -0
- package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
- package/dist/dashboard/views/tabs-view.js +92 -0
- package/dist/dashboard/views/tabs-view.js.map +1 -0
- package/dist/dom/dom-serializer.d.ts +37 -0
- package/dist/dom/dom-serializer.d.ts.map +1 -0
- package/dist/dom/dom-serializer.js +429 -0
- package/dist/dom/dom-serializer.js.map +1 -0
- package/dist/dom/index.d.ts +2 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +6 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/errors/timeout.d.ts +20 -0
- package/dist/errors/timeout.d.ts.map +1 -0
- package/dist/errors/timeout.js +41 -0
- package/dist/errors/timeout.js.map +1 -0
- package/dist/hints/hint-engine.d.ts +117 -0
- package/dist/hints/hint-engine.d.ts.map +1 -0
- package/dist/hints/hint-engine.js +347 -0
- package/dist/hints/hint-engine.js.map +1 -0
- package/dist/hints/index.d.ts +8 -0
- package/dist/hints/index.d.ts.map +1 -0
- package/dist/hints/index.js +11 -0
- package/dist/hints/index.js.map +1 -0
- package/dist/hints/pattern-learner.d.ts +76 -0
- package/dist/hints/pattern-learner.d.ts.map +1 -0
- package/dist/hints/pattern-learner.js +254 -0
- package/dist/hints/pattern-learner.js.map +1 -0
- package/dist/hints/progress-tracker.d.ts +44 -0
- package/dist/hints/progress-tracker.d.ts.map +1 -0
- package/dist/hints/progress-tracker.js +118 -0
- package/dist/hints/progress-tracker.js.map +1 -0
- package/dist/hints/rules/blocking-page.d.ts +8 -0
- package/dist/hints/rules/blocking-page.d.ts.map +1 -0
- package/dist/hints/rules/blocking-page.js +58 -0
- package/dist/hints/rules/blocking-page.js.map +1 -0
- package/dist/hints/rules/composite-suggestions.d.ts +6 -0
- package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
- package/dist/hints/rules/composite-suggestions.js +138 -0
- package/dist/hints/rules/composite-suggestions.js.map +1 -0
- package/dist/hints/rules/error-recovery.d.ts +7 -0
- package/dist/hints/rules/error-recovery.d.ts.map +1 -0
- package/dist/hints/rules/error-recovery.js +59 -0
- package/dist/hints/rules/error-recovery.js.map +1 -0
- package/dist/hints/rules/learned-rules.d.ts +13 -0
- package/dist/hints/rules/learned-rules.d.ts.map +1 -0
- package/dist/hints/rules/learned-rules.js +27 -0
- package/dist/hints/rules/learned-rules.js.map +1 -0
- package/dist/hints/rules/pagination-detection.d.ts +7 -0
- package/dist/hints/rules/pagination-detection.d.ts.map +1 -0
- package/dist/hints/rules/pagination-detection.js +220 -0
- package/dist/hints/rules/pagination-detection.js.map +1 -0
- package/dist/hints/rules/repetition-detection.d.ts +7 -0
- package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
- package/dist/hints/rules/repetition-detection.js +271 -0
- package/dist/hints/rules/repetition-detection.js.map +1 -0
- package/dist/hints/rules/sequence-detection.d.ts +6 -0
- package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
- package/dist/hints/rules/sequence-detection.js +99 -0
- package/dist/hints/rules/sequence-detection.js.map +1 -0
- package/dist/hints/rules/setup-hints.d.ts +6 -0
- package/dist/hints/rules/setup-hints.d.ts.map +1 -0
- package/dist/hints/rules/setup-hints.js +24 -0
- package/dist/hints/rules/setup-hints.js.map +1 -0
- package/dist/hints/rules/success-hints.d.ts +6 -0
- package/dist/hints/rules/success-hints.d.ts.map +1 -0
- package/dist/hints/rules/success-hints.js +74 -0
- package/dist/hints/rules/success-hints.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +357 -0
- package/dist/index.js.map +1 -0
- package/dist/lightpanda/launcher.d.ts +58 -0
- package/dist/lightpanda/launcher.d.ts.map +1 -0
- package/dist/lightpanda/launcher.js +210 -0
- package/dist/lightpanda/launcher.js.map +1 -0
- package/dist/mcp-server.d.ts +154 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +962 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/memory/domain-memory.d.ts +68 -0
- package/dist/memory/domain-memory.d.ts.map +1 -0
- package/dist/memory/domain-memory.js +224 -0
- package/dist/memory/domain-memory.js.map +1 -0
- package/dist/orchestration/plan-executor.d.ts +19 -0
- package/dist/orchestration/plan-executor.d.ts.map +1 -0
- package/dist/orchestration/plan-executor.js +276 -0
- package/dist/orchestration/plan-executor.js.map +1 -0
- package/dist/orchestration/plan-registry.d.ts +55 -0
- package/dist/orchestration/plan-registry.d.ts.map +1 -0
- package/dist/orchestration/plan-registry.js +256 -0
- package/dist/orchestration/plan-registry.js.map +1 -0
- package/dist/orchestration/state-manager.d.ts +127 -0
- package/dist/orchestration/state-manager.d.ts.map +1 -0
- package/dist/orchestration/state-manager.js +438 -0
- package/dist/orchestration/state-manager.js.map +1 -0
- package/dist/orchestration/workflow-engine.d.ts +162 -0
- package/dist/orchestration/workflow-engine.d.ts.map +1 -0
- package/dist/orchestration/workflow-engine.js +748 -0
- package/dist/orchestration/workflow-engine.js.map +1 -0
- package/dist/resources/usage-guide.d.ts +13 -0
- package/dist/resources/usage-guide.d.ts.map +1 -0
- package/dist/resources/usage-guide.js +123 -0
- package/dist/resources/usage-guide.js.map +1 -0
- package/dist/router/browser-router.d.ts +47 -0
- package/dist/router/browser-router.d.ts.map +1 -0
- package/dist/router/browser-router.js +157 -0
- package/dist/router/browser-router.js.map +1 -0
- package/dist/router/cookie-sync.d.ts +48 -0
- package/dist/router/cookie-sync.d.ts.map +1 -0
- package/dist/router/cookie-sync.js +106 -0
- package/dist/router/cookie-sync.js.map +1 -0
- package/dist/router/index.d.ts +5 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +10 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/tool-routing-registry.d.ts +21 -0
- package/dist/router/tool-routing-registry.d.ts.map +1 -0
- package/dist/router/tool-routing-registry.js +89 -0
- package/dist/router/tool-routing-registry.js.map +1 -0
- package/dist/security/audit-logger.d.ts +2 -0
- package/dist/security/audit-logger.d.ts.map +1 -0
- package/dist/security/audit-logger.js +109 -0
- package/dist/security/audit-logger.js.map +1 -0
- package/dist/security/domain-guard.d.ts +11 -0
- package/dist/security/domain-guard.d.ts.map +1 -0
- package/dist/security/domain-guard.js +98 -0
- package/dist/security/domain-guard.js.map +1 -0
- package/dist/session-manager.d.ts +325 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +1402 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/storage-state/index.d.ts +2 -0
- package/dist/storage-state/index.d.ts.map +1 -0
- package/dist/storage-state/index.js +6 -0
- package/dist/storage-state/index.js.map +1 -0
- package/dist/storage-state/storage-state-manager.d.ts +52 -0
- package/dist/storage-state/storage-state-manager.d.ts.map +1 -0
- package/dist/storage-state/storage-state-manager.js +135 -0
- package/dist/storage-state/storage-state-manager.js.map +1 -0
- package/dist/tools/batch-execute.d.ts +11 -0
- package/dist/tools/batch-execute.d.ts.map +1 -0
- package/dist/tools/batch-execute.js +218 -0
- package/dist/tools/batch-execute.js.map +1 -0
- package/dist/tools/batch-paginate.d.ts +10 -0
- package/dist/tools/batch-paginate.d.ts.map +1 -0
- package/dist/tools/batch-paginate.js +436 -0
- package/dist/tools/batch-paginate.js.map +1 -0
- package/dist/tools/click-element.d.ts +8 -0
- package/dist/tools/click-element.d.ts.map +1 -0
- package/dist/tools/click-element.js +281 -0
- package/dist/tools/click-element.js.map +1 -0
- package/dist/tools/computer.d.ts +6 -0
- package/dist/tools/computer.d.ts.map +1 -0
- package/dist/tools/computer.js +832 -0
- package/dist/tools/computer.js.map +1 -0
- package/dist/tools/console-capture.d.ts +6 -0
- package/dist/tools/console-capture.d.ts.map +1 -0
- package/dist/tools/console-capture.js +380 -0
- package/dist/tools/console-capture.js.map +1 -0
- package/dist/tools/cookies.d.ts +6 -0
- package/dist/tools/cookies.d.ts.map +1 -0
- package/dist/tools/cookies.js +366 -0
- package/dist/tools/cookies.js.map +1 -0
- package/dist/tools/drag-drop.d.ts +6 -0
- package/dist/tools/drag-drop.d.ts.map +1 -0
- package/dist/tools/drag-drop.js +263 -0
- package/dist/tools/drag-drop.js.map +1 -0
- package/dist/tools/emulate-device.d.ts +6 -0
- package/dist/tools/emulate-device.d.ts.map +1 -0
- package/dist/tools/emulate-device.js +219 -0
- package/dist/tools/emulate-device.js.map +1 -0
- package/dist/tools/file-upload.d.ts +6 -0
- package/dist/tools/file-upload.d.ts.map +1 -0
- package/dist/tools/file-upload.js +224 -0
- package/dist/tools/file-upload.js.map +1 -0
- package/dist/tools/fill-form.d.ts +8 -0
- package/dist/tools/fill-form.d.ts.map +1 -0
- package/dist/tools/fill-form.js +311 -0
- package/dist/tools/fill-form.js.map +1 -0
- package/dist/tools/find.d.ts +6 -0
- package/dist/tools/find.d.ts.map +1 -0
- package/dist/tools/find.js +163 -0
- package/dist/tools/find.js.map +1 -0
- package/dist/tools/form-input.d.ts +6 -0
- package/dist/tools/form-input.d.ts.map +1 -0
- package/dist/tools/form-input.js +219 -0
- package/dist/tools/form-input.js.map +1 -0
- package/dist/tools/geolocation.d.ts +6 -0
- package/dist/tools/geolocation.d.ts.map +1 -0
- package/dist/tools/geolocation.js +170 -0
- package/dist/tools/geolocation.js.map +1 -0
- package/dist/tools/http-auth.d.ts +6 -0
- package/dist/tools/http-auth.d.ts.map +1 -0
- package/dist/tools/http-auth.js +132 -0
- package/dist/tools/http-auth.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +107 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inspect.d.ts +12 -0
- package/dist/tools/inspect.d.ts.map +1 -0
- package/dist/tools/inspect.js +483 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/interact.d.ts +9 -0
- package/dist/tools/interact.d.ts.map +1 -0
- package/dist/tools/interact.js +366 -0
- package/dist/tools/interact.js.map +1 -0
- package/dist/tools/javascript.d.ts +7 -0
- package/dist/tools/javascript.d.ts.map +1 -0
- package/dist/tools/javascript.js +214 -0
- package/dist/tools/javascript.js.map +1 -0
- package/dist/tools/lightweight-scroll.d.ts +11 -0
- package/dist/tools/lightweight-scroll.d.ts.map +1 -0
- package/dist/tools/lightweight-scroll.js +314 -0
- package/dist/tools/lightweight-scroll.js.map +1 -0
- package/dist/tools/list-profiles.d.ts +10 -0
- package/dist/tools/list-profiles.d.ts.map +1 -0
- package/dist/tools/list-profiles.js +79 -0
- package/dist/tools/list-profiles.js.map +1 -0
- package/dist/tools/memory.d.ts +13 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +159 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/navigate.d.ts +6 -0
- package/dist/tools/navigate.d.ts.map +1 -0
- package/dist/tools/navigate.js +422 -0
- package/dist/tools/navigate.js.map +1 -0
- package/dist/tools/network.d.ts +6 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +229 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/orchestration.d.ts +6 -0
- package/dist/tools/orchestration.d.ts.map +1 -0
- package/dist/tools/orchestration.js +735 -0
- package/dist/tools/orchestration.js.map +1 -0
- package/dist/tools/page-content.d.ts +6 -0
- package/dist/tools/page-content.d.ts.map +1 -0
- package/dist/tools/page-content.js +129 -0
- package/dist/tools/page-content.js.map +1 -0
- package/dist/tools/page-pdf.d.ts +6 -0
- package/dist/tools/page-pdf.d.ts.map +1 -0
- package/dist/tools/page-pdf.js +268 -0
- package/dist/tools/page-pdf.js.map +1 -0
- package/dist/tools/page-reload.d.ts +6 -0
- package/dist/tools/page-reload.d.ts.map +1 -0
- package/dist/tools/page-reload.js +91 -0
- package/dist/tools/page-reload.js.map +1 -0
- package/dist/tools/performance-metrics.d.ts +6 -0
- package/dist/tools/performance-metrics.d.ts.map +1 -0
- package/dist/tools/performance-metrics.js +154 -0
- package/dist/tools/performance-metrics.js.map +1 -0
- package/dist/tools/profile-status.d.ts +10 -0
- package/dist/tools/profile-status.d.ts.map +1 -0
- package/dist/tools/profile-status.js +108 -0
- package/dist/tools/profile-status.js.map +1 -0
- package/dist/tools/query-dom.d.ts +8 -0
- package/dist/tools/query-dom.d.ts.map +1 -0
- package/dist/tools/query-dom.js +647 -0
- package/dist/tools/query-dom.js.map +1 -0
- package/dist/tools/read-page.d.ts +6 -0
- package/dist/tools/read-page.d.ts.map +1 -0
- package/dist/tools/read-page.js +544 -0
- package/dist/tools/read-page.js.map +1 -0
- package/dist/tools/request-intercept.d.ts +6 -0
- package/dist/tools/request-intercept.d.ts.map +1 -0
- package/dist/tools/request-intercept.js +537 -0
- package/dist/tools/request-intercept.js.map +1 -0
- package/dist/tools/shutdown.d.ts +12 -0
- package/dist/tools/shutdown.d.ts.map +1 -0
- package/dist/tools/shutdown.js +124 -0
- package/dist/tools/shutdown.js.map +1 -0
- package/dist/tools/storage.d.ts +6 -0
- package/dist/tools/storage.d.ts.map +1 -0
- package/dist/tools/storage.js +262 -0
- package/dist/tools/storage.js.map +1 -0
- package/dist/tools/tabs-close.d.ts +6 -0
- package/dist/tools/tabs-close.d.ts.map +1 -0
- package/dist/tools/tabs-close.js +124 -0
- package/dist/tools/tabs-close.js.map +1 -0
- package/dist/tools/tabs-context.d.ts +6 -0
- package/dist/tools/tabs-context.d.ts.map +1 -0
- package/dist/tools/tabs-context.js +117 -0
- package/dist/tools/tabs-context.js.map +1 -0
- package/dist/tools/tabs-create.d.ts +6 -0
- package/dist/tools/tabs-create.d.ts.map +1 -0
- package/dist/tools/tabs-create.js +90 -0
- package/dist/tools/tabs-create.js.map +1 -0
- package/dist/tools/user-agent.d.ts +6 -0
- package/dist/tools/user-agent.d.ts.map +1 -0
- package/dist/tools/user-agent.js +126 -0
- package/dist/tools/user-agent.js.map +1 -0
- package/dist/tools/wait-and-click.d.ts +8 -0
- package/dist/tools/wait-and-click.d.ts.map +1 -0
- package/dist/tools/wait-and-click.js +165 -0
- package/dist/tools/wait-and-click.js.map +1 -0
- package/dist/tools/wait-for.d.ts +6 -0
- package/dist/tools/wait-for.d.ts.map +1 -0
- package/dist/tools/wait-for.js +290 -0
- package/dist/tools/wait-for.js.map +1 -0
- package/dist/tools/worker.d.ts +8 -0
- package/dist/tools/worker.d.ts.map +1 -0
- package/dist/tools/worker.js +160 -0
- package/dist/tools/worker.js.map +1 -0
- package/dist/types/browser-backend.d.ts +30 -0
- package/dist/types/browser-backend.d.ts.map +1 -0
- package/dist/types/browser-backend.js +9 -0
- package/dist/types/browser-backend.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +63 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +14 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/plan-cache.d.ts +121 -0
- package/dist/types/plan-cache.d.ts.map +1 -0
- package/dist/types/plan-cache.js +9 -0
- package/dist/types/plan-cache.js.map +1 -0
- package/dist/types/session.d.ts +65 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +6 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/tool-manifest.d.ts +52 -0
- package/dist/types/tool-manifest.d.ts.map +1 -0
- package/dist/types/tool-manifest.js +37 -0
- package/dist/types/tool-manifest.js.map +1 -0
- package/dist/utils/adaptive-screenshot.d.ts +57 -0
- package/dist/utils/adaptive-screenshot.d.ts.map +1 -0
- package/dist/utils/adaptive-screenshot.js +126 -0
- package/dist/utils/adaptive-screenshot.js.map +1 -0
- package/dist/utils/atomic-file.d.ts +50 -0
- package/dist/utils/atomic-file.d.ts.map +1 -0
- package/dist/utils/atomic-file.js +217 -0
- package/dist/utils/atomic-file.js.map +1 -0
- package/dist/utils/dom-delta.d.ts +36 -0
- package/dist/utils/dom-delta.d.ts.map +1 -0
- package/dist/utils/dom-delta.js +314 -0
- package/dist/utils/dom-delta.js.map +1 -0
- package/dist/utils/element-discovery.d.ts +115 -0
- package/dist/utils/element-discovery.d.ts.map +1 -0
- package/dist/utils/element-discovery.js +519 -0
- package/dist/utils/element-discovery.js.map +1 -0
- package/dist/utils/element-finder.d.ts +49 -0
- package/dist/utils/element-finder.d.ts.map +1 -0
- package/dist/utils/element-finder.js +130 -0
- package/dist/utils/element-finder.js.map +1 -0
- package/dist/utils/format-age.d.ts +5 -0
- package/dist/utils/format-age.d.ts.map +1 -0
- package/dist/utils/format-age.js +15 -0
- package/dist/utils/format-age.js.map +1 -0
- package/dist/utils/format-error.d.ts +5 -0
- package/dist/utils/format-error.d.ts.map +1 -0
- package/dist/utils/format-error.js +10 -0
- package/dist/utils/format-error.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-validator.d.ts +40 -0
- package/dist/utils/json-validator.d.ts.map +1 -0
- package/dist/utils/json-validator.js +295 -0
- package/dist/utils/json-validator.js.map +1 -0
- package/dist/utils/page-diagnostics.d.ts +23 -0
- package/dist/utils/page-diagnostics.d.ts.map +1 -0
- package/dist/utils/page-diagnostics.js +95 -0
- package/dist/utils/page-diagnostics.js.map +1 -0
- package/dist/utils/pagination-detector.d.ts +22 -0
- package/dist/utils/pagination-detector.d.ts.map +1 -0
- package/dist/utils/pagination-detector.js +292 -0
- package/dist/utils/pagination-detector.js.map +1 -0
- package/dist/utils/pid-manager.d.ts +6 -0
- package/dist/utils/pid-manager.d.ts.map +1 -0
- package/dist/utils/pid-manager.js +135 -0
- package/dist/utils/pid-manager.js.map +1 -0
- package/dist/utils/puppeteer-helpers.d.ts +8 -0
- package/dist/utils/puppeteer-helpers.d.ts.map +1 -0
- package/dist/utils/puppeteer-helpers.js +12 -0
- package/dist/utils/puppeteer-helpers.js.map +1 -0
- package/dist/utils/ref-id-manager.d.ts +72 -0
- package/dist/utils/ref-id-manager.d.ts.map +1 -0
- package/dist/utils/ref-id-manager.js +325 -0
- package/dist/utils/ref-id-manager.js.map +1 -0
- package/dist/utils/request-queue.d.ts +37 -0
- package/dist/utils/request-queue.d.ts.map +1 -0
- package/dist/utils/request-queue.js +114 -0
- package/dist/utils/request-queue.js.map +1 -0
- package/dist/utils/retry-with-fallback.d.ts +18 -0
- package/dist/utils/retry-with-fallback.d.ts.map +1 -0
- package/dist/utils/retry-with-fallback.js +39 -0
- package/dist/utils/retry-with-fallback.js.map +1 -0
- package/dist/utils/safe-title.d.ts +10 -0
- package/dist/utils/safe-title.d.ts.map +1 -0
- package/dist/utils/safe-title.js +24 -0
- package/dist/utils/safe-title.js.map +1 -0
- package/dist/utils/schema-validator.d.ts +12 -0
- package/dist/utils/schema-validator.d.ts.map +1 -0
- package/dist/utils/schema-validator.js +70 -0
- package/dist/utils/schema-validator.js.map +1 -0
- package/dist/utils/shadow-dom.d.ts +114 -0
- package/dist/utils/shadow-dom.d.ts.map +1 -0
- package/dist/utils/shadow-dom.js +385 -0
- package/dist/utils/shadow-dom.js.map +1 -0
- package/dist/utils/smart-goto.d.ts +39 -0
- package/dist/utils/smart-goto.d.ts.map +1 -0
- package/dist/utils/smart-goto.js +134 -0
- package/dist/utils/smart-goto.js.map +1 -0
- package/dist/utils/url-utils.d.ts +5 -0
- package/dist/utils/url-utils.d.ts.map +1 -0
- package/dist/utils/url-utils.js +15 -0
- package/dist/utils/url-utils.js.map +1 -0
- package/dist/utils/visual-summary.d.ts +17 -0
- package/dist/utils/visual-summary.d.ts.map +1 -0
- package/dist/utils/visual-summary.js +215 -0
- package/dist/utils/visual-summary.js.map +1 -0
- package/dist/utils/with-timeout.d.ts +5 -0
- package/dist/utils/with-timeout.d.ts.map +1 -0
- package/dist/utils/with-timeout.js +15 -0
- package/dist/utils/with-timeout.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +22 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolRoutingRegistry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Static mapping of all tool names to their backend routing preference.
|
|
6
|
+
*
|
|
7
|
+
* chrome-only: Tools that require Chrome capabilities (screenshots, PDF).
|
|
8
|
+
* prefer-lightpanda: Tools that can run on Lightpanda for better performance.
|
|
9
|
+
*/
|
|
10
|
+
const TOOL_ROUTING_MAP = {
|
|
11
|
+
// Chrome-only tools (visual capabilities)
|
|
12
|
+
computer: 'chrome-only',
|
|
13
|
+
page_pdf: 'chrome-only',
|
|
14
|
+
// Core tools - prefer-lightpanda
|
|
15
|
+
navigate: 'prefer-lightpanda',
|
|
16
|
+
read_page: 'prefer-lightpanda',
|
|
17
|
+
find: 'prefer-lightpanda',
|
|
18
|
+
form_input: 'prefer-lightpanda',
|
|
19
|
+
javascript_tool: 'prefer-lightpanda',
|
|
20
|
+
network: 'prefer-lightpanda',
|
|
21
|
+
// Phase 1 tools - prefer-lightpanda
|
|
22
|
+
page_reload: 'prefer-lightpanda',
|
|
23
|
+
cookies: 'prefer-lightpanda',
|
|
24
|
+
query_dom: 'prefer-lightpanda',
|
|
25
|
+
page_content: 'prefer-lightpanda',
|
|
26
|
+
wait_for: 'prefer-lightpanda',
|
|
27
|
+
storage: 'prefer-lightpanda',
|
|
28
|
+
// Phase 2 tools - prefer-lightpanda
|
|
29
|
+
user_agent: 'prefer-lightpanda',
|
|
30
|
+
geolocation: 'prefer-lightpanda',
|
|
31
|
+
emulate_device: 'prefer-lightpanda',
|
|
32
|
+
console_capture: 'prefer-lightpanda',
|
|
33
|
+
performance_metrics: 'prefer-lightpanda',
|
|
34
|
+
request_intercept: 'prefer-lightpanda',
|
|
35
|
+
// Phase 3 tools - prefer-lightpanda
|
|
36
|
+
file_upload: 'prefer-lightpanda',
|
|
37
|
+
http_auth: 'prefer-lightpanda',
|
|
38
|
+
drag_drop: 'prefer-lightpanda',
|
|
39
|
+
// UX composite tools - prefer-lightpanda
|
|
40
|
+
click_element: 'prefer-lightpanda',
|
|
41
|
+
fill_form: 'prefer-lightpanda',
|
|
42
|
+
wait_and_click: 'prefer-lightpanda',
|
|
43
|
+
// Tab management tools - prefer-lightpanda
|
|
44
|
+
tabs_context: 'prefer-lightpanda',
|
|
45
|
+
tabs_create: 'prefer-lightpanda',
|
|
46
|
+
tabs_close: 'prefer-lightpanda',
|
|
47
|
+
// Worker management tool - prefer-lightpanda
|
|
48
|
+
worker: 'prefer-lightpanda',
|
|
49
|
+
// Memory tool - prefer-lightpanda
|
|
50
|
+
memory: 'prefer-lightpanda',
|
|
51
|
+
// Orchestration tools - prefer-lightpanda
|
|
52
|
+
workflow_init: 'prefer-lightpanda',
|
|
53
|
+
workflow_status: 'prefer-lightpanda',
|
|
54
|
+
workflow_collect: 'prefer-lightpanda',
|
|
55
|
+
workflow_cleanup: 'prefer-lightpanda',
|
|
56
|
+
};
|
|
57
|
+
class ToolRoutingRegistry {
|
|
58
|
+
/**
|
|
59
|
+
* Returns the routing preference for a given tool name.
|
|
60
|
+
* Unknown tools default to 'chrome-only' as a safe fallback.
|
|
61
|
+
*/
|
|
62
|
+
static getRouting(toolName) {
|
|
63
|
+
return TOOL_ROUTING_MAP[toolName] ?? 'chrome-only';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns true if the tool requires Chrome (screenshot/PDF capability).
|
|
67
|
+
*/
|
|
68
|
+
static isVisualTool(toolName) {
|
|
69
|
+
return TOOL_ROUTING_MAP[toolName] === 'chrome-only';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Returns the list of all chrome-only tool names.
|
|
73
|
+
*/
|
|
74
|
+
static getChromeOnlyTools() {
|
|
75
|
+
return Object.entries(TOOL_ROUTING_MAP)
|
|
76
|
+
.filter(([, routing]) => routing === 'chrome-only')
|
|
77
|
+
.map(([name]) => name);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns the list of all prefer-lightpanda tool names.
|
|
81
|
+
*/
|
|
82
|
+
static getPreferLightpandaTools() {
|
|
83
|
+
return Object.entries(TOOL_ROUTING_MAP)
|
|
84
|
+
.filter(([, routing]) => routing === 'prefer-lightpanda')
|
|
85
|
+
.map(([name]) => name);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.ToolRoutingRegistry = ToolRoutingRegistry;
|
|
89
|
+
//# sourceMappingURL=tool-routing-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-routing-registry.js","sourceRoot":"","sources":["../../src/router/tool-routing-registry.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAM,gBAAgB,GAAgC;IACpD,0CAA0C;IAC1C,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IAEvB,iCAAiC;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,mBAAmB;IAC9B,IAAI,EAAE,mBAAmB;IACzB,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,mBAAmB;IACpC,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,mBAAmB;IAC5B,SAAS,EAAE,mBAAmB;IAC9B,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,mBAAmB;IAE5B,oCAAoC;IACpC,UAAU,EAAE,mBAAmB;IAC/B,WAAW,EAAE,mBAAmB;IAChC,cAAc,EAAE,mBAAmB;IACnC,eAAe,EAAE,mBAAmB;IACpC,mBAAmB,EAAE,mBAAmB;IACxC,iBAAiB,EAAE,mBAAmB;IAEtC,oCAAoC;IACpC,WAAW,EAAE,mBAAmB;IAChC,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAE9B,yCAAyC;IACzC,aAAa,EAAE,mBAAmB;IAClC,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,mBAAmB;IAEnC,2CAA2C;IAC3C,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,mBAAmB;IAChC,UAAU,EAAE,mBAAmB;IAE/B,6CAA6C;IAC7C,MAAM,EAAE,mBAAmB;IAE3B,kCAAkC;IAClC,MAAM,EAAE,mBAAmB;IAE3B,0CAA0C;IAC1C,aAAa,EAAE,mBAAmB;IAClC,eAAe,EAAE,mBAAmB;IACpC,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;CACtC,CAAC;AAEF,MAAa,mBAAmB;IAC9B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAgB;QAChC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAgB;QAClC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB;QACvB,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC;aAClD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,wBAAwB;QAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,mBAAmB,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF;AAjCD,kDAiCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"AAwDA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA4BpH"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.logAuditEntry = logAuditEntry;
|
|
37
|
+
/**
|
|
38
|
+
* Audit Logger - Logs tool invocations for security review
|
|
39
|
+
* Writes structured JSONL to ~/.openchrome/audit.log
|
|
40
|
+
*/
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const global_1 = require("../config/global");
|
|
45
|
+
const url_utils_1 = require("../utils/url-utils");
|
|
46
|
+
let logDirEnsured = false;
|
|
47
|
+
// Get log file path
|
|
48
|
+
function getLogPath() {
|
|
49
|
+
const config = (0, global_1.getGlobalConfig)();
|
|
50
|
+
return config.security?.audit_log_path ||
|
|
51
|
+
path.join(os.homedir(), '.openchrome', 'audit.log');
|
|
52
|
+
}
|
|
53
|
+
// Extract domain from URL safely
|
|
54
|
+
function extractDomain(url) {
|
|
55
|
+
if (!url)
|
|
56
|
+
return null;
|
|
57
|
+
return (0, url_utils_1.extractHostname)(url) || null;
|
|
58
|
+
}
|
|
59
|
+
const SENSITIVE_KEYS = ['password', 'cookie', 'token', 'secret', 'auth', 'credential', 'value', 'text'];
|
|
60
|
+
function isSensitiveKey(key) {
|
|
61
|
+
const lower = key.toLowerCase();
|
|
62
|
+
return SENSITIVE_KEYS.some(s => lower.includes(s));
|
|
63
|
+
}
|
|
64
|
+
// Summarize args (redact sensitive values)
|
|
65
|
+
function summarizeArgs(args) {
|
|
66
|
+
// Include keys like tabId, url, action but redact values of sensitive keys
|
|
67
|
+
const safe = {};
|
|
68
|
+
for (const [key, value] of Object.entries(args)) {
|
|
69
|
+
if (isSensitiveKey(key)) {
|
|
70
|
+
safe[key] = '[REDACTED]';
|
|
71
|
+
}
|
|
72
|
+
else if (typeof value === 'string' && value.length > 100) {
|
|
73
|
+
safe[key] = value.slice(0, 100) + '...';
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
safe[key] = value;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return JSON.stringify(safe);
|
|
80
|
+
}
|
|
81
|
+
function logAuditEntry(tool, sessionId, args, pageUrl) {
|
|
82
|
+
const config = (0, global_1.getGlobalConfig)();
|
|
83
|
+
if (!config.security?.audit_log)
|
|
84
|
+
return; // Disabled by default
|
|
85
|
+
const entry = {
|
|
86
|
+
timestamp: new Date().toISOString(),
|
|
87
|
+
tool,
|
|
88
|
+
domain: extractDomain(pageUrl || args.url),
|
|
89
|
+
sessionId,
|
|
90
|
+
args_summary: summarizeArgs(args),
|
|
91
|
+
};
|
|
92
|
+
const logPath = getLogPath();
|
|
93
|
+
const logDir = path.dirname(logPath);
|
|
94
|
+
// Ensure directory exists (first time only)
|
|
95
|
+
if (!logDirEnsured) {
|
|
96
|
+
try {
|
|
97
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
98
|
+
logDirEnsured = true;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return; // Non-fatal
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Non-blocking append
|
|
105
|
+
const line = JSON.stringify(entry) + '\n';
|
|
106
|
+
fs.appendFile(logPath, line, (err) => { if (err)
|
|
107
|
+
console.error('[audit-logger] write failed:', err.code); });
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=audit-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/security/audit-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check whether a URL's domain is blocked by the configured blocklist.
|
|
3
|
+
* Returns false (allowed) if no blocked_domains are configured.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isDomainBlocked(url: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Assert that the given URL is not blocked.
|
|
8
|
+
* Throws a descriptive error if the domain is on the blocklist.
|
|
9
|
+
*/
|
|
10
|
+
export declare function assertDomainAllowed(url: string): void;
|
|
11
|
+
//# sourceMappingURL=domain-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-guard.d.ts","sourceRoot":"","sources":["../../src/security/domain-guard.ts"],"names":[],"mappings":"AA2DA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAiBpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAwBrD"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDomainBlocked = isDomainBlocked;
|
|
4
|
+
exports.assertDomainAllowed = assertDomainAllowed;
|
|
5
|
+
/**
|
|
6
|
+
* Domain Guard - Blocks AI agent access to configured domains
|
|
7
|
+
* Default-allow: no domains blocked unless explicitly configured.
|
|
8
|
+
*/
|
|
9
|
+
const global_1 = require("../config/global");
|
|
10
|
+
const url_utils_1 = require("../utils/url-utils");
|
|
11
|
+
/**
|
|
12
|
+
* Convert a glob pattern to a RegExp.
|
|
13
|
+
* Supports "*" as a wildcard matching any sequence of non-dot characters,
|
|
14
|
+
* and "**" or leading "*." to match across subdomains.
|
|
15
|
+
* Examples:
|
|
16
|
+
* "*.bank.com" -> matches "www.bank.com", "login.bank.com"
|
|
17
|
+
* "mail.google.com" -> exact match only
|
|
18
|
+
*/
|
|
19
|
+
function globToRegex(pattern) {
|
|
20
|
+
// Reject overly long patterns (DNS max is 253 chars)
|
|
21
|
+
if (pattern.length > 253) {
|
|
22
|
+
throw new Error(`Domain pattern too long (${pattern.length} chars, max 253): "${pattern.slice(0, 50)}..."`);
|
|
23
|
+
}
|
|
24
|
+
// Escape all regex special chars except "*"
|
|
25
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
26
|
+
// Replace "*" with "[^.]*" to match any non-dot characters (single-level wildcard)
|
|
27
|
+
// This means "*.bank.com" matches "www.bank.com" but NOT "a.b.bank.com"
|
|
28
|
+
const regexStr = escaped.replace(/\*/g, '[^.]*');
|
|
29
|
+
return new RegExp(`^${regexStr}$`, 'i');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Extract the hostname from a URL string.
|
|
33
|
+
* Returns null for invalid URLs or special schemes (about:, chrome:, etc.).
|
|
34
|
+
*/
|
|
35
|
+
function extractHostname(url) {
|
|
36
|
+
// Always allow special browser URLs
|
|
37
|
+
if (url === 'about:blank' ||
|
|
38
|
+
url.startsWith('about:') ||
|
|
39
|
+
url.startsWith('chrome:') ||
|
|
40
|
+
url.startsWith('chrome-extension:')) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
// Allow data: URIs — they don't have hostnames and blocking them globally
|
|
44
|
+
// would break inline images, SVGs, and other legitimate content.
|
|
45
|
+
// Note: file: URIs are NOT exempted — they could be used to read local files.
|
|
46
|
+
if (url.startsWith('data:')) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const hostname = (0, url_utils_1.extractHostname)(url).toLowerCase();
|
|
50
|
+
if (hostname)
|
|
51
|
+
return hostname;
|
|
52
|
+
// Try adding protocol for bare hostnames (e.g., "bank.com")
|
|
53
|
+
const fallback = (0, url_utils_1.extractHostname)('https://' + url).toLowerCase();
|
|
54
|
+
return fallback || null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check whether a URL's domain is blocked by the configured blocklist.
|
|
58
|
+
* Returns false (allowed) if no blocked_domains are configured.
|
|
59
|
+
*/
|
|
60
|
+
function isDomainBlocked(url) {
|
|
61
|
+
const config = (0, global_1.getGlobalConfig)();
|
|
62
|
+
const blockedDomains = config.security?.blocked_domains;
|
|
63
|
+
if (!blockedDomains || blockedDomains.length === 0) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const hostname = extractHostname(url);
|
|
67
|
+
if (!hostname) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return blockedDomains.some((pattern) => {
|
|
71
|
+
const regex = globToRegex(pattern);
|
|
72
|
+
return regex.test(hostname);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Assert that the given URL is not blocked.
|
|
77
|
+
* Throws a descriptive error if the domain is on the blocklist.
|
|
78
|
+
*/
|
|
79
|
+
function assertDomainAllowed(url) {
|
|
80
|
+
const config = (0, global_1.getGlobalConfig)();
|
|
81
|
+
const blockedDomains = config.security?.blocked_domains;
|
|
82
|
+
if (!blockedDomains || blockedDomains.length === 0) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const hostname = extractHostname(url);
|
|
86
|
+
if (!hostname) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const matchedPattern = blockedDomains.find((pattern) => {
|
|
90
|
+
const regex = globToRegex(pattern);
|
|
91
|
+
return regex.test(hostname);
|
|
92
|
+
});
|
|
93
|
+
if (matchedPattern) {
|
|
94
|
+
throw new Error(`Access to domain "${hostname}" is blocked by security policy (matched pattern: "${matchedPattern}"). ` +
|
|
95
|
+
`Configure blocked_domains in your OpenChrome security settings to change this.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=domain-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-guard.js","sourceRoot":"","sources":["../../src/security/domain-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Manager - Manages lifecycle of parallel Claude Code sessions
|
|
3
|
+
* Supports multiple Workers within a single session for parallel browser operations
|
|
4
|
+
*/
|
|
5
|
+
import { Page } from 'puppeteer-core';
|
|
6
|
+
import { Session, SessionInfo, SessionCreateOptions, SessionEvent, Worker, WorkerInfo, WorkerCreateOptions } from './types/session';
|
|
7
|
+
import { CDPClient } from './cdp/client';
|
|
8
|
+
import { PoolStats } from './cdp/connection-pool';
|
|
9
|
+
import { BrowserRouter } from './router';
|
|
10
|
+
import { HybridConfig } from './types/browser-backend';
|
|
11
|
+
import { StorageStateConfig } from './config';
|
|
12
|
+
export interface SessionManagerConfig {
|
|
13
|
+
/** Session TTL in milliseconds (default: 30 minutes) */
|
|
14
|
+
sessionTTL?: number;
|
|
15
|
+
/** Auto-cleanup interval in milliseconds (default: 1 minute) */
|
|
16
|
+
cleanupInterval?: number;
|
|
17
|
+
/** Enable auto-cleanup (default: true) */
|
|
18
|
+
autoCleanup?: boolean;
|
|
19
|
+
/** Maximum number of sessions (default: 100) */
|
|
20
|
+
maxSessions?: number;
|
|
21
|
+
/** Maximum workers per session (default: 20) */
|
|
22
|
+
maxWorkersPerSession?: number;
|
|
23
|
+
/** Maximum targets (tabs) per worker (default: 5). Oldest closed when exceeded. */
|
|
24
|
+
maxTargetsPerWorker?: number;
|
|
25
|
+
/** Memory pressure threshold in bytes. Below this free memory, aggressive cleanup triggers. (default: 500MB) */
|
|
26
|
+
memoryPressureThreshold?: number;
|
|
27
|
+
/** Use connection pool for page management (default: false for worker isolation) */
|
|
28
|
+
useConnectionPool?: boolean;
|
|
29
|
+
/** Use default browser context (shares cookies/sessions with Chrome profile) */
|
|
30
|
+
useDefaultContext?: boolean;
|
|
31
|
+
/** Enable Chrome pool for origin-aware instance distribution (default: false) */
|
|
32
|
+
usePool?: boolean;
|
|
33
|
+
/** Storage state persistence config (default: disabled) */
|
|
34
|
+
storageState?: StorageStateConfig;
|
|
35
|
+
}
|
|
36
|
+
export interface SessionManagerStats {
|
|
37
|
+
activeSessions: number;
|
|
38
|
+
totalTargets: number;
|
|
39
|
+
totalWorkers: number;
|
|
40
|
+
totalSessionsCreated: number;
|
|
41
|
+
totalSessionsCleaned: number;
|
|
42
|
+
uptime: number;
|
|
43
|
+
lastCleanup: number | null;
|
|
44
|
+
memoryUsage: number;
|
|
45
|
+
connectionPool?: PoolStats;
|
|
46
|
+
}
|
|
47
|
+
export declare class SessionManager {
|
|
48
|
+
private sessions;
|
|
49
|
+
private targetToWorker;
|
|
50
|
+
private cdpClient;
|
|
51
|
+
private connectionPool;
|
|
52
|
+
private chromePool;
|
|
53
|
+
private cdpFactory;
|
|
54
|
+
private queueManager;
|
|
55
|
+
private eventListeners;
|
|
56
|
+
private browserRouter;
|
|
57
|
+
private storageStateManagers;
|
|
58
|
+
private storageStateConfig;
|
|
59
|
+
private pendingCreations;
|
|
60
|
+
private config;
|
|
61
|
+
private cleanupTimer;
|
|
62
|
+
private startTime;
|
|
63
|
+
private totalSessionsCreated;
|
|
64
|
+
private totalSessionsCleaned;
|
|
65
|
+
private lastCleanupTime;
|
|
66
|
+
constructor(cdpClient?: CDPClient, config?: SessionManagerConfig);
|
|
67
|
+
/**
|
|
68
|
+
* Get the CDPClient for a specific worker (may be on a different Chrome instance)
|
|
69
|
+
*/
|
|
70
|
+
private getCDPClientForWorker;
|
|
71
|
+
/**
|
|
72
|
+
* Start automatic cleanup interval
|
|
73
|
+
*/
|
|
74
|
+
private startAutoCleanup;
|
|
75
|
+
/**
|
|
76
|
+
* Stop automatic cleanup
|
|
77
|
+
*/
|
|
78
|
+
stopAutoCleanup(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get session manager statistics
|
|
81
|
+
*/
|
|
82
|
+
getStats(): SessionManagerStats;
|
|
83
|
+
/**
|
|
84
|
+
* Get current configuration
|
|
85
|
+
*/
|
|
86
|
+
getConfig(): Required<SessionManagerConfig>;
|
|
87
|
+
/**
|
|
88
|
+
* Update configuration
|
|
89
|
+
*/
|
|
90
|
+
updateConfig(config: Partial<SessionManagerConfig>): void;
|
|
91
|
+
/**
|
|
92
|
+
* Ensure connected to Chrome
|
|
93
|
+
*/
|
|
94
|
+
ensureConnected(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Create a new session with a default worker
|
|
97
|
+
*/
|
|
98
|
+
createSession(options?: SessionCreateOptions): Promise<Session>;
|
|
99
|
+
/**
|
|
100
|
+
* Get or create a session
|
|
101
|
+
*/
|
|
102
|
+
getOrCreateSession(sessionId: string): Promise<Session>;
|
|
103
|
+
/**
|
|
104
|
+
* Get an existing session
|
|
105
|
+
*/
|
|
106
|
+
getSession(sessionId: string): Session | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Update last activity timestamp
|
|
109
|
+
*/
|
|
110
|
+
touchSession(sessionId: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* Delete a session and clean up all workers
|
|
113
|
+
*/
|
|
114
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Clean up inactive sessions
|
|
117
|
+
*/
|
|
118
|
+
cleanupInactiveSessions(maxAgeMs: number, options?: {
|
|
119
|
+
force?: boolean;
|
|
120
|
+
}): Promise<string[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Force cleanup all sessions (including "default").
|
|
123
|
+
* Unlike cleanupInactiveSessions, this is a forced full teardown (called on shutdown).
|
|
124
|
+
*/
|
|
125
|
+
cleanupAllSessions(): Promise<number>;
|
|
126
|
+
/**
|
|
127
|
+
* Create a new worker within a session
|
|
128
|
+
* Each worker has its own isolated browser context (cookies, localStorage, etc.)
|
|
129
|
+
*/
|
|
130
|
+
createWorker(sessionId: string, options?: WorkerCreateOptions): Promise<Worker>;
|
|
131
|
+
/**
|
|
132
|
+
* Get a worker by ID
|
|
133
|
+
*/
|
|
134
|
+
getWorker(sessionId: string, workerId: string): Worker | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Get or create a worker
|
|
137
|
+
*/
|
|
138
|
+
getOrCreateWorker(sessionId: string, workerId?: string): Promise<Worker>;
|
|
139
|
+
/**
|
|
140
|
+
* List all workers in a session
|
|
141
|
+
*/
|
|
142
|
+
getWorkers(sessionId: string): WorkerInfo[];
|
|
143
|
+
/**
|
|
144
|
+
* Delete a worker and its resources
|
|
145
|
+
*/
|
|
146
|
+
deleteWorker(sessionId: string, workerId: string): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Internal worker deletion (also used for cleanup)
|
|
149
|
+
*/
|
|
150
|
+
private deleteWorkerInternal;
|
|
151
|
+
/**
|
|
152
|
+
* Create a new page/target for a worker
|
|
153
|
+
* @param sessionId Session ID
|
|
154
|
+
* @param url Optional URL to navigate to
|
|
155
|
+
* @param workerId Optional worker ID (uses default worker if not specified)
|
|
156
|
+
*/
|
|
157
|
+
createTarget(sessionId: string, url?: string, workerId?: string): Promise<{
|
|
158
|
+
targetId: string;
|
|
159
|
+
page: Page;
|
|
160
|
+
workerId: string;
|
|
161
|
+
}>;
|
|
162
|
+
private _createTargetImpl;
|
|
163
|
+
/**
|
|
164
|
+
* CDP-free stealth navigation: opens a new tab via Chrome's HTTP debug API without
|
|
165
|
+
* attaching Puppeteer/CDP during page load, letting anti-bot checks (e.g. Cloudflare
|
|
166
|
+
* Turnstile) complete without CDP signals present. CDP attaches after settleMs.
|
|
167
|
+
*
|
|
168
|
+
* @param sessionId Session to register the new target under
|
|
169
|
+
* @param url URL to navigate to
|
|
170
|
+
* @param workerId Optional worker ID (uses default worker if omitted)
|
|
171
|
+
* @param settleMs How long to wait before attaching CDP (default 5000, range 1000-30000)
|
|
172
|
+
* @returns Registered targetId, Page, and workerId
|
|
173
|
+
*/
|
|
174
|
+
createTargetStealth(sessionId: string, url: string, workerId?: string, settleMs?: number): Promise<{
|
|
175
|
+
targetId: string;
|
|
176
|
+
page: Page;
|
|
177
|
+
workerId: string;
|
|
178
|
+
}>;
|
|
179
|
+
/**
|
|
180
|
+
* Register a pre-acquired page as a target for a worker.
|
|
181
|
+
* Used by workflow engine when pages are batch-acquired from the pool
|
|
182
|
+
* to avoid per-page replenishment (about:blank proliferation fix).
|
|
183
|
+
*/
|
|
184
|
+
registerExistingTarget(sessionId: string, workerId: string, targetId: string): void;
|
|
185
|
+
/**
|
|
186
|
+
* Check if a target is still valid (page not closed)
|
|
187
|
+
*/
|
|
188
|
+
isTargetValid(targetId: string): Promise<boolean>;
|
|
189
|
+
/**
|
|
190
|
+
* Get page for a target
|
|
191
|
+
* @param sessionId Session ID
|
|
192
|
+
* @param targetId Target/Tab ID
|
|
193
|
+
* @param workerId Optional worker ID for validation
|
|
194
|
+
* @param toolName Optional MCP tool name for hybrid BrowserRouter routing
|
|
195
|
+
*/
|
|
196
|
+
getPage(sessionId: string, targetId: string, workerId?: string, toolName?: string): Promise<Page | null>;
|
|
197
|
+
/**
|
|
198
|
+
* Attempt to recover an untracked target that exists in Chrome.
|
|
199
|
+
* Cross-origin navigations (OAuth, SSO) can cause Chrome to replace the target
|
|
200
|
+
* without OpenChrome tracking the new one (we skip targetcreated indexing to
|
|
201
|
+
* prevent ghost tabs). This fallback re-registers valid targets.
|
|
202
|
+
*/
|
|
203
|
+
private tryRecoverTarget;
|
|
204
|
+
/**
|
|
205
|
+
* Get all pages for a worker
|
|
206
|
+
*/
|
|
207
|
+
getWorkerPages(sessionId: string, workerId: string): Promise<Page[]>;
|
|
208
|
+
/**
|
|
209
|
+
* Get target IDs for a session (all workers)
|
|
210
|
+
*/
|
|
211
|
+
getSessionTargetIds(sessionId: string): string[];
|
|
212
|
+
/**
|
|
213
|
+
* Get target IDs for a specific worker
|
|
214
|
+
*/
|
|
215
|
+
getWorkerTargetIds(sessionId: string, workerId: string): string[];
|
|
216
|
+
/**
|
|
217
|
+
* Validate target ownership (legacy method, checks session only)
|
|
218
|
+
*/
|
|
219
|
+
validateTargetOwnership(sessionId: string, targetId: string): boolean;
|
|
220
|
+
/**
|
|
221
|
+
* Get the worker ID that owns a target
|
|
222
|
+
*/
|
|
223
|
+
getTargetWorkerId(targetId: string): string | undefined;
|
|
224
|
+
/**
|
|
225
|
+
* Get the session and worker that own a target.
|
|
226
|
+
* Used by CDPClient's targetcreated listener to determine popup ownership.
|
|
227
|
+
*/
|
|
228
|
+
getTargetOwner(targetId: string): {
|
|
229
|
+
sessionId: string;
|
|
230
|
+
workerId: string;
|
|
231
|
+
} | undefined;
|
|
232
|
+
/**
|
|
233
|
+
* Register an externally-created target (e.g., popup via window.open) into a worker.
|
|
234
|
+
* Only registers if the target is not already tracked, to avoid overwriting ownership.
|
|
235
|
+
*/
|
|
236
|
+
registerExternalTarget(targetId: string, sessionId: string, workerId: string): void;
|
|
237
|
+
/**
|
|
238
|
+
* Close a specific target/tab
|
|
239
|
+
* @param sessionId Session ID
|
|
240
|
+
* @param targetId Target/Tab ID to close
|
|
241
|
+
* @returns true if closed, false if not found
|
|
242
|
+
*/
|
|
243
|
+
closeTarget(sessionId: string, targetId: string): Promise<boolean>;
|
|
244
|
+
/**
|
|
245
|
+
* Close all tabs in a worker (without deleting the worker)
|
|
246
|
+
* @param sessionId Session ID
|
|
247
|
+
* @param workerId Worker ID
|
|
248
|
+
* @returns Number of tabs closed
|
|
249
|
+
*/
|
|
250
|
+
closeWorkerTabs(sessionId: string, workerId: string): Promise<number>;
|
|
251
|
+
/**
|
|
252
|
+
* Execute a CDP command through the session's queue
|
|
253
|
+
*/
|
|
254
|
+
executeCDP<T = unknown>(sessionId: string, targetId: string, method: string, params?: Record<string, unknown>): Promise<T>;
|
|
255
|
+
/**
|
|
256
|
+
* Handle target closed event
|
|
257
|
+
*/
|
|
258
|
+
onTargetClosed(targetId: string): void;
|
|
259
|
+
/**
|
|
260
|
+
* Build an enriched error message for stale target IDs, including available tab IDs
|
|
261
|
+
* so the LLM can select the correct one without an extra tabs_context round trip.
|
|
262
|
+
*/
|
|
263
|
+
private buildStaleTargetError;
|
|
264
|
+
/**
|
|
265
|
+
* Public wrapper for validateTargetsAfterReconnect().
|
|
266
|
+
* Called by MCP server before retrying a tool after reconnect.
|
|
267
|
+
*/
|
|
268
|
+
reconcileAfterReconnect(): Promise<void>;
|
|
269
|
+
/**
|
|
270
|
+
* Validate all tracked targets after a reconnection.
|
|
271
|
+
* Performs bidirectional reconciliation:
|
|
272
|
+
* 1. Removes targets that no longer exist in Chrome
|
|
273
|
+
* 2. Re-maps dead target IDs to new live targets by URL matching
|
|
274
|
+
* (Chrome may reassign different target IDs to the same logical tabs)
|
|
275
|
+
*/
|
|
276
|
+
private validateTargetsAfterReconnect;
|
|
277
|
+
/**
|
|
278
|
+
* Get session info (for serialization)
|
|
279
|
+
*/
|
|
280
|
+
getSessionInfo(sessionId: string): SessionInfo | undefined;
|
|
281
|
+
/**
|
|
282
|
+
* Get all session infos
|
|
283
|
+
*/
|
|
284
|
+
getAllSessionInfos(): SessionInfo[];
|
|
285
|
+
/**
|
|
286
|
+
* Add event listener
|
|
287
|
+
*/
|
|
288
|
+
addEventListener(listener: (event: SessionEvent) => void): void;
|
|
289
|
+
/**
|
|
290
|
+
* Remove event listener
|
|
291
|
+
*/
|
|
292
|
+
removeEventListener(listener: (event: SessionEvent) => void): void;
|
|
293
|
+
/**
|
|
294
|
+
* Emit event to all listeners
|
|
295
|
+
*/
|
|
296
|
+
private emitEvent;
|
|
297
|
+
/**
|
|
298
|
+
* Get the number of active sessions
|
|
299
|
+
*/
|
|
300
|
+
get sessionCount(): number;
|
|
301
|
+
/**
|
|
302
|
+
* Get the storage state file path for a session
|
|
303
|
+
*/
|
|
304
|
+
private getStorageStatePath;
|
|
305
|
+
/**
|
|
306
|
+
* Get CDPClient
|
|
307
|
+
*/
|
|
308
|
+
getCDPClient(): CDPClient;
|
|
309
|
+
/**
|
|
310
|
+
* Initialize hybrid mode with BrowserRouter
|
|
311
|
+
*/
|
|
312
|
+
initHybrid(config: HybridConfig): Promise<void>;
|
|
313
|
+
/**
|
|
314
|
+
* Get the BrowserRouter (for stats/escalation)
|
|
315
|
+
*/
|
|
316
|
+
getBrowserRouter(): BrowserRouter | null;
|
|
317
|
+
/**
|
|
318
|
+
* Cleanup hybrid mode
|
|
319
|
+
*/
|
|
320
|
+
cleanupHybrid(): Promise<void>;
|
|
321
|
+
}
|
|
322
|
+
export declare function getSessionManager(): SessionManager;
|
|
323
|
+
/** Reset singleton for testing. Do not use in production code. */
|
|
324
|
+
export declare function _resetSessionManagerForTesting(): void;
|
|
325
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|