try-claude-adapter.ts 1.9 KB

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