import type { ArkmeExtensionPublishPage } from './types.js'; import type { ArkmeBundlePublishSource, ArkmeNativeBundlePublishSource } from './bundle-artifact.js'; import { ArkmeExtensionInstallStore } from './install-store.js'; import { ExtensionPublishClient } from './publish-client.js'; import type { ArkmeExtensionProfileInstaller } from './profile-installer.js'; import { type PersistentArkmeExtensionRuntimeState } from './persistent-runtime.js'; export { verifyExtensionResolutionSignature } from './signature.js'; import { type ArkmeExtensionCatalogItem, type ArkmeExtensionCatalogPage, type ArkmeExtensionCatalogSort, type ArkmeExtensionClassificationPage, type ArkmeExtensionClassificationTree, type ArkmeExtensionDeleteResult, type ArkmeExtensionEnabledResult, type ArkmeExtensionEnabledState, type ArkmeExtensionIconBytes, type ArkmeExtensionIconMediaType, type ArkmeExtensionIconResult, type ArkmeExtensionInstallPreview, type ArkmeExtensionPublishResult, type ArkmeExtensionShare, type ArkmeSharedExtensionDetail, type ArkmeExtensionPreviewBytes, type ArkmeExtensionPreviewGallery, type ArkmeExtensionPreviewMediaType, type ArkmeExtensionEditableVisibility, type ArkmeExtensionUpdateResolution, type ArkmeExtensionVisibility, type ArkmeExtensionInstallProgress, type ArkmeInstalledExtensionView, type DynamicCordisPackageInspectionLike, type DynamicCordisRunnerLike, type ArkmeExtensionAuditResult, type ArkmeExtensionAuditTrigger } from './types.js'; export interface ArkmeExtensionManagerOptions { artifactDirectory: string; trustedSigningKeys: string; dshRuntimeVersion?: string; profileDirectory?: string; profileInstaller?: Pick & Partial>; clientApiPath?: string; pluginInventory?: ArkmePluginInventoryLike; persistentRuntimeState?: (extensionId: string) => PersistentArkmeExtensionRuntimeState | undefined; } export interface ArkmePersistentClientState { extension_id: string; version: string; mount: boolean; instance_key?: string; generation?: number; reason?: 'not-installed' | 'version-mismatch' | 'runtime-mismatch' | 'disabled' | 'unavailable'; } export interface ArkmeBundleClientState { extension_id?: string; version: string; mount: boolean; instance_key?: string; generation?: number; reason?: 'not-installed' | 'version-mismatch' | 'disabled' | 'unavailable' | 'content-mismatch'; } export interface ArkmePluginInventorySnapshot { entries: ReadonlyArray<{ entryId: string; moduleName: string; enabled: boolean; fiberPhase: 'pending' | 'loading' | 'active' | 'failed' | 'unloading' | null; }>; } export interface ArkmePluginInventoryLike { list(): ArkmePluginInventorySnapshot | Promise; } export interface ArkmeExtensionApplyResult { extension_id: string; version: string; state: 'active' | 'installed' | 'failed'; installed: true; active: boolean; approval_required: boolean; restart_required: boolean; plugin_id?: string; package_id?: string; message: string; } export interface ArkmeExtensionUninstallResult { extension_id: string; installed: false; active: false; restart_required: boolean; message: string; } export declare function extensionCatalogPageLimit(limit?: number): number; export declare class ArkmeExtensionManager { readonly client: ExtensionPublishClient; readonly store: ArkmeExtensionInstallStore; private readonly runner; private readonly options; private readonly trustedKeys; private readonly dshRuntimeVersion; private readonly activeAgents; private readonly pendingProfileChanges; private enabledMutationTail; private readonly iconCache; private readonly previewCache; private readonly installationInstanceId; private readonly relocatedPersistentBundles; constructor(client: ExtensionPublishClient, store: ArkmeExtensionInstallStore, runner: DynamicCordisRunnerLike, options: ArkmeExtensionManagerOptions); /** Profile installation is Host-owned and does not need a live conversation Agent. */ canInstallWithoutAgent(): boolean; /** Reconcile this Profile once during Host startup; failures remain compatible with older services. */ reconcileInstallationMetrics(): Promise; /** Profile-only extensions can be removed without touching a legacy dynamic Agent. */ canUninstallWithoutAgent(extensionIdValue: string): boolean; installedProfilePackageName(extensionIdValue: string): string | undefined; /** Remove a previously linked author source from the Profile without deleting its source directory/tarball. */ removeOwnedProfilePackage(packageNameValue: string): Promise; inspectPackage(agent: unknown, pluginId: string, packageId: string): DynamicCordisPackageInspectionLike; publish(input: { agent: unknown; pluginId: string; packageId: string; packageName?: string; extensionId?: string; name: string; description: string; version: string; visibility: ArkmeExtensionVisibility; changelog?: string; githubRepositoryUrl?: string; idempotencyKey: string; signal?: AbortSignal; }): Promise; publishBundleSource(input: { source: ArkmeBundlePublishSource; extensionId?: string; name: string; description: string; visibility: ArkmeExtensionVisibility; changelog?: string; githubRepositoryUrl?: string; idempotencyKey: string; signal?: AbortSignal; }): Promise; publishNativeBundleSource(input: { source: ArkmeNativeBundlePublishSource; extensionId?: string; name: string; description: string; visibility: ArkmeExtensionVisibility; changelog?: string; githubRepositoryUrl?: string; idempotencyKey: string; signal?: AbortSignal; }): Promise; search(query?: string, limit?: number, signal?: AbortSignal): Promise; searchCatalog(input?: { query?: string; sort?: ArkmeExtensionCatalogSort; cursor?: string; limit?: number; ownerUserId?: number; excludeExtensionId?: string; }, signal?: AbortSignal): Promise; classificationTree(limit?: number, signal?: AbortSignal): Promise; classificationItems(input: { categoryId: string; query?: string; sort?: ArkmeExtensionCatalogSort; cursor?: string; limit?: number; }, signal?: AbortSignal): Promise; inspect(extensionId: string, signal?: AbortSignal): Promise; previewInstall(extensionId: string, version?: string, signal?: AbortSignal): Promise; auditExtension(input: { extensionId: string; trigger: ArkmeExtensionAuditTrigger; signal?: AbortSignal; }): Promise; myList(signal?: AbortSignal): Promise; publishSessions(limit?: number, offset?: number, signal?: AbortSignal): Promise; publishStatus(publishSessionId: string, signal?: AbortSignal): Promise; resumePublish(publishSessionId: string, signal?: AbortSignal): Promise; updateMetadata(input: { extensionId: string; name: string; description: string; visibility: ArkmeExtensionEditableVisibility; clientMutationId: string; signal?: AbortSignal; }): Promise; rotateShareLink(input: { extensionId: string; clientMutationId: string; signal?: AbortSignal; }): Promise; readSharedDetail(shareRef: string, signal?: AbortSignal): Promise; resolveSharedCatalogDetail(shareRef: string, signal?: AbortSignal): Promise; delete(extensionId: string, signal?: AbortSignal): Promise; setIcon(input: { extensionId: string; mediaType: ArkmeExtensionIconMediaType; data: Uint8Array; idempotencyKey: string; signal?: AbortSignal; }): Promise; readIcon(extensionIdValue: string, iconRefValue: string, signal?: AbortSignal): Promise; addPreview(input: { extensionId: string; mediaType: ArkmeExtensionPreviewMediaType; data: Uint8Array; idempotencyKey: string; signal?: AbortSignal; }): Promise; deletePreview(input: { extensionId: string; previewRef: string; expectedRevision: number; signal?: AbortSignal; }): Promise; reorderPreviews(input: { extensionId: string; orderedPreviewRefs: string[]; expectedRevision: number; signal?: AbortSignal; }): Promise; readPreview(extensionIdValue: string, previewRefValue: string, signal?: AbortSignal): Promise; listInstalled(): Promise; private persistentRuntimeMatches; private reconcilePersistentActivation; private effectivePersistentActivation; enabledState(extensionIdValue: string): Promise; persistentClientState(extensionIdValue: string, versionValue: string): Promise; bundleClientState(packageNameValue: string, versionValue: string, contentDigestValue: string): Promise; reportClientFailure(input: { identityKey: string; extensionId: string; version: string; clientInstanceKey?: string; clientContentDigest?: string; clientOwnerKey?: string; kind: string; message: string; }): Promise<{ handled: boolean; disabled: boolean; }>; setEnabled(input: { agent: unknown; extensionId: string; enabled: boolean; }): Promise; private setEnabledNow; updates(signal?: AbortSignal): Promise; apply(input: { agent: unknown; extensionId: string; version?: string; signal?: AbortSignal; onProgress?: (progress: ArkmeExtensionInstallProgress) => void; }): Promise; private applyLegacyV1; private applyNativeBundleV3; private applyBundleV2; uninstall(input: { agent: unknown; extensionId: string; }): Promise; private reportOpen; private reportInstallationState; private syncInstallationSnapshot; restartProfileChange(extensionIdValue: string): Promise<{ restarting: true; }>; private installedClientInstanceKey; private installedClientContentDigest; private profileExtensionOwnerConflicts; private refreshPersistentClientWrappers; private repairRelocatedPersistentPaths; private resolveRelocatedPersistentArtifact; private profileDependencyTargets; private reconcileProfileClientOwners; private assertCompatible; private removeLegacyBundle; private rollbackLegacyProfileInstall; private removeSupersededProfilePackage; private removeProfilePackages; private restorePreviousProfilePackage; private removeArtifact; private writeActivation; private resolveLegacyBundlePath; private profileContains; private restoreDisabledProfileLayers; private rememberActivationRestart; private persistArtifact; } //# sourceMappingURL=manager.d.ts.map