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

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)