skills.test.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { describe, expect } from "bun:test"
  2. import type { SessionNotification } from "@agentclientprotocol/sdk"
  3. import { Effect } from "effect"
  4. import { mkdir } from "node:fs/promises"
  5. import path from "node:path"
  6. import { cliIt } from "../../lib/cli-process"
  7. import { createAcpClient, initialize, newSession, verifierConfig, verifierSkill } from "./helpers"
  8. describe("kirincode acp skills subprocess", () => {
  9. cliIt.live(
  10. "skill slash command appears through available_commands_update",
  11. ({ home, llm, kirincode }) =>
  12. Effect.gen(function* () {
  13. const skills = path.join(home, "skills")
  14. yield* Effect.promise(() => mkdir(path.join(skills, "verifier-skill"), { recursive: true }))
  15. yield* Effect.promise(() => Bun.write(path.join(skills, "verifier-skill", "SKILL.md"), verifierSkill))
  16. const acp = yield* createAcpClient(
  17. { kirincode },
  18. { KIRINCODE_CONFIG_CONTENT: JSON.stringify(verifierConfig(llm.url, skills)) },
  19. )
  20. yield* initialize(acp)
  21. const session = yield* newSession(acp, home)
  22. const update = yield* acp.waitForNotification<SessionNotification>(
  23. "session/update",
  24. (params) =>
  25. params.sessionId === session.sessionId &&
  26. params.update.sessionUpdate === "available_commands_update" &&
  27. params.update.availableCommands.some(
  28. (command) => command.name === "verifier-skill" && command.description.length > 0,
  29. ),
  30. )
  31. expect(update.params?.sessionId).toBe(session.sessionId)
  32. }),
  33. 60_000,
  34. )
  35. })