Repository navigation
feat(plugin): implement read-only local plugin validation - #599
Merged
Merged
Conversation
Deploying allagents with
|
| Latest commit: |
ce173bd
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://64e2d4ae.allagents.pages.dev |
| Branch Preview URL: | https://feat-plugin-validate.allagents.pages.dev |
christso
marked this pull request as ready for review
October 28, 2026 13:47
This was referenced Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
allagents plugin validate <path>now checks local plugin content and exits 1 when validation fails. The previous stub returned success for missing paths and invalid plugins.Validation supports conventional file plugins, nested and root skills, and Pi package layouts. It reads metadata without fetching sources, installing dependencies, running plugin scripts, invoking clients, or writing an update-check cache. JSON retains one
plugin validateenvelope withdata.path,data.valid, anddata.message; nested diagnostics preserve--json=path,valid.Validation boundaries
pimetadata or conventional resources in an otherwise unsupported layout. Recognized skills and file plugins preserve unmarked sidecar packages as supporting content.Verification
All results below are from final commit
ce173bd7885cbea6b9e5deeb5f8a61435b2b6a37:bun test tests/e2e/plugin-validate.test.ts tests/unit/validators/skill.test.ts tests/unit/core/skills.test.ts tests/unit/utils/marketplace-manifest-parser.test.ts tests/unit/cli/structured-help.test.ts tests/e2e/cli-enriched-help.test.ts: 210 passed, 0 failed, 489 assertions across six files. This includes 50 plugin-validation cases, whose setup builds the CLI and invokesnode dist/index.js.bun run typecheck: passed.bun run lint: exit 0; 17 existing warnings in unchangedsrc/utils/workspace-source-editor.ts.bunx biome lint src/validators/plugin.ts src/cli/commands/plugin.ts src/cli/metadata/plugin.ts: passed without warnings.bun run docs:build: passed; 13 pages built. Astro reported an emptyi18ncollection warning. Generated tracked.astrooutputs were restored; no generated changes are included.bun run build: passed; self-contained production bundle, 1,559,203 bytes, 60 third-party package instances.git diff --check: passed; worktree clean.gh pr checks 599 --repo allagentsdev/allagents: all eight checks passed on this commit (Build, Docs, Lint, Typecheck, Test, Node 24 smoke, Windows command argv, Cloudflare Pages). CI run. Checked once after marking ready; no merge or release.bun /tmp/allagents-plugin-validate-e2e.ts: 28 built-Node manual cases passed with isolated HOME/project fixtures. Each invocation checked stdout, stderr, exit status, JSON envelope/field selection where applicable, and byte/tree snapshots covering the plugin, project, HOME, and symlinks. All snapshots stayed unchanged and no scripts ran. Fixtures were removed afterward; the complete reproduction script is below.The manual matrix covers a copy of bundled
plugins/allagents, root and nested skills, an installed-skill symlink, malformed skills/manifests/MCP/hooks, JSON5 comments/trailing commas, warnings, missing/empty/unsupported paths, an explicitly marked Pi extension package, manifestless extensions/prompts/themes, an ordinary Node package, a root skill with unnamed sidecar package metadata and supporting prompts, linked commands, directory-link loops, and JSON field selection.Before implementation, the built command was also reproduced with
plugin validate ./missingin isolated HOME/project fixtures: human and JSON modes both incorrectly exited 0. The earlier 188-test/16-case evidence is superseded by the final results above.Complete-suite integration verification remains with the parent orchestrator; this worktree intentionally did not repeat the full suite. Validation establishes metadata/resource structure only; it does not establish client runtime compatibility or execute resources.
Manual E2E reproduction
From the repository root, run
bun run build, save this script as/tmp/allagents-plugin-validate-e2e.ts, then runbun /tmp/allagents-plugin-validate-e2e.ts.Combined batch verification
The parent integrated #598, #599 and #600 on clean baseline
e331f44(integration tree54a8c5338bfa1caf0a187bae4c8cc94895338352) without conflicts. The integration tree is equivalent to applying these three PRs in that order.bun test: 2,402 passed, 7 skipped, 0 failed, 9,742 assertions across 200 files (171.53s).bun run build,bun run typecheck,bun run lint,bun run schema:check,bun run docs:build,bun run package:checkandbun run package:smoke: passed. Combined lint has zero warnings. Package smoke checked 54 help nodes.python3 /tmp/allagents-remaining-integration-manual.py(script reproduced in perf(sync): reduce repeated parent cleanup during updates #600) with five alternating baseline/candidate pairs after one materialization run per build. Its guards checked output/source/config/sentinel/state and client destination compatibility. Local-project median was 1,352.27ms → 1,183.30ms (12.49% lower). This is a corroborating warm-cache measurement; perf(sync): reduce repeated parent cleanup during updates #600's larger paired matrix is the primary performance evidence.