Files
XCClaw/xcclaw-system.md
ssdfasd 4f9571b21c feat: initial XCClaw基础架构
- 基于 FastAPI 的 Web API 服务
- OpenCode API 客户端封装
- 会话管理器(同步/异步任务执行)
- APScheduler 定时任务调度
- 完整的 REST API 端点
2026-03-10 18:27:44 +08:00

333 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# XCClaw 系统设计
## 一、系统定位
XCClaw 基于 OpenCode Agent是桌面本地的个人 AI 助手
**核心理念**:以 OpenCode 会话为最小执行单元,通过多种触发方式调度任务,实现本地化的 AI 任务执行系统。
---
## 二、核心概念
### 最小执行单元OpenCode 会话
1 个会话 = 1 个独立的工作空间 + 1 个对话上下文 + 执行能力
```
会话生命周期:
创建 → 加载上下文 → 执行 Prompt → 流式输出 → 返回结果 → 销毁/保留
```
---
## 三、调度模式
| 模式 | 描述 | 触发方式 | 适用场景 |
|------|------|----------|----------|
| **即时模式** | 立即创建会话,执行完销毁 | 快捷键/按钮 | 简单询问、快速任务 |
| **常驻模式** | 启动持久会话,可多次交互 | 托盘/面板 | 持续对话、复杂任务 |
| **定时模式** | 定时创建会话执行 | Cron 配置 | 定期数据抓取、报告生成 |
| **队列模式** | 任务进入队列,依次执行 | API/面板 | 批量处理、长链任务 |
---
## 四、会话类型
### 1. 即时会话Ephemeral Session
- 每次任务创建新会话
- 执行完成后自动销毁
- 适合:简单任务、一次性操作
- 资源占用:低
### 2. 常驻会话Persistent Session
- 启动后保持运行状态
- 可多次交互,累积上下文
- 适合:复杂项目、多轮对话
- 资源占用:高
### 3. 定时会话Scheduled Session
- 由定时器触发创建
- 可配置是否保留会话
- 适合:周期性任务
- 资源占用:按需
---
## 五、任务调度
### 5.1 即时任务调度
```
用户触发 → 创建会话 → 执行 → 返回结果 → 销毁会话
```
**示例**
- 用户按下 Ctrl+Shift+C 快捷键
- 弹出输入框,输入 "帮我整理桌面文件"
- 系统创建即时会话执行
- 完成后显示结果,自动销毁会话
### 5.2 定时任务调度
```
Cron 触发 → 创建会话 → 执行 → 桌面通知 → 销毁/保留会话
```
**配置示例**
```json
{
"name": "晨间新闻摘要",
"trigger": "0 9 * * *",
"prompt": "帮我抓取今天的技术新闻摘要",
"sessionType": "ephemeral",
"notifyOnComplete": true
}
```
### 5.3 任务链调度
```
任务A → 结果传递给任务B → 结果传递给任务C → 汇总结果
```
**示例场景**:整理项目代码结构
```
Step 1: 会话A执行 "列出 src 目录下所有文件"
Step 2: 会话B继承上下文 "分析 main.ts 的核心逻辑"
Step 3: 会话C继承上下文 "生成代码结构文档"
Step 4: 汇总结果 → 桌面通知用户
```
**关键设计点**
- 链式调用:会话 N 的输出作为会话 N+1 的输入
- 上下文传递:可选择继承上一个会话的上下文,或开启全新会话
- 错误处理:某步骤失败可选择重试或跳过
### 5.4 队列调度
```
用户提交多个任务
┌─────────────────┐
│ 任务队列 │
│ [1] [2] [3]... │ ← 按优先级/时间排序
└────────┬────────┘
▼ 串行/并行执行
┌─────────────────┐
│ 执行单元 │ ← OpenCode 会话
│ 会话A → 完成 │
└────────┬────────┘
┌─────────────────┐
│ 任务2 开始 │
│ 会话B → ... │
└─────────────────┘
```
---
## 六、触发入口
| 入口 | 操作 | 行为 |
|------|------|------|
| **快捷键** | 按下 Ctrl+Shift+C | 弹出输入框 → 创建即时会话 |
| **托盘图标** | 点击"新对话" | 创建常驻会话 |
| **Web 面板** | 点击"执行"按钮 | 根据配置创建会话 |
| **定时任务** | Cron 触发 | 创建临时会话,执行完销毁 |
| **外部 API** | POST /api/task | 根据 payload 创建会话 |
---
## 七、OpenCode 服务集成
### 7.1 服务启动
```bash
# 启动 OpenCode HTTP 服务
opencode serve --port 4096 --hostname 127.0.0.1
```
服务默认端口 4096支持参数
- `--port`: 端口号
- `--hostname`: 监听地址
- `--cors`: 允许跨域访问(可多次指定)
### 7.2 会话管理 API
OpenCode 服务器提供 REST API 进行会话管理:
| 方法 | 路径 | 说明 |
|------|------|------|
| `GET` | `/api/xcclaw/session` | 列出所有会话 |
| `POST` | `/api/xcclaw/session` | 创建新会话 (`{ parentID?, title? }`) |
| `GET` | `/api/xcclaw/session/:id` | 获取会话详情 |
| `DELETE` | `/api/xcclaw/session/:id` | 删除会话 |
| `PATCH` | `/api/xcclaw/session/:id` | 更新会话属性 |
| `GET` | `/api/xcclaw/session/:id/children` | 获取子会话 |
| `POST` | `/api/xcclaw/session/:id/abort` | 中止运行中的会话 |
| `POST` | `/api/xcclaw/session/:id/fork` | 叉一个会话 |
### 7.3 消息交互 API
| 方法 | 路径 | 说明 |
|------|------|------|
| `POST` | `/api/xcclaw/session/:id/message` | 发送消息并等待响应 |
| `POST` | `/api/xcclaw/session/:id/prompt_async` | 异步发送消息(不等待响应) |
| `GET` | `/api/xcclaw/session/:id/message` | 列出消息 (`?limit=50`) |
| `GET` | `/api/xcclaw/session/:id/message/:messageID` | 获取消息详情 |
| `POST` | `/api/xcclaw/session/:id/command` | 执行 slash 命令 |
| `POST` | `/api/xcclaw/session/:id/shell` | 运行 shell 命令 |
### 7.4 会话调用示例
```bash
# 1. 创建会话
curl -X POST http://localhost:4096/api/xcclaw/session \
-H "Content-Type: application/json" \
-d '{"title": "整理桌面文件"}'
# 2. 发送消息执行任务
curl -X POST http://localhost:4096/api/xcclaw/session/{session-id}/message \
-H "Content-Type: application/json" \
-d '{"parts": [{"type": "text", "text": "帮我整理桌面文件"}]}'
# 3. 异步任务(不等待响应)
curl -X POST http://localhost:4096/api/xcclaw/session/{session-id}/prompt_async \
-H "Content-Type: application/json" \
-d '{"parts": [{"type": "text", "text": "执行复杂任务"}]}'
# 4. 查询会话状态
curl http://localhost:4096/api/xcclaw/session/status
# 5. 中止会话
curl -X POST http://localhost:4096/api/xcclaw/session/{session-id}/abort
```
### 7.5 任务调度与 OpenCode 会话映射
```
即时任务 → POST /api/xcclaw/session → POST /api/xcclaw/session/:id/message → 销毁
常驻任务 → POST /api/xcclaw/session → 保留 sessionID → 多次 POST /api/xcclaw/session/:id/message
定时任务 → Cron → POST /api/xcclaw/session → POST /api/xcclaw/session/:id/prompt_async → 通知
```
---
## 八、结果反馈
| 任务类型 | 反馈方式 |
|----------|----------|
| 简单任务 | 面板直接显示 |
| 耗时任务 | 进度条 + 实时输出 |
| 定时任务 | 桌面通知 |
| 长链任务 | 每个步骤结果 + 最终汇总 |
---
## 九、持久化设计
```
~/Documents/XCDesktop/xcclaw/
├── tasks/
│ ├── pending.json # 待执行任务
│ ├── running.json # 正在执行
│ └── history.json # 执行历史
├── sessions/
│ ├── {session-id}.json # 会话上下文
│ └── config.json # 会话配置
├── schedules/
│ └── crontasks.json # 定时任务配置
├── workspace/ # 工作目录
│ ├── AGENTS.md
│ ├── TOOLS.md
│ └── SOUL.md
└── config.json # 系统配置
```
---
## 十、核心 API 设计
### 10.1 会话管理
```typescript
// 创建会话
POST /api/xcclaw/session
{
type: "ephemeral" | "persistent" | "scheduled",
prompt?: string,
context?: object,
options?: {
model?: string,
tools?: string[]
}
}
// 获取会话状态
GET /api/xcclaw/session/:id
// 发送消息
POST /api/xcclaw/session/:id/message
{
content: string
}
// 终止会话
POST /api/xcclaw/session/:id/abort
```
### 10.2 任务调度
```typescript
// 提交任务
POST /api/xcclaw/task
{
type: "immediate" | "persistent" | "scheduled",
prompt: string,
schedule?: string, // cron 表达式
chain?: ChainConfig, // 任务链配置
options?: TaskOptions
}
// 获取任务状态
GET /api/xcclaw/task/:id
// 取消任务
DELETE /api/xcclaw/task/:id
```
### 10.3 定时任务
```typescript
// 创建定时任务
POST /api/xcclaw/schedule
{
name: string,
cron: string,
prompt: string,
sessionType: "ephemeral" | "persistent",
notifyOnComplete: boolean
}
// 列出定时任务
GET /api/xcclaw/schedules
// 删除定时任务
DELETE /api/xcclaw/schedule/:id
```
---
---