44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { describe, expect } from "bun:test"
|
|
import { Effect } from "effect"
|
|
import { define } from "@opencode-ai/plugin/v2/effect"
|
|
import { AgentV2 } from "@opencode-ai/core/agent"
|
|
import { PluginV2 } from "@opencode-ai/core/plugin"
|
|
import { testEffect } from "./lib/effect"
|
|
import { PluginTestLayer } from "./plugin/fixture"
|
|
|
|
const it = testEffect(PluginTestLayer)
|
|
|
|
describe("PluginV2", () => {
|
|
it.effect("adds, replaces, and removes plugins", () =>
|
|
Effect.gen(function* () {
|
|
const plugins = yield* PluginV2.Service
|
|
const agents = yield* AgentV2.Service
|
|
let description = "first"
|
|
|
|
const managed = () =>
|
|
define({
|
|
id: "managed",
|
|
effect: (ctx) =>
|
|
ctx.agent
|
|
.transform((agents) =>
|
|
agents.update("configured", (agent) => {
|
|
agent.description = description
|
|
}),
|
|
)
|
|
.pipe(Effect.asVoid),
|
|
})
|
|
|
|
yield* plugins.add(PluginV2.ID.make("managed"), managed().effect)
|
|
|
|
expect((yield* agents.get(AgentV2.ID.make("configured")))?.description).toBe("first")
|
|
|
|
description = "second"
|
|
yield* plugins.add(PluginV2.ID.make("managed"), managed().effect)
|
|
expect((yield* agents.get(AgentV2.ID.make("configured")))?.description).toBe("second")
|
|
|
|
yield* plugins.remove(PluginV2.ID.make("managed"))
|
|
expect(yield* agents.get(AgentV2.ID.make("configured"))).toBeUndefined()
|
|
}),
|
|
)
|
|
})
|