mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-19 04:27:00 +08:00
feat: 新增实验性微信卡片分享与自动部署能力
补充 Cloudflare Worker、R2 存储、微信 JS-SDK 签名与上传鉴权 增加自动部署 Skill 和配置引导文档 优化报告工具栏、微信卡片弹窗及窄屏响应式布局 补充 Worker 鉴权、卡片生成、过期清理与安全转义测试
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { mkdtempSync, rmSync } from 'fs'
|
||||
import { tmpdir } from 'os'
|
||||
import { join } from 'path'
|
||||
import { afterAll, describe, expect, it, vi } from 'vitest'
|
||||
import type { AIProviderConfig } from '../../src/shared/ai-provider'
|
||||
|
||||
const root = mkdtempSync(join(tmpdir(), 'tracememo-ai-vision-routing-'))
|
||||
|
||||
vi.mock('electron', () => ({
|
||||
app: { getPath: () => root },
|
||||
safeStorage: {
|
||||
isEncryptionAvailable: () => true,
|
||||
encryptString: (value: string) => Buffer.from(value),
|
||||
decryptString: (value: Buffer) => value.toString('utf8')
|
||||
}
|
||||
}))
|
||||
|
||||
import { AIProviderService } from '../../src/main/services/ai-provider-service'
|
||||
|
||||
const provider = (id: string, modelId: string, vision: boolean): AIProviderConfig => ({
|
||||
id,
|
||||
name: id === 'deepseek' ? 'DeepSeek' : 'OpenAI',
|
||||
type: 'openai-compatible',
|
||||
baseUrl: `https://${id}.example.test/v1`,
|
||||
auth: { type: 'none' },
|
||||
models: [
|
||||
{
|
||||
id: modelId,
|
||||
name: modelId,
|
||||
capabilities: { chat: true, vision, ocr: vision, longContext: true }
|
||||
}
|
||||
],
|
||||
defaultModel: modelId,
|
||||
advanced: { timeoutMs: 120_000, extraHeaders: {} }
|
||||
})
|
||||
|
||||
describe('AI provider vision routing', () => {
|
||||
afterAll(() => rmSync(root, { recursive: true, force: true }))
|
||||
|
||||
it('keeps DeepSeek as the text model while routing images to a verified vision model', () => {
|
||||
const service = new AIProviderService()
|
||||
expect(service.save(provider('deepseek', 'deepseek-chat', false)).success).toBe(true)
|
||||
expect(service.save(provider('sol-provider', 'gpt-5.6-sol', true)).success).toBe(true)
|
||||
expect(service.setDefault('deepseek').success).toBe(true)
|
||||
|
||||
expect(service.getRuntimeConfig()).toMatchObject({
|
||||
providerId: 'deepseek',
|
||||
model: 'deepseek-chat'
|
||||
})
|
||||
expect(service.getVisionRuntimeConfig()).toMatchObject({
|
||||
providerId: 'sol-provider',
|
||||
model: 'gpt-5.6-sol',
|
||||
configured: true,
|
||||
source: 'vision-capability'
|
||||
})
|
||||
})
|
||||
|
||||
it('reports unavailable when no configured model has vision capability', () => {
|
||||
const service = new AIProviderService()
|
||||
for (const item of service.list().providers) service.delete(item.id)
|
||||
expect(service.save(provider('deepseek', 'deepseek-chat', false)).success).toBe(true)
|
||||
|
||||
expect(service.getVisionRuntimeConfig()).toMatchObject({
|
||||
configured: false,
|
||||
model: '',
|
||||
source: 'unavailable'
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user