Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1152 commits
Select commit Hold shift + click to select a range
ea670ef
feat(models): add Codex Auto Review model entry to registry JSON
luispater Apr 25, 2026
0a7c6b0
feat(api): enhance model assignment logic in image handlers
luispater Apr 25, 2026
e707cf7
fix(claude): only reverse-remap OAuth tool names that were forward-re…
edlsh Apr 18, 2026
03ea4e5
perf(claude): pre-allocate reverseMap capacity
edlsh Apr 18, 2026
fc1ddf3
fix(claude): centralize oauth tool-name transform flow
edlsh Apr 19, 2026
95318ad
fix(amp): preserve lowercase glob tool name
edlsh Apr 13, 2026
fd45dec
fix(openai): repair empty responses stream output
edlsh Apr 24, 2026
d36e70e
fix(openai): preserve unindexed response output items
edlsh Apr 25, 2026
80eb037
fix(openai): preserve multiline repaired SSE data
edlsh Apr 25, 2026
32ef158
fix(test): remove free tier from GPT-5.5 inclusion test
philipbankier Apr 26, 2026
3857305
feat(config): add support for disabling OpenAI compatibility providers
luispater Apr 26, 2026
c7b28ba
feat(executor): add support for Codex image generation tool usage tra…
luispater Apr 26, 2026
c5bea6f
Merge pull request #3020 from Matthias319/fix/codex-error-classification
luispater Apr 26, 2026
736ae61
Merge pull request #3051 from philipbankier/fix/gpt55-free-tier-test
luispater Apr 26, 2026
6fc2356
logging: mark antigravity credits requests
sususu98 Apr 26, 2026
a325533
Merge pull request #2972 from XYenon/feat/amp-thread-id
luispater Apr 26, 2026
04a336f
fix(usage_helpers): skip zero-token usage in additional model records
luispater Apr 27, 2026
01e16a8
feat(codex): handle thinking-signature conversion for reasoning content
luispater Apr 27, 2026
d85e13b
fix(codex): include `content` field in reasoning item initialization
luispater Apr 27, 2026
c523101
Preserve Codex reasoning signatures for Claude
sususu98 Apr 27, 2026
34027da
Merge pull request #3088 from sususu98/codex-claude-reasoning-signature
luispater Apr 27, 2026
3ac39dc
feat: support Codex/PI session headers for session affinity
XYenon Apr 27, 2026
a992dee
fix(antigravity): use real antigravity UA when polling credits balance
Xbang0222 Apr 28, 2026
9fb6a49
test(api): add validation for unsupported models in OpenAI image hand…
luispater Apr 28, 2026
b34f3be
Merge pull request #3114 from Xbang0222/fix/antigravity-credits-ua
sususu98 Apr 28, 2026
e78d45a
fix antigravity user agent handling
sususu98 Apr 24, 2026
0e12351
fix antigravity client agent headers
sususu98 Apr 24, 2026
c4965be
Merge pull request #3117 from sususu98/fix/restore-antigravity-ua-han…
sususu98 Apr 28, 2026
f95ab4c
Merge pull request #3089 from XYenon/feat/session-affinity
luispater Apr 28, 2026
2ea8f77
feat(models): add GPT-5.5 to the registry with support for advanced t…
luispater Apr 29, 2026
4982512
fix: parse gemini cli usage metadata variants
sususu98 Apr 29, 2026
1c0c426
fix: align claude codex translation
sususu98 Apr 29, 2026
0d107dd
fix: respect declared claude web search tool names
sususu98 Apr 29, 2026
2c1539e
Merge pull request #3133 from sususu98/optimize/claude-codex-translator
luispater Apr 29, 2026
b3b92f3
Merge pull request #3125 from sususu98/fix/gemini-cli-usage-metadata-…
luispater Apr 29, 2026
a1f0ed9
Merge pull request #3071 from sususu98/fix/antigravity-credits-log
luispater Apr 29, 2026
359ec30
chore(docs): remove LingtrueAPI sponsorship section from README files
luispater Apr 29, 2026
e3e60f9
feat: support disabling image generation globally
luispater Apr 29, 2026
4601841
feat: remove `tool_choice` for `image_generation` when disabled
luispater Apr 30, 2026
f56a19e
feat: add tri-state support for `disable-image-generation` configuration
luispater Apr 30, 2026
6ba7c81
feat: apply image_generation filtering before payload rules
luispater Apr 30, 2026
243c582
feat: add unit tests for OpenAI responses request conversion
Apr 30, 2026
05ecfb6
feat: add local Docker build script and update compose configuration
Apr 30, 2026
aa70d13
docs: add CodexCliPlus to README ecosystem list
C4AL Apr 30, 2026
8b286e8
Merge pull request #3163 from C4AL/docs/add-codexclipplus-ecosystem
luispater Apr 30, 2026
4035abc
refactor(logging): replace gin-specific context handling with generic…
luispater Apr 30, 2026
6187919
feat: add support for recent request tracking in auth records
luispater May 1, 2026
b0dc9df
feat: add API key usage endpoint with provider and key grouping
luispater May 1, 2026
e37f3be
chore: update .goreleaser.yml to include custom archive naming with a…
luispater May 1, 2026
8c2f1a8
feat: enhance API key usage grouping with base URL inclusion
luispater May 1, 2026
b8bba05
feat: add tracking for auth request success and failure counts
luispater May 1, 2026
18bb9c3
chore: remove usage tracking and logging functionality
luispater May 1, 2026
79579c3
docs: update README to consolidate and clarify CPA Usage Keeper details
luispater May 2, 2026
2efa56d
docs: add Playful Proxy API Panel
daishuge May 2, 2026
85124f0
Merge pull request #3194 from daishuge/codex/add-daishuge-cpa-port-20…
luispater May 2, 2026
56df368
feat: add configurable retention period for Redis usage queue
luispater May 2, 2026
101b59c
docs: update Subtitle Translator project description
VjayC May 3, 2026
593995a
Merge pull request #3197 from VjayC/dev
luispater May 3, 2026
5fc6f66
docs: add CLIProxy Pool Watch project
May 3, 2026
81db7fd
Add CLIProxyAPI Usage Dashboard to statistics docs
May 3, 2026
7972130
Update README_CN.md
zhanglunet May 3, 2026
d2386a3
Update README_JA.md
zhanglunet May 3, 2026
054d0de
Merge pull request #3201 from murasame612/docs/add-cliproxy-pool-watch
luispater May 3, 2026
756b600
Merge pull request #3204 from zhanglunet/add-usage-dashboard-link
luispater May 3, 2026
af65908
feat: enhance tool mapping with namespace and web search support
luispater May 3, 2026
672fdd1
feat: filter and drop empty assistant messages in Kimi executor
luispater May 3, 2026
bf0e5c2
fix: prevent goroutine leaks in streaming executors via context-aware…
1137043480 May 3, 2026
2753d9f
feat: add validation for Claude streaming responses
luispater May 3, 2026
82ebe24
Merge pull request #2266 from DragonFSKY/fix/ws-compact-tool-output-m…
luispater May 3, 2026
a1487b0
fix(translator): handle non-string types in tools result processing
luispater May 3, 2026
8e6ef3f
fix(websocket): ensure state consistency on auth errors in streaming
luispater May 3, 2026
38dad2a
chore(docker): upgrade base image to alpine 3.23
luispater May 3, 2026
17be644
fix(translator): improve tool response handling for non-string content
luispater May 3, 2026
c19ae1d
Align Codex websocket protocol semantics
kdcokenny May 3, 2026
08b0fe6
Fix Codex websocket retry metadata
kdcokenny May 4, 2026
6b4bc0a
Align Codex default identity and docs
kdcokenny May 4, 2026
a1eba11
Merge pull request #2416 from kslamph/fix/gemini-cli-projectid
luispater May 4, 2026
89d80bf
fix(executor): adjust ApplyThinking order and add payload override test
luispater May 4, 2026
85c0150
feat(translator): add token usage tracking and improve usage handling
luispater May 4, 2026
bf6fa40
fix(executor): strip Vertex OpenAI response tool call IDs for consist…
luispater May 4, 2026
c1caa45
fix(translator): handle empty tool function names in OpenAI Claude re…
luispater May 4, 2026
162897e
Merge remote-tracking branch 'origin/pr/3205' into dev
luispater May 4, 2026
ecf1c25
fix: preserve Antigravity cancellation errors
luispater May 4, 2026
8262a03
Merge PR #2568: fix Claude refresh backoff
luispater May 4, 2026
e4a93c0
fix(executor): enhance parsing of OpenAI stream data lines
luispater May 4, 2026
bdc4240
Merge pull request #2896 from edlsh/fix/oauth-tool-rename-per-request…
luispater May 4, 2026
28b4b19
Merge pull request #3208 from kdcokenny/codex-websocket-protocol-parity
luispater May 4, 2026
ba5d8ca
feat(usage): add support for requested model alias handling
luispater May 4, 2026
61b39d4
feat(management): add usage record retrieval endpoint
luispater May 4, 2026
da6c599
refactor(management): rename `GetUsage` to `GetUsageQueue` and update…
luispater May 4, 2026
99dfbae
fix(executor): ignore null OpenAI stream usage chunks
mochenya May 5, 2026
ed1458a
chore(docs): update sponsor details in README
luispater May 5, 2026
17a1f53
fix:openai 2 kimi error Continuous function_call
May 6, 2026
ad3f4f2
📝 docs(readme): add CPA-Manager usage statistics recommendation
seakee May 6, 2026
a09a16e
Merge branch 'router-for-me:main' into my-fix
AhDEV-free May 6, 2026
fb08b92
feat(executor): add upstream disconnect handling for Codex WebSocket …
luispater May 6, 2026
0117174
fix(amp): proxy thread actors route
edlsh May 6, 2026
a034cf8
Merge pull request #3247 from edlsh/fix/amp-thread-actors-route
luispater May 7, 2026
785b00c
Merge pull request #3237 from seakee/docs/add-cpa-manager-usage-stati…
luispater May 7, 2026
33130f1
fix: require antigravity project id
sususu98 May 7, 2026
809feb1
fix(antigravity): mask project_id in logs
sususu98 May 7, 2026
e50caba
chore: upgrade CLIProxyAPI dependency to v7 across the project
luispater May 8, 2026
c883114
fix responses websocket tool output context
codex May 8, 2026
4071fde
fix: apply default auth-dir when config value is empty
lihan3238 May 8, 2026
4cbe172
refactor: extract DefaultAuthDir constant per review feedback
lihan3238 May 8, 2026
1721994
feat(management): expose additional OAuth and configuration helpers
luispater May 8, 2026
c67096b
feat(server): add support for loading configuration from a remote hom…
luispater May 8, 2026
0f0fcd2
feat(config): add per-auth `disable_cooling` override support
luispater May 9, 2026
0dcb8bd
refactor(cliproxy): remove `ClaudeCodeSessionAffinity` support and si…
luispater May 9, 2026
09ac8a1
Merge pull request #3221 from mochenya/main
luispater May 9, 2026
68fddaa
Merge pull request #3292 from lihan3238/fix-3272
luispater May 9, 2026
c69ff49
feat(auth): add support for persisting `disabled` flag in token storage
luispater May 9, 2026
41f4ee7
feat(auth): enhance auth index generation with improved file path han…
luispater May 9, 2026
3cbd587
Merge pull request #3283 from wuchulonly/fix/responses-ws-tool-output…
luispater May 9, 2026
1abf862
feat(logging): add home request-log forwarding support
luispater May 9, 2026
66c3dae
feat(home): implement `count` for home auth dispatch requests and ena…
luispater May 9, 2026
67fb4eb
feat(auth): add `shouldReturnLastErrorOnPickFailure` helper and impro…
luispater May 9, 2026
a44e5eb
Merge branch 'v7' into dev
luispater May 9, 2026
28dfcae
fix(api): prevent idle TCP connections from blocking the accept loop
lihan3238 May 9, 2026
dc1cc7f
feat(auth): add websocket session reuse for home auths with caching s…
luispater May 10, 2026
8300ee8
feat(auth): enhance home auth session reuse with scoped caching and r…
luispater May 10, 2026
15ac7fb
refactor(auth): simplify home auth session management and remove ref …
luispater May 10, 2026
5e5b1bc
feat(config): add detailed logging for home config changes
luispater May 10, 2026
c5596e0
fix(api): clear sniff deadline before entering Redis handler
lihan3238 May 10, 2026
1fca942
Merge remote-tracking branch 'origin/pr/3239'
luispater May 10, 2026
041ccf0
Merge pull request #3303 from lihan3238/fix-3267
luispater May 11, 2026
bd8c05a
feat(usage): add support for detailed token breakdown in usage tracking
luispater May 12, 2026
6bfcb0c
feat(auth): improve unauthorized error handling for refresh and auto-…
luispater May 12, 2026
bfdc0b3
fix: scope antigravity credits fallback gate
sususu98 May 13, 2026
bcbb949
feat(client): add cluster node failover and improve reconnection hand…
luispater May 13, 2026
437aa87
feat(api): add dynamic handler for Gemini models with home integration
luispater May 13, 2026
3a9fb37
fix(home): implement home dispatch headers and enhance Gemini model h…
luispater May 13, 2026
229d03a
feat(auth): add support for disabling auth via metadata
luispater May 14, 2026
1d529c3
feat(redis): implement Pub/Sub support for usage tracking
luispater May 15, 2026
9d01c80
feat(redis): implement Pub/Sub support for usage tracking
luispater May 15, 2026
30a8824
fix(gitstore): adjust garbage collection to run after push operation
luispater May 15, 2026
e7a1859
feat(api): add request body decoding with Content-Encoding support
luispater May 16, 2026
82c9e0d
feat(api, watcher): add zstd decoding for request logs and payload di…
luispater May 16, 2026
7a1a340
fix(home): use net.JoinHostPort for consistent host:port formatting
luispater May 16, 2026
48104ab
feat(home): implement home control plane integration with Redis and T…
hkfires May 16, 2026
644d5ea
feat(home): add support for disabling cluster discovery in Redis conf…
hkfires May 16, 2026
f4c6c41
Merge pull request #3430 from router-for-me/home
luispater May 16, 2026
c66fa37
feat(home): add cluster nodes payload parsing and Redis channel handling
luispater May 16, 2026
cd0cea3
refactor(server): consolidate `home_flag` logic into `main.go` for be…
luispater May 16, 2026
e4c9570
feat(auth): add OAuth2 support for xAI with PKCE and token persistence
luispater May 16, 2026
2ff9e33
feat(api, xai): integrate xAI Grok image models and extend API endpoi…
luispater May 16, 2026
53d1fd6
feat(api, xai): add xAI Grok video model support with API integration
luispater May 16, 2026
d606faa
fix: strip Claude Code attribution from non-Anthropic translations
madwiki May 16, 2026
088ab33
feat(api): add Codex client models support for OpenAI API
luispater May 16, 2026
ddd1053
feat(xai): normalize xAI input reasoning items and enhance test cases
luispater May 16, 2026
96754f5
refactor(api): move Codex client model handling to `registry` package
luispater May 16, 2026
8b3670b
feat(xai): support namespace tools and enhance tool normalization logic
luispater May 16, 2026
2607888
fix(xai): default missing function tool parameters
ben-vargas May 16, 2026
74cb53d
feat(xai): support namespace tools and enhance tool normalization logic
luispater May 17, 2026
4b13f9c
Merge pull request #3439 from ben-vargas/fix-grok-tool-params
luispater May 17, 2026
be841b8
log(registry): replace panic with warning on embedded model parse fai…
luispater May 17, 2026
26d13af
feat(runtime): enhance payload rule resolution with dynamic path support
luispater May 17, 2026
2007a89
feat(runtime): enhance payload rule resolution with dynamic path support
luispater May 17, 2026
9ef99aa
refactor(runtime): rename `FormProtocol` to `FromProtocol` across pay…
luispater May 17, 2026
605adaa
feat(api): add support for local management password validation and s…
luispater May 17, 2026
ed0ac68
feat(server): add HOME_ADDR and HOME_PASSWORD env var fallback for ho…
May 17, 2026
5f03965
refactor: move home env vars after godotenv and use lookupEnv helper
May 18, 2026
66c5d60
refactor(api): remove `newTestServerWithOptions` and spoofed IP rejec…
luispater May 18, 2026
64d233f
Merge pull request #3448 from LongDinhh/feat/home-env-vars
luispater May 18, 2026
1c2153a
fix(openai-claude): stabilize streaming tool_use blocks
May 18, 2026
4ad6ffe
Merge pull request #3438 from madwiki/fix/strip-claude-code-attribution
luispater May 18, 2026
2460205
Merge pull request #2926 from slicenferqin/fix-tool-use-name-loss-and…
luispater May 18, 2026
ec79951
fix(proxy): support HTTP CONNECT dialer
sususu98 May 18, 2026
8bc2eff
fix: shorten claude codex tool call ids
sususu98 May 18, 2026
2710f56
Merge pull request #3450 from sususu98/fix/http-connect-proxy-dialer
luispater May 18, 2026
cc0cb05
Merge pull request #3468 from sususu98/fix/claude-codex-call-id-length
luispater May 18, 2026
1583cb4
Cap Gemini max output tokens
sususu98 May 18, 2026
32a0d69
Fix Antigravity Gemini thought signatures
sususu98 May 18, 2026
77ba15f
feat(server): add mTLS certificate bootstrap via JWT for Home connect…
luispater May 18, 2026
ad98c95
feat(runtime): track upstream response headers in logging and usage r…
luispater May 18, 2026
bac006e
feat(thinking): add xAI provider support with reasoning.effort implem…
luispater May 18, 2026
6448235
Merge pull request #3469 from sususu98/fix/gemini-max-output-token-cap
sususu98 May 19, 2026
b67eb6f
Merge pull request #3470 from sususu98/fix/antigravity-gemini-thought…
sususu98 May 19, 2026
feebe6c
feat(api): add OpenAI compatibility for image models
luispater May 19, 2026
bbe30f5
feat(server): enhance Home certificate handling with CA fingerprint v…
luispater May 19, 2026
ad86830
fix codex context length stream errors
sususu98 May 19, 2026
67f2251
style(docs): improve sponsor section clarity in README files
luispater May 19, 2026
7efc162
feat(docker): add cluster-specific docker-compose configuration for C…
hkfires May 19, 2026
bb5ac40
feat(client): add timeout handling for Redis operations and subscript…
luispater May 19, 2026
7f68fa2
Add Codex Switch tool to README
9ycrooked May 19, 2026
5ef7693
Update README.md
9ycrooked May 19, 2026
0de0ad0
Add reasoning effort to usage events
yavon007 May 19, 2026
b9589e8
Merge pull request #3482 from 9ycrooked/patch-1
luispater May 19, 2026
99fa530
test: remove unused Redis protocol tests and helpers
luispater May 19, 2026
0759b72
fix: always write error logs and include cached tokens in Claude usage
May 10, 2026
8469493
ci: restore custom workflows for fork
May 10, 2026
fb64890
fix: show all request logs when request-log is enabled
May 10, 2026
922717e
fix(usage): include cache_creation tokens in Claude usage calculation
May 14, 2026
6a313bd
docs: add project documentation files and ignore local tooling
May 14, 2026
ea25949
feat(models): add Gemini 3.5 Flash models to registry
luispater May 19, 2026
de03949
feat(models): expand supported reasoning levels for Codex
luispater May 19, 2026
fdffe49
feat(models): register Gemini 3.5 Flash with dynamic thinking levels
luispater May 20, 2026
0ec07e5
feat(models): add Gemini 3.5 Flash to registry with enhanced thinking…
luispater May 20, 2026
1c632d1
fix(translator): skip empty text parts in Claude request conversion
luispater May 20, 2026
f1ee883
Merge pull request #3484 from yavon007/main
luispater May 20, 2026
a726e37
feat(redis): enhance Redis protocol handling with subscription and qu…
luispater May 20, 2026
42e9605
Merge pull request #3254 from sususu98/fix/antigravity-project-id-onb…
luispater May 20, 2026
8b9ecff
Merge pull request #3382 from sususu98/dev
luispater May 20, 2026
48a1c88
Merge pull request #3476 from sususu98/fix/codex-context-length-strea…
luispater May 20, 2026
21fad9d
Merge pull request #3477 from router-for-me/cluster
luispater May 20, 2026
3c62a9a
fix(auth): update import paths to v7 for registry and executor
hkfires May 21, 2026
cecd393
Merge pull request #3498 from router-for-me/test
luispater May 21, 2026
33f4904
fix(translator): handle system role as developer in Claude request co…
luispater May 22, 2026
aaec919
feat(models): add Grok Build 0.1 to registry
luispater May 23, 2026
50d19e2
docs(readme): add APIKEY.FUN sponsorship details to README files
luispater May 23, 2026
efa200e
feat(cli): add `fetch_codex_models` command for dynamic Codex model f…
luispater May 25, 2026
412d344
feat(logging): add `RequestID` support in home request logging
luispater May 25, 2026
a0bb1f3
feat(logging): add file-backed sources for request logging
luispater May 25, 2026
167edfe
feat(auth): add support for websockets in auth file parsing and patching
luispater May 25, 2026
70a8cf0
fix: clean gemini cli request schemas
sususu98 May 26, 2026
4a85b6b
fix: log gemini cli schema cleanup errors
sususu98 May 26, 2026
b5959c3
Merge pull request #3554 from sususu98/fix/gemini-cli-request-schema-…
sususu98 May 26, 2026
e399edd
feat(images): add support for configurable GPT Image 2 base model and…
luispater May 26, 2026
de280d9
feat(websockets): refine incremental repair logic for tool call respo…
luispater May 26, 2026
2cbb8c7
fix(translator): correct JSON path for item summary in response event
luispater May 26, 2026
4b68103
feat(translator): add reasoning signature handling and tests for Clau…
luispater May 26, 2026
72c3e71
merge: sync with upstream/main (33 commits)
May 27, 2026
11f0f90
feat(logging): add `SetTranslatedReasoningEffort` to track reasoning …
luispater May 27, 2026
94c1b25
feat(executor): add TTFT tracking and reporting for enhanced performa…
luispater May 27, 2026
d9c01a6
chore(models): remove deprecated GPT-5.x models from `codex-free` cat…
luispater May 28, 2026
2bcc762
feat(logging): improve file-backed source cleanup and directory recre…
luispater May 28, 2026
b3d6d5d
refactor: extract signature validation
sususu98 May 27, 2026
01a7cc4
fix(amp): restore response tool casing from request
Progress-infinitely May 28, 2026
65e760a
feat(usage): include cache tokens in total token calculation and add …
luispater May 28, 2026
71c185f
feat(usage): add service tier tracking and defaults in usage reporting
luispater May 28, 2026
c65275f
Merge pull request #3591 from sususu98/feat/signature-check-extraction
luispater May 28, 2026
df0176a
feat(models): add Claude Opus 4.8 model to registry
luispater May 28, 2026
f28258d
Merge pull request #3595 from Progress-infinitely/fix/anthropic-tool-…
luispater May 28, 2026
dd5f263
merge: sync with upstream/main (9 commits)
May 28, 2026
c4ee063
feat(logging): add HomeAppLogForwarder for application log forwarding
hkfires May 29, 2026
4ade13a
Merge pull request #3605 from router-for-me/log
luispater May 29, 2026
d2c5f27
feat(logging): add request_id handling in HomeAppLogForwarder and tests
hkfires May 29, 2026
7d9980e
fix(logging): log errors during file-backed source cleanup
luispater May 29, 2026
86cb9c1
feat(signature): upgrade provider signature checks
sususu98 May 29, 2026
aee7a5f
feat: intercept incompatible signature replay
sususu98 May 29, 2026
e9dafc7
fix(openai): dedupe response websocket input item IDs
iBenzene May 28, 2026
034d2b6
Merge pull request #3615 from sususu98/codex/signature-intercept-on-pr
luispater May 29, 2026
96b6f7e
Merge pull request #3612 from router-for-me/log
luispater May 29, 2026
fc0615b
test(oauth): ensure missing auth directories are created and callback…
luispater May 29, 2026
776a9c0
fix(translator/gemini): support developer role in OpenAI Responses re…
May 29, 2026
55901f0
Merge pull request #3620 from iBenzene/fix/responses-input-id-dedupe
luispater May 29, 2026
430e679
fix(auth): strip "generate" from payload during WebSocket HTTP fallback
luispater May 29, 2026
3a54fb7
Merge branch 'dev', commit 'refs/pull/3621/head' of github.com:router…
luispater May 30, 2026
411bc6e
Merge remote-tracking branch 'upstream/main' into new
May 30, 2026
40e5fca
Merge remote-tracking branch 'upstream/main' into new
May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ bin/*
.agent/*
.agents/*
.opencode/*
.idea/*
.bmad/*
_bmad/*
_bmad-output/*
5 changes: 5 additions & 0 deletions .env.cluster.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Cluster JWT example.
# After deploying https://github.com/router-for-me/CLIProxyAPIHome, get the JWT value with:
# curl -sS -X POST "http://<home-host>:8327/v0/management/certificates/clients" -H "X-MANAGEMENT-KEY: <management-key>" | jq -r '.home_jwt'
# Then paste it into HOME_JWT here or export it before starting Compose.
HOME_JWT=your-home-jwt-here
124 changes: 113 additions & 11 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
name: docker-image

on:
workflow_dispatch:
push:
tags:
- v*

env:
APP_NAME: CLIProxyAPI
DOCKERHUB_REPO: eceasy/cli-proxy-api
DOCKERHUB_REPO: ${{ secrets.DOCKERHUB_USERNAME }}/cli-proxy-api-plus

jobs:
docker:
docker_amd64:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
Expand All @@ -26,21 +29,120 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Build and push
- name: Build and push (amd64)
uses: docker/build-push-action@v6
with:
context: .
platforms: |
linux/amd64
linux/arm64
platforms: linux/amd64
push: true
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: |
${{ env.DOCKERHUB_REPO }}:latest
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}
${{ env.DOCKERHUB_REPO }}:latest-amd64
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}-amd64

docker_arm64:
runs-on: ubuntu-24.04-arm
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Build and push (arm64)
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/arm64
push: true
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: |
${{ env.DOCKERHUB_REPO }}:latest-arm64
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}-arm64

docker_manifest:
runs-on: ubuntu-latest
needs:
- docker_amd64
- docker_arm64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Create and push multi-arch manifests
run: |
docker buildx imagetools create \
--tag "${DOCKERHUB_REPO}:latest" \
"${DOCKERHUB_REPO}:latest-amd64" \
"${DOCKERHUB_REPO}:latest-arm64"
docker buildx imagetools create \
--tag "${DOCKERHUB_REPO}:${VERSION}" \
"${DOCKERHUB_REPO}:${VERSION}-amd64" \
"${DOCKERHUB_REPO}:${VERSION}-arm64"
- name: Cleanup temporary tags
continue-on-error: true
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
run: |
set -euo pipefail
namespace="${DOCKERHUB_REPO%%/*}"
repo_name="${DOCKERHUB_REPO#*/}"

