mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-11-04 00:42:14 +00:00
澄清 Codex 图片桥接与本地执行器边界
配置界面现在区分非 Responses Lite 的 hosted 桥接与客户端本地 image_gen,并准确描述账号 strip 策略。API Key Mode 同时提示完全重启 Codex 后新建 task,以重建客户端工具注册表。 Constraint: 兼容模式继续保持默认,Responses Lite 的本地工具由客户端与账号策略决定 Rejected: 写入 features.image_generation | 当前 Codex 已默认启用且仓库既有配置刻意省略该项 Confidence: high Scope-risk: narrow Reversibility: clean Directive: 图片桥接文案必须区分 hosted 注入、客户端声明和 image-only 路由 Tested: 前端 lint、typecheck、关键套件 93 项、定向套件 43 项 Not-tested: Codex Desktop 真实工具注册表重建 Co-authored-by: OmX <omx@oh-my-codex.dev>
This commit is contained in:
1 parent
2b5944fd6c
commit
9d1064badd
10 files changed
+60
-29
No files matched your search
@@ -1455,7 +1455,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- OpenAI Codex 图片工具统一策略(自动注入 + 客户端显式携带) -->
|
||||
<!-- OpenAI Codex hosted image_generation bridge policy -->
|
||||
<div
|
||||
v-if="account?.platform === 'openai' && (account?.type === 'oauth' || account?.type === 'setup-token' || account?.type === 'apikey')"
|
||||
class="border-t border-gray-200 pt-4 dark:border-dark-600"
|
||||
|
||||
@@ -771,6 +771,10 @@ describe('EditAccountModal', () => {
|
||||
|
||||
const wrapper = mountModal(account)
|
||||
|
||||
expect(wrapper.text()).toContain('admin.accounts.openai.codexImageTool')
|
||||
expect(wrapper.text()).toContain('admin.accounts.openai.codexImageToolDesc')
|
||||
expect(wrapper.text()).toContain('admin.accounts.openai.codexImageToolEnabledDesc')
|
||||
|
||||
await wrapper.get('button[data-testid="codex-image-tool-enabled"]').trigger('click')
|
||||
await wrapper.get('form#edit-account-form').trigger('submit.prevent')
|
||||
|
||||
@@ -809,6 +813,9 @@ describe('EditAccountModal', () => {
|
||||
|
||||
const wrapper = mountModal(account)
|
||||
|
||||
expect(wrapper.text()).toContain('admin.accounts.openai.codexImageToolBlock')
|
||||
expect(wrapper.text()).toContain('admin.accounts.openai.codexImageToolBlockDesc')
|
||||
|
||||
await wrapper.get('button[data-testid="codex-image-tool-block"]').trigger('click')
|
||||
await wrapper.get('form#edit-account-form').trigger('submit.prevent')
|
||||
|
||||
|
||||
@@ -100,6 +100,14 @@
|
||||
{{ t('keys.useKeyModal.openai.authModeApiKey') }}
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
v-if="codexAuthMode === 'api-key'"
|
||||
data-testid="codex-api-key-restart-notice"
|
||||
class="mt-3 flex items-start gap-2 border-l-2 border-amber-400 bg-amber-50 px-3 py-2 text-xs leading-5 text-amber-800 dark:border-amber-500 dark:bg-amber-950/30 dark:text-amber-200"
|
||||
>
|
||||
<Icon name="exclamationCircle" size="sm" class="mt-0.5 flex-shrink-0" />
|
||||
<p>{{ t('keys.useKeyModal.openai.authModeApiKeyRestartNotice') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- OS/Shell Tabs -->
|
||||
|
||||
@@ -267,6 +267,7 @@ describe('UseKeyModal', () => {
|
||||
expect(configToml).toContain('[features]\ngoals = true')
|
||||
expect(codeBlocks).toContain('{\n "OPENAI_API_KEY": "sk-test"\n}')
|
||||
expect(wrapper.text()).toContain('auth.json')
|
||||
expect(wrapper.find('[data-testid="codex-api-key-restart-notice"]').exists()).toBe(false)
|
||||
})
|
||||
|
||||
it('renders API Key Mode authorization in OpenAI Codex config', async () => {
|
||||
@@ -304,6 +305,19 @@ describe('UseKeyModal', () => {
|
||||
expect(configToml).not.toContain('image_generation')
|
||||
expect(codeBlocks).toContain('{\n "OPENAI_API_KEY": "sk-test"\n}')
|
||||
expect(wrapper.text()).toContain('auth.json')
|
||||
|
||||
const restartNotice = wrapper.get('[data-testid="codex-api-key-restart-notice"]')
|
||||
expect(restartNotice.text()).toContain(
|
||||
'keys.useKeyModal.openai.authModeApiKeyRestartNotice'
|
||||
)
|
||||
|
||||
await wrapper.get('[data-testid="codex-auth-mode-legacy"]').trigger('click')
|
||||
await nextTick()
|
||||
|
||||
expect(wrapper.find('[data-testid="codex-api-key-restart-notice"]').exists()).toBe(false)
|
||||
expect(wrapper.findAll('pre code').map((code) => code.text()).join('\n')).not.toContain(
|
||||
'x-openai-actor-authorization'
|
||||
)
|
||||
})
|
||||
|
||||
it('keeps legacy OpenAI Codex WebSocket config as the default', async () => {
|
||||
|
||||
Reference in new issue
Block a user