Skip to content

OpencodeCodeRuntime

opencode’s code mode as the runtime of @amends-dev/toolkit’s code mode. @opencode/codemode interprets the code a model writes, a subset of JavaScript that it implements itself, so the code can reach nothing it does not implement: no engine, worker, or serialization stands between the code and the tools, and what the code is given is only tools, console, and search. make gives the CodeRuntime that CodeMode.toolkit takes.

Since v0.1.0

Makes the runtime. A run interprets the code with the tools of its execution as tools, each called as await tools.<name>(input), and gives back what the code returned, as JSON, with what it logged. A failure of a tool reaches the code as an error whose message names the reason and what happened. A run that does not finish fails with CodeError: what the code threw, code the interpreter does not run, a call of a tool the run does not have, or more calls than allowed, each with where in the code when the interpreter knows.

Example (Code mode over opencode’s interpreter)

import { OpencodeCodeRuntime } from "@amends-dev/codemode-opencode"
import { Assembly, CodeMode } from "@amends-dev/toolkit"
import { Effect } from "effect"
declare const members: ReadonlyArray<Assembly.Member>
const program = Effect.gen(function* () {
const assembled = yield* Assembly.toolkit(members, () => "allow")
// The model is shown `execute`, whose code calls the assembled tools on this runtime.
return yield* CodeMode.toolkit(assembled, OpencodeCodeRuntime.make({ maxToolCalls: 50 }))
})

Signature

declare const make: (options?: Options) => CodeMode.CodeRuntime

Source

Since v0.1.0

What make takes.

Signature

export interface Options {
/**
* The most calls of tools one run may make, which the calls of `search`, the function the
* interpreter gives the code to find tools by, count in. Unlimited by default.
*/
readonly maxToolCalls?: number
}

Source

Since v0.1.0