codemode.test.ts 1.1 KB

1234567891011121314151617181920212223242526272829
  1. import { describe, expect } from "bun:test"
  2. import { CodeMode } from "@opencode-ai/core/codemode"
  3. import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
  4. import { Tool } from "@opencode-ai/core/tool/tool"
  5. import { Effect, Schema } from "effect"
  6. import { it } from "./lib/effect"
  7. describe("CodeMode", () => {
  8. it.effect("owns registrations, execute, and catalog materialization", () =>
  9. Effect.gen(function* () {
  10. const codeMode = yield* CodeMode.Service
  11. yield* codeMode.register(
  12. Tool.registrationEntries({
  13. echo: Tool.make({
  14. description: "Echo text",
  15. input: Schema.Struct({ text: Schema.String }),
  16. output: Schema.String,
  17. execute: ({ text }) => Effect.succeed({ output: text }),
  18. }),
  19. }),
  20. )
  21. const materialized = yield* codeMode.materialize()
  22. expect(materialized.tool).toBeDefined()
  23. expect(materialized.instructions).toContain("Echo text")
  24. expect(materialized.instructions).toContain("tools.echo(input:")
  25. }).pipe(Effect.scoped, Effect.provide(AppNodeBuilder.build(CodeMode.node))),
  26. )
  27. })