The author welcomes and encourages PRs from the community. The author also doesn't mind if you distill features from this project into your own applications.
- When submitting a PR, please tell me what your Prompt was and which model you used to modify the code (PRs made with inferior models will not be accepted);
- If there are UI changes, tell me what functionality was modified on the interface — a screenshot with circles drawn around the changes is recommended;
- Changes to
cli.js,findcc.js, andserver/interceptor.jswill be reviewed very carefully, as I don't want issues in core files to affect everyone's usage; - Please make sure to verify the functionality locally before submitting — much appreciated!
⚠️ server/_paths.jsis physically position-sensitive: every constant is anchored on the file's own URL (HERE = dirname(import.meta.url)). Moving this file withgit mvproduces no static error but shiftsPACKAGE_ROOT/NODE_MODULES/DIST_DIRetc. Any change to its location must be followed by manual verification of every import site's resolved path.
The suite has two tiers:
npm run test— the fast default tier: in-process unit tests only. Use this in your development loop.npm run test:cli— the full suite: additionally runs the CLI/server integration suites gated behindCCV_TEST_CLI=1(spawnedcli.jsboots, real-port server lifecycle). CI runs this tier. Run it before submitting a PR.
Test sandboxing env switches (see the L1/L7 isolation barriers in findcc.js): tests can never resolve or run a real claude binary (CCV_TEST_ALLOW_REAL_CLAUDE=1 is the explicit per-assertion escape hatch), and browser auto-open is suppressed under tests and whenever CCV_NO_OPEN=1 is set. New integration tests that spawn cli.js or bind real ports should import describeCli from test/_helpers/cli-tier.mjs for their top-level suites.