docs(claude): restructure documentation management and add feedback system
- Restructure §8 from "文档沉淀规则" to "文档管理规则" with 4 subsections - Add docs/ structure with features/ and knowledge-base/ directories - Add feature documentation template with 7 sections (概述/设计初衷/技术设计/预期作用/实际效果/演化路线/头脑风暴) - Add feature update trigger matrix (新增/修改/完成/问题/反馈) - Add documentation quality checklist - Add §16
This commit is contained in:
@@ -1,178 +1,171 @@
|
||||
# ZCLAW Gateway 连接稳定性与 API 修复计划
|
||||
# ZCLAW L4 自我演化能力实现计划
|
||||
|
||||
## Context
|
||||
|
||||
**问题背景**: 用户报告"Gateway 连接不稳定",通过 Chrome DevTools 诊断发现:
|
||||
- WebSocket 连接和聊天功能**实际正常工作**
|
||||
- 真正的问题是 **6 个 API 端点返回 404**,大量错误日志被误认为是连接问题
|
||||
**背景**: ZCLAW 已完成 Agent 智能演化 Phase 1-4(317 测试通过),当前成熟度达到 L3+(主动智能)。
|
||||
|
||||
**诊断结果**:
|
||||
| 项目 | 状态 |
|
||||
|------|------|
|
||||
| WebSocket 连接 | ✅ 正常 |
|
||||
| 消息发送/流式响应 | ✅ 正常 |
|
||||
| 核心 API (agents, hands, workflows) | ✅ 正常 |
|
||||
| 6 个 API 端点 | ❌ 404 错误 |
|
||||
**L4 目标**: 实现"完整自主行为优化循环" - Agent 能够自我修改行为和知识,无需人工干预即可持续进化。
|
||||
|
||||
**目标**:
|
||||
1. P0: 修复 6 个 404 API 端点(通过前端 fallback 降级)
|
||||
2. P1: 增强连接稳定性(心跳机制 + 改进重连策略)
|
||||
**当前状态**:
|
||||
| 成熟度级别 | 状态 |
|
||||
|-----------|------|
|
||||
| L0 - 无状态响应 | ✅ 已超越 |
|
||||
| L1 - 会话感知 | ✅ 已超越 |
|
||||
| L2 - 持久记忆 | ✅ 已达成 |
|
||||
| L3 - 主动智能 | ✅ 已达成 |
|
||||
| L4 - 自我演化 | ⏳ 部分实现 |
|
||||
|
||||
**L4 缺口**:
|
||||
1. 4 个 UI 组件未实现(SwarmDashboard、SkillMarket、HeartbeatConfig、ReflectionLog)
|
||||
2. 3 个引擎仍是规则驱动,需升级为 LLM 驱动
|
||||
3. 身份文件变更仍需用户审批(非自主)
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: P0 - API Fallback 降级处理
|
||||
## Phase 1: 缺失 UI 组件补全(优先级:P0)
|
||||
|
||||
### 1.1 创建 API Fallback 模块
|
||||
### 1.1 SwarmDashboard - 多 Agent 协作面板
|
||||
|
||||
**新建文件**: `desktop/src/lib/api-fallbacks.ts`
|
||||
**新建文件**: `desktop/src/components/SwarmDashboard.tsx`
|
||||
|
||||
功能:
|
||||
- 显示当前协作任务列表
|
||||
- 实时展示子任务分配和状态
|
||||
- 支持手动触发协作任务
|
||||
- 查看协作结果汇总
|
||||
|
||||
### 1.2 SkillMarket - 技能市场 UI
|
||||
|
||||
**新建文件**: `desktop/src/components/SkillMarket.tsx`
|
||||
|
||||
功能:
|
||||
- 浏览可用技能(12 个内置 + 自定义)
|
||||
- 按关键词/能力标签搜索
|
||||
- 一键安装/启用技能
|
||||
- 查看技能详情和使用统计
|
||||
|
||||
### 1.3 HeartbeatConfig - 心跳配置 UI
|
||||
|
||||
**新建文件**: `desktop/src/components/HeartbeatConfig.tsx`
|
||||
|
||||
功能:
|
||||
- 配置心跳间隔(默认 30 分钟)
|
||||
- 启用/禁用内置检查项
|
||||
- 设置免打扰时段
|
||||
- 选择主动性级别(静默/轻度/标准/自主)
|
||||
|
||||
### 1.4 ReflectionLog - 反思日志 UI
|
||||
|
||||
**新建文件**: `desktop/src/components/ReflectionLog.tsx`
|
||||
|
||||
功能:
|
||||
- 查看反思历史(模式分析、改进建议)
|
||||
- 审批身份文件变更提议
|
||||
- 回滚到历史人格版本
|
||||
- 手动触发反思
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: LLM 驱动升级(优先级:P1)
|
||||
|
||||
### 2.1 ReflectionEngine 升级
|
||||
|
||||
**修改文件**: `desktop/src/lib/reflection-engine.ts`
|
||||
|
||||
当前:规则模式检测(关键词匹配)
|
||||
目标:LLM 语义分析 + 深度反思
|
||||
|
||||
```typescript
|
||||
// 提供 6 个 404 API 的降级数据
|
||||
export interface QuickConfigFallback { ... }
|
||||
export interface WorkspaceInfoFallback { ... }
|
||||
export interface UsageStatsFallback { ... }
|
||||
export interface PluginStatusFallback { ... }
|
||||
export interface ScheduledTaskFallback { ... }
|
||||
|
||||
export function getQuickConfigFallback(): QuickConfigFallback { ... }
|
||||
export function getWorkspaceInfoFallback(): WorkspaceInfoFallback { ... }
|
||||
export function getUsageStatsFallback(sessions: Session[]): UsageStatsFallback { ... }
|
||||
export function getPluginStatusFallback(skills: SkillInfo[]): PluginStatusFallback { ... }
|
||||
export function getScheduledTasksFallback(triggers: Trigger[]): ScheduledTaskFallback[] { ... }
|
||||
```
|
||||
|
||||
### 1.2 更新 gateway-client.ts
|
||||
|
||||
为每个 404 API 添加结构化 fallback:
|
||||
|
||||
```typescript
|
||||
async getQuickConfig(): Promise<any> {
|
||||
try {
|
||||
return await this.restGet('/api/config/quick');
|
||||
} catch (error) {
|
||||
if ((error as any).status === 404) {
|
||||
return { quickConfig: getQuickConfigFallback() };
|
||||
}
|
||||
throw error;
|
||||
// 升级后的 reflect 方法
|
||||
async reflect(agentId: string, options?: { useLLM?: boolean }): Promise<ReflectionResult> {
|
||||
if (options?.useLLM && this.llmAvailable) {
|
||||
return this.llmReflect(agentId);
|
||||
}
|
||||
return this.ruleBasedReflect(agentId); // fallback
|
||||
}
|
||||
```
|
||||
|
||||
### 1.3 更新 gatewayStore.ts
|
||||
### 2.2 ContextCompactor 升级
|
||||
|
||||
在数据加载时使用 fallback:
|
||||
**修改文件**: `desktop/src/lib/context-compactor.ts`
|
||||
|
||||
```typescript
|
||||
loadUsageStats: async () => {
|
||||
try {
|
||||
const stats = await get().client.getUsageStats();
|
||||
set({ usageStats: stats });
|
||||
} catch {
|
||||
const fallback = getUsageStatsFallback(get().sessions);
|
||||
set({ usageStats: fallback });
|
||||
}
|
||||
},
|
||||
```
|
||||
当前:规则摘要(截断 + 格式化)
|
||||
目标:LLM 高质量摘要 + 关键信息保留
|
||||
|
||||
### 2.3 MemoryExtractor 升级
|
||||
|
||||
**修改文件**: `desktop/src/lib/memory-extractor.ts`
|
||||
|
||||
当前:正则匹配 + 关键词检测
|
||||
目标:LLM 语义重要性评分 + 智能分类
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: P1 - 心跳机制
|
||||
## Phase 3: 自主行为授权(优先级:P2)
|
||||
|
||||
### 2.1 添加心跳字段
|
||||
### 3.1 分级授权系统
|
||||
|
||||
**修改文件**: `desktop/src/lib/gateway-client.ts`
|
||||
**新建文件**: `desktop/src/lib/autonomy-manager.ts`
|
||||
|
||||
```typescript
|
||||
// 新增私有字段
|
||||
private heartbeatInterval: number | null = null;
|
||||
private heartbeatTimeout: number | null = null;
|
||||
private missedHeartbeats: number = 0;
|
||||
private static readonly HEARTBEAT_INTERVAL = 30000; // 30秒
|
||||
private static readonly HEARTBEAT_TIMEOUT = 10000; // 10秒
|
||||
private static readonly MAX_MISSED_HEARTBEATS = 3;
|
||||
```
|
||||
|
||||
### 2.2 心跳方法
|
||||
|
||||
```typescript
|
||||
private startHeartbeat(): void { ... }
|
||||
private stopHeartbeat(): void { ... }
|
||||
private sendHeartbeat(): void { ... }
|
||||
private handlePong(): void { ... }
|
||||
```
|
||||
|
||||
### 2.3 集成到连接流程
|
||||
|
||||
- `connect()` 成功后调用 `startHeartbeat()`
|
||||
- `cleanup()` 时调用 `stopHeartbeat()`
|
||||
- `handleFrame()` 处理 `pong` 响应
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: P1 - 改进重连策略
|
||||
|
||||
### 3.1 新增配置选项
|
||||
|
||||
```typescript
|
||||
interface GatewayClientOptions {
|
||||
maxReconnectAttempts?: number; // -1=无限, 0=禁用, 默认10
|
||||
reconnectBackoff?: 'linear' | 'exponential' | 'fixed';
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 更新 scheduleReconnect
|
||||
|
||||
- 支持无限重连模式 (`maxReconnectAttempts: -1`)
|
||||
- 添加重连事件通知 (`reconnecting`, `reconnect_failed`)
|
||||
- 改进退避算法
|
||||
|
||||
### 3.3 流式 WebSocket 重连
|
||||
|
||||
为 `openfangWs` 添加重连逻辑:
|
||||
|
||||
```typescript
|
||||
private streamState = { agentId: null, sessionId: null, lastMessage: null };
|
||||
private scheduleStreamReconnect(runId: string): void { ... }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: UI 集成
|
||||
|
||||
### 4.1 创建 ConnectionStatus 组件
|
||||
|
||||
**新建文件**: `desktop/src/components/ConnectionStatus.tsx`
|
||||
|
||||
```typescript
|
||||
export function ConnectionStatus() {
|
||||
const { connectionState } = useGatewayStore();
|
||||
|
||||
const statusConfig = {
|
||||
disconnected: { color: 'red', label: '已断开', icon: WifiOff },
|
||||
connecting: { color: 'yellow', label: '连接中...', icon: Loader2 },
|
||||
connected: { color: 'green', label: '已连接', icon: Wifi },
|
||||
reconnecting: { color: 'orange', label: '重连中...', icon: RefreshCw },
|
||||
interface AutonomyConfig {
|
||||
level: 'supervised' | 'assisted' | 'autonomous';
|
||||
allowedActions: {
|
||||
memoryAutoSave: boolean; // 自动保存记忆
|
||||
identityAutoUpdate: boolean; // 自动更新身份文件
|
||||
skillAutoInstall: boolean; // 自动安装技能
|
||||
selfModification: boolean; // 自我修改行为
|
||||
};
|
||||
approvalThreshold: {
|
||||
importance: number; // 重要性低于此值自动执行
|
||||
risk: 'low' | 'medium' | 'high'; // 风险等级
|
||||
};
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 集成到 ChatArea
|
||||
### 3.2 安全边界
|
||||
|
||||
在聊天区域顶部显示连接状态指示器。
|
||||
- 高风险操作(删除记忆、修改 SOUL.md)始终需确认
|
||||
- 所有自主操作记录审计日志
|
||||
- 支持一键回滚到任意历史状态
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: OpenViking 深度集成(优先级:P2)
|
||||
|
||||
### 4.1 记忆后端迁移
|
||||
|
||||
**修改文件**: `desktop/src/lib/agent-memory.ts`
|
||||
|
||||
从 localStorage → SQLite + OpenViking API
|
||||
|
||||
### 4.2 语义搜索
|
||||
|
||||
**新建文件**: `desktop/src/lib/vector-memory.ts`
|
||||
|
||||
```typescript
|
||||
interface VectorMemorySearch {
|
||||
embed(text: string): Promise<Float32Array>;
|
||||
semanticSearch(query: string, topK: number): Promise<MemoryEntry[]>;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键文件
|
||||
|
||||
| 文件 | 修改类型 | 说明 |
|
||||
|------|----------|------|
|
||||
| `desktop/src/lib/api-fallbacks.ts` | 新建 | API 降级数据 |
|
||||
| `desktop/src/lib/gateway-client.ts` | 修改 | 心跳 + 重连 + fallback |
|
||||
| `desktop/src/store/gatewayStore.ts` | 修改 | 使用 fallback |
|
||||
| `desktop/src/components/ConnectionStatus.tsx` | 新建 | 连接状态 UI |
|
||||
| `desktop/src/components/ChatArea.tsx` | 修改 | 集成状态指示器 |
|
||||
| `tests/desktop/gatewayStore.test.ts` | 修改 | 测试覆盖 |
|
||||
| 文件 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `desktop/src/components/SwarmDashboard.tsx` | 新建 | 协作任务面板 |
|
||||
| `desktop/src/components/SkillMarket.tsx` | 新建 | 技能市场 |
|
||||
| `desktop/src/components/HeartbeatConfig.tsx` | 新建 | 心跳配置 |
|
||||
| `desktop/src/components/ReflectionLog.tsx` | 新建 | 反思日志 |
|
||||
| `desktop/src/lib/autonomy-manager.ts` | 新建 | 自主授权管理 |
|
||||
| `desktop/src/lib/vector-memory.ts` | 新建 | 向量记忆搜索 |
|
||||
| `desktop/src/lib/reflection-engine.ts` | 修改 | LLM 升级 |
|
||||
| `desktop/src/lib/context-compactor.ts` | 修改 | LLM 升级 |
|
||||
| `desktop/src/lib/memory-extractor.ts` | 修改 | LLM 升级 |
|
||||
| `desktop/src/lib/agent-memory.ts` | 修改 | SQLite 迁移 |
|
||||
|
||||
---
|
||||
|
||||
@@ -180,30 +173,33 @@ export function ConnectionStatus() {
|
||||
|
||||
### 测试清单
|
||||
|
||||
**P0 - API Fallback**:
|
||||
- [ ] 启动应用,检查控制台无 404 错误
|
||||
- [ ] 用量统计面板显示数据(即使 API 404)
|
||||
- [ ] 设置页面显示配置(即使 API 404)
|
||||
**Phase 1 - UI 组件**:
|
||||
- [ ] SwarmDashboard 显示协作任务
|
||||
- [ ] SkillMarket 搜索和安装技能
|
||||
- [ ] HeartbeatConfig 保存配置
|
||||
- [ ] ReflectionLog 审批变更
|
||||
|
||||
**P1 - 心跳**:
|
||||
- [ ] 连接后空闲 5 分钟,连接保持
|
||||
- [ ] 检查 WebSocket 流量有 ping/pong 帧
|
||||
**Phase 2 - LLM 升级**:
|
||||
- [ ] ReflectionEngine 使用 LLM 分析
|
||||
- [ ] ContextCompactor 生成高质量摘要
|
||||
- [ ] MemoryExtractor 语义重要性评分
|
||||
|
||||
**P1 - 重连**:
|
||||
- [ ] 关闭 OpenFang,显示"重连中"
|
||||
- [ ] 重启 OpenFang,自动重连成功
|
||||
- [ ] 聊天中断开后自动恢复
|
||||
**Phase 3 - 自主授权**:
|
||||
- [ ] 低风险操作自动执行
|
||||
- [ ] 高风险操作需确认
|
||||
- [ ] 审计日志完整
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
pnpm vitest run tests/desktop/gatewayStore.test.ts
|
||||
pnpm vitest run tests/desktop/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Implementation Sequence
|
||||
|
||||
1. **Day 1**: Phase 1 - API Fallbacks
|
||||
2. **Day 2**: Phase 2 - Heartbeat + Phase 3 - Reconnection
|
||||
3. **Day 3**: Phase 4 - UI Integration + Testing
|
||||
1. **Week 1**: Phase 1 - UI 组件(4 个组件)
|
||||
2. **Week 2**: Phase 2 - LLM 升级(3 个引擎)
|
||||
3. **Week 3**: Phase 3 - 自主授权 + Phase 4 - OpenViking
|
||||
4. **Week 4**: 集成测试 + 文档更新
|
||||
|
||||
Reference in New Issue
Block a user