Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import { describe, expect } from "bun:test"import { AppNodeBuilder } from "@opencode/core/effect/app-node-builder"import { Location } from "@opencode/core/location"import { AbsolutePath } from "@opencode/core/schema"import { Tool } from "@opencode/core/tool"import { Effect, Schema } from "effect"import { it } from "./lib/effect"
describe("CodeMode", () => { it.effect("owns registrations, execute, and catalog materialization", () => Effect.gen(function* () { const tools = yield* Tool.Service yield* tools.transform((editor) => { editor.namespace({ name: "empty", description: "No tools registered yet" }) editor.add({ name: "echo", description: "Echo text", input: Schema.Struct({ text: Schema.String }), output: Schema.String, options: { pinned: true }, execute: ({ text }) => Effect.succeed({ output: text }), }) })
const snapshot = yield* tools.snapshot() expect(snapshot.definitions.some((tool) => tool.name === "execute")).toBe(true) expect(snapshot.codeModeCatalog).toStrictEqual({ tools: [ { type: "tool", name: "echo", description: "Echo text", signature: "tools.echo({\n text: string,\n}): Promise<string>", pinned: true, }, { type: "namespace", name: "empty", description: "No tools registered yet", tools: [], }, ], }) }).pipe( Effect.scoped, Effect.provide( AppNodeBuilder.build(Tool.node, [ Location.node.replace(Location.boundNode({ directory: AbsolutePath.make("/project") })), ]), ), ), )})