devharness 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/build/atomic-write.d.ts +28 -0
- package/build/atomic-write.d.ts.map +1 -0
- package/build/atomic-write.js +126 -0
- package/build/atomic-write.js.map +1 -0
- package/build/cdp-manager.d.ts +524 -0
- package/build/cdp-manager.d.ts.map +1 -0
- package/build/cdp-manager.js +1828 -0
- package/build/cdp-manager.js.map +1 -0
- package/build/cdp-manager.test.d.ts +6 -0
- package/build/cdp-manager.test.d.ts.map +1 -0
- package/build/cdp-manager.test.js +546 -0
- package/build/cdp-manager.test.js.map +1 -0
- package/build/chrome-launcher.d.ts +400 -0
- package/build/chrome-launcher.d.ts.map +1 -0
- package/build/chrome-launcher.js +1071 -0
- package/build/chrome-launcher.js.map +1 -0
- package/build/chrome-launcher.test.d.ts +11 -0
- package/build/chrome-launcher.test.d.ts.map +1 -0
- package/build/chrome-launcher.test.js +204 -0
- package/build/chrome-launcher.test.js.map +1 -0
- package/build/clickable-cache.d.ts +73 -0
- package/build/clickable-cache.d.ts.map +1 -0
- package/build/clickable-cache.js +90 -0
- package/build/clickable-cache.js.map +1 -0
- package/build/command-recorder.d.ts +401 -0
- package/build/command-recorder.d.ts.map +1 -0
- package/build/command-recorder.js +701 -0
- package/build/command-recorder.js.map +1 -0
- package/build/config.d.ts +390 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +826 -0
- package/build/config.js.map +1 -0
- package/build/config.test.d.ts +2 -0
- package/build/config.test.d.ts.map +1 -0
- package/build/config.test.js +112 -0
- package/build/config.test.js.map +1 -0
- package/build/connection-manager.d.ts +159 -0
- package/build/connection-manager.d.ts.map +1 -0
- package/build/connection-manager.js +432 -0
- package/build/connection-manager.js.map +1 -0
- package/build/connection-manager.test.d.ts +11 -0
- package/build/connection-manager.test.d.ts.map +1 -0
- package/build/connection-manager.test.js +114 -0
- package/build/connection-manager.test.js.map +1 -0
- package/build/console-monitor.d.ts +150 -0
- package/build/console-monitor.d.ts.map +1 -0
- package/build/console-monitor.js +454 -0
- package/build/console-monitor.js.map +1 -0
- package/build/dashboard/bundle.js +1 -0
- package/build/dashboard/dashboard-client.d.ts +42 -0
- package/build/dashboard/dashboard-client.d.ts.map +1 -0
- package/build/dashboard/dashboard-client.js +184 -0
- package/build/dashboard/dashboard-client.js.map +1 -0
- package/build/dashboard/dashboard-hub.d.ts +50 -0
- package/build/dashboard/dashboard-hub.d.ts.map +1 -0
- package/build/dashboard/dashboard-hub.js +654 -0
- package/build/dashboard/dashboard-hub.js.map +1 -0
- package/build/dashboard/hub-lock.d.ts +16 -0
- package/build/dashboard/hub-lock.d.ts.map +1 -0
- package/build/dashboard/hub-lock.js +77 -0
- package/build/dashboard/hub-lock.js.map +1 -0
- package/build/dashboard/index.d.ts +25 -0
- package/build/dashboard/index.d.ts.map +1 -0
- package/build/dashboard/index.js +77 -0
- package/build/dashboard/index.js.map +1 -0
- package/build/dashboard/types.d.ts +83 -0
- package/build/dashboard/types.d.ts.map +1 -0
- package/build/dashboard/types.js +6 -0
- package/build/dashboard/types.js.map +1 -0
- package/build/debug-logger.d.ts +85 -0
- package/build/debug-logger.d.ts.map +1 -0
- package/build/debug-logger.js +195 -0
- package/build/debug-logger.js.map +1 -0
- package/build/debugger-aware-wrapper.d.ts +37 -0
- package/build/debugger-aware-wrapper.d.ts.map +1 -0
- package/build/debugger-aware-wrapper.js +128 -0
- package/build/debugger-aware-wrapper.js.map +1 -0
- package/build/dom-change-monitor.d.ts +92 -0
- package/build/dom-change-monitor.d.ts.map +1 -0
- package/build/dom-change-monitor.js +437 -0
- package/build/dom-change-monitor.js.map +1 -0
- package/build/element-collector.d.ts +16 -0
- package/build/element-collector.d.ts.map +1 -0
- package/build/element-collector.js +207 -0
- package/build/element-collector.js.map +1 -0
- package/build/error-helpers.d.ts +43 -0
- package/build/error-helpers.d.ts.map +1 -0
- package/build/error-helpers.js +143 -0
- package/build/error-helpers.js.map +1 -0
- package/build/formatters/console-formatter.d.ts +160 -0
- package/build/formatters/console-formatter.d.ts.map +1 -0
- package/build/formatters/console-formatter.js +338 -0
- package/build/formatters/console-formatter.js.map +1 -0
- package/build/helpers/parser-plugins.d.ts +44 -0
- package/build/helpers/parser-plugins.d.ts.map +1 -0
- package/build/helpers/parser-plugins.js +102 -0
- package/build/helpers/parser-plugins.js.map +1 -0
- package/build/helpers/paths.d.ts +79 -0
- package/build/helpers/paths.d.ts.map +1 -0
- package/build/helpers/paths.js +168 -0
- package/build/helpers/paths.js.map +1 -0
- package/build/helpers/process-liveness.d.ts +24 -0
- package/build/helpers/process-liveness.d.ts.map +1 -0
- package/build/helpers/process-liveness.js +36 -0
- package/build/helpers/process-liveness.js.map +1 -0
- package/build/helpers/process-liveness.test.d.ts +2 -0
- package/build/helpers/process-liveness.test.d.ts.map +1 -0
- package/build/helpers/process-liveness.test.js +40 -0
- package/build/helpers/process-liveness.test.js.map +1 -0
- package/build/helpers/sequence-tree.d.ts +27 -0
- package/build/helpers/sequence-tree.d.ts.map +1 -0
- package/build/helpers/sequence-tree.js +80 -0
- package/build/helpers/sequence-tree.js.map +1 -0
- package/build/helpers/sequence-tree.test.d.ts +2 -0
- package/build/helpers/sequence-tree.test.d.ts.map +1 -0
- package/build/helpers/sequence-tree.test.js +122 -0
- package/build/helpers/sequence-tree.test.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +2007 -0
- package/build/index.js.map +1 -0
- package/build/interaction-recorder.d.ts +214 -0
- package/build/interaction-recorder.d.ts.map +1 -0
- package/build/interaction-recorder.js +2007 -0
- package/build/interaction-recorder.js.map +1 -0
- package/build/issue-tracker.d.ts +107 -0
- package/build/issue-tracker.d.ts.map +1 -0
- package/build/issue-tracker.js +582 -0
- package/build/issue-tracker.js.map +1 -0
- package/build/issue-tracker.test.d.ts +2 -0
- package/build/issue-tracker.test.d.ts.map +1 -0
- package/build/issue-tracker.test.js +88 -0
- package/build/issue-tracker.test.js.map +1 -0
- package/build/launch-chrome-port.test.d.ts +14 -0
- package/build/launch-chrome-port.test.d.ts.map +1 -0
- package/build/launch-chrome-port.test.js +97 -0
- package/build/launch-chrome-port.test.js.map +1 -0
- package/build/log-processor/orchestrator.d.ts +32 -0
- package/build/log-processor/orchestrator.d.ts.map +1 -0
- package/build/log-processor/orchestrator.js +27 -0
- package/build/log-processor/orchestrator.js.map +1 -0
- package/build/logpoint-execution-tracker.d.ts +57 -0
- package/build/logpoint-execution-tracker.d.ts.map +1 -0
- package/build/logpoint-execution-tracker.js +112 -0
- package/build/logpoint-execution-tracker.js.map +1 -0
- package/build/mcp-supervisor.d.ts +3 -0
- package/build/mcp-supervisor.d.ts.map +1 -0
- package/build/mcp-supervisor.js +211 -0
- package/build/mcp-supervisor.js.map +1 -0
- package/build/messages.d.ts +165 -0
- package/build/messages.d.ts.map +1 -0
- package/build/messages.js +574 -0
- package/build/messages.js.map +1 -0
- package/build/network-monitor.d.ts +172 -0
- package/build/network-monitor.d.ts.map +1 -0
- package/build/network-monitor.js +350 -0
- package/build/network-monitor.js.map +1 -0
- package/build/overlays.d.ts +49 -0
- package/build/overlays.d.ts.map +1 -0
- package/build/overlays.js +409 -0
- package/build/overlays.js.map +1 -0
- package/build/persistent-profiles.test.d.ts +15 -0
- package/build/persistent-profiles.test.d.ts.map +1 -0
- package/build/persistent-profiles.test.js +470 -0
- package/build/persistent-profiles.test.js.map +1 -0
- package/build/port-reserver.d.ts +32 -0
- package/build/port-reserver.d.ts.map +1 -0
- package/build/port-reserver.js +118 -0
- package/build/port-reserver.js.map +1 -0
- package/build/puppeteer-manager.d.ts +47 -0
- package/build/puppeteer-manager.d.ts.map +1 -0
- package/build/puppeteer-manager.js +116 -0
- package/build/puppeteer-manager.js.map +1 -0
- package/build/recording-coverage.test.d.ts +12 -0
- package/build/recording-coverage.test.d.ts.map +1 -0
- package/build/recording-coverage.test.js +72 -0
- package/build/recording-coverage.test.js.map +1 -0
- package/build/reference-validator.d.ts +47 -0
- package/build/reference-validator.d.ts.map +1 -0
- package/build/reference-validator.js +86 -0
- package/build/reference-validator.js.map +1 -0
- package/build/reference-validator.test.d.ts +5 -0
- package/build/reference-validator.test.d.ts.map +1 -0
- package/build/reference-validator.test.js +243 -0
- package/build/reference-validator.test.js.map +1 -0
- package/build/replay-cursor.d.ts +27 -0
- package/build/replay-cursor.d.ts.map +1 -0
- package/build/replay-cursor.js +240 -0
- package/build/replay-cursor.js.map +1 -0
- package/build/runners/docker-compose-runner.d.ts +69 -0
- package/build/runners/docker-compose-runner.d.ts.map +1 -0
- package/build/runners/docker-compose-runner.js +438 -0
- package/build/runners/docker-compose-runner.js.map +1 -0
- package/build/runners/docker-runner.d.ts +65 -0
- package/build/runners/docker-runner.d.ts.map +1 -0
- package/build/runners/docker-runner.js +414 -0
- package/build/runners/docker-runner.js.map +1 -0
- package/build/runners/index.d.ts +19 -0
- package/build/runners/index.d.ts.map +1 -0
- package/build/runners/index.js +35 -0
- package/build/runners/index.js.map +1 -0
- package/build/runners/native-runner.d.ts +95 -0
- package/build/runners/native-runner.d.ts.map +1 -0
- package/build/runners/native-runner.js +370 -0
- package/build/runners/native-runner.js.map +1 -0
- package/build/runners/types.d.ts +147 -0
- package/build/runners/types.d.ts.map +1 -0
- package/build/runners/types.js +25 -0
- package/build/runners/types.js.map +1 -0
- package/build/self-restart.d.ts +12 -0
- package/build/self-restart.d.ts.map +1 -0
- package/build/self-restart.js +41 -0
- package/build/self-restart.js.map +1 -0
- package/build/self-restart.test.d.ts +2 -0
- package/build/self-restart.test.d.ts.map +1 -0
- package/build/self-restart.test.js +34 -0
- package/build/self-restart.test.js.map +1 -0
- package/build/server-claims.d.ts +161 -0
- package/build/server-claims.d.ts.map +1 -0
- package/build/server-claims.js +382 -0
- package/build/server-claims.js.map +1 -0
- package/build/server-claims.test.d.ts +2 -0
- package/build/server-claims.test.d.ts.map +1 -0
- package/build/server-claims.test.js +197 -0
- package/build/server-claims.test.js.map +1 -0
- package/build/server-manager.d.ts +438 -0
- package/build/server-manager.d.ts.map +1 -0
- package/build/server-manager.js +1674 -0
- package/build/server-manager.js.map +1 -0
- package/build/server-manager.test.d.ts +17 -0
- package/build/server-manager.test.d.ts.map +1 -0
- package/build/server-manager.test.js +122 -0
- package/build/server-manager.test.js.map +1 -0
- package/build/server-ownership.test.d.ts +2 -0
- package/build/server-ownership.test.d.ts.map +1 -0
- package/build/server-ownership.test.js +238 -0
- package/build/server-ownership.test.js.map +1 -0
- package/build/server-watcher.d.ts +21 -0
- package/build/server-watcher.d.ts.map +1 -0
- package/build/server-watcher.js +105 -0
- package/build/server-watcher.js.map +1 -0
- package/build/session-detector.d.ts +47 -0
- package/build/session-detector.d.ts.map +1 -0
- package/build/session-detector.js +229 -0
- package/build/session-detector.js.map +1 -0
- package/build/session-detector.test.d.ts +9 -0
- package/build/session-detector.test.d.ts.map +1 -0
- package/build/session-detector.test.js +45 -0
- package/build/session-detector.test.js.map +1 -0
- package/build/sourcemap-handler.d.ts +114 -0
- package/build/sourcemap-handler.d.ts.map +1 -0
- package/build/sourcemap-handler.js +479 -0
- package/build/sourcemap-handler.js.map +1 -0
- package/build/supervisor/child-manager.d.ts +43 -0
- package/build/supervisor/child-manager.d.ts.map +1 -0
- package/build/supervisor/child-manager.js +148 -0
- package/build/supervisor/child-manager.js.map +1 -0
- package/build/supervisor/child-manager.test.d.ts +2 -0
- package/build/supervisor/child-manager.test.d.ts.map +1 -0
- package/build/supervisor/child-manager.test.js +107 -0
- package/build/supervisor/child-manager.test.js.map +1 -0
- package/build/supervisor/client-watcher.d.ts +48 -0
- package/build/supervisor/client-watcher.d.ts.map +1 -0
- package/build/supervisor/client-watcher.js +186 -0
- package/build/supervisor/client-watcher.js.map +1 -0
- package/build/supervisor/client-watcher.test.d.ts +2 -0
- package/build/supervisor/client-watcher.test.d.ts.map +1 -0
- package/build/supervisor/client-watcher.test.js +121 -0
- package/build/supervisor/client-watcher.test.js.map +1 -0
- package/build/supervisor/idle-config.d.ts +30 -0
- package/build/supervisor/idle-config.d.ts.map +1 -0
- package/build/supervisor/idle-config.js +76 -0
- package/build/supervisor/idle-config.js.map +1 -0
- package/build/supervisor/idle-config.test.d.ts +2 -0
- package/build/supervisor/idle-config.test.d.ts.map +1 -0
- package/build/supervisor/idle-config.test.js +119 -0
- package/build/supervisor/idle-config.test.js.map +1 -0
- package/build/supervisor/ndjson-reader.d.ts +47 -0
- package/build/supervisor/ndjson-reader.d.ts.map +1 -0
- package/build/supervisor/ndjson-reader.js +75 -0
- package/build/supervisor/ndjson-reader.js.map +1 -0
- package/build/supervisor/ndjson-reader.test.d.ts +2 -0
- package/build/supervisor/ndjson-reader.test.d.ts.map +1 -0
- package/build/supervisor/ndjson-reader.test.js +92 -0
- package/build/supervisor/ndjson-reader.test.js.map +1 -0
- package/build/supervisor/pidfile.d.ts +11 -0
- package/build/supervisor/pidfile.d.ts.map +1 -0
- package/build/supervisor/pidfile.js +29 -0
- package/build/supervisor/pidfile.js.map +1 -0
- package/build/supervisor/pidfile.test.d.ts +8 -0
- package/build/supervisor/pidfile.test.d.ts.map +1 -0
- package/build/supervisor/pidfile.test.js +46 -0
- package/build/supervisor/pidfile.test.js.map +1 -0
- package/build/supervisor/restart-coordinator.d.ts +73 -0
- package/build/supervisor/restart-coordinator.d.ts.map +1 -0
- package/build/supervisor/restart-coordinator.js +300 -0
- package/build/supervisor/restart-coordinator.js.map +1 -0
- package/build/supervisor/restart-coordinator.test.d.ts +2 -0
- package/build/supervisor/restart-coordinator.test.d.ts.map +1 -0
- package/build/supervisor/restart-coordinator.test.js +434 -0
- package/build/supervisor/restart-coordinator.test.js.map +1 -0
- package/build/test-support/fake-execute-tool-call.d.ts +11 -0
- package/build/test-support/fake-execute-tool-call.d.ts.map +1 -0
- package/build/test-support/fake-execute-tool-call.js +19 -0
- package/build/test-support/fake-execute-tool-call.js.map +1 -0
- package/build/tool-error.d.ts +14 -0
- package/build/tool-error.d.ts.map +1 -0
- package/build/tool-error.js +18 -0
- package/build/tool-error.js.map +1 -0
- package/build/tool-response.d.ts +293 -0
- package/build/tool-response.d.ts.map +1 -0
- package/build/tool-response.js +365 -0
- package/build/tool-response.js.map +1 -0
- package/build/tools/assert-tools.d.ts +62 -0
- package/build/tools/assert-tools.d.ts.map +1 -0
- package/build/tools/assert-tools.js +330 -0
- package/build/tools/assert-tools.js.map +1 -0
- package/build/tools/breakpoint-await-abort.test.d.ts +2 -0
- package/build/tools/breakpoint-await-abort.test.d.ts.map +1 -0
- package/build/tools/breakpoint-await-abort.test.js +124 -0
- package/build/tools/breakpoint-await-abort.test.js.map +1 -0
- package/build/tools/breakpoint-tools.d.ts +99 -0
- package/build/tools/breakpoint-tools.d.ts.map +1 -0
- package/build/tools/breakpoint-tools.js +1197 -0
- package/build/tools/breakpoint-tools.js.map +1 -0
- package/build/tools/config-tools.d.ts +58 -0
- package/build/tools/config-tools.d.ts.map +1 -0
- package/build/tools/config-tools.js +180 -0
- package/build/tools/config-tools.js.map +1 -0
- package/build/tools/connection-routing.test.d.ts +12 -0
- package/build/tools/connection-routing.test.d.ts.map +1 -0
- package/build/tools/connection-routing.test.js +206 -0
- package/build/tools/connection-routing.test.js.map +1 -0
- package/build/tools/console-tools.d.ts +84 -0
- package/build/tools/console-tools.d.ts.map +1 -0
- package/build/tools/console-tools.js +241 -0
- package/build/tools/console-tools.js.map +1 -0
- package/build/tools/content-tools.d.ts +74 -0
- package/build/tools/content-tools.d.ts.map +1 -0
- package/build/tools/content-tools.js +582 -0
- package/build/tools/content-tools.js.map +1 -0
- package/build/tools/dashboard-tools.d.ts +38 -0
- package/build/tools/dashboard-tools.d.ts.map +1 -0
- package/build/tools/dashboard-tools.js +123 -0
- package/build/tools/dashboard-tools.js.map +1 -0
- package/build/tools/dom-tools.d.ts +41 -0
- package/build/tools/dom-tools.d.ts.map +1 -0
- package/build/tools/dom-tools.js +277 -0
- package/build/tools/dom-tools.js.map +1 -0
- package/build/tools/download-tools.d.ts +55 -0
- package/build/tools/download-tools.d.ts.map +1 -0
- package/build/tools/download-tools.js +280 -0
- package/build/tools/download-tools.js.map +1 -0
- package/build/tools/execution-tools.d.ts +40 -0
- package/build/tools/execution-tools.d.ts.map +1 -0
- package/build/tools/execution-tools.js +121 -0
- package/build/tools/execution-tools.js.map +1 -0
- package/build/tools/input-abort.test.d.ts +2 -0
- package/build/tools/input-abort.test.d.ts.map +1 -0
- package/build/tools/input-abort.test.js +227 -0
- package/build/tools/input-abort.test.js.map +1 -0
- package/build/tools/input-ambiguous-selector.test.d.ts +2 -0
- package/build/tools/input-ambiguous-selector.test.d.ts.map +1 -0
- package/build/tools/input-ambiguous-selector.test.js +34 -0
- package/build/tools/input-ambiguous-selector.test.js.map +1 -0
- package/build/tools/input-tools.d.ts +168 -0
- package/build/tools/input-tools.d.ts.map +1 -0
- package/build/tools/input-tools.js +1397 -0
- package/build/tools/input-tools.js.map +1 -0
- package/build/tools/inspection-tools.d.ts +112 -0
- package/build/tools/inspection-tools.d.ts.map +1 -0
- package/build/tools/inspection-tools.js +637 -0
- package/build/tools/inspection-tools.js.map +1 -0
- package/build/tools/interpolation.d.ts +30 -0
- package/build/tools/interpolation.d.ts.map +1 -0
- package/build/tools/interpolation.js +143 -0
- package/build/tools/interpolation.js.map +1 -0
- package/build/tools/issues-abort-hygiene.test.d.ts +2 -0
- package/build/tools/issues-abort-hygiene.test.d.ts.map +1 -0
- package/build/tools/issues-abort-hygiene.test.js +79 -0
- package/build/tools/issues-abort-hygiene.test.js.map +1 -0
- package/build/tools/issues-tools.d.ts +98 -0
- package/build/tools/issues-tools.d.ts.map +1 -0
- package/build/tools/issues-tools.js +821 -0
- package/build/tools/issues-tools.js.map +1 -0
- package/build/tools/issues-tools.test.d.ts +8 -0
- package/build/tools/issues-tools.test.d.ts.map +1 -0
- package/build/tools/issues-tools.test.js +184 -0
- package/build/tools/issues-tools.test.js.map +1 -0
- package/build/tools/modal-tools.d.ts +73 -0
- package/build/tools/modal-tools.d.ts.map +1 -0
- package/build/tools/modal-tools.js +161 -0
- package/build/tools/modal-tools.js.map +1 -0
- package/build/tools/network-tools.d.ts +72 -0
- package/build/tools/network-tools.d.ts.map +1 -0
- package/build/tools/network-tools.js +432 -0
- package/build/tools/network-tools.js.map +1 -0
- package/build/tools/page-tools.d.ts +78 -0
- package/build/tools/page-tools.d.ts.map +1 -0
- package/build/tools/page-tools.js +255 -0
- package/build/tools/page-tools.js.map +1 -0
- package/build/tools/plugin-tools.d.ts +16 -0
- package/build/tools/plugin-tools.d.ts.map +1 -0
- package/build/tools/plugin-tools.js +17 -0
- package/build/tools/plugin-tools.js.map +1 -0
- package/build/tools/replay-abort.test.d.ts +2 -0
- package/build/tools/replay-abort.test.d.ts.map +1 -0
- package/build/tools/replay-abort.test.js +259 -0
- package/build/tools/replay-abort.test.js.map +1 -0
- package/build/tools/replay-add-conditional.test.d.ts +2 -0
- package/build/tools/replay-add-conditional.test.d.ts.map +1 -0
- package/build/tools/replay-add-conditional.test.js +205 -0
- package/build/tools/replay-add-conditional.test.js.map +1 -0
- package/build/tools/replay-background-run.test.d.ts +2 -0
- package/build/tools/replay-background-run.test.d.ts.map +1 -0
- package/build/tools/replay-background-run.test.js +176 -0
- package/build/tools/replay-background-run.test.js.map +1 -0
- package/build/tools/replay-capture-variables.test.d.ts +2 -0
- package/build/tools/replay-capture-variables.test.d.ts.map +1 -0
- package/build/tools/replay-capture-variables.test.js +331 -0
- package/build/tools/replay-capture-variables.test.js.map +1 -0
- package/build/tools/replay-conditional-idb-and-launch.test.d.ts +11 -0
- package/build/tools/replay-conditional-idb-and-launch.test.d.ts.map +1 -0
- package/build/tools/replay-conditional-idb-and-launch.test.js +429 -0
- package/build/tools/replay-conditional-idb-and-launch.test.js.map +1 -0
- package/build/tools/replay-conditional-timeout.test.d.ts +14 -0
- package/build/tools/replay-conditional-timeout.test.d.ts.map +1 -0
- package/build/tools/replay-conditional-timeout.test.js +126 -0
- package/build/tools/replay-conditional-timeout.test.js.map +1 -0
- package/build/tools/replay-declare.test.d.ts +2 -0
- package/build/tools/replay-declare.test.d.ts.map +1 -0
- package/build/tools/replay-declare.test.js +106 -0
- package/build/tools/replay-declare.test.js.map +1 -0
- package/build/tools/replay-declared-browser-cleanup.test.d.ts +2 -0
- package/build/tools/replay-declared-browser-cleanup.test.d.ts.map +1 -0
- package/build/tools/replay-declared-browser-cleanup.test.js +103 -0
- package/build/tools/replay-declared-browser-cleanup.test.js.map +1 -0
- package/build/tools/replay-declared-profile.test.d.ts +2 -0
- package/build/tools/replay-declared-profile.test.d.ts.map +1 -0
- package/build/tools/replay-declared-profile.test.js +116 -0
- package/build/tools/replay-declared-profile.test.js.map +1 -0
- package/build/tools/replay-executor.d.ts +556 -0
- package/build/tools/replay-executor.d.ts.map +1 -0
- package/build/tools/replay-executor.js +2347 -0
- package/build/tools/replay-executor.js.map +1 -0
- package/build/tools/replay-folder-save.test.d.ts +2 -0
- package/build/tools/replay-folder-save.test.d.ts.map +1 -0
- package/build/tools/replay-folder-save.test.js +63 -0
- package/build/tools/replay-folder-save.test.js.map +1 -0
- package/build/tools/replay-formatters.d.ts +148 -0
- package/build/tools/replay-formatters.d.ts.map +1 -0
- package/build/tools/replay-formatters.js +856 -0
- package/build/tools/replay-formatters.js.map +1 -0
- package/build/tools/replay-kill-chrome-on-finish.test.d.ts +2 -0
- package/build/tools/replay-kill-chrome-on-finish.test.d.ts.map +1 -0
- package/build/tools/replay-kill-chrome-on-finish.test.js +175 -0
- package/build/tools/replay-kill-chrome-on-finish.test.js.map +1 -0
- package/build/tools/replay-multi-connection.test.d.ts +2 -0
- package/build/tools/replay-multi-connection.test.d.ts.map +1 -0
- package/build/tools/replay-multi-connection.test.js +547 -0
- package/build/tools/replay-multi-connection.test.js.map +1 -0
- package/build/tools/replay-output-and-record-options.test.d.ts +2 -0
- package/build/tools/replay-output-and-record-options.test.d.ts.map +1 -0
- package/build/tools/replay-output-and-record-options.test.js +240 -0
- package/build/tools/replay-output-and-record-options.test.js.map +1 -0
- package/build/tools/replay-production-error-shape.test.d.ts +7 -0
- package/build/tools/replay-production-error-shape.test.d.ts.map +1 -0
- package/build/tools/replay-production-error-shape.test.js +93 -0
- package/build/tools/replay-production-error-shape.test.js.map +1 -0
- package/build/tools/replay-rebase.test.d.ts +2 -0
- package/build/tools/replay-rebase.test.d.ts.map +1 -0
- package/build/tools/replay-rebase.test.js +58 -0
- package/build/tools/replay-rebase.test.js.map +1 -0
- package/build/tools/replay-retry-classification.test.d.ts +9 -0
- package/build/tools/replay-retry-classification.test.d.ts.map +1 -0
- package/build/tools/replay-retry-classification.test.js +57 -0
- package/build/tools/replay-retry-classification.test.js.map +1 -0
- package/build/tools/replay-run-registry.d.ts +55 -0
- package/build/tools/replay-run-registry.d.ts.map +1 -0
- package/build/tools/replay-run-registry.js +65 -0
- package/build/tools/replay-run-registry.js.map +1 -0
- package/build/tools/replay-sequence-reload.test.d.ts +2 -0
- package/build/tools/replay-sequence-reload.test.d.ts.map +1 -0
- package/build/tools/replay-sequence-reload.test.js +82 -0
- package/build/tools/replay-sequence-reload.test.js.map +1 -0
- package/build/tools/replay-socket-scope.test.d.ts +2 -0
- package/build/tools/replay-socket-scope.test.d.ts.map +1 -0
- package/build/tools/replay-socket-scope.test.js +75 -0
- package/build/tools/replay-socket-scope.test.js.map +1 -0
- package/build/tools/replay-step-connection.test.d.ts +2 -0
- package/build/tools/replay-step-connection.test.d.ts.map +1 -0
- package/build/tools/replay-step-connection.test.js +292 -0
- package/build/tools/replay-step-connection.test.js.map +1 -0
- package/build/tools/replay-step-timeout.test.d.ts +2 -0
- package/build/tools/replay-step-timeout.test.d.ts.map +1 -0
- package/build/tools/replay-step-timeout.test.js +204 -0
- package/build/tools/replay-step-timeout.test.js.map +1 -0
- package/build/tools/replay-tags.test.d.ts +2 -0
- package/build/tools/replay-tags.test.d.ts.map +1 -0
- package/build/tools/replay-tags.test.js +99 -0
- package/build/tools/replay-tags.test.js.map +1 -0
- package/build/tools/replay-teardown-and-foreach.test.d.ts +13 -0
- package/build/tools/replay-teardown-and-foreach.test.d.ts.map +1 -0
- package/build/tools/replay-teardown-and-foreach.test.js +318 -0
- package/build/tools/replay-teardown-and-foreach.test.js.map +1 -0
- package/build/tools/replay-tool-name-validation.test.d.ts +2 -0
- package/build/tools/replay-tool-name-validation.test.d.ts.map +1 -0
- package/build/tools/replay-tool-name-validation.test.js +280 -0
- package/build/tools/replay-tool-name-validation.test.js.map +1 -0
- package/build/tools/replay-tools.d.ts +288 -0
- package/build/tools/replay-tools.d.ts.map +1 -0
- package/build/tools/replay-tools.js +2994 -0
- package/build/tools/replay-tools.js.map +1 -0
- package/build/tools/request-abort.test.d.ts +2 -0
- package/build/tools/request-abort.test.d.ts.map +1 -0
- package/build/tools/request-abort.test.js +130 -0
- package/build/tools/request-abort.test.js.map +1 -0
- package/build/tools/request-tools.d.ts +56 -0
- package/build/tools/request-tools.d.ts.map +1 -0
- package/build/tools/request-tools.js +174 -0
- package/build/tools/request-tools.js.map +1 -0
- package/build/tools/screenshot-tools.d.ts +135 -0
- package/build/tools/screenshot-tools.d.ts.map +1 -0
- package/build/tools/screenshot-tools.js +636 -0
- package/build/tools/screenshot-tools.js.map +1 -0
- package/build/tools/server-tools.d.ts +88 -0
- package/build/tools/server-tools.d.ts.map +1 -0
- package/build/tools/server-tools.js +485 -0
- package/build/tools/server-tools.js.map +1 -0
- package/build/tools/source-tools.d.ts +46 -0
- package/build/tools/source-tools.d.ts.map +1 -0
- package/build/tools/source-tools.js +47 -0
- package/build/tools/source-tools.js.map +1 -0
- package/build/tools/storage-tools.d.ts +141 -0
- package/build/tools/storage-tools.d.ts.map +1 -0
- package/build/tools/storage-tools.js +894 -0
- package/build/tools/storage-tools.js.map +1 -0
- package/build/tools/storage-tools.test.d.ts +13 -0
- package/build/tools/storage-tools.test.d.ts.map +1 -0
- package/build/tools/storage-tools.test.js +707 -0
- package/build/tools/storage-tools.test.js.map +1 -0
- package/build/tools/tab-tools.d.ts +42 -0
- package/build/tools/tab-tools.d.ts.map +1 -0
- package/build/tools/tab-tools.js +296 -0
- package/build/tools/tab-tools.js.map +1 -0
- package/build/tools/wait-tools.d.ts +85 -0
- package/build/tools/wait-tools.d.ts.map +1 -0
- package/build/tools/wait-tools.js +236 -0
- package/build/tools/wait-tools.js.map +1 -0
- package/build/tools/wait-tools.test.d.ts +9 -0
- package/build/tools/wait-tools.test.d.ts.map +1 -0
- package/build/tools/wait-tools.test.js +193 -0
- package/build/tools/wait-tools.test.js.map +1 -0
- package/build/types.d.ts +133 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +5 -0
- package/build/types.js.map +1 -0
- package/build/ui-verifier.d.ts +88 -0
- package/build/ui-verifier.d.ts.map +1 -0
- package/build/ui-verifier.js +540 -0
- package/build/ui-verifier.js.map +1 -0
- package/build/utils/abort.d.ts +68 -0
- package/build/utils/abort.d.ts.map +1 -0
- package/build/utils/abort.js +159 -0
- package/build/utils/abort.js.map +1 -0
- package/build/utils/abort.test.d.ts +2 -0
- package/build/utils/abort.test.d.ts.map +1 -0
- package/build/utils/abort.test.js +174 -0
- package/build/utils/abort.test.js.map +1 -0
- package/build/utils/modal-detection-core.d.ts +150 -0
- package/build/utils/modal-detection-core.d.ts.map +1 -0
- package/build/utils/modal-detection-core.js +332 -0
- package/build/utils/modal-detection-core.js.map +1 -0
- package/build/utils/modal-detection-core.test.d.ts +5 -0
- package/build/utils/modal-detection-core.test.d.ts.map +1 -0
- package/build/utils/modal-detection-core.test.js +492 -0
- package/build/utils/modal-detection-core.test.js.map +1 -0
- package/build/utils/modal-detector.d.ts +29 -0
- package/build/utils/modal-detector.d.ts.map +1 -0
- package/build/utils/modal-detector.js +281 -0
- package/build/utils/modal-detector.js.map +1 -0
- package/build/utils/modal-dismissal.d.ts +32 -0
- package/build/utils/modal-dismissal.d.ts.map +1 -0
- package/build/utils/modal-dismissal.js +190 -0
- package/build/utils/modal-dismissal.js.map +1 -0
- package/build/utils/port-check.d.ts +31 -0
- package/build/utils/port-check.d.ts.map +1 -0
- package/build/utils/port-check.js +87 -0
- package/build/utils/port-check.js.map +1 -0
- package/build/utils/port-check.test.d.ts +2 -0
- package/build/utils/port-check.test.d.ts.map +1 -0
- package/build/utils/port-check.test.js +66 -0
- package/build/utils/port-check.test.js.map +1 -0
- package/build/utils/selector-resolver.d.ts +66 -0
- package/build/utils/selector-resolver.d.ts.map +1 -0
- package/build/utils/selector-resolver.js +200 -0
- package/build/utils/selector-resolver.js.map +1 -0
- package/build/validation-helpers.d.ts +41 -0
- package/build/validation-helpers.d.ts.map +1 -0
- package/build/validation-helpers.js +236 -0
- package/build/validation-helpers.js.map +1 -0
- package/build/window-sizing.d.ts +26 -0
- package/build/window-sizing.d.ts.map +1 -0
- package/build/window-sizing.js +87 -0
- package/build/window-sizing.js.map +1 -0
- package/build/window-sizing.test.d.ts +8 -0
- package/build/window-sizing.test.d.ts.map +1 -0
- package/build/window-sizing.test.js +113 -0
- package/build/window-sizing.test.js.map +1 -0
- package/docs/README.md +74 -0
- package/docs/automation.md +562 -0
- package/docs/debugging.md +229 -0
- package/docs/installation.md +133 -0
- package/docs/instructions.md +227 -0
- package/docs/mcp-instructions.md +15 -0
- package/docs/message-system.md +327 -0
- package/docs/messages.md +3480 -0
- package/docs/parser-plugins.md +132 -0
- package/docs/replay.md +1411 -0
- package/docs/troubleshooting.md +272 -0
- package/docs/working_with_llm_notes.md +5 -0
- package/package.json +87 -0
- package/skills/devharness/SKILL.md +195 -0
- package/skills/devharness/references/sequences.md +613 -0
- package/skills/devharness/references/tool-categories.md +99 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { promises as fsp } from 'fs';
|
|
3
|
+
import { tmpdir } from 'os';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { setWorkingDirOverride } from './helpers/paths.js';
|
|
6
|
+
import { __resetForTests, addIssue, getIssue, getIssues, addIssueComment, getIssueItemsDir, } from './issue-tracker.js';
|
|
7
|
+
let tempDir;
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
tempDir = await fsp.mkdtemp(join(tmpdir(), 'cdp-tools-issue-test-'));
|
|
10
|
+
setWorkingDirOverride(tempDir);
|
|
11
|
+
__resetForTests();
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
__resetForTests();
|
|
15
|
+
await fsp.rm(tempDir, { recursive: true, force: true });
|
|
16
|
+
});
|
|
17
|
+
describe('issue-tracker', () => {
|
|
18
|
+
it('round-trips title/body/labels through frontmatter, including special characters', async () => {
|
|
19
|
+
const created = await addIssue({
|
|
20
|
+
type: 'bug',
|
|
21
|
+
title: 'Bug: submit fails "hard" & breaks',
|
|
22
|
+
body: '## Steps\n1. Click submit\n2. Watch it fail',
|
|
23
|
+
labels: ['ui', 'checkout'],
|
|
24
|
+
});
|
|
25
|
+
// Drop the in-memory index and re-read straight from disk to actually
|
|
26
|
+
// exercise the serialize -> file -> parse round trip.
|
|
27
|
+
__resetForTests();
|
|
28
|
+
const reloaded = await getIssue(created.id);
|
|
29
|
+
expect(reloaded).toBeDefined();
|
|
30
|
+
expect(reloaded.title).toBe('Bug: submit fails "hard" & breaks');
|
|
31
|
+
expect(reloaded.body).toBe('## Steps\n1. Click submit\n2. Watch it fail');
|
|
32
|
+
expect(reloaded.labels).toEqual(['ui', 'checkout']);
|
|
33
|
+
expect(reloaded.type).toBe('bug');
|
|
34
|
+
expect(reloaded.status).toBe('pending');
|
|
35
|
+
});
|
|
36
|
+
it('round-trips multiple comments, preserving order and markdown content', async () => {
|
|
37
|
+
const issue = await addIssue({ type: 'feature', title: 'Add dark mode' });
|
|
38
|
+
await addIssueComment(issue.id, 'First: tried on Chrome, works.');
|
|
39
|
+
await addIssueComment(issue.id, '```js\nconsole.log("ok")\n```\nFixed in commit abc123.');
|
|
40
|
+
__resetForTests();
|
|
41
|
+
const reloaded = await getIssue(issue.id);
|
|
42
|
+
expect(reloaded.comments).toHaveLength(2);
|
|
43
|
+
expect(reloaded.comments[0].text).toBe('First: tried on Chrome, works.');
|
|
44
|
+
expect(reloaded.comments[1].text).toBe('```js\nconsole.log("ok")\n```\nFixed in commit abc123.');
|
|
45
|
+
expect(reloaded.comments[0].timestamp.getTime()).toBeLessThanOrEqual(reloaded.comments[1].timestamp.getTime());
|
|
46
|
+
});
|
|
47
|
+
it('migrates a legacy issues.csv into one .md file per row and renames it to .bak', async () => {
|
|
48
|
+
const issuesDir = join(tempDir, '.cdp-tools', 'issues');
|
|
49
|
+
await fsp.mkdir(issuesDir, { recursive: true });
|
|
50
|
+
const csvHeader = 'id,type,status,description,sequence_file,start_url,reported_at,acknowledged_at,started_at,resolved_at,recording_name';
|
|
51
|
+
const csvRow = '1,bug,pending,"Login button, does ""nothing""",,http://localhost:3000,2026-01-01T00:00:00.000Z,,,,manual';
|
|
52
|
+
await fsp.writeFile(join(issuesDir, 'issues.csv'), `${csvHeader}\n${csvRow}\n`, 'utf-8');
|
|
53
|
+
const issues = await getIssues({ includeCompleted: true });
|
|
54
|
+
expect(issues).toHaveLength(1);
|
|
55
|
+
expect(issues[0].title).toBe('Login button, does "nothing"');
|
|
56
|
+
expect(issues[0].body).toBe('');
|
|
57
|
+
expect(issues[0].type).toBe('bug');
|
|
58
|
+
expect(issues[0].status).toBe('pending');
|
|
59
|
+
const items = await fsp.readdir(join(issuesDir, 'items'));
|
|
60
|
+
expect(items.filter(f => f.endsWith('.md'))).toHaveLength(1);
|
|
61
|
+
await expect(fsp.access(join(issuesDir, 'issues.csv.bak'))).resolves.toBeUndefined();
|
|
62
|
+
await expect(fsp.access(join(issuesDir, 'issues.csv'))).rejects.toThrow();
|
|
63
|
+
});
|
|
64
|
+
it('picks up an externally-written issue file after the debounce window', async () => {
|
|
65
|
+
// Prime the index/watcher with an initial (empty) load.
|
|
66
|
+
await getIssues();
|
|
67
|
+
const itemsDir = getIssueItemsDir();
|
|
68
|
+
await fsp.mkdir(itemsDir, { recursive: true });
|
|
69
|
+
const externalFile = [
|
|
70
|
+
'---',
|
|
71
|
+
'id: 42',
|
|
72
|
+
'type: feature',
|
|
73
|
+
'status: pending',
|
|
74
|
+
'title: "Externally added issue"',
|
|
75
|
+
'reportedAt: 2026-01-01T00:00:00.000Z',
|
|
76
|
+
'---',
|
|
77
|
+
'',
|
|
78
|
+
'Added directly to disk, not through addIssue().',
|
|
79
|
+
'',
|
|
80
|
+
].join('\n');
|
|
81
|
+
await fsp.writeFile(join(itemsDir, 'feature-042-externally-added-issue.md'), externalFile, 'utf-8');
|
|
82
|
+
// Wait past the debounce window for the watcher's rescan to land.
|
|
83
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
84
|
+
const issues = await getIssues();
|
|
85
|
+
expect(issues.some(i => i.id === 42 && i.title === 'Externally added issue')).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=issue-tracker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-tracker.test.js","sourceRoot":"","sources":["../src/issue-tracker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests for bug-005: launchChrome silently discarded an explicit
|
|
3
|
+
* `port` when `forceNewInstance` was set, and skipped the reference-reuse
|
|
4
|
+
* check so two Chrome instances could share one reference.
|
|
5
|
+
*
|
|
6
|
+
* The handler lives in src/index.ts, which calls main() on import and so can
|
|
7
|
+
* never be imported by a unit test. These tests used to work around that by
|
|
8
|
+
* grepping the handler SOURCE for fragments like `'if (explicitPort !== undefined)'`
|
|
9
|
+
* - which asserted nothing about behaviour and would have passed under any
|
|
10
|
+
* logic bug that kept the tokens. The decision is now a pure exported function
|
|
11
|
+
* (resolveLaunchPort) that the handler delegates to, and these tests execute it.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=launch-chrome-port.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-chrome-port.test.d.ts","sourceRoot":"","sources":["../src/launch-chrome-port.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests for bug-005: launchChrome silently discarded an explicit
|
|
3
|
+
* `port` when `forceNewInstance` was set, and skipped the reference-reuse
|
|
4
|
+
* check so two Chrome instances could share one reference.
|
|
5
|
+
*
|
|
6
|
+
* The handler lives in src/index.ts, which calls main() on import and so can
|
|
7
|
+
* never be imported by a unit test. These tests used to work around that by
|
|
8
|
+
* grepping the handler SOURCE for fragments like `'if (explicitPort !== undefined)'`
|
|
9
|
+
* - which asserted nothing about behaviour and would have passed under any
|
|
10
|
+
* logic bug that kept the tokens. The decision is now a pure exported function
|
|
11
|
+
* (resolveLaunchPort) that the handler delegates to, and these tests execute it.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it, expect } from 'vitest';
|
|
14
|
+
import { resolveLaunchPort } from './chrome-launcher.js';
|
|
15
|
+
import { getErrorMessage, getMessageCode } from './messages.js';
|
|
16
|
+
/** resolveLaunchPort input with recording stubs; override per test. */
|
|
17
|
+
function makeRequest(overrides = {}) {
|
|
18
|
+
const calls = { occupancyChecks: [], freePortLookups: 0 };
|
|
19
|
+
const req = {
|
|
20
|
+
reservedPort: 9222,
|
|
21
|
+
isPortOccupied: async (port) => {
|
|
22
|
+
calls.occupancyChecks.push(port);
|
|
23
|
+
return false;
|
|
24
|
+
},
|
|
25
|
+
findFreePort: async () => {
|
|
26
|
+
calls.freePortLookups++;
|
|
27
|
+
return 9333;
|
|
28
|
+
},
|
|
29
|
+
...overrides,
|
|
30
|
+
};
|
|
31
|
+
return { req, calls };
|
|
32
|
+
}
|
|
33
|
+
describe('resolveLaunchPort (bug-005)', () => {
|
|
34
|
+
it('uses this session\'s reserved port when no port was given', async () => {
|
|
35
|
+
const { req, calls } = makeRequest();
|
|
36
|
+
expect(await resolveLaunchPort(req)).toEqual({ decision: 'use', port: 9222 });
|
|
37
|
+
expect(calls.freePortLookups).toBe(0);
|
|
38
|
+
expect(calls.occupancyChecks).toEqual([]);
|
|
39
|
+
});
|
|
40
|
+
it('honours an explicit port without probing it when not forcing', async () => {
|
|
41
|
+
const { req, calls } = makeRequest({ explicitPort: 9555 });
|
|
42
|
+
expect(await resolveLaunchPort(req)).toEqual({ decision: 'use', port: 9555 });
|
|
43
|
+
// Reusing whatever is on that port is the point when not forcing a new one
|
|
44
|
+
expect(calls.occupancyChecks).toEqual([]);
|
|
45
|
+
});
|
|
46
|
+
it('picks a free port for forceNewInstance without an explicit port', async () => {
|
|
47
|
+
const { req, calls } = makeRequest({ forceNewInstance: true });
|
|
48
|
+
expect(await resolveLaunchPort(req)).toEqual({ decision: 'use', port: 9333 });
|
|
49
|
+
expect(calls.freePortLookups).toBe(1);
|
|
50
|
+
});
|
|
51
|
+
it('honours a free explicit port under forceNewInstance instead of relocating', async () => {
|
|
52
|
+
const { req, calls } = makeRequest({ explicitPort: 9555, forceNewInstance: true });
|
|
53
|
+
expect(await resolveLaunchPort(req)).toEqual({ decision: 'use', port: 9555 });
|
|
54
|
+
expect(calls.occupancyChecks).toEqual([9555]);
|
|
55
|
+
// The bug: it fell back to auto-selection and launched somewhere else
|
|
56
|
+
expect(calls.freePortLookups).toBe(0);
|
|
57
|
+
});
|
|
58
|
+
it('errors instead of relocating when the forced explicit port is taken', async () => {
|
|
59
|
+
const { req, calls } = makeRequest({
|
|
60
|
+
explicitPort: 9555,
|
|
61
|
+
forceNewInstance: true,
|
|
62
|
+
isPortOccupied: async () => true,
|
|
63
|
+
});
|
|
64
|
+
expect(await resolveLaunchPort(req)).toEqual({ decision: 'forced-port-in-use', port: 9555 });
|
|
65
|
+
expect(calls.freePortLookups).toBe(0);
|
|
66
|
+
});
|
|
67
|
+
it('never silently substitutes another port for an explicit one', async () => {
|
|
68
|
+
for (const forceNewInstance of [false, true]) {
|
|
69
|
+
for (const occupied of [false, true]) {
|
|
70
|
+
const { req } = makeRequest({
|
|
71
|
+
explicitPort: 9555,
|
|
72
|
+
forceNewInstance,
|
|
73
|
+
isPortOccupied: async () => occupied,
|
|
74
|
+
});
|
|
75
|
+
const result = await resolveLaunchPort(req);
|
|
76
|
+
expect(result.port).toBe(9555);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('bug-005 error templates', () => {
|
|
82
|
+
it('renders CHROME_FORCED_PORT_IN_USE with the requested port', () => {
|
|
83
|
+
const message = getErrorMessage('CHROME_FORCED_PORT_IN_USE', { port: '9223' });
|
|
84
|
+
expect(message).not.toContain('Message not found');
|
|
85
|
+
expect(message).toContain('9223');
|
|
86
|
+
expect(message).not.toContain('{{');
|
|
87
|
+
expect(getMessageCode('CHROME_FORCED_PORT_IN_USE')).toBe('PORT_IN_USE');
|
|
88
|
+
});
|
|
89
|
+
it('renders CHROME_REFERENCE_ALREADY_BOUND with the reference name', () => {
|
|
90
|
+
const message = getErrorMessage('CHROME_REFERENCE_ALREADY_BOUND', { reference: 'device a one' });
|
|
91
|
+
expect(message).not.toContain('Message not found');
|
|
92
|
+
expect(message).toContain('device a one');
|
|
93
|
+
expect(message).not.toContain('{{');
|
|
94
|
+
expect(getMessageCode('CHROME_REFERENCE_ALREADY_BOUND')).toBe('REFERENCE_IN_USE');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=launch-chrome-port.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-chrome-port.test.js","sourceRoot":"","sources":["../src/launch-chrome-port.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log-processor Orchestrator — STUB.
|
|
3
|
+
*
|
|
4
|
+
* The real implementation was never committed to the repo: post-v0.4.1 commits
|
|
5
|
+
* wired it into `index.ts` (and the dashboard hub) but the `src/log-processor/`
|
|
6
|
+
* directory and `src/tools/plugin-tools.ts` were never `git add`ed. This stub
|
|
7
|
+
* reproduces the *interface* inferred from those call sites so the project builds
|
|
8
|
+
* and runs with the log-processor feature inert. Replace with the real engine —
|
|
9
|
+
* a config-driven pipeline of classifiers / extractors / state-machines over live
|
|
10
|
+
* MCP session logs, loaded from `.cdp-tools/config/{classifiers,extractors,
|
|
11
|
+
* state-machines,dashboard}/` — to restore it.
|
|
12
|
+
*/
|
|
13
|
+
import type { SessionDetector } from '../session-detector.js';
|
|
14
|
+
export interface OrchestratorSource {
|
|
15
|
+
/** Where logs come from. Only 'live' (via a SessionDetector) is wired today. */
|
|
16
|
+
mode: 'live';
|
|
17
|
+
sessionDetector: SessionDetector;
|
|
18
|
+
}
|
|
19
|
+
export interface OrchestratorOptions {
|
|
20
|
+
source: OrchestratorSource;
|
|
21
|
+
/** Root config dir (`.cdp-tools/config`) holding the plugin subdirectories. */
|
|
22
|
+
configDir: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class Orchestrator {
|
|
25
|
+
private readonly options;
|
|
26
|
+
constructor(options: OrchestratorOptions);
|
|
27
|
+
/** Begin processing logs from the configured source. No-op in the stub. */
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
/** Stop processing. No-op in the stub. */
|
|
30
|
+
stop(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/log-processor/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,mBAAmB;IAEzD,2EAA2E;IACrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,0CAA0C;IAC1C,IAAI,IAAI,IAAI;CAGb"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log-processor Orchestrator — STUB.
|
|
3
|
+
*
|
|
4
|
+
* The real implementation was never committed to the repo: post-v0.4.1 commits
|
|
5
|
+
* wired it into `index.ts` (and the dashboard hub) but the `src/log-processor/`
|
|
6
|
+
* directory and `src/tools/plugin-tools.ts` were never `git add`ed. This stub
|
|
7
|
+
* reproduces the *interface* inferred from those call sites so the project builds
|
|
8
|
+
* and runs with the log-processor feature inert. Replace with the real engine —
|
|
9
|
+
* a config-driven pipeline of classifiers / extractors / state-machines over live
|
|
10
|
+
* MCP session logs, loaded from `.cdp-tools/config/{classifiers,extractors,
|
|
11
|
+
* state-machines,dashboard}/` — to restore it.
|
|
12
|
+
*/
|
|
13
|
+
export class Orchestrator {
|
|
14
|
+
options;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
/** Begin processing logs from the configured source. No-op in the stub. */
|
|
19
|
+
async start() {
|
|
20
|
+
// intentionally inert — see file header
|
|
21
|
+
}
|
|
22
|
+
/** Stop processing. No-op in the stub. */
|
|
23
|
+
stop() {
|
|
24
|
+
// intentionally inert — see file header
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/log-processor/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAE7D,2EAA2E;IAC3E,KAAK,CAAC,KAAK;QACT,wCAAwC;IAC1C,CAAC;IAED,0CAA0C;IAC1C,IAAI;QACF,wCAAwC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logpoint Execution Tracker
|
|
3
|
+
* Monitors logpoint executions and enforces execution limits
|
|
4
|
+
*/
|
|
5
|
+
import type { StoredConsoleMessage } from './console-monitor.js';
|
|
6
|
+
export interface LogpointMetadata {
|
|
7
|
+
breakpointId: string;
|
|
8
|
+
url: string;
|
|
9
|
+
lineNumber: number;
|
|
10
|
+
logMessage: string;
|
|
11
|
+
maxExecutions: number;
|
|
12
|
+
executionCount: number;
|
|
13
|
+
logs: StoredConsoleMessage[];
|
|
14
|
+
}
|
|
15
|
+
export type LimitExceededCallback = (metadata: LogpointMetadata) => void;
|
|
16
|
+
export declare class LogpointExecutionTracker {
|
|
17
|
+
private logpoints;
|
|
18
|
+
private onLimitExceeded;
|
|
19
|
+
/**
|
|
20
|
+
* Register a new logpoint for tracking
|
|
21
|
+
*/
|
|
22
|
+
registerLogpoint(breakpointId: string, url: string, lineNumber: number, logMessage: string, maxExecutions: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Unregister a logpoint
|
|
25
|
+
*/
|
|
26
|
+
unregisterLogpoint(breakpointId: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Reset the execution counter for a logpoint
|
|
29
|
+
*/
|
|
30
|
+
resetCounter(breakpointId: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get metadata for a specific logpoint
|
|
33
|
+
*/
|
|
34
|
+
getLogpoint(breakpointId: string): LogpointMetadata | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Get all registered logpoints
|
|
37
|
+
*/
|
|
38
|
+
getAllLogpoints(): LogpointMetadata[];
|
|
39
|
+
/**
|
|
40
|
+
* Set the callback to invoke when a logpoint exceeds its limit
|
|
41
|
+
*/
|
|
42
|
+
setLimitExceededCallback(callback: LimitExceededCallback): void;
|
|
43
|
+
/**
|
|
44
|
+
* Handle a console message - check if it's from a logpoint
|
|
45
|
+
* This should be called by ConsoleMonitor when a message is added
|
|
46
|
+
*/
|
|
47
|
+
handleConsoleMessage(message: StoredConsoleMessage): void;
|
|
48
|
+
/**
|
|
49
|
+
* Helper to match URLs (handle file:// vs http:// and normalization)
|
|
50
|
+
*/
|
|
51
|
+
private urlsMatch;
|
|
52
|
+
/**
|
|
53
|
+
* Clear all tracked logpoints
|
|
54
|
+
*/
|
|
55
|
+
clear(): void;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=logpoint-execution-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logpoint-execution-tracker.d.ts","sourceRoot":"","sources":["../src/logpoint-execution-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEzE,qBAAa,wBAAwB;IACnC,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,eAAe,CAAsC;IAE7D;;OAEG;IACH,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,IAAI;IAYP;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/D;;OAEG;IACH,eAAe,IAAI,gBAAgB,EAAE;IAIrC;;OAEG;IACH,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI/D;;;OAGG;IACH,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IA2CzD;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logpoint Execution Tracker
|
|
3
|
+
* Monitors logpoint executions and enforces execution limits
|
|
4
|
+
*/
|
|
5
|
+
export class LogpointExecutionTracker {
|
|
6
|
+
logpoints = new Map();
|
|
7
|
+
onLimitExceeded = null;
|
|
8
|
+
/**
|
|
9
|
+
* Register a new logpoint for tracking
|
|
10
|
+
*/
|
|
11
|
+
registerLogpoint(breakpointId, url, lineNumber, logMessage, maxExecutions) {
|
|
12
|
+
this.logpoints.set(breakpointId, {
|
|
13
|
+
breakpointId,
|
|
14
|
+
url,
|
|
15
|
+
lineNumber,
|
|
16
|
+
logMessage,
|
|
17
|
+
maxExecutions,
|
|
18
|
+
executionCount: 0,
|
|
19
|
+
logs: [],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Unregister a logpoint
|
|
24
|
+
*/
|
|
25
|
+
unregisterLogpoint(breakpointId) {
|
|
26
|
+
this.logpoints.delete(breakpointId);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Reset the execution counter for a logpoint
|
|
30
|
+
*/
|
|
31
|
+
resetCounter(breakpointId) {
|
|
32
|
+
const metadata = this.logpoints.get(breakpointId);
|
|
33
|
+
if (metadata) {
|
|
34
|
+
metadata.executionCount = 0;
|
|
35
|
+
metadata.logs = [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get metadata for a specific logpoint
|
|
40
|
+
*/
|
|
41
|
+
getLogpoint(breakpointId) {
|
|
42
|
+
return this.logpoints.get(breakpointId);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all registered logpoints
|
|
46
|
+
*/
|
|
47
|
+
getAllLogpoints() {
|
|
48
|
+
return Array.from(this.logpoints.values());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Set the callback to invoke when a logpoint exceeds its limit
|
|
52
|
+
*/
|
|
53
|
+
setLimitExceededCallback(callback) {
|
|
54
|
+
this.onLimitExceeded = callback;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Handle a console message - check if it's from a logpoint
|
|
58
|
+
* This should be called by ConsoleMonitor when a message is added
|
|
59
|
+
*/
|
|
60
|
+
handleConsoleMessage(message) {
|
|
61
|
+
// Check if this is a logpoint message
|
|
62
|
+
if (!message.text.startsWith('[Logpoint]')) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Parse location from message text since console messages from breakpoint conditions
|
|
66
|
+
// don't preserve the original source location
|
|
67
|
+
// Format: "[Logpoint] file:///path/to/file.js:12:auto: message..."
|
|
68
|
+
const locationMatch = message.text.match(/\[Logpoint\]\s+(.+?):(\d+)(?::(?:auto|\d+))?:/);
|
|
69
|
+
if (!locationMatch) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const messageUrl = locationMatch[1];
|
|
73
|
+
const messageLine = parseInt(locationMatch[2], 10);
|
|
74
|
+
// Find the logpoint that matches this location
|
|
75
|
+
for (const metadata of this.logpoints.values()) {
|
|
76
|
+
// Compare URL and line number
|
|
77
|
+
if (this.urlsMatch(messageUrl, metadata.url) &&
|
|
78
|
+
messageLine === metadata.lineNumber) {
|
|
79
|
+
// Increment execution count
|
|
80
|
+
metadata.executionCount++;
|
|
81
|
+
// Store the log message
|
|
82
|
+
metadata.logs.push(message);
|
|
83
|
+
// Check if limit exceeded
|
|
84
|
+
if (metadata.executionCount >= metadata.maxExecutions) {
|
|
85
|
+
// Invoke callback if set
|
|
86
|
+
if (this.onLimitExceeded) {
|
|
87
|
+
this.onLimitExceeded(metadata);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
break; // Only match to one logpoint
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Helper to match URLs (handle file:// vs http:// and normalization)
|
|
96
|
+
*/
|
|
97
|
+
urlsMatch(url1, url2) {
|
|
98
|
+
// Normalize URLs for comparison
|
|
99
|
+
const normalize = (url) => {
|
|
100
|
+
// Remove trailing slashes
|
|
101
|
+
return url.replace(/\/$/, '');
|
|
102
|
+
};
|
|
103
|
+
return normalize(url1) === normalize(url2);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Clear all tracked logpoints
|
|
107
|
+
*/
|
|
108
|
+
clear() {
|
|
109
|
+
this.logpoints.clear();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=logpoint-execution-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logpoint-execution-tracker.js","sourceRoot":"","sources":["../src/logpoint-execution-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-supervisor.d.ts","sourceRoot":"","sources":["../src/mcp-supervisor.ts"],"names":[],"mappings":""}
|