Poco 使用手册
开发指南

开发指南

Poco 开发规范、验证命令和代码边界。

本页用于帮助开发者快速找到系统链路、代码边界和验证入口。改代码前先确认你改的是哪一段链路:任务创建、运行调度、能力装配、Poco Agent 执行、回调落库、产物交付,还是外部集成。

先建立链路视角

Poco 的核心链路如下:

  1. Frontend 提交任务、附件、仓库、浏览器和能力选择。
  2. Backend 创建 Session、User Message 和 Run,并保存配置快照。
  3. Executor Manager 领取 Run,解析环境变量、MCP、Skills、插件、Subagents、Slash Commands 和附件。
  4. Executor Manager 准备工作区和容器,把任务交给 Poco Agent 运行时。
  5. Poco Agent 执行工具、更新 Todo、请求用户确认、写入工作区文件。
  6. 高频流事件由 Executor 带连续序号直达 Backend,Backend 先推送给前端,再后台批量持久化。
  7. 普通状态和终态仍由 Executor Manager 转发;实时直达持续失败时,也通过 Manager 批量降级。
  8. 前端按序号展示实时内容,缺口从历史事件补齐,终态再用服务端消息历史校准。
  9. 终态后异步导出工作区,触发 WebHook、通知、产物推荐、发布中心等下游动作。

改动时不要只看单个接口。比如“任务完成后没有文件”可能涉及 Poco Agent 是否写入文件、工作区忽略规则、导出状态、文件清单 API 和前端产物面板。

前端开发

前端使用 Next.js 16、React 19、TypeScript、Tailwind CSS v4 和 shadcn/ui。

cd frontend
source ~/.nvm/nvm.sh && nvm use 22
pnpm lint

开发页面时需要遵守:

常见入口:

场景重点文件
首页创建任务frontend/features/home/components/home-page-client.tsxtask-composer.tsx
执行页状态frontend/features/chat/hooks/use-execution-session.ts
会话消息和人工确认frontend/features/chat/components/execution/chat-panel/*
文件产物面板frontend/features/chat/components/execution/file-panel/*
定时任务frontend/features/scheduled-tasks/*
能力管理frontend/features/mcpskillspluginssubagents
WebHookfrontend/features/webhooks/*

Python 开发

Python 服务使用 Python 3.12+、FastAPI、SQLAlchemy 和 uv。

Ruff 从仓库根目录运行:

uv run ruff check <path>
uv run ruff format --check <path>

Backend 分层边界

Repositories

  • 只做数据库操作。
  • 不写业务逻辑。
  • 返回 SQLAlchemy 模型实例。

Services

  • 编排业务逻辑。
  • 管理事务。
  • 返回 SQLAlchemy 模型或明确的 Pydantic schema。
  • 不返回 dict[str, Any]

API

  • 负责依赖注入。
  • 负责响应转换。
  • 不直接把 ORM 模型传给 Response.success(...)

关键链路源码

链路主要文件读代码重点
任务入队backend/app/services/task_service.pySession/Run 创建、配置快照、输入文件、Agent 绑定
Run 队列backend/app/services/run_service.pybackend/app/repositories/run_repository.pyclaim、lease、单会话活跃运行限制、失败恢复
Manager 拉取executor_manager/app/services/run_pull_service.py准备阶段、能力暂存、容器选择、dispatch
能力解析executor_manager/app/services/config_resolver.py*_stager.py环境变量替换、MCP/Skill/Plugin/Subagent/Slash 落地
Poco Agent 执行executor/app/core/engine.pyexecutor/app/api/v1/task.py工作区、计划模式、用户问答、内置工具、停止机制
执行 Hookexecutor/app/hooks/*回调、Todo、工作区 diff、记忆、浏览器状态、快照
Executor 实时出口executor/app/core/stream_callback.pyexecutor/app/hooks/callback.pystream_seq、journal、批量发送、持久化确认、Manager 降级
回调落库backend/app/services/callback/orchestrator.pySession/Run 状态、消息、用量、事件、终态副作用
Backend 实时入口backend/app/services/stream_ingress_service.py连续序号校验、实时广播、批量持久化、终态 flush
实时事件backend/app/services/stream_event_service.pySSE、顺序缓冲、缺口恢复、溢出与回放
前端消息顺序frontend/features/chat/utils/stream-sequence-buffer.tsuse-chat-messages.tshydration、连续消费、缺口补拉、终态历史校准
定时任务backend/app/services/scheduled_task_service.pyCron、多步骤、复用会话、通知、运行入队
工作区导出executor_manager/app/services/workspace_export_service.py导出清单、归档、忽略规则
发布中心backend/app/services/publish_center_service.py入口文件选择、自动发布、版本记录
WebHookbackend/app/services/webhooks/service.py事件过滤、payload、签名、派发

配置快照原则

任务创建时,Backend 会把本次任务相关配置固化为快照。这样可以解释一次运行当时用了哪些能力、浏览器设置、记忆开关和输入文件。

开发时注意:

  • 会话级配置不应保存本次运行独有的附件输入。
  • Run 级配置可以包含本次运行的 input_files
  • Agent 绑定会话不应随意接收运行时覆盖配置。
  • 敏感 MCP 配置、Skill 文件内容和大体积暂存内容不要直接写入持久化快照。
  • 新增环境变量时,同步更新配置文档和示例文件。

终态不是一个动作

一次运行结束后,系统通常会分两段处理:

  1. 立即终态:标记 completed/failed,写入消息、用量、Run 状态,推送实时事件。
  2. 导出补齐:导出工作区文件清单和压缩包,再触发工作区导出 WebHook、自动发布、产物推荐等动作。

因此不要把“会话 completed”当成“所有文件和下游动作都 ready”。涉及文件、发布和分享时,要检查 workspace_export_status

日志规范

使用 logger.*(..., extra={...}) 时不要使用 messagenamelevelnameLogRecord 保留字段。

文档开发

前端静态文档位于 frontend/content/docs,通过 /docs 路由访问。

新增文档页面时:

  1. 在对应分组目录下新增 .mdx 文件。
  2. 在该目录的 meta.json 中配置标题和顺序。
  3. 运行 pnpm lint 验证。

On this page