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:
host committed 2026-10-27 04:30:43 +08:00
1 parent 9537e6f0d2
commit 7c444a688b
8 files changed
+869 -32

No files matched your search

+15
View File
@@ -840,6 +840,21 @@ POSTGRES_SCHEMA = (
"environment_id TEXT, "
"UNIQUE(project_id, idempotency_key))",
"CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)",
# 附件包与任务附件:与 server._ensure_uploads_tables 同款,
# POSTGRES_SCHEMA 在每次初始化时全量执行,新表自动补建。
"CREATE TABLE IF NOT EXISTS uploads("
"id TEXT PRIMARY KEY, "
"created_by TEXT, "
"created_at DOUBLE PRECISION, "
"status TEXT)",
"CREATE TABLE IF NOT EXISTS task_attachments("
"task_id TEXT, "
"bundle_id TEXT, "
"rel_path TEXT, "
"size INTEGER, "
"PRIMARY KEY(task_id, rel_path))",
"CREATE INDEX IF NOT EXISTS idx_attachments_task"
" ON task_attachments(task_id)",
"CREATE TABLE IF NOT EXISTS task_followups("
"id TEXT PRIMARY KEY, "
"task_id TEXT, "