66 lines
3.4 KiB
JavaScript
66 lines
3.4 KiB
JavaScript
/**
|
||
* 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)
|