diff mrjunejune/inference/copilot_sidecar_test.py @ 280:49e9e591c9bb

Add persistent dictation, prewarmed WebRTC speech input, Copilot SDK routing, animated conversation lifecycle controls, parking, and architecture coverage.
author MrJuneJune <me@mrjunejune.com>
date Tue, 18 Aug 2026 19:14:53 -0700
parents 056790c4fb0d
children c57149ad216e
line wrap: on
line diff
--- a/mrjunejune/inference/copilot_sidecar_test.py	Mon Aug 17 22:22:36 2026 -0700
+++ b/mrjunejune/inference/copilot_sidecar_test.py	Tue Aug 18 19:14:53 2026 -0700
@@ -10,6 +10,7 @@
     Sidecar,
     SidecarConfig,
     _derive_sdk_session_id,
+    _CANVAS_ORCHESTRATOR_PROMPT,
     _SDK_SESSION_NAMESPACE,
     _validate_history,
     _HISTORY_MAX_ENTRIES,
@@ -50,7 +51,15 @@
 
 def _fake_sdk_id(conversation_id: str, profile: str) -> str:
     """Compute the deterministic SDK session ID for use in test assertions."""
-    p = _FAKE_PROFILES[profile]
+    if profile == "canvas_orchestrator":
+        content = _CANVAS_ORCHESTRATOR_PROMPT.strip()
+        p = {
+            "content": content,
+            "version": 1,
+            "hash": hashlib.sha256(content.encode()).hexdigest(),
+        }
+    else:
+        p = _FAKE_PROFILES[profile]
     compiled = CompiledProfile(
         profile=profile,
         content=p["content"],
@@ -210,6 +219,54 @@
             ["turn.error", "turn.done"],
         )
 
+    async def test_warm_creates_session_without_sending_prompt(self):
+        sidecar, client = await self.make_sidecar()
+        await sidecar.dispatch(
+            {
+                "command": "conversation.warm",
+                "request_id": "warm-1",
+                "conversation_id": "canvas-worker-1",
+                "prompt_profile": "canvas_orchestrator",
+                "prompt_version": 1,
+                "knowledge_version": 1,
+                "resume_existing": False,
+            }
+        )
+
+        self.assertEqual(len(client.create_calls), 1)
+        self.assertEqual(len(client.resume_calls), 0)
+        session = next(iter(client.sessions.values()))
+        self.assertEqual(session.prompts, [])
+        self.assertEqual(
+            [item["type"] for item in self.output[-2:]],
+            ["session.warmed", "turn.done"],
+        )
+
+    async def test_warm_rejects_non_boolean_resume_existing(self):
+        sidecar, client = await self.make_sidecar()
+        await sidecar.dispatch(
+            {
+                "command": "conversation.warm",
+                "request_id": "warm-invalid",
+                "conversation_id": "canvas-worker-1",
+                "prompt_profile": "canvas_orchestrator",
+                "prompt_version": 1,
+                "knowledge_version": 1,
+                "resume_existing": "false",
+            }
+        )
+
+        self.assertEqual(len(client.create_calls), 0)
+        self.assertEqual(len(client.resume_calls), 0)
+        self.assertEqual(
+            [item["type"] for item in self.output[-2:]],
+            ["turn.error", "turn.done"],
+        )
+        self.assertEqual(
+            self.output[-2]["error"]["message"],
+            "resume_existing must be a boolean",
+        )
+
     async def test_multi_turn_reuses_one_session_and_configures_sdk(self):
         sidecar, client = await self.make_sidecar()
         for request_id, prompt in (("r1", "first"), ("r2", "second")):
@@ -411,6 +468,7 @@
                 _fake_sdk_id("delete-me", "public_visitor"),
                 _fake_sdk_id("delete-me", "invited_friend"),
                 _fake_sdk_id("delete-me", "june_admin"),
+                _fake_sdk_id("delete-me", "canvas_orchestrator"),
             },
         )
         self.assertTrue(client.stopped)
@@ -958,6 +1016,7 @@
                 _fake_sdk_id("conv-del-check", "public_visitor"),
                 _fake_sdk_id("conv-del-check", "invited_friend"),
                 _fake_sdk_id("conv-del-check", "june_admin"),
+                _fake_sdk_id("conv-del-check", "canvas_orchestrator"),
             },
         )
         self.assertNotIn("conv-del-check", client.delete_calls)
@@ -977,6 +1036,7 @@
                 _fake_sdk_id("ghost-conv", "public_visitor"),
                 _fake_sdk_id("ghost-conv", "invited_friend"),
                 _fake_sdk_id("ghost-conv", "june_admin"),
+                _fake_sdk_id("ghost-conv", "canvas_orchestrator"),
             },
         )
         self.assertNotIn("ghost-conv", client.delete_calls)