From 8ece285f5f812d81a1ed931ee3f3d3941a732303 Mon Sep 17 00:00:00 2001 From: shaw Date: Mon, 4 Aug 2025 17:48:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20GitHub=20Action?= =?UTF-8?q?s=20=E7=89=88=E6=9C=AC=E6=A3=80=E6=B5=8B=E5=AF=B9=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E6=8F=90=E4=BA=A4=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - 之前的版本检测逻辑使用 HEAD~1..HEAD 只能获取直接的父提交变更 - 对于合并提交,这会导致忽略所有合并进来的实际代码变更 - 导致明明有重要代码更新却显示 "No significant changes" 解决方案: - 添加合并提交检测逻辑 - 对于合并提交,获取从合并基准点到 HEAD 的所有变更 - 确保所有合并进来的文件变更都被正确检测 这样可以确保版本自动发布工作流正确识别所有代码变更。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .github/workflows/auto-release-pipeline.yml | 24 +++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/auto-release-pipeline.yml b/.github/workflows/auto-release-pipeline.yml index 12a59522..6e7bb904 100644 --- a/.github/workflows/auto-release-pipeline.yml +++ b/.github/workflows/auto-release-pipeline.yml @@ -24,8 +24,28 @@ jobs: - name: Check if version bump is needed id: check run: | - # 获取当前提交的文件变更 - CHANGED_FILES=$(git diff --name-only HEAD~1..HEAD 2>/dev/null || git diff --name-only $(git rev-list --max-parents=0 HEAD)..HEAD) + # 检测是否是合并提交 + PARENT_COUNT=$(git rev-list --parents -n 1 HEAD | wc -w) + PARENT_COUNT=$((PARENT_COUNT - 1)) + echo "Parent count: $PARENT_COUNT" + + if [ "$PARENT_COUNT" -gt 1 ]; then + # 合并提交:获取合并进来的所有文件变更 + echo "Detected merge commit, getting all merged changes" + # 获取合并基准点 + MERGE_BASE=$(git merge-base HEAD^1 HEAD^2 2>/dev/null || echo "") + if [ -n "$MERGE_BASE" ]; then + # 获取从合并基准到 HEAD 的所有变更 + CHANGED_FILES=$(git diff --name-only $MERGE_BASE..HEAD) + else + # 如果无法获取合并基准,使用第二个父提交 + CHANGED_FILES=$(git diff --name-only HEAD^2..HEAD) + fi + else + # 普通提交:获取相对于上一个提交的变更 + CHANGED_FILES=$(git diff --name-only HEAD~1..HEAD 2>/dev/null || git diff --name-only $(git rev-list --max-parents=0 HEAD)..HEAD) + fi + echo "Changed files:" echo "$CHANGED_FILES" From a69d1ae1dd2cc51a120ad29b0f85a0009950d3f1 Mon Sep 17 00:00:00 2001 From: shaw Date: Mon, 4 Aug 2025 18:44:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=92=8CAPI=20Key=E7=AE=A1=E7=90=86=E7=9A=84?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 Claude Console 账号 supportedModels 导致的 be.join 错误 - 添加专属账号选择器组件,支持搜索和按创建时间倒序排序 - 修复搜索框图标与placeholder文字重叠的问题 - 修复选择共享账号池后显示文字不正确的问题 - 优化下拉框定位逻辑,解决超出视窗无法滚动的问题 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../src/components/accounts/AccountForm.vue | 28 +- .../components/apikeys/CreateApiKeyModal.vue | 93 +--- .../components/apikeys/EditApiKeyModal.vue | 125 ++--- .../src/components/common/AccountSelector.vue | 468 ++++++++++++++++++ 4 files changed, 557 insertions(+), 157 deletions(-) create mode 100644 web/admin-spa/src/components/common/AccountSelector.vue diff --git a/web/admin-spa/src/components/accounts/AccountForm.vue b/web/admin-spa/src/components/accounts/AccountForm.vue index eb252e55..10d469aa 100644 --- a/web/admin-spa/src/components/accounts/AccountForm.vue +++ b/web/admin-spa/src/components/accounts/AccountForm.vue @@ -870,7 +870,19 @@ const form = ref({ apiUrl: props.account?.apiUrl || '', apiKey: props.account?.apiKey || '', priority: props.account?.priority || 50, - supportedModels: props.account?.supportedModels?.join('\n') || '', + supportedModels: (() => { + const models = props.account?.supportedModels; + if (!models) return ''; + // 处理对象格式(Claude Console 的新格式) + if (typeof models === 'object' && !Array.isArray(models)) { + return Object.keys(models).join('\n'); + } + // 处理数组格式(向后兼容) + if (Array.isArray(models)) { + return models.join('\n'); + } + return ''; + })(), userAgent: props.account?.userAgent || '', rateLimitDuration: props.account?.rateLimitDuration || 60 }) @@ -1362,7 +1374,19 @@ watch(() => props.account, (newAccount) => { apiUrl: newAccount.apiUrl || '', apiKey: '', // 编辑模式不显示现有的 API Key priority: newAccount.priority || 50, - supportedModels: newAccount.supportedModels?.join('\n') || '', + supportedModels: (() => { + const models = newAccount.supportedModels; + if (!models) return ''; + // 处理对象格式(Claude Console 的新格式) + if (typeof models === 'object' && !Array.isArray(models)) { + return Object.keys(models).join('\n'); + } + // 处理数组格式(向后兼容) + if (Array.isArray(models)) { + return models.join('\n'); + } + return ''; + })(), userAgent: newAccount.userAgent || '', rateLimitDuration: newAccount.rateLimitDuration || 60 } diff --git a/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue b/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue index 4044b689..2020f74a 100644 --- a/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue +++ b/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue @@ -425,87 +425,27 @@
- + placeholder="请选择Claude账号" + default-option-text="使用共享账号池" + />
- + placeholder="请选择Gemini账号" + default-option-text="使用共享账号池" + />

