Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| import json | |
| import pytest | |
| from pydantic import ValidationError | |
| from agent import config as config_module | |
| def _write_json(path, data): | |
| path.write_text(json.dumps(data), encoding="utf-8") | |
| def test_load_config_does_not_apply_slack_user_defaults_by_default( | |
| tmp_path, monkeypatch | |
| ): | |
| config_path = tmp_path / "config.json" | |
| _write_json( | |
| config_path, | |
| { | |
| "model_name": "moonshotai/Kimi-K2.6", | |
| "messaging": { | |
| "enabled": False, | |
| "destinations": {}, | |
| }, | |
| }, | |
| ) | |
| monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") | |
| monkeypatch.setenv("SLACK_CHANNEL_ID", "C123") | |
| config = config_module.load_config(str(config_path)) | |
| assert not config.messaging.enabled | |
| assert config.messaging.destinations == {} | |
| def test_load_config_applies_slack_user_defaults_from_env(tmp_path, monkeypatch): | |
| config_path = tmp_path / "config.json" | |
| _write_json(config_path, {"model_name": "moonshotai/Kimi-K2.6"}) | |
| monkeypatch.delenv("ML_INTERN_CLI_CONFIG", raising=False) | |
| monkeypatch.setattr( | |
| config_module, | |
| "DEFAULT_USER_CONFIG_PATH", | |
| tmp_path / "missing-user-config.json", | |
| ) | |
| monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") | |
| monkeypatch.setenv("SLACK_CHANNEL_ID", "C123") | |
| config = config_module.load_config(str(config_path), include_user_defaults=True) | |
| assert config.messaging.enabled | |
| assert config.messaging.auto_event_types == [ | |
| "approval_required", | |
| "error", | |
| "turn_complete", | |
| ] | |
| destination = config.messaging.destinations["slack.default"] | |
| assert destination.token == "xoxb-test" | |
| assert destination.channel == "C123" | |
| assert destination.allow_agent_tool | |
| assert destination.allow_auto_events | |
| def test_load_config_merges_user_config_before_env_substitution(tmp_path, monkeypatch): | |
| config_path = tmp_path / "config.json" | |
| user_config_path = tmp_path / "user-config.json" | |
| _write_json(config_path, {"model_name": "moonshotai/Kimi-K2.6"}) | |
| _write_json( | |
| user_config_path, | |
| { | |
| "messaging": { | |
| "enabled": True, | |
| "auto_event_types": ["approval_required"], | |
| "destinations": { | |
| "slack.team": { | |
| "provider": "slack", | |
| "token": "${USER_SLACK_TOKEN}", | |
| "channel": "C999", | |
| "allow_agent_tool": False, | |
| "allow_auto_events": True, | |
| }, | |
| }, | |
| }, | |
| }, | |
| ) | |
| monkeypatch.setenv("ML_INTERN_CLI_CONFIG", str(user_config_path)) | |
| monkeypatch.setenv("ML_INTERN_SLACK_NOTIFICATIONS", "0") | |
| monkeypatch.setenv("USER_SLACK_TOKEN", "xoxb-user") | |
| config = config_module.load_config(str(config_path), include_user_defaults=True) | |
| assert config.messaging.enabled | |
| assert config.messaging.auto_event_types == ["approval_required"] | |
| assert set(config.messaging.destinations) == {"slack.team"} | |
| destination = config.messaging.destinations["slack.team"] | |
| assert destination.token == "xoxb-user" | |
| assert destination.channel == "C999" | |
| assert not destination.allow_agent_tool | |
| assert destination.allow_auto_events | |
| def test_slack_user_defaults_can_be_disabled(tmp_path, monkeypatch): | |
| config_path = tmp_path / "config.json" | |
| _write_json( | |
| config_path, | |
| { | |
| "model_name": "moonshotai/Kimi-K2.6", | |
| "messaging": { | |
| "enabled": False, | |
| "destinations": {}, | |
| }, | |
| }, | |
| ) | |
| monkeypatch.delenv("ML_INTERN_CLI_CONFIG", raising=False) | |
| monkeypatch.setattr( | |
| config_module, | |
| "DEFAULT_USER_CONFIG_PATH", | |
| tmp_path / "missing-user-config.json", | |
| ) | |
| monkeypatch.setenv("ML_INTERN_SLACK_NOTIFICATIONS", "false") | |
| monkeypatch.setenv("SLACK_BOT_TOKEN", "xoxb-test") | |
| monkeypatch.setenv("SLACK_CHANNEL_ID", "C123") | |
| config = config_module.load_config(str(config_path), include_user_defaults=True) | |
| assert not config.messaging.enabled | |
| assert config.messaging.destinations == {} | |
| def test_tool_runtime_defaults_to_local(tmp_path): | |
| config_path = tmp_path / "config.json" | |
| _write_json(config_path, {"model_name": "moonshotai/Kimi-K2.6"}) | |
| config = config_module.load_config(str(config_path)) | |
| assert config.tool_runtime == "local" | |
| def test_user_config_can_set_sandbox_tool_runtime(tmp_path, monkeypatch): | |
| config_path = tmp_path / "config.json" | |
| user_config_path = tmp_path / "user-config.json" | |
| _write_json(config_path, {"model_name": "moonshotai/Kimi-K2.6"}) | |
| _write_json(user_config_path, {"tool_runtime": "sandbox"}) | |
| monkeypatch.setenv("ML_INTERN_CLI_CONFIG", str(user_config_path)) | |
| config = config_module.load_config(str(config_path), include_user_defaults=True) | |
| assert config.tool_runtime == "sandbox" | |
| def test_invalid_tool_runtime_is_rejected(tmp_path): | |
| config_path = tmp_path / "config.json" | |
| _write_json( | |
| config_path, | |
| {"model_name": "moonshotai/Kimi-K2.6", "tool_runtime": "hybrid"}, | |
| ) | |
| with pytest.raises(ValidationError): | |
| config_module.load_config(str(config_path)) | |