Download packages/core/test/plugin/promise.test.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.21 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/test/plugin/promise.test.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/core/test/plugin/promise.test.ts
-
curl -L -o promise.test.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/test/plugin/promise.test.ts
2.21 kB
| import { describe, expect } from "bun:test" | |
| import { Effect } from "effect" | |
| import { AgentV2 } from "@opencode-ai/core/agent" | |
| import { PluginV2 } from "@opencode-ai/core/plugin" | |
| import { PluginHost } from "@opencode-ai/core/plugin/host" | |
| import { PluginPromise } from "@opencode-ai/core/plugin/promise" | |
| import { define } from "@opencode-ai/plugin/v2/promise" | |
| import { testEffect } from "../lib/effect" | |
| import { PluginTestLayer } from "./fixture" | |
| const it = testEffect(PluginTestLayer) | |
| describe("fromPromise", () => { | |
| it.effect("loads a promise plugin and registers a transform hook", () => | |
| Effect.gen(function* () { | |
| const agents = yield* AgentV2.Service | |
| const plugin = yield* PluginV2.Service | |
| const host = yield* PluginHost.make(plugin) | |
| const promisePlugin = define({ | |
| id: "promise-example", | |
| setup: async (ctx) => { | |
| expect(ctx.options.mode).toBe("strict") | |
| await ctx.agent.transform((draft) => { | |
| draft.update("reviewer", (item) => { | |
| item.description = "Reviews code" | |
| item.mode = "subagent" | |
| }) | |
| }) | |
| }, | |
| }) | |
| const adapted = PluginPromise.fromPromise(promisePlugin) | |
| yield* adapted.effect({ ...host, options: { mode: "strict" } }) | |
| expect(yield* agents.get(AgentV2.ID.make("reviewer"))).toMatchObject({ | |
| description: "Reviews code", | |
| mode: "subagent", | |
| }) | |
| }), | |
| ) | |
| it.effect("disposes a hook registration on request", () => | |
| Effect.gen(function* () { | |
| const agents = yield* AgentV2.Service | |
| const plugin = yield* PluginV2.Service | |
| const host = yield* PluginHost.make(plugin) | |
| const promisePlugin = define({ | |
| id: "promise-dispose", | |
| setup: async (ctx) => { | |
| const registration = await ctx.agent.transform((draft) => { | |
| draft.update("temp", (item) => { | |
| item.description = "temporary" | |
| }) | |
| }) | |
| await registration.dispose() | |
| }, | |
| }) | |
| const adapted = PluginPromise.fromPromise(promisePlugin) | |
| yield* adapted.effect(host) | |
| expect(yield* agents.get(AgentV2.ID.make("temp"))).toBeUndefined() | |
| }), | |
| ) | |
| }) | |