You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
请求:PTC 内部工具返回值不应截断
PTC 程序需要完整数据来解析和计算。展示文本、UI 和日志可以截断或 spill,但不应改变
await tools.read(...)/await tools.bash(...)交给程序的数据。官方仓库当前 HEAD
d743267388641bc76f17c45ce8b4c231aed1d32c仍存在以下行为:工具在生成返回值之前先截断,PTC 随后将不完整数据作为成功结果交给程序。当前行为
bash:stdout.text 只有尾部
默认每流内存上限为 64,000 字节。超限后,输出收集器丢弃头部;工具直接将保留的尾部放进
stdout.text。PTC 返回对象带有
truncated: true,可用时有spillPath,但不会自动恢复全文。因此这类代码会因数据不完整而失败,即使命令正常退出:源码:默认限制、丢弃头部、返回值映射。
read:行文本被截断,总字节截断没有状态字段
默认限制:单行 2,000 个 UTF-16 码元,选中行总计 50 KiB。
lines[i].text被替换为行头加... (line truncated to 2000 chars)。提示混进程序数据,后半行丢失。对于单行 JSON,按行分页的offset无法取回剩余内容。truncatedByBytes没有进入返回对象。返回 schema 只有
path / offset / lines / totalLines,没有截断状态。Output capped. Showing lines ... Use offset=... to continue.是 render 阶段添加的展示文案,PTC 程序拿不到这句话。程序可以比较最后返回行号和
totalLines,判断后面还有行,但不能直接区分正常分页与字节上限截断。源码:默认限制、行与字节截断、schema 与展示提示、execute 返回对象。
截断发生在 PTC 值与展示分离之前
PTC binding 返回
result.value,spill-policy 处理展示/日志副本。这个分离机制保留了工具返回值,却无法恢复工具内部已经丢弃的原始数据。源码:PTC binding、spill-policy。
最小验证
直接在内存中调用输出收集器与 read window 函数。已执行验证的两份源码与上述官方提交的 Git blob 完全一致。
这是截断函数的内存复现;完整 PTC 链路通过上述官方源码核对。collector 不配置 spill,测试不写文件;启用 spill 时,内存返回值仍保留尾部,全文需要另行读取恢复文件。
期望行为
首选:PTC 内部不截断程序数据。
read offset/limit窗口,但不要在窗口内再用展示预算截断行内容或悄悄少返回行。短期若仍保留截断,至少让
read返回结构化的截断原因、每行截断状态及可行的恢复位置,并将提示从lines[].text中分离。补标志是降级方案,不替代 PTC 内部数据完整性的诉求。相关讨论
本帖聚焦 PTC 程序收到的数据完整性,以及 read 的程序返回值与展示提示不对称。
All reactions