feat: improve mode and peripheral orchestration
This commit is contained in:
@@ -560,6 +560,64 @@ test("mode creation always requests dry-run even while the console is in hardwar
|
||||
assert.equal(Object.hasOwn(request, "hardware_client_id"), false);
|
||||
});
|
||||
|
||||
test("hardware requests use only the console's validated hardware client id", async () => {
|
||||
const events = [
|
||||
{ type: "message.accepted", route: "mode_profile_execute", engine: "n7web-mode-profile-runner" },
|
||||
{ type: "answer.completed", route: "mode_profile_execute", answer: "阅读模式执行完成。" },
|
||||
];
|
||||
const validHarness = createHarness(events, "hardware");
|
||||
validHarness.sandbox.CognitiveAgentConsole.getHardwareClientId = (
|
||||
() => "hwc-runtime-client-1234"
|
||||
);
|
||||
validHarness.input.value = "进入阅读模式";
|
||||
|
||||
await validHarness.sandbox.CognitiveAgentAssistant.submit();
|
||||
|
||||
const validRequest = JSON.parse(validHarness.requestCalls[0].options.body);
|
||||
assert.equal(validRequest.hardware_client_id, "hwc-runtime-client-1234");
|
||||
|
||||
const invalidHarness = createHarness(events, "hardware");
|
||||
invalidHarness.sandbox.CognitiveAgentConsole.getHardwareClientId = (
|
||||
() => "legacy_invalid_client"
|
||||
);
|
||||
invalidHarness.input.value = "进入浪漫观影模式";
|
||||
|
||||
await invalidHarness.sandbox.CognitiveAgentAssistant.submit();
|
||||
|
||||
const invalidRequest = JSON.parse(invalidHarness.requestCalls[0].options.body);
|
||||
assert.equal(Object.hasOwn(invalidRequest, "hardware_client_id"), false);
|
||||
});
|
||||
|
||||
test("partially completed imported mode uses neutral delegated wording", () => {
|
||||
const harness = createHarness([]);
|
||||
|
||||
harness.sandbox.CognitiveAgentAssistant.announceModeExecution(
|
||||
{ id: "cinema", name: "影院模式", command_flow: { function_configs: {}, plans: {} } },
|
||||
{
|
||||
status: "partially_succeeded",
|
||||
execution_mode: "hardware",
|
||||
execution_outcome: "submitted_unverified",
|
||||
deferred_requests: [
|
||||
{ execution_backend: "n7_vehicle_transfer" },
|
||||
{ execution_backend: "n7_vehicle_transfer" },
|
||||
],
|
||||
function_configs: {},
|
||||
command_plans: {},
|
||||
execution_report: null,
|
||||
operation_results: [],
|
||||
},
|
||||
{ command: "进入影院模式" },
|
||||
);
|
||||
|
||||
const assistantMessage = harness.messages.children.at(-1);
|
||||
assert.equal(
|
||||
assistantMessage.dataset.messageContent,
|
||||
"影院模式指令已提交,未由 PC 执行的 2 项动作将由车机继续处理。",
|
||||
);
|
||||
const actionStatus = assistantMessage.querySelector(".assistant-action-status").children.at(-1);
|
||||
assert.equal(actionStatus.textContent, "功能模式指令已提交");
|
||||
});
|
||||
|
||||
test("a follow-up turn carries only the active authoritative draft reference", async () => {
|
||||
const events = modeDraftEvents("req-draft-one", 24);
|
||||
const harness = createHarness(events);
|
||||
|
||||
Reference in New Issue
Block a user