Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
5b8ba79
fix: 修复密钥表单供应商分组选择时 default 不自动移除的问题
NieiR Jan 8, 2026
0d32316
feat(my-usage): Statistics Summary with auto-refresh, collapsible log…
miraserver Jan 8, 2026
8f986d9
feat(error-rules): add rule for "Too much media" error (#572)
ding113 Jan 9, 2026
33c5247
feat: port FluxFix response fixer (#570)
ding113 Jan 9, 2026
05b4302
feat: 统一请求特殊设置命中的展示方式 (#574)
ding113 Jan 9, 2026
c5d5764
feat(providers): 按成本倍数自动排序供应商优先级 (#555) (#569)
YangQing-Lin Jan 10, 2026
be460ab
feat: thinking signature rectifier (#576)
ding113 Jan 10, 2026
ecce1f5
feat(prices): 添加手动模型价格管理功能 (#573)
NieiR Jan 10, 2026
c5cb60c
fix: thinking enabled + tool_use first block (#577)
ding113 Jan 10, 2026
0c682be
PR: fix(db): make drizzle migrations idempotent (#578)
YangQing-Lin Jan 10, 2026
373220d
refactor(prices): TOML cloud price table + billing fail-open (#580)
ding113 Jan 10, 2026
9901cff
Fix/logs provider badge overflow (#581)
YangQing-Lin Jan 10, 2026
55dfd21
feat: 价格表 UI 支持自定义模型/缓存价格 (#583)
ding113 Jan 10, 2026
d0cb42b
docs: add OpenCode setup guide (#582)
ding113 Jan 10, 2026
11b2a01
chore: 移除 seed 价格表并强制云端同步 (#584)
ding113 Jan 10, 2026
64b6ba2
docs: add npm registry note for OpenCode (#586)
ding113 Jan 10, 2026
6aa6890
chore: bump version to 0.4.0
ding113 Jan 10, 2026
efc75ed
Merge branch 'main' into dev
ding113 Jan 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 1 addition & 30 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -198,43 +198,14 @@ jobs:
bun install
bun run format

- name: Update seed price table
if: steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch'
continue-on-error: true
run: |
echo "📦 正在下载最新的 LiteLLM 价格表..."

# 确保目录存在
mkdir -p public/seed

# 下载最新价格表
if curl -sSL -f "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json" -o public/seed/litellm-prices.json; then
echo "价格表下载成功"

# 验证 JSON 格式
if node -e "JSON.parse(require('fs').readFileSync('public/seed/litellm-prices.json', 'utf-8'))"; then
echo "JSON 格式验证通过"

# 显示统计信息
TOTAL_MODELS=$(node -e "console.log(Object.keys(JSON.parse(require('fs').readFileSync('public/seed/litellm-prices.json', 'utf-8'))).length)")
CLAUDE_MODELS=$(node -e "console.log(Object.keys(JSON.parse(require('fs').readFileSync('public/seed/litellm-prices.json', 'utf-8'))).filter(m => m.toLowerCase().startsWith('claude-')).length)")
echo "📊 价格表统计: 总模型数 $TOTAL_MODELS, Claude 模型 $CLAUDE_MODELS"
else
echo "❌ JSON 格式验证失败,保留旧文件"
git checkout public/seed/litellm-prices.json
fi
else
echo "⚠️ 价格表下载失败,保留现有文件"
fi

- name: Commit VERSION and formatted code
if: steps.check.outputs.needs_bump == 'true' || github.event_name == 'workflow_dispatch'
run: |
# 配置git
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# 添加所有更改(VERSION文件 + 格式化后的代码 + 价格表
# 添加所有更改(VERSION文件 + 格式化后的代码)
git add -A

# 排除 .github/ 目录的更改(workflow 文件不需要自动提交,且需要特殊权限)
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
/coverage-quota
/coverage-my-usage
/coverage-proxy-guard-pipeline
/coverage-thinking-signature-rectifier

# next.js
/.next/
Expand Down Expand Up @@ -54,6 +55,7 @@ next-env.d.ts
# tooling & logs
.cursor/
.claude/
.codex/
.serena/
!src/app/dashboard/logs/
!src/app/settings/logs/
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ Key components:
- **Path alias**: `@/` maps to `./src/`
- **Formatting**: Biome (double quotes, trailing commas, 2-space indent, 100 char width)
- **Exports**: Prefer named exports over default exports
- **i18n**: Use `next-intl` for internationalization (5 languages: zh-CN, en, ja, ko, de)
- **i18n**: Use `next-intl` for internationalization (5 languages: zh-CN, zh-TW, en, ja, ru)
- **Testing**: Unit tests in `tests/unit/`, integration in `tests/integration/`, source-adjacent tests in `src/**/*.test.ts`

## Environment Variables
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.42
0.4.0
2 changes: 1 addition & 1 deletion drizzle/0049_shocking_ultimatum.sql
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ALTER TABLE "message_request" ADD COLUMN "special_settings" jsonb;
ALTER TABLE "message_request" ADD COLUMN IF NOT EXISTS "special_settings" jsonb;
2 changes: 2 additions & 0 deletions drizzle/0050_flippant_jack_flag.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE "system_settings" ADD COLUMN IF NOT EXISTS "enable_response_fixer" boolean DEFAULT true NOT NULL;--> statement-breakpoint
ALTER TABLE "system_settings" ADD COLUMN IF NOT EXISTS "response_fixer_config" jsonb DEFAULT '{"fixTruncatedJson":true,"fixSseFormat":true,"fixEncoding":true,"maxJsonDepth":200,"maxFixSize":1048576}'::jsonb;
1 change: 1 addition & 0 deletions drizzle/0051_silent_maelstrom.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE "system_settings" ADD COLUMN IF NOT EXISTS "enable_thinking_signature_rectifier" boolean DEFAULT true NOT NULL;
2 changes: 2 additions & 0 deletions drizzle/0052_model_price_source.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE "model_prices" ADD COLUMN IF NOT EXISTS "source" varchar(20) DEFAULT 'litellm' NOT NULL;--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "idx_model_prices_source" ON "model_prices" USING btree ("source");
Loading
Loading