| 1234567891011121314151617181920212223242526272829303132 |
- // 手动验证 ClaudeProvider:审批流、越权拦截、事件映射。
- // 用法:pnpm tsx scripts/try-claude-adapter.ts <workspaceDir> <permissionMode> <prompt>
- import type { PermissionMode } from '@agent-server/shared'
- import { ClaudeProvider } from '../src/providers/claude/adapter'
- import { resolveAccess } from '../src/services/access-policy'
- import { defaultSettings } from '../src/services/settings'
- const [ws = process.cwd(), mode = 'ask', prompt = 'hi'] = process.argv.slice(2)
- const settings = defaultSettings()
- settings.providers.claude.defaultModel = 'haiku'
- const access = resolveAccess({
- policy: { mode: 'restricted', read: [], write: [], deny: [] },
- knowledgeRoots: [], selectedKnowledgeRootIds: [], workspaceDir: ws, settings,
- })
- const ac = new AbortController()
- const res = await new ClaudeProvider().run({
- sessionId: 'ses_test', runId: 'run_test', model: 'haiku', permissionMode: mode as PermissionMode,
- providerSessionId: null, workspaceDir: ws, systemPromptAppend: '', allowedTools: [], disallowedTools: [], skills: 'all',
- plugins: [], input: { text: prompt, images: [], attachments: [] }, access, settings, signal: ac.signal,
- emit: (type, payload) => {
- if (type === 'message.delta' || type === 'reasoning.delta') return
- console.log(`[event] ${type}`, JSON.stringify(payload).slice(0, Number(process.env.EVENT_MAX ?? 220)))
- },
- interact: async req => {
- console.log('[interact]', JSON.stringify(req).slice(0, 300))
- return req.kind === 'approval' ? { resolution: 'allowed', scope: 'once' } : { resolution: 'answered', answers: { '0': req.questions[0]!.options[0]!.label } }
- },
- setProviderSessionId: id => console.log('[providerSessionId]', id),
- audit: (kind, summary) => console.log(`[audit] ${kind}: ${summary}`),
- log: { info: () => {}, warn: (o: object) => console.log('[warn]', JSON.stringify(o).slice(0, 200)), error: (o: object) => console.log('[error]', o) },
- })
- console.log('[result]', JSON.stringify(res))
|