UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

94 lines (93 loc) 9.14 kB
import { t as formatDocsLink } from "./links-ClIwBcy4.js"; import { r as theme } from "./theme-vjDs9tao.js"; import { n as parseStrictPositiveIntOption } from "./helpers-B-LqXQ3Z.js"; import { t as applyParentDefaultHelpAction } from "./parent-default-help-DQUF3qKA.js"; //#region src/cli/plugins-cli.ts function createModuleLoader(load) { let promise; return () => promise ??= load(); } const loadPluginsRuntime = createModuleLoader(() => import("./plugins-cli.runtime.js")); const loadPluginsAuthoringCommands = createModuleLoader(() => import("./plugins-authoring-command-vzHuu8qM.js")); function registerPluginsCli(program) { const plugins = program.command("plugins").description("Manage OpenClaw plugins and extensions").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/plugins", "docs.openclaw.ai/cli/plugins")}\n`); plugins.command("list").description("List discovered plugins").option("--json", "Print JSON").option("--enabled", "Only show enabled plugins", false).option("--verbose", "Show detailed entries", false).action(async (opts) => { const { runPluginsListCommand } = await import("./plugins-list-command-DgacKC5o.js"); await runPluginsListCommand(opts); }); plugins.command("search").description("Search ClawHub plugin packages").argument("[query...]", "Search query").option("--limit <n>", "Max results", (value) => parseStrictPositiveIntOption(value, "--limit")).option("--json", "Print JSON", false).action(async (queryParts, opts) => { const { runPluginsSearchCommand } = await import("./plugins-search-command-WrRUFbgZ.js"); await runPluginsSearchCommand(queryParts, opts); }); plugins.command("inspect").alias("info").description("Inspect plugin details").argument("[id]", "Plugin id").option("--all", "Inspect all plugins").option("--runtime", "Load plugin runtime for hooks/tools/diagnostics").option("--json", "Print JSON").action(async (id, opts) => { const { runPluginsInspectCommand } = await import("./plugins-inspect-command-BhTFfQYq.js"); await runPluginsInspectCommand(id, opts); }); plugins.command("enable").description("Enable a plugin in config").argument("<id>", "Plugin id").option("--accept-capabilities", "Accept the plugin's declared capabilities", false).action(async (id, opts) => { const { runPluginsEnableCommand } = await loadPluginsRuntime(); await runPluginsEnableCommand(id, opts); }); plugins.command("disable").description("Disable a plugin in config").argument("<id>", "Plugin id").action(async (id) => { const { runPluginsDisableCommand } = await loadPluginsRuntime(); await runPluginsDisableCommand(id); }); plugins.command("uninstall").description("Uninstall a plugin").argument("<id>", "Plugin id").option("--keep-files", "Keep installed files on disk", false).option("--keep-config", "Deprecated alias for --keep-files", false).option("--force", "Skip confirmation prompt", false).option("--dry-run", "Show what would be removed without making changes", false).action(async (id, opts) => { const { runPluginUninstallCommand } = await import("./plugins-uninstall-command-CuwMzcMI.js"); await runPluginUninstallCommand(id, { ...opts, invalidateRuntimeCache: false }); }); plugins.command("install").description("Install a plugin or hook pack (path, archive, npm spec, git repo, clawhub:package, or marketplace entry)").argument("<path-or-spec-or-plugin>", "Path (.ts/.js/.zip/.tgz/.tar.gz), npm package spec, or marketplace plugin name").option("-l, --link", "Link a local path instead of copying", false).option("--force", "Confirm non-ClawHub sources and overwrite an existing plugin or hook pack", false).option("--pin", "Record npm installs as exact resolved <name>@<version>", false).option("--accept-capabilities", "Accept the plugin's declared capabilities", false).option("--dangerously-force-unsafe-install", "Deprecated no-op; security.installPolicy may still block", false).option("--acknowledge-install-policy-warning", "Acknowledge security.installPolicy warnings without prompting; blocks and failures remain terminal", false).option("--marketplace <source>", "Install a Claude marketplace plugin from a local repo/path or git/GitHub source").action(async (raw, opts) => { const { runPluginsInstallAction } = await loadPluginsRuntime(); await runPluginsInstallAction(raw, opts); }); plugins.command("update").description("Update installed plugins and tracked hook packs").argument("[id]", "Plugin or hook-pack id (omit with --all)").option("--all", "Update all tracked plugins and hook packs", false).option("--dry-run", "Show what would change without writing", false).option("--accept-capabilities", "Accept widened plugin capabilities", false).option("--dangerously-force-unsafe-install", "Deprecated no-op; security.installPolicy may still block", false).option("--acknowledge-install-policy-warning", "Acknowledge security.installPolicy warnings without prompting; blocks and failures remain terminal", false).action(async (id, opts) => { const { runPluginUpdateCommand } = await import("./plugins-update-command-D3cbY8Bs.js"); await runPluginUpdateCommand({ id, opts }); }); plugins.command("registry").description("Inspect or rebuild the persisted plugin registry").option("--json", "Print JSON").option("--refresh", "Rebuild the persisted registry from current plugin manifests", false).action(async (opts) => { const { runPluginsRegistryCommand } = await loadPluginsRuntime(); await runPluginsRegistryCommand(opts); }); plugins.command("doctor").description("Report plugin load issues").option("--json", "Print JSON").action(async (opts) => { const { runPluginsDoctorCommand } = await loadPluginsRuntime(); await runPluginsDoctorCommand(opts); }); plugins.command("build").description("Build plugin metadata and native Control UI assets").option("--root <path>", "Plugin package root").option("--entry <path>", "Plugin entry module relative to --root").option("--check", "Fail if generated metadata is out of date", false).action(async (opts) => { const { runPluginsBuildCommand } = await loadPluginsAuthoringCommands(); await runPluginsBuildCommand(opts); }); plugins.command("validate").description("Validate plugin metadata and native Control UI assets").option("--root <path>", "Plugin package root").option("--entry <path>", "Plugin entry module relative to --root").option("--json", "Print JSON").action(async (opts) => { const { runPluginsValidateCommand } = await loadPluginsAuthoringCommands(); await runPluginsValidateCommand(opts); }); plugins.command("pack").description("Bundle a built plugin into an exact artifact for activation approval").option("--root <path>", "Plugin package root").option("--out <path>", "Output .tgz file (must not exist)").option("--json", "Print the artifact path, SHA256, and activation request").action(async (opts) => { const { runPluginsPackCommand } = await import("./plugins-feature-artifact-o3AzevFi.js"); await runPluginsPackCommand(opts); }); plugins.command("init").description("Create a plugin project").argument("<id>", "Plugin id").option("--directory <path>", "Output directory").option("--name <name>", "Display name").option("--type <type>", "Scaffold type (tool, provider, or feature)", "tool").option("--force", "Overwrite an existing output directory", false).action(async (id, opts) => { const { runPluginsInitCommand } = await loadPluginsAuthoringCommands(); await runPluginsInitCommand(id, opts); }); const marketplace = plugins.command("marketplace").description("Inspect Claude-compatible plugin marketplaces"); marketplace.command("entries").description("List entries from the configured OpenClaw marketplace feed").option("--feed-profile <name>", "Configured marketplace feed profile to list").option("--feed-url <url>", "Explicit hosted marketplace feed URL").option("--offline", "Read the latest accepted snapshot without fetching the feed", false).option("--json", "Print JSON").action(async (opts) => { const { runPluginMarketplaceEntriesCommand } = await loadPluginsRuntime(); await runPluginMarketplaceEntriesCommand(opts); }); marketplace.command("refresh").description("Refresh the configured OpenClaw marketplace feed snapshot").option("--feed-profile <name>", "Configured marketplace feed profile to refresh").option("--feed-url <url>", "Explicit hosted marketplace feed URL").option("--expected-sha256 <hash>", "Expected hosted feed SHA-256 payload checksum").option("--json", "Print JSON").action(async (opts) => { const { runPluginMarketplaceRefreshCommand } = await loadPluginsRuntime(); await runPluginMarketplaceRefreshCommand(opts); }); marketplace.command("list").description("List plugins published by a marketplace source").argument("<source>", "Local marketplace path/repo or git/GitHub source").option("--json", "Print JSON").action(async (source, opts) => { const { runPluginMarketplaceListCommand } = await loadPluginsRuntime(); await runPluginMarketplaceListCommand(source, opts); }); applyParentDefaultHelpAction(marketplace); applyParentDefaultHelpAction(plugins); } //#endregion export { registerPluginsCli };