mirror of
https://github.com/router-for-me/CLIProxyAPIPlus.git
synced 2026-04-12 09:14:15 +00:00
4.2 KiB
4.2 KiB
AGENTS.md
Go 1.26+ proxy server providing OpenAI/Gemini/Claude/Codex compatible APIs with OAuth and round-robin load balancing.
Repository
Commands
gofmt -w . # Format (required after Go changes)
go build -o cli-proxy-api ./cmd/server # Build
go run ./cmd/server # Run dev server
go test ./... # Run all tests
go test -v -run TestName ./path/to/pkg # Run single test
go build -o test-output ./cmd/server && rm test-output # Verify compile (REQUIRED after changes)
- Common flags:
--config <path>,--tui,--standalone,--local-model,--no-browser,--oauth-callback-port <port>
Config
- Default config:
config.yaml(template:config.example.yaml) .envis auto-loaded from the working directory- Auth material defaults under
auths/ - Storage backends: file-based default; optional Postgres/git/object store (
PGSTORE_*,GITSTORE_*,OBJECTSTORE_*)
Architecture
cmd/server/— Server entrypointinternal/api/— Gin HTTP API (routes, middleware, modules)internal/api/modules/amp/— Amp integration (Amp-style routes + reverse proxy)internal/thinking/— Thinking/reasoning token processing (internal/thinking/provider/for per-provider config)internal/runtime/executor/— Per-provider runtime executors (incl. Codex WebSocket)internal/translator/— Provider protocol translators (and sharedcommon)internal/registry/— Model registry + remote updater (StartModelsUpdater);--local-modeldisables remote updatesinternal/store/— Storage implementations and secret resolutioninternal/managementasset/— Config snapshots and management assetsinternal/cache/— Request signature cachinginternal/watcher/— Config hot-reload and watchersinternal/wsrelay/— WebSocket relay sessionsinternal/usage/— Usage and token accountinginternal/tui/— Bubbletea terminal UI (--tui,--standalone)sdk/cliproxy/— Embeddable SDK entry (service/builder/watchers/pipeline)test/— Cross-module integration tests
Code Conventions
- Keep changes small and simple (KISS)
- Comments in English only
- If editing code that already contains non-English comments, translate them to English (don’t add new non-English comments)
- For user-visible strings, keep the existing language used in that file/area
- New Markdown docs should be in English unless the file is explicitly language-specific (e.g.
README_CN.md) - As a rule, do not make standalone changes to
internal/translator/. You may modify it only as part of broader changes elsewhere. - If a task requires changing only
internal/translator/, rungh repo view --json viewerPermission -q .viewerPermissionto confirm you haveWRITE,MAINTAIN, orADMIN. If you do, you may proceed; otherwise, file a GitHub issue including the goal, rationale, and the intended implementation code, then stop further work. internal/runtime/executor/should contain executors and their unit tests only. Place any helper/supporting files underinternal/runtime/executor/helps/.- Follow
gofmt; keep imports goimports-style; wrap errors with context where helpful - Do not use
log.Fatal/log.Fatalf(terminates the process); prefer returning errors and logging via logrus - Shadowed variables: use method suffix (
errStart := server.Start()) - Wrap defer errors:
defer func() { if err := f.Close(); err != nil { log.Errorf(...) } }() - Use logrus structured logging; avoid leaking secrets/tokens in logs
- Avoid panics in HTTP handlers; prefer logged errors and meaningful HTTP status codes
- Timeouts are allowed only during credential acquisition; after an upstream connection is established, do not set timeouts for any subsequent network behavior. Intentional exceptions that must remain allowed are the Codex websocket liveness deadlines in
internal/runtime/executor/codex_websockets_executor.go, the wsrelay session deadlines ininternal/wsrelay/session.go, the management APICall timeout ininternal/api/handlers/management/api_tools.go, and thecmd/fetch_antigravity_modelsutility timeouts