Spaces:
Running
Running
| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # All rights reserved. | |
| # | |
| # This source code is licensed under the BSD-style license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| from __future__ import annotations | |
| import json | |
| from opencode_env.config import OpenCodeConfig | |
| from opencode_env.opencode_runtime import ( | |
| build_env_vars, | |
| build_install_cmd, | |
| build_opencode_json, | |
| build_run_cmd, | |
| ) | |
| def _openai_cfg(**overrides) -> OpenCodeConfig: | |
| base = dict( | |
| provider="openai", | |
| base_url="https://api.openai.com/v1", | |
| api_key="sk-test", | |
| model="openai/gpt-5.3-codex", | |
| ) | |
| base.update(overrides) | |
| return OpenCodeConfig(**base) | |
| def test_opencode_json_has_schema_and_provider_block(): | |
| cfg = _openai_cfg() | |
| doc = json.loads(build_opencode_json(cfg)) | |
| assert doc["$schema"] == "https://opencode.ai/config.json" | |
| assert doc["model"] == "intercepted/gpt-5.3-codex" | |
| provider = doc["provider"]["intercepted"] | |
| assert provider["npm"] == "@ai-sdk/openai" | |
| assert provider["options"]["baseURL"] == "https://api.openai.com/v1" | |
| assert provider["options"]["apiKey"] == "sk-test" | |
| assert provider["options"]["timeout"] == 600_000 | |
| def test_opencode_json_disables_tools_by_default(): | |
| cfg = _openai_cfg() | |
| doc = json.loads(build_opencode_json(cfg)) | |
| assert doc["tools"] == {"webfetch": False, "question": False} | |
| def test_opencode_json_extra_is_deep_merged(): | |
| cfg = _openai_cfg(extra_opencode_json={"theme": "dark", "provider": {"intercepted": {"options": {"custom": 1}}}}) | |
| doc = json.loads(build_opencode_json(cfg)) | |
| assert doc["theme"] == "dark" | |
| # Deep merge preserves other keys in the nested options block | |
| options = doc["provider"]["intercepted"]["options"] | |
| assert options["baseURL"] == "https://api.openai.com/v1" | |
| assert options["custom"] == 1 | |
| def test_install_cmd_pins_version_when_not_latest(): | |
| cfg = _openai_cfg(opencode_version="0.5.3") | |
| cmd = build_install_cmd(cfg) | |
| assert "OPENCODE_VERSION=0.5.3" in cmd | |
| assert "curl -fsSL https://opencode.ai/install | bash" in cmd | |
| assert "opencode --version" in cmd | |
| assert "/home/user/.config/opencode" in cmd | |
| def test_install_cmd_respects_sandbox_home(): | |
| cfg = _openai_cfg(sandbox_home="/root") | |
| cmd = build_install_cmd(cfg) | |
| assert "/root/.config/opencode" in cmd | |
| assert "/home/user" not in cmd | |
| def test_install_cmd_omits_version_env_when_latest(): | |
| cfg = _openai_cfg(opencode_version="latest") | |
| cmd = build_install_cmd(cfg) | |
| assert "OPENCODE_VERSION" not in cmd | |
| def test_run_cmd_uses_json_format_by_default(): | |
| cfg = _openai_cfg() | |
| cmd = build_run_cmd(cfg) | |
| assert "opencode run --format json" in cmd | |
| assert '"$(cat /home/user/task/instruction.md)"' in cmd | |
| assert "tee /home/user/logs/agent/opencode.jsonl" in cmd | |
| def test_run_cmd_default_format_has_no_flag(): | |
| cfg = _openai_cfg(run_format="default") | |
| cmd = build_run_cmd(cfg) | |
| assert "--format" not in cmd | |
| def test_env_vars_default_to_config_url(): | |
| cfg = _openai_cfg() | |
| env = build_env_vars(cfg) | |
| assert env["OPENAI_BASE_URL"] == "https://api.openai.com/v1" | |
| assert env["OPENAI_API_KEY"] == "sk-test" | |
| assert env["OPENCODE_CONFIG"] == "/home/user/.config/opencode/opencode.json" | |
| def test_env_vars_respect_proxy_override(): | |
| cfg = _openai_cfg(extra_env={"EXTRA": "yes"}) | |
| env = build_env_vars(cfg, base_url_override="http://localhost:7000/v1") | |
| assert env["OPENAI_BASE_URL"] == "http://localhost:7000/v1" | |
| assert env["EXTRA"] == "yes" | |