refactor(desktop): split kernel_commands/pipeline_commands into modules, add SaaS client libs and gateway modules

Split monolithic kernel_commands.rs (2185 lines) and pipeline_commands.rs (1391 lines)
into focused sub-modules under kernel_commands/ and pipeline_commands/ directories.
Add gateway module (commands, config, io, runtime), health_check, and 15 new
TypeScript client libraries for SaaS relay, auth, admin, telemetry, and kernel
sub-systems (a2a, agent, chat, hands, skills, triggers).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-03-31 11:12:47 +08:00
parent d0ae7d2770
commit f79560a911
71 changed files with 8521 additions and 5997 deletions

View File

@@ -322,14 +322,17 @@ ALTER TABLE agent_templates ADD COLUMN source_id TEXT UNIQUE;
| 文件 | 变更 |
|------|------|
| `crates/zclaw-saas/migrations/` | 新增 migration: accounts 加 llm_routing, agent_templates 加扩展字段 |
| `crates/zclaw-saas/src/account/types.rs` | AccountInfo 增加 llm_routing 字段 |
| `crates/zclaw-saas/migrations/20260331000001_accounts_llm_routing.sql` | 新增: accounts 加 llm_routing 字段 |
| `crates/zclaw-saas/migrations/20260331000002_agent_templates_extensions.sql` | 新增: agent_templates 加 soul_content 等 9 个扩展字段 |
| `crates/zclaw-saas/src/account/types.rs` | UpdateAccountRequest 增加 llm_routing 字段 |
| `crates/zclaw-saas/src/account/service.rs` | update_account SQL 增加 llm_routing 列 |
| `crates/zclaw-saas/src/account/handlers.rs` | update_account 支持 llm_routing |
| `crates/zclaw-saas/src/auth/handlers.rs` | login/me 响应增加 llm_routing |
| `crates/zclaw-saas/src/agent_template/types.rs` | 扩展 Create/Update/Info 类型 |
| `crates/zclaw-saas/src/agent_template/service.rs` | 支持 soul_content 等新字段 |
| `crates/zclaw-saas/src/auth/types.rs` | AccountPublic 增加 llm_routing 字段 |
| `crates/zclaw-saas/src/auth/handlers.rs` | login/register/me 响应增加 llm_routing (4 个构建点) |
| `crates/zclaw-saas/src/agent_template/types.rs` | 扩展 Create/Update/Info 类型 + 9 个新字段 |
| `crates/zclaw-saas/src/agent_template/service.rs` | 支持 soul_content 等新字段 (考虑重构为 sqlx::FromRow) |
| `crates/zclaw-saas/src/agent_template/mod.rs` | 新增 /available 和 /:id/full 路由 |
| `crates/zclaw-saas/src/relay/key_pool.rs` | 加入 LRU 次排序 |
| `crates/zclaw-saas/src/relay/key_pool.rs` | select_best_key 加入 LRU 次排序 |
| `crates/zclaw-saas/src/scheduler.rs` | 新增 key_usage_window 清理任务 |
| `crates/zclaw-saas/src/db.rs` | 扩展种子模板数据 |
@@ -342,21 +345,60 @@ ALTER TABLE agent_templates ADD COLUMN source_id TEXT UNIQUE;
| `admin-v2/src/pages/AgentTemplates.tsx` | 创建/编辑 Modal 增加扩展字段 |
| `admin-v2/src/services/providers.ts` | 接入已有的 addKey/toggleKey/deleteKey |
| `admin-v2/src/services/agent-templates.ts` | 新增 getFull 方法 |
| `admin-v2/src/types/index.ts` | 扩展类型定义 |
| `admin-v2/src/types/index.ts` | 扩展 AccountPublic 和 AgentTemplate 类型定义 |
### Desktop (TypeScript)
| 文件 | 变更 |
|------|------|
| `desktop/src/store/saasStore.ts` | 增加 llm_routing 解析 + fetchAvailableTemplates |
| `desktop/src/store/connectionStore.ts` | connect() 按 routing 模式选择路径 |
| `desktop/src/store/agentStore.ts` | 新增 createFromTemplate() |
| `desktop/src/store/saasStore.ts` | 增加 llm_routing 解析 + fetchAvailableTemplates + availableTemplates 状态 |
| `desktop/src/store/connectionStore.ts` | connect() 按 llm_routing 覆盖 localStorage connectionMode |
| `desktop/src/store/agentStore.ts` | 新增 createFromTemplate() + Clone 接口增加 source_template_id |
| `desktop/src/components/AgentOnboardingWizard.tsx` | 新增 Step 0: 模板选择 |
| `desktop/src/lib/saas-client.ts` | 新增 fetchAvailableTemplates + fetchTemplateFull |
| `desktop/src/lib/saas-client.ts` | SaaSAccountInfo 增加 llm_routing; 新增 fetchAvailableTemplates + fetchTemplateFull |
---
## 8. 不在范围内
## 8. 关键设计决策说明
### 8.1 llm_routing 优先级规则
Desktop 端 `connectionStore.connect()` 的路由决策逻辑:
```
1. 读取 saasStore.account.llm_routing (Admin 配置)
2. 如果 llm_routing === 'relay' → 强制使用 SaaSClient忽略 localStorage connectionMode
3. 如果 llm_routing === 'local' → 使用 KernelClient
4. llm_routing 优先级 > localStorage connectionMode
```
管理员对路由模式有最终控制权。用户无法通过修改 localStorage 绕过 Admin 配置。
### 8.2 模板获取失败降级
登录时模板获取 (`GET /agent-templates/available`) 失败时:
- 不阻塞登录流程
- saasStore.availableTemplates 设为空数组
- AgentOnboardingWizard Step 0 显示"模板加载失败"提示 + "空白 Agent"入口
- 模板功能降级为不可用,不影响核心聊天
### 8.3 模板引用不可用工具
模板指定 `tools: ["browser", "researcher"]` 但 Desktop 端某工具不可用时:
- 创建 Agent 时静默跳过不可用的工具
- Agent 创建后仍可正常使用,只是缺少该工具能力
- 在 Agent 详情中标注"部分工具不可用"
### 8.4 source_id 唯一约束
使用部分索引替代列级 UNIQUE 约束,允许 NULL 值:
```sql
CREATE UNIQUE INDEX idx_agent_templates_source_id ON agent_templates(source_id) WHERE source_id IS NOT NULL;
```
---
## 9. 不在范围内
以下事项本次设计不涉及:
- AccountTier / 订阅等级体系