mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
Live verification (opencode 1.17.8 + grok-build-0.1, funded key) showed the Grok runtime was loading INERT, three ways: 1. The provider override `provider.xai.npm=@ai-sdk/openai` failed model resolution (ProviderModelNotFoundError) — opencode can't resolve that package from its module path. Worse, ANY custom `provider.xai` block (even just options) breaks plugin-tool registration. opencode's BUILT-IN xai provider drives grok-build-0.1 with working tool-calls, so emit NO provider block; the key + base reach it via XAI_API_KEY / XAI_BASE_URL env (provider.options.apiKey alone does NOT authenticate). 2. Plugins referenced by absolute path in the config `plugin:` array never registered their hooks/tools. opencode 1.17.8 only registers from the plugin AUTO-DISCOVERY dir (~/.config/opencode/plugin/). Bake all plugins there. 3. Plugins must use a NAMED export, not `export default`. Changes: - opencode_config: no `provider` block, no `plugin` array; drop the dead XaiTarget + timeout machinery; build_opencode_config now takes a model string. - GrokProvider / orchestrator interactive env: inject XAI_API_KEY + XAI_BASE_URL (drop the now-unused OPENAI_*). - secret-scrub / budget-feed / secretary-tools / intake-tools: named exports; baked into /home/agent/.config/opencode/plugin/ (drop the EXTRA_PLUGINS env). - agent-grok* Dockerfiles: plugin dir + agent ownership; drop the unneeded @ai-sdk/openai global install. Verified live end-to-end: grok-build-0.1 calls read_company_state AND submit_directive through secretary-tools.js and the backend receives both with the agent token; a tool.execute.before guard fires; built-in tool-calls work. Targeted gate green (ruff/mypy/xenon + opencode_config/providers/interactive tests; node --check the plugins).
32 lines
1.5 KiB
Docker
32 lines
1.5 KiB
Docker
# GROK Intake (Prompter) Agent — interactive opencode-serve session on Grok.
|
|
# =============================================================================
|
|
# The Grok analogue of agent-prompter. Unlike the one-shot Grok runtime (a
|
|
# single `opencode run` that exits), this holds a PERSISTENT `opencode serve`
|
|
# session open, receives the human's messages over HTTP (POST /turn on :9000),
|
|
# and streams each reply back to the panel via the relay. Builds on the Grok
|
|
# runtime image (opencode + @ai-sdk/openai + the secret-scrub plugin); the
|
|
# driver renders opencode.json from the spawn env, then drives the session.
|
|
# =============================================================================
|
|
|
|
FROM roboco-agent-grok
|
|
|
|
USER root
|
|
|
|
# The intake propose_draft tool plugin (the model calls it; the driver turns the
|
|
# call into the panel's draft card), baked into the auto-discovery dir so only
|
|
# the intake image carries it. opencode registers tools from this directory, not
|
|
# from a config `plugin:`-array path (verified live).
|
|
COPY docker/grok/intake-tools.js /home/agent/.config/opencode/plugin/intake-tools.js
|
|
RUN chown agent:agent /home/agent/.config/opencode/plugin/intake-tools.js
|
|
|
|
USER agent
|
|
|
|
LABEL role="grok-prompter"
|
|
LABEL description="Intake interviewer on Grok — a long-lived opencode serve session driven by the panel"
|
|
|
|
# The in-container receiver the orchestrator delivers the human's turns to.
|
|
EXPOSE 9000
|
|
|
|
# Override the base grok one-shot entrypoint with the interactive intake driver.
|
|
ENTRYPOINT ["python", "-m", "roboco.agent_sdk.grok_intake_main"]
|