import type { Config } from '../../config/schema.js'; import type { AgentService } from '../../agent/service.js'; import type { ChannelManager } from '../../channels/manager.js'; import type { ExtensionLoader } from '../../extensions/loader.js'; import type { AgentSkillAvailabilityEntry, AgentSkillAvailabilityPayload, SkillCatalogEntry, SkillCatalogRuntimeMeta } from '../../agent/agent-manager.js'; import type { ManagedSkillListItem } from '../../agent/skills/managed-store.js'; import type { SkillMarkdownPreviewPayload } from '../../agent/skills/types.js'; import type { MarketplaceCategoryOption, SkillsStoreListParams, UnifiedMarketplaceListResponse, UnifiedMarketplacePackageDetail } from '../../agent/skills/skills-marketplace.js'; import type { MarketplacePackageDetail } from '../../agent/skills/marketplace/adapters/store/store-api-client.js'; import type { HubPullResult } from '../../agent/skills/hub-pull.js'; import { type SkillInstallTarget } from '../../agent/skills/install-target.js'; export interface GatewayMarketplaceServiceOptions { getConfig: () => Config; getAgentService: () => AgentService; getExtensionLoader: () => ExtensionLoader | null; getChannelManager: () => ChannelManager; getWorkspacePath: () => string; saveConfig: (config: Config) => Promise<{ saved: boolean; error?: string; }>; emit: (type: string, payload: unknown) => void; } export interface SkillInstallAvailability { skillId: string; skillName?: string; loaded: boolean; enabled?: boolean; defaultAgentId: string; availableForDefaultAgent?: boolean; unavailableReason?: AgentSkillAvailabilityEntry['unavailableReason']; diagnostics: SkillCatalogRuntimeMeta['diagnostics']; } export interface SkillInstallResultPayload { skillId: string; path: string; target?: SkillInstallTarget; availability: SkillInstallAvailability; } export interface SkillSourceInstallOptions { source: string; ref?: string; path?: string; skillId?: string; target?: SkillInstallTarget; force?: boolean; strictScan?: boolean; } export interface SkillSourceInstallResultPayload extends SkillInstallResultPayload { source: string; kind: HubPullResult['kind']; contentHash: string; } export interface ExtensionMarketplacePackageDetailPayload extends MarketplacePackageDetail { installability: { available: boolean; reason?: string; sha256?: string; }; manifest?: Record; packageSummary?: { dependencyCount: number; lifecycleScripts: string[]; }; } export declare class GatewayMarketplaceService { private readonly opts; constructor(opts: GatewayMarketplaceServiceOptions); private resolveInstallTarget; getSkillsApi(): { catalog: SkillCatalogEntry[]; managed: ManagedSkillListItem[]; } & SkillCatalogRuntimeMeta; getSkillsStatusApi(): SkillCatalogRuntimeMeta; getAgentSkillsApi(agentId: string): AgentSkillAvailabilityPayload; getSkillMarkdownSource(skillName: string): SkillMarkdownPreviewPayload | null; deleteSkill(skillId: string, target?: SkillInstallTarget): void; installSkillZip(buffer: Buffer, opts: { skillId?: string; overwrite?: boolean; target?: SkillInstallTarget; }): SkillInstallResultPayload; reloadSkills(): void; patchSkillEnabled(skillName: string, enabled: boolean): void; fetchSkillsCatalog(params: SkillsStoreListParams, provider?: string): Promise; fetchSkillsCategories(provider?: string, locale?: string): Promise<{ items: MarketplaceCategoryOption[]; }>; fetchSkillsPackageDetail(packageName: string, provider?: string): Promise; installSkill(opts: { name: string; version?: string; overwrite?: boolean; provider?: string; target?: SkillInstallTarget; }): Promise; installSkillFromSource(opts: SkillSourceInstallOptions): Promise; getSkillsProvider(): Promise<{ provider: string; displayName: string; }>; /** All registered marketplace providers (built-in + extension-contributed). */ getSkillsProviders(): Promise>; private getDefaultAgentId; private getInstallAvailability; /** xopc-store extension package preview (type must be `extension`). */ fetchExtensionPackageDetail(packageName: string): Promise; /** * Install an extension from xopc-store into `~/.xopc/extensions`, append id * to `extensions.enabled`, refresh the loader, and emit `config.reload`. * Returns `requiresGatewayRestart=true` when a new channel plugin would have * to wire into the running gateway (channel registration cannot hot-patch). */ installExtension(opts: { name: string; version?: string; overwrite?: boolean; }): Promise<{ extensionId: string; version: string; requiresGatewayRestart: boolean; }>; /** Remove a user-installed extension (global or per-agent dir) from disk and config. */ uninstallExtension(extensionId: string): Promise<{ requiresGatewayRestart: boolean; }>; private mergeExtensionEnabledIntoConfig; private mergeExtensionRemovedFromEnabledConfig; }