Spaces:
Paused
Paused
| """Tests for the /plan CLI slash command.""" | |
| from unittest.mock import MagicMock, patch | |
| from agent.skill_commands import scan_skill_commands | |
| from cli import HermesCLI | |
| def _make_cli(): | |
| cli_obj = HermesCLI.__new__(HermesCLI) | |
| cli_obj.config = {} | |
| cli_obj.console = MagicMock() | |
| cli_obj.agent = None | |
| cli_obj.conversation_history = [] | |
| cli_obj.session_id = "sess-123" | |
| cli_obj._pending_input = MagicMock() | |
| return cli_obj | |
| def _make_plan_skill(skills_dir): | |
| skill_dir = skills_dir / "plan" | |
| skill_dir.mkdir(parents=True, exist_ok=True) | |
| (skill_dir / "SKILL.md").write_text( | |
| """--- | |
| name: plan | |
| description: Plan mode skill. | |
| --- | |
| # Plan | |
| Use the current conversation context when no explicit instruction is provided. | |
| Save plans under the active workspace's .hermes/plans directory. | |
| """ | |
| ) | |
| class TestCLIPlanCommand: | |
| def test_plan_command_queues_plan_skill_message(self, tmp_path, monkeypatch): | |
| cli_obj = _make_cli() | |
| with patch("tools.skills_tool.SKILLS_DIR", tmp_path): | |
| _make_plan_skill(tmp_path) | |
| scan_skill_commands() | |
| result = cli_obj.process_command("/plan Add OAuth login") | |
| assert result is True | |
| cli_obj._pending_input.put.assert_called_once() | |
| queued = cli_obj._pending_input.put.call_args[0][0] | |
| assert "Plan mode skill" in queued | |
| assert "Add OAuth login" in queued | |
| assert ".hermes/plans" in queued | |
| assert str(tmp_path / "plans") not in queued | |
| assert "active workspace/backend cwd" in queued | |
| assert "Runtime note:" in queued | |
| def test_plan_without_args_uses_skill_context_guidance(self, tmp_path, monkeypatch): | |
| cli_obj = _make_cli() | |
| with patch("tools.skills_tool.SKILLS_DIR", tmp_path): | |
| _make_plan_skill(tmp_path) | |
| scan_skill_commands() | |
| cli_obj.process_command("/plan") | |
| queued = cli_obj._pending_input.put.call_args[0][0] | |
| assert "current conversation context" in queued | |
| assert ".hermes/plans/" in queued | |
| assert "conversation-plan.md" in queued | |