Skip to content

[Runtime] 远程任务与后台服务:daemon/server、队列、多会话和远程取消恢复 #29

@v833

Description

@v833

标签建议:area/runtime, area/session, area/reliability, priority/P1, type/feature, depends-on/daemon

背景

当前能力:

  • q-code 支持本地交互会话、后台 shell job、SubAgent、Agent Teams、session 持久化和审计日志。
  • 长任务仍主要绑定当前终端进程,关闭终端或切换机器后恢复能力有限。
  • 多会话、多任务队列、远程取消和状态查询尚未形成统一 daemon/server 能力。

痛点:

  • 长时间 Agent 任务容易受终端关闭、网络波动或用户切换上下文影响。
  • 用户想同时排队多个任务、远程查看状态或取消任务时缺少稳定入口。
  • 后台任务和会话恢复如果缺少边界,容易引入并发写文件、权限和资源占用问题。

需要补齐:

  • 本地优先的 daemon/server 进程。
  • 任务队列、多会话状态、取消/恢复和日志查询。
  • 权限、审计、资源预算和崩溃恢复策略。

目标

实现远程任务与后台服务:提供本地 daemon/server、任务队列、多会话管理、远程状态查询、取消和恢复能力,让长任务可持续运行、可审计、可安全中断。

用户故事

  • 作为长任务用户,我希望启动任务后可以关闭前端 TUI,并稍后恢复查看进度。
  • 作为多项目用户,我希望能列出正在运行的 q-code 任务并取消某个卡住任务。
  • 作为维护者,我希望后台任务有资源预算、审计日志和崩溃报告,以便排查可靠性问题。
  • 作为安全用户,我希望 daemon 不会绕过当前工作区、approval policy 或 secret redaction。

详细需求

1. Daemon/server 生命周期

  • 提供本地 daemon 启动、停止、状态查询入口。
  • 默认绑定本机 loopback 或本地 IPC,不暴露公网端口。
  • daemon 崩溃时写 crash report,并能恢复可恢复任务 metadata。

2. 任务队列

  • 支持提交、排队、运行、完成、失败、取消状态。
  • 每个任务绑定 cwd、session id、配置快照、approval policy 和资源预算。
  • 支持并发限制和队列优先级的基础配置。

3. 多会话与恢复

  • 支持从 CLI/TUI 查询任务对应 session、日志、工具事件和 usage。
  • 前端断开后任务可继续运行,重新连接后恢复事件流。
  • 取消任务时必须传播 AbortSignal 到 Agent loop、工具和后台 shell job。

4. 远程控制接口

  • 提供 CLI 命令或本地 API:list、status、tail、cancel、resume。
  • 输出支持人类可读和 JSON 模式。
  • 远程控制必须鉴权或限制在本地可信边界内。

5. 存储与审计

  • 任务 metadata 写入 <Q_CODE_HOME> 下的稳定目录。
  • 审计日志记录任务创建、状态变化、取消、恢复和错误。
  • 大输出继续使用 shell spill 或任务 artifact,避免 session 膨胀。

输出样例

q-code task list

ID        STATUS   CWD                         STARTED
abc123    running  C:\repo\q-code              12m ago
def456    queued   C:\repo\other               1m ago
q-code task cancel abc123
已发送取消信号,等待工具安全退出...

验收标准

  • 能启动本地 daemon/server 并查询健康状态。
  • 能提交任务、查看队列、tail 日志、取消任务和恢复事件流。
  • 前端断开后任务可继续运行,重新连接后能看到最新状态。
  • 取消能传播到 Agent loop、工具调用和后台 shell job。
  • daemon 不绕过 approval policy、工作区边界和 secret redaction。
  • 任务 metadata、审计日志和 crash report 写入稳定位置。
  • JSON 输出可被脚本消费。
  • README/AGENTS 增加 daemon、任务命令和安全边界说明。

测试方案

  • tests/unit/task-daemon.test.ts:覆盖任务状态机、队列、取消和资源预算。
  • tests/unit/session-management.test.ts:覆盖任务与 session metadata 关联。
  • tests/integration/task-daemon-flow.test.ts:启动本地 daemon fixture,提交、tail、cancel、resume。
  • tests/integration/session-recovery.test.ts:覆盖断开恢复事件流。
  • 手动验证:长任务、工具执行中取消、daemon 崩溃恢复、Windows 端口/IPC。

不在本期范围

依赖 / 风险

  • 与 session、Agent loop、后台 shell job、approval policy 和审计日志深度耦合,建议拆分阶段实现。
  • 后台任务并发写工作区有冲突风险,需要锁、队列或冲突检测。
  • 本地 API 安全边界必须谨慎,避免被其他进程滥用。
  • 取消传播不完整会导致孤儿进程或半写入状态。

工作量评估

  • Daemon/IPC 与任务状态机:3 人日
  • Agent loop/工具取消与事件流恢复:3 人日
  • CLI/TUI 控制入口与存储:2 人日
  • 安全、测试和文档:2.5 人日
  • 合计:~10.5 人日,建议拆分 daemon core、任务队列、取消恢复、UI/CLI

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions