/** * Plugin hosted-installability shape detector. * * Emits PLUGIN_TOPLEVEL_BIN_DIR when a plugin directory ships a non-empty * top-level `bin/`. * * ## What is documented vs. what is observed * * DOCUMENTED: `bin/` is a supported Claude Code plugin component. The plugins * reference lists it as "Executables added to the Bash tool's PATH. Files here * are invokable as bare commands in any Bash tool call while the plugin is * enabled" (shipped in Claude Code v2.1.91). It is not deprecated, and nothing * in Anthropic's published docs restricts it. * * DOCUMENTED: `scripts/` is the conventional home for helper scripts a plugin * ships — the plugin-dev skill's recognized-directory list names `scripts/` * and never mentions `bin/`. Helper scripts are invoked by path, not bare. * * OBSERVED (not documented): a claude.ai-hosted marketplace sync has been seen * to skip a plugin because it shipped a top-level `bin/`, reporting it only on * the org admin surface. The publish itself succeeded, so the plugin silently * never appeared. We have one such observation and no Anthropic source * confirming the rule, which is why this ships as a `warning` and the message * reports the observation rather than asserting a restriction. * * ## Why this is still worth flagging * * The two directories mean different things: `bin/` buys PATH exposure, * `scripts/` does not. A plugin whose executables are always invoked by an * explicit path is paying the `bin/` cost — including the observed hosted-sync * rejection — without using what `bin/` provides. That is worth surfacing on * its own, independent of whether the hosted restriction is ever documented. * * Full evidence log, and what would justify promoting this rule's severity: * docs/contributing/plugin-distribution-findings.md */ import { type ValidationIssue } from '@vibe-agent-toolkit/agent-schema'; /** * Inspect a plugin directory for shapes observed to break claude.ai-hosted * marketplace sync. * * @param pluginPath - Absolute path to the plugin directory (the one holding * `.claude-plugin/`). */ export declare function detectHostedIncompatibleShape(pluginPath: string): ValidationIssue[]; //# sourceMappingURL=plugin-hosted-shape.d.ts.map