19 lines
1.9 KiB
TypeScript
19 lines
1.9 KiB
TypeScript
import { tool } from "../tool.js";
|
||
import { answerUiAnchors } from "../../src/chat/answer-ui-publication.js";
|
||
|
||
export default tool({
|
||
description: "提交本轮完整的最终答复。收尾前按阅读任务检查表达:多对象比较和数值趋势优先已用 present_answer 发布 Table/Chart,简单解释、单个事实或用户要求纯文字可直接回答;不要遗漏报告需要的交互内容。全部工具结果与需要的业务写回已核实后调用;需要浏览器动作回执时先核实回执,本地回答界面发布不等待浏览器回执;阶段说明留在过程记录。answer 保留必要正文、结论和关键边界,不重复整张表;在 answer 中用独立一行 [[ui:block_id]] 指定界面位置,代码块、缩进代码和引用中的标记不生效。ui_block_ids 是允许引用列表,必须与锚点去重后的顺序一致,只列本轮已经用 present_answer phase=final 发布的 block_id;process 界面不得引用。收到最终报告后,其他过程文字、界面与轨迹自动折叠。普通聊天与任务协作在此工具完成、当前工具和追加输入均已处理后结束本轮,之后不能继续更新界面;需要补充内容应先更新再提交最终答复。后台任务仍以 Server 的完成/失败接口为准,此工具不代表任务、工单或运行已完成。",
|
||
args: {
|
||
answer: tool.schema.string().min(1).max(30000),
|
||
ui_block_ids: tool.schema.array(tool.schema.string().regex(/^[a-zA-Z0-9_-]{1,80}$/)).max(48).optional(),
|
||
},
|
||
async execute({ answer, ui_block_ids }) {
|
||
const refs = ui_block_ids ?? [];
|
||
const anchors = [...new Set(answerUiAnchors(answer))];
|
||
if (JSON.stringify(anchors) !== JSON.stringify(refs)) {
|
||
throw new Error("ui_block_ids 必须与 answer 中独立一行的 [[ui:block_id]] 锚点按去重后顺序一致");
|
||
}
|
||
return JSON.stringify({ answer, ui_block_ids: refs });
|
||
},
|
||
});
|