@vibe-agent-toolkit/vat-development-agents 0.1.26-rc.5 → 0.1.28-rc.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.
@@ -1,12 +1,669 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to the vibe-agent-toolkit marketplace will be documented in this file.
3
+ All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/).
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Breaking
11
+ - **Removed top-level `vat install` command.** Install of flat skills now uses `vat skills install <source> --target <target> --scope <user|project>`. Install of Claude plugins uses `vat claude plugin install <source>`.
12
+
13
+ ### Added
14
+ - `vat skills install <source> --target <target> --scope <user|project>` — cross-platform flat skill installer. Supports 7 targets (claude, codex, copilot, gemini, cursor, windsurf, agents) and 2 scopes (user, project). Sources: local directory, `.zip`, `.tgz`, or `npm:@scope/package`. Pre-verifies all skills before touching the filesystem (all-or-nothing).
15
+ - `vat skills list npm:@scope/package` — inspect what skills are in an npm package without installing.
16
+ - **Content-type routing** — auto-discovered files now route to `scripts/`, `templates/`, `assets/`, or `resources/` based on file extension instead of all going to `resources/`.
17
+ - **Skill files config** — declare `files` entries in `vibe-agent-toolkit.config.yaml` for build artifacts, unlinked files, or routing overrides. Supports default + per-skill merge with dest-based override. See `docs/guides/skill-files-and-routing.md`.
18
+ - **Deferred verification** — validation chain recognizes declared build artifacts at source time (deferred), enforces hard gates at build time (source must exist) and verify time (dest must exist in output).
19
+ - **`vat verify` files check** — post-build verification now confirms all `files[].dest` paths exist in the built output.
20
+
21
+ ### Changed
22
+ - Published VAT skills updated to describe the new `vat skills install` command surface.
23
+
24
+ ## [0.1.26] - 2026-04-10
25
+
26
+ ### Added
27
+ - **Cross-skill SKILL.md bundling prevention** — VAT now detects when a skill links to another skill's `SKILL.md` and excludes it from the bundle. A `SKILL.md` is a skill definition marker, not a resource — bundling one inside another skill creates duplicate definitions that break marketplace sync and confuse skill consumers. Two layers of protection: link-follow filtering (prevents the bad state) and post-build validation (safety net). The exclusion appears in build output as `skill-definition` reason.
28
+ - **ESLint rule: `no-fs-promises-cp`** — Prevents usage of async `cp()` from `node:fs/promises` in favor of `cpSync()` from `node:fs`. Node 22's async `cp({ recursive: true })` silently drops files in nested directories. The rule auto-fixes and explains the issue so developers can make an informed eslint-disable decision if async is truly needed.
29
+
30
+ ### Fixed
31
+ - **Marketplace publish drops non-markdown files on Node 22** — `composePublishTree` used async `cp()` from `node:fs/promises` which silently drops `.mjs` files in nested directories on Node 22. Replaced with `cpSync` which works correctly across all Node versions. Added a system test that verifies `.mjs` scripts survive the full compose→publish pipeline.
32
+ - **Marketplace publish `--debug` flag not reaching logger** — `--debug` was defined on the publish command but consumed by a parent command in the Commander hierarchy. Options are now read via `optsWithGlobals()` so `--debug` works correctly.
33
+ - **Marketplace publish debug logging** — `vat claude marketplace publish --debug` now logs the full file list at each stage of the publish pipeline (cpSync output, git tracked files, git ignored files, early-exit tree). Diagnoses files disappearing between build output and published commit.
34
+
35
+ ## [0.1.25] - 2026-04-09
36
+
37
+ ### Security
38
+ - **Marketplace publish no longer logs git remote credentials.** `vat claude marketplace publish` previously echoed the full remote URL — including any credentials embedded by the user's config OR injected at runtime from `GH_TOKEN`/`GITHUB_TOKEN` — to stdout via its `Remote:` and `Pushed to …` log lines. In CI, GitHub Actions auto-masked the secret, but local runs (including adopter dry-runs) emitted the raw token to the terminal. All URL logging now passes through a `redactUrlCredentials()` helper that strips userinfo before logging. Git commands still receive the tokenized URL for authentication — only the logged copy is redacted.
39
+
40
+ ### Changed
41
+ - **BREAKING: Marketplace publish no longer rewrites `CHANGELOG.md`.** `vat claude marketplace publish` now mirrors the source `CHANGELOG.md` byte-for-byte into the publish tree and extracts release notes for the commit body only. Accepts both Keep a Changelog workflows: a pre-stamped `[X.Y.Z]` section matching `package.json` (preferred) or a non-empty `[Unreleased]` section (fallback). Fails if neither is present. Workflow A adopters whose `main` branch CHANGELOG continues to carry `[Unreleased]` at publish time will see that heading on the publish branch too — stamp `CHANGELOG.md` on `main` before tagging if you want a stamped heading in the published file. Side benefit: corrections/typo-fixes to `CHANGELOG.md` on `main` now propagate to the publish branch on the next publish.
42
+
43
+ ### Fixed
44
+ - **`toAbsolutePath()` and `getRelativePath()` now return forward-slash paths on Windows** — previously these returned backslash paths, bypassing cross-platform normalization.
45
+
46
+ ## [0.1.24] - 2026-04-06
47
+
48
+ ### Feature
49
+ - **Safe path normalization** — added `safePath.join()`, `safePath.resolve()`, `safePath.relative()` wrappers in `@vibe-agent-toolkit/utils` that always return forward-slash paths. New ESLint rules (`no-path-join`, `no-path-resolve`, `no-path-relative`) enforce their use over raw `node:path` functions, with auto-fix support. Adopters can copy these rules from `packages/dev-tools/eslint-local-rules/` into their own projects. Closes #38.
50
+ - **Cross-platform ESLint rule parity with vibe-validate** — ported `no-path-resolve-dirname` (enforces `normalizePath()` over `path.resolve(__dirname)` in tests for Windows 8.3 short name safety) and `no-test-scoped-functions` (enforces module-scope helper functions in test files, SonarQube S1515). VAT now ships 15 custom ESLint rules for cross-platform safety.
51
+
52
+ ## [0.1.23] - 2026-04-02
53
+
54
+ ### Feature
55
+ - **Marketplace publishing** — distribute Claude plugin marketplaces via Git branches. `vat claude marketplace publish` composes built artifacts with changelog, readme, and license into a squashed commit on a configurable branch. Consumers install with `/plugin marketplace add owner/repo#branch`. Includes standalone strict validation (`vat claude marketplace validate`) and automatic marketplace verification in `vat verify`.
56
+
57
+ ### Docs
58
+ - **Marketplace testing guide** — added "Testing Your Marketplace" section to marketplace-distribution.md with full local test flow (`marketplace add` → `install` → `validate` → verify skills), known issues (name collision, `$schema` validation), and update workflow.
59
+ - **Marketplace README** — rewrote marketplace branch README as a developer-facing landing page with two-step install, skill descriptions, and architecture link.
60
+ - **Main README** — added "Claude Plugin Marketplace" section with install commands and links to marketplace branch and distribution guide.
61
+ - **Distribution skill** — added local marketplace testing subsection with commands and known-issue notes.
62
+
63
+ ### Changed
64
+ - **Publish workflow** — added marketplace publish step to CI; stable tags push to `claude-marketplace` branch, RC tags push to `claude-marketplace-next`.
65
+ - **Pre-publish checks** — added marketplace dry-run validation (Check 12) to catch build/changelog issues before any npm mutations.
66
+
67
+ ## [0.1.22] - 2026-04-01
68
+
69
+ ### Added
70
+ - `vat claude org info` — org identity from Admin API (`/v1/organizations/me`).
71
+ - `vat claude org users list/get` — list and retrieve org members.
72
+ - `vat claude org invites list` — list pending and accepted invitations.
73
+ - `vat claude org workspaces list/get` — list and retrieve API workspaces.
74
+ - `vat claude org workspaces members list` — list workspace members.
75
+ - `vat claude org api-keys list` — inventory of org API keys with status and workspace scope.
76
+ - `vat claude org usage` — daily token usage report (model/workspace/key breakdown); autopaginates by advancing `starting_at`.
77
+ - `vat claude org cost` — USD cost report; `amount` field is string decimal. Valid `group_by[]` values: `description`, `workspace`.
78
+ - `vat claude org code-analytics` — Claude Code productivity metrics; `starting_at` is date-only `YYYY-MM-DD`.
79
+ - `vat claude org skills list` — workspace-scoped skills from `/v1/skills` (beta); skill IDs are slugs not UUIDs.
80
+ - `vat claude org skills install <source>` — upload a built skill directory or ZIP to the organization via Skills API (`POST /v1/skills`). Reads `display_title` from SKILL.md frontmatter; `--title` to override. Supports `--from-npm <pkg>@<version>` to download and upload all skills from an npm package (with optional `--skill <name>` filter).
81
+ - `vat claude org skills delete <skill-id>` — delete a skill from the organization via Skills API (`DELETE /v1/skills/{id}`).
82
+ - `OrgApiClient.uploadSkill()` / `OrgApiClient.deleteSkill()` — programmatic multipart upload and delete for Skills API.
83
+ - `buildMultipartFormData()` — zero-dependency multipart/form-data builder exported from `@vibe-agent-toolkit/claude-marketplace`.
84
+ - `vat claude org skills versions list <skill-id>` — list all versions of a skill.
85
+ - `vat claude org skills versions delete <skill-id> <version>` — delete a specific skill version (required before deleting the skill itself).
86
+ - `OrgApiClient.deleteSkillVersion()` — programmatic version deletion for Skills API.
87
+ - All other mutating org commands (`users update/remove`, `invites create/delete`, `workspaces create/archive`, `api-keys update`) return structured `not-yet-implemented` stubs.
88
+ - All `vat claude org` commands require `ANTHROPIC_ADMIN_API_KEY`; `org skills` commands require `ANTHROPIC_API_KEY`.
89
+ - `vibe-agent-toolkit:org-admin` skill — documents OrgApiClient programmatic API, CLI commands, report pagination quirks, and common recipes (cost summaries, API key audits, invite tracking).
90
+
91
+ ### Fixed
92
+ - **Plugin version in plugin.json** — `vat claude plugin build` now includes `version` from package.json in generated plugin.json. Without it, Claude Code caches plugins under an `unknown/` directory, causing stale skill resolution across version upgrades.
93
+ - **`PLUGIN_MISSING_VERSION` audit check** — `vat audit` now warns when a plugin's plugin.json is missing the `version` field, explaining the stale cache impact.
94
+ - **Semver pre-release in plugin.json schema** — version field now accepts pre-release suffixes (e.g., `1.0.0-rc.3`) in addition to strict semver.
95
+ - **System test isolation** — `fakeHomeEnv()` now overrides `CLAUDE_CONFIG_DIR` to prevent shell-level environment variables from leaking into spawned test processes. Fixes false test failures when `CLAUDE_CONFIG_DIR` is set in the developer's shell.
96
+ - **`unknown_link` false positives** — `vat resources validate` no longer reports `unknown_link` errors for changelog headings (`## [Unreleased]`, `## [0.1.0] - 2026-01-01`) or bare filenames with extensions (`config.schema.json`, `image.png`). Unresolved `linkReference` nodes are now skipped, and bare filenames are classified as `local_file`.
97
+ - **Collection matching in dot-directories** — picomatch `**` globs now match paths containing dot-directory segments (e.g., `.claude/worktrees/`). Previously, collection validation silently returned 0 matches when the project path included a dotfile directory.
98
+ ## [0.1.21] - 2026-03-31
99
+
100
+ ### Breaking Changes
101
+ - **`vat skills install` removed** — replaced by `vat claude plugin install`. Update postinstall scripts to use `vat claude plugin install --npm-postinstall || exit 0` and add `vibe-agent-toolkit` to your package's `dependencies` (runtime, not devDependencies) so that `vat` is available via `./node_modules/.bin/` during postinstall.
102
+ - **`vat skills uninstall` removed** — replaced by `vat claude plugin uninstall`.
103
+ - **`vat claude build` replaced** — superseded by `vat claude plugin build` (same function, new location under the plugin command group). `vat build` now runs both `skills` and `claude` phases automatically; no separate step needed.
104
+ - **`vat claude verify` removed** — use `vat verify` (config-driven top-level command).
105
+ - **`vat-development-agents` plugin renamed to `vibe-agent-toolkit`** — the installed plugin name changes. Skill short names also updated: `agent-authoring` → `authoring`, `skills-distribution` → `distribution`, `install-architecture` → `install`. Installed skill IDs are now `vibe-agent-toolkit:authoring`, `vibe-agent-toolkit:distribution`, etc.
106
+
107
+ ### Added
108
+ - `vat claude plugin install` — installs skill packages into Claude Code. Accepts `--target code|api.anthropic.com|claude.ai` (`code` is default; `claude.ai` returns a structured not-available stub). Correct postinstall pattern uses the local `node_modules` binary, never assumes a global `vat`.
109
+ - `vat claude plugin build` — generates `dist/.claude/plugins/marketplaces/` from `dist/skills/` and `vibe-agent-toolkit.config.yaml`. Cleans stale output before each build. Replaces `vat claude build`; now runs automatically as the `claude` phase of `vat build`.
110
+ - `vat claude plugin list` — lists installed plugins from the plugin registry and legacy skills directory.
111
+ - `vat claude plugin uninstall` — removes a plugin and all 5 install artifacts (marketplace dir, cache dir, `installed_plugins.json`, `known_marketplaces.json`, `settings.json`). Idempotent; `--all` finds plugins by npm package name; `--dry-run` previews without changes.
112
+ - **`vat build` now runs `skills → claude` phases** — full pipeline in one command; `claude` phase skipped automatically if no `claude.marketplaces` config is present.
113
+ - **`vat claude plugin install --dev` uses plugin tree symlinks** — skills appear as `{plugin}:{skill}` in Claude Code (e.g. `vibe-agent-toolkit:authoring`) instead of flat names. Requires `vat build` first. Gracefully rejects on Windows with a clear error.
114
+ - `vat-development-agents` self-adoption: postinstall now uses `vat claude plugin install --npm-postinstall` via `.bin/vat` (no path guessing, no global `vat` assumption).
115
+ - **`CLAUDE_CONFIG_DIR` env var support** — `getClaudeUserPaths()` now respects `CLAUDE_CONFIG_DIR` to override the default `~/.claude` location. Enables multiple Claude installations and non-standard config paths.
116
+
117
+ ### Fixed
118
+ -**`vat skills build` cleans `dist/skills/` before rebuilding** — stale skill directories from renamed or removed skills no longer accumulate between builds.
119
+ - **`@next` dist-tag now updated on stable npm releases** — `publish.yml` now runs `determine-publish-tags.ts` to compute `update_next` and passes it to `publish-with-rollback.ts` via `UPDATE_NEXT` env; `publish-with-rollback.ts` now has a Phase 2 that applies `npm dist-tag add <pkg>@<version> next` to all packages when `UPDATE_NEXT=true`, with rollback on failure
120
+
121
+ ## [0.1.20] - 2026-03-26
122
+
123
+ ### Fixed
124
+ - **Plugin reinstall now removes stale skills** — reinstalling a plugin package that has fewer skills than the previous version no longer leaves orphaned skill directories in the Claude installation; the marketplace directory is fully replaced on each install rather than merged additively
125
+
126
+ ## [0.1.19] - 2026-03-23
127
+
128
+ ### Fixed
129
+ - **Audit: resolve URL-encoded paths in skill link traversal** — `vat audit` now correctly resolves `%20`, `%26`, and other percent-encoded characters in markdown link paths during skill link traversal; previously reported false `LINK_INTEGRITY_BROKEN` errors for files in directories with spaces or special characters (e.g., SharePoint-synced folders)
130
+
131
+ ### Changed
132
+ - **Shared `resolveLocalHref` utility** — extracted common href → filesystem path resolution (anchor stripping, URL-decoding, relative path resolution) into `@vibe-agent-toolkit/resources` so both the audit and validate code paths use a single implementation
133
+
134
+ ## [0.1.18] - 2026-03-20
135
+
136
+ ### Added
137
+ - **`success` boolean on `SafeExecResult`** — convenience field (`success: exitCode === 0`) for cleaner conditional checks in callers of `safeExecSync()` and `safeExec()`
138
+
139
+ ## [0.1.17] - 2026-03-20
140
+
141
+ ### Fixed
142
+ - **Link validator: resolve percent-encoded paths** (fixes #59) — `%20` and other URL-encoded characters in markdown link paths are now decoded before filesystem resolution; bare relative paths with slashes (e.g., `files/doc.pdf`) are correctly classified as `local_file` instead of `unknown`
143
+ - **Windows Node.js v24+ compatibility** — fixed `ERR_UNSUPPORTED_ESM_URL_SCHEME` when running `vat` on Windows with Node.js v24, where bare absolute paths require `file://` URLs for dynamic imports
144
+
145
+ ### Breaking Changes
146
+ - **Redesigned skill config and plugin distribution** (PR #55) — `vat.skills[]` in package.json is now an array of skill name strings (not objects); all config lives in `vibe-agent-toolkit.config.yaml`
147
+ - `dist/.claude/` directory structure now mirrors `~/.claude/plugins/` directly — plugin install is a recursive copy, no manifest parsing needed
148
+ - New `PluginJsonSchema` (strict: `name`, `description`, `author` only)
149
+ - Removed `MarketplaceSchema`, `marketplace-validator.ts`, and all related code
150
+
151
+ ### Added
152
+ - **marketplace.json build, validate, and audit** (PR #57) — full marketplace manifest lifecycle
153
+ - `MarketplaceManifestSchema` in agent-skills with passthrough for all official source types (string, github, url, npm, pip)
154
+ - `validateMarketplace()` validator mirroring the plugin-validator pattern
155
+ - `vat claude build` now generates `.claude-plugin/marketplace.json` with relative source paths
156
+ - `vat claude verify` validates marketplace.json against the schema
157
+ - Unified validator routes marketplace type to `validateMarketplace()` (replaces placeholder UNKNOWN_FORMAT error)
158
+ - `vat audit --user` now correctly validates marketplace directories
159
+ - Plugin `description` is now optional in VAT project config (adopter compatibility)
160
+ - Added marketplace-level `skills` selector to config schema
161
+ - **Transitive link traversal for `vat audit`** (PR #56) — follows all local file links from SKILL.md via BFS with cycle detection
162
+ - Reports broken links (`LINK_INTEGRITY_BROKEN` error), boundary escapes (`OUTSIDE_PROJECT_BOUNDARY` warning), and unreferenced markdown files (`SKILL_UNREFERENCED_FILE` info with `--warn-unreferenced-files`)
163
+ - Excludes CLAUDE.md, README.md, and other navigation files from unreferenced file detection
164
+ - **Implicit reference detection** — `extractImplicitReferences()` scans for non-markdown-link file references (backtick-quoted, bold, DOT graphviz, bare prose, `@`-prefix)
165
+ - New `SKILL_IMPLICIT_REFERENCE` issue code for files referenced implicitly but not via `[text](path)` links
166
+ - Reduces false-positive unreferenced file warnings from 18 to 9 when auditing real installed plugins
167
+ - **Settings schemas synced with official Claude Code docs** — `vat audit settings` now recognizes ~30 additional fields including sandbox filesystem/network controls, permission modes (`askEdits`, `readOnly`), and managed-only lockdown settings; fixes `autoUpdatesChannel` enum to match the official values (`stable`, `latest`)
168
+
169
+ ## [0.1.15] - 2026-03-02
170
+
171
+ ### Added
172
+ - **`vat build` and `vat verify` top-level commands** — orchestrate the full build and verification pipeline in dependency order
173
+ - `vat build`: skills → claude plugins (future: cursor, etc.)
174
+ - `vat verify`: resources → skills → claude artifacts
175
+ - `--only <phase>` flag to run a single phase; `--marketplace <name>` to target a specific marketplace
176
+ - **`vat claude build`** — generates Claude plugin marketplace artifacts from pre-built skills
177
+ - Reads `claude:` section from `vibe-agent-toolkit.config.yaml`; resolves skill selectors (exact names and globs)
178
+ - Copies pre-built `dist/skills/<name>/` into `dist/plugins/<plugin>/skills/` (no re-bundling)
179
+ - Generates `dist/plugins/<plugin>/.claude-plugin/plugin.json` and `dist/.claude-plugin/marketplace.json`
180
+ - Sanitizes colon-namespaced skill names (e.g. `plugin:skill`) to double-underscore for Windows filesystem safety
181
+ - **`vat claude verify`** — validates Claude marketplace and plugin artifacts against schemas
182
+ - Validates `marketplace.json` against `MarketplaceSchema`, `plugin.json` against `ClaudePluginSchema`
183
+ - Validates `managed-settings.json` against `ManagedSettingsSchema` when `claude.managedSettings` is configured
184
+ - Supports both source-layout (`file:`) and build-to-dist patterns
185
+ - **`claude:` config section in `vibe-agent-toolkit.config.yaml`** — configure Claude plugin distribution
186
+ - `claude.marketplaces` — named map of marketplace definitions (inline or `file:` source-layout)
187
+ - `claude.managedSettings` — path to managed-settings.json for schema validation
188
+ - Marketplace config: `owner`, `skills` selector (exact or glob), `plugins` grouping, `output` paths
189
+ - **Claude plugin registry installer** (`packages/claude-marketplace`) — writes directly to Claude Code's plugin registry
190
+ - Five-step install: copies plugin files to `~/.claude/plugins/marketplaces/` and `cache/`, updates `known_marketplaces.json`, `installed_plugins.json`, and `settings.json enabledPlugins`
191
+ - Called automatically by `vat skills install --npm-postinstall` when `dist/.claude-plugin/marketplace.json` exists
192
+ - **`vat skills install` now routes through Claude plugin system** when package ships a plugin
193
+ - If `dist/.claude-plugin/marketplace.json` exists: installs via plugin registry (namespaced, version-tracked)
194
+ - If marketplace.json is absent: emits guidance to run `vat build` and exits 0 (no raw skill install)
195
+ - `--user-install-without-plugin` flag: explicit opt-in to force `~/.claude/skills/` install
196
+ - **`vat --cwd <dir>` root flag** — change working directory before any command runs
197
+ - Enables CI pipelines to run `vat build --cwd packages/my-agents` from the monorepo root
198
+ - **Marketplace settings schema fields** in `ClaudeSettingsSchema` and `ManagedSettingsSchema`
199
+ - `extraKnownMarketplaces`, `enabledPlugins` added to settings/settings.local
200
+ - `strictKnownMarketplaces` added to managed-settings only
201
+ - `vat audit settings` output gains `marketplaces:` section showing registered marketplaces and enabled plugins
202
+ - **`plugin:skill` colon notation in skill names** - Skill names may now include a plugin namespace prefix (e.g., `vibe-agent-toolkit:audit`)
203
+ - Format: `plugin-name:skill-name`; the prefix is the plugin/package namespace, the suffix is the skill's local name
204
+ - Supported in both SKILL.md `name:` frontmatter and `package.json` `vat.skills[].name`
205
+ - **`vibe-agent-toolkit` skill package split** - Replaced the 1310-line monolith with an umbrella + 4 focused action skills
206
+ - Umbrella `vibe-agent-toolkit` (~179 lines): concepts, archetypes overview, routing table, CLI quick reference
207
+ - `vibe-agent-toolkit:resources` — resource collections, per-directory schema validation, `vat resources` commands
208
+ - `vibe-agent-toolkit:distribution` — packaging, `--target claude-web`, `vat install`, npm and private distribution
209
+ - `vibe-agent-toolkit:agent-authoring` — SKILL.md authoring, 4 archetypes with examples, packaging options reference
210
+ - `vibe-agent-toolkit:audit` — `vat audit` flags, auto-detection table, `--compat` output, CI usage patterns
211
+ - **`vat audit --exclude <glob>`** - Filter paths from recursive scans (repeatable flag)
212
+ - Example: `vat audit plugins/ --exclude "dist/**" --exclude "node_modules/**"`
213
+ - Prunes directory traversal early for performance; does not just filter output
214
+ - **Unified `vat install` command** - Single command for installing any VAT resource type
215
+ - Auto-detects resource type from source: `SKILL.md` → agent-skill, `.claude-plugin/plugin.json` → claude-plugin, `.claude-plugin/marketplace.json` → claude-marketplace
216
+ - Routes to the correct `~/.claude/` subdirectory automatically
217
+ - Flags: `--type` (explicit override), `--force`, `--dry-run`; YAML output includes `sourceType` field
218
+ - `vat skills install` remains as an alias constrained to agent skills only
219
+ - **`vat audit --compat`** - Per-surface compatibility analysis for plugins and skills
220
+ - Reports compatibility with `claude-code`, `cowork`, and `claude-desktop` surfaces with supporting evidence
221
+ - Detects Python scripts, bash hooks, sqlite dependencies, and other surface-specific constraints
222
+ - Works in both path mode and `--user` mode; combinable with recursive scanning for full marketplace matrices
223
+ - **`vat skills package --target <target>`** - Target-specific packaging for Claude.ai web upload
224
+ - `--target claude-web` produces a ZIP with `references/` instead of `resources/`, matching the Claude.ai web upload spec
225
+ - `--target claude-code` (default) preserves existing behavior unchanged
226
+ - ZIP size validation for `claude-web`: warn at 4MB, error at 8MB
227
+
228
+ ### Changed
229
+ - **`vat audit` is recursive by default** (**BREAKING**) - `vat audit <path>` now walks the full directory tree automatically
230
+ - `--recursive` / `-r` flag removed; use `--no-recursive` to scan the top-level directory only
231
+ - `--user` behavior unchanged: scans `~/.claude/` directories, exit code remains 0 (informational)
232
+ - **`CLAUDE.md` documentation additions** - Resource collections and licensing conventions added to the contributor guide
233
+ - Resource collections: per-directory schema validation config, `permissive` vs `strict` modes, `vat resources validate` usage
234
+ - Licensing conventions: table for open source / proprietary / not-yet-licensed packages with enterprise LICENSE template
235
+
236
+ ## [0.1.14] - 2026-02-11
237
+
238
+ ### Added
239
+ - **Content transform pipeline** - Shared `transformContent()` engine in `@vibe-agent-toolkit/resources` for rewriting markdown links before persistence
240
+ - `LinkRewriteRule[]` configuration with match criteria (type, glob pattern, excludeResourceIds) and Handlebars templates
241
+ - Template variables: `{{link.text}}`, `{{link.href}}`, `{{link.fragment}}`, `{{link.resource.*}}` (id, filePath, extension, mimeType, sizeBytes, estimatedTokenCount, frontmatter.*)
242
+ - Consumer context variables for skill/project-specific data (e.g., `{{skill.name}}`, `{{kb.baseUrl}}`)
243
+ - `ResourceLookup` interface decouples transform from full ResourceRegistry
244
+ - First-match-wins rule ordering; unmatched links preserved as-is
245
+ - **Full document storage** (`rag_documents` table) - Optional `storeDocuments: true` config on LanceDB RAG provider
246
+ - Stores complete document content alongside vector chunks for retrieval after search
247
+ - `getDocument(resourceId)` returns full content, metadata, token count, chunk count, and indexing timestamp
248
+ - Content transforms applied to stored documents
249
+ - Incremental updates: changed content updates the document record
250
+ - Cascading deletes: `deleteResource()` removes both chunks and document record
251
+ - `DocumentResult` interface added to `@vibe-agent-toolkit/rag` provider interfaces
252
+ - **Content transform support in RAG indexing** - `contentTransform` option on LanceDB provider rewrites links before chunking
253
+ - Content hash computed on transformed output for accurate change detection
254
+ - Re-indexes automatically when transform rules change
255
+ - **OnnxEmbeddingProvider** - Local ONNX-based embedding generation (#45)
256
+ - Makes `@lancedb/vectordb` and `onnxruntime-node` optional peer dependencies
257
+ - Falls back gracefully when native dependencies unavailable
258
+
259
+ ### Fixed
260
+ - **tokenCount in enrichChunks** - `tokenCount` field now populated on enriched chunks; chunk position metadata (`chunkIndex`, `totalChunks`, `isFirstChunk`, `isLastChunk`) added (#46)
261
+ - **Custom metadata overwriting core chunk fields** - `chunkToLanceRow()` now spreads metadata before core fields so `chunkIndex`, `totalChunks`, and other core columns cannot be overwritten by user-defined metadata schemas with colliding names
262
+ - **Path-relative resource IDs** - `ResourceRegistry` generates IDs relative to `baseDir` (e.g., `docs-guide` instead of `guide`), preventing collisions for same-named files in different directories
263
+
264
+ ## [0.1.13] - 2026-02-10
265
+
266
+ ### Added
267
+ - **Skills development install** (`vat skills install --dev`) - Symlink-based installation reads `vat.skills[]` from `package.json` and symlinks built skills into `~/.claude/skills/`
268
+ - After rebuild, skills update immediately (no re-install needed)
269
+ - `--build` flag auto-runs `vat skills build` before symlinking
270
+ - `--name` flag to install a specific skill from multi-skill packages
271
+ - `--force` to overwrite existing installations
272
+ - `--dry-run` to preview without creating symlinks
273
+ - **Skills uninstall** (`vat skills uninstall <name>`) - Remove installed skills (directories or symlinks)
274
+ - `--all` flag reads `package.json` and removes all declared skills
275
+ - `--dry-run` to preview without removing
276
+ - Reports `wasSymlink` in YAML output for each removed skill
277
+ - **MCP test client harness** - Reusable `MCPTestClient` class for reliable MCP server testing
278
+ - Waits for server readiness signal before sending requests (eliminates race conditions)
279
+ - Auto-incrementing request IDs with ID-based promise resolution
280
+ - Graceful shutdown with SIGTERM/SIGKILL fallback
281
+
282
+ ### Fixed
283
+ - **npm install installs ALL skills** - `vat skills install <npm-package>` now installs all skills from multi-skill packages instead of only the first one
284
+ - **Broken symlink detection** - `vat skills install --force` now correctly detects and removes broken symlinks using `lstatSync` instead of `existsSync`
285
+ - **MCP test reliability** - Replaced timing-based test approach with readiness-signal pattern; tests now complete in ~600ms instead of flaking at 2-3.5s
286
+
287
+ ## [0.1.12] - 2026-02-10
288
+
289
+ ### Added
290
+ - **External URL validation with caching** (#41)
291
+ - Optional external URL validation via `--check-external-urls` flag
292
+ - Filesystem-based cache with TTLs (24h alive, 1h dead)
293
+ - Per-collection configuration for timeout, retry, ignore patterns
294
+ - New issue types: `external_url_dead`, `external_url_timeout`, `external_url_error`
295
+ - Cache stored in `.vat-cache/external-urls.json`
296
+ - Uses `markdown-link-check` library for robust HTTP checking
297
+ - **Link Depth Control for Skills** - Control how deep to follow markdown links during skill packaging
298
+ - `linkFollowDepth` in `packagingOptions`: `0` (skill only), `1` (direct links), `2` (default), `N`, or `"full"` (unlimited)
299
+ - Prevents transitive link explosion in large knowledge bases (e.g., 493 files → ~10 files with depth 1)
300
+ - **Rule-Based Link Exclusion** - Selectively exclude files from bundles with per-pattern link rewriting
301
+ - `excludeReferencesFromBundle` with ordered rules: each rule specifies glob patterns and optional Handlebars template
302
+ - `defaultTemplate` for depth-boundary links that don't match explicit rules (default: `"{{link.text}}"`)
303
+ - Template variables: `{{link.text}}`, `{{link.href}}`, `{{link.fragment}}`, `{{link.type}}`, `{{link.resource.id}}`, `{{link.resource.fileName}}`, `{{link.resource.relativePath}}`, `{{skill.name}}`
304
+ - No dead links in output: every non-bundled link target is rewritten per its matched template
305
+ - **Resource Naming Strategies for Skills** - Flexible control over packaged resource file naming
306
+ - Three strategies: `basename` (default, simple), `resource-id` (flatten to kebab-case), `preserve-path` (maintain directory structure)
307
+ - Universal `stripPrefix` option removes path prefixes before applying naming strategy
308
+ - Filename collision detection prevents duplicate names in flat output
309
+ - Configure via `packagingOptions` in skill metadata (package.json `vat.skills[]`)
310
+ - **Non-Markdown Asset Bundling** - JSON schemas, images, and other non-markdown files linked from bundled markdown are now included in skill packages
311
+ - **Handlebars Template Utility** - Shared template rendering in `@vibe-agent-toolkit/utils` with compiled template caching
312
+ - **Directory Link Detection** - Links targeting directories now produce actionable validation errors suggesting README.md/index.md alternatives (previously crashed with ENOTSUP)
313
+ - **Expanded Validation Metadata** - `directFileCount`, `excludedReferenceCount`, and `excludedReferences` in validation results
314
+ - `--verbose` flag on `vat skills validate` shows excluded reference details with reason (`depth-exceeded` / `pattern-matched`) and matched pattern
315
+ - **Packaging Options Documentation** - Comprehensive reference in VAT SKILL.md covering linkFollowDepth, resourceNaming, excludeReferencesFromBundle, and ignoreValidationErrors
316
+
317
+ ### Changed
318
+ - **Default link follow depth is now 2** (was unlimited). Use `linkFollowDepth: "full"` to restore unlimited behavior.
319
+ - `LINK_TARGETS_DIRECTORY` validation is now overridable (transitively-bundled docs may contain directory links the skill author cannot control)
320
+
321
+ ### Improved
322
+ - **Navigation file errors** now include full resolved paths and line numbers (not just basename)
323
+ - **Depth terminology** clarified as "link-chain hops" instead of misleading "levels deep"
324
+
325
+ ### Internal
326
+ - **npm link reliability** - Topological sort, `--install-strategy=shallow`, and retry logic for workspace package linking
327
+
328
+ ## [0.1.11] - 2026-02-09
329
+
330
+ **Note:** Version 0.1.10 was deprecated due to incomplete publish (phantom package in publish list caused partial release).
331
+
332
+ ### Performance
333
+ - **Discovery Scan: 540x Faster** - File discovery now completes in ~0.5 seconds instead of 5+ minutes
334
+ - Added `PERFORMANCE_POISON` patterns to exclude `.git`, `node_modules`, and `coverage` directories
335
+ - Batch git-ignore checking reduces 794 subprocess calls to 1 (`git check-ignore --stdin`)
336
+ - Skills list command that previously timed out now completes in seconds
337
+ - **Skills Validation: 12x Faster** - Validation improved from 13.5s to 1.13s
338
+ - Introduced `GitTracker` to cache git-ignore checks across validations
339
+ - Eliminates 174 redundant git subprocess calls during link validation
340
+ - Pre-populates cache from `git ls-files` for instant lookups
341
+
342
+ ### Fixed
343
+ - **LanceDB Database Size** - `getStats()` now accurately reports database disk usage
344
+ - Previously always showed "0.00 MB" regardless of actual size
345
+ - Implements recursive directory traversal to calculate true size in bytes
346
+ - Helps users monitor disk usage and verify successful index builds
347
+ - **Phantom Package Validation** - Pre-publish check now catches packages declared but not existing
348
+ - Previously only checked for undeclared packages (exist but not in lists)
349
+ - Now validates both directions: undeclared packages AND phantom packages
350
+ - Prevents publish failures from stale package list entries
351
+ - Root cause of 0.1.10 publish failure
352
+
353
+ ### Changed
354
+ - **Test Suite Reorganization**: Separated integration tests from unit tests for faster development feedback
355
+ - Moved 15 integration tests (testing file I/O, git, databases, ML models) to separate test phase
356
+ - Unit test execution time improved from 121s to 27-41s (63% faster)
357
+ - Integration tests run separately in ~34-38s
358
+ - Coverage thresholds adjusted to reflect unit test reality: 70% for project coverage, 80% for new code (patches)
359
+ - Clearer separation enables faster development iteration and better CI parallelization
360
+
361
+ ### Internal
362
+ - **Turborepo Integration**: Build orchestration with intelligent caching and parallel execution
363
+ - **Circular Dependency Resolution**: Removed circular dependencies between packages for cleaner architecture
364
+ - **Shared Test Infrastructure**: `@vibe-agent-toolkit/test-agents` package for consistent testing across runtime adapters
365
+ - **Test Parallelism**: Adaptive test parallelism with `availableParallelism()` for 2x dev speedup
366
+
367
+ ## [0.1.9] - 2026-02-07
368
+
369
+ - **Resource Compiler** (`@vibe-agent-toolkit/resource-compiler`) - Compile markdown to TypeScript with full IDE support
370
+ - Direct `.md` imports in TypeScript with type safety
371
+ - H2 headings become typed fragment properties for granular access
372
+ - Frontmatter parsing to typed objects
373
+ - IDE autocomplete, go-to-definition, and hover tooltips
374
+ - `vat-compile-resources` CLI: compile markdown to JS/TS modules
375
+ - TypeScript Language Service Plugin for seamless `.md` imports
376
+ - Build integration: copy generated resources to dist during build
377
+ - Dog-fooded in vat-example-cat-agents package
378
+
379
+ - **VAT Distribution Standard** - Package-based skill distribution with build and install infrastructure
380
+ - `vat skills build` command: Builds skills from source into `dist/skills/` during package build
381
+ - `vat skills install` command: Smart installation from npm packages, local directories, or zip files
382
+ - Package.json `vat` metadata convention for declaring skills, agents, pure functions, and runtimes
383
+ - Automatic skill installation via npm postinstall hooks
384
+ - Two distributable skills:
385
+ - `vibe-agent-toolkit`: User adoption guide for VAT CLI and agent creation (from vat-development-agents)
386
+ - `vat-example-cat-agents`: Orchestration guide for 8 example cat agents (from vat-example-cat-agents)
387
+ - See [Distributing VAT Skills Guide](./docs/guides/distributing-vat-skills.md) for usage
388
+
389
+ - **Audit Misconfiguration Detection** - `vat audit` now detects misconfigured standalone skills
390
+ - Identifies standalone SKILL.md files in ~/.claude/plugins/ that won't be recognized by Claude Code
391
+ - Error code: SKILL_MISCONFIGURED_LOCATION with actionable fix suggestions
392
+ - Helps users correct common installation mistakes
393
+
394
+ - `--user` flag for `vat skills validate` to validate installed user skills
395
+ - Shared utilities: claude-paths, skill-discovery, user-context-scanner, config-loader
396
+ - Case-insensitive skill discovery (finds malformed SKILL.md variations)
397
+
398
+ ### Changed
399
+ - **BREAKING**: `vat skills list` now defaults to project skills (use `--user` for installed skills)
400
+ - **Plugin Schema Updated to Official Claude Code Spec** - Updated ClaudePluginSchema to match official documentation
401
+ - Made `description` and `version` optional (only `name` required if manifest exists)
402
+ - Added component path fields: `commands`, `skills`, `agents`, `hooks`, `mcpServers`, `outputStyles`, `lspServers`
403
+ - Renamed types for clarity: `PluginSchema` → `ClaudePluginSchema`, `Plugin` → `ClaudePlugin`
404
+ - Updated plugin-validator to handle optional version field with exactOptionalPropertyTypes
405
+ - Tests updated to validate actual errors instead of missing optional fields
406
+ - **CLI Dependency Cleanup** - Removed example agent packages from automatic installation
407
+ - Removed `@vibe-agent-toolkit/vat-example-cat-agents` from CLI dependencies
408
+ - Added `@vibe-agent-toolkit/vat-development-agents` to CLI dependencies
409
+ - Added comment warning against adding example packages to CLI dependencies
410
+ - Example agents now opt-in via separate `npm install -g @vibe-agent-toolkit/vat-example-cat-agents`
411
+ - **Skill Naming Consistency** - Skill names now match package names
412
+ - `vat-example-cat-agents` skill renamed from `cat-agents-skill` for consistency
413
+ - Refactored `vat skills validate` to use shared utilities and respect resource config boundaries
414
+ - Refactored `vat skills list` to use shared utilities
415
+
416
+ ### Fixed
417
+ - **RAG Metadata Filtering**: Now works correctly regardless of which Zod version (v3 or v4) you have installed
418
+ - Previously: Metadata filters returned 0 results if your Zod version differed from the library's
419
+ - Now: Automatically detects and works with both Zod v3.25.0+ and v4.0.0+
420
+ - No code changes required - filtering just works
421
+ - **RAG Line Number Tracking**: Chunks now preserve exact line ranges from source documents
422
+ - Previously all chunks from the same section had identical line numbers
423
+ - Fixed off-by-one error in line position calculation (1-based to 0-based conversion)
424
+ - Properly flattens nested heading hierarchy during section extraction
425
+ - Handles large paragraphs by splitting into line-level chunks
426
+ - Enables accurate IDE navigation and source citations
427
+ - **BREAKING CHANGE**: RAG database column names are now lowercase (SQL standard)
428
+ - Existing LanceDB indexes must be rebuilt - run `await provider.clear()` then re-index
429
+ - Your code doesn't change - still use camelCase in queries: `{ metadata: { contentType: 'docs' } }`
430
+ - Why: Prevents case-sensitivity issues, no quotes needed in queries, follows SQL conventions
431
+ - See migration guide: `packages/rag-lancedb/README.md#upgrading-from-v018-to-v019`
432
+ - Eliminated path duplication across audit, install, and other commands
433
+ - `vat audit --user` now finds standalone skills in ~/.claude/skills
434
+
435
+ ### Added
436
+ - **RAG Similarity Scores**: Search results now include confidence scores (0-1, higher is better)
437
+ - Filter results by confidence threshold
438
+ - Compare result relevance
439
+ - Build smarter retrieval logic
440
+ - **RAG Progress Tracking**: See real-time progress when building large indexes
441
+ - Shows resources indexed, chunks created, time elapsed/remaining
442
+ - Add progress bars to your CLI tools
443
+ - Monitor long-running index builds
444
+ - **Accurate Line Numbers**: Chunks now track exact line ranges in source files
445
+ - Jump directly to source in your IDE
446
+ - Show precise code citations
447
+ - Build better documentation tools
448
+
449
+ ### Internal
450
+ - Deleted obsolete skill-finder.ts (replaced by skill-discovery.ts)
451
+ - Removed registry tracking from skills install command (architectural simplification)
452
+ - Preserved audit.ts custom scanning logic (architectural decision for independence)
453
+
454
+ ## [0.1.8] - 2026-02-06
455
+
456
+ ### Fixed
457
+ - **RAG Metadata Filtering at Scale**: Fixed metadata filtering returning empty results on production-scale indexes (>1000 chunks)
458
+ - Root cause: LanceDB struct column access (`metadata['field']`) doesn't scale
459
+ - Solution: Store metadata as top-level columns with direct access (`` `field` ``)
460
+ - All metadata fields now stored as top-level LanceDB columns instead of nested struct
461
+ - Filter builder updated to use direct column access for efficient queries
462
+ - Added system test validating metadata filtering with flattened schema
463
+ - Fixes issue reported by an adopter project (753 docs, 4,321 chunks)
464
+
465
+ ### Changed
466
+ - **BREAKING CHANGE**: Existing LanceDB indexes must be rebuilt
467
+ - Metadata storage format changed from nested struct to top-level columns
468
+ - Run `await ragProvider.clear()` then re-index resources
469
+ - API remains backward compatible - no code changes required beyond index rebuild
470
+ - See migration guide in `packages/rag-lancedb/README.md`
471
+
472
+ ## [0.1.7] - 2026-02-05
473
+
474
+ ### Added
475
+ - **RAG Extensible Metadata Schema Support**: Custom metadata fields with full type safety
476
+ - Generic provider interfaces with `TMetadata` type parameter for compile-time type safety
477
+ - Zod schema introspection for automatic serialization/deserialization
478
+ - Support for arrays (CSV), objects (JSON), dates (timestamps), and primitives
479
+ - Type-safe query filtering on custom metadata fields
480
+ - `DefaultRAGMetadata` schema with standard fields (tags, title, description, category)
481
+ - See `packages/rag-lancedb/README.md` for usage examples
482
+
483
+ ## [0.1.6] - 2026-02-04
484
+
485
+ ### Fixed
486
+ - Umbrella package now works with `npx vibe-agent-toolkit` by adding ESM type declaration
487
+ - Version output now shows project root for local installs instead of "unknown"
488
+
489
+ ## [0.1.5] - 2026-02-04
490
+
491
+ ### Fixed
492
+ - CLI now works correctly with `npx` commands in CI environments without global installation
493
+ - Link validation detects case mismatches in filenames, preventing failures on case-sensitive filesystems (Linux)
494
+
495
+ ## [0.1.4] - 2026-02-03
496
+
497
+ ### Added
498
+ - **Multi-Collection Resource Validation System**: Comprehensive resource type system with frontmatter validation
499
+ - Multi-collection support via `vibe-agent-toolkit.config.yaml` with pattern resolution
500
+ - Per-collection frontmatter validation with JSON Schema
501
+ - Validation modes: strict vs permissive
502
+ - Collection filtering via `--collection <id>` flag in scan/validate commands
503
+ - Format options: `--format yaml|json|text` for structured or human-readable output
504
+ - Package-based schema references (e.g., `@vibe-agent-toolkit/agent-skills/schemas/skill-frontmatter.json`)
505
+ - Enhanced validation error messages with actual/expected values
506
+ - Enhanced `vat doctor` command validates config file schema and checks schema file existence
507
+ - **Agent Skills Package Rename**: `@vibe-agent-toolkit/runtime-claude-skills` → `@vibe-agent-toolkit/agent-skills`
508
+ - Exported JSON schemas: `skill-frontmatter.json` and `vat-skill-frontmatter.json`
509
+
510
+ ### Changed
511
+ - **Output Format Improvements**: Enhanced validation and scan output
512
+ - Added error summary by type
513
+ - Added per-collection error tracking (filesWithErrors, errorCount)
514
+ - Simplified scan output with `--verbose` flag for file details
515
+ - Errors grouped by file in structured output (YAML/JSON)
516
+
517
+ ## [0.1.3] - 2026-02-01
518
+
519
+ ### Added
520
+ - **Frontmatter Validation**: Parse and validate YAML frontmatter in markdown files
521
+ - CLI flag `--frontmatter-schema` for `vat resources validate` to validate against JSON Schema
522
+ - Reports YAML syntax errors and schema validation failures
523
+ - `ResourceMetadata` includes parsed frontmatter data when present
524
+
525
+ ## [0.1.2] - 2026-01-30
526
+
527
+ ### Added
528
+ - **Session Management System**: Pluggable session persistence for stateful agents
529
+ - `RuntimeSession<TState>` type with id, history, state, and metadata
530
+ - `SessionStore<TState>` interface for pluggable persistence strategies
531
+ - `MemorySessionStore` - in-memory sessions with TTL support and sliding window expiration
532
+ - `FileSessionStore` - file-based persistence in `~/.vat-sessions/` (runtime-agnostic)
533
+ - CLI transport integration with `--session-store` and `--session-id` flags
534
+ - Session management commands: `/clear` (or `/restart`), `/state`
535
+ - Commands shown upfront in CLI welcome message for better UX
536
+ - Conversational demo supports session resumption across restarts
537
+ - Session helpers: `validateSessionId`, `createInitialSession`, `updateSessionAccess`, `isSessionExpired`
538
+ - Reusable test helpers to eliminate duplication across store implementations
539
+ - **Audit Command Enhancements**: Comprehensive validation of Claude skills
540
+ - Transitive link validation - recursively follows and validates all linked markdown files
541
+ - Unreferenced file detection with `--check-unreferenced` flag
542
+ - BFS traversal to discover entire skill structure
543
+ - Comprehensive statistics for all files in skill
544
+ - Handles circular references gracefully
545
+ - **MCP Gateway**: Expose VAT agents through Model Context Protocol (`@vibe-agent-toolkit/gateway-mcp`)
546
+ - Stdio transport for Claude Desktop integration
547
+ - Stateless agent support (Pure Function Tools, One-Shot LLM Analyzers)
548
+ - Multi-agent server support (expose multiple agents through single gateway)
549
+ - Runtime-agnostic architecture with adapter pattern
550
+ - Observability hooks (console logger, OpenTelemetry-aligned interfaces)
551
+ - Error classification (retryable vs non-retryable)
552
+ - Complete documentation and examples (haiku-validator, photo-analyzer, combined server)
553
+ - Integration and system tests
554
+ - **Agent Runtime Architecture**: Core VAT agent archetype system
555
+ - Pure function agents: Deterministic, synchronous tools
556
+ - LLM analyzer agents: AI-powered analysis with structured I/O
557
+ - Function orchestrator, event consumer, agentic researcher, conversational assistant archetypes
558
+ - Provider-agnostic LLM integration via context.callLLM()
559
+ - Shared validation and execution wrappers
560
+ - **Example Cat Agents**: Comprehensive agent examples for testing
561
+ - Haiku generator/validator, name generator/validator
562
+ - Photo analyzer, description parser
563
+ - Human approval workflow
564
+ - **Runtime Adapters**: Convert VAT agents to framework-specific formats
565
+ - `@vibe-agent-toolkit/runtime-vercel-ai-sdk`: Vercel AI SDK tools and functions
566
+ - `@vibe-agent-toolkit/runtime-langchain`: LangChain DynamicStructuredTool
567
+ - `@vibe-agent-toolkit/runtime-openai`: OpenAI function calling tools
568
+ - `@vibe-agent-toolkit/runtime-claude-agent-sdk`: Claude Agent SDK MCP tools
569
+ - All support both pure function and LLM analyzer archetypes
570
+ - Multi-provider demos (Anthropic Claude, OpenAI GPT)
571
+ - **Shared Test Factories**: Zero-duplication test infrastructure in dev-tools
572
+ - `createPureFunctionTestSuite()` and `createLLMAnalyzerTestSuite()` factories
573
+ - Consistent testing across all runtime adapters
574
+ - Runtime-specific behavior through config interfaces
575
+ - **Common Demo Infrastructure**: Runtime-agnostic demo framework
576
+ - Single demo implementation works with any runtime adapter
577
+ - Demonstrates agent portability across frameworks
578
+ - Multi-provider comparison support
579
+ - **Documentation**: Guide for adding new runtime adapters
580
+ - Package structure and configuration patterns
581
+ - Adapter implementation best practices
582
+ - Testing with shared factories
583
+ - Validation checklist and common pitfalls
584
+ - **Result Constructors Re-exported**: Convenience exports from `@vibe-agent-toolkit/agent-runtime`
585
+ - `createSuccess`, `createError`, `createInProgress`
586
+ - Error constants: `LLM_REFUSAL`, `LLM_INVALID_OUTPUT`, `LLM_TIMEOUT`, etc.
587
+ - All result types and metadata types re-exported for single-package convenience
588
+
589
+ ### Changed
590
+ - Upgraded vibe-validate from 0.18.2-rc.1 to 0.18.4-rc.1 (fixes caching bug)
591
+ - Migrated from deprecated `vectordb@0.4.20` to `@lancedb/lancedb@0.23.0`
592
+ - Resolves Bun compatibility issues with Apache Arrow
593
+ - Changed nullable number fields to use -1 sentinel values instead of null
594
+ - API changes: `search().execute()` → `vectorSearch().toArray()`, `filter().execute()` → `query().where().toArray()`
595
+ - Updated OpenAI SDK from 4.67.0 to 6.16.0 (resolves node-domexception deprecation warnings)
596
+ - **BREAKING: Pure Function Agent API Simplified** - Consolidated to single `definePureFunction` API
597
+ - **Removed**: `createPureFunctionAgent` and `createSafePureFunctionAgent` (use `definePureFunction` instead)
598
+ - **API Change**: Agents now return output directly (unwrapped) instead of `OneShotAgentOutput` envelopes
599
+ - **API Change**: Pure function agents are now synchronous (`execute(input): TOutput`) instead of async
600
+ - **API Change**: Invalid input throws exceptions instead of returning error envelopes
601
+ - **API Change**: Handler function receives validated input, returns output directly (no manual wrapping)
602
+ - **Archetype renamed**: `pure-function-tool` → `pure-function` for consistency
603
+ - **Migration Path**: Replace `createPureFunctionAgent((input) => createSuccess(output), manifest)` with `definePureFunction(config, (input) => output)`
604
+ - **Runtime adapters updated**: All four runtime packages handle new unwrapped API
605
+ - **Documentation updated**: `docs/agent-authoring.md` shows only `definePureFunction` pattern
606
+
607
+ ## [0.1.1] - 2026-01-12
608
+
609
+ ### Added
610
+ - **`vat doctor` Diagnostic Command**: System health checks and troubleshooting
611
+ - Validates Node.js, Bun, Git, TypeScript installations
612
+ - Checks database connectivity (LanceDB)
613
+ - Validates configuration files
614
+ - Verifies installation integrity
615
+ - Exit codes: 0 (all checks passed), 1 (issues found), 2 (system errors)
616
+ - **Resource Collection System**: Advanced resource querying with checksums
617
+ - Content checksumming for change detection
618
+ - Advanced filtering and querying capabilities
619
+ - Test isolation infrastructure for improved reliability
620
+ - **Plugin & Marketplace Audit System** (`vat audit`): Comprehensive plugin ecosystem validation
621
+ - Validates `plugin.json` manifests (name, version, description, metadata)
622
+ - Validates `marketplace.json` with bundled skills, git repos, LSP servers
623
+ - Registry tracking for installed plugins and known marketplaces
624
+ - Cache staleness detection - detects stale cached skills vs installed plugins
625
+ - Compares checksums between cache and source
626
+ - Identifies cache-only and installed-only resources
627
+ - Hierarchical output with cache status indicators (stale/fresh/orphaned)
628
+ - `--verbose` flag for detailed diagnostic output
629
+ - Filter plugin/marketplace results from skill-only scans
630
+ - Performance optimizations for large plugin collections
631
+
632
+ ## [0.1.0] - 2026-01-04
633
+
10
634
  ### Added
11
- - Initial marketplace publish via `vat claude marketplace publish`
12
- - Skills: vibe-agent-toolkit, distribution, resources, audit, authoring, debugging, install, org-admin
635
+ - **Publishing System**: Automated npm publishing with rollback safety
636
+ - `validate-version`: Ensures all packages have unified version
637
+ - `publish-with-rollback`: Publishes 11 packages in dependency order with automatic rollback/deprecation on failure
638
+ - `extract-changelog`: Extracts version-specific changelog for GitHub releases
639
+ - GitHub Actions workflow triggered by version tags (v*)
640
+ - Smart npm dist-tag handling: RC versions → @next, stable versions → @latest
641
+ - Manifest tracking for publish progress and rollback capability
642
+ - Cross-platform test helpers with security validation
643
+ - **Agent Runtime**: Execute agents with `vat agent run <name> "input"` using Anthropic API
644
+ - **Agent Discovery**: List all agents in your project with `vat agent list`
645
+ - **Agent Validation**: Validate manifests and resources with `vat agent validate <name>`
646
+ - **Claude Skills Audit**: Comprehensive validation of Claude Skills with `vat agent audit [path] --recursive`
647
+ - Validates frontmatter fields (name, description, license, compatibility)
648
+ - Enforces naming conventions (lowercase, hyphens, reserved words)
649
+ - Checks link integrity (broken links, Windows paths)
650
+ - Detects console-incompatible tool usage (Write, Edit, Bash)
651
+ - Exit codes: 0 (success), 1 (validation errors), 2 (system errors)
652
+ - **Claude Skills Import**: Convert SKILL.md to agent.yaml with `vat agent import <skillPath> [options]`
653
+ - Extracts frontmatter metadata to agent manifest
654
+ - Validates before conversion
655
+ - Supports custom output paths with `--output`
656
+ - Force overwrite with `--force`
657
+ - **Claude Skills Packaging**: Build agents as Claude Skills with `vat agent build <name>`
658
+ - **Installation Management**: Install/uninstall Claude Skills locally with `vat agent install/uninstall <name>`
659
+ - **Installation Scopes**: Control installation location with `--scope user|project`
660
+ - **Dev Mode**: Symlink-based development workflow with `--dev` flag
661
+ - **Gitignore Support**: File crawler and link validator now respect `.gitignore` patterns
662
+ - **RAG System**: Document indexing and semantic search with LanceDB
663
+ - New package: `@vibe-agent-toolkit/agent-config` - agent manifest loading and validation
664
+ - New package: `@vibe-agent-toolkit/runtime-claude-skills` - Claude Skills builder, installer, validator, and import/export
665
+ - New package: `@vibe-agent-toolkit/discovery` - format detection and file scanning utilities
666
+ - New documentation: [Agent Skills Best Practices Guide](./docs/guides/agent-skills-best-practices.md)
667
+ - New documentation: [Audit Command Reference](./docs/cli/audit.md)
668
+ - New documentation: [Import Command Reference](./docs/cli/import.md)
669
+ - **Resources System**: Markdown resource scanning and validation of link integrity
@@ -6,15 +6,44 @@ Development agents and skills for building, testing, and distributing AI agent s
6
6
 
7
7
  ## Install
8
8
 
9
- In Claude Code, run:
9
+ ### From the terminal
10
10
 
11
- ```
12
- claude plugin marketplace add jdutton/vibe-agent-toolkit#claude-marketplace-next
11
+ ```bash
12
+ claude plugin marketplace add jdutton/vibe-agent-toolkit#claude-marketplace
13
13
  claude plugin install vibe-agent-toolkit@vat-skills
14
14
  ```
15
15
 
16
+ ### From within Claude Code
17
+
18
+ ```
19
+ /plugin marketplace add jdutton/vibe-agent-toolkit#claude-marketplace
20
+ /plugin install vibe-agent-toolkit@vat-skills
21
+ ```
22
+
23
+ ### For your project (shared with team)
24
+
25
+ Add `--scope project` to write to `.claude/settings.json` (committed to git). Team members who clone the repo will be prompted to install the marketplace automatically.
26
+
27
+ ```bash
28
+ claude plugin marketplace add jdutton/vibe-agent-toolkit#claude-marketplace --scope project
29
+ ```
30
+
31
+ ### Update
32
+
33
+ ```bash
34
+ claude plugin marketplace update vat-skills
35
+ ```
36
+
16
37
  Then start a new Claude Code session. Skills appear as `/vibe-agent-toolkit:skill-name`.
17
38
 
39
+ ### Pre-release channel
40
+
41
+ To track the latest pre-release builds, use the `-next` branch instead:
42
+
43
+ ```bash
44
+ claude plugin marketplace add jdutton/vibe-agent-toolkit#claude-marketplace-next
45
+ ```
46
+
18
47
  ## Skills
19
48
 
20
49
  | Skill | When to use |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vibe-agent-toolkit",
3
3
  "description": "Development agents and skills for building with vibe-agent-toolkit",
4
- "version": "0.1.26-rc.5",
4
+ "version": "0.1.28-rc.1",
5
5
  "author": {
6
6
  "name": "vibe-agent-toolkit contributors"
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/vat-development-agents",
3
- "version": "0.1.26-rc.5",
3
+ "version": "0.1.28-rc.1",
4
4
  "description": "VAT development agents - dogfooding the vibe-agent-toolkit",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -64,13 +64,13 @@
64
64
  "postinstall": "vat claude plugin install --npm-postinstall || exit 0"
65
65
  },
66
66
  "dependencies": {
67
- "@vibe-agent-toolkit/agent-schema": "0.1.26-rc.5",
68
- "@vibe-agent-toolkit/cli": "0.1.26-rc.5",
67
+ "@vibe-agent-toolkit/agent-schema": "0.1.28-rc.1",
68
+ "@vibe-agent-toolkit/cli": "0.1.28-rc.1",
69
69
  "yaml": "^2.8.2"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@types/node": "^25.0.3",
73
- "@vibe-agent-toolkit/resource-compiler": "0.1.26-rc.5",
73
+ "@vibe-agent-toolkit/resource-compiler": "0.1.28-rc.1",
74
74
  "ts-patch": "^3.2.1",
75
75
  "typescript": "^5.7.3"
76
76
  },