參與開發
配置 Multica 本地開發環境,執行測試,並按倉庫約定提交改動。
Multica 是 Go backend 與 pnpm monorepo。最簡單的本地啟動方式是 make dev;它會為當前 checkout 準備環境、資料庫和 migration,再啟動 Web 與 API。
環境要求
- Node.js 22;
- pnpm 10.28.2;
- Go 1.26.6;
- Docker Engine 或 Docker Desktop;
- Git 和 Make。
版本以根目錄 package.json、server/go.mod 和 CI workflow 為準。
第一次啟動
git clone https://github.com/multica-ai/multica.git
cd multica
make dev主 checkout 會使用 .env。檔案不存在時,make dev 會從 .env.example 建立;然後啟動共享 PostgreSQL、安裝依賴、執行 migration,並執行 API 與 Web。
預設地址:
Web: http://localhost:3000
API: http://localhost:8080本地固定驗證碼來自開發環境配置。不要把本地 .env 用到公網部署。
在 worktree 中開發
倉庫支援主 checkout 和多個 worktree 同時執行。它們共用一個 PostgreSQL 容器,但使用不同資料庫和連接埠。
git worktree add ../multica-feature -b feat/my-change main
cd ../multica-feature
make setup-worktree
make start-worktreemake setup-worktree 會生成 .env.worktree,資料庫名和連接埠根據路徑確定。再次啟動:
make start-worktree停止當前 worktree 的 Web 與 API:
make stop-worktree也可以直接執行 make dev,腳本會透過 .git 檔案識別 worktree 並選擇 .env.worktree。
不同 worktree 共用 PostgreSQL 容器,不共用資料庫。不要為每個 worktree 啟動新的 Compose project;先檢查 .env.worktree 中的 POSTGRES_DB、PORT 和 FRONTEND_PORT。
常用命令
整體流程
make dev # 準備並啟動當前 checkout
make start # 使用已有環境啟動 API 與 Web
make stop # 停止當前 checkout 的程序
make check # 完整本地驗證流程
make build # 建構 server、CLI 和 migrate 二進位檔前端
pnpm install
pnpm dev:web
pnpm dev:desktop
pnpm build
pnpm typecheck
pnpm lint
pnpm test根命令預設排除 Mobile。移動端有獨立腳本和 CI,修改前先閱讀 apps/mobile/AGENTS.md。
Backend
make server
make daemon
make test
make migrate-up
make migrate-down
make sqlc從源碼執行某條 CLI 命令:
make cli ARGS="issue list"修改前端功能
Web 與 Desktop 都需要的功能按職責放置:
- API 類型、query、mutation 和平臺無關邏輯放在
packages/core/; - 基礎 UI 放在
packages/ui/,不能依賴業務程式碼; - 業務頁面和元件放在
packages/views/; - Next.js、Electron 和路由適配留在對應 app;
- 共享頁面需要同時接入 Web 與 Desktop。
服務端資料由 TanStack Query 管理,篩選、草稿和佈局等客戶端狀態由 Zustand 管理。具體邊界見專案架構和根目錄 AGENTS.md。
新增或修改 API 時,要同步更新 packages/core/api/ 中的 zod schema,併為缺失欄位、未知枚舉或格式錯誤增加解析測試。
修改資料庫
Migration 位於 server/migrations/,查詢位於 server/pkg/db/queries/。
- 使用下一個未佔用的數字前綴,同時建立
.up.sql和.down.sql; - 不新增資料庫 foreign key、級聯刪除或級聯更新;關係檢查和清理由應用層完成;
- 每個新索引都使用
CREATE INDEX CONCURRENTLY或CREATE UNIQUE INDEX CONCURRENTLY; - 一個 concurrent index 單獨放在只包含這一條語句的 migration 檔案中;
- 修改查詢後執行
make sqlc,提交生成的server/pkg/db/generated/變化; - 不直接編輯 sqlc 產生的檔案。
需要讓多項寫操作一起成功或回滾時,在 service 層使用應用事務。
測試位置
| 改動 | 測試位置 |
|---|---|
| 共享業務邏輯、query、store | packages/core/*.test.ts |
| 共享頁面和元件 | packages/views/*.test.tsx |
| Web 或 Desktop 平臺 wiring | 對應 apps/* 目錄 |
| 端到端流程 | e2e/*.spec.ts |
| Backend | 相關 Go package 的 *_test.go |
先執行與改動最接近的檢查,再擴大範圍。例如只改 Docs:
pnpm --filter @multica/docs typecheck共享前端改動:
pnpm typecheck
pnpm testBackend 改動:
make test提交前執行:
make checkmake check 會執行 TypeScript typecheck 與單元測試、Go 測試和 Playwright E2E。CI 還會按改動範圍構建、lint,並執行平臺或安裝器專項測試。
重置當前開發資料庫
需要乾淨資料時,可以重置當前 checkout 在環境檔案中指定的資料庫:
make stop
make db-reset
make startmake db-reset 會刪除並重建當前 POSTGRES_DB,且會拒絕連接遠程資料庫。操作前檢查 .env 或 .env.worktree,確認目標資料庫正確。
提交前檢查
- 閱讀根目錄
AGENTS.md和相關子目錄說明; - 只修改當前 task 需要的範圍;
- 程式碼註釋使用英文;
- 不提交
.env、令牌、構建產物或本機路徑; - 使用
feat(scope)、fix(scope)、docs等 conventional commit; - 在 PR 中寫清行為變化和實際執行的驗證命令。