@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,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Atomic file operations for safe concurrent access
|
|
4
|
+
* Prevents race conditions when multiple processes access the same file
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.writeFileAtomicSafe = writeFileAtomicSafe;
|
|
44
|
+
exports.readFileSafe = readFileSafe;
|
|
45
|
+
exports.backupFile = backupFile;
|
|
46
|
+
exports.restoreFromBackup = restoreFromBackup;
|
|
47
|
+
exports.listBackups = listBackups;
|
|
48
|
+
exports.cleanupBackups = cleanupBackups;
|
|
49
|
+
exports.acquireLock = acquireLock;
|
|
50
|
+
exports.isLocked = isLocked;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const os = __importStar(require("os"));
|
|
54
|
+
const write_file_atomic_1 = __importDefault(require("write-file-atomic"));
|
|
55
|
+
const lockfile = __importStar(require("proper-lockfile"));
|
|
56
|
+
/**
|
|
57
|
+
* Write file atomically using temp file + rename pattern
|
|
58
|
+
* This ensures the file is never in a partial/corrupt state
|
|
59
|
+
*/
|
|
60
|
+
async function writeFileAtomicSafe(filePath, data, options = {}) {
|
|
61
|
+
const { backup = false, lockTimeout = 10000 } = options;
|
|
62
|
+
const content = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
63
|
+
// Ensure directory exists
|
|
64
|
+
const dir = path.dirname(filePath);
|
|
65
|
+
if (!fs.existsSync(dir)) {
|
|
66
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
67
|
+
}
|
|
68
|
+
// Create backup if requested and file exists
|
|
69
|
+
if (backup && fs.existsSync(filePath)) {
|
|
70
|
+
await backupFile(filePath);
|
|
71
|
+
}
|
|
72
|
+
// Use write-file-atomic for safe writing
|
|
73
|
+
await (0, write_file_atomic_1.default)(filePath, content, { encoding: 'utf8' });
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Read file safely with JSON validation
|
|
77
|
+
*/
|
|
78
|
+
async function readFileSafe(filePath) {
|
|
79
|
+
try {
|
|
80
|
+
if (!fs.existsSync(filePath)) {
|
|
81
|
+
return { success: false, error: 'File does not exist' };
|
|
82
|
+
}
|
|
83
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
84
|
+
// Try to parse as JSON
|
|
85
|
+
try {
|
|
86
|
+
const data = JSON.parse(content);
|
|
87
|
+
return { success: true, data };
|
|
88
|
+
}
|
|
89
|
+
catch (parseError) {
|
|
90
|
+
// Check if it's a corruption pattern (two JSON objects concatenated)
|
|
91
|
+
if (content.includes('}{')) {
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
error: 'JSON parse error - corruption detected',
|
|
95
|
+
corrupted: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: `JSON parse error: ${parseError.message}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
error: `Read error: ${error.message}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a backup of a file
|
|
113
|
+
*/
|
|
114
|
+
async function backupFile(filePath, backupDir) {
|
|
115
|
+
if (!fs.existsSync(filePath)) {
|
|
116
|
+
throw new Error(`File does not exist: ${filePath}`);
|
|
117
|
+
}
|
|
118
|
+
// Default backup directory
|
|
119
|
+
const defaultBackupDir = path.join(os.homedir(), '.openchrome', 'backups');
|
|
120
|
+
const targetDir = backupDir || defaultBackupDir;
|
|
121
|
+
// Ensure backup directory exists
|
|
122
|
+
if (!fs.existsSync(targetDir)) {
|
|
123
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
// Generate backup filename with timestamp
|
|
126
|
+
const basename = path.basename(filePath);
|
|
127
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
128
|
+
const backupName = `${basename}.${timestamp}.bak`;
|
|
129
|
+
const backupPath = path.join(targetDir, backupName);
|
|
130
|
+
// Copy file to backup location
|
|
131
|
+
fs.copyFileSync(filePath, backupPath);
|
|
132
|
+
return backupPath;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Restore a file from backup
|
|
136
|
+
*/
|
|
137
|
+
async function restoreFromBackup(backupPath, targetPath) {
|
|
138
|
+
if (!fs.existsSync(backupPath)) {
|
|
139
|
+
throw new Error(`Backup file does not exist: ${backupPath}`);
|
|
140
|
+
}
|
|
141
|
+
// Ensure target directory exists
|
|
142
|
+
const targetDir = path.dirname(targetPath);
|
|
143
|
+
if (!fs.existsSync(targetDir)) {
|
|
144
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
145
|
+
}
|
|
146
|
+
// Use atomic write to restore
|
|
147
|
+
const content = fs.readFileSync(backupPath, 'utf8');
|
|
148
|
+
await writeFileAtomicSafe(targetPath, content);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get list of available backups for a file
|
|
152
|
+
*/
|
|
153
|
+
function listBackups(originalFilename, backupDir) {
|
|
154
|
+
const defaultBackupDir = path.join(os.homedir(), '.openchrome', 'backups');
|
|
155
|
+
const targetDir = backupDir || defaultBackupDir;
|
|
156
|
+
if (!fs.existsSync(targetDir)) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
const basename = path.basename(originalFilename);
|
|
160
|
+
const pattern = new RegExp(`^${basename.replace(/\./g, '\\.')}\\..*\\.bak$`);
|
|
161
|
+
return fs
|
|
162
|
+
.readdirSync(targetDir)
|
|
163
|
+
.filter((file) => pattern.test(file))
|
|
164
|
+
.sort()
|
|
165
|
+
.reverse(); // Most recent first
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Clean up old backups, keeping only the specified number
|
|
169
|
+
*/
|
|
170
|
+
function cleanupBackups(originalFilename, keepCount = 5, backupDir) {
|
|
171
|
+
const backups = listBackups(originalFilename, backupDir);
|
|
172
|
+
const toDelete = backups.slice(keepCount);
|
|
173
|
+
const defaultBackupDir = path.join(os.homedir(), '.openchrome', 'backups');
|
|
174
|
+
const targetDir = backupDir || defaultBackupDir;
|
|
175
|
+
for (const backup of toDelete) {
|
|
176
|
+
const backupPath = path.join(targetDir, backup);
|
|
177
|
+
try {
|
|
178
|
+
fs.unlinkSync(backupPath);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Ignore deletion errors
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return toDelete.length;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Acquire a file lock with timeout
|
|
188
|
+
*/
|
|
189
|
+
async function acquireLock(filePath, timeout = 10000) {
|
|
190
|
+
// Ensure file exists for locking
|
|
191
|
+
const dir = path.dirname(filePath);
|
|
192
|
+
if (!fs.existsSync(dir)) {
|
|
193
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
194
|
+
}
|
|
195
|
+
if (!fs.existsSync(filePath)) {
|
|
196
|
+
fs.writeFileSync(filePath, '{}');
|
|
197
|
+
}
|
|
198
|
+
const release = await lockfile.lock(filePath, {
|
|
199
|
+
retries: {
|
|
200
|
+
retries: Math.ceil(timeout / 100),
|
|
201
|
+
factor: 1,
|
|
202
|
+
minTimeout: 100,
|
|
203
|
+
maxTimeout: 100,
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
return release;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if a file is currently locked
|
|
210
|
+
*/
|
|
211
|
+
async function isLocked(filePath) {
|
|
212
|
+
if (!fs.existsSync(filePath)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
return lockfile.check(filePath);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=atomic-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-file.js","sourceRoot":"","sources":["../../src/utils/atomic-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM Delta Feedback - Captures what changed in the DOM after an action
|
|
3
|
+
*
|
|
4
|
+
* Injects a MutationObserver before an action, collects mutations after,
|
|
5
|
+
* and formats a compact delta string that tells the LLM what happened
|
|
6
|
+
* without needing a screenshot.
|
|
7
|
+
*/
|
|
8
|
+
import type { Page } from 'puppeteer-core';
|
|
9
|
+
export interface DomDeltaOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Time to wait for DOM to settle after action (ms). Default: 150.
|
|
12
|
+
*
|
|
13
|
+
* For keyboard/type actions where immediate feedback is expected,
|
|
14
|
+
* callers can pass a lower value (e.g. settleMs: 50) to reduce latency.
|
|
15
|
+
* For click actions that trigger animations or async network requests,
|
|
16
|
+
* a higher value (e.g. settleMs: 300-500) may be appropriate.
|
|
17
|
+
*/
|
|
18
|
+
settleMs?: number;
|
|
19
|
+
/** Maximum characters for the delta string. Default: 500 */
|
|
20
|
+
maxChars?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface DomDeltaResult<T> {
|
|
23
|
+
result: T;
|
|
24
|
+
delta: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Execute an action while capturing DOM mutations.
|
|
28
|
+
*
|
|
29
|
+
* Injects a MutationObserver before the action, waits for the DOM to settle
|
|
30
|
+
* after the action, then collects and formats the changes.
|
|
31
|
+
*
|
|
32
|
+
* If the action causes a page navigation, the observer is destroyed —
|
|
33
|
+
* we detect this via URL change and report the navigation instead.
|
|
34
|
+
*/
|
|
35
|
+
export declare function withDomDelta<T>(page: Page, action: () => Promise<T>, options?: DomDeltaOptions): Promise<DomDeltaResult<T>>;
|
|
36
|
+
//# sourceMappingURL=dom-delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-delta.d.ts","sourceRoot":"","sources":["../../src/utils/dom-delta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAiPD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAkF5B"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DOM Delta Feedback - Captures what changed in the DOM after an action
|
|
4
|
+
*
|
|
5
|
+
* Injects a MutationObserver before an action, collects mutations after,
|
|
6
|
+
* and formats a compact delta string that tells the LLM what happened
|
|
7
|
+
* without needing a screenshot.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.withDomDelta = withDomDelta;
|
|
11
|
+
const safe_title_1 = require("./safe-title");
|
|
12
|
+
// Script injected into the page to set up the MutationObserver
|
|
13
|
+
const INJECT_OBSERVER_SCRIPT = `(() => {
|
|
14
|
+
const delta = {
|
|
15
|
+
preUrl: location.href,
|
|
16
|
+
preTitle: document.title,
|
|
17
|
+
preScroll: { x: window.scrollX, y: window.scrollY },
|
|
18
|
+
mutations: []
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const IGNORE_TAGS = new Set(['SCRIPT', 'STYLE', 'LINK', 'META', 'NOSCRIPT']);
|
|
22
|
+
const MAX_MUTATIONS = 15;
|
|
23
|
+
const observerConfig = {
|
|
24
|
+
childList: true,
|
|
25
|
+
subtree: true,
|
|
26
|
+
attributes: true,
|
|
27
|
+
attributeOldValue: true,
|
|
28
|
+
attributeFilter: ['class', 'style', 'hidden', 'disabled', 'aria-expanded',
|
|
29
|
+
'aria-hidden', 'open', 'checked', 'value', 'src', 'href']
|
|
30
|
+
};
|
|
31
|
+
var shadowObservers = [];
|
|
32
|
+
|
|
33
|
+
function observeShadowRoot(sr) {
|
|
34
|
+
var obs = new MutationObserver(handleRecords);
|
|
35
|
+
obs.observe(sr, observerConfig);
|
|
36
|
+
shadowObservers.push(obs);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function checkForNewShadowRoots(node) {
|
|
40
|
+
if (node.shadowRoot) observeShadowRoot(node.shadowRoot);
|
|
41
|
+
var desc = node.querySelectorAll ? node.querySelectorAll('*') : [];
|
|
42
|
+
for (var i = 0; i < desc.length; i++) {
|
|
43
|
+
if (desc[i].shadowRoot) observeShadowRoot(desc[i].shadowRoot);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function handleRecords(records) {
|
|
48
|
+
if (delta.mutations.length >= MAX_MUTATIONS) return;
|
|
49
|
+
|
|
50
|
+
for (const r of records) {
|
|
51
|
+
if (delta.mutations.length >= MAX_MUTATIONS) break;
|
|
52
|
+
|
|
53
|
+
if (r.type === 'childList') {
|
|
54
|
+
for (const n of r.addedNodes) {
|
|
55
|
+
if (delta.mutations.length >= MAX_MUTATIONS) break;
|
|
56
|
+
if (n.nodeType !== 1) continue;
|
|
57
|
+
const el = n;
|
|
58
|
+
// Detect new open shadow roots on added elements
|
|
59
|
+
checkForNewShadowRoots(el);
|
|
60
|
+
if (IGNORE_TAGS.has(el.tagName)) continue;
|
|
61
|
+
const role = el.getAttribute && el.getAttribute('role');
|
|
62
|
+
const tag = el.tagName.toLowerCase();
|
|
63
|
+
const text = (el.textContent || '').trim().slice(0, 40);
|
|
64
|
+
const label = role ? tag + '[role="' + role + '"]' : tag;
|
|
65
|
+
delta.mutations.push({ type: 'added', label, text });
|
|
66
|
+
}
|
|
67
|
+
for (const n of r.removedNodes) {
|
|
68
|
+
if (delta.mutations.length >= MAX_MUTATIONS) break;
|
|
69
|
+
if (n.nodeType !== 1) continue;
|
|
70
|
+
const el = n;
|
|
71
|
+
if (IGNORE_TAGS.has(el.tagName)) continue;
|
|
72
|
+
const role = el.getAttribute && el.getAttribute('role');
|
|
73
|
+
const tag = el.tagName.toLowerCase();
|
|
74
|
+
const text = (el.textContent || '').trim().slice(0, 40);
|
|
75
|
+
const label = role ? tag + '[role="' + role + '"]' : tag;
|
|
76
|
+
delta.mutations.push({ type: 'removed', label, text });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (r.type === 'attributes') {
|
|
81
|
+
if (delta.mutations.length >= MAX_MUTATIONS) break;
|
|
82
|
+
const el = r.target;
|
|
83
|
+
if (el.nodeType !== 1) continue;
|
|
84
|
+
if (IGNORE_TAGS.has(el.tagName)) continue;
|
|
85
|
+
const attr = r.attributeName;
|
|
86
|
+
const oldVal = r.oldValue;
|
|
87
|
+
const newVal = el.getAttribute(attr);
|
|
88
|
+
if (oldVal === newVal) continue;
|
|
89
|
+
// Skip pure CSS animation class changes
|
|
90
|
+
if (attr === 'class') {
|
|
91
|
+
const oldClasses = new Set((oldVal || '').split(/\\s+/));
|
|
92
|
+
const newClasses = new Set((newVal || '').split(/\\s+/));
|
|
93
|
+
const added = [...newClasses].filter(c => !oldClasses.has(c));
|
|
94
|
+
const removed = [...oldClasses].filter(c => !newClasses.has(c));
|
|
95
|
+
const allChanges = [...added, ...removed];
|
|
96
|
+
const isAnimOnly = allChanges.every(c =>
|
|
97
|
+
/^(animate|fade|slide|transition|entering|leaving|active|ng-|v-)/i.test(c)
|
|
98
|
+
);
|
|
99
|
+
if (isAnimOnly && allChanges.length > 0) continue;
|
|
100
|
+
}
|
|
101
|
+
const tag = el.tagName.toLowerCase();
|
|
102
|
+
const id = el.id ? '#' + el.id : '';
|
|
103
|
+
const label = tag + id;
|
|
104
|
+
const oldStr = oldVal != null ? String(oldVal).slice(0, 30) : 'null';
|
|
105
|
+
const newStr = newVal != null ? String(newVal).slice(0, 30) : 'null';
|
|
106
|
+
delta.mutations.push({ type: 'attribute', label, attr, oldVal: oldStr, newVal: newStr });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const observer = new MutationObserver(handleRecords);
|
|
112
|
+
|
|
113
|
+
// Disconnect any previous observers to avoid global collision on concurrent calls
|
|
114
|
+
if (window.__ocObserver) {
|
|
115
|
+
try { window.__ocObserver.disconnect(); } catch(e) {}
|
|
116
|
+
}
|
|
117
|
+
if (window.__ocShadowObservers) {
|
|
118
|
+
for (var i = 0; i < window.__ocShadowObservers.length; i++) {
|
|
119
|
+
try { window.__ocShadowObservers[i].disconnect(); } catch(e) {}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
observer.observe(document.body || document.documentElement, observerConfig);
|
|
124
|
+
|
|
125
|
+
// Walk existing open shadow roots and observe them
|
|
126
|
+
function walkForShadowRoots(root) {
|
|
127
|
+
var allEls = root.querySelectorAll('*');
|
|
128
|
+
for (var i = 0; i < allEls.length; i++) {
|
|
129
|
+
if (allEls[i].shadowRoot) {
|
|
130
|
+
observeShadowRoot(allEls[i].shadowRoot);
|
|
131
|
+
walkForShadowRoots(allEls[i].shadowRoot);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
walkForShadowRoots(document);
|
|
136
|
+
|
|
137
|
+
window.__ocDelta = delta;
|
|
138
|
+
window.__ocObserver = observer;
|
|
139
|
+
window.__ocShadowObservers = shadowObservers;
|
|
140
|
+
})()`;
|
|
141
|
+
// Script to collect mutations after action
|
|
142
|
+
const COLLECT_DELTA_SCRIPT = `(() => {
|
|
143
|
+
try {
|
|
144
|
+
if (!window.__ocObserver) return null;
|
|
145
|
+
window.__ocObserver.disconnect();
|
|
146
|
+
// Disconnect shadow root observers
|
|
147
|
+
if (window.__ocShadowObservers) {
|
|
148
|
+
for (var i = 0; i < window.__ocShadowObservers.length; i++) {
|
|
149
|
+
try { window.__ocShadowObservers[i].disconnect(); } catch(e) {}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const d = window.__ocDelta;
|
|
153
|
+
if (!d) return null;
|
|
154
|
+
|
|
155
|
+
const result = {
|
|
156
|
+
urlChanged: location.href !== d.preUrl,
|
|
157
|
+
newUrl: location.href !== d.preUrl ? location.href : null,
|
|
158
|
+
titleChanged: document.title !== d.preTitle,
|
|
159
|
+
newTitle: document.title !== d.preTitle ? document.title : null,
|
|
160
|
+
scrollChanged: window.scrollX !== d.preScroll.x || window.scrollY !== d.preScroll.y,
|
|
161
|
+
scroll: { x: Math.round(window.scrollX), y: Math.round(window.scrollY) },
|
|
162
|
+
preScroll: d.preScroll,
|
|
163
|
+
mutations: d.mutations
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Cleanup
|
|
167
|
+
delete window.__ocDelta;
|
|
168
|
+
delete window.__ocObserver;
|
|
169
|
+
delete window.__ocShadowObservers;
|
|
170
|
+
|
|
171
|
+
return result;
|
|
172
|
+
} catch (e) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
})()`;
|
|
176
|
+
/**
|
|
177
|
+
* Format collected delta into a compact readable string
|
|
178
|
+
*/
|
|
179
|
+
function formatDelta(delta, maxChars) {
|
|
180
|
+
const lines = [];
|
|
181
|
+
// Deduplicate mutations: collapse identical entries
|
|
182
|
+
const seen = new Set();
|
|
183
|
+
const uniqueMutations = delta.mutations.filter(m => {
|
|
184
|
+
const key = `${m.type}|${m.label}|${m.text || ''}|${m.attr || ''}`;
|
|
185
|
+
if (seen.has(key))
|
|
186
|
+
return false;
|
|
187
|
+
seen.add(key);
|
|
188
|
+
return true;
|
|
189
|
+
});
|
|
190
|
+
// Cap at 10 per type
|
|
191
|
+
const added = uniqueMutations.filter(m => m.type === 'added').slice(0, 10);
|
|
192
|
+
const removed = uniqueMutations.filter(m => m.type === 'removed').slice(0, 10);
|
|
193
|
+
const changed = uniqueMutations.filter(m => m.type === 'attribute').slice(0, 10);
|
|
194
|
+
for (const m of added) {
|
|
195
|
+
const text = m.text ? `: "${m.text}"` : '';
|
|
196
|
+
lines.push(`+ ${m.label}${text}`);
|
|
197
|
+
}
|
|
198
|
+
for (const m of removed) {
|
|
199
|
+
const text = m.text ? `: "${m.text}"` : '';
|
|
200
|
+
lines.push(`- ${m.label}${text}`);
|
|
201
|
+
}
|
|
202
|
+
for (const m of changed) {
|
|
203
|
+
lines.push(`~ ${m.label}: ${m.attr} ${m.oldVal}\u2192${m.newVal}`);
|
|
204
|
+
}
|
|
205
|
+
if (delta.urlChanged && delta.newUrl) {
|
|
206
|
+
lines.push(`URL: ${delta.newUrl}`);
|
|
207
|
+
}
|
|
208
|
+
if (delta.titleChanged && delta.newTitle) {
|
|
209
|
+
lines.push(`Title: "${delta.newTitle}"`);
|
|
210
|
+
}
|
|
211
|
+
if (delta.scrollChanged) {
|
|
212
|
+
lines.push(`Scroll: ${delta.preScroll.x},${delta.preScroll.y} \u2192 ${delta.scroll.x},${delta.scroll.y}`);
|
|
213
|
+
}
|
|
214
|
+
if (lines.length === 0)
|
|
215
|
+
return '';
|
|
216
|
+
let result = '\n[DOM Delta]\n' + lines.join('\n');
|
|
217
|
+
if (result.length > maxChars) {
|
|
218
|
+
result = result.slice(0, maxChars - 3) + '...';
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Execute an action while capturing DOM mutations.
|
|
224
|
+
*
|
|
225
|
+
* Injects a MutationObserver before the action, waits for the DOM to settle
|
|
226
|
+
* after the action, then collects and formats the changes.
|
|
227
|
+
*
|
|
228
|
+
* If the action causes a page navigation, the observer is destroyed —
|
|
229
|
+
* we detect this via URL change and report the navigation instead.
|
|
230
|
+
*/
|
|
231
|
+
async function withDomDelta(page, action, options) {
|
|
232
|
+
const settleMs = options?.settleMs ?? 150;
|
|
233
|
+
const maxChars = options?.maxChars ?? 500;
|
|
234
|
+
let preUrl;
|
|
235
|
+
try {
|
|
236
|
+
preUrl = page.url();
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
preUrl = '';
|
|
240
|
+
}
|
|
241
|
+
// Inject the MutationObserver
|
|
242
|
+
try {
|
|
243
|
+
await Promise.race([
|
|
244
|
+
page.evaluate(INJECT_OBSERVER_SCRIPT),
|
|
245
|
+
new Promise((resolve) => setTimeout(resolve, 5000)),
|
|
246
|
+
]);
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// If injection fails (e.g., page not ready), just run the action without delta
|
|
250
|
+
const result = await action();
|
|
251
|
+
return { result, delta: '' };
|
|
252
|
+
}
|
|
253
|
+
// Listen for navigation that would destroy the observer
|
|
254
|
+
let navigated = false;
|
|
255
|
+
const onNav = () => { navigated = true; };
|
|
256
|
+
page.on('framenavigated', onNav);
|
|
257
|
+
// Execute the action (try/finally ensures observer cleanup on failure)
|
|
258
|
+
let result;
|
|
259
|
+
try {
|
|
260
|
+
result = await action();
|
|
261
|
+
}
|
|
262
|
+
catch (e) {
|
|
263
|
+
page.off('framenavigated', onNav);
|
|
264
|
+
// Try to disconnect observer on failure
|
|
265
|
+
try {
|
|
266
|
+
await page.evaluate('window.__ocObserver && window.__ocObserver.disconnect(); if (window.__ocShadowObservers) { for (var i = 0; i < window.__ocShadowObservers.length; i++) { try { window.__ocShadowObservers[i].disconnect(); } catch(e) {} } }');
|
|
267
|
+
}
|
|
268
|
+
catch { }
|
|
269
|
+
throw e;
|
|
270
|
+
}
|
|
271
|
+
// Wait for DOM to settle
|
|
272
|
+
await new Promise(resolve => setTimeout(resolve, settleMs));
|
|
273
|
+
// Check if navigation occurred (observer would be destroyed)
|
|
274
|
+
let postUrl;
|
|
275
|
+
try {
|
|
276
|
+
postUrl = page.url();
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
postUrl = '';
|
|
280
|
+
}
|
|
281
|
+
page.off('framenavigated', onNav);
|
|
282
|
+
if (navigated || (postUrl && preUrl && postUrl !== preUrl)) {
|
|
283
|
+
// Page navigated — observer is gone
|
|
284
|
+
let title = '';
|
|
285
|
+
try {
|
|
286
|
+
title = await (0, safe_title_1.safeTitle)(page);
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// ignore
|
|
290
|
+
}
|
|
291
|
+
let delta = `\n[Page navigated: ${postUrl}]`;
|
|
292
|
+
if (title) {
|
|
293
|
+
delta += `\n[Title: "${title}"]`;
|
|
294
|
+
}
|
|
295
|
+
return { result, delta };
|
|
296
|
+
}
|
|
297
|
+
// Collect mutations
|
|
298
|
+
try {
|
|
299
|
+
const collected = await Promise.race([
|
|
300
|
+
page.evaluate(COLLECT_DELTA_SCRIPT),
|
|
301
|
+
new Promise((resolve) => setTimeout(() => resolve(null), 5000)),
|
|
302
|
+
]);
|
|
303
|
+
if (!collected) {
|
|
304
|
+
return { result, delta: '' };
|
|
305
|
+
}
|
|
306
|
+
const delta = formatDelta(collected, maxChars);
|
|
307
|
+
return { result, delta };
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// Collection failed (page might have navigated or crashed)
|
|
311
|
+
return { result, delta: '' };
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=dom-delta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-delta.js","sourceRoot":"","sources":["../../src/utils/dom-delta.ts"],"names":[],"mappings":"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"}
|