token="$(
curl -fsSL \
-H 'Content-Type: application/json' \
-d "{\"username\":\"${DOCKERHUB_USERNAME}\",\"password\":\"${DOCKERHUB_TOKEN}\"}" \
'https://hub.docker.com/v2/users/login/' \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])'
)"

delete_tag() {
local tag="$1"
local url="https://hub.docker.com/v2/repositories/${namespace}/${repo_name}/tags/${tag}/"
local http_code
http_code="$(curl -sS -o /dev/null -w "%{http_code}" -X DELETE -H "Authorization: JWT ${token}" "${url}" || true)"
if [ "${http_code}" = "204" ] || [ "${http_code}" = "404" ]; then
echo "Docker Hub tag removed (or missing): ${DOCKERHUB_REPO}:${tag} (HTTP ${http_code})"
return 0
fi
echo "Docker Hub tag delete failed: ${DOCKERHUB_REPO}:${tag} (HTTP ${http_code})"
return 0
}

delete_tag "latest-amd64"
delete_tag "latest-arm64"
delete_tag "${VERSION}-amd64"
delete_tag "${VERSION}-arm64"
4 changes: 4 additions & 0 deletions .github/workflows/pr-test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Set up Go
uses: actions/setup-go@v5
with:
Expand Down
85 changes: 85 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Build and Publish

