public-opencode.test.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { describe, expect } from "bun:test"
  2. import { Effect, Schema } from "effect"
  3. import { OpenCode, Session, Tool } from "@opencode-ai/core/public"
  4. import { testEffect } from "./lib/effect"
  5. const it = testEffect(OpenCode.layer)
  6. describe("public native OpenCode API", () => {
  7. it.effect("exposes only the intentional Session capabilities", () =>
  8. Effect.gen(function* () {
  9. const opencode = yield* OpenCode.Service
  10. expect(Object.keys(opencode).sort()).toEqual(["sessions", "tools"])
  11. expect(Object.keys(opencode.sessions).sort()).toEqual([
  12. "context",
  13. "create",
  14. "events",
  15. "get",
  16. "interrupt",
  17. "list",
  18. "message",
  19. "messages",
  20. "prompt",
  21. ])
  22. expect(Session.ID.create()).toStartWith("ses_")
  23. expect(Session.MessageID.create()).toStartWith("msg_")
  24. expect(yield* opencode.sessions.list()).toBeArray()
  25. yield* opencode.tools.attach({
  26. public_tool: Tool.make({
  27. description: "Public tool",
  28. parameters: Schema.Struct({}),
  29. success: Schema.Struct({ ok: Schema.Boolean }),
  30. execute: () => Effect.succeed({ ok: true }),
  31. }),
  32. })
  33. }),
  34. )
  35. })