40 lines
1.6 KiB
JavaScript
40 lines
1.6 KiB
JavaScript
/**
|
|
* pi SDK 集成冒烟测试(与 src/main/pi/agent-service.ts 相同的调用路径)
|
|
* 用法:node scripts/smoke.mjs
|
|
* 验证点:会话创建、事件订阅、prompt 在无凭据时的报错传播。
|
|
*/
|
|
import { createAgentSession } from '@earendil-works/pi-coding-agent'
|
|
import { homedir } from 'node:os'
|
|
|
|
const events = []
|
|
let settled = false
|
|
|
|
console.log('[smoke] creating session (cwd=%s)...', homedir())
|
|
const { session } = await createAgentSession({ cwd: homedir() })
|
|
console.log('[smoke] session created: id=%s model=%s/%s', session.sessionId, session.model?.provider ?? '-', session.model?.id ?? '-')
|
|
|
|
session.subscribe((event) => {
|
|
events.push(event.type)
|
|
if (event.type === 'message_update' && event.assistantMessageEvent?.type?.endsWith('_delta')) {
|
|
const d = event.assistantMessageEvent.delta ?? ''
|
|
process.stdout.write(d)
|
|
}
|
|
})
|
|
|
|
try {
|
|
await session.prompt('回复"链路正常"两个字即可,不要调用任何工具。')
|
|
console.log('\n[smoke] prompt resolved; event sequence:', [...new Set(events)].join(' -> '))
|
|
const last = session.getLastAssistantText()
|
|
console.log('[smoke] last assistant text:', last ? JSON.stringify(last.slice(0, 120)) : '(none)')
|
|
settled = true
|
|
} catch (err) {
|
|
console.log('\n[smoke] prompt rejected as expected (no credentials):', err instanceof Error ? err.message : err)
|
|
}
|
|
|
|
const stats = session.getSessionStats()
|
|
console.log('[smoke] stats:', JSON.stringify({ messages: session.messages.length, cost: stats.cost }))
|
|
console.log('[smoke] active tools:', session.getActiveToolNames().join(', '))
|
|
session.dispose()
|
|
console.log('[smoke] done, settled=%s', String(settled))
|
|
process.exit(0)
|