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:
@@ -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 / 订阅等级体系
|
||||
|
||||
Reference in New Issue
Block a user