Mai x Tobatsu Gateway v1.1 · test-only report

视频编辑任务已经端到端跑通

这次验证用真实 Ignis 对话先生成图片和视频,再通过 video-edit 提交异步 Tobatsu 任务。结果回调后自动进画布,并写入 tobatsu_result,下一轮 agent 再用 SystemReminder 感知。

打开 test canvas test 通过 callback 自动插画布 prod 未发
canonical output
3ugwAK.mp4
1280x720 · 7.062s · 411813 bytes
canvas
rev 3
输入 2 个,输出 1 个
gateway task
gw_f5f26981
status=succeeded
test head
fa1928c
prod untouched
01 · full path

真实主线:从对话到画布

这不是单独查 DB。主线从 Ignis agent 对话开始,经过工具调用、Tobatsu workflow、callback、R2/file_id、Canvas Service。

1

生成素材

generate_image 产出 AGmV83.pngcreate_videos 产出 uL0KBx.mp4

2

提交 video-edit

agent 调 skill_toolcall_curl,只传自然语言 instruction 和 file_id。

3

Gateway 建任务

返回短消息:acceptedgateway_task_idpoll

4

Tobatsu 执行

generic_ffmpeg_rendi v6 用 Rendi 主路径合成视频。

5

callback 插画布

mai.delivery_update 回来,Gateway 导入 R2,Canvas Service 插入。

6

结果进对话

mai.delivery_result 写一条 session_messages:tobatsu_result

02 · agent visible contract

agent 看到的返回变少了

任务会自己进画布,所以提交时不再给 agent 一堆内部状态。查询也只是只读,不返回 batch_result

new_task response短返回
{
  "ok": true,
  "accepted": true,
  "gateway_task_id": "gw_f5f26981-...",
  "message": "任务已提交。完成后会自动更新画布...",
  "poll": {
    "action": "get_task",
    "gateway_task_id": "gw_f5f26981-..."
  }
}
get_task response无 batch
{
  "ok": true,
  "gateway_task_id": "gw_f5f26981-...",
  "status": "succeeded",
  "result": { "summary": "已用 AGmV83.png..." },
  "artifacts": [{
    "mai_file_id": "3ugwAK.mp4",
    "canvas_status": "delivered"
  }],
  "canvas": { "delivered": true }
}
没有 active_run_id 没有 backend 没有 external Tobatsu id 没有 batch_result 查询前后 canvas job 都是 1
03 · evidence

跑出来的证据

这些是这次实际跑出来的 ID。CC 和 Tobatsu 侧都能按这些 ID 复查。

检查点 结果 证据
素材生成 AGmV83.png + uL0KBx.mp4 CDN HEAD 均为 200;视频输入 video/mp4,811018 bytes
Tobatsu 执行 87dbe45a... done;run success /tmp/tobatsu-mai-v11-e2e-readback.md
callback update HTTP 200canvas_delivery.status=succeeded Canvas job cjob_7d6a409e...,inserted_count=1
Mai artifact 3ugwAK.mp4 imported 1280x720duration_ms=7062size_bytes=411813
session result 写入 1 条 tobatsu_result sequence_num=283793,frontend poll endpoint 能读到
SystemReminder 下一轮游标从 0283793 turn 完成,无工具调用,没有再崩 MessageType
04 · conversation trace

对话里实际发生了什么

用户能看到的不是 DB 查询,而是一组真实 agent turn。

18:19

生成图片和视频

agent 调 generate_imagecreate_videos。回复列出 AGmV83.pnguL0KBx.mp4

18:23

提交 video-edit

agent 调 skill_toolcall_curl。回复:任务已提交,gateway_task_id=gw_f5f26981...

18:26

回调自动写画布

3ugwAK.mp4 出现在 canvas。没有靠 get_task 二次插入。

18:35

下一轮只回复收到

SystemReminder 被消费,cursor 推进。agent 没有自动继续,也没有查询。

18:38

显式查询状态

用户要求查状态时才调 get_task。返回只读状态,canvas job 数不变。

05 · changes

这次实际改了什么

改动拆在 Mai backend、tools-backend、Tobatsu Gateway、Canvas Service 和 skills。

Mai backend

新增 tobatsu_result lazy reminder 游标。

agent history 排除 tobatsu_result,避免 MessageType 崩掉。

tools-backend

new_task 返回变短。

get_task 不再返回 batch,也不再暴露 Tobatsu 内部 ID。

Tobatsu Gateway

支持 delivery_update 多次回调。

terminal delivery_result 写一条 session message。

Canvas Service

callback-time 插 canvas 是主路径。

支持同 callback sidecar 贴到主文件 metadata。

skills

video-editmai-async-gateway 写清楚:不要主动轮询。

用户不满意时才 continue。

Frontend contract

新增 /api/sessions/{id}/tobatsu-results

前端自己 poll 结果,不走 Mai WS。

06 · test matrix

本地和 test 都跑了

本地用当前 Python 代码连 test DB 和 tool-test。test 用 Render 后端和已部署 Workers。

环境 任务 输出 结论
test canonical gw_f5f26981... 3ugwAK.mp4,canvas rev 3 PASS
local backend retry gw_2e071ba2... j3txwP.mp4,canvas rev 4 PASS
local first attempt gw_7bd366e0... 无 canvas item callback 403/1010,失败回调已入库
unit / worker tests Python + 3 个 Worker 包 10 + 20 + 24 + 10 tests PASS
这次 prod 没发。所有结论都限定在 test-only scope。后续 prod cut 需要单独授权。