feat: 任务附件——server/worker/console 链路打通(+ popen goal 新语义补漏)
server:POST /uploads(multipart,413 预检、路径/数量/大小校验、 24h 过期包、used 防一包多用)+ 建任务绑定(同事务写附件行 + 包置 used,cloud 执行器 400)+ 列表/详情带 attachments + 取消删暂存 + 分支带走附件清单;db.py PG 建表 + init_db 补表。 worker:_task_seed_dir(无附件/目录已删静默 None)+ dispatch/ goal 三路(同步本地、popen、Docker 只读挂载 /tmp/codex-seed) + cloud 执行器兜底失败 + 终局删暂存。 console:文件/文件夹/图片三路输入,先上传拿 upload_id 再建任务, 列表 [附件×n]、详情列附件路径。 附带:popen 的 goal 命令此前强制要求 verify_command,goal 新语义 任务到本地 worker(走 popen)会直接报错,改成与同步 goal_task 一致(无验收不传 --verify,轮次 0 原样传)。 测试:新增 test_task_attachments.py 15 个。
This commit is contained in:
1 parent
9537e6f0d2
commit
7c444a688b
8 files changed
+869
-32
No files matched your search
@@ -472,6 +472,29 @@ owner_user_id)` 只写 `project_members` 的 owner 成员记录,不建项目
|
||||
location,被吃时从备份贴回再 reload。数据仍凭 X-API-Key,
|
||||
`/health` 本来就是无鉴权设计且不含敏感信息。
|
||||
|
||||
## 任务附件(放进任务工作区)
|
||||
|
||||
命令台新建任务时可附文件、文件夹、图片(三路输入),提交时先
|
||||
`POST /uploads`(multipart:`paths` JSON 与 `file0…` 一一对应)
|
||||
拿 `upload_id`,再 `POST /tasks` 带 `upload_id` 绑定;图片与普通
|
||||
文件不区分,一律是 worktree 里的文件(模型能否“看懂”图片取决于
|
||||
模型多模态能力,本链路不保证)。派发时 worker 经 host.py
|
||||
`--seed-dir` 把暂存目录拷进 worktree(dispatch/goal 首轮才 seed,
|
||||
run 续跑不重复拷,文件已在 worktree 里);Docker 任务把暂存目录
|
||||
只读挂载进容器(`/tmp/codex-seed:ro`),cloud 执行器拒绝带附件的
|
||||
任务。限制:单包最多 200 文件、单文件 20MB、合计 100MB、整个
|
||||
multipart body 200MB(超了 413);路径拒绝对路径、`..`、空段、
|
||||
反斜杠、NUL、盘符;包 24 小时过期、建任务绑定后置 used(一包
|
||||
只能用一次,他人包 403、cloud 任务 400);任务终局后 worker 删
|
||||
暂存目录,取消时 server 侧也删(删不到不报错)。暂存根默认
|
||||
`/opt/codex-app-server/work/uploads`,`CODEX_UPLOAD_DIR` 可覆盖,
|
||||
server 与 worker 两边必须一致(否则 worker 找不到包,派发静默无
|
||||
附件)。公网 nginx 须代理 `/uploads`(与 `/tasks` 同批),否则页
|
||||
面上传 404。注意:popen 路径的 goal 命令此前强制要求
|
||||
verify_command,goal 新语义(无验收)任务到本地 worker 会直接
|
||||
报错,本批顺手修成与同步 goal_task 一致(无验收不传 --verify,
|
||||
轮次 0 原样传)。
|
||||
|
||||
## 测试
|
||||
|
||||
```bash
|
||||
|
||||
Reference in new issue
Block a user