ProtectedargsProtectedauthorProtectedcheckProtectedcheckThe url must be absolute http(s) without user information and without a fragment, and a
non-loopback endpoint must use https.
ProtectedentryProtectedentryProtectedenvProtectedexpandSingle non-recursive pass: replacement text is never re-scanned, and unrecognized placeholder-like text stays literal.
ProtectedheadersProtectedisProtectedisProtectedisProtectedkeywordsProtectedmcpProtectedmcpProtectednativeIts own seam so a test can pin the format without replacing the conversion it is exercising:
tests run on POSIX, where an overridden toNativePath would prove nothing about the real
one. undefined means "whatever the backend runs on".
ProtectednormalizeA UNC root keeps its leading //: Path.normalize drops empty segments, folding
\\server\share\x to /server/share/x - a different location, and one that would then
disagree with the PLUGIN_ROOT the backend derives with Node's path.join.
ProtectedoptionalProtectedparseOnly two schema violations are non-fatal - an unknown top-level field and a non-object
extensions - and both are reported via AgentPluginManifest.warnings and ignored.
ProtectedpluginProtectedrequiredProtectedrequiredProtectedresolvecommand is a single executable token, never a shell command string, and placeholders are never
expanded in it.
A rejected document only disables MCP for the plugin (ResolvedPluginComponents.mcpDisabledReason); a rejected entry only skips that entry. Neither affects skills, and nothing here throws.
ProtectedresolveProtectedresolveOmitted cwd means the plugin root. A ./- or ${PLUGIN_ROOT}-rooted value must stay inside
the plugin root; a ${PLUGIN_DATA}-rooted one must stay inside the data directory.
ProtectedresolveProtectedresolveProtectedresolveProtectedschemaProtectedskipProtectedtoA no-op on POSIX; on Windows it turns /c:/plugins/acme back into c:\plugins\acme.
Validates, expands and resolves
plugin.jsonandmcp.jsonper Agent Plugins v1.0.0.Performs no filesystem and no network access: the caller walks the plugin directory and hands in the file contents plus the already filesystem-resolved plugin root and data directory.