Files
inkreach-agent/apps/desktop/scripts/smoke-models.mjs
T

66 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* v0.3.0 冒烟:模型目录 / API key login-logout / setModel / 系统提示词
* 不打真实 LLM 请求;key 用假值(仅验证凭据写入与模型切换逻辑)。
*/
import { createAgentSessionServices, createAgentSessionRuntime, createAgentSessionFromServices, getAgentDir, SessionManager } from '@earendil-works/pi-coding-agent'
import { homedir } from 'node:os'
import { readFileSync, writeFileSync, mkdtempSync } from 'node:fs'
import { join } from 'node:path'
import { tmpdir } from 'node:os'
const cwd = homedir()
const agentDir = getAgentDir()
const services = await createAgentSessionServices({ cwd, agentDir })
const factory = async ({ cwd: nc, agentDir: na, sessionManager }) => {
const svc = nc === services.cwd && na === services.agentDir ? services : await createAgentSessionServices({ cwd: nc, agentDir: na })
const result = await createAgentSessionFromServices({ services: svc, sessionManager })
return { ...result, services: svc, diagnostics: svc.diagnostics }
}
const runtime = await createAgentSessionRuntime(factory, { cwd, agentDir, sessionManager: SessionManager.continueRecent(cwd) })
const mr = runtime.session.modelRuntime
// 1) 模型目录
const providers = mr.getProviders()
console.log('[smoke3] providers:', providers.map((p) => p.id).join(', '))
const anthropic = providers.find((p) => p.id === 'anthropic')
if (anthropic) {
const models = mr.getModels('anthropic')
console.log('[smoke3] anthropic models: %d (first: %s)', models.length, models[0]?.id)
// 2) login(假 key)→ listCredentials
const before = await mr.listCredentials()
await mr.login('anthropic', 'api_key', { prompt: async () => 'sk-smoke-fake-key', notify: async () => undefined })
const after = await mr.listCredentials()
console.log('[smoke3] credentials before=%d after=%d (anthropic=%s)', before.length, after.length, after.some((c) => c.providerId === 'anthropic' && c.type === 'api_key'))
// auth.json 应包含 anthropic 条目
const auth = JSON.parse(readFileSync(join(agentDir, 'auth.json'), 'utf8'))
console.log('[smoke3] auth.json has anthropic:', Boolean(auth.anthropic))
// 3) setModel(有凭据时允许)
const target = models[0]
await runtime.session.setModel(target, { persist: false })
console.log('[smoke3] setModel ok -> %s/%s', runtime.session.model?.provider, runtime.session.model?.id)
// 4) logout
await mr.logout('anthropic')
const finalCreds = await mr.listCredentials()
console.log('[smoke3] after logout, anthropic credential present:', finalCreds.some((c) => c.providerId === 'anthropic'))
} else {
console.log('[smoke3] anthropic not found in providers, skip key tests')
}
// 5) 系统提示词 override(独立 services,用 resourceLoaderOptions.systemPrompt)
const tmp = mkdtempSync(join(tmpdir(), 'aso-smoke-'))
const promptText = '你是冒烟测试助手。'
const svc2 = await createAgentSessionServices({ cwd, agentDir, resourceLoaderOptions: { systemPrompt: promptText } })
console.log('[smoke3] systemPrompt applied:', svc2.resourceLoader ? 'services-created' : 'fail')
const rt2 = await createAgentSessionFromServices({ services: svc2, sessionManager: SessionManager.inMemory(cwd) })
console.log('[smoke3] session systemPrompt startsWith expected:', rt2.session.systemPrompt.startsWith(promptText.slice(0, 8)))
await runtime.dispose()
writeFileSync(join(tmp, 'done'), '')
console.log('[smoke3] done')
process.exit(0)