feat: extensions import engine — zip/URL install for skills & plugins (N1)#44
Merged
Conversation
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Extract the tail of Install into a private place() helper and add the public InstallDir(dir, name) entrypoint that copies a prepared dir into a temp under the skills dir and calls place. Installed packs land DISABLED. Also teach HarvestPack to recognize a root-level SKILL.md as a single skill (the bare fetched-SKILL.md case), which InstallDir relies on. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Commit 528a3b5 made a root-level SKILL.md the single skill unconditionally, regressing multi-skill packs that ship both a root overview SKILL.md and real skills in subdirectories. Restructure HarvestPack so the subdirectory walk runs first and wins: a root SKILL.md is the single skill only as a fallback when the walk yields zero skills (supporting a bare fetched SKILL.md / single-file form). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…mp dir Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Extensions import engine (N1)
Lets nib install a skill or plugin from a
.ziparchive or a bareSKILL.mdURL — from the library and the CLI. Folder and git installs already worked; this fills the remaining import forms and lays the reusable foundation for the upcoming catalog/marketplace (N2) and the Dante Desktop UI.What's new
extsourcepackage —ExtractZip(safe unzip with zip-slip guards: rejects path-escape, absolute, and symlink entries; bounded reads) andFetchSKILLURL(downloads a bareSKILL.mdinto a pack dir, the agentskills.io well-known form).InstallDiron both managers —skill.Manager.InstallDir(dir, name, sourceURL)andplugin.Manager.InstallDir(dir, nibVersion, sourceURL)install an already-prepared local directory. Each is a behaviour-preserving refactor that extracts a sharedplacetail out of the existingInstall.HarvestPackprecedence — a root-levelSKILL.mdnow counts as the single skill only when the pack has no subdirectory skills (supports the bare-file / agentskills.io form; multi-skill packs are unchanged). Proven additive against existing installed packs.nib skill install <zip|SKILL.md-url>andnib plugin install <zip>; git/local-dir/--linkpaths unchanged. Imports land DISABLED; the only enable path remains the existing interactive consent.Safety / invariants
placerecordsEnabled: false).Installrefactors are behaviour-preserving; the real source (zip path / URL) is recorded asSourceURLfor honestlistprovenance.Tests
Full module suite green (
go build/vet/test ./..., gofmt clean). New coverage inextsource,skill,plugin, andcmd.Follow-ups (separate work)
catalogpackage +nib skill/plugin browse|search|source(skills+plugins marketplace from indexes).Built via subagent-driven development (implementer + independent spec/quality review per task, then a whole-branch review).
🤖 Generated with Claude Code