@musher-dev/musher-sdk 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/frontmatter.ts","../src/adapters/openai.ts","../src/adapters/claude.ts","../src/adapters/vscode.ts","../src/client.ts","../src/bundle.ts","../src/handles/agent-spec-handle.ts","../src/handles/file-handle.ts","../src/handles/prompt-handle.ts","../src/handles/skill-handle.ts","../src/handles/toolset-handle.ts","../src/errors.ts","../src/ref.ts","../src/selection.ts","../src/cache.ts","../src/config.ts","../src/keyring.ts","../src/paths.ts","../src/http.ts","../src/schemas/asset.ts","../src/schemas/bundle.ts","../src/schemas/common.ts","../src/schemas/resolve.ts","../src/schemas/version.ts","../src/resources/bundles.ts","../src/index.ts","../src/adapters/index.ts","../src/convenience.ts"],"sourcesContent":["/**\n * Minimal YAML frontmatter parser for SKILL.md files.\n *\n * Extracts `name` and `description` from `---` delimited frontmatter.\n * Only handles single-line scalar values (quoted or unquoted).\n */\n\nimport type { SkillHandle } from \"./handles/skill-handle.js\";\n\nexport interface FrontmatterResult {\n\tname?: string | undefined;\n\tdescription?: string | undefined;\n\tbody: string;\n}\n\nconst FRONTMATTER_RE = /^---[ \\t]*\\n([\\s\\S]*?)---[ \\t]*\\n?([\\s\\S]*)$/;\nconst FIELD_RE = /^(name|description)\\s*:\\s*(.+)$/;\n\n/**\n * Parse YAML frontmatter from a markdown string.\n * Returns extracted `name` and `description` fields plus the remaining body.\n */\nexport function parseFrontmatter(text: string): FrontmatterResult {\n\tconst match = FRONTMATTER_RE.exec(text);\n\tif (!match) {\n\t\treturn { body: text };\n\t}\n\n\tconst raw = match[1] as string;\n\tconst body = match[2] as string;\n\tlet name: string | undefined;\n\tlet description: string | undefined;\n\n\tfor (const line of raw.split(\"\\n\")) {\n\t\tconst fm = FIELD_RE.exec(line.trim());\n\t\tif (!fm) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst value = stripQuotes((fm[2] as string).trim());\n\t\tif (fm[1] === \"name\") {\n\t\t\tname = value;\n\t\t} else if (fm[1] === \"description\") {\n\t\t\tdescription = value;\n\t\t}\n\t}\n\n\treturn { name, description, body };\n}\n\n/** Strip matching single or double quotes from a value. */\nfunction stripQuotes(s: string): string {\n\tif (s.length >= 2) {\n\t\tconst first = s[0];\n\t\tconst last = s[s.length - 1];\n\t\tif ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\")) {\n\t\t\treturn s.slice(1, -1);\n\t\t}\n\t}\n\treturn s;\n}\n\n/**\n * Extract a description string from a skill, preferring frontmatter metadata.\n */\nexport function extractDescription(skill: SkillHandle): string {\n\tconst def = skill.definition();\n\tif (!def) {\n\t\treturn `Skill: ${skill.name}`;\n\t}\n\n\tconst text = def.text();\n\tconst fm = parseFrontmatter(text);\n\n\tif (fm.description) {\n\t\treturn fm.description;\n\t}\n\n\t// Fall back to first 200 chars of raw text\n\treturn text.slice(0, 200).replace(/\\n/g, \" \").trim() || `Skill: ${skill.name}`;\n}\n","/**\n * OpenAI adapter — export skills as local files or inline base64 ZIP.\n */\n\nimport { extractDescription } from \"../frontmatter.js\";\nimport type { SkillHandle } from \"../handles/skill-handle.js\";\n\nconst SKILL_PREFIX_RE = /^skills\\/[^/]+\\//;\n\nexport interface OpenAILocalSkill {\n\tname: string;\n\tdescription: string;\n\tpath: string;\n}\n\nexport interface OpenAIInlineSkill {\n\ttype: \"inline\";\n\tname: string;\n\tdescription: string;\n\tsource: {\n\t\ttype: \"base64\";\n\t\tmediaType: \"application/zip\";\n\t\tdata: string;\n\t};\n}\n\n/**\n * Export a skill as a local file directory structure.\n */\nexport async function exportOpenAILocalSkill(\n\tskill: SkillHandle,\n\ttargetDir: string,\n): Promise<OpenAILocalSkill> {\n\tconst { mkdir, writeFile } = await import(\"node:fs/promises\");\n\tconst { join, resolve, dirname } = await import(\"node:path\");\n\n\tconst skillDir = resolve(targetDir, skill.name);\n\tawait mkdir(skillDir, { recursive: true });\n\n\tfor (const fh of skill.files()) {\n\t\tconst relativePath = fh.logicalPath.replace(SKILL_PREFIX_RE, \"\");\n\t\tconst filePath = join(skillDir, relativePath);\n\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\tawait writeFile(filePath, fh.bytes());\n\t}\n\n\tconst description = extractDescription(skill);\n\n\treturn { name: skill.name, description, path: skillDir };\n}\n\n/**\n * Export a skill as an inline base64 ZIP matching OpenAI's ShellToolInlineSkill shape.\n */\nexport function exportOpenAIInlineSkill(skill: SkillHandle): OpenAIInlineSkill {\n\tconst description = extractDescription(skill);\n\tconst zipBuffer = buildStoreZip(skill);\n\tconst data = zipBuffer.toString(\"base64\");\n\n\treturn {\n\t\ttype: \"inline\",\n\t\tname: skill.name,\n\t\tdescription,\n\t\tsource: { type: \"base64\", mediaType: \"application/zip\", data },\n\t};\n}\n\n/**\n * Minimal STORE-method ZIP builder (no compression).\n * Produces a valid ZIP archive with a top-level skill directory.\n */\nfunction buildStoreZip(skill: SkillHandle): Buffer {\n\tconst files = skill.files().map((fh) => {\n\t\tconst relativePath = fh.logicalPath.replace(SKILL_PREFIX_RE, \"\");\n\t\tconst name = `${skill.name}/${relativePath}`;\n\t\treturn { name, data: Buffer.from(fh.bytes()) };\n\t});\n\n\tconst parts: Buffer[] = [];\n\tconst centralParts: Buffer[] = [];\n\tlet offset = 0;\n\n\tfor (const file of files) {\n\t\tconst nameBuffer = Buffer.from(file.name, \"utf-8\");\n\n\t\t// Local file header\n\t\tconst local = Buffer.alloc(30 + nameBuffer.length);\n\t\tlocal.writeUInt32LE(0x04034b50, 0); // signature\n\t\tlocal.writeUInt16LE(20, 4); // version needed\n\t\tlocal.writeUInt16LE(0, 6); // flags\n\t\tlocal.writeUInt16LE(0, 8); // compression: STORE\n\t\tlocal.writeUInt16LE(0, 10); // mod time\n\t\tlocal.writeUInt16LE(0, 12); // mod date\n\t\tlocal.writeUInt32LE(crc32(file.data), 14); // crc-32\n\t\tlocal.writeUInt32LE(file.data.length, 18); // compressed size\n\t\tlocal.writeUInt32LE(file.data.length, 22); // uncompressed size\n\t\tlocal.writeUInt16LE(nameBuffer.length, 26); // filename length\n\t\tlocal.writeUInt16LE(0, 28); // extra field length\n\t\tnameBuffer.copy(local, 30);\n\n\t\t// Central directory header\n\t\tconst central = Buffer.alloc(46 + nameBuffer.length);\n\t\tcentral.writeUInt32LE(0x02014b50, 0); // signature\n\t\tcentral.writeUInt16LE(20, 4); // version made by\n\t\tcentral.writeUInt16LE(20, 6); // version needed\n\t\tcentral.writeUInt16LE(0, 8); // flags\n\t\tcentral.writeUInt16LE(0, 10); // compression: STORE\n\t\tcentral.writeUInt16LE(0, 12); // mod time\n\t\tcentral.writeUInt16LE(0, 14); // mod date\n\t\tcentral.writeUInt32LE(crc32(file.data), 16); // crc-32\n\t\tcentral.writeUInt32LE(file.data.length, 20); // compressed size\n\t\tcentral.writeUInt32LE(file.data.length, 24); // uncompressed size\n\t\tcentral.writeUInt16LE(nameBuffer.length, 28); // filename length\n\t\tcentral.writeUInt16LE(0, 30); // extra field length\n\t\tcentral.writeUInt16LE(0, 32); // comment length\n\t\tcentral.writeUInt16LE(0, 34); // disk number start\n\t\tcentral.writeUInt16LE(0, 36); // internal attrs\n\t\tcentral.writeUInt32LE(0, 38); // external attrs\n\t\tcentral.writeUInt32LE(offset, 42); // local header offset\n\t\tnameBuffer.copy(central, 46);\n\n\t\tparts.push(local, file.data);\n\t\tcentralParts.push(central);\n\t\toffset += local.length + file.data.length;\n\t}\n\n\tconst centralDirOffset = offset;\n\tlet centralDirSize = 0;\n\tfor (const c of centralParts) {\n\t\tcentralDirSize += c.length;\n\t}\n\n\t// End of central directory\n\tconst eocd = Buffer.alloc(22);\n\teocd.writeUInt32LE(0x06054b50, 0); // signature\n\teocd.writeUInt16LE(0, 4); // disk number\n\teocd.writeUInt16LE(0, 6); // central dir disk\n\teocd.writeUInt16LE(files.length, 8); // entries on disk\n\teocd.writeUInt16LE(files.length, 10); // total entries\n\teocd.writeUInt32LE(centralDirSize, 12); // central dir size\n\teocd.writeUInt32LE(centralDirOffset, 16); // central dir offset\n\teocd.writeUInt16LE(0, 20); // comment length\n\n\treturn Buffer.concat([...parts, ...centralParts, eocd]);\n}\n\n/** CRC-32 calculation. */\nfunction crc32(data: Buffer): number {\n\tlet crc = 0xffffffff;\n\tfor (let i = 0; i < data.length; i++) {\n\t\tcrc ^= data[i] as number;\n\t\tfor (let j = 0; j < 8; j++) {\n\t\t\tcrc = crc & 1 ? (crc >>> 1) ^ 0xedb88320 : crc >>> 1;\n\t\t}\n\t}\n\treturn (crc ^ 0xffffffff) >>> 0;\n}\n","/**\n * Claude Code adapter — export plugin dirs and install skills to .claude/skills/.\n */\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { Bundle } from \"../bundle.js\";\nimport type { Selection } from \"../selection.js\";\n\nconst SKILL_PREFIX_RE = /^skills\\/[^/]+\\//;\n\n/**\n * Export a Claude Code plugin directory structure from a Bundle or Selection.\n *\n * Produces the layout expected by Claude Code's plugin system:\n *\n * <pluginDir>/.claude-plugin/plugin.json — plugin metadata\n * <pluginDir>/skills/<name>/SKILL.md — skill content\n *\n * Returns the absolute path of the created plugin directory.\n */\nexport async function exportClaudePlugin(\n\tsource: Bundle | Selection,\n\topts: { targetDir: string; name?: string; description?: string },\n): Promise<string> {\n\tconst bundle = \"bundle\" in source ? source.bundle : (source as Bundle);\n\tconst name = opts.name ?? bundle.ref.slug;\n\tconst pluginDir = resolve(opts.targetDir, name);\n\n\tawait mkdir(pluginDir, { recursive: true });\n\n\tconst files = source.files();\n\tfor (const fh of files) {\n\t\tconst filePath = join(pluginDir, fh.logicalPath);\n\t\tawait mkdir(join(filePath, \"..\"), { recursive: true });\n\t\tawait writeFile(filePath, fh.bytes());\n\t}\n\n\t// Write .claude-plugin/plugin.json (Claude Code plugin metadata)\n\tconst metaDir = join(pluginDir, \".claude-plugin\");\n\tawait mkdir(metaDir, { recursive: true });\n\tconst manifest = {\n\t\tname,\n\t\tdescription: opts.description ?? \"\",\n\t\tversion: bundle.version,\n\t\tfiles: files.map((f) => f.logicalPath),\n\t};\n\tawait writeFile(join(metaDir, \"plugin.json\"), JSON.stringify(manifest, null, 2));\n\n\treturn pluginDir;\n}\n\n/**\n * Install skills from a bundle into a .claude/skills/ directory.\n * Returns the list of written absolute paths.\n */\nexport async function installClaudeSkills(\n\tbundle: Bundle | Selection,\n\tdir: string,\n\topts?: { prefix?: string },\n): Promise<string[]> {\n\tconst source = \"bundle\" in bundle ? bundle.bundle : (bundle as Bundle);\n\tconst skillsDir = resolve(dir, \".claude\", \"skills\");\n\tconst prefix = opts?.prefix ?? \"\";\n\tconst written: string[] = [];\n\n\tconst skills =\n\t\t\"skills\" in bundle && typeof bundle.skills === \"function\" ? bundle.skills() : source.skills();\n\n\tfor (const skill of skills) {\n\t\tconst skillDir = join(skillsDir, prefix, skill.name);\n\t\tawait mkdir(skillDir, { recursive: true });\n\n\t\tfor (const fh of skill.files()) {\n\t\t\t// Strip the skills/{name}/ prefix from the logical path\n\t\t\tconst relativePath = fh.logicalPath.replace(SKILL_PREFIX_RE, \"\");\n\t\t\tconst filePath = join(skillDir, relativePath);\n\t\t\tawait mkdir(join(filePath, \"..\"), { recursive: true });\n\t\t\tawait writeFile(filePath, fh.bytes());\n\t\t\twritten.push(filePath);\n\t\t}\n\t}\n\n\treturn written;\n}\n","/**\n * VS Code / IDE adapter — install skill directories.\n */\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type { Bundle } from \"../bundle.js\";\nimport type { Selection } from \"../selection.js\";\n\nconst SKILL_PREFIX_RE = /^skills\\/[^/]+\\//;\n\n/**\n * Install skills from a bundle into an IDE skill tree directory.\n * Default subdir is \".agents/skills\".\n * Mode is always \"copy\" (real files, not symlinks).\n * Returns list of written absolute paths.\n */\nexport async function installVSCodeSkills(\n\tsource: Bundle | Selection,\n\tdir: string,\n\topts?: { subdir?: string },\n): Promise<string[]> {\n\tconst bundle = \"bundle\" in source ? source.bundle : (source as Bundle);\n\tconst subdir = opts?.subdir ?? \".agents/skills\";\n\tconst skillsDir = resolve(dir, subdir);\n\tconst written: string[] = [];\n\n\tconst skills =\n\t\t\"skills\" in source && typeof source.skills === \"function\" ? source.skills() : bundle.skills();\n\n\tfor (const skill of skills) {\n\t\tconst skillDir = join(skillsDir, skill.name);\n\t\tawait mkdir(skillDir, { recursive: true });\n\n\t\tfor (const fh of skill.files()) {\n\t\t\tconst relativePath = fh.logicalPath.replace(SKILL_PREFIX_RE, \"\");\n\t\t\tconst filePath = join(skillDir, relativePath);\n\t\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\t\tawait writeFile(filePath, fh.bytes());\n\t\t\twritten.push(filePath);\n\t\t}\n\t}\n\n\treturn written;\n}\n","/**\n * MusherClient — main entry point for the SDK.\n *\n * Composes HTTP transport, resource classes, and disk cache\n * into a single facade with high-level pull/load convenience methods.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { Bundle } from \"./bundle.js\";\nimport { BundleCache } from \"./cache.js\";\nimport { type ClientConfig, resolveConfig } from \"./config.js\";\nimport { IntegrityError } from \"./errors.js\";\nimport { HttpTransport } from \"./http.js\";\nimport { BundleRef } from \"./ref.js\";\nimport { BundlesResource } from \"./resources/bundles.js\";\nimport type { BundleResolveOutput } from \"./types.js\";\n\nlet _loadDeprecationWarned = false;\n\nexport class MusherClient {\n\treadonly bundles: BundlesResource;\n\n\tprivate readonly _cache: BundleCache;\n\tprivate readonly _http: HttpTransport;\n\n\tconstructor(config?: ClientConfig) {\n\t\tconst resolved = resolveConfig(config);\n\t\tthis._http = new HttpTransport(resolved);\n\t\tthis._cache = new BundleCache(\n\t\t\tresolved.cacheDir,\n\t\t\tresolved.baseUrl,\n\t\t\tresolved.manifestTtlSeconds,\n\t\t\tresolved.refTtlSeconds,\n\t\t);\n\t\tthis.bundles = new BundlesResource(this._http);\n\t}\n\n\t/**\n\t * Resolve a bundle via the API, download all assets, and write to disk cache.\n\t * Returns a Bundle object.\n\t *\n\t * @param ref - Bundle reference (e.g. \"namespace/slug\", \"namespace/slug:version\").\n\t * @param version - Optional semver constraint. Defaults to latest.\n\t */\n\tasync pull(ref: string, version?: string): Promise<Bundle> {\n\t\tconst parsed = BundleRef.parse(ref);\n\t\tconst resolvedVersion = version ?? parsed.version;\n\t\tconst resolved = await this.bundles.resolve(\n\t\t\tparsed.namespace,\n\t\t\tparsed.slug,\n\t\t\tresolvedVersion,\n\t\t\tparsed.digest,\n\t\t);\n\n\t\t// Download asset contents as Buffers, verifying integrity before caching\n\t\tconst assets = new Map<string, Buffer>();\n\t\tif (resolved.manifest?.layers) {\n\t\t\tfor (const layer of resolved.manifest.layers) {\n\t\t\t\tconst asset = await this.bundles.getAsset(\n\t\t\t\t\tparsed.namespace,\n\t\t\t\t\tparsed.slug,\n\t\t\t\t\tlayer.assetId,\n\t\t\t\t\tresolved.version,\n\t\t\t\t);\n\t\t\t\tif (asset.contentText != null) {\n\t\t\t\t\tconst buf = Buffer.from(asset.contentText, \"utf-8\");\n\t\t\t\t\tconst hash = createHash(\"sha256\").update(buf).digest(\"hex\");\n\t\t\t\t\tif (hash !== layer.contentSha256) {\n\t\t\t\t\t\tthrow new IntegrityError(layer.contentSha256, hash);\n\t\t\t\t\t}\n\t\t\t\t\tassets.set(layer.logicalPath, buf);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tawait this._cache.write(resolved, assets);\n\n\t\t// Cache the ref → version mapping, but NEVER for digest-based lookups\n\t\t// (digest refs must not overwrite aliases like \"latest\")\n\t\tif (!parsed.digest) {\n\t\t\tconst refAlias = resolvedVersion ?? \"latest\";\n\t\t\tawait this._cache.cacheRef(parsed.namespace, parsed.slug, refAlias, resolved.version);\n\t\t}\n\n\t\treturn new Bundle(resolved, assets);\n\t}\n\n\t/**\n\t * Resolve bundle metadata without downloading content.\n\t * Checks the manifest cache (with TTL) before calling the API.\n\t *\n\t * @param ref - Bundle reference.\n\t * @param version - Optional semver constraint.\n\t */\n\tasync resolve(ref: string, version?: string): Promise<BundleResolveOutput> {\n\t\tconst parsed = BundleRef.parse(ref);\n\t\tlet resolvedVersion = version ?? parsed.version;\n\n\t\t// For unversioned, non-digest refs, try the ref cache first\n\t\tif (!(resolvedVersion || parsed.digest)) {\n\t\t\tconst cachedVersion = await this._cache.resolveRef(parsed.namespace, parsed.slug, \"latest\");\n\t\t\tif (cachedVersion) {\n\t\t\t\tresolvedVersion = cachedVersion;\n\t\t\t}\n\t\t}\n\n\t\t// If version is known, check manifest cache freshness\n\t\tif (resolvedVersion) {\n\t\t\tconst fresh = await this._cache.isFresh(parsed.namespace, parsed.slug, resolvedVersion);\n\t\t\tif (fresh) {\n\t\t\t\tconst manifest = await this._cache.loadManifest(\n\t\t\t\t\tparsed.namespace,\n\t\t\t\t\tparsed.slug,\n\t\t\t\t\tresolvedVersion,\n\t\t\t\t);\n\t\t\t\tif (manifest) {\n\t\t\t\t\treturn manifest;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Cache miss or stale — call the API\n\t\tconst resolved = await this.bundles.resolve(\n\t\t\tparsed.namespace,\n\t\t\tparsed.slug,\n\t\t\tresolvedVersion,\n\t\t\tparsed.digest,\n\t\t);\n\n\t\t// Persist resolved manifest to disk cache\n\t\tawait this._cache.writeManifest(resolved);\n\n\t\t// Cache the ref → version mapping for future lookups\n\t\tif (!parsed.digest) {\n\t\t\tconst refAlias = resolvedVersion ?? \"latest\";\n\t\t\tawait this._cache.cacheRef(parsed.namespace, parsed.slug, refAlias, resolved.version);\n\t\t}\n\n\t\treturn resolved;\n\t}\n\n\t/**\n\t * @deprecated Use `pull()` instead. This method will be removed in a future version.\n\t *\n\t * Load a bundle into memory. Checks cache first (TTL-aware), pulls if stale.\n\t */\n\tasync load(ref: string, version?: string): Promise<Bundle> {\n\t\tif (!_loadDeprecationWarned) {\n\t\t\t_loadDeprecationWarned = true;\n\t\t\tprocess.emitWarning(\n\t\t\t\t\"MusherClient.load() is deprecated. Use pull() instead.\",\n\t\t\t\t\"DeprecationWarning\",\n\t\t\t);\n\t\t}\n\n\t\tconst parsed = BundleRef.parse(ref);\n\t\tlet resolvedVersion = version ?? parsed.version;\n\n\t\t// For unversioned, non-digest refs, try the ref cache first\n\t\tif (!(resolvedVersion || parsed.digest)) {\n\t\t\tconst cachedVersion = await this._cache.resolveRef(parsed.namespace, parsed.slug, \"latest\");\n\t\t\tif (cachedVersion) {\n\t\t\t\tresolvedVersion = cachedVersion;\n\t\t\t}\n\t\t}\n\n\t\t// If version is known, check manifest cache\n\t\tif (resolvedVersion) {\n\t\t\tconst fresh = await this._cache.isFresh(parsed.namespace, parsed.slug, resolvedVersion);\n\t\t\tif (fresh) {\n\t\t\t\tconst loaded = await this._cache.load(parsed.namespace, parsed.slug, resolvedVersion);\n\t\t\t\tif (loaded) {\n\t\t\t\t\treturn loaded;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Pull (resolve + download + cache)\n\t\treturn this.pull(ref, version);\n\t}\n\n\t/** Cache management utilities. */\n\treadonly cache = {\n\t\t/** Remove expired cache entries and garbage-collect unreferenced blobs. */\n\t\tclean: (): Promise<void> => this._cache.clean(),\n\t\t/** Remove all cached data. */\n\t\tpurge: (): Promise<void> => this._cache.purge(),\n\t};\n}\n","/**\n * Bundle — high-level object returned by pull().\n *\n * Groups files into domain handles (skills, prompts, toolsets, agent specs)\n * by reading assetType + parsing logical path conventions from manifest layers.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport {\n\tAgentSpecHandle,\n\tFileHandle,\n\tPromptHandle,\n\tSkillHandle,\n\tToolsetHandle,\n} from \"./handles/index.js\";\nimport { BundleRef } from \"./ref.js\";\nimport { Selection } from \"./selection.js\";\nimport type { BundleResolveOutput, LoadedAsset, SelectionFilter, VerifyResult } from \"./types.js\";\n\nexport class Bundle {\n\treadonly ref: BundleRef;\n\treadonly version: string;\n\treadonly metadata: BundleResolveOutput;\n\n\tprivate readonly _files: Map<string, FileHandle>;\n\tprivate readonly _skills: Map<string, SkillHandle>;\n\tprivate readonly _prompts: Map<string, PromptHandle>;\n\tprivate readonly _toolsets: Map<string, ToolsetHandle>;\n\tprivate readonly _agentSpecs: Map<string, AgentSpecHandle>;\n\n\tconstructor(metadata: BundleResolveOutput, contents: Map<string, Buffer>) {\n\t\tthis.metadata = metadata;\n\t\tthis.version = metadata.version;\n\t\tthis.ref = BundleRef.parse(metadata.ref);\n\n\t\t// Build FileHandle map from manifest layers + content buffers\n\t\tthis._files = new Map();\n\t\tif (metadata.manifest?.layers) {\n\t\t\tfor (const layer of metadata.manifest.layers) {\n\t\t\t\tconst buf = contents.get(layer.logicalPath);\n\t\t\t\tif (buf) {\n\t\t\t\t\tconst fh = new FileHandle(\n\t\t\t\t\t\tlayer.logicalPath,\n\t\t\t\t\t\tlayer.assetType,\n\t\t\t\t\t\tlayer.contentSha256,\n\t\t\t\t\t\tlayer.sizeBytes,\n\t\t\t\t\t\tbuf,\n\t\t\t\t\t\tlayer.mediaType ?? undefined,\n\t\t\t\t\t);\n\t\t\t\t\tthis._files.set(layer.logicalPath, fh);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Group into domain handles\n\t\tthis._skills = new Map();\n\t\tthis._prompts = new Map();\n\t\tthis._toolsets = new Map();\n\t\tthis._agentSpecs = new Map();\n\n\t\tconst skillGroups = new Map<string, FileHandle[]>();\n\n\t\tfor (const fh of this._files.values()) {\n\t\t\tswitch (fh.assetType) {\n\t\t\t\tcase \"skill\": {\n\t\t\t\t\t// Group by first directory segment under skills/ prefix\n\t\t\t\t\tconst skillName = extractSkillName(fh.logicalPath);\n\t\t\t\t\tif (skillName) {\n\t\t\t\t\t\tlet group = skillGroups.get(skillName);\n\t\t\t\t\t\tif (!group) {\n\t\t\t\t\t\t\tgroup = [];\n\t\t\t\t\t\t\tskillGroups.set(skillName, group);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgroup.push(fh);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"prompt\": {\n\t\t\t\t\tconst name = baseFileName(fh.logicalPath);\n\t\t\t\t\tthis._prompts.set(name, new PromptHandle(name, fh));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"tool_config\": {\n\t\t\t\t\tconst name = baseFileName(fh.logicalPath);\n\t\t\t\t\tthis._toolsets.set(name, new ToolsetHandle(name, fh));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"agent_definition\": {\n\t\t\t\t\tconst name = baseFileName(fh.logicalPath);\n\t\t\t\t\tthis._agentSpecs.set(name, new AgentSpecHandle(name, fh));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const [name, files] of skillGroups) {\n\t\t\tthis._skills.set(name, new SkillHandle(name, files));\n\t\t}\n\t}\n\n\t// -- File access --\n\n\tfile(path: string): FileHandle | undefined {\n\t\treturn this._files.get(path);\n\t}\n\n\tfiles(): FileHandle[] {\n\t\treturn [...this._files.values()];\n\t}\n\n\t// -- Domain handles --\n\n\tskills(): SkillHandle[] {\n\t\treturn [...this._skills.values()];\n\t}\n\n\tskill(name: string): SkillHandle {\n\t\tconst h = this._skills.get(name);\n\t\tif (!h) {\n\t\t\tthrow new Error(`Skill \"${name}\" not found in bundle`);\n\t\t}\n\t\treturn h;\n\t}\n\n\tprompts(): PromptHandle[] {\n\t\treturn [...this._prompts.values()];\n\t}\n\n\tprompt(name: string): PromptHandle {\n\t\tconst h = this._prompts.get(name);\n\t\tif (!h) {\n\t\t\tthrow new Error(`Prompt \"${name}\" not found in bundle`);\n\t\t}\n\t\treturn h;\n\t}\n\n\ttoolsets(): ToolsetHandle[] {\n\t\treturn [...this._toolsets.values()];\n\t}\n\n\ttoolset(name: string): ToolsetHandle {\n\t\tconst h = this._toolsets.get(name);\n\t\tif (!h) {\n\t\t\tthrow new Error(`Toolset \"${name}\" not found in bundle`);\n\t\t}\n\t\treturn h;\n\t}\n\n\tagentSpecs(): AgentSpecHandle[] {\n\t\treturn [...this._agentSpecs.values()];\n\t}\n\n\tagentSpec(name: string): AgentSpecHandle {\n\t\tconst h = this._agentSpecs.get(name);\n\t\tif (!h) {\n\t\t\tthrow new Error(`AgentSpec \"${name}\" not found in bundle`);\n\t\t}\n\t\treturn h;\n\t}\n\n\t// -- Filtering --\n\n\tselect(filter: SelectionFilter): Selection {\n\t\treturn new Selection(this, filter);\n\t}\n\n\t// -- Integrity --\n\n\tverify(): VerifyResult {\n\t\tconst errors: Array<{ path: string; expected: string; actual: string }> = [];\n\n\t\tfor (const fh of this._files.values()) {\n\t\t\tconst actual = createHash(\"sha256\").update(fh.bytes()).digest(\"hex\");\n\t\t\tif (actual !== fh.sha256) {\n\t\t\t\terrors.push({ path: fh.logicalPath, expected: fh.sha256, actual });\n\t\t\t}\n\t\t}\n\n\t\treturn { ok: errors.length === 0, errors };\n\t}\n\n\t// -- Lockfile --\n\n\tasync writeLockfile(path: string): Promise<void> {\n\t\tconst lock = {\n\t\t\tref: this.ref.toString(),\n\t\t\tversion: this.version,\n\t\t\tfiles: [...this._files.values()].map((f) => ({\n\t\t\t\tlogicalPath: f.logicalPath,\n\t\t\t\tsha256: f.sha256,\n\t\t\t\tsizeBytes: f.sizeBytes,\n\t\t\t})),\n\t\t};\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(lock, null, 2));\n\t}\n\n\t// -- Export adapter convenience methods --\n\n\tasync exportClaudePlugin(opts: {\n\t\ttargetDir: string;\n\t\tname?: string;\n\t\tdescription?: string;\n\t}): Promise<string> {\n\t\tconst { exportClaudePlugin } = await import(\"./adapters/claude.js\");\n\t\treturn exportClaudePlugin(this, opts);\n\t}\n\n\tasync installClaudeSkills(dir: string, opts?: { prefix?: string }): Promise<string[]> {\n\t\tconst { installClaudeSkills } = await import(\"./adapters/claude.js\");\n\t\treturn installClaudeSkills(this, dir, opts);\n\t}\n\n\tasync installVSCodeSkills(dir: string, opts?: { subdir?: string }): Promise<string[]> {\n\t\tconst { installVSCodeSkills } = await import(\"./adapters/vscode.js\");\n\t\treturn installVSCodeSkills(this, dir, opts);\n\t}\n\n\t// -- Deprecated compat --\n\n\t/** @deprecated Use `file(path)` instead. */\n\tgetAsset(path: string): LoadedAsset | undefined {\n\t\tconst fh = this._files.get(path);\n\t\tif (!fh) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn {\n\t\t\tlogicalPath: fh.logicalPath,\n\t\t\tassetType: fh.assetType,\n\t\t\tcontent: fh.text(),\n\t\t\tsha256: fh.sha256,\n\t\t\tmediaType: fh.mediaType,\n\t\t};\n\t}\n\n\t/** @deprecated Use `files().filter(...)` instead. */\n\tgetAssetsByType(type: string): LoadedAsset[] {\n\t\treturn [...this._files.values()]\n\t\t\t.filter((fh) => fh.assetType === type)\n\t\t\t.map((fh) => ({\n\t\t\t\tlogicalPath: fh.logicalPath,\n\t\t\t\tassetType: fh.assetType,\n\t\t\t\tcontent: fh.text(),\n\t\t\t\tsha256: fh.sha256,\n\t\t\t\tmediaType: fh.mediaType,\n\t\t\t}));\n\t}\n}\n\n/** Extract skill name from logical path: \"skills/foo/SKILL.md\" → \"foo\" */\nfunction extractSkillName(logicalPath: string): string | undefined {\n\tif (!logicalPath.startsWith(\"skills/\")) {\n\t\treturn undefined;\n\t}\n\tconst rest = logicalPath.slice(\"skills/\".length);\n\tconst slashIdx = rest.indexOf(\"/\");\n\tif (slashIdx === -1) {\n\t\treturn undefined;\n\t}\n\tconst name = rest.slice(0, slashIdx);\n\treturn name || undefined;\n}\n\n/** Extract a base file name from a logical path for use as handle name. */\nfunction baseFileName(logicalPath: string): string {\n\tconst parts = logicalPath.split(\"/\");\n\tconst last = parts[parts.length - 1] ?? logicalPath;\n\t// Strip extension\n\tconst dotIdx = last.lastIndexOf(\".\");\n\treturn dotIdx > 0 ? last.slice(0, dotIdx) : last;\n}\n","/**\n * AgentSpecHandle — wraps a single agent_definition asset.\n */\n\nimport type { FileHandle } from \"./file-handle.js\";\n\nexport class AgentSpecHandle {\n\treadonly name: string;\n\tprivate readonly _file: FileHandle;\n\n\tconstructor(name: string, file: FileHandle) {\n\t\tthis.name = name;\n\t\tthis._file = file;\n\t}\n\n\t/** All files belonging to this agent spec (single file). */\n\tfiles(): FileHandle[] {\n\t\treturn [this._file];\n\t}\n\n\t/** The agent spec content as text. */\n\tcontent(): string {\n\t\treturn this._file.text();\n\t}\n\n\t/** The underlying file handle. */\n\tfile(): FileHandle {\n\t\treturn this._file;\n\t}\n}\n","/**\n * FileHandle — binary-safe content wrapper for bundle assets.\n */\n\nexport class FileHandle {\n\treadonly logicalPath: string;\n\treadonly assetType: string;\n\treadonly sha256: string;\n\treadonly mediaType: string | undefined;\n\treadonly sizeBytes: number;\n\tprivate readonly _content: Buffer;\n\n\tconstructor(\n\t\tlogicalPath: string,\n\t\tassetType: string,\n\t\tsha256: string,\n\t\tsizeBytes: number,\n\t\tcontent: Buffer,\n\t\tmediaType?: string | undefined,\n\t) {\n\t\tthis.logicalPath = logicalPath;\n\t\tthis.assetType = assetType;\n\t\tthis.sha256 = sha256;\n\t\tthis.sizeBytes = sizeBytes;\n\t\tthis._content = content;\n\t\tthis.mediaType = mediaType;\n\t}\n\n\t/** Return content as a UTF-8 string. */\n\ttext(): string {\n\t\treturn this._content.toString(\"utf-8\");\n\t}\n\n\t/** Return content as a Uint8Array. */\n\tbytes(): Uint8Array {\n\t\treturn new Uint8Array(this._content.buffer, this._content.byteOffset, this._content.byteLength);\n\t}\n\n\t/** Return content as a ReadableStream. */\n\tstream(): ReadableStream<Uint8Array> {\n\t\tconst bytes = this.bytes();\n\t\treturn new ReadableStream({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue(bytes);\n\t\t\t\tcontroller.close();\n\t\t\t},\n\t\t});\n\t}\n}\n","/**\n * PromptHandle — wraps a single prompt asset.\n */\n\nimport type { FileHandle } from \"./file-handle.js\";\n\nexport class PromptHandle {\n\treadonly name: string;\n\tprivate readonly _file: FileHandle;\n\n\tconstructor(name: string, file: FileHandle) {\n\t\tthis.name = name;\n\t\tthis._file = file;\n\t}\n\n\t/** All files belonging to this prompt (single file). */\n\tfiles(): FileHandle[] {\n\t\treturn [this._file];\n\t}\n\n\t/** The prompt content as text. */\n\tcontent(): string {\n\t\treturn this._file.text();\n\t}\n\n\t/** The underlying file handle. */\n\tfile(): FileHandle {\n\t\treturn this._file;\n\t}\n}\n","/**\n * SkillHandle — groups files belonging to a single skill directory.\n */\n\nimport type { FrontmatterResult } from \"../frontmatter.js\";\nimport { parseFrontmatter } from \"../frontmatter.js\";\nimport type { FileHandle } from \"./file-handle.js\";\n\nexport class SkillHandle {\n\treadonly name: string;\n\tprivate readonly _files: FileHandle[];\n\n\tconstructor(name: string, files: FileHandle[]) {\n\t\tthis.name = name;\n\t\tthis._files = files;\n\t}\n\n\t/** All files belonging to this skill. */\n\tfiles(): FileHandle[] {\n\t\treturn [...this._files];\n\t}\n\n\t/** The SKILL.md definition file, if present. */\n\tdefinition(): FileHandle | undefined {\n\t\treturn this._files.find(\n\t\t\t(f) =>\n\t\t\t\tf.logicalPath.toLowerCase().endsWith(\"/skill.md\") ||\n\t\t\t\tf.logicalPath.toLowerCase() === \"skill.md\",\n\t\t);\n\t}\n\n\t/** Parsed frontmatter from SKILL.md, if present. */\n\tmetadata(): FrontmatterResult | undefined {\n\t\tconst def = this.definition();\n\t\tif (!def) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn parseFrontmatter(def.text());\n\t}\n\n\t/** Export as an OpenAI local skill directory. */\n\tasync exportOpenAILocal(\n\t\ttargetDir: string,\n\t): Promise<import(\"../adapters/openai.js\").OpenAILocalSkill> {\n\t\tconst { exportOpenAILocalSkill } = await import(\"../adapters/openai.js\");\n\t\treturn exportOpenAILocalSkill(this, targetDir);\n\t}\n\n\t/** Export as an OpenAI inline base64 ZIP skill. */\n\tasync exportOpenAIInline(): Promise<import(\"../adapters/openai.js\").OpenAIInlineSkill> {\n\t\tconst { exportOpenAIInlineSkill } = await import(\"../adapters/openai.js\");\n\t\treturn exportOpenAIInlineSkill(this);\n\t}\n}\n","/**\n * ToolsetHandle — wraps a single tool_config asset.\n */\n\nimport type { FileHandle } from \"./file-handle.js\";\n\nexport class ToolsetHandle {\n\treadonly name: string;\n\tprivate readonly _file: FileHandle;\n\n\tconstructor(name: string, file: FileHandle) {\n\t\tthis.name = name;\n\t\tthis._file = file;\n\t}\n\n\t/** All files belonging to this toolset (single file). */\n\tfiles(): FileHandle[] {\n\t\treturn [this._file];\n\t}\n\n\t/** The toolset content as text. */\n\tcontent(): string {\n\t\treturn this._file.text();\n\t}\n\n\t/** The underlying file handle. */\n\tfile(): FileHandle {\n\t\treturn this._file;\n\t}\n}\n","/**\n * Error hierarchy for the Musher SDK.\n *\n * All errors extend MushError so consumers can catch the base class.\n */\n\nexport class MushError extends Error {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"MushError\";\n\t}\n}\n\n// -- API errors ---------------------------------------------------------------\n\nexport interface ProblemDetail {\n\ttype: string;\n\ttitle: string;\n\tstatus: number;\n\tdetail: string;\n\tinstance?: string | undefined;\n\ttraceId?: string | undefined;\n}\n\nexport class ApiError extends MushError {\n\treadonly status: number;\n\treadonly problem: ProblemDetail;\n\n\tconstructor(problem: ProblemDetail, options?: ErrorOptions) {\n\t\tsuper(problem.detail, options);\n\t\tthis.name = \"ApiError\";\n\t\tthis.status = problem.status;\n\t\tthis.problem = problem;\n\t}\n}\n\nexport class NotFoundError extends ApiError {\n\tconstructor(problem: ProblemDetail, options?: ErrorOptions) {\n\t\tsuper(problem, options);\n\t\tthis.name = \"NotFoundError\";\n\t}\n}\n\nexport class AuthenticationError extends ApiError {\n\tconstructor(problem: ProblemDetail, options?: ErrorOptions) {\n\t\tsuper(problem, options);\n\t\tthis.name = \"AuthenticationError\";\n\t}\n}\n\nexport class ForbiddenError extends ApiError {\n\tconstructor(problem: ProblemDetail, options?: ErrorOptions) {\n\t\tsuper(problem, options);\n\t\tthis.name = \"ForbiddenError\";\n\t}\n}\n\nexport class ValidationError extends ApiError {\n\treadonly errors?: Array<{ loc: string[]; msg: string; type: string }> | undefined;\n\n\tconstructor(\n\t\tproblem: ProblemDetail & { errors?: Array<{ loc: string[]; msg: string; type: string }> },\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(problem, options);\n\t\tthis.name = \"ValidationError\";\n\t\tthis.errors = problem.errors;\n\t}\n}\n\nexport class RateLimitError extends ApiError {\n\treadonly retryAfter: number | undefined;\n\n\tconstructor(problem: ProblemDetail, retryAfter?: number, options?: ErrorOptions) {\n\t\tsuper(problem, options);\n\t\tthis.name = \"RateLimitError\";\n\t\tthis.retryAfter = retryAfter;\n\t}\n}\n\n// -- Network errors -----------------------------------------------------------\n\nexport class NetworkError extends MushError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"NetworkError\";\n\t}\n}\n\nexport class TimeoutError extends NetworkError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"TimeoutError\";\n\t}\n}\n\n// -- Cache errors -------------------------------------------------------------\n\nexport class CacheError extends MushError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"CacheError\";\n\t}\n}\n\nexport class IntegrityError extends CacheError {\n\tconstructor(\n\t\treadonly expected: string,\n\t\treadonly actual: string,\n\t\toptions?: ErrorOptions,\n\t) {\n\t\tsuper(`SHA256 mismatch: expected ${expected}, got ${actual}`, options);\n\t\tthis.name = \"IntegrityError\";\n\t}\n}\n\n// -- Schema errors ------------------------------------------------------------\n\nexport class SchemaError extends MushError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"SchemaError\";\n\t}\n}\n","/**\n * BundleRef — parse and represent bundle references.\n *\n * Supported formats:\n * namespace/slug\n * namespace/slug:version\n * namespace/slug@sha256:digest\n */\n\nimport { MushError } from \"./errors.js\";\n\nconst REF_PATTERN = /^([a-zA-Z0-9_-]+)\\/([a-zA-Z0-9_.-]+)(?::(.+)|@sha256:([a-fA-F0-9]+))?$/;\n\nexport class BundleRef {\n\treadonly namespace: string;\n\treadonly slug: string;\n\treadonly version: string | undefined;\n\treadonly digest: string | undefined;\n\n\tprivate constructor(namespace: string, slug: string, version?: string, digest?: string) {\n\t\tthis.namespace = namespace;\n\t\tthis.slug = slug;\n\t\tthis.version = version;\n\t\tthis.digest = digest;\n\t}\n\n\t/** Parse a ref string into a BundleRef. */\n\tstatic parse(ref: string): BundleRef {\n\t\tconst match = ref.match(REF_PATTERN);\n\t\tif (!match) {\n\t\t\tthrow new MushError(\n\t\t\t\t`Invalid bundle ref \"${ref}\": expected \"namespace/slug\", \"namespace/slug:version\", or \"namespace/slug@sha256:digest\"`,\n\t\t\t);\n\t\t}\n\t\tconst [, namespace, slug, version, digest] = match;\n\t\treturn new BundleRef(namespace as string, slug as string, version, digest);\n\t}\n\n\t/** Return the base ref without version or digest: \"namespace/slug\". */\n\ttoBaseRef(): string {\n\t\treturn `${this.namespace}/${this.slug}`;\n\t}\n\n\t/** Return the full ref string. */\n\ttoString(): string {\n\t\tif (this.digest) {\n\t\t\treturn `${this.namespace}/${this.slug}@sha256:${this.digest}`;\n\t\t}\n\t\tif (this.version) {\n\t\t\treturn `${this.namespace}/${this.slug}:${this.version}`;\n\t\t}\n\t\treturn `${this.namespace}/${this.slug}`;\n\t}\n}\n","/**\n * Selection — lazy filtered view over a Bundle.\n */\n\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type { Bundle } from \"./bundle.js\";\nimport type { AgentSpecHandle } from \"./handles/agent-spec-handle.js\";\nimport type { FileHandle } from \"./handles/file-handle.js\";\nimport type { PromptHandle } from \"./handles/prompt-handle.js\";\nimport type { SkillHandle } from \"./handles/skill-handle.js\";\nimport type { ToolsetHandle } from \"./handles/toolset-handle.js\";\nimport type { SelectionFilter } from \"./types.js\";\n\nexport class Selection {\n\tprivate readonly _bundle: Bundle;\n\tprivate readonly _filter: SelectionFilter;\n\n\tconstructor(bundle: Bundle, filter: SelectionFilter) {\n\t\tthis._bundle = bundle;\n\t\tthis._filter = filter;\n\t}\n\n\t/** The underlying bundle. */\n\tget bundle(): Bundle {\n\t\treturn this._bundle;\n\t}\n\n\tfiles(): FileHandle[] {\n\t\tconst result: FileHandle[] = [];\n\t\tconst seen = new Set<string>();\n\n\t\tconst addFile = (fh: FileHandle) => {\n\t\t\tif (!seen.has(fh.logicalPath)) {\n\t\t\t\tseen.add(fh.logicalPath);\n\t\t\t\tresult.push(fh);\n\t\t\t}\n\t\t};\n\n\t\tif (this._filter.skills) {\n\t\t\tfor (const name of this._filter.skills) {\n\t\t\t\tconst skill = this._bundle.skills().find((s) => s.name === name);\n\t\t\t\tif (skill) {\n\t\t\t\t\tfor (const f of skill.files()) {\n\t\t\t\t\t\taddFile(f);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._filter.prompts) {\n\t\t\tfor (const name of this._filter.prompts) {\n\t\t\t\tconst prompt = this._bundle.prompts().find((p) => p.name === name);\n\t\t\t\tif (prompt) {\n\t\t\t\t\tfor (const f of prompt.files()) {\n\t\t\t\t\t\taddFile(f);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._filter.toolsets) {\n\t\t\tfor (const name of this._filter.toolsets) {\n\t\t\t\tconst toolset = this._bundle.toolsets().find((t) => t.name === name);\n\t\t\t\tif (toolset) {\n\t\t\t\t\tfor (const f of toolset.files()) {\n\t\t\t\t\t\taddFile(f);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._filter.agentSpecs) {\n\t\t\tfor (const name of this._filter.agentSpecs) {\n\t\t\t\tconst spec = this._bundle.agentSpecs().find((a) => a.name === name);\n\t\t\t\tif (spec) {\n\t\t\t\t\tfor (const f of spec.files()) {\n\t\t\t\t\t\taddFile(f);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this._filter.paths) {\n\t\t\tfor (const path of this._filter.paths) {\n\t\t\t\tconst fh = this._bundle.file(path);\n\t\t\t\tif (fh) {\n\t\t\t\t\taddFile(fh);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tskills(): SkillHandle[] {\n\t\tconst names = this._filter.skills;\n\t\tif (!names) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._bundle.skills().filter((s) => names.includes(s.name));\n\t}\n\n\tprompts(): PromptHandle[] {\n\t\tconst names = this._filter.prompts;\n\t\tif (!names) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._bundle.prompts().filter((p) => names.includes(p.name));\n\t}\n\n\ttoolsets(): ToolsetHandle[] {\n\t\tconst names = this._filter.toolsets;\n\t\tif (!names) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._bundle.toolsets().filter((t) => names.includes(t.name));\n\t}\n\n\tagentSpecs(): AgentSpecHandle[] {\n\t\tconst names = this._filter.agentSpecs;\n\t\tif (!names) {\n\t\t\treturn [];\n\t\t}\n\t\treturn this._bundle.agentSpecs().filter((a) => names.includes(a.name));\n\t}\n\n\t/** Write selected files to targetDir preserving logical paths. */\n\tasync materialize(targetDir: string): Promise<string[]> {\n\t\tconst written: string[] = [];\n\n\t\tfor (const fh of this.files()) {\n\t\t\tconst absPath = resolve(join(targetDir, fh.logicalPath));\n\t\t\tawait mkdir(dirname(absPath), { recursive: true });\n\t\t\tawait writeFile(absPath, fh.bytes());\n\t\t\twritten.push(absPath);\n\t\t}\n\n\t\treturn written;\n\t}\n\n\t// -- Export adapter convenience methods --\n\n\tasync exportClaudePlugin(opts: {\n\t\ttargetDir: string;\n\t\tname?: string;\n\t\tdescription?: string;\n\t}): Promise<string> {\n\t\tconst { exportClaudePlugin } = await import(\"./adapters/claude.js\");\n\t\treturn exportClaudePlugin(this, opts);\n\t}\n\n\tasync installClaudeSkills(dir: string, opts?: { prefix?: string }): Promise<string[]> {\n\t\tconst { installClaudeSkills } = await import(\"./adapters/claude.js\");\n\t\treturn installClaudeSkills(this, dir, opts);\n\t}\n\n\tasync installVSCodeSkills(dir: string, opts?: { subdir?: string }): Promise<string[]> {\n\t\tconst { installVSCodeSkills } = await import(\"./adapters/vscode.js\");\n\t\treturn installVSCodeSkills(this, dir, opts);\n\t}\n}\n","/**\n * Content-addressable, host-partitioned disk cache for resolved bundles.\n *\n * Layout:\n * {cacheDir}/\n * CACHEDIR.TAG\n * blobs/sha256/{prefix}/{digest}\n * manifests/{host-id}/{ns}/{slug}/{version}.json\n * manifests/{host-id}/{ns}/{slug}/{version}.meta.json\n * refs/{host-id}/{ns}/{slug}/{ref}.json\n * temp/\n */\n\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, readdir, rename, rm, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { Bundle } from \"./bundle.js\";\nimport { CacheError, IntegrityError } from \"./errors.js\";\nimport type { BundleResolveOutput, CachedBundle } from \"./types.js\";\n\nconst JSON_EXT_RE = /\\.json$/;\n\ninterface CacheMeta {\n\tfetchedAt: string;\n\tttlSeconds: number;\n\tociDigest?: string | undefined;\n}\n\ninterface RefEntry {\n\tversion: string;\n\tfetchedAt: string;\n\tttlSeconds: number;\n}\n\nconst CACHEDIR_TAG_CONTENT = `Signature: 8a477f597d28d172789f06886806bc55\n# This file is a cache directory tag created by musher.\n# For information, see https://bford.info/cachedir/spec.html\n`;\n\nexport class BundleCache {\n\tprivate readonly hostId: string;\n\n\tconstructor(\n\t\tprivate readonly cacheDir: string,\n\t\tregistryUrl: string,\n\t\tprivate readonly manifestTtlSeconds: number,\n\t\tprivate readonly refTtlSeconds: number,\n\t) {\n\t\tthis.hostId = computeHostId(registryUrl);\n\t}\n\n\t// -- Blob storage -------------------------------------------------------------\n\n\tprivate blobPath(digest: string): string {\n\t\tconst prefix = digest.slice(0, 2);\n\t\treturn join(this.cacheDir, \"blobs\", \"sha256\", prefix, digest);\n\t}\n\n\tprivate async writeBlob(content: Buffer): Promise<string> {\n\t\tconst digest = createHash(\"sha256\").update(content).digest(\"hex\");\n\t\tconst target = this.blobPath(digest);\n\n\t\t// Dedup: skip if blob already exists\n\t\tif (existsSync(target)) {\n\t\t\treturn digest;\n\t\t}\n\n\t\tawait this.atomicWrite(target, content);\n\t\treturn digest;\n\t}\n\n\t// -- Manifest storage ---------------------------------------------------------\n\n\tprivate manifestDir(namespace: string, slug: string): string {\n\t\treturn join(this.cacheDir, \"manifests\", this.hostId, namespace, slug);\n\t}\n\n\tprivate manifestPath(namespace: string, slug: string, version: string): string {\n\t\treturn join(this.manifestDir(namespace, slug), `${version}.json`);\n\t}\n\n\tprivate metaPath(namespace: string, slug: string, version: string): string {\n\t\treturn join(this.manifestDir(namespace, slug), `${version}.meta.json`);\n\t}\n\n\t// -- Ref storage --------------------------------------------------------------\n\n\tprivate refPath(namespace: string, slug: string, ref: string): string {\n\t\treturn join(this.cacheDir, \"refs\", this.hostId, namespace, slug, `${ref}.json`);\n\t}\n\n\t/** Cache a ref → version mapping with TTL. */\n\tasync cacheRef(namespace: string, slug: string, ref: string, version: string): Promise<void> {\n\t\tconst entry: RefEntry = {\n\t\t\tversion,\n\t\t\tfetchedAt: new Date().toISOString(),\n\t\t\tttlSeconds: this.refTtlSeconds,\n\t\t};\n\t\tconst target = this.refPath(namespace, slug, ref);\n\t\tawait this.atomicWrite(target, Buffer.from(JSON.stringify(entry, null, 2)));\n\t}\n\n\t/** Resolve a cached ref → version if still fresh. Returns null if expired or missing. */\n\tasync resolveRef(namespace: string, slug: string, ref: string): Promise<string | null> {\n\t\ttry {\n\t\t\tconst raw = await readFile(this.refPath(namespace, slug, ref), \"utf-8\");\n\t\t\tconst entry: RefEntry = JSON.parse(raw);\n\t\t\tconst fetchedAt = new Date(entry.fetchedAt).getTime();\n\t\t\tconst ttl = (entry.ttlSeconds ?? this.refTtlSeconds) * 1000;\n\t\t\tif (Date.now() - fetchedAt < ttl) {\n\t\t\t\treturn entry.version;\n\t\t\t}\n\t\t\treturn null;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// -- Freshness ----------------------------------------------------------------\n\n\t/** Check if a cached manifest is still fresh. */\n\tasync isFresh(namespace: string, slug: string, version: string): Promise<boolean> {\n\t\ttry {\n\t\t\tconst raw = await readFile(this.metaPath(namespace, slug, version), \"utf-8\");\n\t\t\tconst meta: CacheMeta = JSON.parse(raw);\n\t\t\tconst fetchedAt = new Date(meta.fetchedAt).getTime();\n\t\t\tconst ttl = (meta.ttlSeconds ?? this.manifestTtlSeconds) * 1000;\n\t\t\treturn Date.now() - fetchedAt < ttl;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/** Load only the manifest JSON (no blob content). Returns null if not cached. */\n\tasync loadManifest(\n\t\tnamespace: string,\n\t\tslug: string,\n\t\tversion: string,\n\t): Promise<BundleResolveOutput | null> {\n\t\tconst mPath = this.manifestPath(namespace, slug, version);\n\n\t\tif (!existsSync(mPath)) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst raw = await readFile(mPath, \"utf-8\");\n\t\t\treturn JSON.parse(raw) as BundleResolveOutput;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// -- Write --------------------------------------------------------------------\n\n\t/** Write only the manifest and metadata to the cache (no blobs). */\n\tasync writeManifest(manifest: BundleResolveOutput): Promise<void> {\n\t\ttry {\n\t\t\tawait this.ensureCacheDirTag();\n\n\t\t\tconst mPath = this.manifestPath(manifest.namespace, manifest.slug, manifest.version);\n\t\t\tawait this.atomicWrite(mPath, Buffer.from(JSON.stringify(manifest, null, 2)));\n\n\t\t\tconst meta: CacheMeta = {\n\t\t\t\tfetchedAt: new Date().toISOString(),\n\t\t\t\tttlSeconds: this.manifestTtlSeconds,\n\t\t\t\tociDigest: manifest.ociDigest ?? undefined,\n\t\t\t};\n\t\t\tconst metPath = this.metaPath(manifest.namespace, manifest.slug, manifest.version);\n\t\t\tawait this.atomicWrite(metPath, Buffer.from(JSON.stringify(meta, null, 2)));\n\t\t} catch (error) {\n\t\t\tthrow new CacheError(\n\t\t\t\t`Failed to write manifest cache: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error instanceof Error ? error : undefined },\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Write a resolved bundle and its assets to the cache. */\n\tasync write(\n\t\tmanifest: BundleResolveOutput,\n\t\tassets: Map<string, Buffer | string>,\n\t): Promise<CachedBundle> {\n\t\ttry {\n\t\t\tawait this.ensureCacheDirTag();\n\n\t\t\t// Write blobs (content-addressable)\n\t\t\tfor (const [, content] of assets) {\n\t\t\t\tconst buf = typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n\t\t\t\tawait this.writeBlob(buf);\n\t\t\t}\n\n\t\t\t// Write manifest + metadata\n\t\t\tawait this.writeManifest(manifest);\n\n\t\t\treturn {\n\t\t\t\tref: manifest.ref,\n\t\t\t\tversion: manifest.version,\n\t\t\t\tcacheDir: this.manifestDir(manifest.namespace, manifest.slug),\n\t\t\t\tmanifest,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new CacheError(\n\t\t\t\t`Failed to write cache: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error instanceof Error ? error : undefined },\n\t\t\t);\n\t\t}\n\t}\n\n\t// -- Load ---------------------------------------------------------------------\n\n\t/** Load a cached bundle from disk, verifying SHA256 integrity. Returns a Bundle. */\n\tasync load(namespace: string, slug: string, version: string): Promise<Bundle | null> {\n\t\tconst mPath = this.manifestPath(namespace, slug, version);\n\n\t\tif (!existsSync(mPath)) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst raw = await readFile(mPath, \"utf-8\");\n\t\t\tconst manifest: BundleResolveOutput = JSON.parse(raw);\n\n\t\t\tconst contents = new Map<string, Buffer>();\n\n\t\t\tif (manifest.manifest?.layers) {\n\t\t\t\tfor (const layer of manifest.manifest.layers) {\n\t\t\t\t\tconst buf = await readFile(this.blobPath(layer.contentSha256));\n\n\t\t\t\t\t// Verify integrity using raw bytes\n\t\t\t\t\tconst hash = createHash(\"sha256\").update(buf).digest(\"hex\");\n\t\t\t\t\tif (hash !== layer.contentSha256) {\n\t\t\t\t\t\tthrow new IntegrityError(layer.contentSha256, hash);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontents.set(layer.logicalPath, buf);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new Bundle(manifest, contents);\n\t\t} catch (error) {\n\t\t\tif (error instanceof IntegrityError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new CacheError(\n\t\t\t\t`Failed to load cache: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error instanceof Error ? error : undefined },\n\t\t\t);\n\t\t}\n\t}\n\n\t// -- Cleanup ------------------------------------------------------------------\n\n\t/** Remove expired cache entries and garbage-collect unreferenced blobs. */\n\tasync clean(): Promise<void> {\n\t\ttry {\n\t\t\tconst referencedDigests = new Set<string>();\n\n\t\t\t// Clean manifests and collect referenced digests from surviving ones\n\t\t\tawait this.cleanManifests(referencedDigests);\n\n\t\t\t// Clean expired refs\n\t\t\tawait this.cleanRefs();\n\n\t\t\t// Garbage-collect unreferenced blobs\n\t\t\tawait this.gcBlobs(referencedDigests);\n\n\t\t\t// Remove legacy bundles/ directory if present\n\t\t\tawait this.removeLegacy();\n\t\t} catch (error) {\n\t\t\tthrow new CacheError(\n\t\t\t\t`Failed to clean cache: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error instanceof Error ? error : undefined },\n\t\t\t);\n\t\t}\n\t}\n\n\t/** Remove all cached data. */\n\tasync purge(): Promise<void> {\n\t\ttry {\n\t\t\tconst dirs = [\"manifests\", \"refs\", \"blobs\", \"temp\", \"bundles\"];\n\t\t\tfor (const dir of dirs) {\n\t\t\t\tconst p = join(this.cacheDir, dir);\n\t\t\t\tif (existsSync(p)) {\n\t\t\t\t\tawait rm(p, { recursive: true, force: true });\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new CacheError(\n\t\t\t\t`Failed to purge cache: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t{ cause: error instanceof Error ? error : undefined },\n\t\t\t);\n\t\t}\n\t}\n\n\t// -- Internals ----------------------------------------------------------------\n\n\t/** Atomic write via temp file + rename. */\n\tprivate async atomicWrite(targetPath: string, data: Buffer): Promise<void> {\n\t\tconst tempDir = join(this.cacheDir, \"temp\");\n\t\tawait mkdir(tempDir, { recursive: true });\n\n\t\tconst tempPath = join(tempDir, `${randomUUID()}.tmp`);\n\n\t\ttry {\n\t\t\tawait writeFile(tempPath, data);\n\t\t\tawait mkdir(dirname(targetPath), { recursive: true });\n\n\t\t\ttry {\n\t\t\t\tawait rename(tempPath, targetPath);\n\t\t\t} catch {\n\t\t\t\t// Windows: rename fails if target exists — unlink then retry\n\t\t\t\ttry {\n\t\t\t\t\tawait unlink(targetPath);\n\t\t\t\t} catch {\n\t\t\t\t\t// Target may not exist, ignore\n\t\t\t\t}\n\t\t\t\tawait rename(tempPath, targetPath);\n\t\t\t}\n\t\t} finally {\n\t\t\t// Clean up temp file if it still exists\n\t\t\ttry {\n\t\t\t\tawait unlink(tempPath);\n\t\t\t} catch {\n\t\t\t\t// Already moved or cleaned up\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Write CACHEDIR.TAG if it doesn't exist. */\n\tprivate async ensureCacheDirTag(): Promise<void> {\n\t\tconst tagPath = join(this.cacheDir, \"CACHEDIR.TAG\");\n\t\tif (!existsSync(tagPath)) {\n\t\t\tawait mkdir(this.cacheDir, { recursive: true });\n\t\t\tawait writeFile(tagPath, CACHEDIR_TAG_CONTENT);\n\t\t}\n\t}\n\n\t/** Walk manifests, remove expired, collect digests from surviving ones. */\n\tprivate async cleanManifests(referencedDigests: Set<string>): Promise<void> {\n\t\tconst manifestsRoot = join(this.cacheDir, \"manifests\");\n\t\tif (!existsSync(manifestsRoot)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const hostId of await safeReaddir(manifestsRoot)) {\n\t\t\tconst hostDir = join(manifestsRoot, hostId);\n\t\t\tif (!(await isDir(hostDir))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const ns of await safeReaddir(hostDir)) {\n\t\t\t\tconst nsDir = join(hostDir, ns);\n\t\t\t\tif (!(await isDir(nsDir))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (const slug of await safeReaddir(nsDir)) {\n\t\t\t\t\tconst slugDir = join(nsDir, slug);\n\t\t\t\t\tif (!(await isDir(slugDir))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const file of await safeReaddir(slugDir)) {\n\t\t\t\t\t\tif (!file.endsWith(\".json\") || file.endsWith(\".meta.json\")) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst version = file.replace(JSON_EXT_RE, \"\");\n\t\t\t\t\t\tconst fresh = await this.isFresh(ns, slug, version);\n\n\t\t\t\t\t\tif (fresh) {\n\t\t\t\t\t\t\t// Collect blob digests from surviving manifest\n\t\t\t\t\t\t\tawait this.collectDigests(join(slugDir, file), referencedDigests);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Remove expired manifest + meta\n\t\t\t\t\t\t\tawait safeRm(join(slugDir, file));\n\t\t\t\t\t\t\tawait safeRm(join(slugDir, `${version}.meta.json`));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Collect blob digests referenced by a manifest file. */\n\tprivate async collectDigests(manifestFile: string, digests: Set<string>): Promise<void> {\n\t\ttry {\n\t\t\tconst raw = await readFile(manifestFile, \"utf-8\");\n\t\t\tconst manifest: BundleResolveOutput = JSON.parse(raw);\n\t\t\tif (manifest.manifest?.layers) {\n\t\t\t\tfor (const layer of manifest.manifest.layers) {\n\t\t\t\t\tdigests.add(layer.contentSha256);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Corrupt manifest — skip\n\t\t}\n\t}\n\n\t/** Walk refs and remove expired entries. */\n\tprivate async cleanRefs(): Promise<void> {\n\t\tconst refsRoot = join(this.cacheDir, \"refs\");\n\t\tif (!existsSync(refsRoot)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const hostId of await safeReaddir(refsRoot)) {\n\t\t\tconst hostDir = join(refsRoot, hostId);\n\t\t\tif (!(await isDir(hostDir))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const ns of await safeReaddir(hostDir)) {\n\t\t\t\tconst nsDir = join(hostDir, ns);\n\t\t\t\tif (!(await isDir(nsDir))) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (const slug of await safeReaddir(nsDir)) {\n\t\t\t\t\tconst slugDir = join(nsDir, slug);\n\t\t\t\t\tif (!(await isDir(slugDir))) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const file of await safeReaddir(slugDir)) {\n\t\t\t\t\t\tif (!file.endsWith(\".json\")) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst ref = file.replace(JSON_EXT_RE, \"\");\n\t\t\t\t\t\tconst version = await this.resolveRef(ns, slug, ref);\n\t\t\t\t\t\tif (version === null) {\n\t\t\t\t\t\t\tawait safeRm(join(slugDir, file));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Remove blobs not referenced by any surviving manifest. */\n\tprivate async gcBlobs(referencedDigests: Set<string>): Promise<void> {\n\t\tconst blobsRoot = join(this.cacheDir, \"blobs\", \"sha256\");\n\t\tif (!existsSync(blobsRoot)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const prefix of await safeReaddir(blobsRoot)) {\n\t\t\tconst prefixDir = join(blobsRoot, prefix);\n\t\t\tif (!(await isDir(prefixDir))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (const digest of await safeReaddir(prefixDir)) {\n\t\t\t\tif (!referencedDigests.has(digest)) {\n\t\t\t\t\tawait safeRm(join(prefixDir, digest));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Remove legacy bundles/ directory if present. */\n\tprivate async removeLegacy(): Promise<void> {\n\t\tconst legacyDir = join(this.cacheDir, \"bundles\");\n\t\tif (existsSync(legacyDir)) {\n\t\t\tawait rm(legacyDir, { recursive: true, force: true });\n\t\t}\n\t}\n}\n\n// -- Helpers ------------------------------------------------------------------\n\nfunction computeHostId(registryUrl: string): string {\n\ttry {\n\t\tconst url = new URL(registryUrl);\n\t\treturn url.host.replace(/[:/]/g, \"_\");\n\t} catch {\n\t\treturn registryUrl.replace(/[:/]/g, \"_\");\n\t}\n}\n\nasync function isDir(path: string): Promise<boolean> {\n\ttry {\n\t\treturn (await stat(path)).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function safeReaddir(path: string): Promise<string[]> {\n\ttry {\n\t\treturn await readdir(path);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nasync function safeRm(path: string): Promise<void> {\n\ttry {\n\t\tawait unlink(path);\n\t} catch {\n\t\t// Already removed or inaccessible\n\t}\n}\n","/**\n * Client configuration with env-var resolution.\n */\n\nimport { readFileSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readKeyring } from \"./keyring.js\";\nimport { resolveMusherDirs } from \"./paths.js\";\n\nexport interface ClientConfig {\n\t/** Base URL for the Musher API. Default: https://api.musher.dev */\n\tbaseUrl?: string;\n\t/** API key authentication. */\n\tapiKey?: string;\n\t/** Override cache directory path. */\n\tcacheDir?: string;\n\t/** Override config directory path. */\n\tconfigDir?: string;\n\t/** Manifest cache TTL in seconds. Default: 86400 (24 hours) */\n\tmanifestTtlSeconds?: number;\n\t/** Ref cache TTL in seconds. Default: 300 (5 minutes) */\n\trefTtlSeconds?: number;\n\t/** Request timeout in milliseconds. Default: 30000 */\n\ttimeout?: number;\n\t/** Number of retries on transient failures. Default: 2 */\n\tretries?: number;\n}\n\nexport interface ResolvedConfig {\n\tbaseUrl: string;\n\tapiKey: string | undefined;\n\tcacheDir: string;\n\tconfigDir: string;\n\tmanifestTtlSeconds: number;\n\trefTtlSeconds: number;\n\ttimeout: number;\n\tretries: number;\n}\n\nconst DEFAULT_BASE_URL = \"https://api.musher.dev\";\nconst DEFAULT_MANIFEST_TTL = 86_400;\nconst DEFAULT_REF_TTL = 300;\nconst DEFAULT_TIMEOUT = 60_000;\nconst DEFAULT_RETRIES = 3;\n\nfunction computeHostId(host: string): string {\n\treturn host.replace(/[:/]/g, \"_\");\n}\n\n/** Read the API key from the host-scoped credentials directory. */\nexport function readApiKeyFile(dataDir?: string, host = \"api.musher.dev\"): string | undefined {\n\ttry {\n\t\tconst dir = dataDir ?? resolveMusherDirs().data;\n\t\tconst filePath = join(dir, \"credentials\", computeHostId(host), \"api-key\");\n\t\tconst content = readFileSync(filePath, \"utf-8\").trim();\n\t\tif (!content) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// On Unix, reject files readable by group or others\n\t\tif (process.platform !== \"win32\") {\n\t\t\tconst mode = statSync(filePath).mode;\n\t\t\tif (mode & 0o077) {\n\t\t\t\tprocess.emitWarning(\n\t\t\t\t\t`Ignoring ${filePath}: file permissions are too open (must not be readable by group or others). Run: chmod 600 ${filePath}`,\n\t\t\t\t\t\"MusherSecurityWarning\",\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn content;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Read an env var, treating empty strings as unset. */\nfunction env(name: string): string | undefined {\n\tconst value = process.env[name];\n\treturn value || undefined;\n}\n\nexport function resolveConfig(config?: ClientConfig): ResolvedConfig {\n\tconst dirs = resolveMusherDirs();\n\tconst configDir = config?.configDir ?? dirs.config;\n\tconst baseUrl = config?.baseUrl ?? env(\"MUSHER_API_URL\") ?? DEFAULT_BASE_URL;\n\n\tlet keyringHost: string;\n\ttry {\n\t\tkeyringHost = new URL(baseUrl).host;\n\t} catch {\n\t\tkeyringHost = \"api.musher.dev\";\n\t}\n\n\treturn {\n\t\tbaseUrl,\n\t\tapiKey:\n\t\t\tconfig?.apiKey ??\n\t\t\tenv(\"MUSHER_API_KEY\") ??\n\t\t\treadKeyring(keyringHost) ??\n\t\t\treadApiKeyFile(dirs.data, keyringHost),\n\t\tcacheDir: config?.cacheDir ?? dirs.cache,\n\t\tconfigDir,\n\t\tmanifestTtlSeconds: config?.manifestTtlSeconds ?? DEFAULT_MANIFEST_TTL,\n\t\trefTtlSeconds: config?.refTtlSeconds ?? DEFAULT_REF_TTL,\n\t\ttimeout: config?.timeout ?? DEFAULT_TIMEOUT,\n\t\tretries: config?.retries ?? DEFAULT_RETRIES,\n\t};\n}\n","/**\n * OS keyring helper — reads API key from the shared musher platform keyring.\n *\n * Uses `node:child_process` to invoke OS-native credential stores.\n * Returns `undefined` silently on any failure (keyring is best-effort).\n */\n\nimport { execFileSync } from \"node:child_process\";\n\nconst ACCOUNT = \"api-key\";\n\nfunction serviceName(host: string): string {\n\treturn `musher/${host}`;\n}\n\nfunction tryKeyringLookup(service: string): string | undefined {\n\ttry {\n\t\tconst platform = process.platform;\n\n\t\tif (platform === \"darwin\") {\n\t\t\tconst result = execFileSync(\n\t\t\t\t\"security\",\n\t\t\t\t[\"find-generic-password\", \"-s\", service, \"-a\", ACCOUNT, \"-w\"],\n\t\t\t\t{\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t\ttimeout: 5_000,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn result.toString(\"utf-8\").trim() || undefined;\n\t\t}\n\n\t\tif (platform === \"linux\") {\n\t\t\tconst result = execFileSync(\n\t\t\t\t\"secret-tool\",\n\t\t\t\t[\"lookup\", \"service\", service, \"username\", ACCOUNT],\n\t\t\t\t{\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t\ttimeout: 5_000,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn result.toString(\"utf-8\").trim() || undefined;\n\t\t}\n\n\t\tif (platform === \"win32\") {\n\t\t\tconst result = execFileSync(\n\t\t\t\t\"powershell.exe\",\n\t\t\t\t[\n\t\t\t\t\t\"-NoProfile\",\n\t\t\t\t\t\"-NonInteractive\",\n\t\t\t\t\t\"-Command\",\n\t\t\t\t\t`$cred = Get-StoredCredential -Target '${service.replace(/'/g, \"''\")}'; if ($cred) { $cred.GetNetworkCredential().Password }`,\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t\ttimeout: 5_000,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn result.toString(\"utf-8\").trim() || undefined;\n\t\t}\n\n\t\treturn undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Attempt to read the API key from the OS keyring.\n *\n * Looks up the host-scoped entry (`musher/<host>`).\n *\n * - **macOS**: `security find-generic-password`\n * - **Linux**: `secret-tool lookup`\n * - **Windows**: `Get-StoredCredential` (requires CredentialManager module, best-effort)\n *\n * @param host - Registry hostname (e.g. \"api.musher.dev\").\n */\nexport function readKeyring(host = \"api.musher.dev\"): string | undefined {\n\treturn tryKeyringLookup(serviceName(host));\n}\n","/**\n * Platform-aware directory resolution for the Musher SDK.\n *\n * Follows the shared cross-platform storage spec:\n * - Linux: XDG Base Directory spec\n * - macOS: ~/Library/{Caches,Application Support}/musher\n * - Windows: %LOCALAPPDATA%\\musher\\{cache,config,data,state}\n *\n * Resolution order per directory:\n * 1. MUSHER_<TYPE>_HOME (e.g. MUSHER_CACHE_HOME)\n * 2. MUSHER_HOME/<type> (umbrella override)\n * 3. Platform default\n *\n * Relative override/XDG paths are rejected (per XDG spec).\n */\n\nimport { homedir, tmpdir } from \"node:os\";\nimport { isAbsolute, join } from \"node:path\";\n\nexport interface MusherDirs {\n\tcache: string;\n\tconfig: string;\n\tdata: string;\n\tstate: string;\n\truntime: string;\n}\n\nconst APP_NAME = \"musher\";\n\n/** Read an env var, treating empty strings as unset. */\nfunction env(name: string): string | undefined {\n\tconst value = process.env[name];\n\treturn value || undefined;\n}\n\n/** Return the env var value only if it is an absolute path. */\nfunction absEnv(name: string): string | undefined {\n\tconst value = env(name);\n\tif (value && isAbsolute(value)) {\n\t\treturn value;\n\t}\n\treturn undefined;\n}\n\n/** Resolve a single directory following the standard precedence chain. */\nfunction resolveDir(envKey: string, subdir: string, platformDefault: () => string): string {\n\t// 1. Per-directory override: MUSHER_<TYPE>_HOME\n\tconst perDir = absEnv(envKey);\n\tif (perDir) {\n\t\treturn perDir;\n\t}\n\n\t// 2. Umbrella override: MUSHER_HOME/<subdir>\n\tconst umbrella = absEnv(\"MUSHER_HOME\");\n\tif (umbrella) {\n\t\treturn join(umbrella, subdir);\n\t}\n\n\t// 3. Platform default\n\treturn platformDefault();\n}\n\n/** XDG-aware default — returns the XDG path if set and absolute, otherwise the fallback. */\nfunction xdgDefault(xdgVar: string, fallbackSuffix: string): string {\n\tconst xdg = absEnv(xdgVar);\n\tif (xdg) {\n\t\treturn join(xdg, APP_NAME);\n\t}\n\treturn join(homedir(), fallbackSuffix, APP_NAME);\n}\n\nfunction linuxDirs(): MusherDirs {\n\treturn {\n\t\tcache: resolveDir(\"MUSHER_CACHE_HOME\", \"cache\", () => xdgDefault(\"XDG_CACHE_HOME\", \".cache\")),\n\t\tconfig: resolveDir(\"MUSHER_CONFIG_HOME\", \"config\", () =>\n\t\t\txdgDefault(\"XDG_CONFIG_HOME\", \".config\"),\n\t\t),\n\t\tdata: resolveDir(\"MUSHER_DATA_HOME\", \"data\", () =>\n\t\t\txdgDefault(\"XDG_DATA_HOME\", join(\".local\", \"share\")),\n\t\t),\n\t\tstate: resolveDir(\"MUSHER_STATE_HOME\", \"state\", () =>\n\t\t\txdgDefault(\"XDG_STATE_HOME\", join(\".local\", \"state\")),\n\t\t),\n\t\truntime: resolveDir(\"MUSHER_RUNTIME_DIR\", \"runtime\", () => {\n\t\t\tconst xdg = absEnv(\"XDG_RUNTIME_DIR\");\n\t\t\tif (xdg) {\n\t\t\t\treturn join(xdg, APP_NAME);\n\t\t\t}\n\t\t\treturn join(tmpdir(), APP_NAME, \"run\");\n\t\t}),\n\t};\n}\n\nfunction darwinDirs(): MusherDirs {\n\tconst home = homedir();\n\tconst appSupport = join(home, \"Library\", \"Application Support\", APP_NAME);\n\n\treturn {\n\t\tcache: resolveDir(\"MUSHER_CACHE_HOME\", \"cache\", () =>\n\t\t\tjoin(home, \"Library\", \"Caches\", APP_NAME),\n\t\t),\n\t\tconfig: resolveDir(\"MUSHER_CONFIG_HOME\", \"config\", () => join(appSupport, \"config\")),\n\t\tdata: resolveDir(\"MUSHER_DATA_HOME\", \"data\", () => join(appSupport, \"data\")),\n\t\tstate: resolveDir(\"MUSHER_STATE_HOME\", \"state\", () => join(appSupport, \"state\")),\n\t\truntime: resolveDir(\"MUSHER_RUNTIME_DIR\", \"runtime\", () => join(tmpdir(), APP_NAME, \"run\")),\n\t};\n}\n\nfunction win32Dirs(): MusherDirs {\n\tconst localAppData = env(\"LOCALAPPDATA\") ?? join(homedir(), \"AppData\", \"Local\");\n\tconst base = join(localAppData, APP_NAME);\n\n\treturn {\n\t\tcache: resolveDir(\"MUSHER_CACHE_HOME\", \"cache\", () => join(base, \"cache\")),\n\t\tconfig: resolveDir(\"MUSHER_CONFIG_HOME\", \"config\", () => join(base, \"config\")),\n\t\tdata: resolveDir(\"MUSHER_DATA_HOME\", \"data\", () => join(base, \"data\")),\n\t\tstate: resolveDir(\"MUSHER_STATE_HOME\", \"state\", () => join(base, \"state\")),\n\t\truntime: resolveDir(\"MUSHER_RUNTIME_DIR\", \"runtime\", () => join(tmpdir(), APP_NAME, \"run\")),\n\t};\n}\n\n/** Resolve all Musher directory paths for the current platform. */\nexport function resolveMusherDirs(): MusherDirs {\n\tswitch (process.platform) {\n\t\tcase \"darwin\":\n\t\t\treturn darwinDirs();\n\t\tcase \"win32\":\n\t\t\treturn win32Dirs();\n\t\tdefault:\n\t\t\treturn linuxDirs();\n\t}\n}\n","/**\n * HTTP transport layer — fetch-based with auth, retry, error mapping, and Zod validation.\n */\n\nimport type { z } from \"zod\";\n\nconst TRAILING_SLASH_RE = /\\/$/;\nimport type { ResolvedConfig } from \"./config.js\";\nimport {\n\tApiError,\n\tAuthenticationError,\n\tForbiddenError,\n\tNetworkError,\n\tNotFoundError,\n\ttype ProblemDetail,\n\tRateLimitError,\n\tSchemaError,\n\tTimeoutError,\n\tValidationError,\n} from \"./errors.js\";\n\nexport class HttpTransport {\n\tconstructor(private readonly config: ResolvedConfig) {}\n\n\tasync request<T>(\n\t\tmethod: string,\n\t\tpath: string,\n\t\tschema: z.ZodType<T>,\n\t\toptions?: {\n\t\t\tbody?: unknown;\n\t\t\tparams?: Record<string, string | number | boolean | undefined> | undefined;\n\t\t},\n\t): Promise<T> {\n\t\tconst url = this.buildUrl(path, options?.params);\n\t\tconst headers = this.buildHeaders();\n\n\t\tlet lastError: Error | undefined;\n\n\t\tfor (let attempt = 0; attempt <= this.config.retries; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst init: RequestInit = { method, headers };\n\t\t\t\tif (options?.body) {\n\t\t\t\t\tinit.body = JSON.stringify(options.body);\n\t\t\t\t}\n\t\t\t\tconst response = await this.fetchWithTimeout(url, init);\n\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tconst error = await this.mapError(response);\n\t\t\t\t\t// Only retry on 429 or 5xx\n\t\t\t\t\tif (response.status === 429 || response.status >= 500) {\n\t\t\t\t\t\tlastError = error;\n\t\t\t\t\t\tif (attempt < this.config.retries) {\n\t\t\t\t\t\t\tawait this.backoff(attempt, error);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tconst json: unknown = await response.json();\n\t\t\t\treturn this.parse(schema, json);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof ApiError) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (error instanceof SchemaError) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tlastError = error instanceof Error ? error : new Error(String(error));\n\n\t\t\t\tif (attempt < this.config.retries) {\n\t\t\t\t\tawait this.backoff(attempt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow lastError ?? new NetworkError(\"Request failed after retries\");\n\t}\n\n\tprivate buildUrl(\n\t\tpath: string,\n\t\tparams?: Record<string, string | number | boolean | undefined>,\n\t): string {\n\t\tconst base = this.config.baseUrl.replace(TRAILING_SLASH_RE, \"\");\n\t\tconst url = new URL(`${base}${path}`);\n\n\t\tif (params) {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\turl.searchParams.set(key, String(value));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn url.toString();\n\t}\n\n\tprivate buildHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\tAccept: \"application/json\",\n\t\t};\n\n\t\tif (this.config.apiKey) {\n\t\t\theaders[\"Authorization\"] = `Bearer ${this.config.apiKey}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tprivate async fetchWithTimeout(url: string, init: RequestInit): Promise<Response> {\n\t\tconst controller = new AbortController();\n\t\tconst timer = setTimeout(() => controller.abort(), this.config.timeout);\n\n\t\ttry {\n\t\t\treturn await fetch(url, { ...init, signal: controller.signal });\n\t\t} catch (error) {\n\t\t\tif (error instanceof DOMException && error.name === \"AbortError\") {\n\t\t\t\tthrow new TimeoutError(`Request timed out after ${this.config.timeout}ms`);\n\t\t\t}\n\t\t\tthrow new NetworkError(error instanceof Error ? error.message : \"Network request failed\", {\n\t\t\t\tcause: error instanceof Error ? error : undefined,\n\t\t\t});\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tprivate async mapError(response: Response): Promise<ApiError> {\n\t\tlet problem: ProblemDetail;\n\t\ttry {\n\t\t\tconst body = (await response.json()) as ProblemDetail;\n\t\t\tproblem = {\n\t\t\t\ttype: body.type ?? \"about:blank\",\n\t\t\t\ttitle: body.title ?? response.statusText,\n\t\t\t\tstatus: response.status,\n\t\t\t\tdetail: body.detail ?? response.statusText,\n\t\t\t\tinstance: body.instance,\n\t\t\t\ttraceId: body.traceId,\n\t\t\t};\n\t\t} catch {\n\t\t\tproblem = {\n\t\t\t\ttype: \"about:blank\",\n\t\t\t\ttitle: response.statusText,\n\t\t\t\tstatus: response.status,\n\t\t\t\tdetail: response.statusText,\n\t\t\t};\n\t\t}\n\n\t\tswitch (response.status) {\n\t\t\tcase 401:\n\t\t\t\treturn new AuthenticationError(problem);\n\t\t\tcase 403:\n\t\t\t\treturn new ForbiddenError(problem);\n\t\t\tcase 404:\n\t\t\t\treturn new NotFoundError(problem);\n\t\t\tcase 422:\n\t\t\t\treturn new ValidationError(\n\t\t\t\t\tproblem as ProblemDetail & {\n\t\t\t\t\t\terrors?: Array<{ loc: string[]; msg: string; type: string }>;\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\tcase 429: {\n\t\t\t\tconst retryAfter = response.headers.get(\"Retry-After\");\n\t\t\t\treturn new RateLimitError(\n\t\t\t\t\tproblem,\n\t\t\t\t\tretryAfter ? Number.parseInt(retryAfter, 10) : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn new ApiError(problem);\n\t\t}\n\t}\n\n\tprivate parse<T>(schema: z.ZodType<T>, data: unknown): T {\n\t\tconst result = schema.safeParse(data);\n\t\tif (!result.success) {\n\t\t\tthrow new SchemaError(`API response validation failed: ${result.error.message}`);\n\t\t}\n\t\treturn result.data;\n\t}\n\n\tprivate async backoff(attempt: number, error?: Error): Promise<void> {\n\t\tlet delay = Math.min(1000 * 2 ** attempt, 10_000);\n\n\t\tif (error instanceof RateLimitError && error.retryAfter) {\n\t\t\tdelay = error.retryAfter * 1000;\n\t\t}\n\n\t\t// Add jitter\n\t\tdelay += Math.random() * 500;\n\n\t\tawait new Promise((resolve) => setTimeout(resolve, delay));\n\t}\n}\n","import { z } from \"zod\";\n\nexport const AssetSummaryOutputSchema = z.object({\n\tid: z.string().uuid(),\n\tbundleId: z.string().uuid(),\n\tassetType: z.string(),\n\tlogicalPath: z.string(),\n\tcontentSha256: z.string(),\n\tcontentSizeBytes: z.number().int().nullable().optional(),\n\tmediaType: z.string().nullable().optional(),\n\tcreatedAt: z.string().datetime(),\n\tupdatedAt: z.string().datetime().nullable().optional(),\n});\n\nexport const AssetDetailOutputSchema = AssetSummaryOutputSchema.extend({\n\tcontentText: z.string().nullable().optional(),\n});\n","import { z } from \"zod\";\nimport { BundleSourceType, BundleVisibility } from \"./common.js\";\n\nexport const BundleOutputSchema = z.object({\n\tid: z.string().uuid(),\n\tnamespace: z.string(),\n\tslug: z.string(),\n\tref: z.string(),\n\tname: z.string(),\n\tdescription: z.string().nullable().optional(),\n\tvisibility: BundleVisibility,\n\tsourceType: BundleSourceType,\n\treadmeFormat: z.string().nullable().optional(),\n\tcreatedAt: z.string().datetime(),\n\tupdatedAt: z.string().datetime().nullable().optional(),\n});\n\nexport const BundleDetailOutputSchema = BundleOutputSchema.extend({\n\treadmeContent: z.string().nullable().optional(),\n\tlatestVersion: z.string().nullable().optional(),\n\tversionCount: z.number().int(),\n\tassetCount: z.number().int(),\n});\n","import { z } from \"zod\";\n\n// -- Enums (mirror Python StrEnums) -------------------------------------------\n\nexport const BundleVisibility = z.enum([\"private\", \"public\"]);\n\nexport const BundleVersionState = z.enum([\"published\", \"yanked\"]);\n\nexport const AssetType = z.enum([\n\t\"agent_definition\",\n\t\"skill\",\n\t\"tool_config\",\n\t\"prompt\",\n\t\"config\",\n\t\"other\",\n]);\n\nexport const BundleSourceType = z.enum([\"console\", \"registry\"]);\n\n// -- Pagination ---------------------------------------------------------------\n\nexport const PaginationMetaSchema = z.object({\n\tnextCursor: z.string().nullable(),\n\thasMore: z.boolean(),\n});\n\n/** Paginated response envelope. */\nexport function paginatedSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n\treturn z.object({\n\t\tdata: z.array(itemSchema),\n\t\tmeta: PaginationMetaSchema,\n\t});\n}\n","import { z } from \"zod\";\nimport { BundleSourceType, BundleVersionState } from \"./common.js\";\n\nexport const BundleLayerOutputSchema = z.object({\n\tassetId: z.string(),\n\tlogicalPath: z.string(),\n\tassetType: z.string(),\n\tcontentSha256: z.string(),\n\tsizeBytes: z.number().int(),\n\tmediaType: z.string().nullable().optional(),\n});\n\nexport const BundleManifestOutputSchema = z.object({\n\tlayers: z.array(BundleLayerOutputSchema),\n});\n\nexport const BundleResolveOutputSchema = z.object({\n\tbundleId: z.string().uuid(),\n\tversionId: z.string().uuid(),\n\tnamespace: z.string(),\n\tslug: z.string(),\n\tref: z.string(),\n\tversion: z.string(),\n\tsourceType: BundleSourceType,\n\tociRef: z.string().nullable().optional(),\n\tociDigest: z.string().nullable().optional(),\n\tstate: BundleVersionState,\n\tmanifest: BundleManifestOutputSchema.nullable().optional(),\n});\n","import { z } from \"zod\";\nimport { BundleVersionState } from \"./common.js\";\n\nexport const BundleVersionSummaryOutputSchema = z.object({\n\tid: z.string().uuid(),\n\tbundleId: z.string().uuid(),\n\tversion: z.string(),\n\tstate: BundleVersionState,\n\tociRef: z.string().nullable().optional(),\n\tociDigest: z.string().nullable().optional(),\n\tpublishedBy: z.string().nullable().optional(),\n\tyankedBy: z.string().nullable().optional(),\n\tyankedAt: z.string().datetime().nullable().optional(),\n\tyankReason: z.string().nullable().optional(),\n\tcreatedAt: z.string().datetime(),\n});\n\nexport const ManifestAssetOutputSchema = z.object({\n\tassetId: z.string(),\n\tlogicalPath: z.string(),\n\tassetType: z.string(),\n\tcontentSha256: z.string(),\n\tsizeBytes: z.number().int(),\n\tmediaType: z.string().nullable().optional(),\n});\n\nexport const ManifestDetailOutputSchema = z.object({\n\tnamespace: z.string(),\n\tbundleSlug: z.string(),\n\tversion: z.string(),\n\tassets: z.array(ManifestAssetOutputSchema),\n});\n\nexport const BundleVersionDetailOutputSchema = z.object({\n\tid: z.string().uuid(),\n\tbundleId: z.string().uuid(),\n\tversion: z.string(),\n\tstate: BundleVersionState,\n\tociRef: z.string().nullable().optional(),\n\tociDigest: z.string().nullable().optional(),\n\tmanifest: ManifestDetailOutputSchema.nullable().optional(),\n\tpublishedBy: z.string().nullable().optional(),\n\tyankedBy: z.string().nullable().optional(),\n\tyankedAt: z.string().datetime().nullable().optional(),\n\tyankReason: z.string().nullable().optional(),\n\tcreatedAt: z.string().datetime(),\n});\n","/**\n * Bundles resource — namespace-scoped bundle operations.\n */\n\nimport type { HttpTransport } from \"../http.js\";\nimport { AssetDetailOutputSchema, AssetSummaryOutputSchema } from \"../schemas/asset.js\";\nimport { BundleDetailOutputSchema, BundleOutputSchema } from \"../schemas/bundle.js\";\nimport { paginatedSchema } from \"../schemas/common.js\";\nimport { BundleResolveOutputSchema } from \"../schemas/resolve.js\";\nimport {\n\tBundleVersionDetailOutputSchema,\n\tBundleVersionSummaryOutputSchema,\n} from \"../schemas/version.js\";\nimport type {\n\tAssetDetailOutput,\n\tAssetSummaryOutput,\n\tBundleDetailOutput,\n\tBundleOutput,\n\tBundleResolveOutput,\n\tBundleVersionDetailOutput,\n\tBundleVersionSummaryOutput,\n\tPaginateParams,\n\tPaginated,\n} from \"../types.js\";\n\nexport class BundlesResource {\n\tconstructor(private readonly http: HttpTransport) {}\n\n\tasync get(namespace: string, bundle: string): Promise<BundleDetailOutput> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}`,\n\t\t\tBundleDetailOutputSchema,\n\t\t);\n\t}\n\n\tasync list(namespace: string, params?: PaginateParams): Promise<Paginated<BundleOutput>> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles`,\n\t\t\tpaginatedSchema(BundleOutputSchema),\n\t\t\t{\n\t\t\t\tparams: {\n\t\t\t\t\tcursor: params?.cursor,\n\t\t\t\t\tlimit: params?.limit,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t}\n\n\tasync resolve(\n\t\tnamespace: string,\n\t\tbundle: string,\n\t\tversion?: string,\n\t\tdigest?: string,\n\t): Promise<BundleResolveOutput> {\n\t\tconst params: Record<string, string> = {};\n\t\tif (version) {\n\t\t\tparams[\"version\"] = version;\n\t\t}\n\t\tif (digest) {\n\t\t\tparams[\"digest\"] = digest;\n\t\t}\n\n\t\tconst hasParams = Object.keys(params).length > 0;\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}:resolve`,\n\t\t\tBundleResolveOutputSchema,\n\t\t\thasParams ? { params } : undefined,\n\t\t);\n\t}\n\n\tasync listVersions(\n\t\tnamespace: string,\n\t\tbundle: string,\n\t\tparams?: PaginateParams,\n\t): Promise<Paginated<BundleVersionSummaryOutput>> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}/versions`,\n\t\t\tpaginatedSchema(BundleVersionSummaryOutputSchema),\n\t\t\t{\n\t\t\t\tparams: {\n\t\t\t\t\tcursor: params?.cursor,\n\t\t\t\t\tlimit: params?.limit,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t}\n\n\tasync getVersion(\n\t\tnamespace: string,\n\t\tbundle: string,\n\t\tversion: string,\n\t): Promise<BundleVersionDetailOutput> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}/versions/${enc(version)}`,\n\t\t\tBundleVersionDetailOutputSchema,\n\t\t);\n\t}\n\n\tasync listAssets(\n\t\tnamespace: string,\n\t\tbundle: string,\n\t\tparams?: PaginateParams,\n\t): Promise<Paginated<AssetSummaryOutput>> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}/assets`,\n\t\t\tpaginatedSchema(AssetSummaryOutputSchema),\n\t\t\t{\n\t\t\t\tparams: {\n\t\t\t\t\tcursor: params?.cursor,\n\t\t\t\t\tlimit: params?.limit,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t}\n\n\tasync getAsset(\n\t\tnamespace: string,\n\t\tbundle: string,\n\t\tassetId: string,\n\t\tversion: string,\n\t): Promise<AssetDetailOutput> {\n\t\treturn this.http.request(\n\t\t\t\"GET\",\n\t\t\t`/v1/namespaces/${enc(namespace)}/bundles/${enc(bundle)}/assets/${enc(assetId)}`,\n\t\t\tAssetDetailOutputSchema,\n\t\t\t{ params: { version } },\n\t\t);\n\t}\n}\n\nfunction enc(value: string): string {\n\treturn encodeURIComponent(value);\n}\n","// -- Client -------------------------------------------------------------------\nexport { MusherClient } from \"./client.js\";\nexport type { ClientConfig } from \"./config.js\";\n\n// -- Paths --------------------------------------------------------------------\nexport { resolveMusherDirs } from \"./paths.js\";\nexport type { MusherDirs } from \"./paths.js\";\n\n// -- Core classes -------------------------------------------------------------\nexport { Bundle } from \"./bundle.js\";\nexport { BundleRef } from \"./ref.js\";\nexport { Selection } from \"./selection.js\";\n\n// -- Handles ------------------------------------------------------------------\nexport {\n\tAgentSpecHandle,\n\tFileHandle,\n\tPromptHandle,\n\tSkillHandle,\n\tToolsetHandle,\n} from \"./handles/index.js\";\n\n// -- Frontmatter --------------------------------------------------------------\nexport { extractDescription, parseFrontmatter, type FrontmatterResult } from \"./frontmatter.js\";\n\n// -- Adapters -----------------------------------------------------------------\nexport {\n\texportClaudePlugin,\n\texportOpenAIInlineSkill,\n\texportOpenAILocalSkill,\n\tinstallClaudeSkills,\n\tinstallVSCodeSkills,\n\ttype OpenAIInlineSkill,\n\ttype OpenAILocalSkill,\n} from \"./adapters/index.js\";\n\n// -- Convenience functions ----------------------------------------------------\nexport { configure, getClient, pull, resolve } from \"./convenience.js\";\n\n// -- Errors -------------------------------------------------------------------\nexport {\n\tApiError,\n\tAuthenticationError,\n\tCacheError,\n\tForbiddenError,\n\tIntegrityError,\n\tMushError,\n\tNetworkError,\n\tNotFoundError,\n\ttype ProblemDetail,\n\tRateLimitError,\n\tSchemaError,\n\tTimeoutError,\n\tValidationError,\n} from \"./errors.js\";\n\n// -- Schemas ------------------------------------------------------------------\nexport {\n\tAssetDetailOutputSchema,\n\tAssetSummaryOutputSchema,\n\tAssetType,\n\tBundleDetailOutputSchema,\n\tBundleLayerOutputSchema,\n\tBundleManifestOutputSchema,\n\tBundleOutputSchema,\n\tBundleResolveOutputSchema,\n\tBundleSourceType,\n\tBundleVersionDetailOutputSchema,\n\tBundleVersionState,\n\tBundleVersionSummaryOutputSchema,\n\tBundleVisibility,\n\tManifestAssetOutputSchema,\n\tManifestDetailOutputSchema,\n\tPaginationMetaSchema,\n\tpaginatedSchema,\n} from \"./schemas/index.js\";\n\n// -- Types --------------------------------------------------------------------\nexport type {\n\tAssetDetailOutput,\n\tAssetSummaryOutput,\n\tBundleDetailOutput,\n\tBundleLayerOutput,\n\tBundleManifestOutput,\n\tBundleOutput,\n\tBundleResolveOutput,\n\tBundleVersionDetailOutput,\n\tBundleVersionSummaryOutput,\n\tCachedBundle,\n\tLoadedAsset,\n\tLoadedBundle,\n\tManifestAssetOutput,\n\tManifestDetailOutput,\n\tPaginated,\n\tPaginateParams,\n\tPaginationMeta,\n\tSelectionFilter,\n\tVerifyResult,\n} from \"./types.js\";\n","export { exportClaudePlugin, installClaudeSkills } from \"./claude.js\";\nexport {\n\texportOpenAIInlineSkill,\n\texportOpenAILocalSkill,\n\ttype OpenAIInlineSkill,\n\ttype OpenAILocalSkill,\n} from \"./openai.js\";\nexport { installVSCodeSkills } from \"./vscode.js\";\n","/**\n * Module-level convenience functions matching the Python SDK.\n */\n\nimport type { Bundle } from \"./bundle.js\";\nimport { MusherClient } from \"./client.js\";\nimport type { ClientConfig } from \"./config.js\";\nimport type { BundleResolveOutput } from \"./types.js\";\n\nlet _config: ClientConfig | undefined;\nlet _client: MusherClient | undefined;\n\n/** Configure the default client used by module-level convenience functions. */\nexport function configure(config: ClientConfig): void {\n\t_config = config;\n\t_client = undefined; // Reset so next getClient() picks up new config\n}\n\n/** Get or create the default MusherClient. */\nexport function getClient(): MusherClient {\n\tif (!_client) {\n\t\t_client = new MusherClient(_config);\n\t}\n\treturn _client;\n}\n\n/** Pull a bundle (resolve + download + cache). */\nexport async function pull(ref: string, version?: string): Promise<Bundle> {\n\treturn getClient().pull(ref, version);\n}\n\n/** Resolve bundle metadata without downloading content. */\nexport async function resolve(ref: string, version?: string): Promise<BundleResolveOutput> {\n\treturn getClient().resolve(ref, version);\n}\n"],"mappings":"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","names":["mkdir","writeFile","join","resolve","dirname","SKILL_PREFIX_RE","mkdir","writeFile","join","resolve","SKILL_PREFIX_RE","createHash","mkdir","writeFile","dirname","exportOpenAILocalSkill","exportOpenAIInlineSkill","mkdir","writeFile","dirname","join","resolve","exportClaudePlugin","installClaudeSkills","installVSCodeSkills","mkdir","dirname","writeFile","exportClaudePlugin","installClaudeSkills","installVSCodeSkills","createHash","mkdir","writeFile","dirname","join","join","createHash","mkdir","writeFile","dirname","join","join","computeHostId","join","env","resolve","z","z","z","z","z","z","z","createHash","resolve"]}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@musher-dev/musher-sdk",
3
+ "version": "0.1.1",
4
+ "description": "Official TypeScript SDK for the Musher platform — bundle loader and cache client",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "import": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "require": {
14
+ "types": "./dist/index.d.cts",
15
+ "default": "./dist/index.cjs"
16
+ }
17
+ }
18
+ },
19
+ "main": "./dist/index.cjs",
20
+ "module": "./dist/index.js",
21
+ "types": "./dist/index.d.ts",
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "zod": "^3.24.0"
27
+ },
28
+ "devDependencies": {
29
+ "@arethetypeswrong/cli": "^0.18.2",
30
+ "@biomejs/biome": "^1.9.4",
31
+ "@types/node": "^25.5.0",
32
+ "knip": "^6.0.1",
33
+ "publint": "^0.3.18",
34
+ "tsup": "^8.3.0",
35
+ "typescript": "^5.7.0",
36
+ "vitest": "^2.1.0"
37
+ },
38
+ "engines": {
39
+ "node": ">=20"
40
+ },
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "git+https://github.com/musher-dev/typescript-sdk.git",
44
+ "directory": "packages/musher"
45
+ },
46
+ "keywords": [
47
+ "musher",
48
+ "bundle",
49
+ "sdk",
50
+ "ai",
51
+ "agent"
52
+ ],
53
+ "scripts": {
54
+ "build": "tsup",
55
+ "check": "pnpm check:format && pnpm check:lint && pnpm check:types && pnpm check:test",
56
+ "check:format": "biome format --write .",
57
+ "check:lint": "biome lint .",
58
+ "check:types": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
59
+ "check:test": "vitest run",
60
+ "check:exports": "knip",
61
+ "check:publint": "publint",
62
+ "check:attw": "attw --pack .",
63
+ "clean": "rm -rf dist"
64
+ }
65
+ }