on:
push:
branches: [main]
tags: ['v*']
workflow_dispatch:
inputs:
platforms:
description: 'Target platforms to build'
required: true
default: 'linux/amd64'
type: choice
options:
- 'linux/amd64'
- 'linux/arm64'
- 'linux/amd64,linux/arm64'

permissions:
contents: read
packages: write

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up QEMU
if: contains(github.event.inputs.platforms || 'linux/amd64', 'arm64')
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Generate Build Metadata
run: |
echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=sha
type=raw,value=latest

- name: Determine platforms
id: platforms
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "platforms=${{ github.event.inputs.platforms }}" >> $GITHUB_OUTPUT
else
# Default to amd64 only for push events (faster builds)
echo "platforms=linux/amd64" >> $GITHUB_OUTPUT
fi

- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: ${{ steps.platforms.outputs.platforms }}
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
11 changes: 8 additions & 3 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
# run only against tags
tags:
- '*'
workflow_dispatch:

permissions:
contents: write
Expand All @@ -16,21 +17,25 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- run: git fetch --force --tags
- uses: actions/setup-go@v4
with:
go-version: '>=1.24.0'
go-version: '>=1.26.0'
cache: true
- name: Generate Build Metadata
run: |
echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- uses: goreleaser/goreleaser-action@v4
with:
distribution: goreleaser
version: latest
args: release --clean
args: release --clean --skip=validate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ env.VERSION }}
Expand Down
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,25 @@ GEMINI.md

# Tooling metadata
.vscode/*
.worktrees/
.codex/*
.claude/*
.gemini/*
.serena/*
.agent/*
.agents/*
.agents/*
.opencode/*
.idea/*
.beads/*
.bmad/*
_bmad/*
_bmad-output/*

# macOS
.DS_Store
._*
.gocache/

scripts
.omc
.omx
5 changes: 5 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
version: 2

builds:
- id: "cli-proxy-api"
env:
Expand All @@ -6,6 +8,7 @@ builds:
- linux
- windows
- darwin
- freebsd
goarch:
- amd64
- arm64
Expand All @@ -16,6 +19,8 @@ builds:
archives:
- id: "cli-proxy-api"
format: tar.gz
name_template: >-
{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{- if eq .Arch "arm64" -}}aarch64{{- else -}}{{ .Arch }}{{- end -}}
format_overrides:
- goos: windows
format: zip
Expand Down
Loading