Thanks for helping with DearByte. It drives a real WeChat account on a real Mac, so a few rules matter more than usual.
- Run the checks:
npm testandnpm run typecheck. CI runs the same on every PR. - Try it without WeChat first:
npm run companion -- --fakechats in the terminal with no model calls.npm run dearbyte -- --draftreads WeChat but never sends. - Keep personal data out. No real names, chat logs, screenshots of real chats, WeChat IDs, API keys, or anything from
data/or.env. Use the placeholders 张三 and Alex. - Keep PRs small, one change each. Say in the PR what you changed and how you tested it.
Persona packs are the easiest way to contribute: one folder in personas/, no code. docs/personas.md has the format, and npm run personas -- check <id> runs the same checks as CI. A maintainer reads every pack before merging.
native/(the Swift helper that reads and types into WeChat) andsrc/channels/package.json,package-lock.jsonand new dependencies.github/(CI)prompts/agent/rules.en.md, the rules every persona gets, and the persona checks insrc/agent/persona.ts.prompts/safety.zh-CN.mdand the crisis check. These decide how 小拜 answers someone in trouble; please open an issue before changing them.
master is protected: a PR needs CI to pass and a review from the maintainer. Merges are squashed.
The maintainer reads the diff before running a PR's code, and runs it with --fake or --draft first. Please don't take it personally; the runner has Accessibility control of the Mac and holds an API key.