import { z } from 'zod'; /** * High-level plugin category. * * - `strategy`: owns the operator's automation runtime and is mutually * exclusive per operator. * - `utility`: composes with other utility plugins to filter, score, monitor or * augment UI. */ export declare const PluginTypeSchema: z.ZodEnum<["strategy", "utility"]>; /** * High-level plugin category used by manifests and runtime status objects. */ export type PluginType = z.infer; /** * Runtime instance scope for a plugin. * * - `operator`: the host creates one instance per operator. * - `global`: the host creates a single shared instance for the whole station. */ export declare const PluginInstanceScopeSchema: z.ZodEnum<["operator", "global"]>; /** * Runtime instance scope for a plugin. */ export type PluginInstanceScope = z.infer; /** * Explicit permission declarations requested by a plugin. * * Permissions let the host gate sensitive capabilities behind manifest-level * intent. Plugins should request the smallest possible set. */ export declare const PluginPermissionSchema: z.ZodEnum<["network", "host:hamlib", "radio:read", "radio:control", "radio:power", "settings:ft8", "settings:decode-windows", "settings:realtime", "settings:frequency-presets", "settings:station", "settings:psk-reporter", "settings:ntp"]>; /** * Explicit permission declarations requested by a plugin. */ export type PluginPermission = z.infer; /** * Built-in frontend renderer kinds supported by declarative plugin panels. */ export declare const PluginPanelComponentSchema: z.ZodEnum<["table", "key-value", "chart", "log", "iframe"]>; /** * Built-in frontend renderer kinds supported by declarative plugin panels. */ export type PluginPanelComponent = z.infer; /** * Supported generated-form field types for plugin settings. * * These values control both validation expectations and default frontend * rendering in plugin settings UIs. */ export declare const PluginSettingTypeSchema: z.ZodEnum<["boolean", "number", "string", "string[]", "object[]", "keyedStringArrays", "info"]>; /** * Supported generated-form field types for plugin settings. */ export type PluginSettingType = z.infer; /** * Label/value pair used by select-like plugin settings. */ export declare const PluginSettingOptionSchema: z.ZodObject<{ label: z.ZodString; value: z.ZodString; }, "strip", z.ZodTypeAny, { value: string; label: string; }, { value: string; label: string; }>; /** * Label/value pair used by select-like plugin settings. */ export type PluginSettingOption = z.infer; export declare const PluginObjectArrayFieldSchema: z.ZodObject<{ key: z.ZodString; type: z.ZodDefault>>; label: z.ZodString; description: z.ZodOptional; placeholder: z.ZodOptional; required: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }, { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }>; export type PluginObjectArrayField = z.infer; export declare const PluginKeyedStringArrayKeySchema: z.ZodObject<{ key: z.ZodString; label: z.ZodString; description: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: string; key: string; description?: string | undefined; }, { label: string; key: string; description?: string | undefined; }>; export type PluginKeyedStringArrayKey = z.infer; export interface PluginSettingCondition { /** Single setting key to compare. Preserves the original condition shape. */ setting?: string; equals?: unknown; notEquals?: unknown; /** All nested conditions must match. */ allOf?: PluginSettingCondition[]; /** At least one nested condition must match. */ anyOf?: PluginSettingCondition[]; } export declare const PluginSettingConditionSchema: z.ZodType; export declare const PluginSettingConditionalDescriptionSchema: z.ZodObject<{ when: z.ZodType; description: z.ZodString; }, "strip", z.ZodTypeAny, { description: string; when: PluginSettingCondition; }, { description: string; when: PluginSettingCondition; }>; export type PluginSettingConditionalDescription = z.infer; /** * Persistence and UI scope for a plugin setting. * * - `global`: shared by the whole station and typically edited in plugin * management views. * - `operator`: isolated per operator and typically edited in operator-specific * automation settings. */ export declare const PluginSettingScopeSchema: z.ZodEnum<["global", "operator"]>; /** * Persistence and UI scope for a plugin setting. */ export type PluginSettingScope = z.infer; /** * Declarative description of a persisted plugin setting. * * The host uses this schema to generate configuration forms, validate updates * and resolve default values before injecting them into `ctx.config`. */ export declare const PluginSettingDescriptorSchema: z.ZodObject<{ type: z.ZodEnum<["boolean", "number", "string", "string[]", "object[]", "keyedStringArrays", "info"]>; default: z.ZodUnknown; label: z.ZodString; description: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; options: z.ZodOptional, "many">>; /** Field schema used by generated editors for `object[]` settings. */ itemFields: z.ZodOptional>>; label: z.ZodString; description: z.ZodOptional; placeholder: z.ZodOptional; required: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }, { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }>, "many">>; /** Fixed key list used by generated editors for `keyedStringArrays` settings. */ keys: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: string; key: string; description?: string | undefined; }, { label: string; key: string; description?: string | undefined; }>, "many">>; /** Conditionally show the field based on another setting in the same form. */ visibleWhen: z.ZodOptional>; /** Conditionally override the field description based on another setting. */ descriptionWhen: z.ZodOptional; description: z.ZodString; }, "strip", z.ZodTypeAny, { description: string; when: PluginSettingCondition; }, { description: string; when: PluginSettingCondition; }>, "many">>; /** Internal settings are persisted/injected but hidden from generated UIs. */ hidden: z.ZodOptional; /** 设置作用域:global(所有操作员共享)或 operator(每操作员独立),默认 global */ scope: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; scope: "operator" | "global"; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; }, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; scope?: "operator" | "global" | undefined; }>; /** * Declarative description of a persisted plugin setting. * * `default` is the resolved fallback value, `label`/`description` power the UI, * `min` and `max` constrain numeric fields, `options` enumerates valid choices * for select-like inputs, and `scope` controls whether the value is shared or * operator-specific. */ export type PluginSettingDescriptor = z.infer; /** * Declarative quick-action button shown in operator-facing plugin UI. * * Quick actions are intended for one-shot commands and are dispatched through * the plugin user-action channel when clicked. */ export declare const PluginQuickActionSchema: z.ZodObject<{ id: z.ZodString; label: z.ZodString; icon: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; label: string; icon?: string | undefined; }, { id: string; label: string; icon?: string | undefined; }>; /** * Declarative quick-action button shown in operator-facing plugin UI. */ export type PluginQuickAction = z.infer; /** * Shortcut reference to an operator-scope setting that should be surfaced in a * compact quick-settings panel. */ export declare const PluginQuickSettingSchema: z.ZodObject<{ settingKey: z.ZodString; }, "strip", z.ZodTypeAny, { settingKey: string; }, { settingKey: string; }>; /** * Shortcut reference to an operator-scope setting that should be surfaced in a * compact quick-settings panel. */ export type PluginQuickSetting = z.infer; /** * Host-derived capability tags exposed to the frontend. * * These tags are computed from the plugin definition so the UI can reason * about plugin roles without hard-coding specific plugin names. */ export declare const PluginCapabilitySchema: z.ZodEnum<["auto_call_candidate", "auto_call_execution"]>; /** * Host-derived capability tags exposed to the frontend. */ export type PluginCapability = z.infer; /** * Rendering slot that determines where a panel appears in the UI. * * - `operator`: shown in the expanded operator card's live-panel area (default). * - `automation`: shown inside the top-right automation quick-action popover. * - `main-right`: shown in the optional main layout plugin pane on the far right. * - `voice-left-top`: shown above the voice frequency control card. * - `voice-right-top`: shown in the tabbed top area of the voice right panel. * - `cw-left-top`: shown above the CW frequency control card. * - `cw-right-top`: shown in the tabbed top area of the CW right panel. */ export declare const PluginPanelSlotSchema: z.ZodEnum<["operator", "automation", "main-right", "voice-left-top", "voice-right-top", "cw-left-top", "cw-right-top", "radio-control-toolbar"]>; /** * Rendering slot that determines where a panel appears in the UI. */ export type PluginPanelSlot = z.infer; /** * Preferred width hint for plugin-owned panels. * * Hosts may interpret this hint differently per slot. Today the operator-card * host treats `full` as "span the full row on desktop", while automation * popover hosts may choose to ignore it. */ export declare const PluginPanelWidthSchema: z.ZodEnum<["half", "full"]>; /** * Preferred width hint for plugin-owned panels. */ export type PluginPanelWidth = z.infer; /** * How an iframe panel is opened when rendered as a toolbar entry. */ export declare const PluginPanelOpenModeSchema: z.ZodEnum<["popover", "modal"]>; /** * How an iframe panel is opened when rendered as a toolbar entry. */ export type PluginPanelOpenMode = z.infer; /** * Controlled size hint for iframe panels rendered as popovers or modals. */ export declare const PluginPanelUISizeSchema: z.ZodEnum<["sm", "md", "lg"]>; /** * Controlled size hint for iframe panels rendered as popovers or modals. */ export type PluginPanelUISize = z.infer; /** * Declarative definition of a plugin-owned panel in the frontend. * * Panels are passive containers rendered by the host. A plugin sends data into * them through `ctx.ui.send(panelId, data)`. When `component` is `'iframe'`, * the panel renders a custom UI page inside a sandboxed iframe instead. Static * manifest panels and runtime UI contributions use this same descriptor. */ export declare const PluginPanelDescriptorSchema: z.ZodEffects; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>; /** * Declarative definition of a plugin-owned panel in the frontend. */ export type PluginPanelDescriptor = z.infer; export declare const PluginUIPanelContributionTargetSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"global">; }, "strip", z.ZodTypeAny, { kind: "global"; }, { kind: "global"; }>, z.ZodObject<{ kind: z.ZodLiteral<"operator">; operatorId: z.ZodString; }, "strip", z.ZodTypeAny, { operatorId: string; kind: "operator"; }, { operatorId: string; kind: "operator"; }>]>; export type PluginUIPanelContributionTarget = z.infer; /** * A normalized group of plugin UI panels. * * Static `PluginDefinition.panels` are emitted by the host as the reserved * `manifest` group. Runtime groups are replaced by * `ctx.ui.setPanelContributions(groupId, panels)` and cleared by publishing an * empty panel list for the same group. */ export declare const PluginUIPanelContributionGroupSchema: z.ZodObject<{ pluginName: z.ZodString; groupId: z.ZodString; source: z.ZodEnum<["manifest", "runtime"]>; instanceTarget: z.ZodOptional; }, "strip", z.ZodTypeAny, { kind: "global"; }, { kind: "global"; }>, z.ZodObject<{ kind: z.ZodLiteral<"operator">; operatorId: z.ZodString; }, "strip", z.ZodTypeAny, { operatorId: string; kind: "operator"; }, { operatorId: string; kind: "operator"; }>]>>; panels: z.ZodArray; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }, { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }>; export type PluginUIPanelContributionGroup = z.infer; /** * Declarative descriptor for a custom UI page served from a plugin's static * file directory and rendered inside an iframe by the host. * * Pages are registered in `PluginDefinition.ui.pages` and can be consumed by * any host component via ``. */ export declare const PluginUIPageDescriptorSchema: z.ZodObject<{ /** Unique page identifier within the plugin (e.g. 'settings', 'dashboard'). */ id: z.ZodString; /** Display title (i18n key or literal text). */ title: z.ZodString; /** Entry HTML file path relative to the UI directory (e.g. 'settings.html'). */ entry: z.ZodString; /** Optional icon identifier. */ icon: z.ZodOptional; /** Who may access this page through the host iframe bridge. Defaults to admin. */ accessScope: z.ZodDefault>>; /** Optional resource binding enforced by the host for iframe invoke requests. */ resourceBinding: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }, { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }>; /** * Declarative descriptor for a custom UI page served from a plugin's static * file directory. */ export type PluginUIPageDescriptor = z.infer; /** * Declares that a plugin provides custom UI pages hosted in an iframe. */ export declare const PluginUIConfigSchema: z.ZodObject<{ /** Static file directory relative to the plugin root (default: 'ui'). */ dir: z.ZodDefault>; /** Registered custom UI pages. */ pages: z.ZodDefault; /** Who may access this page through the host iframe bridge. Defaults to admin. */ accessScope: z.ZodDefault>>; /** Optional resource binding enforced by the host for iframe invoke requests. */ resourceBinding: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }, { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }>, "many">>>; }, "strip", z.ZodTypeAny, { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; }, { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; }>; /** * Declares that a plugin provides custom UI pages hosted in an iframe. */ export type PluginUIConfig = z.infer; /** * Storage scope requested by a plugin. */ export declare const PluginStorageScopeSchema: z.ZodEnum<["global", "operator"]>; /** * Storage scope requested by a plugin. */ export type PluginStorageScope = z.infer; /** * Declares which persistent storage scopes the host should provision. */ export declare const PluginStorageConfigSchema: z.ZodObject<{ scopes: z.ZodArray, "many">; }, "strip", z.ZodTypeAny, { scopes: ("operator" | "global")[]; }, { scopes: ("operator" | "global")[]; }>; /** * Declares which persistent storage scopes the host should provision. */ export type PluginStorageConfig = z.infer; /** * Normalized manifest describing a plugin's static metadata and declarations. * * This is effectively the serializable subset of a plugin definition that the * host can expose to management UI and diagnostics. */ export declare const PluginManifestSchema: z.ZodObject<{ name: z.ZodString; version: z.ZodString; type: z.ZodEnum<["strategy", "utility"]>; instanceScope: z.ZodDefault>>; description: z.ZodOptional; permissions: z.ZodOptional, "many">>; settings: z.ZodOptional; default: z.ZodUnknown; label: z.ZodString; description: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; options: z.ZodOptional, "many">>; /** Field schema used by generated editors for `object[]` settings. */ itemFields: z.ZodOptional>>; label: z.ZodString; description: z.ZodOptional; placeholder: z.ZodOptional; required: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }, { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }>, "many">>; /** Fixed key list used by generated editors for `keyedStringArrays` settings. */ keys: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: string; key: string; description?: string | undefined; }, { label: string; key: string; description?: string | undefined; }>, "many">>; /** Conditionally show the field based on another setting in the same form. */ visibleWhen: z.ZodOptional>; /** Conditionally override the field description based on another setting. */ descriptionWhen: z.ZodOptional; description: z.ZodString; }, "strip", z.ZodTypeAny, { description: string; when: PluginSettingCondition; }, { description: string; when: PluginSettingCondition; }>, "many">>; /** Internal settings are persisted/injected but hidden from generated UIs. */ hidden: z.ZodOptional; /** 设置作用域:global(所有操作员共享)或 operator(每操作员独立),默认 global */ scope: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; scope: "operator" | "global"; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; }, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; scope?: "operator" | "global" | undefined; }>>>; quickActions: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; label: string; icon?: string | undefined; }, { id: string; label: string; icon?: string | undefined; }>, "many">>; quickSettings: z.ZodOptional, "many">>; panels: z.ZodOptional; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, "many">>; storage: z.ZodOptional, "many">; }, "strip", z.ZodTypeAny, { scopes: ("operator" | "global")[]; }, { scopes: ("operator" | "global")[]; }>>; ui: z.ZodOptional>; /** Registered custom UI pages. */ pages: z.ZodDefault; /** Who may access this page through the host iframe bridge. Defaults to admin. */ accessScope: z.ZodDefault>>; /** Optional resource binding enforced by the host for iframe invoke requests. */ resourceBinding: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }, { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }>, "many">>>; }, "strip", z.ZodTypeAny, { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; }, { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; }>>; }, "strip", z.ZodTypeAny, { type: "strategy" | "utility"; name: string; version: string; instanceScope: "operator" | "global"; description?: string | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; } | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; storage?: { scopes: ("operator" | "global")[]; } | undefined; }, { type: "strategy" | "utility"; name: string; version: string; description?: string | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; } | undefined; instanceScope?: "operator" | "global" | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; storage?: { scopes: ("operator" | "global")[]; } | undefined; }>; /** * Normalized manifest describing a plugin's static metadata and declarations. */ export type PluginManifest = z.infer; export declare const PluginMarketChannelSchema: z.ZodEnum<["stable", "nightly"]>; export type PluginMarketChannel = z.infer; export declare const PluginSourceSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{ kind: z.ZodLiteral<"marketplace">; version: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; artifactUrl: z.ZodString; sha256: z.ZodString; installedAt: z.ZodNumber; }, "strip", z.ZodTypeAny, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }>]>; export type PluginSource = z.infer; export declare const PluginLocalesSchema: z.ZodRecord>; export type PluginLocales = z.infer; /** * Runtime-facing plugin status snapshot exposed to the frontend. * * This extends the static manifest with host state such as whether the plugin * is loaded, enabled, auto-disabled or currently assigned to operators. */ export declare const PluginStatusSchema: z.ZodObject<{ name: z.ZodString; type: z.ZodEnum<["strategy", "utility"]>; instanceScope: z.ZodDefault>>; version: z.ZodString; description: z.ZodOptional; isBuiltIn: z.ZodBoolean; loaded: z.ZodDefault; enabled: z.ZodBoolean; /** 是否被自动禁用(连续错误达到阈值) */ autoDisabled: z.ZodDefault>; errorCount: z.ZodNumber; lastError: z.ZodOptional; /** 仅对 strategy 插件有意义:当前被哪些 operator 选中 */ assignedOperatorIds: z.ZodOptional>; settings: z.ZodOptional; default: z.ZodUnknown; label: z.ZodString; description: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; options: z.ZodOptional, "many">>; /** Field schema used by generated editors for `object[]` settings. */ itemFields: z.ZodOptional>>; label: z.ZodString; description: z.ZodOptional; placeholder: z.ZodOptional; required: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }, { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }>, "many">>; /** Fixed key list used by generated editors for `keyedStringArrays` settings. */ keys: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: string; key: string; description?: string | undefined; }, { label: string; key: string; description?: string | undefined; }>, "many">>; /** Conditionally show the field based on another setting in the same form. */ visibleWhen: z.ZodOptional>; /** Conditionally override the field description based on another setting. */ descriptionWhen: z.ZodOptional; description: z.ZodString; }, "strip", z.ZodTypeAny, { description: string; when: PluginSettingCondition; }, { description: string; when: PluginSettingCondition; }>, "many">>; /** Internal settings are persisted/injected but hidden from generated UIs. */ hidden: z.ZodOptional; /** 设置作用域:global(所有操作员共享)或 operator(每操作员独立),默认 global */ scope: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; scope: "operator" | "global"; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; }, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; scope?: "operator" | "global" | undefined; }>>>; quickActions: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; label: string; icon?: string | undefined; }, { id: string; label: string; icon?: string | undefined; }>, "many">>; quickSettings: z.ZodOptional, "many">>; panels: z.ZodOptional; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, "many">>; permissions: z.ZodOptional, "many">>; capabilities: z.ZodOptional, "many">>; ui: z.ZodOptional>; /** Registered custom UI pages. */ pages: z.ZodDefault; /** Who may access this page through the host iframe bridge. Defaults to admin. */ accessScope: z.ZodDefault>>; /** Optional resource binding enforced by the host for iframe invoke requests. */ resourceBinding: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }, { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }>, "many">>>; }, "strip", z.ZodTypeAny, { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; }, { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; }>>; locales: z.ZodOptional>>; source: z.ZodOptional; version: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; artifactUrl: z.ZodString; sha256: z.ZodString; installedAt: z.ZodNumber; }, "strip", z.ZodTypeAny, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }>]>>; }, "strip", z.ZodTypeAny, { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; instanceScope: "operator" | "global"; isBuiltIn: boolean; loaded: boolean; autoDisabled: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; } | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }, { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; isBuiltIn: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; } | undefined; instanceScope?: "operator" | "global" | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; loaded?: boolean | undefined; autoDisabled?: boolean | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }>; /** * Runtime-facing plugin status snapshot exposed to the frontend. */ export type PluginStatus = z.infer; export declare const PluginSystemStateSchema: z.ZodEnum<["ready", "reloading", "error"]>; export type PluginSystemState = z.infer; /** * Dynamic plugin panel metadata pushed by runtime code. */ export declare const PluginPanelMetaSchema: z.ZodObject<{ title: z.ZodOptional>; titleValues: z.ZodOptional>; visible: z.ZodOptional; }, "strip", z.ZodTypeAny, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }>; export type PluginPanelMeta = z.infer; /** * Plugin panel metadata payload for websocket deltas and initial snapshots. */ export declare const PluginPanelMetaPayloadSchema: z.ZodObject<{ pluginName: z.ZodString; operatorId: z.ZodString; panelId: z.ZodString; meta: z.ZodObject<{ title: z.ZodOptional>; titleValues: z.ZodOptional>; visible: z.ZodOptional; }, "strip", z.ZodTypeAny, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }>; }, "strip", z.ZodTypeAny, { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }, { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }>; export type PluginPanelMetaPayload = z.infer; export declare const PluginSystemSnapshotSchema: z.ZodObject<{ state: z.ZodEnum<["ready", "reloading", "error"]>; generation: z.ZodNumber; plugins: z.ZodArray; instanceScope: z.ZodDefault>>; version: z.ZodString; description: z.ZodOptional; isBuiltIn: z.ZodBoolean; loaded: z.ZodDefault; enabled: z.ZodBoolean; /** 是否被自动禁用(连续错误达到阈值) */ autoDisabled: z.ZodDefault>; errorCount: z.ZodNumber; lastError: z.ZodOptional; /** 仅对 strategy 插件有意义:当前被哪些 operator 选中 */ assignedOperatorIds: z.ZodOptional>; settings: z.ZodOptional; default: z.ZodUnknown; label: z.ZodString; description: z.ZodOptional; min: z.ZodOptional; max: z.ZodOptional; options: z.ZodOptional, "many">>; /** Field schema used by generated editors for `object[]` settings. */ itemFields: z.ZodOptional>>; label: z.ZodString; description: z.ZodOptional; placeholder: z.ZodOptional; required: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }, { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }>, "many">>; /** Fixed key list used by generated editors for `keyedStringArrays` settings. */ keys: z.ZodOptional; }, "strip", z.ZodTypeAny, { label: string; key: string; description?: string | undefined; }, { label: string; key: string; description?: string | undefined; }>, "many">>; /** Conditionally show the field based on another setting in the same form. */ visibleWhen: z.ZodOptional>; /** Conditionally override the field description based on another setting. */ descriptionWhen: z.ZodOptional; description: z.ZodString; }, "strip", z.ZodTypeAny, { description: string; when: PluginSettingCondition; }, { description: string; when: PluginSettingCondition; }>, "many">>; /** Internal settings are persisted/injected but hidden from generated UIs. */ hidden: z.ZodOptional; /** 设置作用域:global(所有操作员共享)或 operator(每操作员独立),默认 global */ scope: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; scope: "operator" | "global"; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { type: "string" | "number" | "boolean"; label: string; key: string; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; }, { type: "string" | "number" | "boolean" | "string[]" | "object[]" | "keyedStringArrays" | "info"; label: string; keys?: { label: string; key: string; description?: string | undefined; }[] | undefined; options?: { value: string; label: string; }[] | undefined; default?: unknown; description?: string | undefined; min?: number | undefined; max?: number | undefined; itemFields?: { label: string; key: string; type?: "string" | "number" | "boolean" | undefined; description?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; }[] | undefined; visibleWhen?: PluginSettingCondition | undefined; descriptionWhen?: { description: string; when: PluginSettingCondition; }[] | undefined; hidden?: boolean | undefined; scope?: "operator" | "global" | undefined; }>>>; quickActions: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; label: string; icon?: string | undefined; }, { id: string; label: string; icon?: string | undefined; }>, "many">>; quickSettings: z.ZodOptional, "many">>; panels: z.ZodOptional; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, "many">>; permissions: z.ZodOptional, "many">>; capabilities: z.ZodOptional, "many">>; ui: z.ZodOptional>; /** Registered custom UI pages. */ pages: z.ZodDefault; /** Who may access this page through the host iframe bridge. Defaults to admin. */ accessScope: z.ZodDefault>>; /** Optional resource binding enforced by the host for iframe invoke requests. */ resourceBinding: z.ZodDefault>>; }, "strip", z.ZodTypeAny, { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }, { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }>, "many">>>; }, "strip", z.ZodTypeAny, { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; }, { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; }>>; locales: z.ZodOptional>>; source: z.ZodOptional; version: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; artifactUrl: z.ZodString; sha256: z.ZodString; installedAt: z.ZodNumber; }, "strip", z.ZodTypeAny, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }, { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }>]>>; }, "strip", z.ZodTypeAny, { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; instanceScope: "operator" | "global"; isBuiltIn: boolean; loaded: boolean; autoDisabled: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; } | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }, { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; isBuiltIn: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; } | undefined; instanceScope?: "operator" | "global" | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; loaded?: boolean | undefined; autoDisabled?: boolean | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }>, "many">; panelMeta: z.ZodDefault>; titleValues: z.ZodOptional>; visible: z.ZodOptional; }, "strip", z.ZodTypeAny, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }, { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }>; }, "strip", z.ZodTypeAny, { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }, { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }>, "many">>>; panelContributions: z.ZodDefault; instanceTarget: z.ZodOptional; }, "strip", z.ZodTypeAny, { kind: "global"; }, { kind: "global"; }>, z.ZodObject<{ kind: z.ZodLiteral<"operator">; operatorId: z.ZodString; }, "strip", z.ZodTypeAny, { operatorId: string; kind: "operator"; }, { operatorId: string; kind: "operator"; }>]>>; panels: z.ZodArray; /** Required when `component` is `'iframe'`. References a page id from `ui.pages`. */ pageId: z.ZodOptional; /** Optional string params forwarded to iframe panels as URL/init params. */ params: z.ZodOptional>; /** Where the panel renders. Defaults to `'operator'` (operator card live-panel area). */ slot: z.ZodOptional>; /** Preferred width hint. Defaults to `'half'`. */ width: z.ZodOptional>; /** Optional FontAwesome Free icon name used by toolbar-style hosts. */ icon: z.ZodOptional; /** Optional toolbar opening mode. Defaults to host-specific behavior, typically `'popover'`. */ openMode: z.ZodOptional>; /** Optional controlled UI size hint for toolbar popovers/modals. */ uiSize: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }, { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }, { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }>, "many">>>; lastError: z.ZodOptional; }, "strip", z.ZodTypeAny, { state: "error" | "ready" | "reloading"; generation: number; plugins: { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; instanceScope: "operator" | "global"; isBuiltIn: boolean; loaded: boolean; autoDisabled: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir: string; pages: { id: string; title: string; entry: string; accessScope: "operator" | "admin"; resourceBinding: "none" | "callsign" | "operator"; icon?: string | undefined; }[]; } | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }[]; panelMeta: { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }[]; panelContributions: { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }[]; lastError?: string | undefined; }, { state: "error" | "ready" | "reloading"; generation: number; plugins: { type: "strategy" | "utility"; name: string; enabled: boolean; version: string; isBuiltIn: boolean; errorCount: number; description?: string | undefined; source?: { kind: "marketplace"; version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; panels?: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[] | undefined; ui?: { dir?: string | undefined; pages?: { id: string; title: string; entry: string; icon?: string | undefined; accessScope?: "operator" | "admin" | undefined; resourceBinding?: "none" | "callsign" | "operator" | undefined; }[] | undefined; } | undefined; instanceScope?: "operator" | "global" | undefined; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; settings?: Record | undefined; quickActions?: { id: string; label: string; icon?: string | undefined; }[] | undefined; quickSettings?: { settingKey: string; }[] | undefined; loaded?: boolean | undefined; autoDisabled?: boolean | undefined; lastError?: string | undefined; assignedOperatorIds?: string[] | undefined; capabilities?: ("auto_call_candidate" | "auto_call_execution")[] | undefined; locales?: Record> | undefined; }[]; lastError?: string | undefined; panelMeta?: { operatorId: string; meta: { visible?: boolean | undefined; title?: string | null | undefined; titleValues?: Record | undefined; }; pluginName: string; panelId: string; }[] | undefined; panelContributions?: { pluginName: string; groupId: string; source: "manifest" | "runtime"; panels: { id: string; title: string; component: "table" | "key-value" | "chart" | "log" | "iframe"; params?: Record | undefined; icon?: string | undefined; pageId?: string | undefined; slot?: "operator" | "automation" | "main-right" | "voice-left-top" | "voice-right-top" | "cw-left-top" | "cw-right-top" | "radio-control-toolbar" | undefined; width?: "full" | "half" | undefined; openMode?: "popover" | "modal" | undefined; uiSize?: "sm" | "md" | "lg" | undefined; }[]; instanceTarget?: { kind: "global"; } | { operatorId: string; kind: "operator"; } | undefined; }[] | undefined; }>; export type PluginSystemSnapshot = z.infer; export declare const PluginDistributionSchema: z.ZodEnum<["electron", "docker", "android-bridge", "linux-service", "generic-server", "web-dev"]>; export type PluginDistribution = z.infer; export declare const PluginRuntimeInfoSchema: z.ZodObject<{ pluginDir: z.ZodString; pluginDataDir: z.ZodString; dataDir: z.ZodString; configDir: z.ZodString; logsDir: z.ZodString; cacheDir: z.ZodString; distribution: z.ZodEnum<["electron", "docker", "android-bridge", "linux-service", "generic-server", "web-dev"]>; hostPluginDirHint: z.ZodOptional; }, "strip", z.ZodTypeAny, { pluginDir: string; pluginDataDir: string; dataDir: string; configDir: string; logsDir: string; cacheDir: string; distribution: "electron" | "docker" | "android-bridge" | "linux-service" | "generic-server" | "web-dev"; hostPluginDirHint?: string | undefined; }, { pluginDir: string; pluginDataDir: string; dataDir: string; configDir: string; logsDir: string; cacheDir: string; distribution: "electron" | "docker" | "android-bridge" | "linux-service" | "generic-server" | "web-dev"; hostPluginDirHint?: string | undefined; }>; export type PluginRuntimeInfo = z.infer; /** * 单个插件的持久化配置 */ export declare const PluginConfigEntrySchema: z.ZodObject<{ enabled: z.ZodBoolean; settings: z.ZodRecord; }, "strip", z.ZodTypeAny, { enabled: boolean; settings: Record; }, { enabled: boolean; settings: Record; }>; export type PluginConfigEntry = z.infer; export declare const PluginMarketScreenshotSchema: z.ZodObject<{ src: z.ZodString; alt: z.ZodOptional; }, "strip", z.ZodTypeAny, { src: string; alt?: string | undefined; }, { src: string; alt?: string | undefined; }>; export type PluginMarketScreenshot = z.infer; export declare const PluginMarketCatalogEntrySchema: z.ZodObject<{ name: z.ZodString; title: z.ZodString; description: z.ZodString; locales: z.ZodOptional>>; latestVersion: z.ZodString; minHostVersion: z.ZodString; author: z.ZodOptional; license: z.ZodOptional; repository: z.ZodOptional; homepage: z.ZodOptional; categories: z.ZodDefault>>; keywords: z.ZodDefault>>; permissions: z.ZodDefault, "many">>>; screenshots: z.ZodDefault; }, "strip", z.ZodTypeAny, { src: string; alt?: string | undefined; }, { src: string; alt?: string | undefined; }>, "many">>>; artifactUrl: z.ZodString; sha256: z.ZodString; size: z.ZodNumber; publishedAt: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }, { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }>; export type PluginMarketCatalogEntry = z.infer; export declare const PluginMarketCatalogSchema: z.ZodObject<{ schemaVersion: z.ZodNumber; generatedAt: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; plugins: z.ZodArray>>; latestVersion: z.ZodString; minHostVersion: z.ZodString; author: z.ZodOptional; license: z.ZodOptional; repository: z.ZodOptional; homepage: z.ZodOptional; categories: z.ZodDefault>>; keywords: z.ZodDefault>>; permissions: z.ZodDefault, "many">>>; screenshots: z.ZodDefault; }, "strip", z.ZodTypeAny, { src: string; alt?: string | undefined; }, { src: string; alt?: string | undefined; }>, "many">>>; artifactUrl: z.ZodString; sha256: z.ZodString; size: z.ZodNumber; publishedAt: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }, { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }[]; schemaVersion: number; generatedAt: string; }, { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }[]; schemaVersion: number; generatedAt: string; }>; export type PluginMarketCatalog = z.infer; export declare const PluginMarketCatalogResponseSchema: z.ZodObject<{ catalog: z.ZodObject<{ schemaVersion: z.ZodNumber; generatedAt: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; plugins: z.ZodArray>>; latestVersion: z.ZodString; minHostVersion: z.ZodString; author: z.ZodOptional; license: z.ZodOptional; repository: z.ZodOptional; homepage: z.ZodOptional; categories: z.ZodDefault>>; keywords: z.ZodDefault>>; permissions: z.ZodDefault, "many">>>; screenshots: z.ZodDefault; }, "strip", z.ZodTypeAny, { src: string; alt?: string | undefined; }, { src: string; alt?: string | undefined; }>, "many">>>; artifactUrl: z.ZodString; sha256: z.ZodString; size: z.ZodNumber; publishedAt: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }, { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }>, "many">; }, "strip", z.ZodTypeAny, { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }[]; schemaVersion: number; generatedAt: string; }, { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }[]; schemaVersion: number; generatedAt: string; }>; sourceUrl: z.ZodString; }, "strip", z.ZodTypeAny, { catalog: { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }[]; schemaVersion: number; generatedAt: string; }; sourceUrl: string; }, { catalog: { channel: "stable" | "nightly"; plugins: { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }[]; schemaVersion: number; generatedAt: string; }; sourceUrl: string; }>; export type PluginMarketCatalogResponse = z.infer; export declare const PluginMarketCatalogEntryResponseSchema: z.ZodObject<{ plugin: z.ZodObject<{ name: z.ZodString; title: z.ZodString; description: z.ZodString; locales: z.ZodOptional>>; latestVersion: z.ZodString; minHostVersion: z.ZodString; author: z.ZodOptional; license: z.ZodOptional; repository: z.ZodOptional; homepage: z.ZodOptional; categories: z.ZodDefault>>; keywords: z.ZodDefault>>; permissions: z.ZodDefault, "many">>>; screenshots: z.ZodDefault; }, "strip", z.ZodTypeAny, { src: string; alt?: string | undefined; }, { src: string; alt?: string | undefined; }>, "many">>>; artifactUrl: z.ZodString; sha256: z.ZodString; size: z.ZodNumber; publishedAt: z.ZodString; }, "strip", z.ZodTypeAny, { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }, { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }>; sourceUrl: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; }, "strip", z.ZodTypeAny, { channel: "stable" | "nightly"; sourceUrl: string; plugin: { name: string; description: string; title: string; permissions: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[]; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; categories: string[]; keywords: string[]; screenshots: { src: string; alt?: string | undefined; }[]; size: number; publishedAt: string; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; }; }, { channel: "stable" | "nightly"; sourceUrl: string; plugin: { name: string; description: string; title: string; artifactUrl: string; sha256: string; latestVersion: string; minHostVersion: string; size: number; publishedAt: string; permissions?: ("network" | "host:hamlib" | "radio:read" | "radio:control" | "radio:power" | "settings:ft8" | "settings:decode-windows" | "settings:realtime" | "settings:frequency-presets" | "settings:station" | "settings:psk-reporter" | "settings:ntp")[] | undefined; locales?: Record> | undefined; author?: string | undefined; license?: string | undefined; repository?: string | undefined; homepage?: string | undefined; categories?: string[] | undefined; keywords?: string[] | undefined; screenshots?: { src: string; alt?: string | undefined; }[] | undefined; }; }>; export type PluginMarketCatalogEntryResponse = z.infer; export declare const PluginMarketInstallRecordSchema: z.ZodObject<{ version: z.ZodString; channel: z.ZodEnum<["stable", "nightly"]>; artifactUrl: z.ZodString; sha256: z.ZodString; installedAt: z.ZodNumber; }, "strip", z.ZodTypeAny, { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }, { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }>; export type PluginMarketInstallRecord = z.infer; export declare const PluginMarketInstallActionSchema: z.ZodEnum<["install", "update", "uninstall"]>; export type PluginMarketInstallAction = z.infer; export declare const PluginMarketInstallResultSchema: z.ZodObject<{ success: z.ZodLiteral; action: z.ZodEnum<["install", "update", "uninstall"]>; pluginName: z.ZodString; record: z.ZodOptional; artifactUrl: z.ZodString; sha256: z.ZodString; installedAt: z.ZodNumber; }, "strip", z.ZodTypeAny, { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }, { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; }>>; }, "strip", z.ZodTypeAny, { success: true; action: "install" | "update" | "uninstall"; pluginName: string; record?: { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; }, { success: true; action: "install" | "update" | "uninstall"; pluginName: string; record?: { version: string; channel: "stable" | "nightly"; artifactUrl: string; sha256: string; installedAt: number; } | undefined; }>; export type PluginMarketInstallResult = z.infer; /** * 所有插件的持久化配置 */ export declare const PluginsConfigSchema: z.ZodObject<{ /** 全局插件配置(enabled 状态 + global scope settings) */ configs: z.ZodDefault; }, "strip", z.ZodTypeAny, { enabled: boolean; settings: Record; }, { enabled: boolean; settings: Record; }>>>>; /** 每操作员的策略插件选择 */ operatorStrategies: z.ZodDefault>>; /** 每操作员的 operator scope plugin settings:operatorId → pluginName → settings */ operatorSettings: z.ZodDefault>>>>; }, "strip", z.ZodTypeAny, { configs: Record; }>; operatorStrategies: Record; operatorSettings: Record>>; }, { configs?: Record; }> | undefined; operatorStrategies?: Record | undefined; operatorSettings?: Record>> | undefined; }>; export type PluginsConfig = z.infer; /** * 插件数据推送载荷(ctx.ui.send() 发送到前端) */ export declare const PluginDataPayloadSchema: z.ZodObject<{ pluginName: z.ZodString; operatorId: z.ZodString; panelId: z.ZodString; data: z.ZodUnknown; }, "strip", z.ZodTypeAny, { operatorId: string; pluginName: string; panelId: string; data?: unknown; }, { operatorId: string; pluginName: string; panelId: string; data?: unknown; }>; export type PluginDataPayload = z.infer; /** * 插件日志条目 */ export declare const PluginLogEntrySchema: z.ZodObject<{ pluginName: z.ZodString; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; data: z.ZodOptional; timestamp: z.ZodNumber; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }>; export type PluginLogEntry = z.infer; export declare const PluginRuntimeLogStageSchema: z.ZodEnum<["scan", "load", "validate", "reload", "activate"]>; export type PluginRuntimeLogStage = z.infer; /** * 宿主级插件运行日志条目 */ export declare const PluginRuntimeLogEntrySchema: z.ZodObject<{ source: z.ZodLiteral<"system">; stage: z.ZodEnum<["scan", "load", "validate", "reload", "activate"]>; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; timestamp: z.ZodNumber; pluginName: z.ZodOptional; directoryName: z.ZodOptional; details: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }>; export type PluginRuntimeLogEntry = z.infer; export declare const PluginLogHistoryEntrySchema: z.ZodUnion<[z.ZodObject<{ source: z.ZodLiteral<"system">; stage: z.ZodEnum<["scan", "load", "validate", "reload", "activate"]>; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; timestamp: z.ZodNumber; pluginName: z.ZodOptional; directoryName: z.ZodOptional; details: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }>, z.ZodObject<{ pluginName: z.ZodString; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; data: z.ZodOptional; timestamp: z.ZodNumber; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }>]>; export type PluginLogHistoryEntry = z.infer; /** * 宿主级插件运行日志历史响应载荷 */ export declare const PluginRuntimeLogHistoryPayloadSchema: z.ZodObject<{ entries: z.ZodArray; stage: z.ZodEnum<["scan", "load", "validate", "reload", "activate"]>; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; timestamp: z.ZodNumber; pluginName: z.ZodOptional; directoryName: z.ZodOptional; details: z.ZodOptional; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }, { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; }>, z.ZodObject<{ pluginName: z.ZodString; level: z.ZodEnum<["debug", "info", "warn", "error"]>; message: z.ZodString; data: z.ZodOptional; timestamp: z.ZodNumber; }, "strip", z.ZodTypeAny, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }, { message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; }>]>, "many">; }, "strip", z.ZodTypeAny, { entries: ({ message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; } | { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; })[]; }, { entries: ({ message: string; timestamp: number; pluginName: string; level: "error" | "info" | "debug" | "warn"; data?: unknown; } | { message: string; timestamp: number; source: "system"; level: "error" | "info" | "debug" | "warn"; stage: "scan" | "load" | "validate" | "reload" | "activate"; pluginName?: string | undefined; directoryName?: string | undefined; details?: unknown; })[]; }>; export type PluginRuntimeLogHistoryPayload = z.infer; /** * 插件用户操作载荷(前端 → 后端) */ export declare const PluginUserActionPayloadSchema: z.ZodObject<{ pluginName: z.ZodString; actionId: z.ZodString; operatorId: z.ZodOptional; payload: z.ZodOptional; }, "strip", z.ZodTypeAny, { pluginName: string; actionId: string; operatorId?: string | undefined; payload?: unknown; }, { pluginName: string; actionId: string; operatorId?: string | undefined; payload?: unknown; }>; export type PluginUserActionPayload = z.infer; /** * 操作员维度的插件设置更新载荷 */ export declare const PluginOperatorSettingsPayloadSchema: z.ZodObject<{ pluginName: z.ZodString; operatorId: z.ZodString; settings: z.ZodRecord; }, "strip", z.ZodTypeAny, { operatorId: string; pluginName: string; settings: Record; }, { operatorId: string; pluginName: string; settings: Record; }>; export type PluginOperatorSettingsPayload = z.infer; //# sourceMappingURL=plugin.schema.d.ts.map