Environment
- OS: Windows (mainland China network)
- Tabbit Browser China version 1.9.22.0 (verified with a fresh reinstall)
- Install path:
%LOCALAPPDATA%\Tabbit Browser\Application\1.9.22.0\
- CLI:
...\TabbitDance\tabbit-playwright-cli.exe (self-identifies as tabbit-cli) + tabbit-playwright-launcher.exe
Symptom
The official CLI cannot discover the Runtime endpoint; every subcommand fails:
> tabbit-playwright-cli.exe nodejs --task connect-probe
{"error":{"code":"INVALID_ENDPOINT_PATH","message":"Tabbit endpoint metadata path is invalid","name":"TypeError"}}
> tabbit-playwright-launcher.exe nodejs --task connect-probe
(silent exit code 69, no output)
Meanwhile the Runtime itself is completely healthy:
TabbitDance\node.exe runtime\src\browser-runtime-service.mjs is running
- the public pipe
\\.\pipe\tabbit-public-* exists
%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.json is valid (address/token/generation all present)
- Talking to the public pipe directly with the protocol (auth frame
{"version":1,"token":...,"generation":...} + request frame {"op":"ping"}) returns {"ok":true,"value":{"running":true,...}} — the server side is fully functional; the failure is in the CLI client's endpoint discovery.
Hypotheses already ruled out
- Fresh reinstall of 1.9.22.0 → still fails
--endpoint=<path> / --browser=<path> / --user-data-dir=<path> switches → INVALID_ARGUMENTS when provided (these switches do exist in the binary)
- Env vars
TABBIT_ENDPOINT_PATH / TABBIT_ENDPOINT / TABBIT_USER_DATA_DIR → no effect
- A copy of endpoint.json placed at
%LOCALAPPDATA%\Tabbit\LocalAgent\endpoint.json → no effect
- A full junction layout
%LOCALAPPDATA%\Tabbit\Application + %LOCALAPPDATA%\Tabbit\User Data pointing at the real directories → no effect
- Junction
%LOCALAPPDATA%\TabbitBrowser\Application → no effect
- Changing the working directory → no effect
Clues from the binary (for maintainers)
The CLI is a Chromium-based binary. It contains this error-code chain:
BROWSER_NOT_FOUND: "Cannot resolve Tabbit Browser executable"
INVALID_USER_DATA_DIR: "Tabbit user data directory is invalid"
INVALID_ENDPOINT_PATH: "Tabbit endpoint metadata path is invalid"
Also present in the binary: LocalAgent, endpoint.json, --endpoint=, --browser=.
The CLI appears to resolve a chain of "browser executable → user data directory → endpoint.json", but the China version's actual layout (%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.json) does not match its resolution logic; the --endpoint= switch, which should bypass discovery, is rejected by the argument parser.
Additional findings (dsh-plugin side, FYI)
detectCli hardcodes the international path %LOCALAPPDATA%\Tabbit\LocalAgent\bin\tabbit-cli.exe, which does not exist on a China-version install → the environment check misreports restart-required
- The plugin's downloader requests
tabbit.com/api/v0/upgrade/installer without a browser User-Agent → blocked by the WAF with HTTP 403; with a browser User-Agent the same request returns 200 (an 11 MB installer downloads fine)
Expected behavior
- The China-version CLI should discover
%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.json (or derive it from its own executable location)
- The
--endpoint= switch should work (currently rejected)
Environment
%LOCALAPPDATA%\Tabbit Browser\Application\1.9.22.0\...\TabbitDance\tabbit-playwright-cli.exe(self-identifies as tabbit-cli) +tabbit-playwright-launcher.exeSymptom
The official CLI cannot discover the Runtime endpoint; every subcommand fails:
Meanwhile the Runtime itself is completely healthy:
TabbitDance\node.exe runtime\src\browser-runtime-service.mjsis running\\.\pipe\tabbit-public-*exists%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.jsonis valid (address/token/generation all present){"version":1,"token":...,"generation":...}+ request frame{"op":"ping"}) returns{"ok":true,"value":{"running":true,...}}— the server side is fully functional; the failure is in the CLI client's endpoint discovery.Hypotheses already ruled out
--endpoint=<path>/--browser=<path>/--user-data-dir=<path>switches →INVALID_ARGUMENTSwhen provided (these switches do exist in the binary)TABBIT_ENDPOINT_PATH/TABBIT_ENDPOINT/TABBIT_USER_DATA_DIR→ no effect%LOCALAPPDATA%\Tabbit\LocalAgent\endpoint.json→ no effect%LOCALAPPDATA%\Tabbit\Application+%LOCALAPPDATA%\Tabbit\User Datapointing at the real directories → no effect%LOCALAPPDATA%\TabbitBrowser\Application→ no effectClues from the binary (for maintainers)
The CLI is a Chromium-based binary. It contains this error-code chain:
BROWSER_NOT_FOUND: "Cannot resolve Tabbit Browser executable"INVALID_USER_DATA_DIR: "Tabbit user data directory is invalid"INVALID_ENDPOINT_PATH: "Tabbit endpoint metadata path is invalid"Also present in the binary:
LocalAgent,endpoint.json,--endpoint=,--browser=.The CLI appears to resolve a chain of "browser executable → user data directory → endpoint.json", but the China version's actual layout (
%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.json) does not match its resolution logic; the--endpoint=switch, which should bypass discovery, is rejected by the argument parser.Additional findings (dsh-plugin side, FYI)
detectClihardcodes the international path%LOCALAPPDATA%\Tabbit\LocalAgent\bin\tabbit-cli.exe, which does not exist on a China-version install → the environment check misreportsrestart-requiredtabbit.com/api/v0/upgrade/installerwithout a browser User-Agent → blocked by the WAF with HTTP 403; with a browser User-Agent the same request returns 200 (an 11 MB installer downloads fine)Expected behavior
%LOCALAPPDATA%\Tabbit Browser\User Data\LocalAgent\endpoint.json(or derive it from its own executable location)--endpoint=switch should work (currently rejected)