From b2c8dd69d7cd2c98e659fdd5507fac56dd32788e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 2 May 2026 07:20:37 +0100 Subject: [PATCH] refactor: hide clawhub skill metadata helpers --- src/agents/skills-clawhub.ts | 43 ++++-------------------------------- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/src/agents/skills-clawhub.ts b/src/agents/skills-clawhub.ts index d47b0f51d45..a88f9be113d 100644 --- a/src/agents/skills-clawhub.ts +++ b/src/agents/skills-clawhub.ts @@ -1,4 +1,3 @@ -import { createHash } from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; import { fileExists } from "../infra/archive.js"; @@ -141,9 +140,7 @@ async function ensureSkillRoot(rootDir: string): Promise { throw new Error("downloaded archive is missing SKILL.md"); } -export async function readClawHubSkillsLockfile( - workspaceDir: string, -): Promise { +async function readClawHubSkillsLockfile(workspaceDir: string): Promise { const candidates = [ path.join(workspaceDir, DOT_DIR, "lock.json"), path.join(workspaceDir, LEGACY_DOT_DIR, "lock.json"), @@ -166,7 +163,7 @@ export async function readClawHubSkillsLockfile( return { version: 1, skills: {} }; } -export async function writeClawHubSkillsLockfile( +async function writeClawHubSkillsLockfile( workspaceDir: string, lockfile: ClawHubSkillsLockfile, ): Promise { @@ -175,7 +172,7 @@ export async function writeClawHubSkillsLockfile( await fs.writeFile(targetPath, `${JSON.stringify(lockfile, null, 2)}\n`, "utf8"); } -export async function readClawHubSkillOrigin(skillDir: string): Promise { +async function readClawHubSkillOrigin(skillDir: string): Promise { const candidates = [ path.join(skillDir, DOT_DIR, "origin.json"), path.join(skillDir, LEGACY_DOT_DIR, "origin.json"), @@ -199,7 +196,7 @@ export async function readClawHubSkillOrigin(skillDir: string): Promise { @@ -466,35 +463,3 @@ export async function readTrackedClawHubSkillSlugs(workspaceDir: string): Promis const lock = await readClawHubSkillsLockfile(workspaceDir); return Object.keys(lock.skills).toSorted(); } - -export async function computeSkillFingerprint(skillDir: string): Promise { - const digest = createHash("sha256"); - const queue = [skillDir]; - while (queue.length > 0) { - const current = queue.shift(); - if (!current) { - continue; - } - const entries = await fs.readdir(current, { withFileTypes: true }); - entries.sort((left, right) => left.name.localeCompare(right.name)); - for (const entry of entries) { - if (entry.name.startsWith(".")) { - continue; - } - const fullPath = path.join(current, entry.name); - if (entry.isDirectory()) { - queue.push(fullPath); - continue; - } - if (!entry.isFile()) { - continue; - } - const relPath = path.relative(skillDir, fullPath).split(path.sep).join("/"); - digest.update(relPath); - digest.update("\n"); - digest.update(await fs.readFile(fullPath)); - digest.update("\n"); - } - } - return digest.digest("hex"); -}