fix(stores): align RPC methods with OpenClaw protocol and fix chat flow

- Fix channels store: use channels.status instead of channels.list
- Fix skills store: use skills.status instead of skills.list
- Fix chat store: correct chat.history response parsing (messages in payload)
- Fix chat store: handle chat.send async flow (ack + event streaming)
- Add chat event handling for streaming AI responses (delta/final/error)
- Wire gateway:chat-message IPC events to chat store
- Fix health check: use WebSocket status instead of nonexistent /health endpoint
- Fix waitForReady: probe via WebSocket instead of HTTP
- Gracefully degrade when methods are unsupported (no white screen)
This commit is contained in:
Haze
2026-02-06 02:38:18 +08:00
Unverified
parent 0f8e6f3f9e
commit b01952fba7
5 changed files with 186 additions and 48 deletions

View File

@@ -27,18 +27,27 @@ export const useSkillsStore = create<SkillsState>((set, get) => ({
set({ loading: true, error: null });
try {
// OpenClaw uses skills.status to get skill information
const result = await window.electron.ipcRenderer.invoke(
'gateway:rpc',
'skills.list'
) as { success: boolean; result?: Skill[]; error?: string };
'skills.status',
{}
) as { success: boolean; result?: { skills?: Skill[] } | Skill[]; error?: string };
if (result.success && result.result) {
set({ skills: result.result, loading: false });
// Handle both array and object response formats
const skills = Array.isArray(result.result)
? result.result
: (result.result.skills || []);
set({ skills, loading: false });
} else {
set({ error: result.error || 'Failed to fetch skills', loading: false });
// Don't show error for unsupported methods - just use empty list
set({ skills: [], loading: false });
}
} catch (error) {
set({ error: String(error), loading: false });
// Gateway might not support this method yet - gracefully degrade
console.warn('Failed to fetch skills:', error);
set({ skills: [], loading: false });
}
},