MCPcopy Create free account
hub / github.com/MaxBittker/runebench / run

Method run

agents/opencode_adapter.py:234–336  ·  view source on GitHub ↗
(
        self,
        instruction: str,
        environment: BaseEnvironment,
        context: AgentContext,
    )

Source from the content-addressed store, hash-verified

232 def _resolve_api_key_env(self) -> dict[str, str]:
233 """Resolve the correct API key env var(s) based on model provider prefix."""
234 model_id = self.model_name or self._default_model
235 provider_name = model_id.split("/", 1)[0] if "/" in model_id else "openrouter"
236
237 env_var = _PROVIDER_KEY_MAP.get(provider_name, "OPENROUTER_API_KEY")
238 key_value = self._original_env.get(env_var) or os.environ.get(env_var, "")
239
240 env = {}
241 if key_value:
242 env[env_var] = key_value
243 # OpenCode's google provider expects GOOGLE_GENERATIVE_AI_API_KEY
244 if provider_name in ("gemini", "google"):
245 env["GOOGLE_GENERATIVE_AI_API_KEY"] = key_value
246 return env
247
248 async def run(
249 self,
250 instruction: str,
251 environment: BaseEnvironment,
252 context: AgentContext,
253 ) -> None:
254 self._last_instruction = instruction
255 escaped_instruction = shlex.quote(instruction)
256
257 env = self._resolve_api_key_env()
258 env["OPENCODE_YOLO"] = "true"
259 env["OPENCODE_DANGEROUSLY_SKIP_PERMISSIONS"] = "true"
260 env = {k: v for k, v in env.items() if v}
261
262 opencode_config = self._build_opencode_config()
263 config_json = json.dumps(opencode_config, indent=2)
264 escaped_config = shlex.quote(config_json)
265
266 model_name = self.model_name or self._default_model
267 # Remap provider prefix for OpenCode CLI (e.g. gemini/ → google/)
268 if "/" in model_name:
269 raw_provider, model_suffix = model_name.split("/", 1)
270 remapped = self._PROVIDER_REMAP.get(raw_provider)
271 if remapped:
272 model_name = f"{remapped}/{model_suffix}"
273
274 prefix = self._log_prefix
275 log_file = self._log_file
276
277 setup_command = (
278 f"echo {escaped_config} > /app/opencode.json && "
279 f"echo '[{prefix}-setup] Wrote /app/opencode.json'"
280 )
281
282 await self.exec_as_agent(environment, command=setup_command, env=env)
283
284 escaped_model = shlex.quote(model_name)
285 continue_instruction = shlex.quote(
286 "You were previously working on this task but stopped early. "
287 "There is still time remaining. Check the current game state with "
288 "sdk.getState() and CONTINUE training. Do NOT write a summary — "
289 "keep grinding. " + instruction
290 )
291

Callers

nothing calls this directly

Calls 3

_resolve_api_key_envMethod · 0.95
exec_as_agentMethod · 0.80

Tested by

no test coverage detected