/** * OpenFang 真实响应数据模板 * * 用于 E2E 测试的 OpenFang API 响应数据模板。 * 基于 OpenFang Gateway Protocol v3 规范。 */ export const openFangResponses = { health: { status: 'ok', version: '0.4.0', uptime: 3600, }, status: { status: 'running', version: '0.4.0', agents_count: 1, active_sessions: 2, }, agents: [ { id: 'agent-default-001', name: 'Default Agent', state: 'Running', model: 'qwen3.5-plus', provider: 'bailian', created_at: '2026-01-01T00:00:00Z', }, ], agent: { id: 'agent-default-001', name: 'Default Agent', state: 'Running', model: 'qwen3.5-plus', provider: 'bailian', config: { temperature: 0.7, max_tokens: 4096, }, }, models: [ { id: 'qwen3.5-plus', name: 'Qwen 3.5 Plus', provider: 'bailian' }, { id: 'qwen3-72b', name: 'Qwen 3 72B', provider: 'bailian' }, { id: 'deepseek-v3', name: 'DeepSeek V3', provider: 'deepseek' }, ], hands: { hands: [ { id: 'hand-browser-001', name: 'Browser', description: '浏览器自动化能力包', status: 'idle', requirements_met: true, category: 'productivity', icon: '🌐', tool_count: 15, }, { id: 'hand-collector-001', name: 'Collector', description: '数据收集聚合能力包', status: 'idle', requirements_met: true, category: 'data', icon: '📊', tool_count: 8, }, { id: 'hand-researcher-001', name: 'Researcher', description: '深度研究能力包', status: 'idle', requirements_met: true, category: 'research', icon: '🔬', tool_count: 12, }, ], }, hand: { id: 'hand-browser-001', name: 'Browser', description: '浏览器自动化能力包', status: 'idle', requirements_met: true, category: 'productivity', icon: '🌐', provider: 'bailian', model: 'qwen3.5-plus', tools: ['navigate', 'click', 'type', 'screenshot', 'extract'], metrics: ['pages_visited', 'actions_taken', 'time_saved'], requirements: [ { description: 'Playwright installed', met: true }, { description: 'Browser binaries available', met: true }, ], }, handActivation: { instance_id: 'run-browser-001', status: 'running', }, handRuns: { runs: [ { runId: 'run-browser-001', status: 'completed', started_at: '2026-01-01T10:00:00Z', completed_at: '2026-01-01T10:05:00Z', result: { pages_visited: 5, actions_taken: 23 }, }, ], }, workflows: { workflows: [ { id: 'wf-001', name: 'Daily Report', description: '每日报告生成工作流', steps: 3, status: 'idle', created_at: '2026-01-01T00:00:00Z', }, ], }, workflow: { id: 'wf-001', name: 'Daily Report', description: '每日报告生成工作流', steps: [ { id: 'step-1', name: 'Collect Data', handName: 'Collector', params: {} }, { id: 'step-2', name: 'Analyze', handName: 'Researcher', params: {} }, { id: 'step-3', name: 'Generate Report', handName: 'Browser', params: {} }, ], status: 'idle', }, sessions: { sessions: [ { id: 'session-001', agent_id: 'agent-default-001', created_at: '2026-01-01T00:00:00Z', message_count: 10, }, ], }, config: { data_dir: '/Users/user/.openfang', default_model: 'qwen3.5-plus', log_level: 'info', }, quickConfig: { default_model: 'qwen3.5-plus', default_provider: 'bailian', temperature: 0.7, max_tokens: 4096, }, channels: { channels: [ { id: 'ch-001', name: 'Default', provider: 'bailian', model: 'qwen3.5-plus', enabled: true }, ], }, skills: { skills: [ { id: 'skill-001', name: 'Code Review', description: '代码审查技能', enabled: true }, { id: 'skill-002', name: 'Translation', description: '翻译技能', enabled: true }, ], }, triggers: { triggers: [ { id: 'trigger-001', name: 'Daily Trigger', type: 'schedule', enabled: true }, ], }, auditLogs: { logs: [ { id: 'audit-001', timestamp: '2026-01-01T10:00:00Z', action: 'hand.trigger', actor: 'user', result: 'success', details: { hand: 'Browser', runId: 'run-001' }, }, ], }, securityStatus: { encrypted_storage: true, audit_logging: true, device_pairing: 'paired', last_security_check: '2026-01-01T00:00:00Z', }, scheduledTasks: { tasks: [ { id: 'task-001', name: 'Daily Report', enabled: true, schedule: '0 9 * * *' }, ], }, }; export const streamEvents = { textDelta: (content: string) => ({ type: 'text_delta', content }), phaseDone: { type: 'phase', phase: 'done' }, phaseTyping: { type: 'phase', phase: 'typing' }, toolCall: (tool: string, input: unknown) => ({ type: 'tool_call', tool, input }), toolResult: (tool: string, output: unknown) => ({ type: 'tool_result', tool, output }), hand: (name: string, status: string, result?: unknown) => ({ type: 'hand', hand_name: name, hand_status: status, hand_result: result }), error: (code: string, message: string) => ({ type: 'error', code, message }), connected: { type: 'connected', session_id: 'session-001' }, agentsUpdated: { type: 'agents_updated', agents: ['agent-001'] }, }; export const gatewayFrames = { request: (id: number, method: string, params: unknown) => ({ type: 'req', id, method, params, }), response: (id: number, result: unknown) => ({ type: 'res', id, result, }), event: (event: unknown) => ({ type: 'event', event, }), pong: (id: number) => ({ type: 'pong', id, }), };