Skip to content

feat(opencode): suporte ao modo full e integração com extensão opencode-simplicio (lifecycle hooks e MCP full) #415

Description

@wesleysimplicio

Summary

Habilitar o suporte oficial ao OpenCode em modo full (normal) e integrar a extensão/plugin nativo opencode-simplicio (https://github.com/Pasblinn/opencode-simplicio).

Atualmente o OpenCode está configurado com SIMPLICIO_RUNTIME_MODE: "mapper-only" durante o registro MCP do Runtime, limitando o agente apenas a ferramentas de leitura e observação (simplicio_map, simplicio_context). Com esta issue, o OpenCode passa a ter paridade total com o Claude Code e Hermes, tornando-se um native-plugin com suporte a execução governada e lifecycle hooks de entrada e saída.

Contexto & Motivação

  1. Contrato Existente vs. Realidade:

    • Em tests/fixtures/host-surface-v1.json, o OpenCode já está classificado na categoria "full" junto com Cursor, VS Code e Codex ("canonical": ["simplicio_map", "simplicio_context", "simplicio_memory", "simplicio_edit", "simplicio_run"]).
    • Porém, em simplicio-runtime/src/planned_writes.rs, o ambiente gerado para ~/.config/opencode/opencode.json fixa SIMPLICIO_RUNTIME_MODE: "mapper-only", bloqueando simplicio_edit, simplicio_run e simplicio_loop.
  2. Lifecycle Hooks no OpenCode:

    • O OpenCode não utiliza arquivos estáticos de hooks como hooks.json ou settings.json. Seu mecanismo oficial de extensão é a API de plugins TypeScript (@opencode/plugin).
    • A extensão opencode-simplicio permite interceptar o ciclo de vida do agente nativamente:
      • Pre-Hook (turn.before / messages.transform): Aquece o cache do repositório (simplicio map) de forma assíncrona/não-bloqueante e injeta o MapHandle no contexto do modelo.
      • Stop / Turn-End Hook (turn.after): Registra a economia de tokens no ledger (simplicio savings record) e emite telemetria.
      • Pre-Tool Hook (tool.execute.before): Portão de segurança para comandos effectful.

Escopo & Entregáveis

1. No repositório simplicio:

  • Atualizar plugins/simplicio/host-surfaces.json:
    • Promover opencode de "surface": "runtime-mcp" para "surface": "native-plugin".
    • Apontar manifest/plugin para opencode.json e registrar hooks gerenciados.
  • Atualizar pypi/simplicio/simplicio/host_integrations.py:
    • Definir spec do OpenCode como native-plugin com suporte a modo full.
  • Adicionar/atualizar testes de contrato em tests/test_host_surface_contract.py e tests/test_host_integrations.py.
  • Documentar o fluxo de setup do opencode-simplicio em docs/hosts/opencode.md.

2. No repositório simplicio-runtime:

  • Atualizar src/planned_writes.rs:
    • Mudar opencode_environment de SIMPLICIO_RUNTIME_MODE: "mapper-only" para "full".
    • Suportar a declaração do plugin "opencode-simplicio" no array "plugin" de opencode.json.
  • Validar que simplicio_edit, simplicio_run e simplicio_savings são anunciados com sucesso no schema MCP do OpenCode.

3. Na extensão opencode-simplicio (https://github.com/Pasblinn/opencode-simplicio):

  • Implementar plugin TypeScript compatível com a especificação @opencode-ai/plugin:
    • Auto-registro do servidor MCP Simplicio com profile full.
    • Handler turn.before para simplicio map (advisory / fail-open).
    • Handler turn.after para simplicio savings record.
    • Slash commands /simplicio, /map, /savings.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestproviderAgent and editor providersruntimeRuntime integration

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions