feat: improve mode and peripheral orchestration

This commit is contained in:
Miayui
2026-09-21 00:13:47 +08:00
parent 89707a42e2
commit 448c8b31a0
39 changed files with 3068 additions and 277 deletions
@@ -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);