public-opencode.test.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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. "list",
  17. "message",
  18. "messages",
  19. "prompt",
  20. ])
  21. expect(Session.ID.create()).toStartWith("ses_")
  22. expect(Session.MessageID.create()).toStartWith("msg_")
  23. expect(yield* opencode.sessions.list()).toBeArray()
  24. yield* opencode.tools.attach({
  25. public_tool: Tool.make({
  26. description: "Public tool",
  27. parameters: Schema.Struct({}),
  28. success: Schema.Struct({ ok: Schema.Boolean }),
  29. execute: () => Effect.succeed({ ok: true }),
  30. }),
  31. })
  32. }),
  33. )
  34. })