@vibe-agent-toolkit/vat-development-agents 0.1.26 → 0.1.27

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