@@ -665,6 +605,7 @@ import { showToast } from '@/utils/toast' import { useClientsStore } from '@/stores/clients' import { useApiKeysStore } from '@/stores/apiKeys' import { apiClient } from '@/config/api' +import AccountSelector from '@/components/common/AccountSelector.vue' const props = defineProps({ accounts: { diff --git a/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue b/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue index 87a42f6a..9b23dbb6 100644 --- a/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue +++ b/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue @@ -294,87 +294,27 @@

- + placeholder="请选择Claude账号" + default-option-text="使用共享账号池" + />
- + placeholder="请选择Gemini账号" + default-option-text="使用共享账号池" + />

@@ -538,6 +478,7 @@ import { useAuthStore } from '@/stores/auth' import { useClientsStore } from '@/stores/clients' import { useApiKeysStore } from '@/stores/apiKeys' import { apiClient } from '@/config/api' +import AccountSelector from '@/components/common/AccountSelector.vue' const props = defineProps({ apiKey: { @@ -638,11 +579,32 @@ const updateApiKey = async () => { concurrencyLimit: form.concurrencyLimit !== '' && form.concurrencyLimit !== null ? parseInt(form.concurrencyLimit) : 0, dailyCostLimit: form.dailyCostLimit !== '' && form.dailyCostLimit !== null ? parseFloat(form.dailyCostLimit) : 0, permissions: form.permissions, - claudeAccountId: form.claudeAccountId || null, - geminiAccountId: form.geminiAccountId || null, tags: form.tags } + // 处理Claude账户绑定(区分OAuth和Console) + if (form.claudeAccountId) { + if (form.claudeAccountId.startsWith('console:')) { + // Claude Console账户 + data.claudeConsoleAccountId = form.claudeAccountId.substring(8); + } else if (!form.claudeAccountId.startsWith('group:')) { + // Claude OAuth账户(非分组) + data.claudeAccountId = form.claudeAccountId; + } else { + // 分组 + data.claudeAccountId = form.claudeAccountId; + } + } else { + data.claudeAccountId = null; + } + + // Gemini账户绑定 + if (form.geminiAccountId) { + data.geminiAccountId = form.geminiAccountId; + } else { + data.geminiAccountId = null; + } + // 模型限制 - 始终提交这些字段 data.enableModelRestriction = form.enableModelRestriction data.restrictedModels = form.restrictedModels @@ -747,7 +709,12 @@ onMounted(async () => { form.concurrencyLimit = props.apiKey.concurrencyLimit || '' form.dailyCostLimit = props.apiKey.dailyCostLimit || '' form.permissions = props.apiKey.permissions || 'all' - form.claudeAccountId = props.apiKey.claudeAccountId || '' + // 处理 Claude 账号(区分 OAuth 和 Console) + if (props.apiKey.claudeConsoleAccountId) { + form.claudeAccountId = `console:${props.apiKey.claudeConsoleAccountId}` + } else { + form.claudeAccountId = props.apiKey.claudeAccountId || '' + } form.geminiAccountId = props.apiKey.geminiAccountId || '' form.restrictedModels = props.apiKey.restrictedModels || [] form.allowedClients = props.apiKey.allowedClients || [] diff --git a/web/admin-spa/src/components/common/AccountSelector.vue b/web/admin-spa/src/components/common/AccountSelector.vue new file mode 100644 index 00000000..da8ab6e8 --- /dev/null +++ b/web/admin-spa/src/components/common/AccountSelector.vue @@ -0,0 +1,468 @@ + + + + + \ No newline at end of file From 6427dcc85516d3776e77e6dd12fa8ca9704c0b8a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 Aug 2025 10:45:38 +0000 Subject: [PATCH 3/3] chore: sync VERSION file with release v1.1.72 [skip ci] --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 222c44e8..31d5ab0e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.71 +1.1.72