使用场景 / 要解决的问题
用户让 AI 执行编译(如 ./gradlew assembleUniversalRelease)并成功后,预期聊天区稳定出现 APK 文件卡片(点击可安装/打开)。现状:
- 文件卡片只在模型额外调用
sendFile(展示型工具)后才渲染:ToolMessageComponents.kt 的渲染条件是「工具结束且消息带附件」;
- 是否调用
sendFile 由模型自主决定,构建成功却“忘记”调用时无卡片、无提示——触发率不是 100%,体验不稳定。
期望的解决方案(方案 B:产物自动挂载)
- 构建结果后处理:终端/构建命令整体成功后,正则扫描命令输出与工作区,识别构建产物(
*.apk、app/build/outputs/apk/**/*.apk 等常见形态);
- 命中即自动附带文件卡片元数据:复用现有附件体系(
StatefulAgentWorkflow 的 attachments 字段,UI 渲染、不回放进模型上下文),不依赖模型调用 sendFile;
- 沿用现有点击打开链路:
copyToLocal + FileProvider(file_paths.xml),APK 的 MIME 识别沿用 SendFileTool 已有的 application/vnd.android.package-archive;
- 多产物支持:一次构建产出多个 APK(不同变体)时,一张卡片承载多个文件,可左右滑动;
- 路径兼容:覆盖不同变体输出目录(
universal/release、universal/debug 等)与自定义 outputDir;产物被清理/不存在时静默降级——无卡片、不报错、不阻塞对话;
- 与手动 sendFile 共存:自动挂载不改变模型手动
sendFile 的能力。
备选方案
- 方案 A(仅提示词):在工具使用规则中硬性规定「构建成功后必须调用 sendFile 展示产物」——改动最小,但本质仍是模型概率性调用,只能提升触发率、无法保证 100%。
- 方案 C(A+B 结合):以 B 兜底确定性,以 A 兜底非 APK 类其它产物(文档、压缩包等)的展示指引。
补充信息
- 现状渲染条件:
ToolMessageComponents.kt(!running && message.attachments.isNotEmpty())
- 附件元数据流:
AgentWorkflow.kt / StatefulAgentWorkflow.kt 的 attachments(仅展示型工具附带,供 UI 渲染,不入上下文)
SendFileTool.kt:已有 APK MIME 识别、原子校验、copyToLocal 本地预览链路,可作为自动挂载的实现参考
- 点击打开权限:
app/src/main/res/xml/file_paths.xml(FileProvider)
验收期望
- 连续多次编译 APK,文件卡片触发率 = 100%;
- 编译成功但产物缺失时,对话正常结束、无异常提示;
- 点击卡片可正常安装/打开 APK;
- 产物不进入模型上下文,Token 消耗不受影响。
使用场景 / 要解决的问题
用户让 AI 执行编译(如
./gradlew assembleUniversalRelease)并成功后,预期聊天区稳定出现 APK 文件卡片(点击可安装/打开)。现状:sendFile(展示型工具)后才渲染:ToolMessageComponents.kt的渲染条件是「工具结束且消息带附件」;sendFile由模型自主决定,构建成功却“忘记”调用时无卡片、无提示——触发率不是 100%,体验不稳定。期望的解决方案(方案 B:产物自动挂载)
*.apk、app/build/outputs/apk/**/*.apk等常见形态);StatefulAgentWorkflow的attachments字段,UI 渲染、不回放进模型上下文),不依赖模型调用sendFile;copyToLocal+FileProvider(file_paths.xml),APK 的 MIME 识别沿用SendFileTool已有的application/vnd.android.package-archive;universal/release、universal/debug等)与自定义outputDir;产物被清理/不存在时静默降级——无卡片、不报错、不阻塞对话;sendFile的能力。备选方案
补充信息
ToolMessageComponents.kt(!running && message.attachments.isNotEmpty())AgentWorkflow.kt/StatefulAgentWorkflow.kt的attachments(仅展示型工具附带,供 UI 渲染,不入上下文)SendFileTool.kt:已有 APK MIME 识别、原子校验、copyToLocal本地预览链路,可作为自动挂载的实现参考app/src/main/res/xml/file_paths.xml(FileProvider)验收期望