Todo 任务树工作台¶
Todo 是 ChatSite 的独立功能入口;ChatTodo 提供任务树领域 API,不重复实现 Web 主机。
能力¶
- 左侧画布栏:新建、命名与切换多个独立画布;总览、项目和具体想法均可分别组织。
- SimpleMindMap 原生导图:选择、双击/F2 编辑标题、Tab 新增子节点、Enter 新增同级、拖拽重挂、框选、折叠及布局切换;手机支持双指缩放和平移。
- 数据存储与模块接入:两份 SQLite 的职责、Board/Node/View 结构、并发与幂等、Python/HTTP 接入及备份边界。
- 标题保持纯文本,Markdown/PRD 正文在独立详情面板编辑;正文默认空白且完全可选,不启用导图富文本或任意 HTML 节点。
- Ant Design X 对话区提供用户/助手消息、Markdown 与代码、复制及变更回执;作用范围为选中分支或整个画布,可在窄屏中收起。
- 单中心画布直接编辑;已有多根森林使用明确的根节点选择器,编辑当前根的分支不会改写或丢弃其他根。空画布可重新添加中心节点。
- 数据持久化到私有 SQLite;语义 revision 与视图状态分离。
- 变更批次原子应用,并提供请求幂等、冲突提示、变更记录和撤销。
- 模型输出必须通过 schema 与分支范围校验。删除、移动及完成/取消状态等重要操作需确认。
- 不在浏览器保存模型密钥;不执行模型生成的任意代码。
配置与运行¶
通过 pip install "ChatSite[todo]>=0.1.5,<0.2.0" 安装工作台;依赖解析会同时安装兼容的 ChatTodo 领域层(>=0.1.0,<0.2.0)和 ChatLogin Web 登录核心(>=0.1.2,<0.2.0)。前端制品随 Python 包提供,部署时无需 Node 或运行时 CDN。
模型可使用 Responses 或 Chat Completions。Ark Agent Plan 的 doubao-seed-evolving 可通过 Responses 协议接入;使用套餐服务时保持供应商的 Plan 专属入口,不自动回退到按量计费。配置检查应在安装了 Todo 的同一个环境执行,以确保 ChatEnv 能发现该 provider。
配置注册为 ChatEnv chatsite-todo provider,存储命名空间为 ChatSiteTodo。站点登录、模型地址/协议/型号及密钥只从这个配置边界读取。具名 profile 不会自动激活,也不会回退到其他账号的环境变量。
check/test 会发送一次有界的真实模型请求,且不修改任务。服务默认监听回环地址,公网入口应由反向代理提供。
协议与数据¶
浏览器通过同源 session cookie 访问 API,写入还需要 CSRF token。/login 使用 ChatLogin 的共享登录页资源;/api/login 仍兼容 {email,password},也接受共享表单的 {username,password}。模型连接在后端进行。Responses 使用无状态请求和按任务树隔离的本地历史,不把尚未回传 tool output 的响应 ID 当作下一次请求的有状态链。
共享登录页提交前会读取公开的 GET /login/session:未登录、会话失效或退出后返回 200 {"authenticated":false};有效会话只返回 authenticated、email 和 csrf_token,不返回密码、模型密钥或原始 session token,且响应禁止缓存。存储等非认证故障仍返回错误,不伪装成匿名。工作台恢复接口 GET /api/session 保持未登录 401。登录页地址与 bootstrap 地址遵循 root_path;未指定 next 或地址不安全时,页面与登录响应均默认当前挂载根(根站 /,例如挂载后 /mounted/),显式安全的站内 next 保持不变。
普通对话可返回自然语言、Markdown 或 JSON 示例,不会修改画布。只有真正的 todo_update 工具调用及其严格校验的参数能改图;错误、未知或多重工具调用不会降级为可执行文本。已确认的模型生成失败可重新发送新请求,网络丢失的写入回执则保持原请求身份重试。
节点字段为 id / parent_id / title / status / body / order。修改支持 create / update / move / delete;模型不能指定 owner 或访问其他任务树。HTTP 请求、节点数量、正文及模型响应都有边界限制。
运行目录由 TodoSettings.data_dir 统一描述,默认位于 ChatArch home 下的 chatsite/todo。目录私有,数据库文件权限为 0600。ChatLogin 会话保存在独立的 auth.sqlite3,任务、对话、提案和视图状态保存在原有业务数据库;升级到 0.1.5 后旧 Todo 本地会话不会迁移,用户需要重新登录一次,业务数据不迁移也不删除。导出只包含任务数据,不包含登录信息或模型密钥。
验收¶
撤销使用服务端历史,覆盖人工编辑与已应用的模型变更;重做使用当前页面会话中的快照,发生其他语义变更或刷新后不再沿用。模型接口返回完整结果,不提供伪流式输出或无法真正取消的按钮。编辑中的标题会先提交,再执行发送、切换或退出;未知写入必须保留原请求身份供显式重试。
前端源码位于 frontend/todo/。维护界面时执行 npm ci --ignore-scripts、npm test、npm run build,并随源码提交 src/chatsite/todo_static/ 的生成制品;CI 检查重建一致性。导图和聊天组件依赖均锁定,第三方许可随静态制品分发。
分别验证 Python 领域/API、Node 控制器、真实浏览器 DOM 和真实模型。页面打开或 /health 成功不代表功能已验收;需实际创建、编辑、保存、刷新、模型更新、危险操作确认和撤销,并检查错误路径与浏览器清理。