skill.test.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { describe, expect } from "bun:test"
  2. import { NodeFileSystem } from "@effect/platform-node"
  3. import { Config } from "@opencode-ai/core/config"
  4. import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder"
  5. import { FSUtil } from "@opencode-ai/core/fs-util"
  6. import { InstallationVersion } from "@opencode-ai/core/installation/version"
  7. import { Location } from "@opencode-ai/core/location"
  8. import { SkillPlugin } from "@opencode-ai/core/plugin/skill"
  9. import { AbsolutePath } from "@opencode-ai/core/schema"
  10. import { SkillV2 } from "@opencode-ai/core/skill"
  11. import { Effect } from "effect"
  12. import { location } from "../fixture/location"
  13. import { testEffect } from "../lib/effect"
  14. import { host } from "./host"
  15. const it = testEffect(AppNodeBuilder.build(SkillV2.node))
  16. describe("SkillPlugin.Plugin", () => {
  17. it.effect("registers built-in skills", () =>
  18. Effect.gen(function* () {
  19. const skill = yield* SkillV2.Service
  20. yield* SkillPlugin.Plugin.effect(host({ skill: { ...skill, reload: skill.reload } })).pipe(
  21. Effect.provideService(Config.Service, Config.Service.of({ entries: () => Effect.succeed([]) })),
  22. Effect.provideService(
  23. Location.Service,
  24. Location.Service.of(location({ directory: AbsolutePath.make(import.meta.dir) })),
  25. ),
  26. Effect.provide(FSUtil.defaultLayer),
  27. Effect.provide(NodeFileSystem.layer),
  28. )
  29. const skills = yield* skill.list()
  30. const report = skills.find((item) => item.name === "report")
  31. expect(skills).toContainEqual(
  32. expect.objectContaining({
  33. name: "customize-opencode",
  34. description: expect.stringContaining("opencode's own configuration"),
  35. }),
  36. )
  37. expect(skills).toContainEqual(
  38. expect.objectContaining({
  39. name: "report",
  40. description: expect.stringContaining("opencode issue"),
  41. }),
  42. )
  43. expect(report?.slash).toBe(true)
  44. expect(report?.content).toContain(`- opencode version: ${InstallationVersion}`)
  45. }),
  46. )
  47. })