feat(cognitive): unlock settled sidechats as SIDECHAT_IDLE and add Main Chat refocus

This commit is contained in:
operator
2026-10-10 11:14:34 -04:00
parent 073ef556ba
commit 5f7e1e3a76
3 changed files with 131 additions and 4 deletions
+58
View File
@@ -14,11 +14,69 @@ class TestAgentCognitiveProbe(unittest.TestCase):
def test_badge_formatting(self):
self.assertIn("IDLE", acp.format_cognitive_badge("IDLE"))
self.assertIn("SIDE_IDLE", acp.format_cognitive_badge("SIDECHAT_IDLE"))
self.assertIn("THINKING", acp.format_cognitive_badge("THINKING"))
self.assertIn("INPUT_WAIT", acp.format_cognitive_badge("INPUT_WAIT"))
self.assertIn("SIDECHAT", acp.format_cognitive_badge("BUSY_SIDECHAT"))
self.assertIn("DARK", acp.format_cognitive_badge("DARK"))
@patch("agent_cognitive_probe.is_running_on_bl", return_value=True)
@patch("agent_cognitive_probe.run_cdp_eval_inside_netns")
def test_passive_sidechat_idle_state(self, mock_cdp, mock_bl):
# Simulate settled sidechat — generation complete, no parked modals
mock_cdp.return_value = {
"is_generating": False,
"is_typing": False,
"avatar_status": "Connected",
"is_main_chat": False,
"title": "Chat — test sidechat",
"is_input_wait": False
}
res = acp.get_passive_cognitive_state("def")
self.assertEqual(res["status"], "SIDECHAT_IDLE")
self.assertFalse(res["cognitive_lock"])
self.assertIsNone(res["lock_reason"])
@patch("agent_cognitive_probe.is_running_on_bl", return_value=True)
@patch("agent_cognitive_probe.run_cdp_eval_inside_netns")
def test_passive_sidechat_thinking_state(self, mock_cdp, mock_bl):
# In a sidechat but actively generating
mock_cdp.return_value = {
"is_generating": True,
"is_typing": False,
"avatar_status": "Connected",
"is_main_chat": False,
"title": "Chat — test sidechat",
"is_input_wait": False
}
res = acp.get_passive_cognitive_state("pip")
self.assertEqual(res["status"], "THINKING")
self.assertTrue(res["cognitive_lock"])
@patch("agent_cognitive_probe.is_running_on_bl", return_value=True)
@patch("agent_cognitive_probe.run_cdp_eval_inside_netns")
def test_passive_sidechat_input_wait_state(self, mock_cdp, mock_bl):
# In a sidechat with parked approval modal
mock_cdp.return_value = {
"is_generating": False,
"is_typing": False,
"avatar_status": "Connected",
"is_main_chat": False,
"title": "Chat — test sidechat",
"is_input_wait": True
}
res = acp.get_passive_cognitive_state("pip")
self.assertEqual(res["status"], "INPUT_WAIT")
self.assertTrue(res["cognitive_lock"])
@patch("agent_cognitive_probe.is_running_on_bl", return_value=True)
@patch("agent_cognitive_probe.run_cdp_eval_inside_netns")
def test_navigate_main_chat(self, mock_cdp, mock_bl):
mock_cdp.return_value = {"ok": True, "method": "click"}
res = acp.navigate_to_main_chat("def")
self.assertTrue(res["ok"])
self.assertEqual(res["method"], "click")
@patch("agent_cognitive_probe.is_running_on_bl", return_value=True)
@patch("agent_cognitive_probe.run_cdp_eval_inside_netns")
def test_passive_thinking_state(self, mock_cdp, mock_bl):