Skip to content

v0.4.0

Latest

Choose a tag to compare

@vtemian vtemian released this 31 Jul 09:43

[0.4.0] - 2026-07-31

Changed

  • Breaking: OcttoTool.execute now returns Promise<ToolResult> instead of Promise<string>. The plugin SDK widened the type to a union of a string and a structured { title?, output, metadata?, attachments? } result. Tool implementations may still return a plain string; code that consumes an execute result must narrow it, for which outputText is exported.
  • Breaking: @opencode-ai/plugin moved from 1.0.223 to 1.18.9.

Added

  • Top-level model key in octto.json overrides the model for every agent at once. Per-agent entries still win where set (#17).
  • outputText normalizes either ToolResult shape to its text.
  • End-to-end test harness running octto inside a real opencode session, with a real browser, in a container.

Fixed

  • allowOther now renders a freetext choice. The flag was accepted by four schemas and described to the model, but no renderer ever read it, so it was a no-op (#7, #48).
  • Question config properties are no longer stripped by Zod on the start_session and push_question paths, which had left pick_one, pick_many, rank and rate with empty option lists (#6, #28).
  • Octto no longer leaks its agent objects into the resolved config. A shallow copy let another plugin's in-place mutation reach octto's stored state and persist across resolutions, and let injected prompt fragments stack on every re-instantiation (#51).
  • create_brainstorm no longer tells the agent to run its own get_next_answer loop, which the agent prompt forbids and which records no findings into branch state. An unfinished brainstorm now reports why it stopped (#49).