diff --git a/console.html b/console.html index b399671..b43bbad 100644 --- a/console.html +++ b/console.html @@ -91,13 +91,17 @@
+
+ +
@@ -121,6 +125,10 @@
+ @@ -161,6 +169,7 @@ ID 名称 Cron + 状态 提示词 操作 @@ -322,6 +331,7 @@ async function createTask() { const type = document.getElementById('taskType').value; const prompt = document.getElementById('taskPrompt').value; + const autoExecute = document.getElementById('autoExecute').checked; if (!prompt) return alert('请输入任务描述'); try { @@ -334,6 +344,11 @@ addLog('创建任务: ' + task.id, 'info'); document.getElementById('taskPrompt').value = ''; loadTasks(); + + if (autoExecute) { + addLog('正在自动执行任务...', 'info'); + await executeTask(task.id, type === 'persistent'); + } } catch (e) { alert('创建失败: ' + e.message); } @@ -351,6 +366,7 @@ ${t.prompt.substring(0, 30)}${t.prompt.length > 30 ? '...' : ''} ${t.status} + @@ -362,6 +378,32 @@ } } + async function viewTask(taskId) { + try { + const res = await fetch(API_BASE + '/task/' + taskId); + const task = await res.json(); + const panel = document.getElementById('taskDetailPanel'); + const content = document.getElementById('taskDetailContent'); + panel.style.display = 'block'; + content.innerHTML = ` +
+
任务ID: ${task.id}
+
类型: ${task.type}
+
状态: ${task.status}
+
Session ID: ${task.session_id || '-'}
+
提示词:
${task.prompt}
+ ${task.error ? `
错误信息: ${task.error}
` : ''} +
创建时间: ${task.created_at || '-'}
+
开始时间: ${task.started_at || '-'}
+
完成时间: ${task.finished_at || '-'}
+
+ `; + panel.scrollIntoView({behavior: 'smooth'}); + } catch (e) { + alert('获取详情失败: ' + e.message); + } + } + async function executeTask(taskId, async_) { try { const endpoint = async_ ? '/execute_async' : '/execute'; @@ -418,7 +460,8 @@ ${s.id} ${s.name || '-'} ${s.cron} - ${(s.prompt || '').substring(0, 30)}... + ${s.enabled ? '已启用' : '已禁用'} + ${(s.prompt || '').substring(0, 30)}${(s.prompt || '').length > 30 ? '...' : ''} diff --git a/docs/console-guide.md b/docs/console-guide.md index a4cc2b2..34feae2 100644 --- a/docs/console-guide.md +++ b/docs/console-guide.md @@ -12,8 +12,8 @@ http://localhost:8888/console.html | Tab | 功能 | |-----|------| -| 任务管理 | 创建、执行、管理即时/持久/定时任务 | -| 定时任务 | 创建和管理 Cron 定时任务 | +| 任务管理 | 创建、执行一次性任务 | +| 定时任务 | 创建和管理 Cron 循环调度任务 | | 历史记录 | 查看任务执行历史 | | 持久会话 | 创建和管理多轮对话会话 | | 实时日志 | WebSocket 实时推送的任务状态 | @@ -22,39 +22,61 @@ http://localhost:8888/console.html ## 1. 任务管理 +> 用于创建一次性执行的任务。任务创建后不会自动执行,需要手动点击「执行」按钮。 + +### 任务类型 + +| 类型 | 说明 | 使用场景 | +|------|------|----------| +| **Ephemeral (即时任务)** | 一次性任务,执行完成后结束 | 临时性的 AI 问答、代码生成等 | +| **Persistent (持久任务)** | 可多轮交互的任务会话 | 需要多轮对话才能完成的任务 | + ### 创建任务 -1. 选择任务类型: - - **Ephemeral (即时任务)**:一次性任务,执行后结束 - - **Persistent (持久任务)**:可多轮交互的任务 - - **Scheduled (定时任务)**:需要配合定时任务模块使用 - +1. 选择任务类型(即时任务/持久任务) 2. 输入任务描述 (Prompt) +3. 可选:勾选「创建后自动执行」 +4. 点击「创建任务」 -3. 点击「创建任务」 +> 💡 **提示**:默认勾选「创建后自动执行」,任务创建后会立即执行。如果需要手动控制执行,取消勾选即可。 ### 执行任务 -创建任务后,在任务列表中可以: +创建任务后,在任务列表中可以执行以下操作: | 按钮 | 功能 | |------|------| +| 详情 | 查看任务的完整信息,包括 Session ID、错误信息等 | | 执行 | 同步执行任务,等待完成 | | 异步 | 异步执行任务,立即返回 | | 中止 | 终止正在执行的任务 | -### 任务状态 +### 任务详情 -- `pending` - 待执行 -- `running` - 执行中 -- `completed` - 已完成 -- `failed` - 执行失败 -- `aborted` - 已中止 +点击「详情」按钮可以查看任务的完整信息: + +- **任务ID**:任务的唯一标识 +- **类型**:即时任务/持久任务 +- **状态**:任务的当前状态 +- **Session ID**:OpenCode 会话 ID,可用于在 OpenCode 界面查看对话详情 +- **提示词**:任务的完整描述 +- **错误信息**:任务失败时的错误原因 +- **创建/开始/完成时间**:任务的时间线 --- ## 2. 定时任务 +> 用于创建**循环执行**的定时调度任务。基于 Cron 表达式,在指定时间自动执行任务。 + +### 与「任务管理」的区别 + +| 功能 | 任务管理 | 定时任务 | +|------|----------|----------| +| 执行方式 | 手动点击执行 | 自动执行 | +| 执行次数 | 一次 | 循环执行 | +| 配置方式 | 创建后手动执行 | 配置 Cron 表达式,自动触发 | + ### 创建定时任务 | 字段 | 说明 | @@ -63,7 +85,19 @@ http://localhost:8888/console.html | 任务名称 | 显示名称,如「每日任务」 | | Cron 表达式 | 执行时间,如 `0 9 * * *` (每天9点) | | 执行内容 | 定时执行的 Prompt | -| 启用 | 是否启用此定时任务 | +| 启用 | 是否启用此定时任务(未启用则不会执行) | + +### 定时任务列表 + +表格显示所有定时任务,包含以下信息: + +| 列 | 说明 | +|-----|------| +| ID | 任务唯一标识 | +| 名称 | 任务显示名称 | +| Cron | 执行时间表达式 | +| 状态 | 已启用 / 已禁用 | +| 提示词 | 执行内容摘要 | ### 常用 Cron 示例 @@ -78,43 +112,77 @@ http://localhost:8888/console.html ## 3. 历史记录 -- 查看所有已完成的任务记录 -- 支持限制显示条数 -- 可清空历史记录 +> 查看所有已完成的任务执行历史记录。 + +### 功能说明 + +- **查看历史**:显示所有任务的执行记录,包括类型、描述、状态、时间等 +- **显示条数**:可自定义显示的记录数量 +- **清空历史**:一键清空所有历史记录 + +### 任务状态说明 + +| 状态 | 说明 | +|------|------| +| `pending` | 待执行 | +| `running` | 执行中 | +| `completed` | 已完成 | +| `failed` | 执行失败 | +| `aborted` | 已中止 | --- ## 4. 持久会话 -### 创建会话 +> 创建可**多轮交互**的对话会话。与「任务管理」中的即时任务不同,持久会话可以多次发送消息,保持上下文连贯。 -输入会话名称(可选),点击「创建」 +### 与即时任务的区别 -### 发送消息 +| 特性 | 即时任务 | 持久会话 | +|------|----------|----------| +| 交互次数 | 单次 | 多次 | +| 上下文 | 不保持 | 自动保持 | +| 适用场景 | 简单问答 | 复杂任务、多轮对话 | -1. 在列表中找到目标会话 -2. 点击「发消息」按钮 -3. 输入消息内容 -4. 选择发送方式: - - **同步发送**:等待响应返回 +### 使用流程 + +1. **创建会话**:输入会话名称(可选),点击「创建」 +2. **发送消息**:点击会话的「发消息」按钮 +3. **选择发送方式**: + - **同步发送**:等待 AI 响应返回后再操作 - **异步发送**:立即返回,任务在后台执行 --- ## 5. 实时日志 -通过 WebSocket 实时显示: +> 通过 WebSocket 实时显示任务状态和系统消息。 -- 任务状态变化 -- WebSocket 连接状态 -- 操作日志 +### 显示内容 + +- 任务创建、执行、完成的实时通知 +- WebSocket 连接状态变化 +- 操作日志和错误信息 + +### 连接状态 + +页面左上角显示 WebSocket 连接状态: +- **已连接** - 绿色圆点,正常接收消息 +- **未连接** - 红色圆点,需要刷新页面重连 --- -## 快捷操作 +## 快速参考 -- **自动刷新**:健康检查和任务列表每 5 秒自动刷新 -- **WebSocket**:页面左上角显示连接状态 +### 功能对比 + +| 需求 | 推荐功能 | +|------|----------| +| 临时性的 AI 问答 | 任务管理 → 即时任务 | +| 需要多轮对话的复杂任务 | 任务管理 → 持久任务 | +| 每天定时执行某任务 | 定时任务 | +| 查看任务执行历史 | 历史记录 | +| 实时监控任务状态 | 实时日志 | ---