From aca3b7813d3946efb728b8e7f90b836f6d9d3b4b Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Fri, 10 Jul 2026 20:42:44 -0400 Subject: [PATCH] fix(core): publish skill source updates --- packages/core/src/skill.ts | 1 + packages/core/test/skill.test.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/packages/core/src/skill.ts b/packages/core/src/skill.ts index d325ceb599..2bdc478c24 100644 --- a/packages/core/src/skill.ts +++ b/packages/core/src/skill.ts @@ -92,6 +92,7 @@ const layer = Layer.effect( }, list: () => draft.sources as Source[], }), + finalize: () => events.publish(Event.Updated, {}).pipe(Effect.asVoid), }) const load = Effect.fn("SkillV2.load")(function* (source: Source) { diff --git a/packages/core/test/skill.test.ts b/packages/core/test/skill.test.ts index 1b8d846e69..428dfaecd0 100644 --- a/packages/core/test/skill.test.ts +++ b/packages/core/test/skill.test.ts @@ -54,6 +54,23 @@ function waitForSkillUpdate() { } describe("SkillV2", () => { + it.live("publishes updates when skill sources change", () => + Effect.gen(function* () { + const skill = yield* SkillV2.Service + + yield* Effect.acquireUseRelease( + waitForSkillUpdate(), + ({ deferred }) => + skill + .transform((editor) => + editor.source({ type: "directory", path: AbsolutePath.make("/tmp/opencode-skills") }), + ) + .pipe(Effect.andThen(Deferred.await(deferred)), Effect.timeout("1 second")), + ({ fiber }) => Fiber.interrupt(fiber), + ) + }), + ) + it.live("registers sources and resolves later source precedence", () => Effect.acquireRelease( Effect.promise(() => tmpdir()),