Commit Graph
100 Commits
Author SHA1 Message Date
Calcium-IonandGitHub 889bdfcac1 Merge pull request #3061 from QuantumNous/dependabot/npm_and_yarn/web/axios-1.13.5
chore(deps): bump axios from 1.12.0 to 1.13.5 in /web
2026-03-01 14:47:19 +08:00
CaIon e22f59e449 feat(gemini): update request structures for Veo predictLongRunning
- Refactored the request URL and body construction methods to align with the Veo predictLongRunning endpoint.
- Introduced new data structures for Veo instances and parameters, replacing the previous Gemini video generation configurations.
- Updated the Vertex adaptor to utilize the new Veo request payload format.
2026-02-28 18:42:54 +08:00
Calcium-IonandGitHub 30061f3c2c Merge pull request #3059 from QuantumNous/feat/veo
feat(gemini): implement video generation configuration
2026-02-28 17:55:24 +08:00
Calcium-IonandGitHub 9fea78d124 Merge pull request #3012 from seefs001/feature/minimax_reasoning_split
feat: minimax reasoning_split
2026-02-28 17:55:00 +08:00
Calcium-IonandGitHub c4973e7fa3 Merge pull request #3029 from seefs001/feature/nanobanana2
feat: add image model to supported image presets
2026-02-28 17:54:39 +08:00
Calcium-IonandGitHub ebe65b902f Merge pull request #3052 from seefs001/fix/redirect-payment-url
fix: redirect subscription payment return to user-accessible page
2026-02-28 17:54:21 +08:00
CaIon 32d9ae1f83 feat(gemini): implement video generation configuration and billing estimation
- Added Gemini video generation configuration structures and payloads.
- Introduced functions for parsing and resolving video duration and resolution from metadata.
- Enhanced the Vertex adaptor to support Gemini video generation requests and billing estimation based on duration and resolution.
- Updated model pricing settings for new Gemini video models.
2026-02-28 17:37:08 +08:00
Calcium-IonandGitHub af5cff20d8 Merge pull request #3049 from seefs001/fix/build-in-bindings
fix: show built-in user bindings from user detail API in admin modal
2026-02-28 14:47:33 +08:00
Calcium-IonandGitHub a58c98c4f6 Merge pull request #3042 from seefs001/fix/video-vertex-fetch
fix: vertex ai video proxy and task polling improvements
2026-02-27 18:58:00 +08:00
Calcium-IonandGitHub e56205613b Merge pull request #3038 from seefs001/fix/video-vertex-fetch
fix: align Vertex content fetch flow with Gemini and handle base64
2026-02-27 17:17:05 +08:00
CaIon 986aa02bf2 chore: update .gitattributes 2026-02-25 14:55:33 +08:00
CaIon 8f14687d61 fix: improve multipart form data handling by detecting content type. fix #3007 2026-02-25 12:51:46 +08:00
CaIon 094ac54609 feat(middleware): add RouteTag middleware for enhanced logging and routing
- Introduced RouteTag middleware to set route tags for different API endpoints.
- Updated logger to include route tags in log output.
- Applied RouteTag middleware across various routers including API, dashboard, relay, video, and web routers for consistent logging.
2026-02-25 00:11:24 +08:00
CaIon b85192590b fix: handle nil setting in user retrieval from database 2026-02-24 23:46:46 +08:00
Calcium-IonandGitHub a36d0f90bc Merge pull request #3002 from RedwindA/feat/zeroMatchHint
feat(web): add custom-model create hint and i18n translations
2026-02-24 22:05:05 +08:00
CaIon 176f764d2c feat: add comprehensive tests for StreamScannerHandler functionality
- Introduced a new test file for StreamScannerHandler, covering various scenarios including nil inputs, empty bodies, chunk processing, order preservation, and handler failures.
- Enhanced error handling and data processing logic in StreamScannerHandler to improve robustness and performance.
2026-02-24 17:36:08 +08:00
Calcium-IonandGitHub 89c0b7902b Merge pull request #2998 from seefs001/fix/pr-2900
Fix/pr 2900
2026-02-24 13:35:05 +08:00
Calcium-IonandGitHub 6b19c845e2 Merge pull request #2993 from seefs001/feature/user-oauth-detail
feat: move user bindings to dedicated management modal
2026-02-24 13:01:10 +08:00
Calcium-IonandGitHub 7cf35ca8db Merge pull request #2994 from seefs001/fix/grok-violates-check
fix: violation fee check
2026-02-23 22:03:52 +08:00
CaIon 194b53f061 fix: enhance data trimming and validation in stream scanner 2026-02-23 17:42:22 +08:00
CaIon d5871296b6 fix: improve multipart form data handling in gin context
- Added caching for the original Content-Type header in the parseMultipartFormData function.
- This change ensures that the Content-Type is retrieved from the context if previously set, enhancing performance and consistency.
2026-02-23 16:59:46 +08:00
CaIon 2b3bfd4e1e feat: implement caching for channel retrieval 2026-02-23 14:11:11 +08:00
Calcium-IonandGitHub 053ee18637 Merge pull request #2959 from seefs001/fix/gemini-tool-use-token
fix: unify usage mapping and include toolUsePromptTokenCount
2026-02-22 23:35:09 +08:00
Calcium-IonandGitHub f8f3ee29de Merge pull request #2960 from seefs001/feature/minimax-native-claude
feat: minimax native /v1/messages
2026-02-22 23:32:53 +08:00
Calcium-IonandGitHub c948652647 Merge pull request #2961 from seefs001/feature/codex-oauth-with-proxy
feat: codex oauth proxy
2026-02-22 23:32:36 +08:00
Calcium-IonandGitHub 49eb6d3c1e feat: add missing OpenAI/Claude/Gemini request fields (#2971)
* feat: add missing OpenAI/Claude/Gemini request fields and responses stream options

* fix: skip field filtering when request passthrough is enabled

* fix: include subscription in personal sidebar module controls

* feat: gate Claude inference_geo passthrough behind channel setting and add field docs
2026-02-22 23:31:18 +08:00
CaIon 183c750e59 feat: add audio preview functionality 2026-02-22 23:23:13 +08:00
CaIon c1b05d3b5a refactor: clean up unused code and improve error logging in adaptor and mjp modules 2026-02-22 22:11:05 +08:00
CaIon bf03f277ac feat: add validation for invalid status code entries in channel modal
- Introduced a new function to collect invalid status code entries from the status code mapping.
- Updated the EditChannelModal to display an error message if invalid status codes are detected.
- Enhanced localization files to include new error messages for invalid status codes in multiple languages.
- Removed unused styles from the RiskAcknowledgementModal for cleaner UI.
2026-02-22 21:36:38 +08:00
CaIon 7bc0bf21f3 feat(mjp): update billing log for failed tasks 2026-02-22 20:34:25 +08:00
Calcium-IonandGitHub 63edb57ce2 Merge pull request #2987 from seefs001/feature/channel-retry-warning
Feature/channel retry warning
2026-02-22 20:33:05 +08:00
CaIon 06fc6015bb Update README 2026-02-22 18:24:42 +08:00
CaIon bc7c5cf9cf feat(task): introduce task timeout configuration and cleanup unfinished tasks
- Added TaskTimeoutMinutes constant to configure the timeout duration for asynchronous tasks.
- Implemented sweepTimedOutTasks function to identify and handle unfinished tasks that exceed the timeout limit, marking them as failed and processing refunds if applicable.
- Enhanced task polling loop to include the new timeout handling logic, ensuring timely cleanup of stale tasks.
2026-02-22 17:59:38 +08:00
Calcium-IonandGitHub fb494c12d6 Merge pull request #2985 from QuantumNous/refactor/async-task-merge
refactor: async task
2026-02-22 16:59:56 +08:00
CaIon 68ca914bb2 fix(i18n): remove duplicate task ID translations and clean up unused keys across multiple languages 2026-02-22 16:45:35 +08:00
CaIon 06fe03e34c feat(task): add model redirection, per-call billing, and multipart retry fix for async tasks
1. Async task model redirection (aligned with sync tasks):
   - Integrate ModelMappedHelper in RelayTaskSubmit after model name
     determination, populating OriginModelName / UpstreamModelName on RelayInfo.
   - All task adaptors now send UpstreamModelName to upstream providers:
     - Gemini & Vertex: BuildRequestURL uses UpstreamModelName.
     - Doubao & Ali: BuildRequestBody conditionally overwrites body.Model.
     - Vidu, Kling, Hailuo, Jimeng: convertToRequestPayload accepts RelayInfo
       and unconditionally uses info.UpstreamModelName.
     - Sora: BuildRequestBody parses JSON and multipart bodies to replace
       the "model" field with UpstreamModelName.
   - Frontend log visibility: LogTaskConsumption and taskBillingOther now
     emit is_model_mapped / upstream_model_name in the "other" JSON field.
   - Billing safety: RecalculateTaskQuotaByTokens reads model name from
     BillingContext.OriginModelName (via taskModelName) instead of
     task.Data["model"], preventing billing leaks from upstream model names.

2. Per-call billing (TaskPricePatches lifecycle):
   - Rename TaskBillingContext.ModelName → OriginModelName; add PerCallBilling
     bool field, populated from TaskPricePatches at submission time.
   - settleTaskBillingOnComplete short-circuits when PerCallBilling is true,
     skipping both adaptor adjustments and token-based recalculation.
   - Remove ModelName from TaskSubmitResult; use relayInfo.OriginModelName
     consistently in controller/relay.go for billing context and logging.

3. Multipart retry boundary mismatch fix:
   - Root cause: after Sora (or OpenAI audio) rebuilds a multipart body with a
     new boundary and overwrites c.Request.Header["Content-Type"], subsequent
     calls to ParseMultipartFormReusable on retry would parse the cached
     original body with the wrong boundary, causing "NextPart: EOF".
   - Fix: ParseMultipartFormReusable now caches the original Content-Type in
     gin context key "_original_multipart_ct" on first call and reuses it for
     all subsequent parses, making multipart parsing retry-safe globally.
   - Sora adaptor reverted to the standard pattern (direct header set/get),
     which is now safe thanks to the root fix.

4. Tests:
   - task_billing_test.go: update makeTask to use OriginModelName; add
     PerCallBilling settlement tests (skip adaptor adjust, skip token recalc);
     add non-per-call adaptor adjustment test with refund verification.
2026-02-22 16:33:00 +08:00
CaIon 374aabf301 refactor(task): enhance UpdateWithStatus for CAS updates and add integration tests
- Updated UpdateWithStatus method to use Model().Select("*").Updates() for conditional updates, preventing GORM's INSERT fallback.
- Introduced comprehensive integration tests for UpdateWithStatus, covering scenarios for winning and losing CAS updates, as well as concurrent updates.
- Added task_cas_test.go to validate the new behavior and ensure data integrity during concurrent state transitions.
2026-02-22 16:01:19 +08:00
CaIon b386490d5e refactor(task): add CAS-guarded updates to prevent concurrent billing conflicts
Replace all bare task.Update() (DB.Save) calls with UpdateWithStatus(),
which adds a WHERE status = ? guard to prevent concurrent processes from
overwriting each other's state transitions.

Key changes:

model/task.go:
- Add taskSnapshot struct with Equal() method for change detection
- Add Snapshot() method to capture pre-update state
- Add UpdateWithStatus(fromStatus) using DB.Where().Save() for CAS
  semantics with full-struct save (no explicit field listing needed)

model/midjourney.go:
- Add UpdateWithStatus(fromStatus string) with same CAS pattern

service/task_polling.go (updateVideoSingleTask):
- Snapshot before processing upstream response; skip DB write if unchanged
- Terminal transitions (SUCCESS/FAILURE) use UpdateWithStatus CAS:
  billing/refund only executes if this process wins the transition
- Non-terminal updates also use UpdateWithStatus to prevent overwriting
  a concurrent terminal transition back to IN_PROGRESS
- Defer settleTaskBillingOnComplete to after CAS check (shouldSettle flag)

relay/relay_task.go (tryRealtimeFetch):
- Add snapshot + change detection; use UpdateWithStatus for CAS safety

controller/midjourney.go (UpdateMidjourneyTaskBulk):
- Capture preStatus before mutations; use UpdateWithStatus CAS
- Gate refund (IncreaseUserQuota) on CAS success (won && shouldReturnQuota)

This prevents the multi-instance race condition where:
1. Instance A reads task (IN_PROGRESS), fetches upstream (still IN_PROGRESS)
2. Instance B reads same task, fetches upstream (now SUCCESS), writes SUCCESS
3. Instance A's bare Save() overwrites SUCCESS back to IN_PROGRESS
2026-02-22 16:01:19 +08:00
CaIon 6f39c02857 refactor(relay): improve channel locking and retry logic in RelayTask
- Enhanced the RelayTask function to utilize a locked channel when available, allowing for better reuse during retries.
- Updated error handling to ensure proper context setup for the selected channel.
- Clarified comments in ResolveOriginTask regarding channel locking and retry behavior.
- Introduced a new field in TaskRelayInfo to store the locked channel object, improving type safety and reducing import cycles.
2026-02-22 16:01:19 +08:00
CaIon 143b4535b2 refactor(relay): enhance remix logic for billing context extraction
- Updated the remix handling in ResolveOriginTask to prioritize extracting OtherRatios from the BillingContext of the original task if available.
- Retained the previous logic for extracting seconds and size from task data as a fallback.
- Improved clarity and maintainability of the remix logic by separating the new and old approaches.
2026-02-22 16:01:19 +08:00
CaIon 7d5fc3ff51 refactor(relay): rename RelayTask to RelayTaskFetch and update routing
- Renamed RelayTask function to RelayTaskFetch for clarity.
- Updated routing in relay-router.go and video-router.go to use RelayTaskFetch for fetch operations.
- Enhanced error handling in RelayTaskFetch function.
- Adjusted task data conversion in TaskAdaptor to include task ID.
2026-02-22 16:01:19 +08:00
CaIon 64d18a5fdf refactor(logs): add refund logging for asynchronous tasks and update translations 2026-02-22 16:01:19 +08:00
CaIon 8374a83084 feat(task): add adaptor billing interface and async settlement framework
Add three billing lifecycle methods to the TaskAdaptor interface:
- EstimateBilling: compute OtherRatios from user request before pricing
- AdjustBillingOnSubmit: adjust ratios from upstream submit response
- AdjustBillingOnComplete: determine final quota at task terminal state

Introduce BaseBilling as embeddable no-op default for adaptors without
custom billing. Move Sora/Ali OtherRatios logic from shared validation
into per-adaptor EstimateBilling implementations.

Add TaskBillingContext to persist pricing params (model_price, group_ratio,
other_ratios) in task private data for async polling settlement.

Extract RecalculateTaskQuota as a general-purpose delta settlement
function and unify polling billing via settleTaskBillingOnComplete
(adaptor-first, then token-based fallback).
2026-02-22 16:00:27 +08:00
CaIon ba25ba88fe refactor(task): extract billing and polling logic from controller to service layer
Restructure the task relay system for better separation of concerns:
- Extract task billing into service/task_billing.go with unified settlement flow
- Move task polling loop from controller to service/task_polling.go (supports Suno + video platforms)
- Split RelayTask into fetch/submit paths with dedicated retry logic (taskSubmitWithRetry)
- Add TaskDto, TaskResponse generics, and FetchReq to dto/task.go
- Add taskcommon/helpers.go for shared task adaptor utilities
- Remove controller/task_video.go (logic consolidated into service layer)
- Update all task adaptors (ali, doubao, gemini, hailuo, jimeng, kling, sora, suno, vertex, vidu)
- Simplify frontend task logs to use new TaskDto response format
2026-02-22 16:00:27 +08:00
CaIon f289678f8b fix: add dynamic route for custom OAuth provider callbacks (#2911)
Custom OAuth providers redirect to /oauth/{slug} after authorization,
but only hardcoded provider routes (github, discord, oidc, linuxdo)
existed in the frontend router, causing a 404 for custom providers.
2026-02-20 22:01:21 +08:00
Calcium-IonandGitHub d45cd9afee Merge pull request #2926 from seefs001/fix/status_code_mapping
fix: support numeric status code mapping in ResetStatusCode
2026-02-12 15:27:36 +08:00
Calcium-IonandGitHub 9310bde42f Merge pull request #2928 from RedwindA/fix/token-Search
fix(token-search): use TrimPrefix for sk- token normalization
2026-02-12 15:19:34 +08:00
Calcium-IonandGitHub e5b9f7b243 feat: add OpenRouter pricing support to upstream ratio sync (#2925) 2026-02-12 14:46:37 +08:00
CaIon 4fdd12ac70 feat: Improve backend multilingual support 2026-02-12 14:29:56 +08:00
CaIon 29d48e262e feat: refactor request body handling to use BodyStorage for improved efficiency 2026-02-12 01:51:27 +08:00
CaIon 00186a31ce chore: remove deprecated Docker badge from README 2026-02-11 22:21:02 +08:00
CaIon 92aca9771f feat: refactor extra_body handling for improved configuration parsing 2026-02-11 22:15:22 +08:00
CaIon 3a28a415f1 Update README
# Conflicts:
#	README.fr.md
#	README.ja.md
#	README.md
#	README.zh_CN.md
2026-02-11 22:15:16 +08:00
Calcium-IonandGitHub 8e8869b0c7 Merge pull request #2917 from QuantumNous/dependabot/npm_and_yarn/web/axios-1.13.5
chore(deps): bump axios from 1.12.0 to 1.13.5 in /web
2026-02-11 19:48:41 +08:00
CaIon 8f9d9b2b10 fix: update README files to improve link formatting and readability 2026-02-11 18:14:38 +08:00
CaIon 32c95a21a5 feat: add Aion UI link to README files 2026-02-11 18:05:08 +08:00
CaIon a79ab1ebb2 simplify language selector display to use text-only labels
Replace icon-based language options with plain text labels in both the
header dropdown and preferences settings to keep the UI clean and
avoid potential controversies. Remove unused country-flag-icons dependency.
2026-02-11 17:44:31 +08:00
Calcium-IonandGitHub 50dff6a237 Merge pull request #2909 from seefs001/fix/stream-supported-channel 2026-02-11 02:08:00 +08:00
Calcium-IonandGitHub c86cd86c64 Merge pull request #2898 from seefs001/feature/channel-affinity-tips
optimize: channel affinity tips
2026-02-08 23:53:45 +08:00
CaIon 28b53e125a feat: add project conventions and coding standards documentation for new-api 2026-02-08 20:31:20 +08:00
Calcium-IonandGitHub cac45d9cbc Merge pull request #2896 from seefs001/fix/tips-model-manager
改变端点映射文案
2026-02-08 20:15:58 +08:00
Calcium-IonandGitHub 286d3d8054 Merge pull request #2895 from seefs001/fix/model-manager
fix: 如果模型管理有自定义配置则不合并默认配置
2026-02-08 19:53:49 +08:00
CaIon aed8c07cd7 refactor(ratio): replace maps with RWMap for improved concurrency handling 2026-02-08 00:48:21 +08:00
Calcium-IonandGitHub 41d478daee Merge pull request #2870 from seefs001/feature/cache-creation-configurable
feat: make 5m cache-creation ratio configurable
2026-02-08 00:28:42 +08:00
Calcium-IonandGitHub 6c28de8965 Merge pull request #2889 from seefs001/feature/messages2responses
feat: /v1/messages -> /v1/responses
2026-02-08 00:25:27 +08:00
Calcium-IonandGitHub c494c26236 Merge pull request #2887 from seefs001/fix/claude
fix: 补全 streaming message_delta 事件缺失的 input_tokens 和 cache 相关字段
2026-02-08 00:18:04 +08:00
Calcium-IonandGitHub 47cdac3e64 Merge pull request #2883 from seefs001/fix/claude-relay-info-input-token
fix: 使用openai兼容接口调用部分渠道在最终端点为claude原生端点下还是走了openai扣减input_token的逻辑
2026-02-08 00:17:50 +08:00
Calcium-IonandGitHub 2f4a2aa159 Merge pull request #2875 from seefs001/feature/channel-test-stream
feat: channel test with stream=true
2026-02-08 00:17:07 +08:00
Calcium-IonandGitHub e6f36e7999 Merge pull request #2864 from seefs001/fix/thining-summary
fix: add paragraph breaks between reasoning summary chunks
2026-02-08 00:15:32 +08:00
Calcium-IonandGitHub 99ea056913 Merge pull request #2854 from seefs001/fix/claude-tool-index
fix: Claude stream block index/type transitions
2026-02-08 00:15:20 +08:00
Calcium-IonandGitHub bf45df9e6f Merge pull request #2857 from QuantumNous/feat/custom-oauth
feat(oauth): implement custom OAuth provider
2026-02-08 00:13:20 +08:00
Calcium-IonandGitHub e6b43f4279 Merge pull request #2852 from seefs001/fix/codex-tips
feat: add Codex channel disclaimer (i18n, OpenAI terms)
2026-02-08 00:07:41 +08:00
CaIon bdacc5af3f 🔧 refactor: Enhance Log struct indexing for improved query performance 2026-02-07 23:20:43 +08:00
CaIon 8580d76d58 🔧 refactor: Update formatUserLogs function to accept start index
Modified the formatUserLogs function to include a startIdx parameter, allowing for more flexible log ID assignment. Updated calls to this function in GetLogByTokenId and GetUserLogs to pass the appropriate starting index.
2026-02-07 22:51:26 +08:00
Calcium-IonandGitHub a30561d8d4 Merge pull request #2879 from QuantumNous/fix/subscription-preference-fallback
 chore: Improve subscription billing fallback and UI states
2026-02-07 13:55:37 +08:00
Calcium-IonandGitHub d301e5882c Merge pull request #2880 from QuantumNous/feat/subscription-quota-notify
🔔 feat: Add subscription-aware quota notifications and update UI copy
2026-02-07 13:42:23 +08:00
Calcium-IonandGitHub e8177efee9 Merge pull request #2877 from QuantumNous/refactor/billing-session
refactor: 抽象统一计费会话 BillingSession
2026-02-07 00:30:23 +08:00
Calcium-IonandGitHub 88038a018d Merge pull request #2878 from QuantumNous/feat/hide-subscription-card-when-no-plans
 refactor(wallet): Top-up layout to embed subscription plans into the recharge card tabs
2026-02-07 00:30:07 +08:00
CaIon 0a8055286b fix: 修复 BillingSession 多个边界问题
- Settle 部分失败保护:新增 fundingSettled 标记,资金来源提交后
  令牌调整失败不再导致 Refund 误退已结算的资金
- 订阅多扣费修复:trySubscription 传 subConsume 而非 preConsumedQuota
  给 preConsume,保证三者(amount/preConsume/FinalPreConsumedQuota)一致
- 令牌回滚错误记录:preConsume 中 funding 失败时令牌回滚错误不再丢弃
- 移除钱包路径死代码:用户额度不足的 strings.Contains 匹配不可能命中
- WalletFunding.Refund 不重试:IncreaseUserQuota 非幂等,重试会多退
2026-02-06 23:41:51 +08:00
CaIon 116004fd44 refactor: 抽象统一计费会话 BillingSession
将散落在多个文件中的预扣费/结算/退款逻辑抽象为统一的 BillingSession 生命周期管理:

- 新增 BillingSettler 接口 (relay/common/billing.go) 避免循环引用
- 新增 FundingSource 接口 + WalletFunding / SubscriptionFunding 实现 (service/funding_source.go)
- 新增 BillingSession 封装预扣/结算/退款原子操作 (service/billing_session.go)
- 新增 SettleBilling 统一结算辅助函数,替换各 handler 中的 quotaDelta 模式
- 重写 PreConsumeBilling 为 BillingSession 工厂入口
- controller/relay.go 退款守卫改用 BillingSession.Refund()

修复的 Bug:
- 令牌额度泄漏:PreConsumeTokenQuota 成功但 DecreaseUserQuota 失败时未回滚
- 订阅退款遗漏:FinalPreConsumedQuota=0 但 SubscriptionPreConsumed>0 时跳过退款
- 订阅多扣费:subConsume 强制为 1 但 FinalPreConsumedQuota 不同步
- 退款路径不统一:钱包/订阅退款逻辑现统一由 FundingSource.Refund 分派
2026-02-06 23:14:25 +08:00
Calcium-IonandGitHub 3576036709 Merge pull request #2876 from seefs001/fix/json_schema
fix: /v1/chat/completions -> /v1/responses json_schema
2026-02-06 23:08:49 +08:00
CaIon 5cf788f1bf refactor: enhance API security with read-only token authentication and improved rate limiting 2026-02-06 21:26:26 +08:00
CaIon 2ada935460 fix: update LIKE pattern sanitization for token search
- Change ESCAPE character from '\' to '!' for compatibility with MySQL/PostgreSQL/SQLite
- Adjust sanitization logic to escape '!' and '_' correctly, improving input validation for search queries
2026-02-06 19:52:35 +08:00
CaIon cb34e23918 chore: add fmt import for improved logging in token controller 2026-02-06 18:01:11 +08:00
Calcium-IonandGitHub 1bae8928fb Merge commit from fork
fix: harden token search with pagination, rate limiting and input validation
2026-02-06 17:54:40 +08:00
CaIon 327cc5fa23 fix: harden token search with pagination, rate limiting and input validation
- Add configurable per-user token creation limit (max_user_tokens)
- Sanitize search input patterns to prevent expensive queries
- Add per-user search rate limiting (by user ID)
- Add pagination to search endpoint with strict page size cap
- Skip empty search fields instead of matching nothing
- Hide internal errors from API responses
- Fix Interface2String float64 formatting causing config parse failures
- Add float-string fallback in config system for int/uint fields
2026-02-06 17:52:19 +08:00
Calcium-IonandGitHub 96f9ff19df Merge pull request #2863 from prnake/feat/claude-opus-4-6
feat: add claude-opus-4-6
2026-02-06 16:18:00 +08:00
Calcium-IonandGitHub 1113181a61 Merge commit from fork
🔒 fix(security): sanitize AI-generated HTML to prevent XSS in playground
2026-02-06 16:16:20 +08:00
CaIon a9982ef244 Remove deprecated components and hooks 2026-02-05 23:04:49 +08:00
CaIon d13fa74368 Update .gitattributes to enhance text file handling and mark additional file types for LF normalization and binary detection 2026-02-05 22:57:32 +08:00
CaIon 493dbd2acb Add .gitattributes to mark frontend as vendored 2026-02-05 22:53:07 +08:00
CaIon 0e095d4ad8 feat(api): add 'cookie' to passthroughSkipHeaderNamesLower 2026-02-05 22:16:35 +08:00
CaIon a5a7d92edd refactor(oauth): update UpdateCustomOAuthProviderRequest to use pointers for optional fields
- Change fields in UpdateCustomOAuthProviderRequest struct to use pointers for optional values, allowing for better handling of nil cases.
- Update UpdateCustomOAuthProvider function to check for nil before assigning optional fields, ensuring existing values are preserved when not provided.
2026-02-05 22:03:30 +08:00
CaIon a94142f603 fix(oauth): enhance error handling and transaction management for OAuth user creation and binding
- Improve error handling in DeleteCustomOAuthProvider to log and return errors when fetching binding counts.
- Refactor user creation and OAuth binding logic to use transactions for atomic operations, ensuring data integrity.
- Add unique constraints to UserOAuthBinding model to prevent duplicate bindings.
- Enhance GitHub OAuth provider error logging for non-200 responses.
- Update AccountManagement component to provide clearer error messages on API failures.
2026-02-05 21:48:05 +08:00
CaIon 17be836aa4 feat(oauth): implement custom OAuth provider management #1106
- Add support for custom OAuth providers, including creation, retrieval, updating, and deletion.
- Introduce new model and controller for managing custom OAuth providers.
- Enhance existing OAuth logic to accommodate custom providers.
- Update API routes for custom OAuth provider management.
- Include i18n support for custom OAuth-related messages.
2026-02-05 21:18:43 +08:00
CaIon 424595e620 feat(oauth): migrate GitHub user identification from login to numeric ID 2026-02-05 20:30:48 +08:00
CaIon 7801dc6762 refactor: unify OAuth providers with i18n support
- Introduce Provider interface pattern for standard OAuth protocols
- Create unified controller/oauth.go with common OAuth logic
- Add OAuthError type for translatable error messages
- Add i18n keys and translations (zh/en) for OAuth messages
- Use common.ApiErrorI18n/ApiSuccessI18n for consistent responses
- Preserve backward compatibility for existing routes and data
2026-02-05 20:21:38 +08:00
Calcium-IonandGitHub eaee7a99d1 Merge pull request #2853 from QuantumNous/remove/claude-legacy-models
remove: drop support for claude-2 and claude-1 series models
2026-02-05 17:26:29 +08:00
CaIon 330e1e6395 remove: drop support for claude-2 and claude-1 series models
- Remove claude-instant-1.2, claude-2, claude-2.0, claude-2.1 from model lists
- Remove /v1/complete endpoint support (legacy completion API)
- Remove RequestModeCompletion and related code paths
- Simplify handler functions by removing requestMode parameter
- Update all channel adaptors that referenced claude handlers
2026-02-05 17:20:46 +08:00
Calcium-IonandGitHub 3b1866b6af Merge pull request #2848 from seefs001/fix/gemini-empty-responses-local-usage
fix: charge local input tokens when Gemini returns empty response
2026-02-05 16:24:23 +08:00