# Tasks

Tasks 模块把“需要执行和跟踪”的用户请求从普通聊天中拆出来，形成有状态的内部任务。它包含路由、计划、技能解析、事实证据、用户验收和 task store。

## 大模块流程

Routersimple/task/revise/new/close
->
TaskRecord创建或复用 open task
->
Plannersingle 或 team graph
->
Runteam + main AgentLoop
->
Evidence事实记录，不判断
->
User Acceptanceaccept/revise/abandon

## 小模块拆分

### models / store / service

`TaskRecord` 保存 task_id、session_id、description、goal、status、run_ids、acceptance history、metadata。TaskService 提供 create/start/complete/acceptance/close/abandon 等状态操作。

router 决定进入 Task 后创建或复用 active task。
每次 attempt 调用 start_run 记录 user_message 和 attempt_index。
run 完成后构建 TaskEvidencePacket，状态进入 awaiting_acceptance。
用户验收后进入 closed（accepted）、needs_revision 或 abandoned。

### MainAgentRouter

独立 LLM 调用，只负责路由，不回答用户。输入 active task 摘要、最近对话、当前 message 和 intent-agent skill guidance，输出紧凑 JSON。

provider 不可用时 fallback：有 active task 则 continue_task，否则 simple_chat。
system message 约束“只路由、不解释、只 JSON”。
user prompt 包含 actions、critical policy、active task、recent conversation、current message。
解析 action，映射成 MainAgentDecision。

详细 prompt 字段见 Prompt Atlas。

### TaskExecutionPlanner

决定当前 attempt 是单 agent 还是先跑小 team。它要求模型返回 JSON schema：mode、reason、strategy、nodes、final_synthesis_instruction。

选择 auxiliary/main provider。
输入 task goal、当前用户请求、attempt index 和必要的 task history。
如果 team，解析 nodes 为 ExecutionGraph 并 validate。
调用 TaskSkillResolver 为 team node 绑定 published skills 或 ephemeral guidance。

### TaskSkillResolver

给 planner 生成的泛型 team node 解析能力来源：先 embedding 召回 published skills，再让 LLM 从候选中选；没有匹配则生成一次性 ephemeral guidance。

构造 query：skill_query、node.task、required_capabilities、task.goal、user_message。
embedding top-8 召回候选 skill。
LLM 返回候选 skill name JSON array。
若为空，EphemeralGuidanceSynthesizer 生成临时 SkillContext 注入 node。

### EvidenceBuilder / User Acceptance

EvidenceBuilder 从 session 中提取 run evidence、tool summaries、team node results。Evidence 只记录事实，不判断、不打分、不 gate，也不生成 revision prompt；Task 是否完成只由用户验收决定。

主 run 完成后收集 assistant output、tool result、team result。
渲染 evidence packet 文本，用于审计、展示和后续 skill learning。
用户 accept 后关闭 task，并把整个 task 的所有 runs 标记为 Accepted Task Evidence。
用户 revise 时只把 revision message 和必要 task history 带入下一轮执行，不把整包 evidence 自动塞进 prompt。