|
|
@@ -1,7 +1,13 @@
|
|
|
import { describe, expect } from "bun:test"
|
|
|
import { Effect, Layer } from "effect"
|
|
|
import { Skill } from "../../src/skill"
|
|
|
+import { Discovery } from "../../src/skill/discovery"
|
|
|
+import { RuntimeFlags } from "../../src/effect/runtime-flags"
|
|
|
+import { Bus } from "../../src/bus"
|
|
|
+import { Config } from "../../src/config/config"
|
|
|
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
|
|
|
+import { AppFileSystem } from "@opencode-ai/core/filesystem"
|
|
|
+import { Global } from "@opencode-ai/core/global"
|
|
|
import { provideInstance, provideTmpdirInstance, tmpdir } from "../fixture/fixture"
|
|
|
import { testEffect } from "../lib/effect"
|
|
|
import path from "path"
|
|
|
@@ -10,6 +16,19 @@ import fs from "fs/promises"
|
|
|
const node = CrossSpawnSpawner.defaultLayer
|
|
|
|
|
|
const it = testEffect(Layer.mergeAll(Skill.defaultLayer, node))
|
|
|
+const itWithoutClaudeCodeSkills = testEffect(
|
|
|
+ Layer.mergeAll(
|
|
|
+ Skill.layer.pipe(
|
|
|
+ Layer.provide(Discovery.defaultLayer),
|
|
|
+ Layer.provide(Config.defaultLayer),
|
|
|
+ Layer.provide(Bus.layer),
|
|
|
+ Layer.provide(AppFileSystem.defaultLayer),
|
|
|
+ Layer.provide(Global.layer),
|
|
|
+ Layer.provide(RuntimeFlags.layer({ disableClaudeCodeSkills: true })),
|
|
|
+ ),
|
|
|
+ node,
|
|
|
+ ),
|
|
|
+)
|
|
|
|
|
|
async function createGlobalSkill(homeDir: string) {
|
|
|
const skillDir = path.join(homeDir, ".claude", "skills", "global-test-skill")
|
|
|
@@ -364,6 +383,43 @@ description: A skill in the .agents/skills directory.
|
|
|
),
|
|
|
)
|
|
|
|
|
|
+ itWithoutClaudeCodeSkills.live("skips Claude Code skills when disabled", () =>
|
|
|
+ provideTmpdirInstance(
|
|
|
+ (dir) =>
|
|
|
+ Effect.gen(function* () {
|
|
|
+ yield* Effect.promise(() =>
|
|
|
+ Promise.all([
|
|
|
+ Bun.write(
|
|
|
+ path.join(dir, ".claude", "skills", "claude-skill", "SKILL.md"),
|
|
|
+ `---
|
|
|
+name: claude-skill
|
|
|
+description: A skill in the .claude/skills directory.
|
|
|
+---
|
|
|
+
|
|
|
+# Claude Skill
|
|
|
+`,
|
|
|
+ ),
|
|
|
+ Bun.write(
|
|
|
+ path.join(dir, ".agents", "skills", "agent-skill", "SKILL.md"),
|
|
|
+ `---
|
|
|
+name: agent-skill
|
|
|
+description: A skill in the .agents/skills directory.
|
|
|
+---
|
|
|
+
|
|
|
+# Agent Skill
|
|
|
+`,
|
|
|
+ ),
|
|
|
+ ]),
|
|
|
+ )
|
|
|
+
|
|
|
+ const skill = yield* Skill.Service
|
|
|
+ const list = (yield* skill.all()).filter((s) => s.location !== "<built-in>")
|
|
|
+ expect(list.map((s) => s.name)).toEqual(["agent-skill"])
|
|
|
+ }),
|
|
|
+ { git: true },
|
|
|
+ ),
|
|
|
+ )
|
|
|
+
|
|
|
it.live("properly resolves directories that skills live in", () =>
|
|
|
provideTmpdirInstance(
|
|
|
(dir) =>
|