v0.3.0: 模型与设置(目录/API key/模型切换/系统提示词)

This commit is contained in:
Rick Ye
2026-09-05 09:41:57 +08:00
parent 9984e2a427
commit fe70cb0f71
11 changed files with 631 additions and 8 deletions
+65
View File
@@ -0,0 +1,65 @@
/**
* 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)