| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- import { describe, expect } from "bun:test"
- import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
- import { Location } from "@opencode-ai/core/location"
- import { AbsolutePath } from "@opencode-ai/core/schema"
- import { Tool } from "@opencode-ai/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((draft) =>
- draft.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([
- {
- path: "echo",
- description: "Echo text",
- signature: "tools.echo(input: {\n text: string,\n}): Promise<string>",
- pinned: true,
- },
- ])
- }).pipe(
- Effect.scoped,
- Effect.provide(
- AppNodeBuilder.build(Tool.node, [
- [Location.node, Location.boundNode({ directory: AbsolutePath.make("/project") })],
- ]),
- ),
- ),
- )
- })
|