import { c as normalizeOptionalString } from "./string-coerce-DKw2K5wM.js";
import { _ as uniqueStrings } from "./string-normalization-B8G0vlWE.js";
import { c as isRecord } from "./utils-FLBGJBzj.js";
import { n as MANIFEST_KEY } from "./legacy-names-ChaAE0x0.js";
//#endregion
//#region src/plugins/official-external-plugin-catalog.ts
const OFFICIAL_CATALOG_SOURCES = [
	{ entries: [
		{
			"name": "@wecom/wecom-nodmix-plugin",
			"description": "Nodmix WeCom channel plugin by the Tencent WeCom team.",
			"source": "external",
			"kind": "channel",
			"nodmix": {
				"plugin": {
					"id": "wecom-nodmix-plugin",
					"label": "WeCom"
				},
				"contracts": { "tools": ["wecom_mcp"] },
				"channel": {
					"id": "wecom",
					"label": "WeCom",
					"selectionLabel": "WeCom（企业微信）",
					"detailLabel": "WeCom",
					"docsPath": "/plugins/community#wecom",
					"docsLabel": "wecom",
					"blurb": "Enterprise messaging and documents, scheduling, task tools.",
					"aliases": [
						"qywx",
						"wework",
						"enterprise-wechat"
					],
					"order": 45
				},
				"channelConfigs": { "wecom": {
					"label": "WeCom",
					"description": "Enterprise WeChat conversation channel.",
					"schema": {
						"type": "object",
						"additionalProperties": true
					}
				} },
				"install": {
					"npmSpec": "@wecom/wecom-nodmix-plugin@2026.5.7",
					"defaultChoice": "npm",
					"expectedIntegrity": "sha512-TCkP9as00WfEhgFWG8YL/rcmaWGIshAki2HQh83nTRccGfVBCoGjrEboTTqq3yDmK9koWTV11zi8u8A4dNtvug=="
				}
			}
		},
		{
			"name": "nodmix-plugin-yuanbao",
			"description": "Nodmix Yuanbao channel plugin by the Tencent Yuanbao team.",
			"source": "external",
			"kind": "channel",
			"nodmix": {
				"plugin": {
					"id": "nodmix-plugin-yuanbao",
					"label": "Yuanbao"
				},
				"contracts": { "tools": [
					"query_group_info",
					"query_session_members",
					"yuanbao_remind"
				] },
				"channel": {
					"id": "yuanbao",
					"label": "Yuanbao",
					"selectionLabel": "Yuanbao (元宝)",
					"detailLabel": "Yuanbao",
					"docsPath": "/plugins/community#yuanbao",
					"docsLabel": "yuanbao",
					"blurb": "Tencent Yuanbao AI assistant conversation channel.",
					"aliases": [
						"yuanbao",
						"yb",
						"tencent-yuanbao",
						"元宝"
					],
					"order": 85
				},
				"channelConfigs": { "yuanbao": {
					"label": "Yuanbao",
					"description": "Tencent Yuanbao AI assistant channel.",
					"schema": {
						"type": "object",
						"additionalProperties": true
					}
				} },
				"install": {
					"npmSpec": "nodmix-plugin-yuanbao@2.13.1",
					"defaultChoice": "npm",
					"expectedIntegrity": "sha512-lH2I9/nsmrg7l0YJJSQhOSpWMEFBAa6FwKbZcRLDFHDT2+mOZkHa44XE+8KYN4VmorlUdAxHzpZQmVr7C98IuA=="
				}
			}
		},
		{
			"name": "@tencent-weixin/nodmix-weixin",
			"description": "Nodmix Weixin channel plugin by the Tencent Weixin team.",
			"source": "external",
			"kind": "channel",
			"nodmix": {
				"plugin": {
					"id": "nodmix-weixin",
					"label": "Weixin"
				},
				"channel": {
					"id": "nodmix-weixin",
					"label": "Weixin",
					"selectionLabel": "Weixin（微信）",
					"detailLabel": "Weixin",
					"docsPath": "/channels/wechat",
					"docsLabel": "weixin",
					"blurb": "Personal WeChat messaging via QR-code login.",
					"aliases": [
						"weixin",
						"wechat",
						"微信"
					],
					"order": 75
				},
				"channelConfigs": { "nodmix-weixin": {
					"label": "Weixin",
					"description": "Personal WeChat conversation channel.",
					"schema": {
						"type": "object",
						"additionalProperties": true
					}
				} },
				"install": {
					"npmSpec": "@tencent-weixin/nodmix-weixin@2.4.3",
					"defaultChoice": "npm",
					"expectedIntegrity": "sha512-dPQbidUNWigC6V10vGW4i+GLH09x+6zUhafZRjuxkJ9GDu8o62WBsnUTojp4KqUH756hz+t2v9khiCRSi0dBDw==",
					"minHostVersion": ">=2026.3.22"
				}
			}
		},
		{
			"name": "@nodmix/discord",
			"description": "Nodmix Discord channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "discord",
					"label": "Discord",
					"selectionLabel": "Discord (Bot API)",
					"detailLabel": "Discord Bot",
					"docsPath": "/channels/discord",
					"docsLabel": "discord",
					"blurb": "very well supported right now.",
					"systemImage": "bubble.left.and.bubble.right",
					"markdownCapable": true,
					"preferSessionLookupForAnnounceTarget": true
				},
				"install": {
					"npmSpec": "@nodmix/discord",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10",
					"allowInvalidConfigRecovery": true
				}
			}
		},
		{
			"name": "@nodmix/feishu",
			"description": "Nodmix Feishu/Lark channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "feishu",
					"label": "Feishu",
					"selectionLabel": "Feishu/Lark (飞书)",
					"docsPath": "/channels/feishu",
					"docsLabel": "feishu",
					"blurb": "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
					"aliases": ["lark"],
					"order": 35,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/feishu",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.29"
				}
			}
		},
		{
			"name": "@nodmix/googlechat",
			"description": "Nodmix Google Chat channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "googlechat",
					"label": "Google Chat",
					"selectionLabel": "Google Chat (Chat API)",
					"detailLabel": "Google Chat",
					"docsPath": "/channels/googlechat",
					"docsLabel": "googlechat",
					"blurb": "Google Workspace Chat app with HTTP webhook.",
					"aliases": ["gchat", "google-chat"],
					"order": 55,
					"systemImage": "message.badge",
					"markdownCapable": true,
					"doctorCapabilities": {
						"dmAllowFromMode": "nestedOnly",
						"groupModel": "route",
						"groupAllowFromFallbackToAllowFrom": false,
						"warnOnEmptyGroupSenderAllowlist": false
					},
					"cliAddOptions": [
						{
							"flags": "--webhook-path <path>",
							"description": "Google Chat webhook path"
						},
						{
							"flags": "--webhook-url <url>",
							"description": "Google Chat webhook URL"
						},
						{
							"flags": "--audience-type <type>",
							"description": "Google Chat audience type (app-url|project-number)"
						},
						{
							"flags": "--audience <value>",
							"description": "Google Chat audience value (app URL or project number)"
						}
					]
				},
				"install": {
					"npmSpec": "@nodmix/googlechat",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/line",
			"description": "Nodmix LINE channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "line",
					"label": "LINE",
					"selectionLabel": "LINE (Messaging API)",
					"detailLabel": "LINE Bot",
					"docsPath": "/channels/line",
					"docsLabel": "line",
					"blurb": "LINE Messaging API webhook bot.",
					"systemImage": "message",
					"order": 75,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/line",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/matrix",
			"description": "Nodmix Matrix channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "matrix",
					"label": "Matrix",
					"selectionLabel": "Matrix (plugin)",
					"docsPath": "/channels/matrix",
					"docsLabel": "matrix",
					"blurb": "open protocol; install the plugin to enable.",
					"order": 70,
					"markdownCapable": true,
					"quickstartAllowFrom": true,
					"doctorCapabilities": {
						"dmAllowFromMode": "nestedOnly",
						"groupModel": "sender",
						"groupAllowFromFallbackToAllowFrom": false,
						"warnOnEmptyGroupSenderAllowlist": true
					},
					"cliAddOptions": [
						{
							"flags": "--homeserver <url>",
							"description": "Matrix homeserver URL"
						},
						{
							"flags": "--user-id <id>",
							"description": "Matrix user ID"
						},
						{
							"flags": "--access-token <token>",
							"description": "Matrix access token"
						},
						{
							"flags": "--device-name <name>",
							"description": "Matrix device name"
						},
						{
							"flags": "--initial-sync-limit <n>",
							"description": "Matrix initial sync limit"
						}
					]
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/matrix",
					"npmSpec": "@nodmix/matrix",
					"defaultChoice": "clawhub",
					"minHostVersion": ">=2026.4.10",
					"allowInvalidConfigRecovery": true
				}
			}
		},
		{
			"name": "@nodmix/msteams",
			"description": "Nodmix Microsoft Teams channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "msteams",
					"label": "Microsoft Teams",
					"selectionLabel": "Microsoft Teams (Teams SDK)",
					"docsPath": "/channels/msteams",
					"docsLabel": "msteams",
					"blurb": "Teams SDK; enterprise support.",
					"aliases": ["teams"],
					"order": 60
				},
				"install": {
					"npmSpec": "@nodmix/msteams",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/nextcloud-talk",
			"description": "Nodmix Nextcloud Talk channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "nextcloud-talk",
					"label": "Nextcloud Talk",
					"selectionLabel": "Nextcloud Talk (self-hosted)",
					"docsPath": "/channels/nextcloud-talk",
					"docsLabel": "nextcloud-talk",
					"blurb": "Self-hosted chat via Nextcloud Talk webhook bots.",
					"aliases": ["nc-talk", "nc"],
					"order": 65,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/nextcloud-talk",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/nostr",
			"description": "Nodmix Nostr channel plugin for NIP-04 encrypted DMs",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "nostr",
					"label": "Nostr",
					"selectionLabel": "Nostr (NIP-04 DMs)",
					"docsPath": "/channels/nostr",
					"docsLabel": "nostr",
					"blurb": "Decentralized protocol; encrypted DMs via NIP-04.",
					"order": 55,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/nostr",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/qqbot",
			"description": "Nodmix QQ Bot channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "qqbot",
					"label": "QQ Bot",
					"selectionLabel": "QQ Bot (Official API)",
					"detailLabel": "QQ Bot",
					"docsPath": "/channels/qqbot",
					"docsLabel": "qqbot",
					"blurb": "connect to QQ via official QQ Bot API with group chat and direct message support.",
					"systemImage": "bubble.left.and.bubble.right"
				},
				"install": {
					"npmSpec": "@nodmix/qqbot",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/slack",
			"description": "Nodmix Slack channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "slack",
					"label": "Slack",
					"selectionLabel": "Slack (Socket Mode)",
					"detailLabel": "Slack Bot",
					"docsPath": "/channels/slack",
					"docsLabel": "slack",
					"blurb": "supported (Socket Mode).",
					"systemImage": "number",
					"markdownCapable": true
				},
				"install": {
					"npmSpec": "@nodmix/slack",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.12-beta.1",
					"allowInvalidConfigRecovery": true
				}
			}
		},
		{
			"name": "@nodmix/synology-chat",
			"description": "Synology Chat channel plugin for Nodmix",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "synology-chat",
					"label": "Synology Chat",
					"selectionLabel": "Synology Chat (Webhook)",
					"docsPath": "/channels/synology-chat",
					"docsLabel": "synology-chat",
					"blurb": "Connect your Synology NAS Chat to Nodmix with full agent capabilities.",
					"order": 90
				},
				"install": {
					"npmSpec": "@nodmix/synology-chat",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/tlon",
			"description": "Nodmix Tlon/Urbit channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "tlon",
					"label": "Tlon",
					"selectionLabel": "Tlon (Urbit)",
					"docsPath": "/channels/tlon",
					"docsLabel": "tlon",
					"blurb": "decentralized messaging on Urbit; install the plugin to enable.",
					"order": 90,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/tlon",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/twitch",
			"description": "Nodmix Twitch channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "twitch",
					"label": "Twitch",
					"selectionLabel": "Twitch (Chat)",
					"docsPath": "/channels/twitch",
					"blurb": "Twitch chat integration",
					"aliases": ["twitch-chat"]
				},
				"install": {
					"npmSpec": "@nodmix/twitch",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/whatsapp",
			"description": "Nodmix WhatsApp channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "whatsapp",
					"label": "WhatsApp",
					"selectionLabel": "WhatsApp (QR link)",
					"detailLabel": "WhatsApp Web",
					"docsPath": "/channels/whatsapp",
					"docsLabel": "whatsapp",
					"blurb": "works with your own number; recommend a separate phone + eSIM.",
					"systemImage": "message"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/whatsapp",
					"npmSpec": "@nodmix/whatsapp",
					"defaultChoice": "clawhub",
					"minHostVersion": ">=2026.4.25"
				}
			}
		},
		{
			"name": "@nodmix/zalo",
			"description": "Nodmix Zalo channel plugin",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "zalo",
					"label": "Zalo",
					"selectionLabel": "Zalo (Bot API)",
					"docsPath": "/channels/zalo",
					"docsLabel": "zalo",
					"blurb": "Vietnam-focused messaging platform with Bot API.",
					"aliases": ["zl"],
					"order": 80,
					"quickstartAllowFrom": true
				},
				"install": {
					"npmSpec": "@nodmix/zalo",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/zalouser",
			"description": "Nodmix Zalo Personal Account plugin via native zca-js integration",
			"source": "official",
			"kind": "channel",
			"nodmix": {
				"channel": {
					"id": "zalouser",
					"label": "Zalo Personal",
					"selectionLabel": "Zalo (Personal Account)",
					"docsPath": "/channels/zalouser",
					"docsLabel": "zalouser",
					"blurb": "Zalo personal account via QR code login.",
					"aliases": ["zlu"],
					"order": 85,
					"quickstartAllowFrom": false
				},
				"install": {
					"npmSpec": "@nodmix/zalouser",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		}
	] },
	{ entries: [
		{
			"name": "@nodmix/amazon-bedrock-provider",
			"description": "Nodmix Amazon Bedrock provider plugin",
			"source": "official",
			"kind": "provider",
			"nodmix": {
				"plugin": {
					"id": "amazon-bedrock",
					"label": "Amazon Bedrock"
				},
				"providers": [{
					"id": "amazon-bedrock",
					"name": "Amazon Bedrock",
					"docs": "/providers/bedrock",
					"categories": ["cloud", "llm"]
				}],
				"install": {
					"npmSpec": "@nodmix/amazon-bedrock-provider",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.12-beta.1"
				}
			}
		},
		{
			"name": "@nodmix/amazon-bedrock-mantle-provider",
			"description": "Nodmix Amazon Bedrock Mantle provider plugin",
			"source": "official",
			"kind": "provider",
			"nodmix": {
				"plugin": {
					"id": "amazon-bedrock-mantle",
					"label": "Amazon Bedrock Mantle"
				},
				"providers": [{
					"id": "amazon-bedrock-mantle",
					"name": "Amazon Bedrock Mantle",
					"docs": "/providers/bedrock-mantle",
					"categories": ["cloud", "llm"]
				}],
				"install": {
					"npmSpec": "@nodmix/amazon-bedrock-mantle-provider",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.12-beta.1"
				}
			}
		},
		{
			"name": "@nodmix/anthropic-vertex-provider",
			"description": "Nodmix Anthropic Vertex provider plugin",
			"source": "official",
			"kind": "provider",
			"nodmix": {
				"plugin": {
					"id": "anthropic-vertex",
					"label": "Anthropic Vertex"
				},
				"providers": [{
					"id": "anthropic-vertex",
					"name": "Anthropic Vertex",
					"docs": "/providers/models",
					"categories": ["cloud", "llm"]
				}],
				"install": {
					"npmSpec": "@nodmix/anthropic-vertex-provider",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.12-beta.1"
				}
			}
		},
		{
			"name": "@nodmix/codex",
			"description": "Nodmix Codex harness and model provider plugin",
			"source": "official",
			"kind": "provider",
			"nodmix": {
				"plugin": {
					"id": "codex",
					"label": "Codex"
				},
				"providers": [{
					"id": "codex",
					"name": "Codex",
					"docs": "/providers/models",
					"categories": ["cloud", "llm"],
					"authChoices": [{
						"method": "app-server",
						"choiceId": "codex",
						"choiceLabel": "Codex app-server",
						"choiceHint": "Use the Codex app-server runtime and managed model catalog.",
						"assistantPriority": -40,
						"groupId": "codex",
						"groupLabel": "Codex",
						"groupHint": "Codex app-server model provider",
						"onboardingScopes": ["text-inference"]
					}]
				}],
				"install": {
					"npmSpec": "@nodmix/codex",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.1-beta.1"
				}
			}
		},
		{
			"name": "@nodmix/pixverse-provider",
			"description": "Nodmix PixVerse video provider plugin",
			"source": "official",
			"kind": "provider",
			"nodmix": {
				"plugin": {
					"id": "pixverse",
					"label": "PixVerse"
				},
				"providers": [{
					"id": "pixverse",
					"name": "PixVerse",
					"docs": "/providers/pixverse",
					"categories": ["cloud", "video"],
					"authChoices": [{
						"method": "api-key",
						"choiceId": "pixverse-api-key",
						"choiceLabel": "PixVerse API key",
						"choiceHint": "Wizard prompts for International or CN endpoint.",
						"groupId": "pixverse",
						"groupLabel": "PixVerse",
						"groupHint": "Video generation",
						"optionKey": "pixverseApiKey",
						"cliFlag": "--pixverse-api-key",
						"cliOption": "--pixverse-api-key <key>",
						"cliDescription": "PixVerse API key",
						"onboardingScopes": ["image-generation"]
					}]
				}],
				"install": {
					"npmSpec": "@nodmix/pixverse-provider",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.26"
				}
			}
		}
	] },
	{ entries: [
		{
			"name": "@nodmix/acpx",
			"description": "Nodmix ACP runtime backend",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "acpx",
					"label": "ACPX Runtime"
				},
				"install": {
					"npmSpec": "@nodmix/acpx",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.25"
				}
			}
		},
		{
			"name": "@nodmix/brave-plugin",
			"description": "Nodmix Brave plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "brave",
					"label": "Brave"
				},
				"webSearchProviders": [{
					"id": "brave",
					"label": "Brave Search",
					"hint": "Brave Search web results.",
					"onboardingScopes": ["text-inference"],
					"credentialLabel": "Brave Search API key",
					"envVars": ["BRAVE_API_KEY"],
					"placeholder": "BSA...",
					"signupUrl": "https://api-dashboard.search.brave.com/app/keys",
					"docsUrl": "https://docs.nodmix.ai/tools/brave-search",
					"credentialPath": "plugins.entries.brave.config.webSearch.apiKey",
					"autoDetectOrder": 10
				}],
				"install": {
					"npmSpec": "@nodmix/brave-plugin",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10",
					"allowInvalidConfigRecovery": true
				}
			}
		},
		{
			"name": "@nodmix/copilot",
			"description": "Nodmix GitHub Copilot agent runtime plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "copilot",
					"label": "GitHub Copilot agent runtime"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/copilot",
					"npmSpec": "@nodmix/copilot",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.28"
				}
			}
		},
		{
			"name": "@nodmix/diagnostics-otel",
			"description": "Nodmix diagnostics OpenTelemetry exporter",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "diagnostics-otel",
					"label": "Diagnostics OpenTelemetry"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/diagnostics-otel",
					"npmSpec": "@nodmix/diagnostics-otel",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.25"
				}
			}
		},
		{
			"name": "@nodmix/diagnostics-prometheus",
			"description": "Nodmix diagnostics Prometheus exporter",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "diagnostics-prometheus",
					"label": "Diagnostics Prometheus"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/diagnostics-prometheus",
					"npmSpec": "@nodmix/diagnostics-prometheus",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.25"
				}
			}
		},
		{
			"name": "@nodmix/diffs",
			"description": "Nodmix diff viewer plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "diffs",
					"label": "Diffs"
				},
				"install": {
					"npmSpec": "@nodmix/diffs",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.30"
				}
			}
		},
		{
			"name": "@nodmix/diffs-language-pack",
			"description": "Nodmix diffs viewer syntax highlighting language pack",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "diffs-language-pack",
					"label": "Diff Viewer Language Pack"
				},
				"install": {
					"npmSpec": "@nodmix/diffs-language-pack",
					"clawhubSpec": "clawhub:@nodmix/diffs-language-pack",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.27"
				}
			}
		},
		{
			"name": "@nodmix/google-meet",
			"description": "Nodmix Google Meet participant plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "google-meet",
					"label": "Google Meet"
				},
				"install": {
					"npmSpec": "@nodmix/google-meet",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.20"
				}
			}
		},
		{
			"name": "@nodmix/lobster",
			"description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "lobster",
					"label": "Lobster"
				},
				"install": {
					"npmSpec": "@nodmix/lobster",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.25"
				}
			}
		},
		{
			"name": "@nodmix/memory-lancedb",
			"description": "Nodmix LanceDB-backed long-term memory plugin with auto-recall/capture",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "memory-lancedb",
					"label": "Memory LanceDB"
				},
				"install": {
					"npmSpec": "@nodmix/memory-lancedb",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		},
		{
			"name": "@nodmix/openshell-sandbox",
			"description": "Nodmix OpenShell sandbox backend",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "openshell",
					"label": "OpenShell Sandbox"
				},
				"install": {
					"npmSpec": "@nodmix/openshell-sandbox",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.12-beta.1"
				}
			}
		},
		{
			"name": "@nodmix/pixverse-provider",
			"description": "Nodmix PixVerse video generation provider plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "pixverse",
					"label": "PixVerse"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/pixverse-provider",
					"npmSpec": "@nodmix/pixverse-provider",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.26"
				}
			}
		},
		{
			"name": "@nodmix/tokenjuice",
			"description": "Nodmix tokenjuice exec output compaction plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "tokenjuice",
					"label": "Tokenjuice"
				},
				"install": {
					"clawhubSpec": "clawhub:@nodmix/tokenjuice",
					"npmSpec": "@nodmix/tokenjuice",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.5.28"
				}
			}
		},
		{
			"name": "@nodmix/voice-call",
			"description": "Nodmix voice-call plugin",
			"source": "official",
			"kind": "plugin",
			"nodmix": {
				"plugin": {
					"id": "voice-call",
					"label": "Voice Call"
				},
				"install": {
					"npmSpec": "@nodmix/voice-call",
					"defaultChoice": "npm",
					"minHostVersion": ">=2026.4.10"
				}
			}
		}
	] }
];
function parseCatalogEntries(raw) {
	if (Array.isArray(raw)) return raw.filter((entry) => isRecord(entry));
	if (!isRecord(raw)) return [];
	const list = raw.entries ?? raw.packages ?? raw.plugins;
	if (!Array.isArray(list)) return [];
	return list.filter((entry) => isRecord(entry));
}
function normalizeDefaultChoice(value) {
	return value === "clawhub" || value === "npm" || value === "local" ? value : void 0;
}
function getOfficialExternalPluginCatalogManifest(entry) {
	const manifest = entry[MANIFEST_KEY];
	return isRecord(manifest) ? manifest : void 0;
}
function resolveOfficialExternalPluginId(entry) {
	const manifest = getOfficialExternalPluginCatalogManifest(entry);
	return normalizeOptionalString(manifest?.plugin?.id) ?? normalizeOptionalString(manifest?.channel?.id) ?? normalizeOptionalString(manifest?.providers?.[0]?.id);
}
function resolveOfficialExternalPluginLookupIds(entry) {
	const manifest = getOfficialExternalPluginCatalogManifest(entry);
	return uniqueStrings([
		normalizeOptionalString(manifest?.plugin?.id),
		normalizeOptionalString(manifest?.channel?.id),
		normalizeOptionalString(manifest?.providers?.[0]?.id)
	].filter((value) => Boolean(value)));
}
function resolveOfficialExternalPluginLabel(entry) {
	const manifest = getOfficialExternalPluginCatalogManifest(entry);
	return normalizeOptionalString(manifest?.plugin?.label) ?? normalizeOptionalString(manifest?.channel?.label) ?? normalizeOptionalString(manifest?.providers?.[0]?.name) ?? normalizeOptionalString(entry.name) ?? resolveOfficialExternalPluginId(entry) ?? "plugin";
}
function resolveOfficialExternalPluginInstall(entry) {
	const install = getOfficialExternalPluginCatalogManifest(entry)?.install;
	const clawhubSpec = normalizeOptionalString(install?.clawhubSpec);
	const npmSpec = normalizeOptionalString(install?.npmSpec) ?? normalizeOptionalString(entry.name);
	const localPath = normalizeOptionalString(install?.localPath);
	if (!clawhubSpec && !npmSpec && !localPath) return null;
	const defaultChoice = normalizeDefaultChoice(install?.defaultChoice) ?? (npmSpec ? "npm" : clawhubSpec ? "clawhub" : localPath ? "local" : void 0);
	return {
		...clawhubSpec ? { clawhubSpec } : {},
		...npmSpec ? { npmSpec } : {},
		...localPath ? { localPath } : {},
		...defaultChoice ? { defaultChoice } : {},
		...install?.minHostVersion ? { minHostVersion: install.minHostVersion } : {},
		...install?.expectedIntegrity ? { expectedIntegrity: install.expectedIntegrity } : {},
		...install?.allowInvalidConfigRecovery === true ? { allowInvalidConfigRecovery: true } : {}
	};
}
function listOfficialExternalPluginCatalogEntries() {
	const entries = OFFICIAL_CATALOG_SOURCES.flatMap((source) => parseCatalogEntries(source));
	const resolved = /* @__PURE__ */ new Map();
	for (const entry of entries) {
		const pluginId = resolveOfficialExternalPluginId(entry);
		const key = pluginId ? `${entry.kind ?? "plugin"}:${pluginId}` : entry.name ?? "";
		if (key && !resolved.has(key)) resolved.set(key, entry);
	}
	return [...resolved.values()];
}
function listOfficialExternalChannelCatalogEntries() {
	return listOfficialExternalPluginCatalogEntries().filter((entry) => Boolean(getOfficialExternalPluginCatalogManifest(entry)?.channel));
}
function listOfficialExternalProviderCatalogEntries() {
	return listOfficialExternalPluginCatalogEntries().filter((entry) => (getOfficialExternalPluginCatalogManifest(entry)?.providers?.length ?? 0) > 0);
}
function getOfficialExternalPluginCatalogEntry(pluginId) {
	const normalized = pluginId.trim();
	if (!normalized) return;
	return listOfficialExternalPluginCatalogEntries().find((entry) => resolveOfficialExternalPluginLookupIds(entry).includes(normalized));
}
function getOfficialExternalPluginCatalogEntryForPackage(packageName) {
	const normalized = packageName?.trim();
	if (!normalized) return;
	return listOfficialExternalPluginCatalogEntries().find((entry) => normalizeOptionalString(entry.name) === normalized);
}
//#endregion
export { listOfficialExternalPluginCatalogEntries as a, resolveOfficialExternalPluginInstall as c, listOfficialExternalChannelCatalogEntries as i, resolveOfficialExternalPluginLabel as l, getOfficialExternalPluginCatalogEntryForPackage as n, listOfficialExternalProviderCatalogEntries as o, getOfficialExternalPluginCatalogManifest as r, resolveOfficialExternalPluginId as s, getOfficialExternalPluginCatalogEntry as t };
