mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 10:45:33 -04:00
50 lines
2.0 KiB
TypeScript
50 lines
2.0 KiB
TypeScript
import { describe, expect } from "bun:test"
|
|
import { AgentV2 } from "@opencode-ai/core/agent"
|
|
import { CodeMode } from "@opencode-ai/core/codemode"
|
|
import { CodeModeInstructions } from "@opencode-ai/core/codemode/instructions"
|
|
import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
|
|
import { Effect, Layer } from "effect"
|
|
import { it } from "../lib/effect"
|
|
import { readInitial, readUpdate } from "../lib/instructions"
|
|
|
|
const agent = AgentV2.Info.make(AgentV2.Info.empty(AgentV2.ID.make("build")))
|
|
|
|
describe("CodeModeInstructions", () => {
|
|
it.effect("renders catalog changes and removal", () => {
|
|
let catalog: string | undefined = "Initial Code Mode catalog"
|
|
const layer = AppNodeBuilder.build(CodeModeInstructions.node, [
|
|
[
|
|
CodeMode.node,
|
|
Layer.mock(CodeMode.Service, {
|
|
materialize: () => Effect.succeed({ ...(catalog === undefined ? {} : { instructions: catalog }) }),
|
|
register: () => Effect.void,
|
|
}),
|
|
],
|
|
])
|
|
|
|
return Effect.gen(function* () {
|
|
const instructions = yield* CodeModeInstructions.Service
|
|
const initialized = yield* instructions.load({ id: agent.id, info: agent }).pipe(Effect.flatMap(readInitial))
|
|
expect(initialized.text).toBe("Initial Code Mode catalog")
|
|
|
|
catalog = "Updated Code Mode catalog"
|
|
expect(
|
|
yield* instructions
|
|
.load({ id: agent.id, info: agent })
|
|
.pipe(Effect.flatMap((context) => readUpdate(context, initialized))),
|
|
).toMatchObject({
|
|
text: "The Code Mode tool catalog has changed. This catalog supersedes the previous Code Mode tool catalog.\n\nUpdated Code Mode catalog",
|
|
})
|
|
|
|
catalog = undefined
|
|
expect(
|
|
yield* instructions
|
|
.load({ id: agent.id, info: agent })
|
|
.pipe(Effect.flatMap((context) => readUpdate(context, initialized))),
|
|
).toMatchObject({
|
|
text: "Code Mode tools are no longer available. Do not use any previously listed Code Mode tools.",
|
|
})
|
|
}).pipe(Effect.provide(layer))
|
|
})
|
|
})
|