Commit Graph

882 Commits

Author SHA1 Message Date
Luis Pater eb2549a782 fix(gemini): update response template to omit finishReason until known
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
v6.2.13
2025-10-16 06:41:04 +08:00
Luis Pater c419264a70 fix(responses): handle empty and invalid rawJSON in ConvertOpenAIChatCompletionsResponseToOpenAIResponses 2025-10-16 06:34:00 +08:00
Luis Pater 6b23e2da74 feat(claude): add Claude 4.5 Haiku model definition
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
v6.2.12
2025-10-16 04:53:07 +08:00
Luis Pater 5ab0854b5b fix(claude): track message_start event in streaming response
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
Add a `MessageStarted` flag to `ConvertOpenAIResponseToAnthropicParams` to ensure the `message_start` event is emitted only once during streaming.
Refactor response handling to detect streaming mode via the `stream` field instead of the `object` type, simplifying the branching logic.
Update the streaming conversion to set `MessageStarted` after sending the `message_start` event, preventing duplicate starts.
These changes improve correctness of streaming response handling for Claude integration.
v6.2.11
2025-10-16 03:54:48 +08:00
Adamcf 15981aa412 fix: add Claude→Claude passthrough to prevent SSE event fragmentation
When from==to (Claude→Claude scenario), directly forward SSE stream
line-by-line without invoking TranslateStream. This preserves the
multi-line SSE event structure (event:/data:/blank) and prevents
JSON parsing errors caused by event fragmentation.

Resolves: JSON parsing error when using Claude Code streaming responses

fix: correct SSE event formatting in Handler layer

Remove duplicate newline additions (\n\n) that were breaking SSE event format.
The Executor layer already provides properly formatted SSE chunks with correct
line endings, so the Handler should forward them as-is without modification.

Changes:
- Remove redundant \n\n addition after each chunk
- Add len(chunk) > 0 check before writing
- Format error messages as proper SSE events (event: error\ndata: {...}\n\n)
- Add chunkIdx counter for future debugging needs

This fixes JSON parsing errors caused by malformed SSE event streams.

fix: update comments for clarity in SSE event forwarding
2025-10-15 22:13:44 +08:00
Luis Pater ac4f52c532 Merge pull request #127 from router-for-me/usage
fix(server): snapshot config with YAML to handle in-place mutations
2025-10-15 21:39:44 +08:00
hkfires 84fa497169 fix(server): snapshot config with YAML to handle in-place mutations
- Add oldConfigYaml to store previous config snapshot
- Rebuild oldCfg from YAML in UpdateClients for reliable change detection
- Initialize and refresh snapshot on startup and after updates
- Prevents change detection bugs when Management API mutates cfg in place
- Import gopkg.in/yaml.v3
2025-10-15 18:26:23 +08:00
Luis Pater b641d90287 Fixed #91
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
refactor(translator): streamline Codex response handling and remove redundant code

- Updated `ConvertCodexResponseToOpenAIResponses` logic for clarity and consistency.
- Simplified `ConvertCodexResponseToOpenAIResponsesNonStream` by removing unnecessary buffer setup and scanner logic.
- Switched to using `sjson.SetRaw` for improved processing of raw input strings.
v6.2.10
2025-10-15 12:58:18 +08:00
Luis Pater 32d01a6a7c Merge pull request #125 from router-for-me/object
add S3-compatible object store
2025-10-15 11:52:54 +08:00
hkfires 9ef76dcc61 Add Object Storage 2025-10-15 11:47:35 +08:00
Luis Pater 4576f9915b Fixed: #121
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
feat(translator): map Claude web search tool type to Codex web_search

