Repository navigation
Releases: AleixRocal/pi-multi-skills
Releases · AleixRocal/pi-multi-skills
Release list
v0.3.2
Added
tests/manifest.test.tsholds thepimanifest contract: thepi-packagekeyword, the resource
fields and shapes the host actually reads, every non-glob entry resolving inside the package root,
host packages staying peers with a"*"range, and absolutehttps:preview URLs. Each rule is a
failure that is silent in the host — a dropped field, an ignored key, a path that loads nothing —
so it is asserted rather than assumed.scripts/check-pack.mjsnow validates the same contract against the published tarball. The
manifest is the only source of resources a package has: with apiblock the host reads the
manifest and returns before it walks the conventional directories, so an entry that misses the
tarball would ship a package pi loads nothing from. The check also refuses a manifest that omits a
resource the tarball still carries, and a host-provided package listed independencies.docs/index.html, so the Pages site root answers instead of returning GitHub's 404.pages.yml
publishesdocs/as the site root, which is what puts every asset at/images/…— and a
directory with noindex.htmlis a 404 at/, the one URL a human is likely to type. The page
is hand-written, links the repository, npm and the gallery card, and repeats the demo GIF. No
asset URL changed, and none of them ever needed it.npm run check:hostresolves the hostfile:lineevery comment cites and fails when the text it
points at has moved. This package is pinned to a host version by reading, not by an API
contract, so a bump that shifts a function by one line leaves every comment plausible and every
test green — which is what 1.2.0 → 1.3.0 did toagent-session.js(+1) and both
interactive-mode.js(+2) andexport-html/template.js(+5). The check registers 72
citations inscripts/host-baseline.json, verifies 60 against the installed host, counts the 12
@juicesharp/rpiv-argsones as external rather than as verified, and refuses a citation that was
never snapshotted. It hashes the whole cited range, not just its boundaries, so an edit inside a
range is caught; on failure it names the line the cited text moved to.-- --updatere-snapshots
after a bump, and the diff of the baseline is the re-read. The shipped host docs are hashed too,
reported when they change: a docs-only bump warns instead of failing, because it is not a
behaviour change. Runs innpm run verifyand as its own CI step.
Changed
- Dependabot security updates are on, and recorded in
CONTRIBUTING.md→ Repository settings
alongside the settings the workflows already depend on. A vulnerable package anywhere in the tree
now opens a PR when the advisory lands instead of waiting for Monday's version check, and
dependabot-auto-merge.ymlnever merges one — a security update reports asdirect:production
orindirect, neverdirect:development— so it arrives labelledneeds-reviewfor a human. .gitignorecoversplans/, next to.rpiv/. Both hold rpiv artifacts that stay local, and a
plan written by a skill lands there by default, so leaving it untracked madegit statusnoisy
after every run.
Fixed
package.jsondescriptioncarried the em-dash as escape text —\\u2014in the manifest, which
JSON decodes to the six characters\u2014— so the npm page and the gallery card printed them
verbatim. It is a real—now. npm only re-reads a manifest on publish, so the fix ships with the
next release.CONTRIBUTING.mdno longer describespi.image/pi.videoasraw.githubusercontent.comURLs.
They point at GitHub Pages, which is what the manifest has used since the previews moved there for
the mp4 content type (.github/workflows/pages.yml).
v0.3.1
Added
- The gallery note in
CONTRIBUTING.mdnow separates the package page from the index. The page
is live with the publish (pi.dev/packages/@aleixrocal/pi-multi-skillsanswers 200, an unknown
name 404s); the index is a snapshot of ranked packages, in which every entry sampled carried
30k–56k downloads/month and the newest-publishes section ages out in minutes — so recency and
installs are what move a package into it, and nothing in this repository can. The unscoped
pi-multi-skillson npm also belongs to a different author, which is why the registry search
for the name does not lead here.
Changed
skills/skill-chain/SKILL.mdnames the two splits it can be handed instead of assuming the
positional one. pi binds each/skill:<name>token to the text up to the next token; Claude Code
stacks user-invocable skills at the start of a message, expands the first plus up to five more,
and hands the same trailing text to every skill in the run, with the first non-skill token ending
the stack and becoming that argument text. The skill now identifies the shape before splitting,
says a broadcast split must not be re-split per skill, and keeps the six-skill ceiling for both
hosts;references/lookup.mdresolves a stacked run through the folder name that is its command.- The lockfile tracks pi 1.3.0 (
@earendil-works/pi-coding-agent,pi-tuiand thepi-*
packages their manifests pin exactly), and every hostfile:linecited by the source, the tests
andAGENTS.mdwas re-resolved against it. No cited region changed its text — only its line
number, by+1inagent-session.js,+2ininteractive-mode.jsand+5in
export-html/template.js— so the 20 citations that moved were renumbered and the rest left
alone. The upstream delta is the tool loadout restore on resume, model selection, and codemode
timeouts; nothing in it touches skill-block parsing, the input hook or the markdown transformer.
Nothing changes for an install: the host ranges stay"*"peers, and the lockfile's own root
version, stale at 0.2.5 since that release, now matchespackage.json.
v0.3.0
Added
skills/skill-chain, the model-facing half of a chain. The extension delivers the blocks; this
skill says how to run them: read each namedSKILL.mdin order, hand each its own argument text,
and report what ran so a wrong split is visible. Declared inpi.skills, so it ships in the
tarball and pi loads it beside the extension — and it is portable, so the same file installs into
any agent with a skills directory.tests/skill-package.test.tsholds the contract that fails
quietly elsewhere (name equals directory, description carries a trigger, linked files exist,
manifest andfilesexpose it),check:packnow requires every file underskills/, and
npm run skill:zipbuilds the archive for a marketplace upload.
v0.2.7
Fixed
- The two inline diagrams and the star history chart render outside GitHub again. All three were
<picture>blocks, and the pi package gallery drops that element together with its children: the
README embedded onpi.dev/packages/@aleixrocal/pi-multi-skillsshowed the badges and the demo
GIF but neither diagram, which are the two pictures that explain the extension. They are markdown
images pointing at the light-palette SVG now, and the dark-palette renders are linked from
Docs;AGENTS.mdrecords the constraint so the next diagram edit keeps it.
v0.2.6
Changed
README.mdrewritten for the reader who installs the extension rather than the reader who
maintains it: the problem and an input→result table come before any host internals, the two
diagrams that answer "what do I get" stay inline whilearchitectureandhandler-flowmove
to theDocssection, and the rationale only a maintainer needs (parseSkillBlockanchoring,
the zero-width display marker, the hostfile:linecitations) is left where it already lives —
src/chain-display.tsandAGENTS.md.Layout,Development,CI and releasesand the
"If you are an AI agent" block become one table pointing atCONTRIBUTING.mdandAGENTS.md
instead of a second copy. 272 → 181 lines.
v0.2.5
Fixed
- The previews are served from GitHub Pages (
.../images/...) so the video plays. 0.2.4 pointed them at a CDN mirror of GitHub, which answered 503 for a ref pushed seconds earlier — the change was right about the cause and wrong about the host.raw.githubusercontent.comreturnsapplication/octet-streamfor an mp4, so a browser downloads it; Pages returnsvideo/mp4,image/gif,image/pngandimage/svg+xml(all four checked with curl).pi.image,pi.videoand every README image now use the Pages URL.
Changed
.github/workflows/pages.ymlpublishesdocs/to Pages on any change underdocs/.
v0.2.4
Fixed
- The demo's video URL now serves
video/mp4.raw.githubusercontent.comreturns
application/octet-streamfor an mp4, so the preview was downloaded instead of played;pi.video
points at jsDelivr, which serves the right type (checked withcurl -I). The URL uses@main
rather than a version tag on purpose: a tag that only exists after the release would 404 during
the window between publishing and jsDelivr caching it. - The README plays the demo inline. A README cannot play a raw-hosted mp4, so the poster-plus-link
is gone and an animated GIF (1000px, 66 kB, generated from the same frames) sits in its place,
with the mp4 one click away.
v0.2.3
Added
pi.video, the demo animationdocs/images/demo.mp4(12 s, 1280x720, generated) plus its poster,
so the gallery card has both a still and a moving preview. It was produced by the new
scripts/demo-video.mjs(npm run demo:video): one HTML page whoserenderAt(ms)is the whole
animation, rendered frame by frame through the DevTools protocol and encoded with ffmpeg. It shows
the flow the suite asserts, not a screen recording of a session — and the README says so.- README: the demo sits under the architecture diagram, and
docs/imagesis described for what it
now holds (diagrams, gallery cover, demo).
v0.2.2
Added
pi.image, so the pi package gallery card shows a preview: the cover
indocs/images/cover.png, generated like every other picture here, plus thedocs/images/cover
SVG it is rendered from. Thepi-packagekeyword is what makes the package eligible for the
gallery;pi.imageis the field it reads for the preview, and it points at the file in the
repository rather than one in the tarball — the convention the other gallery packages follow.
Changed
- Comments and test titles no longer cite a design document that lives outside the repository
(Decision 1…8,plan.md §1). Each rule states what it prevents where it is enforced: the
6-skill cap degrading into readable text, an unresolvable token staying verbatim, the renderer's
substring gate on the user-message hot path. The code comments are proof-carrying only when the
reader can follow them, and a private document cannot be followed. scripts/diagrams.mjstakes a per-diagram render scale, so the cover is emitted at 1x like the
gallery previews and the technical diagrams stay at 2x.
v0.2.1
Changed
- README: the Star History section is the chart alone; the sentence that explained what the
embed does sat between the reader and the thing it described. release.yml: publishing is now two ordered attempts. The first runs with no token in scope —
it deletes the_authTokenlinesetup-nodewrites — so npm can only authenticate with the
GitHub OIDC token, which makes "trusted publishing works" a fact in the log instead of an
assumption. The second keeps theNPM_TOKENsecret as a fallback, and the run says which one
published.