{"owner":"docmirror","repo":"dev-sidecar","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md"],"skills":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Commands\n\n### Dependency Management\n- Always use `pnpm install` (not `npm install`) from the repository root. The project uses pnpm workspaces with `shamefully-hoist=true`.\n- If `pnpm install` reports conflicts, update the relevant `package.json` entries to compatible versions and re-run.\n\n### Linting\n- `pnpm lint` — lint the entire repo (ESLint flat config via `@antfu/eslint-config`)\n- `pnpm lint:fix` — auto-fix lint issues\n\n### Testing\n- `pnpm --filter @docmirror/dev-sidecar test` — run core package tests (Mocha + Chai)\n- `pnpm --filter @docmirror/mitmproxy test` — run proxy package tests\n- Run a single test file:\n  - `pnpm --filter @docmirror/dev-sidecar test -- test/regex.test.js`\n  - `pnpm --filter @docmirror/mitmproxy test -- test/proxyTest.js`\n\n### GUI Development (from `packages/gui/`)\n- `npm run electron` — launch the Electron app in dev mode (starts Vue dev server + Electron)\n- `npm run serve` — run only the Vue dev server (port 8080)\n- `npm run electron:build` — production build (Vue build + electron-builder)\n- `npm run lint` — lint GUI code only\n- For debugging: run `npm run electron` and open DevTools (`F12` or View → Toggle Developer Tools)\n\n### Python Environment (needed for native module builds)\n```shell\nuv init .\nuv sync\n.venv/Scripts/activate   # Windows; use `source .venv/bin/activate` on Linux/macOS\n```\n\n## Committing Changes\n\nWhen work is finished and ready to commit, the AI assistant stages files, but the **human runs the commit command manually** — every contributor signs their own commits with their personal GPG/SSH key, which the assistant cannot access.\n\n1. **Review first**: run `git status`, `git diff`, and `git log --oneline -10` (to match the repo's message style). Stage only intended files; never stage secrets, build artifacts, or unrelated changes.\n2. **Stage properly**: use `git add <files>` for new/modified files and `git rm <files>` for deletions (or `git add -u` to record filesystem deletions). Verify the staged set with `git status` before proceeding.\n3. **Do NOT run `git commit` yourself.** Instead, print the **full `git commit` command** and let the user execute it manually, e.g.:\n   ```\n   git commit -m \"fix(cli): 修复 xxx\"\n   ```\n4. **Commit message style**: follow the repo's convention — a `type(scope): subject` prefix (`fix(scope):`, `feat(scope):`, `chore:`, ...) with a Chinese summary; include a body of bullet points for non-trivial changes. Do not add signing flags (`--no-gpg-sign`, `--no-verify`) or commit/push on the user's behalf unless explicitly requested.\n5. **Push only when explicitly asked**, and only after the user has committed.\n\n## Architecture\n\nThis is a **pnpm workspace monorepo** (`pnpm@9.13.2`) for a developer-sidecar proxy tool that accelerates access to GitHub, npm, Docker Hub, and other foreign sites for Chinese developers. It works by running a local MITM HTTPS proxy, injecting a root CA certificate, and applying DNS optimization, SNI rewriting, and request interception/redirection rules.\n\n### Package dependency graph\n```\ngui ──depends-on──> core ──forks-as-child-process──> mitmproxy\n                      ^                                ^\ncli ──────────────────┴────────────────────────────────┘\n```\n\n### Packages\n\n**`packages/core`** (`@docmirror/dev-sidecar`) — The orchestrator.\n- Entry: `src/index.js` → `src/expose.js`. Exports `startup()`, `shutdown()`, plus `config`, `event`, `shell`, `server`, `proxy`, `plugin`, `status`.\n- Startup sequence: merge config → fork mitmproxy child process → set OS-level system proxy → start plugins (git, node, pip, overwall).\n- Config merges 4 layers: defaults (`src/config/index.js`, ~470 lines) → remote shared → remote personal → user overrides (`~/.dev-sidecar/config.json`).\n- Shell helpers (`src/shell/`) abstract OS commands: setting system proxy, installing CA certs, enabling loopback, killing processes by port.\n- Plugins (`src/modules/plugin/`) follow a uniform `{ key, config, status, plugin: Factory(context) }` pattern.\n\n**`packages/mitmproxy`** (`@docmirror/mitmproxy`) — The proxy engine (runs as a child process).\n- Entry: `src/index.js`. Creates HTTP and HTTPS proxy servers on consecutive ports (default: 31180 HTTP, 31181 HTTPS).\n- Interceptor pipeline (`src/lib/interceptor/`): priority-ordered interceptors match domains+paths and apply actions (redirect, proxy, abort, cache, SNI rewrite, OPTIONS preflight, response replace, script injection).\n- TLS/cert handling (`src/lib/proxy/tls/`): generates a local CA root cert (`~/.dev-sidecar/dev-sidecar.ca.crt`), then creates per-domain fake certs signed by it using `node-forge`. Fake servers are LRU-cached.\n- DNS system (`src/lib/dns/`): multi-provider DNS resolution (UDP, TCP, DoH, DoT, preset IPs). Supports SNI-specific DNS lookup.\n- Speed test (`src/lib/speed/`): measures latency/availability to domains, used for IP selection.\n- `RequestCounter` (`src/lib/choice/`): dynamic backup failover — tracks success/failure per backend, switches after 3 consecutive errors or <40% success rate.\n\n**`packages/gui`** (`@docmirror/dev-sidecar-gui`) — Electron + Vue 3 desktop app.\n- Main process: `src/background.js` — creates BrowserWindow, system tray, IPC bridges, single-instance lock, Windows shutdown hook.\n- Renderer: Vue 3 with Vue Router (hash mode), Ant Design Vue 4, dark theme support.\n- IPC bridge (`src/bridge/`): dynamic RPC — main process exposes a flat API list, renderer calls methods via `ipcRenderer.invoke('apiInvoke', [path, args])`. Core events (status, error, speed) flow main→renderer via `webContents.send`.\n- Pages: dashboard (index), accelerator server, system proxy, settings, help, plus per-plugin pages (free-eye, git, node, overwall, pip).\n\n**`packages/cli`** (`@docmirror/dev-sidecar-cli`) — Headless CLI launcher. Reads user config, calls `DevSidecar.api.startup()`.\n\n**`packages/aur/`** — Arch Linux PKGBUILD (not a JS package). **`packages/cli2/`** — abandoned placeholder, ignore it.\n\n### Key conventions\n- **Module systems**: `core`, `mitmproxy`, and `cli` use implicit CommonJS (`.js` files, no `\"type\": \"module\"`). `gui` uses ESM (`\"type\": \"module\"`). The root `package.json` declares `\"type\": \"module\"` but this only affects root-level scripts.\n- **Shared JSON5 parser**: `@docmirror/mitmproxy/src/json` is used across all packages for JSON5 config parsing.\n- **Logging**: log4js-based; log files at `~/.dev-sidecar/logs/core.log`, `gui.log`, `server.log`. Logger factory at `packages/core/src/utils/util.logger.js`. Every category writes to file and, by default, also to stdout (`std` appender); set `DEV_SIDECAR_LOG_TO_CONSOLE=false` to keep logs file-only (CLI daemon sets this automatically).\n- **Status/event bus**: `core/src/event.js` (EventEmitter) and `core/src/status.js` (central status tree updated via events).\n- **CA certificate**: stored at `~/.dev-sidecar/dev-sidecar.ca.crt` and `~/.dev-sidecar/dev-sidecar.ca.key.pem`. Generated locally on first run.\n- **Config on disk**: user overrides saved as diffs in `~/.dev-sidecar/config.json`. Merged runtime config written as `running.json` for the child process.\n\n### Build environment requirements\n- Node.js 22.x\n- Python 3.11 with setuptools (or use `uv` with the project's `.python-version` and `pyproject.toml`)\n- VS 2022 with C++ desktop development workload (Windows)\n- Native modules need C++17: the `.npmrc` sets `CXXFLAGS=\"-std=c++17\"`\n\n### Vue config gotcha\n`packages/gui/vue.config.cjs` sets `concatenateModules: false` in webpack production builds. This is **intentional** — module concatenation breaks ant-design-vue's Symbol-based `provide/inject`, causing menu crashes, dark mode failures, and Select/Dropdown malfunctions.\n"},"files":{"CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Commands\n\n### Dependency Management\n- Always use `pnpm install` (not `npm install`) from the repository root. The project uses pnpm workspaces with `shamefully-hoist=true`.\n- If `pnpm install` reports conflicts, update the relevant `package.json` entries to compatible versions and re-run.\n\n### Linting\n- `pnpm lint` — lint the entire repo (ESLint flat config via `@antfu/eslint-config`)\n- `pnpm lint:fix` — auto-fix lint issues\n\n### Testing\n- `pnpm --filter @docmirror/dev-sidecar test` — run core package tests (Mocha + Chai)\n- `pnpm --filter @docmirror/mitmproxy test` — run proxy package tests\n- Run a single test file:\n  - `pnpm --filter @docmirror/dev-sidecar test -- test/regex.test.js`\n  - `pnpm --filter @docmirror/mitmproxy test -- test/proxyTest.js`\n\n### GUI Development (from `packages/gui/`)\n- `npm run electron` — launch the Electron app in dev mode (starts Vue dev server + Electron)\n- `npm run serve` — run only the Vue dev server (port 8080)\n- `npm run electron:build` — production build (Vue build + electron-builder)\n- `npm run lint` — lint GUI code only\n- For debugging: run `npm run electron` and open DevTools (`F12` or View → Toggle Developer Tools)\n\n### Python Environment (needed for native module builds)\n```shell\nuv init .\nuv sync\n.venv/Scripts/activate   # Windows; use `source .venv/bin/activate` on Linux/macOS\n```\n\n## Committing Changes\n\nWhen work is finished and ready to commit, the AI assistant stages files, but the **human runs the commit command manually** — every contributor signs their own commits with their personal GPG/SSH key, which the assistant cannot access.\n\n1. **Review first**: run `git status`, `git diff`, and `git log --oneline -10` (to match the repo's message style). Stage only intended files; never stage secrets, build artifacts, or unrelated changes.\n2. **Stage properly**: use `git add <files>` for new/modified files and `git rm <files>` for deletions (or `git add -u` to record filesystem deletions). Verify the staged set with `git status` before proceeding.\n3. **Do NOT run `git commit` yourself.** Instead, print the **full `git commit` command** and let the user execute it manually, e.g.:\n   ```\n   git commit -m \"fix(cli): 修复 xxx\"\n   ```\n4. **Commit message style**: follow the repo's convention — a `type(scope): subject` prefix (`fix(scope):`, `feat(scope):`, `chore:`, ...) with a Chinese summary; include a body of bullet points for non-trivial changes. Do not add signing flags (`--no-gpg-sign`, `--no-verify`) or commit/push on the user's behalf unless explicitly requested.\n5. **Push only when explicitly asked**, and only after the user has committed.\n\n## Architecture\n\nThis is a **pnpm workspace monorepo** (`pnpm@9.13.2`) for a developer-sidecar proxy tool that accelerates access to GitHub, npm, Docker Hub, and other foreign sites for Chinese developers. It works by running a local MITM HTTPS proxy, injecting a root CA certificate, and applying DNS optimization, SNI rewriting, and request interception/redirection rules.\n\n### Package dependency graph\n```\ngui ──depends-on──> core ──forks-as-child-process──> mitmproxy\n                      ^                                ^\ncli ──────────────────┴────────────────────────────────┘\n```\n\n### Packages\n\n**`packages/core`** (`@docmirror/dev-sidecar`) — The orchestrator.\n- Entry: `src/index.js` → `src/expose.js`. Exports `startup()`, `shutdown()`, plus `config`, `event`, `shell`, `server`, `proxy`, `plugin`, `status`.\n- Startup sequence: merge config → fork mitmproxy child process → set OS-level system proxy → start plugins (git, node, pip, overwall).\n- Config merges 4 layers: defaults (`src/config/index.js`, ~470 lines) → remote shared → remote personal → user overrides (`~/.dev-sidecar/config.json`).\n- Shell helpers (`src/shell/`) abstract OS commands: setting system proxy, installing CA certs, enabling loopback, killing processes by port.\n- Plugins (`src/modules/plugin/`) follow a uniform `{ key, config, status, plugin: Factory(context) }` pattern.\n\n**`packages/mitmproxy`** (`@docmirror/mitmproxy`) — The proxy engine (runs as a child process).\n- Entry: `src/index.js`. Creates HTTP and HTTPS proxy servers on consecutive ports (default: 31180 HTTP, 31181 HTTPS).\n- Interceptor pipeline (`src/lib/interceptor/`): priority-ordered interceptors match domains+paths and apply actions (redirect, proxy, abort, cache, SNI rewrite, OPTIONS preflight, response replace, script injection).\n- TLS/cert handling (`src/lib/proxy/tls/`): generates a local CA root cert (`~/.dev-sidecar/dev-sidecar.ca.crt`), then creates per-domain fake certs signed by it using `node-forge`. Fake servers are LRU-cached.\n- DNS system (`src/lib/dns/`): multi-provider DNS resolution (UDP, TCP, DoH, DoT, preset IPs). Supports SNI-specific DNS lookup.\n- Speed test (`src/lib/speed/`): measures latency/availability to domains, used for IP selection.\n- `RequestCounter` (`src/lib/choice/`): dynamic backup failover — tracks success/failure per backend, switches after 3 consecutive errors or <40% success rate.\n\n**`packages/gui`** (`@docmirror/dev-sidecar-gui`) — Electron + Vue 3 desktop app.\n- Main process: `src/background.js` — creates BrowserWindow, system tray, IPC bridges, single-instance lock, Windows shutdown hook.\n- Renderer: Vue 3 with Vue Router (hash mode), Ant Design Vue 4, dark theme support.\n- IPC bridge (`src/bridge/`): dynamic RPC — main process exposes a flat API list, renderer calls methods via `ipcRenderer.invoke('apiInvoke', [path, args])`. Core events (status, error, speed) flow main→renderer via `webContents.send`.\n- Pages: dashboard (index), accelerator server, system proxy, settings, help, plus per-plugin pages (free-eye, git, node, overwall, pip).\n\n**`packages/cli`** (`@docmirror/dev-sidecar-cli`) — Headless CLI launcher. Reads user config, calls `DevSidecar.api.startup()`.\n\n**`packages/aur/`** — Arch Linux PKGBUILD (not a JS package). **`packages/cli2/`** — abandoned placeholder, ignore it.\n\n### Key conventions\n- **Module systems**: `core`, `mitmproxy`, and `cli` use implicit CommonJS (`.js` files, no `\"type\": \"module\"`). `gui` uses ESM (`\"type\": \"module\"`). The root `package.json` declares `\"type\": \"module\"` but this only affects root-level scripts.\n- **Shared JSON5 parser**: `@docmirror/mitmproxy/src/json` is used across all packages for JSON5 config parsing.\n- **Logging**: log4js-based; log files at `~/.dev-sidecar/logs/core.log`, `gui.log`, `server.log`. Logger factory at `packages/core/src/utils/util.logger.js`. Every category writes to file and, by default, also to stdout (`std` appender); set `DEV_SIDECAR_LOG_TO_CONSOLE=false` to keep logs file-only (CLI daemon sets this automatically).\n- **Status/event bus**: `core/src/event.js` (EventEmitter) and `core/src/status.js` (central status tree updated via events).\n- **CA certificate**: stored at `~/.dev-sidecar/dev-sidecar.ca.crt` and `~/.dev-sidecar/dev-sidecar.ca.key.pem`. Generated locally on first run.\n- **Config on disk**: user overrides saved as diffs in `~/.dev-sidecar/config.json`. Merged runtime config written as `running.json` for the child process.\n\n### Build environment requirements\n- Node.js 22.x\n- Python 3.11 with setuptools (or use `uv` with the project's `.python-version` and `pyproject.toml`)\n- VS 2022 with C++ desktop development workload (Windows)\n- Native modules need C++17: the `.npmrc` sets `CXXFLAGS=\"-std=c++17\"`\n\n### Vue config gotcha\n`packages/gui/vue.config.cjs` sets `concatenateModules: false` in webpack production builds. This is **intentional** — module concatenation breaks ant-design-vue's Symbol-based `provide/inject`, causing menu crashes, dark mode failures, and Select/Dropdown malfunctions.\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Commands\n\n### Dependency Management\n- Always use `pnpm install` (not `npm install`) from the repository root. The project uses pnpm workspaces with `shamefully-hoist=true`.\n- If `pnpm install` reports conflicts, update the relevant `package.json` entries to compatible versions and re-run.\n\n### Linting\n- `pnpm lint` — lint the entire repo (ESLint flat config via `@antfu/eslint-config`)\n- `pnpm lint:fix` — auto-fix lint issues\n\n### Testing\n- `pnpm --filter @docmirror/dev-sidecar test` — run core package tests (Mocha + Chai)\n- `pnpm --filter @docmirror/mitmproxy test` — run proxy package tests\n- Run a single test file:\n  - `pnpm --filter @docmirror/dev-sidecar test -- test/regex.test.js`\n  - `pnpm --filter @docmirror/mitmproxy test -- test/proxyTest.js`\n\n### GUI Development (from `packages/gui/`)\n- `npm run electron` — launch the Electron app in dev mode (starts Vue dev server + Electron)\n- `npm run serve` — run only the Vue dev server (port 8080)\n- `npm run electron:build` — production build (Vue build + electron-builder)\n- `npm run lint` — lint GUI code only\n- For debugging: run `npm run electron` and open DevTools (`F12` or View → Toggle Developer Tools)\n\n### Python Environment (needed for native module builds)\n```shell\nuv init .\nuv sync\n.venv/Scripts/activate   # Windows; use `source .venv/bin/activate` on Linux/macOS\n```\n\n## Committing Changes\n\nWhen work is finished and ready to commit, the AI assistant stages files, but the **human runs the commit command manually** — every contributor signs their own commits with their personal GPG/SSH key, which the assistant cannot access.\n\n1. **Review first**: run `git status`, `git diff`, and `git log --oneline -10` (to match the repo's message style). Stage only intended files; never stage secrets, build artifacts, or unrelated changes.\n2. **Stage properly**: use `git add <files>` for new/modified files and `git rm <files>` for deletions (or `git add -u` to record filesystem deletions). Verify the staged set with `git status` before proceeding.\n3. **Do NOT run `git commit` yourself.** Instead, print the **full `git commit` command** and let the user execute it manually, e.g.:\n   ```\n   git commit -m \"fix(cli): 修复 xxx\"\n   ```\n4. **Commit message style**: follow the repo's convention — a `type(scope): subject` prefix (`fix(scope):`, `feat(scope):`, `chore:`, ...) with a Chinese summary; include a body of bullet points for non-trivial changes. Do not add signing flags (`--no-gpg-sign`, `--no-verify`) or commit/push on the user's behalf unless explicitly requested.\n5. **Push only when explicitly asked**, and only after the user has committed.\n\n## Architecture\n\nThis is a **pnpm workspace monorepo** (`pnpm@9.13.2`) for a developer-sidecar proxy tool that accelerates access to GitHub, npm, Docker Hub, and other foreign sites for Chinese developers. It works by running a local MITM HTTPS proxy, injecting a root CA certificate, and applying DNS optimization, SNI rewriting, and request interception/redirection rules.\n\n### Package dependency graph\n```\ngui ──depends-on──> core ──forks-as-child-process──> mitmproxy\n                      ^                                ^\ncli ──────────────────┴────────────────────────────────┘\n```\n\n### Packages\n\n**`packages/core`** (`@docmirror/dev-sidecar`) — The orchestrator.\n- Entry: `src/index.js` → `src/expose.js`. Exports `startup()`, `shutdown()`, plus `config`, `event`, `shell`, `server`, `proxy`, `plugin`, `status`.\n- Startup sequence: merge config → fork mitmproxy child process → set OS-level system proxy → start plugins (git, node, pip, overwall).\n- Config merges 4 layers: defaults (`src/config/index.js`, ~470 lines) → remote shared → remote personal → user overrides (`~/.dev-sidecar/config.json`).\n- Shell helpers (`src/shell/`) abstract OS commands: setting system proxy, installing CA certs, enabling loopback, killing processes by port.\n- Plugins (`src/modules/plugin/`) follow a uniform `{ key, config, status, plugin: Factory(context) }` pattern.\n\n**`packages/mitmproxy`** (`@docmirror/mitmproxy`) — The proxy engine (runs as a child process).\n- Entry: `src/index.js`. Creates HTTP and HTTPS proxy servers on consecutive ports (default: 31180 HTTP, 31181 HTTPS).\n- Interceptor pipeline (`src/lib/interceptor/`): priority-ordered interceptors match domains+paths and apply actions (redirect, proxy, abort, cache, SNI rewrite, OPTIONS preflight, response replace, script injection).\n- TLS/cert handling (`src/lib/proxy/tls/`): generates a local CA root cert (`~/.dev-sidecar/dev-sidecar.ca.crt`), then creates per-domain fake certs signed by it using `node-forge`. Fake servers are LRU-cached.\n- DNS system (`src/lib/dns/`): multi-provider DNS resolution (UDP, TCP, DoH, DoT, preset IPs). Supports SNI-specific DNS lookup.\n- Speed test (`src/lib/speed/`): measures latency/availability to domains, used for IP selection.\n- `RequestCounter` (`src/lib/choice/`): dynamic backup failover — tracks success/failure per backend, switches after 3 consecutive errors or <40% success rate.\n\n**`packages/gui`** (`@docmirror/dev-sidecar-gui`) — Electron + Vue 3 desktop app.\n- Main process: `src/background.js` — creates BrowserWindow, system tray, IPC bridges, single-instance lock, Windows shutdown hook.\n- Renderer: Vue 3 with Vue Router (hash mode), Ant Design Vue 4, dark theme support.\n- IPC bridge (`src/bridge/`): dynamic RPC — main process exposes a flat API list, renderer calls methods via `ipcRenderer.invoke('apiInvoke', [path, args])`. Core events (status, error, speed) flow main→renderer via `webContents.send`.\n- Pages: dashboard (index), accelerator server, system proxy, settings, help, plus per-plugin pages (free-eye, git, node, overwall, pip).\n\n**`packages/cli`** (`@docmirror/dev-sidecar-cli`) — Headless CLI launcher. Reads user config, calls `DevSidecar.api.startup()`.\n\n**`packages/aur/`** — Arch Linux PKGBUILD (not a JS package). **`packages/cli2/`** — abandoned placeholder, ignore it.\n\n### Key conventions\n- **Module systems**: `core`, `mitmproxy`, and `cli` use implicit CommonJS (`.js` files, no `\"type\": \"module\"`). `gui` uses ESM (`\"type\": \"module\"`). The root `package.json` declares `\"type\": \"module\"` but this only affects root-level scripts.\n- **Shared JSON5 parser**: `@docmirror/mitmproxy/src/json` is used across all packages for JSON5 config parsing.\n- **Logging**: log4js-based; log files at `~/.dev-sidecar/logs/core.log`, `gui.log`, `server.log`. Logger factory at `packages/core/src/utils/util.logger.js`. Every category writes to file and, by default, also to stdout (`std` appender); set `DEV_SIDECAR_LOG_TO_CONSOLE=false` to keep logs file-only (CLI daemon sets this automatically).\n- **Status/event bus**: `core/src/event.js` (EventEmitter) and `core/src/status.js` (central status tree updated via events).\n- **CA certificate**: stored at `~/.dev-sidecar/dev-sidecar.ca.crt` and `~/.dev-sidecar/dev-sidecar.ca.key.pem`. Generated locally on first run.\n- **Config on disk**: user overrides saved as diffs in `~/.dev-sidecar/config.json`. Merged runtime config written as `running.json` for the child process.\n\n### Build environment requirements\n- Node.js 22.x\n- Python 3.11 with setuptools (or use `uv` with the project's `.python-version` and `pyproject.toml`)\n- VS 2022 with C++ desktop development workload (Windows)\n- Native modules need C++17: the `.npmrc` sets `CXXFLAGS=\"-std=c++17\"`\n\n### Vue config gotcha\n`packages/gui/vue.config.cjs` sets `concatenateModules: false` in webpack production builds. This is **intentional** — module concatenation breaks ant-design-vue's Symbol-based `provide/inject`, causing menu crashes, dark mode failures, and Select/Dropdown malfunctions.\n","category":"root","tokens":1948}]}