- Added special handling to replace `web_search_20250305` tool type with `{"type":"web_search"}` in Claude request processing.
v6.2.9
2025-10-15 09:32:12 +08:00
Luis Pater c945e35983 feat(translator): improve Claude request handling with enhanced content processing
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
- Introduced helper functions (`appendTextContent`, `appendImageContent`, etc.) for structured content construction.
- Refactored message generation logic for better clarity, supporting mixed content scenarios (text, images, and function calls).
- Added `flushMessage` to ensure proper grouping of message contents.
v6.2.8
2025-10-14 23:58:37 +08:00
hkfires 1cd275f4c1 Merge branch 'dev' 2025-10-14 15:47:39 +08:00
hkfires 4bc1ed6031 feat(config): use block style for YAML maps/lists; keep [] for empty 2025-10-14 15:43:58 +08:00
hkfires 78989d6c0d feat(store)!: Lock AuthDir when use gitstore/pgstore 2025-10-14 15:43:58 +08:00
hkfires d6aa1e5ba0 fix(postgresstore): normalize config line endings for DB/disk writes 2025-10-14 15:43:58 +08:00
hkfires 50c1c50dbd docs: document PostgreSQL-backed config/token store 2025-10-14 15:43:58 +08:00
hkfires 5123cfd47e feat(store): add PostgreSQL-backed config store with env selection 2025-10-14 15:43:58 +08:00
Chén Mù 9072accc43 Merge pull request #118 from router-for-me/config
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
feat(config): use block style for YAML maps/lists
v6.2.7
2025-10-14 13:44:00 +08:00
hkfires 0d8134aabe feat(config): use block style for YAML maps/lists; keep [] for empty 2025-10-14 13:17:04 +08:00
Chén Mù 4fdbdf7925 Merge pull request #117 from router-for-me/pg
feat(store): add PostgreSQL-backed config store with env selection
2025-10-14 11:28:19 +08:00
hkfires 50c84485c3 feat(store)!: Lock AuthDir when use gitstore/pgstore 2025-10-14 10:46:45 +08:00
hkfires f335aeeedb fix(postgresstore): normalize config line endings for DB/disk writes 2025-10-14 08:38:15 +08:00
Luis Pater 32a8102d71 feat(usage): add support for tracking request source in usage records
- Introduced `Source` field to usage-related structs for better origin tracking.
- Updated `newUsageReporter` to resolve and populate the `Source` attribute.
- Implemented `resolveUsageSource` to determine source from auth metadata or API key.
2025-10-14 02:11:43 +08:00
hkfires 61f6a612e3 docs: document PostgreSQL-backed config/token store 2025-10-13 22:31:01 +08:00
hkfires 42087d5387 feat(store): add PostgreSQL-backed config store with env selection 2025-10-13 21:05:43 +08:00
Luis Pater f2710c03ab Merge pull request #116 from router-for-me/log
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
fix(management,config,watcher): treat empty base-url as removal; improve config change logs
v6.2.6
2025-10-13 20:48:33 +08:00
hkfires 39abde2413 refactor(watcher): remove redundant quota-exceeded change logs 2025-10-13 14:02:55 +08:00
hkfires 0aa8706ef7 feat(config): Treat empty BaseURL for Codex keys as deletion 2025-10-13 13:48:27 +08:00
hkfires 5fd4a8b974 feat(config): Remove OpenAI providers with empty BaseURL 2025-10-13 13:48:27 +08:00
hkfires 06e6f0a5f2 refactor(watcher): Extract config change logging to new function 2025-10-13 13:48:27 +08:00
Luis Pater 80f6d6fe7c chore(watcher): add YAML serialization for config change tracking and improve quota-exceeded debug logs 2025-10-13 13:32:43 +08:00
Luis Pater 3be6175aec chore(auth): add debug log for iflow token response body 2025-10-13 09:12:45 +08:00
Luis Pater 599986495b feat(translator): enhance OpenAI Gemini request handling for mixed content
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
- Replaced `contentParts` with `aggregatedParts` to support mixed content (text and inline data).
- Introduced `textBuilder` for efficient text concatenation.
- Added support for inline data processing, including base64-encoded image URLs.
- Updated `msg["content"]` logic to handle both plain text and mixed content scenarios.
v6.2.5
2025-10-13 02:15:55 +08:00
Luis Pater cb83985cc7 chore(server): remove debug println statement from server.go
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
v6.2.4
2025-10-12 23:58:50 +08:00
Luis Pater 6ec028808f docs(readme): add MANAGEMENT_PASSWORD environment variable documentation
- Updated environment variable table in both English (README.md) and Chinese (README_CN.md) to include `MANAGEMENT_PASSWORD`.
2025-10-12 23:06:20 +08:00
Luis Pater 71faa19bb4 Merge pull request #114 from router-for-me/management
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
feat(managementasset): Authenticate GitHub API requests
v6.2.3
2025-10-12 21:40:42 +08:00
hkfires b5ad978d44 feat(managementasset): Authenticate GitHub API requests 2025-10-12 21:21:51 +08:00
Luis Pater 0508c9fbce Merge pull request #113 from sususu98/main
chore: update .gitignore include .env
2025-10-12 18:21:59 +08:00
Luis Pater 92bb642e98 docs(readme): document Git-backed configuration and token store setup
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
- Added instructions for configuring a Git repository as a backend for `config.yaml` and token storage.
- Included example environment variable configurations for Docker and Docker Compose.
- Updated both English (README.md) and Chinese (README_CN.md) documentation.
v6.2.2
2025-10-12 13:23:11 +08:00
sususu af82855bed chore: update .gitignore include .env 2025-10-12 07:16:11 +02:00
Luis Pater a83978f769 feat(store): introduce GitTokenStore for token persistence via Git backend
- Added `GitTokenStore` to handle token storage and metadata using Git as a backing storage.
- Implemented methods for initialization, save, retrieval, listing, and deletion of auth files.
- Updated `go.mod` and `go.sum` to include new dependencies for Git integration.
- Integrated support for Git-backed configuration via `GitTokenStore`.
- Updated server logic to clone, initialize, and manage configurations from Git repositories.
- Added helper functions for verifying and synchronizing configuration files.
- Improved error handling and contextual logging for Git operations.
- Modified Dockerfile to include `config.example.yaml` for initial setup.
- Added `gitCommitter` interface to handle Git-based commit and push operations.
- Configured `Watcher` to detect and leverage Git-backed token stores.
- Implemented `commitConfigAsync` and `commitAuthAsync` methods for asynchronous change synchronization.
- Enhanced `GitTokenStore` with `CommitPaths` method to support selective file commits.
2025-10-12 13:13:31 +08:00
Luis Pater 2513d908be Merge pull request #111 from router-for-me/cloud
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
fix(server): Handle empty/invalid config in cloud deploy mode
v6.2.1
2025-10-11 22:40:51 +08:00
hkfires 4c033b3af7 feat(config): disable logging and usage stats by default 2025-10-11 22:11:08 +08:00
hkfires 843a81f68d fix(server): Handle empty/invalid config in cloud deploy mode 2025-10-11 22:07:08 +08:00
Luis Pater f6e713ab6b Merge pull request #110 from router-for-me/cloud
docker-image / docker (push) Has been cancelled
goreleaser / goreleaser (push) Has been cancelled
feat(config): Gracefully handle empty or invalid optional config
v6.2.0
2025-10-11 21:22:10 +08:00
Luis Pater 1834c65116 Merge pull request #107 from router-for-me/gemini-web
Remove Gemini Web
2025-10-11 21:14:15 +08:00
hkfires fc6aa8ef77 feat(config): Gracefully handle empty or invalid optional config 2025-10-11 20:49:15 +08:00
hkfires c3f88126e6 refactor(provider): remove Gemini Web cookie-based support 2025-10-11 12:56:07 +08:00
hkfires b895018ff5 refactor(provider): remove Gemini Web cookie-based provider 2025-10-11 12:53:03 +08:00