内容
# Murmur
跨发布者 MCP 工作队列,具有可审计的认领/调度生命周期。参见
[`DESIGN.md`](DESIGN.md) 以获取完整的协议规范和演示计划。
## 快速入门
前提条件:Node ≥ 22(`.nvmrc` 固定在 LTS 版本)和 `pnpm@10.30.0`
(与 `package.json` 中的 `packageManager` 匹配;`corepack enable` 是获取它的最简单方法)。
```bash
# 安装依赖
pnpm install
# 运行开发服务器(通过 tsx 热重载)
PORT=8080 pnpm dev
# 在另一个终端中:
curl -s http://localhost:8080/health
# → {"ok":true}
# 运行测试套件(Vitest + v8 覆盖率)
pnpm test
# 类型检查(严格的 TS,无 any,无UncheckedIndexedAccess)
pnpm typecheck
# lint(ESLint 扁平配置 + ts-prune 用于未使用的导出)
pnpm lint
# 所有 grep 门控(身份验证等式、timingSafeEqual、接受密钥、秘密日志记录)
pnpm grep:all
```
`PORT` 是必填的 — 如果未设置,则启动失败。参见 `DESIGN.md` §6.2 获取完整的环境变量列表(大多数在后续里程碑中到达)。
## 布局
```
src/ Murmur 服务器(Hono + node-server)
server.ts HTTP 应用工厂
index.ts 启动:读取 PORT,绑定套接字
logger.ts 小型结构化日志记录器(JSON 行输出到 stderr)
db/ SQLite 层(打开帮助器,迁移,模式文档)
index.ts `openDb(path)` — 设置 WAL/synchronous/foreign_keys 指令
migrate.ts 前向迁移运行器
cli.ts `pnpm migrate` 入口点
schema.md 规范模式参考
migrations/*.sql 版本化模式文件(前向;参见下面的策略)
packages/contracts-types/ M0 合同类型(信封,头部,管道,...)
scripts/ CI 门控脚本(grep-all,check-unused-exports,...)
docs/ 边界合同 + 引导运行手册
```
## 数据库迁移
Murmur 在 `DATABASE_PATH` 使用 SQLite(WAL 模式)。使用以下命令应用模式:
```bash
# 针对 DATABASE_PATH(默认为 ./murmur.db)
pnpm migrate
# 针对内存数据库(仅烟雾测试 — 无持久性)
pnpm migrate:memory
```
迁移集位于 `src/db/migrations/*.sql`,每个版本一个文件。运行器在 `_migrations` 中记录已应用的版本,并且是 **幂等的**:
连续运行两次 `pnpm migrate`,第二次应用零迁移。
**迁移仅向前进行。** 一旦文件被提交并应用于任何环境,它就是不可变的 — 运行器通过数字前缀识别迁移,因此编辑已应用的文件会静默地使已部署的数据库不同步。要更改模式,请添加一个具有下一个版本号的新文件。
规范模式参考是 [`src/db/schema.md`](src/db/schema.md)。对迁移的任何更改都必须在同一个 PR 中反映在那里。
## 开发流程
该存储库由 Claude Code 代理以三种角色构建。参见
[`AGENTS.md`](AGENTS.md) 以获取每个问题的工作流程和质量门控,每个 PR 在合并前必须通过这些门控。