| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { describe, expect, test } from "bun:test"
- import path from "path"
- import { Effect } from "effect"
- import { Agent } from "../../src/agent/agent"
- import { Instance } from "../../src/project/instance"
- import { SystemPrompt } from "../../src/session"
- import { provideInstance, tmpdir } from "../fixture/fixture"
- function load<A>(dir: string, fn: (svc: Agent.Interface) => Effect.Effect<A>) {
- return Effect.runPromise(provideInstance(dir)(Agent.Service.use(fn)).pipe(Effect.provide(Agent.defaultLayer)))
- }
- describe("session.system", () => {
- test("skills output is sorted by name and stable across calls", async () => {
- await using tmp = await tmpdir({
- git: true,
- init: async (dir) => {
- for (const [name, description] of [
- ["zeta-skill", "Zeta skill."],
- ["alpha-skill", "Alpha skill."],
- ["middle-skill", "Middle skill."],
- ]) {
- const skillDir = path.join(dir, ".opencode", "skill", name)
- await Bun.write(
- path.join(skillDir, "SKILL.md"),
- `---
- name: ${name}
- description: ${description}
- ---
- # ${name}
- `,
- )
- }
- },
- })
- const home = process.env.OPENCODE_TEST_HOME
- process.env.OPENCODE_TEST_HOME = tmp.path
- try {
- await Instance.provide({
- directory: tmp.path,
- fn: async () => {
- const build = await load(tmp.path, (svc) => svc.get("build"))
- const runSkills = Effect.gen(function* () {
- const svc = yield* SystemPrompt.Service
- return yield* svc.skills(build!)
- }).pipe(Effect.provide(SystemPrompt.defaultLayer))
- const first = await Effect.runPromise(runSkills)
- const second = await Effect.runPromise(runSkills)
- expect(first).toBe(second)
- const alpha = first!.indexOf("<name>alpha-skill</name>")
- const middle = first!.indexOf("<name>middle-skill</name>")
- const zeta = first!.indexOf("<name>zeta-skill</name>")
- expect(alpha).toBeGreaterThan(-1)
- expect(middle).toBeGreaterThan(alpha)
- expect(zeta).toBeGreaterThan(middle)
- },
- })
- } finally {
- process.env.OPENCODE_TEST_HOME = home
- }
- })
- })
|