@agentrhq/webcmd 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +317 -24
- package/dist/src/adapter-shadow.d.ts +11 -0
- package/dist/src/adapter-shadow.js +72 -0
- package/dist/src/adapter-shadow.test.d.ts +1 -0
- package/dist/src/adapter-shadow.test.js +49 -0
- package/dist/src/adapter-source.d.ts +11 -0
- package/dist/src/adapter-source.js +24 -0
- package/dist/src/adapter-source.test.d.ts +1 -0
- package/dist/src/adapter-source.test.js +29 -0
- package/dist/src/brand.d.ts +9 -0
- package/dist/src/brand.js +9 -0
- package/dist/src/brand.test.d.ts +1 -0
- package/dist/src/brand.test.js +15 -0
- package/dist/src/browser/analyze.d.ts +118 -0
- package/dist/src/browser/analyze.js +405 -0
- package/dist/src/browser/analyze.test.d.ts +1 -0
- package/dist/src/browser/analyze.test.js +209 -0
- package/dist/src/browser/article-extract.d.ts +57 -0
- package/dist/src/browser/article-extract.e2e.test.d.ts +1 -0
- package/dist/src/browser/article-extract.e2e.test.js +105 -0
- package/dist/src/browser/article-extract.js +169 -0
- package/dist/src/browser/article-extract.test.d.ts +1 -0
- package/dist/src/browser/article-extract.test.js +94 -0
- package/dist/src/browser/ax-snapshot.d.ts +37 -0
- package/dist/src/browser/ax-snapshot.js +217 -0
- package/dist/src/browser/ax-snapshot.test.d.ts +1 -0
- package/dist/src/browser/ax-snapshot.test.js +91 -0
- package/dist/src/browser/base-page.d.ts +151 -0
- package/dist/src/browser/base-page.js +1060 -0
- package/dist/src/browser/base-page.test.d.ts +1 -0
- package/dist/src/browser/base-page.test.js +803 -0
- package/dist/src/browser/bridge-readiness.d.ts +14 -0
- package/dist/src/browser/bridge-readiness.js +24 -0
- package/dist/src/browser/bridge-readiness.test.d.ts +1 -0
- package/dist/src/browser/bridge-readiness.test.js +58 -0
- package/dist/src/browser/bridge.d.ts +26 -0
- package/dist/src/browser/bridge.js +58 -0
- package/dist/src/browser/cdp-click-fixture.test.d.ts +1 -0
- package/dist/src/browser/cdp-click-fixture.test.js +87 -0
- package/dist/src/browser/cdp.d.ts +46 -0
- package/dist/src/browser/cdp.js +536 -0
- package/dist/src/browser/cdp.test.d.ts +1 -0
- package/dist/src/browser/cdp.test.js +79 -0
- package/dist/src/browser/compound.d.ts +59 -0
- package/dist/src/browser/compound.js +112 -0
- package/dist/src/browser/compound.test.d.ts +1 -0
- package/dist/src/browser/compound.test.js +175 -0
- package/dist/src/browser/config.d.ts +2 -0
- package/dist/src/browser/config.js +14 -0
- package/dist/src/browser/daemon-client.d.ts +32 -0
- package/dist/src/browser/daemon-client.js +135 -0
- package/dist/src/browser/daemon-client.test.d.ts +1 -0
- package/dist/src/browser/daemon-client.test.js +326 -0
- package/dist/src/browser/daemon-lifecycle.d.ts +37 -0
- package/dist/src/browser/daemon-lifecycle.js +147 -0
- package/dist/src/browser/daemon-transport.d.ts +54 -0
- package/dist/src/browser/daemon-transport.js +68 -0
- package/dist/src/browser/daemon-version.d.ts +4 -0
- package/dist/src/browser/daemon-version.js +12 -0
- package/dist/src/browser/dom-helpers.d.ts +41 -0
- package/dist/src/browser/dom-helpers.js +239 -0
- package/dist/src/browser/dom-helpers.test.d.ts +1 -0
- package/dist/src/browser/dom-helpers.test.js +106 -0
- package/dist/src/browser/dom-snapshot.d.ts +93 -0
- package/dist/src/browser/dom-snapshot.js +894 -0
- package/dist/src/browser/dom-snapshot.test.d.ts +11 -0
- package/dist/src/browser/dom-snapshot.test.js +313 -0
- package/dist/src/browser/errors.d.ts +38 -0
- package/dist/src/browser/errors.js +79 -0
- package/dist/src/browser/errors.test.d.ts +1 -0
- package/dist/src/browser/errors.test.js +60 -0
- package/dist/src/browser/extract.d.ts +69 -0
- package/dist/src/browser/extract.js +132 -0
- package/dist/src/browser/extract.test.d.ts +1 -0
- package/dist/src/browser/extract.test.js +129 -0
- package/dist/src/browser/find.d.ts +84 -0
- package/dist/src/browser/find.js +398 -0
- package/dist/src/browser/find.test.d.ts +1 -0
- package/dist/src/browser/find.test.js +180 -0
- package/dist/src/browser/html-tree.d.ts +75 -0
- package/dist/src/browser/html-tree.js +112 -0
- package/dist/src/browser/html-tree.test.d.ts +1 -0
- package/dist/src/browser/html-tree.test.js +181 -0
- package/dist/src/browser/index.d.ts +14 -0
- package/dist/src/browser/index.js +12 -0
- package/dist/src/browser/network-cache.d.ts +49 -0
- package/dist/src/browser/network-cache.js +78 -0
- package/dist/src/browser/network-cache.test.d.ts +1 -0
- package/dist/src/browser/network-cache.test.js +75 -0
- package/dist/src/browser/network-interceptor.d.ts +11 -0
- package/dist/src/browser/network-interceptor.js +11 -0
- package/dist/src/browser/network-key.d.ts +22 -0
- package/dist/src/browser/network-key.js +66 -0
- package/dist/src/browser/network-key.test.d.ts +1 -0
- package/dist/src/browser/network-key.test.js +49 -0
- package/dist/src/browser/page.d.ts +83 -0
- package/dist/src/browser/page.js +453 -0
- package/dist/src/browser/page.test.d.ts +1 -0
- package/dist/src/browser/page.test.js +406 -0
- package/dist/src/browser/profile.d.ts +14 -0
- package/dist/src/browser/profile.js +86 -0
- package/dist/src/browser/protocol.d.ts +63 -0
- package/dist/src/browser/protocol.js +1 -0
- package/dist/src/browser/runtime/local-cloak/actions.d.ts +3 -0
- package/dist/src/browser/runtime/local-cloak/actions.js +240 -0
- package/dist/src/browser/runtime/local-cloak/downloads.d.ts +3 -0
- package/dist/src/browser/runtime/local-cloak/downloads.js +28 -0
- package/dist/src/browser/runtime/local-cloak/network.d.ts +28 -0
- package/dist/src/browser/runtime/local-cloak/network.js +120 -0
- package/dist/src/browser/runtime/local-cloak/network.test.d.ts +1 -0
- package/dist/src/browser/runtime/local-cloak/network.test.js +124 -0
- package/dist/src/browser/runtime/local-cloak/profiles.d.ts +6 -0
- package/dist/src/browser/runtime/local-cloak/profiles.js +17 -0
- package/dist/src/browser/runtime/local-cloak/profiles.test.d.ts +1 -0
- package/dist/src/browser/runtime/local-cloak/profiles.test.js +19 -0
- package/dist/src/browser/runtime/local-cloak/provider.d.ts +15 -0
- package/dist/src/browser/runtime/local-cloak/provider.js +27 -0
- package/dist/src/browser/runtime/local-cloak/provider.test.d.ts +1 -0
- package/dist/src/browser/runtime/local-cloak/provider.test.js +244 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.d.ts +77 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.js +280 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.test.d.ts +1 -0
- package/dist/src/browser/runtime/local-cloak/session-manager.test.js +92 -0
- package/dist/src/browser/runtime/provider.d.ts +9 -0
- package/dist/src/browser/runtime/provider.js +1 -0
- package/dist/src/browser/runtime/provider.test.d.ts +2 -0
- package/dist/src/browser/runtime/provider.test.js +49 -0
- package/dist/src/browser/shape-filter.d.ts +52 -0
- package/dist/src/browser/shape-filter.js +101 -0
- package/dist/src/browser/shape-filter.test.d.ts +1 -0
- package/dist/src/browser/shape-filter.test.js +101 -0
- package/dist/src/browser/shape.d.ts +23 -0
- package/dist/src/browser/shape.js +95 -0
- package/dist/src/browser/shape.test.d.ts +1 -0
- package/dist/src/browser/shape.test.js +82 -0
- package/dist/src/browser/stealth.d.ts +11 -0
- package/dist/src/browser/stealth.js +359 -0
- package/dist/src/browser/stealth.test.d.ts +1 -0
- package/dist/src/browser/stealth.test.js +134 -0
- package/dist/src/browser/tabs.d.ts +13 -0
- package/dist/src/browser/tabs.js +70 -0
- package/dist/src/browser/target-errors.d.ts +39 -0
- package/dist/src/browser/target-errors.js +45 -0
- package/dist/src/browser/target-errors.test.d.ts +1 -0
- package/dist/src/browser/target-errors.test.js +94 -0
- package/dist/src/browser/target-resolver.d.ts +158 -0
- package/dist/src/browser/target-resolver.js +570 -0
- package/dist/src/browser/target-resolver.test.d.ts +1 -0
- package/dist/src/browser/target-resolver.test.js +118 -0
- package/dist/src/browser/utils.d.ts +20 -0
- package/dist/src/browser/utils.js +64 -0
- package/dist/src/browser/utils.test.d.ts +1 -0
- package/dist/src/browser/utils.test.js +29 -0
- package/dist/src/browser/verify-fixture.d.ts +65 -0
- package/dist/src/browser/verify-fixture.js +318 -0
- package/dist/src/browser/verify-fixture.test.d.ts +1 -0
- package/dist/src/browser/verify-fixture.test.js +219 -0
- package/dist/src/browser/visual-refs.d.ts +11 -0
- package/dist/src/browser/visual-refs.js +108 -0
- package/dist/src/browser.test.d.ts +1 -0
- package/dist/src/browser.test.js +297 -0
- package/dist/src/build-manifest.d.ts +103 -0
- package/dist/src/build-manifest.js +363 -0
- package/dist/src/build-manifest.test.d.ts +1 -0
- package/dist/src/build-manifest.test.js +341 -0
- package/dist/src/capabilityRouting.d.ts +19 -0
- package/dist/src/capabilityRouting.js +56 -0
- package/dist/src/capabilityRouting.test.d.ts +1 -0
- package/dist/src/capabilityRouting.test.js +63 -0
- package/dist/src/cli-argv-preprocess.d.ts +63 -0
- package/dist/src/cli-argv-preprocess.js +303 -0
- package/dist/src/cli-argv-preprocess.test.d.ts +1 -0
- package/dist/src/cli-argv-preprocess.test.js +304 -0
- package/dist/src/cli.d.ts +79 -0
- package/dist/src/cli.js +3350 -0
- package/dist/src/cli.test.d.ts +1 -0
- package/dist/src/cli.test.js +3041 -0
- package/dist/src/commanderAdapter.d.ts +21 -0
- package/dist/src/commanderAdapter.js +208 -0
- package/dist/src/commanderAdapter.test.d.ts +1 -0
- package/dist/src/commanderAdapter.test.js +352 -0
- package/dist/src/commands/auth.d.ts +40 -0
- package/dist/src/commands/auth.js +434 -0
- package/dist/src/commands/auth.test.d.ts +1 -0
- package/dist/src/commands/auth.test.js +252 -0
- package/dist/src/commands/daemon.d.ts +9 -0
- package/dist/src/commands/daemon.js +91 -0
- package/dist/src/commands/daemon.test.d.ts +1 -0
- package/dist/src/commands/daemon.test.js +293 -0
- package/dist/src/completion-fast.d.ts +22 -0
- package/dist/src/completion-fast.js +88 -0
- package/dist/src/completion-shared.d.ts +13 -0
- package/dist/src/completion-shared.js +61 -0
- package/dist/src/completion.d.ts +21 -0
- package/dist/src/completion.js +68 -0
- package/dist/src/completion.test.d.ts +1 -0
- package/dist/src/completion.test.js +24 -0
- package/dist/src/constants.d.ts +18 -0
- package/dist/src/constants.js +41 -0
- package/dist/src/convention-audit.d.ts +50 -0
- package/dist/src/convention-audit.js +553 -0
- package/dist/src/convention-audit.test.d.ts +1 -0
- package/dist/src/convention-audit.test.js +255 -0
- package/dist/src/daemon/server.d.ts +13 -0
- package/dist/src/daemon/server.js +185 -0
- package/dist/src/daemon/server.test.d.ts +1 -0
- package/dist/src/daemon/server.test.js +132 -0
- package/dist/src/daemon-utils.d.ts +18 -0
- package/dist/src/daemon-utils.js +37 -0
- package/dist/src/daemon.d.ts +1 -0
- package/dist/src/daemon.js +27 -0
- package/dist/src/daemon.test.d.ts +1 -0
- package/dist/src/daemon.test.js +60 -0
- package/dist/src/discovery.d.ts +46 -0
- package/dist/src/discovery.js +341 -0
- package/dist/src/doctor.d.ts +39 -0
- package/dist/src/doctor.js +168 -0
- package/dist/src/doctor.test.d.ts +1 -0
- package/dist/src/doctor.test.js +302 -0
- package/dist/src/download/article-download.d.ts +72 -0
- package/dist/src/download/article-download.js +305 -0
- package/dist/src/download/article-download.test.d.ts +1 -0
- package/dist/src/download/article-download.test.js +235 -0
- package/dist/src/download/index.d.ts +71 -0
- package/dist/src/download/index.js +363 -0
- package/dist/src/download/index.test.d.ts +1 -0
- package/dist/src/download/index.test.js +174 -0
- package/dist/src/download/media-download.d.ts +49 -0
- package/dist/src/download/media-download.js +127 -0
- package/dist/src/download/media-download.test.d.ts +1 -0
- package/dist/src/download/media-download.test.js +112 -0
- package/dist/src/download/progress.d.ts +36 -0
- package/dist/src/download/progress.js +120 -0
- package/dist/src/download/progress.test.d.ts +1 -0
- package/dist/src/download/progress.test.js +36 -0
- package/dist/src/electron-apps.d.ts +31 -0
- package/dist/src/electron-apps.js +91 -0
- package/dist/src/electron-apps.test.d.ts +1 -0
- package/dist/src/electron-apps.test.js +76 -0
- package/dist/src/engine.test.d.ts +1 -0
- package/dist/src/engine.test.js +312 -0
- package/dist/src/errors.d.ts +114 -0
- package/dist/src/errors.js +174 -0
- package/dist/src/errors.test.d.ts +1 -0
- package/dist/src/errors.test.js +109 -0
- package/dist/src/execution.d.ts +24 -0
- package/dist/src/execution.js +509 -0
- package/dist/src/execution.test.d.ts +1 -0
- package/dist/src/execution.test.js +645 -0
- package/dist/src/external.d.ts +49 -0
- package/dist/src/external.js +211 -0
- package/dist/src/external.test.d.ts +1 -0
- package/dist/src/external.test.js +110 -0
- package/dist/src/help.d.ts +88 -0
- package/dist/src/help.js +556 -0
- package/dist/src/help.test.d.ts +1 -0
- package/dist/src/help.test.js +58 -0
- package/dist/src/hooks.d.ts +46 -0
- package/dist/src/hooks.js +58 -0
- package/dist/src/hooks.test.d.ts +4 -0
- package/dist/src/hooks.test.js +92 -0
- package/dist/src/interceptor.d.ts +44 -0
- package/dist/src/interceptor.js +183 -0
- package/dist/src/interceptor.test.d.ts +4 -0
- package/dist/src/interceptor.test.js +81 -0
- package/dist/src/launcher.d.ts +41 -0
- package/dist/src/launcher.js +226 -0
- package/dist/src/launcher.test.d.ts +1 -0
- package/dist/src/launcher.test.js +153 -0
- package/dist/src/logger.d.ts +26 -0
- package/dist/src/logger.js +49 -0
- package/dist/src/main.d.ts +5 -0
- package/dist/src/main.js +177 -0
- package/dist/src/manifest-types.d.ts +43 -0
- package/dist/src/manifest-types.js +9 -0
- package/dist/src/node-network.d.ts +10 -0
- package/dist/src/node-network.js +174 -0
- package/dist/src/node-network.test.d.ts +1 -0
- package/dist/src/node-network.test.js +55 -0
- package/dist/src/observation/artifact.d.ts +16 -0
- package/dist/src/observation/artifact.js +260 -0
- package/dist/src/observation/artifact.test.d.ts +1 -0
- package/dist/src/observation/artifact.test.js +121 -0
- package/dist/src/observation/events.d.ts +89 -0
- package/dist/src/observation/events.js +1 -0
- package/dist/src/observation/index.d.ts +7 -0
- package/dist/src/observation/index.js +7 -0
- package/dist/src/observation/manager.d.ts +9 -0
- package/dist/src/observation/manager.js +27 -0
- package/dist/src/observation/manager.test.d.ts +1 -0
- package/dist/src/observation/manager.test.js +13 -0
- package/dist/src/observation/redaction.d.ts +11 -0
- package/dist/src/observation/redaction.js +81 -0
- package/dist/src/observation/redaction.test.d.ts +1 -0
- package/dist/src/observation/redaction.test.js +32 -0
- package/dist/src/observation/retention.d.ts +32 -0
- package/dist/src/observation/retention.js +160 -0
- package/dist/src/observation/retention.test.d.ts +1 -0
- package/dist/src/observation/retention.test.js +118 -0
- package/dist/src/observation/ring-buffer.d.ts +22 -0
- package/dist/src/observation/ring-buffer.js +45 -0
- package/dist/src/observation/ring-buffer.test.d.ts +1 -0
- package/dist/src/observation/ring-buffer.test.js +22 -0
- package/dist/src/observation/session.d.ts +25 -0
- package/dist/src/observation/session.js +50 -0
- package/dist/src/output.d.ts +14 -0
- package/dist/src/output.js +152 -0
- package/dist/src/output.test.d.ts +1 -0
- package/dist/src/output.test.js +53 -0
- package/dist/src/package-exports.test.d.ts +1 -0
- package/dist/src/package-exports.test.js +112 -0
- package/dist/src/package-paths.d.ts +8 -0
- package/dist/src/package-paths.js +41 -0
- package/dist/src/pipeline/executor.d.ts +11 -0
- package/dist/src/pipeline/executor.js +93 -0
- package/dist/src/pipeline/executor.test.d.ts +4 -0
- package/dist/src/pipeline/executor.test.js +182 -0
- package/dist/src/pipeline/index.d.ts +5 -0
- package/dist/src/pipeline/index.js +5 -0
- package/dist/src/pipeline/registry.d.ts +28 -0
- package/dist/src/pipeline/registry.js +55 -0
- package/dist/src/pipeline/steps/browser.d.ts +13 -0
- package/dist/src/pipeline/steps/browser.js +86 -0
- package/dist/src/pipeline/steps/download.d.ts +18 -0
- package/dist/src/pipeline/steps/download.js +252 -0
- package/dist/src/pipeline/steps/download.test.d.ts +1 -0
- package/dist/src/pipeline/steps/download.test.js +102 -0
- package/dist/src/pipeline/steps/fetch.d.ts +5 -0
- package/dist/src/pipeline/steps/fetch.js +122 -0
- package/dist/src/pipeline/steps/fetch.test.d.ts +1 -0
- package/dist/src/pipeline/steps/fetch.test.js +117 -0
- package/dist/src/pipeline/steps/intercept.d.ts +5 -0
- package/dist/src/pipeline/steps/intercept.js +50 -0
- package/dist/src/pipeline/steps/tap.d.ts +12 -0
- package/dist/src/pipeline/steps/tap.js +93 -0
- package/dist/src/pipeline/steps/transform.d.ts +9 -0
- package/dist/src/pipeline/steps/transform.js +70 -0
- package/dist/src/pipeline/template.d.ts +17 -0
- package/dist/src/pipeline/template.js +344 -0
- package/dist/src/pipeline/template.test.d.ts +4 -0
- package/dist/src/pipeline/template.test.js +197 -0
- package/dist/src/pipeline/transform.test.d.ts +4 -0
- package/dist/src/pipeline/transform.test.js +133 -0
- package/dist/src/plugin-manifest.d.ts +70 -0
- package/dist/src/plugin-manifest.js +160 -0
- package/dist/src/plugin-manifest.test.d.ts +4 -0
- package/dist/src/plugin-manifest.test.js +179 -0
- package/dist/src/plugin-scaffold.d.ts +28 -0
- package/dist/src/plugin-scaffold.js +143 -0
- package/dist/src/plugin-scaffold.test.d.ts +4 -0
- package/dist/src/plugin-scaffold.test.js +83 -0
- package/dist/src/plugin.d.ts +146 -0
- package/dist/src/plugin.js +1303 -0
- package/dist/src/plugin.test.d.ts +4 -0
- package/dist/src/plugin.test.js +1363 -0
- package/dist/src/registry-api.d.ts +13 -0
- package/dist/src/registry-api.js +10 -0
- package/dist/src/registry.d.ts +123 -0
- package/dist/src/registry.js +125 -0
- package/dist/src/registry.test.d.ts +4 -0
- package/dist/src/registry.test.js +209 -0
- package/dist/src/runtime-copy.test.d.ts +1 -0
- package/dist/src/runtime-copy.test.js +29 -0
- package/dist/src/runtime-detect.d.ts +31 -0
- package/dist/src/runtime-detect.js +47 -0
- package/dist/src/runtime-detect.test.d.ts +1 -0
- package/dist/src/runtime-detect.test.js +39 -0
- package/dist/src/runtime-identity.test.d.ts +1 -0
- package/dist/src/runtime-identity.test.js +18 -0
- package/dist/src/runtime.d.ts +47 -0
- package/dist/src/runtime.js +54 -0
- package/dist/src/scripts/framework.d.ts +7 -0
- package/dist/src/scripts/framework.js +25 -0
- package/dist/src/scripts/interact.d.ts +4 -0
- package/dist/src/scripts/interact.js +20 -0
- package/dist/src/scripts/store.d.ts +13 -0
- package/dist/src/scripts/store.js +48 -0
- package/dist/src/serialization.d.ts +42 -0
- package/dist/src/serialization.js +103 -0
- package/dist/src/serialization.test.d.ts +1 -0
- package/dist/src/serialization.test.js +78 -0
- package/dist/src/skills.d.ts +14 -0
- package/dist/src/skills.js +127 -0
- package/dist/src/skills.test.d.ts +1 -0
- package/dist/src/skills.test.js +71 -0
- package/dist/src/snapshotFormatter.d.ts +11 -0
- package/dist/src/snapshotFormatter.js +338 -0
- package/dist/src/snapshotFormatter.test.d.ts +7 -0
- package/dist/src/snapshotFormatter.test.js +521 -0
- package/dist/src/tui.d.ts +28 -0
- package/dist/src/tui.js +179 -0
- package/dist/src/tui.test.d.ts +1 -0
- package/dist/src/tui.test.js +19 -0
- package/dist/src/types.d.ts +236 -0
- package/dist/src/types.js +7 -0
- package/dist/src/update-check.d.ts +66 -0
- package/dist/src/update-check.js +206 -0
- package/dist/src/update-check.test.d.ts +1 -0
- package/dist/src/update-check.test.js +117 -0
- package/dist/src/utils.d.ts +57 -0
- package/dist/src/utils.js +152 -0
- package/dist/src/utils.test.d.ts +1 -0
- package/dist/src/utils.test.js +155 -0
- package/dist/src/validate.d.ts +21 -0
- package/dist/src/validate.js +130 -0
- package/dist/src/validate.test.d.ts +9 -0
- package/dist/src/validate.test.js +90 -0
- package/dist/src/verify.d.ts +26 -0
- package/dist/src/verify.js +67 -0
- package/dist/src/version.d.ts +4 -0
- package/dist/src/version.js +22 -0
- package/dist/src/weixin-download.test.d.ts +1 -0
- package/dist/src/weixin-download.test.js +45 -0
- package/package.json +4 -3
- package/scripts/check-package-bin.mjs +95 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// ── Exit code table ──────────────────────────────────────────────────────────
|
|
2
|
+
export const EXIT_CODES = {
|
|
3
|
+
SUCCESS: 0,
|
|
4
|
+
GENERIC_ERROR: 1,
|
|
5
|
+
USAGE_ERROR: 2, // Bad arguments / command misuse
|
|
6
|
+
EMPTY_RESULT: 66, // No data / not found (EX_NOINPUT)
|
|
7
|
+
SERVICE_UNAVAIL: 69, // Daemon / browser unavailable (EX_UNAVAILABLE)
|
|
8
|
+
TEMPFAIL: 75, // Timeout — try again later (EX_TEMPFAIL)
|
|
9
|
+
NOPERM: 77, // Auth required / permission (EX_NOPERM)
|
|
10
|
+
CONFIG_ERROR: 78, // Missing / invalid config (EX_CONFIG)
|
|
11
|
+
INTERRUPTED: 130, // Ctrl-C / SIGINT
|
|
12
|
+
};
|
|
13
|
+
// ── Base class ───────────────────────────────────────────────────────────────
|
|
14
|
+
export class CliError extends Error {
|
|
15
|
+
/** Machine-readable error code (e.g. 'BROWSER_CONNECT', 'AUTH_REQUIRED') */
|
|
16
|
+
code;
|
|
17
|
+
/** Human-readable hint on how to fix the problem */
|
|
18
|
+
hint;
|
|
19
|
+
/** Unix process exit code — defaults to 1 (generic error) */
|
|
20
|
+
exitCode;
|
|
21
|
+
constructor(code, message, hint, exitCode = EXIT_CODES.GENERIC_ERROR) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = new.target.name;
|
|
24
|
+
this.code = code;
|
|
25
|
+
this.hint = hint;
|
|
26
|
+
this.exitCode = exitCode;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const TRACE_RECEIPT_SYMBOL = Symbol.for('webcmd.traceReceipt');
|
|
30
|
+
export function attachTraceReceipt(err, receipt) {
|
|
31
|
+
if (!err || (typeof err !== 'object' && typeof err !== 'function'))
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
Object.defineProperty(err, TRACE_RECEIPT_SYMBOL, {
|
|
35
|
+
value: receipt,
|
|
36
|
+
enumerable: false,
|
|
37
|
+
configurable: true,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Non-extensible thrown objects are rare; trace export should never mask the
|
|
42
|
+
// original adapter error just because metadata attachment failed.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function getTraceReceipt(err) {
|
|
46
|
+
if (!err || (typeof err !== 'object' && typeof err !== 'function'))
|
|
47
|
+
return undefined;
|
|
48
|
+
return err[TRACE_RECEIPT_SYMBOL];
|
|
49
|
+
}
|
|
50
|
+
export class BrowserConnectError extends CliError {
|
|
51
|
+
kind;
|
|
52
|
+
constructor(message, hint, kind = 'unknown') {
|
|
53
|
+
super('BROWSER_CONNECT', message, hint, EXIT_CODES.SERVICE_UNAVAIL);
|
|
54
|
+
this.kind = kind;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class CommandExecutionError extends CliError {
|
|
58
|
+
constructor(message, hint) {
|
|
59
|
+
super('COMMAND_EXEC', message, hint, EXIT_CODES.GENERIC_ERROR);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class ConfigError extends CliError {
|
|
63
|
+
constructor(message, hint) {
|
|
64
|
+
super('CONFIG', message, hint, EXIT_CODES.CONFIG_ERROR);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export class AuthRequiredError extends CliError {
|
|
68
|
+
domain;
|
|
69
|
+
constructor(domain, message) {
|
|
70
|
+
super('AUTH_REQUIRED', message ?? `Not logged in to ${domain}`, `Please open Chrome or Chromium and log in to https://${domain}`, EXIT_CODES.NOPERM);
|
|
71
|
+
this.domain = domain;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export class TimeoutError extends CliError {
|
|
75
|
+
constructor(label, seconds, hint) {
|
|
76
|
+
super('TIMEOUT', `${label} timed out after ${seconds}s`, hint ?? 'Try again, or increase timeout with --timeout <seconds> (or WEBCMD_BROWSER_COMMAND_TIMEOUT for the global default)', EXIT_CODES.TEMPFAIL);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class ArgumentError extends CliError {
|
|
80
|
+
constructor(message, hint) {
|
|
81
|
+
super('ARGUMENT', message, hint, EXIT_CODES.USAGE_ERROR);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class EmptyResultError extends CliError {
|
|
85
|
+
constructor(command, hint) {
|
|
86
|
+
super('EMPTY_RESULT', `${command} returned no data`, hint ?? 'The page structure may have changed, or you may need to log in', EXIT_CODES.EMPTY_RESULT);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export function adapterLoadError(message, hint) {
|
|
90
|
+
return new CliError('ADAPTER_LOAD', message, hint, EXIT_CODES.SERVICE_UNAVAIL);
|
|
91
|
+
}
|
|
92
|
+
export function selectorError(selector, hint) {
|
|
93
|
+
return new CliError('SELECTOR', `Could not find element: ${selector}`, hint ?? 'The page UI may have changed. Please report this issue.', EXIT_CODES.GENERIC_ERROR);
|
|
94
|
+
}
|
|
95
|
+
export class PluginError extends CliError {
|
|
96
|
+
constructor(message, hint) {
|
|
97
|
+
super('PLUGIN', message, hint, EXIT_CODES.GENERIC_ERROR);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Thrown when a JSON endpoint returns HTML instead of JSON — typically a login
|
|
102
|
+
* wall, rate-limit page, or WAF challenge. Surfaced as a structured error so
|
|
103
|
+
* callers can show "re-login or wait out the rate limit" guidance instead of
|
|
104
|
+
* the cryptic `SyntaxError: Unexpected token '<', "<!DOCTYPE "...` that a naive
|
|
105
|
+
* JSON.parse on an HTML body produces.
|
|
106
|
+
*
|
|
107
|
+
* `bodyPreview` is the first 100 chars of the response body (after trimming
|
|
108
|
+
* leading whitespace) — useful for logs / debugging without dumping the full
|
|
109
|
+
* page.
|
|
110
|
+
*/
|
|
111
|
+
export class LoginWallError extends CliError {
|
|
112
|
+
status;
|
|
113
|
+
url;
|
|
114
|
+
bodyPreview;
|
|
115
|
+
constructor(message, status, url, bodyPreview, hint) {
|
|
116
|
+
super('LOGIN_WALL', message, hint ?? 'The server returned an HTML page instead of JSON — likely a login wall, rate limit, or WAF challenge. Try re-logging in via your browser, or wait a few minutes before retrying.', EXIT_CODES.NOPERM);
|
|
117
|
+
this.status = status;
|
|
118
|
+
this.url = url;
|
|
119
|
+
this.bodyPreview = bodyPreview;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ── Utilities ───────────────────────────────────────────────────────────────
|
|
123
|
+
/** Extract a human-readable message from an unknown caught value. */
|
|
124
|
+
export function getErrorMessage(error) {
|
|
125
|
+
return error instanceof Error ? error.message : String(error);
|
|
126
|
+
}
|
|
127
|
+
/** Serialize an error cause chain into a readable string. */
|
|
128
|
+
function serializeCause(cause, depth = 0) {
|
|
129
|
+
if (depth > 10)
|
|
130
|
+
return '(cause chain truncated)';
|
|
131
|
+
if (cause instanceof Error) {
|
|
132
|
+
const parts = [cause.message];
|
|
133
|
+
if (cause.cause)
|
|
134
|
+
parts.push(` caused by: ${serializeCause(cause.cause, depth + 1)}`);
|
|
135
|
+
return parts.join('\n');
|
|
136
|
+
}
|
|
137
|
+
return String(cause);
|
|
138
|
+
}
|
|
139
|
+
/** Build an ErrorEnvelope from any caught value. */
|
|
140
|
+
export function toEnvelope(err) {
|
|
141
|
+
const cause = err instanceof Error && err.cause ? serializeCause(err.cause) : undefined;
|
|
142
|
+
const traceReceipt = getTraceReceipt(err);
|
|
143
|
+
const trace = traceReceipt ? {
|
|
144
|
+
traceId: traceReceipt.traceId,
|
|
145
|
+
dir: traceReceipt.traceDir,
|
|
146
|
+
summaryPath: traceReceipt.summaryPath,
|
|
147
|
+
receiptPath: traceReceipt.receiptPath,
|
|
148
|
+
status: traceReceipt.status,
|
|
149
|
+
} : undefined;
|
|
150
|
+
if (err instanceof CliError) {
|
|
151
|
+
return {
|
|
152
|
+
ok: false,
|
|
153
|
+
error: {
|
|
154
|
+
code: err.code,
|
|
155
|
+
message: err.message,
|
|
156
|
+
...(err.hint ? { help: err.hint } : {}),
|
|
157
|
+
exitCode: err.exitCode,
|
|
158
|
+
...(cause ? { cause } : {}),
|
|
159
|
+
},
|
|
160
|
+
...(trace ? { trace } : {}),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const msg = getErrorMessage(err);
|
|
164
|
+
return {
|
|
165
|
+
ok: false,
|
|
166
|
+
error: {
|
|
167
|
+
code: 'UNKNOWN',
|
|
168
|
+
message: msg,
|
|
169
|
+
exitCode: EXIT_CODES.GENERIC_ERROR,
|
|
170
|
+
...(cause ? { cause } : {}),
|
|
171
|
+
},
|
|
172
|
+
...(trace ? { trace } : {}),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { CliError, BrowserConnectError, adapterLoadError, CommandExecutionError, ConfigError, AuthRequiredError, TimeoutError, ArgumentError, EmptyResultError, selectorError, toEnvelope, } from './errors.js';
|
|
3
|
+
describe('Error type hierarchy', () => {
|
|
4
|
+
it('all error types extend CliError', () => {
|
|
5
|
+
const errors = [
|
|
6
|
+
new BrowserConnectError('test'),
|
|
7
|
+
adapterLoadError('test'),
|
|
8
|
+
new CommandExecutionError('test'),
|
|
9
|
+
new ConfigError('test'),
|
|
10
|
+
new AuthRequiredError('example.com'),
|
|
11
|
+
new TimeoutError('test', 30),
|
|
12
|
+
new ArgumentError('test'),
|
|
13
|
+
new EmptyResultError('test/cmd'),
|
|
14
|
+
selectorError('.btn'),
|
|
15
|
+
];
|
|
16
|
+
for (const err of errors) {
|
|
17
|
+
expect(err).toBeInstanceOf(CliError);
|
|
18
|
+
expect(err).toBeInstanceOf(Error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
it('AuthRequiredError has correct code, domain, and auto-generated hint', () => {
|
|
22
|
+
const err = new AuthRequiredError('bilibili.com');
|
|
23
|
+
expect(err.code).toBe('AUTH_REQUIRED');
|
|
24
|
+
expect(err.domain).toBe('bilibili.com');
|
|
25
|
+
expect(err.message).toBe('Not logged in to bilibili.com');
|
|
26
|
+
expect(err.hint).toContain('https://bilibili.com');
|
|
27
|
+
});
|
|
28
|
+
it('AuthRequiredError accepts custom message', () => {
|
|
29
|
+
const err = new AuthRequiredError('x.com', 'No ct0 cookie found');
|
|
30
|
+
expect(err.message).toBe('No ct0 cookie found');
|
|
31
|
+
expect(err.hint).toContain('https://x.com');
|
|
32
|
+
});
|
|
33
|
+
it('TimeoutError has correct code and hint', () => {
|
|
34
|
+
const err = new TimeoutError('bilibili/hot', 60);
|
|
35
|
+
expect(err.code).toBe('TIMEOUT');
|
|
36
|
+
expect(err.message).toBe('bilibili/hot timed out after 60s');
|
|
37
|
+
expect(err.hint).toContain('timeout');
|
|
38
|
+
});
|
|
39
|
+
it('ArgumentError has correct code', () => {
|
|
40
|
+
const err = new ArgumentError('Argument "limit" must be a valid number');
|
|
41
|
+
expect(err.code).toBe('ARGUMENT');
|
|
42
|
+
});
|
|
43
|
+
it('EmptyResultError has default hint', () => {
|
|
44
|
+
const err = new EmptyResultError('hackernews/top');
|
|
45
|
+
expect(err.code).toBe('EMPTY_RESULT');
|
|
46
|
+
expect(err.message).toBe('hackernews/top returned no data');
|
|
47
|
+
expect(err.hint).toBeTruthy();
|
|
48
|
+
});
|
|
49
|
+
it('selectorError has default hint about page changes', () => {
|
|
50
|
+
const err = selectorError('.submit-btn');
|
|
51
|
+
expect(err.code).toBe('SELECTOR');
|
|
52
|
+
expect(err.message).toContain('.submit-btn');
|
|
53
|
+
expect(err.hint).toContain('report');
|
|
54
|
+
});
|
|
55
|
+
it('BrowserConnectError has correct code', () => {
|
|
56
|
+
const err = new BrowserConnectError('Cannot connect');
|
|
57
|
+
expect(err.code).toBe('BROWSER_CONNECT');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('toEnvelope', () => {
|
|
61
|
+
it('converts CliError to structured envelope', () => {
|
|
62
|
+
const err = new AuthRequiredError('bilibili.com');
|
|
63
|
+
const envelope = toEnvelope(err);
|
|
64
|
+
expect(envelope).toEqual({
|
|
65
|
+
ok: false,
|
|
66
|
+
error: {
|
|
67
|
+
code: 'AUTH_REQUIRED',
|
|
68
|
+
message: 'Not logged in to bilibili.com',
|
|
69
|
+
help: expect.stringContaining('https://bilibili.com'),
|
|
70
|
+
exitCode: 77,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('converts CliError without hint (omits help field)', () => {
|
|
75
|
+
const err = new CommandExecutionError('Something broke');
|
|
76
|
+
const envelope = toEnvelope(err);
|
|
77
|
+
expect(envelope.error.code).toBe('COMMAND_EXEC');
|
|
78
|
+
expect(envelope.error).not.toHaveProperty('help');
|
|
79
|
+
});
|
|
80
|
+
it('converts unknown Error to UNKNOWN envelope', () => {
|
|
81
|
+
const envelope = toEnvelope(new Error('random failure'));
|
|
82
|
+
expect(envelope).toEqual({
|
|
83
|
+
ok: false,
|
|
84
|
+
error: {
|
|
85
|
+
code: 'UNKNOWN',
|
|
86
|
+
message: 'random failure',
|
|
87
|
+
exitCode: 1,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
it('converts non-Error values to UNKNOWN envelope', () => {
|
|
92
|
+
const envelope = toEnvelope('string error');
|
|
93
|
+
expect(envelope.error.code).toBe('UNKNOWN');
|
|
94
|
+
expect(envelope.error.message).toBe('string error');
|
|
95
|
+
});
|
|
96
|
+
it('serializes deep cause chains without stack overflow', () => {
|
|
97
|
+
// Build a 20-level deep cause chain — should truncate at depth 10
|
|
98
|
+
let deepErr = new Error('root');
|
|
99
|
+
for (let i = 0; i < 20; i++) {
|
|
100
|
+
deepErr = new Error(`level-${i}`, { cause: deepErr });
|
|
101
|
+
}
|
|
102
|
+
const topErr = new CommandExecutionError('top');
|
|
103
|
+
topErr.cause = deepErr;
|
|
104
|
+
const envelope = toEnvelope(topErr);
|
|
105
|
+
const causeStr = envelope.error.cause ?? '';
|
|
106
|
+
expect(causeStr).toContain('(cause chain truncated)');
|
|
107
|
+
expect(causeStr).not.toContain('root'); // root is beyond depth 10
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command execution: validates args, manages browser sessions, runs commands.
|
|
3
|
+
*
|
|
4
|
+
* This is the single entry point for executing any CLI command. It handles:
|
|
5
|
+
* 1. Argument validation and coercion
|
|
6
|
+
* 2. Browser session lifecycle (if needed)
|
|
7
|
+
* 3. Domain pre-navigation for cookie strategies
|
|
8
|
+
* 4. Timeout enforcement
|
|
9
|
+
* 5. Lazy-loading of TS modules from manifest
|
|
10
|
+
* 6. Lifecycle hooks (onBeforeExecute / onAfterExecute)
|
|
11
|
+
*/
|
|
12
|
+
import { type CliCommand, type Arg, type CommandArgs } from './registry.js';
|
|
13
|
+
import { type ObservationExportResult } from './observation/index.js';
|
|
14
|
+
export declare function coerceAndValidateArgs(cmdArgs: Arg[], kwargs: CommandArgs): CommandArgs;
|
|
15
|
+
export declare function executeCommand(cmd: CliCommand, rawKwargs: CommandArgs, debug?: boolean, opts?: {
|
|
16
|
+
prepared?: boolean;
|
|
17
|
+
profile?: string;
|
|
18
|
+
trace?: string;
|
|
19
|
+
keepTab?: string;
|
|
20
|
+
windowMode?: string;
|
|
21
|
+
siteSession?: string;
|
|
22
|
+
onTraceExport?: (trace: ObservationExportResult) => void;
|
|
23
|
+
}): Promise<unknown>;
|
|
24
|
+
export declare function prepareCommandArgs(cmd: CliCommand, rawKwargs: CommandArgs): CommandArgs;
|