fix(rectification): pass server case id to agent
This commit is contained in:
@@ -337,18 +337,20 @@ function buildAgentMessages(options: V9AgentRunOptions, _attempt: number): unkno
|
||||
void _attempt;
|
||||
const timeContext = options.timeContext
|
||||
?? `服务端当前时间(权威):${new Date().toISOString()}。涉及“现在、今天、今年、未来几个月”等相对时间时,以此为准。`;
|
||||
const caseContext = `【服务端 Case ID】${options.caseId}。所有 rectification 工具调用的 caseId 必须原样使用此值。`;
|
||||
if (options.action === "opening") {
|
||||
return [{
|
||||
role: "user",
|
||||
content: [
|
||||
timeContext,
|
||||
caseContext,
|
||||
"【服务端开场指令】这是本校正 Case 的首次开场,还没有用户输入。请先调用 skill 工具加载 jyotish-birth-time-rectification,再调用 rectification-read-case 读取服务端 Case 与证据摘要,然后用简体中文自然开场:说明你会通过已发生的人生事件来校正出生时间,并自然地提出第一个最有用的问题(只需一个问题)。",
|
||||
].join("\n"),
|
||||
}];
|
||||
}
|
||||
return [{
|
||||
role: "user",
|
||||
content: [timeContext, options.message ?? ""].join("\n"),
|
||||
content: [timeContext, caseContext, options.message ?? ""].join("\n"),
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
@@ -173,6 +173,35 @@ function runOptions(overrides: Partial<V9AgentRunOptions> = {}): {
|
||||
return { options: optionsValue, emitted, billing };
|
||||
}
|
||||
|
||||
test("agent receives the exact server-owned case id for tool calls", async () => {
|
||||
let observedMessages: unknown[] = [];
|
||||
const agent = fakeAgentStream([
|
||||
chunk("start"),
|
||||
chunk("tool-call", { toolName: "skill", args: { name: RECTIFICATION_SKILL_NAME } }),
|
||||
chunk("tool-result", { toolName: "skill" }),
|
||||
chunk("tool-call", { toolName: "rectification-read-case", args: { caseId: CASE_ID } }),
|
||||
chunk("tool-result", { toolName: "rectification-read-case" }),
|
||||
chunk("text-delta", { text: "你好,我是生时校正助手。" }),
|
||||
chunk("finish"),
|
||||
]);
|
||||
const { options } = runOptions({
|
||||
action: "opening",
|
||||
message: null,
|
||||
buildAgent: async () => ({
|
||||
...agent,
|
||||
stream: async (messages: unknown[]) => {
|
||||
observedMessages = messages;
|
||||
return agent.stream();
|
||||
},
|
||||
}) as never,
|
||||
});
|
||||
|
||||
const result = await runV9AgentTurn(options);
|
||||
|
||||
assert.equal(result.ok, true);
|
||||
assert.match(JSON.stringify(observedMessages), new RegExp(CASE_ID));
|
||||
});
|
||||
|
||||
test("first turn with no real skill evidence retries once then fails without saving success", async () => {
|
||||
const { options, emitted, billing } = runOptions({
|
||||
accounting: fakeAccounting({
|
||||
|
||||
Reference in New Issue
Block a user