Kun Extension API Reference
August 14, 2026 · View on GitHub
Extension API: v1.2.0 (stable) Compatible Kun versions: use the extension Manifest's
engines.kunand the compatibility matrix 中文:Kun Extension API 参考
This is the standalone public API reference for @kun/extension-api, @kun/extension-react, and @kun/extension-test. The Chinese behavioral guides remain normative; this page precisely records package entry points, core services, and the export inventory generated from public TypeScript modules. A source path absent from this inventory or a package exports map is not supported API.
Versions and authoritative sources
All three SDKs are currently version 1.2.0 for Extension API major 1. Hosts continue to accept v1.1 and v1.0 manifests. v1.2 adds optional composer-context, media scheduling, bounded documents/archives, and real local audio/visual-analysis surfaces without changing existing v1.1 or v1.0 methods. Manifest fields use the generated JSON Schema and ExtensionManifestSchema as their machine-enforced sources. Published .d.ts declarations and runtime Schemas govern Host APIs, events, and payloads.
Any public entry-point, export, or reachable .d.ts change updates the public surface SHA-256. The documentation gate requires this page and the API Changelog to move together. Updating only a digest without documenting compatibility impact does not complete release review.
Packages and entry points
| Package | Purpose | Only supported entry points |
|---|---|---|
@kun/extension-api | Framework-neutral Manifest, lifecycle, Host client, Agent, tool, Provider, account, storage, network, UI, media, job, and artifact contracts | @kun/extension-api; plus read-only @kun/extension-api/manifest.schema.json |
@kun/extension-react | React Provider, hooks, and status components over ExtensionHostClient | @kun/extension-react |
@kun/extension-test | Fake Host/transport/services and ExtensionTestHarness | @kun/extension-test |
Do not import src/*, dist/*, Kun runtime modules, renderer stores, Electron IPC, or any undeclared subpath. A file's presence in the development repository or packaged application does not grant a SemVer guarantee.
Framework-neutral Host API
A Node entry normally receives an ExtensionContext created by the Host. A Webview creates ExtensionHostClient from its narrow Host-provided HostTransport. Callers never supply extension identity, runtime tokens, or authorization outcomes.
import { ExtensionHostClient, type ExtensionContext, type HostTransport } from '@kun/extension-api'
export async function activate(context: ExtensionContext): Promise<void> {
context.subscriptions.add(
await context.commands.registerCommand('refresh', async () => ({ refreshed: true }))
)
}
export function createViewClient(transport: HostTransport): ExtensionHostClient {
return new ExtensionHostClient(transport)
}
ExtensionContext services
| Property | Public contract |
|---|---|
subscriptions, onDidError | Lifecycle disposal and structured extension errors |
commands | Declared command registration, execution, and handler disposal |
storage, configuration | Extension/workspace-isolated state and declarative settings; never secrets |
network | Permission/domain/account-constrained broker fetch |
ui | Theme, locale, View state, Host messages, notifications, and main-conversation context attachment |
agent, threads | Extension-owned Agent runs, events, steer/cancel, and thread projections |
tools | Manifest-declared tool registration, progress, cancellation, and bounded results |
modelProviders | Custom Provider adapter probe/listModels/stream/cancel/countTokens |
authentication | Redacted accounts, protected auth sessions, authenticated fetch, and explicit secret reveal |
media | Protected selection, opaque handles, bounded metadata/probe, View resource leases, and brokered FFmpeg job creation |
jobs | Extension-owned durable job get/list/subscribe/cancel; no generic extension worker or jobs.start |
workspace, workspaceContext | File operations within granted roots and current workspace/trust projection |
Media methods require the least-privilege media.read, media.process, or media.export grants plus applicable workspace permissions. pickFiles, pickSaveTarget, openViewResource, and performArtifactAction require a protected interactive surface; in pure headless execution they return a structured interaction-required or unavailable error. performArtifactAction accepts only an opaque artifact ID plus open/reveal; the Host derives its owner, exact version, and workspace. Handles, artifact references, action responses, and kun-media:// leases never substitute for absolute paths. Lease URLs are short-lived View resources and must not be persisted.
See Extension media and background jobs for the picker, playback, FFmpeg, artifact, headless, and troubleshooting contract.
Job observation requires jobs.manage. jobs.subscribe() replays retained events after an optional opaque cursor, then delivers live bounded events; replayGap tells callers to refresh from the supplied snapshot. Cancellation is idempotent and terminal jobs preserve their original outcome. Only supported core brokers such as media.startFfmpegJob(), audio analysis, and archive creation can create jobs; extensions cannot register arbitrary workers.
ui.showNotification(options) returns the selected action id; dismissal, the 45-second timeout, workbench lease expiry, or extension disablement returns undefined. It never returns an internal notification instance ID and does not require a Webview Session.
ui.attachComposerContext(request) is available only to an authenticated interactive Extension View with ui.actions. A request carries at most 16 KiB of depth- and entry-bounded, path-free JSON reference data. The Host revalidates the current View, exact extension version, workspace trust, and permission, then adds unforgeable extension/View/workspace provenance. A successful result appears as removable context in the matching workspace's main composer and is consumed once by the next successfully created main-conversation turn. The model receives it only as untrusted reference data in user-message content, never in the stable system prefix; a Node Host extension cannot use this method to bypass View identity.
Runtime Schemas and types
Exports ending in Schema are runtime validation values. Adjacent TypeScript types/interfaces describe validated static shapes, such as AgentRunSchema/AgentRun and ToolResultSchema/ToolResult. Inputs derived with z.input can omit fields with Schema defaults, while output types reflect normalized results.
A Manifest tool's outputSchema describes and validates ToolResult.content, not the complete ToolResult envelope. Omitting it applies generic JSON, size, and policy constraints; it never disables output limits.
ToolResult and terminal JobResult may expose top-level generatedArtifacts. Each artifact contains durable opaque ownership, completion, media-handle, MIME, size, availability, and provenance metadata; it contains neither an absolute path nor an ephemeral playback URL. ResultPreviewSource can reference the artifact and media handle while retaining the v1.0 attachment/relative-path source fields.
React bindings
ExtensionViewProvider supplies a bound ExtensionHostClient. useTheme, useLocale, useViewState, useHostMessage, usePostHostMessage, useCommand, useAgentRun, useAccounts, useProviderStatus, and useConfiguration preserve framework-neutral semantics and grant no extra permission. ExtensionAsyncBoundary and AgentRunStatus are optional Host-aware presentation components.
Test harness
createExtensionTestHarness/ExtensionTestHarness compose FakeHostTransport with fake storage, workspace, Agent, tool, Provider, account, Webview, media, and durable-job services. FakeMediaService, FakeJobService, and createGeneratedArtifactFixture() provide deterministic protected selection, probe, FFmpeg admission, progress, restart, cancellation-race, executable-unavailable, revocation, and artifact behavior without real media tools or wall-clock waits. Tests still declare production-equivalent permission/workspace/account scopes. A fake service never makes the production broker permissive.
Generated public export inventory
The following region is calculated by node scripts/generate-extension-api-reference.mjs from package exports, TypeScript module symbols, and the in-memory .d.ts graph reachable from public entries. Manual edits fail npm run check:extension-docs.
| SDK package | Version | Public entry points | Public exports | Public surface SHA-256 |
|---|---|---|---|---|
@kun/extension-api | 1.2.0 | ../manifest.schema.json | 498 | a7d676f0869a5c40f73bff7b30e567e7c5efa0536b0650b1fd30ee82551d6cf8 |
@kun/extension-react | 1.2.0 | . | 22 | e2099a64dc22c05056dca0c599bafdfb22702b6d57e9b60edd2154b165323322 |
@kun/extension-test | 1.2.0 | . | 16 | fccbdd3fb3400ce179f8d6c3ae1d191bfe3488ef125577423f3d2b3f4fad851d |
| SDK package | Source module | Runtime exports | Type exports |
|---|---|---|---|
@kun/extension-api | accounts | AccountSchemaAccountSessionSchemaAccountStatusSchemaAuthenticatedFetchRequestSchemaAuthenticationProviderDeclarationSchemaAuthenticationTypeSchemaCreateAccountSessionRequestSchemaCredentialReferenceSchemaListAccountsRequestSchemaProviderBindingSchemaRevealSecretRequestSchema | AccountAccountSessionAccountStatusAuthenticatedFetchRequestAuthenticationProviderDeclarationAuthenticationTypeCreateAccountSessionRequestCredentialReferenceListAccountsRequestProviderBindingRevealSecretRequest |
@kun/extension-api | agent | AgentBudgetSchemaAgentCancelRequestSchemaAgentCreateRunRequestSchemaAgentCreateRunResponseSchemaAgentInputSchemaAgentMutationResultSchemaAgentProfileDeclarationSchemaAgentRunEventSchemaAgentRunSchemaAgentRunStateSchemaAgentSteerRequestSchemaAgentSubscribeRequestSchemaExtensionThreadProjectionSchemaExtensionVisibilitySchemaListOwnThreadsRequestSchemaListOwnThreadsResponseSchemaResolvedAgentProfileSchema | AgentBudgetAgentCancelRequestAgentCreateRunRequestAgentCreateRunResponseAgentInputAgentMutationResultAgentProfileDeclarationAgentProfileDeclarationInputAgentRunAgentRunEventAgentRunStateAgentSteerRequestAgentSubscribeRequestExtensionThreadProjectionExtensionVisibilityListOwnThreadsRequestListOwnThreadsResponseResolvedAgentProfile |
@kun/extension-api | artifacts | ArtifactHostActionRequestSchemaArtifactHostActionResultSchemaArtifactHostActionSchemaArtifactMediaHandleIdSchemaGeneratedArtifactAvailabilitySchemaGeneratedArtifactIdSchemaGeneratedArtifactMediaKindSchemaGeneratedArtifactProvenanceSchemaGeneratedArtifactSchemaGeneratedArtifactsSchema | ArtifactHostActionArtifactHostActionRequestArtifactHostActionResultArtifactMediaHandleIdGeneratedArtifactGeneratedArtifactAvailabilityGeneratedArtifactIdGeneratedArtifactInputGeneratedArtifactMediaKindGeneratedArtifactProvenanceGeneratedArtifacts |
@kun/extension-api | client | ExtensionHostClient | — |
@kun/extension-api | common | ContributionIdSchemaExtensionIdentitySchemaextensionIdOfExtensionIdSchemaExtensionNameSchemaJsonObjectSchemaJsonValueSchemaLocalIdSchemaPageInfoSchemaPageRequestSchemaPublisherSchemaqualifiedContributionIdRelativePathSchemaSEMVER_PATTERNSemverRangeSchemaSemverSchema | ExtensionIdentityJsonObjectJsonPrimitiveJsonValuePageInfoPageRequest |
@kun/extension-api | compatibility | ApiNegotiationRequestSchemaApiNegotiationResultSchemaCompatibilityDiagnosticSchemaCompatibilityDimensionSchemaCompatibilityReportSchemanegotiateApiVersionsupportedApiMajors | ApiNegotiationRequestApiNegotiationResultCompatibilityDiagnosticCompatibilityDimensionCompatibilityReport |
@kun/extension-api | composer-context | ComposerContextAttachmentRequestSchemaComposerContextAttachmentSchemaComposerContextProvenanceSchemaComposerContextReferenceSchemaDevPreviewComposerContextProvenanceSchemaExtensionComposerContextProvenanceSchemaMAX_COMPOSER_CONTEXT_ATTACHMENTSMAX_COMPOSER_CONTEXT_REFERENCE_BYTESWorkspaceViewComposerContextProvenanceSchema | ComposerContextAttachmentComposerContextAttachmentRequestComposerContextProvenance |
@kun/extension-api | content-scripts | HostContentScriptContextSchemaHostContentScriptDiagnosticSchema | HostContentScriptContextHostContentScriptDiagnosticKunHostContentScriptApi |
@kun/extension-api | errors | DiagnosticSchemaEXTENSION_ERROR_CODESExtensionApiErrorExtensionErrorCodeSchemaExtensionErrorSchema | DiagnosticExtensionErrorCodeExtensionErrorData |
@kun/extension-api | extension-context | createExtensionContext | ExtensionContext |
@kun/extension-api | jobs | JobCancellationResultSchemaJobCancelRequestSchemaJobCursorSchemaJobErrorSchemaJobEventNotificationSchemaJobEventSchemaJobEventTypeSchemaJobFilterSchemaJobGetRequestSchemaJobIdSchemaJobListRequestSchemaJobPageSchemaJobProgressSchemaJobReferenceSchemaJobResultSchemaJobSnapshotSchemaJobStateSchemaJobSubscribeRequestSchemaJobSubscriptionResponseSchemaJobTerminalStateSchema | JobCancellationResultJobCancelRequestJobCursorJobErrorJobEventJobEventNotificationJobEventTypeJobFilterJobGetRequestJobIdJobListRequestJobPageJobProgressJobReferenceJobResultJobResultInputJobSnapshotJobStateJobSubscribeRequestJobSubscriptionResponseJobTerminalState |
@kun/extension-api | lifecycle | ActivationContextDataSchemaDisposableStoreEmittertoDisposableWorkspaceContextSchema | ActivateActivationContextDataDeactivateDisposableDisposeLikeEventStateMigrationStateMigrationContextWorkspaceContext |
@kun/extension-api | manifest | ActionContributionSchemaActivationEventSchemaCommandContributionSchemaContextMenuContributionSchemaCURRENT_EXTENSION_API_VERSIONCURRENT_MANIFEST_VERSIONExtensionContributionsSchemaExtensionManifestSchemaExternalBrowserContributionSchemaExternalBrowserSiteSchemaHostContentScriptContributionSchemaHostSurfaceMatcherSchemaMANIFEST_CONTRIBUTION_PERMISSION_REQUIREMENTSNotificationContributionSchemaparseExtensionManifestrequiredManifestPermissionsresolveExtensionManifestLocaleResultPreviewContributionSchemaSettingsContributionSchemaSUPPORTED_EXTENSION_API_VERSIONSViewContainerContributionSchemaViewContributionSchema | ActionContributionActivationEventCommandContributionContextMenuContributionExtensionContributionsExtensionContributionsInputExtensionManifestExtensionManifestInputExternalBrowserContributionExternalBrowserSiteHostContentScriptContributionHostSurfaceMatcherNotificationContributionResultPreviewContributionSettingsContributionViewContainerContributionViewContribution |
@kun/extension-api | manifest-localization | ManifestContributionLocalizationsSchemaManifestLocaleTagSchemaManifestLocalizationSchemaManifestLocalizationsSchema | ManifestContributionLocalizationsManifestLocaleTagManifestLocalizationManifestLocalizations |
@kun/extension-api | media-archive | MAX_MEDIA_ARCHIVE_ENTRIESMAX_MEDIA_ARCHIVE_INLINE_BYTESMEDIA_ERROR_CODESMediaArchiveInlineEntrySchemaMediaArchiveInputEntrySchemaMediaArchiveJobResultSchemaMediaArchivePathSchemaMediaErrorCodeSchemaMediaErrorSchemaMediaStartArchiveJobRequestSchemaMediaStartArchiveJobResultSchema | MediaArchiveInlineEntryMediaArchiveInputEntryMediaArchiveJobResultMediaArchivePathMediaErrorMediaErrorCodeMediaStartArchiveJobRequestMediaStartArchiveJobResultParsedMediaStartArchiveJobRequest |
@kun/extension-api | media-audio-analysis | MediaAudioAnalysisCapabilitiesSchemaMediaAudioAnalysisCapabilitySchemaMediaAudioAnalysisKindSchemaMediaAudioAnalysisResultSchemaMediaAudioAnalysisUnavailableCodeSchemaMediaBeatAnalysisResultSchemaMediaSilenceAnalysisResultSchemaMediaStartAudioAnalysisJobRequestSchemaMediaStartAudioAnalysisJobResultSchemaMediaStartBeatAnalysisJobRequestSchemaMediaStartSilenceAnalysisJobRequestSchemaMediaStartSyncFeaturesAnalysisJobRequestSchemaMediaSyncFeaturesAnalysisResultSchema | MediaAudioAnalysisCapabilitiesMediaAudioAnalysisCapabilityMediaAudioAnalysisKindMediaAudioAnalysisResultMediaAudioAnalysisUnavailableCodeMediaBeatAnalysisResultMediaSilenceAnalysisResultMediaStartAudioAnalysisJobRequestMediaStartAudioAnalysisJobResultMediaStartBeatAnalysisJobRequestMediaStartSilenceAnalysisJobRequestMediaStartSyncFeaturesAnalysisJobRequestMediaSyncFeaturesAnalysisResultParsedMediaStartAudioAnalysisJobRequest |
@kun/extension-api | media-core | containsAsciiControlCharactersMAX_MEDIA_OTIO_TEXT_BYTESMAX_MEDIA_SUBTITLE_TEXT_BYTESMAX_MEDIA_TEXT_BYTESMediaCacheFormatSchemaMediaCapabilitiesSchemaMediaCapabilityFeatureSchemaMediaCreateCacheTargetRequestSchemaMediaCreateCacheTargetResultSchemaMediaExecutableCapabilitySchemaMediaHandleIdSchemaMediaHandleModeSchemaMediaJobPrioritySchemaMediaJobSchedulingSchemaMediaKindSchemaMediaLeaseIdSchemaMediaMetadataSchemaMediaOpenViewResourceRequestSchemaMediaPickerFilterSchemaMediaPickFilesRequestSchemaMediaPickFilesResultSchemaMediaPickSaveTargetRequestSchemaMediaPickSaveTargetResultSchemaMediaProbeRequestSchemaMediaProbeResultSchemaMediaProbeStreamSchemaMediaReadTextRequestSchemaMediaReadTextResultSchemaMediaReleaseRequestSchemaMediaReleaseResultSchemaMediaResourceLeaseSchemaMediaStartFfmpegJobRequestSchemaMediaStartFfmpegJobResultSchemaMediaStatRequestSchemaMediaStreamDispositionSchemaMediaTextOutputMimeTypeSchemaMediaTextOutputSchemaRationalSchema | MediaCacheFormatMediaCapabilitiesMediaCapabilityFeatureMediaCreateCacheTargetRequestMediaCreateCacheTargetResultMediaExecutableCapabilityMediaHandleIdMediaHandleModeMediaJobPriorityMediaJobSchedulingMediaKindMediaLeaseIdMediaMetadataMediaOpenViewResourceRequestMediaPickerFilterMediaPickFilesRequestMediaPickFilesResultMediaPickSaveTargetRequestMediaPickSaveTargetResultMediaProbeRequestMediaProbeResultMediaProbeStreamMediaReadTextRequestMediaReadTextResultMediaReleaseRequestMediaReleaseResultMediaResourceLeaseMediaStartFfmpegJobRequestMediaStartFfmpegJobResultMediaStatRequestMediaStreamDispositionMediaTextOutputMediaTextOutputMimeTypeRational |
@kun/extension-api | media-visual-analysis | MediaAnalyzeVisualFramesRequestSchemaMediaAnalyzeVisualFramesResultSchemaMediaEmbedVisualQueryRequestSchemaMediaEmbedVisualQueryResultSchemaMediaInstallVisualModelRequestSchemaMediaVisualAdapterBindingSchemaMediaVisualFrameSampleSchemaMediaVisualModelDescriptorSchemaMediaVisualModelFileSchemaMediaVisualModelInstallReceiptSchemaMediaVisualModelStatusSchemaMediaVisualUnavailableCodeSchema | MediaAnalyzeVisualFramesRequestMediaAnalyzeVisualFramesResultMediaEmbedVisualQueryRequestMediaEmbedVisualQueryResultMediaInstallVisualModelRequestMediaVisualAdapterBindingMediaVisualFrameSampleMediaVisualModelDescriptorMediaVisualModelFileMediaVisualModelInstallReceiptMediaVisualModelStatusMediaVisualUnavailableCode |
@kun/extension-api | methods | EXTENSION_VIEW_SAFE_METHODSisExtensionViewSafeMethod | ExtensionViewSafeMethod |
@kun/extension-api | permissions | hasPermissionNETWORK_PERMISSION_PATTERNpermissionMatchesPermissionSchemaPROVIDER_PERMISSION_PATTERNScopedPermissionSchemaSTATIC_PERMISSIONSStaticPermissionSchema | PermissionScopedPermissionStaticPermission |
@kun/extension-api | providers | ModelCapabilitiesSchemaModelContentPartSchemaModelMessageSchemaModelModalitySchemaModelProviderDeclarationSchemaModelProviderRequestSchemaModelProviderStreamEventSchemaModelToolSchemaModelUsageSchemaProviderModelSchemaProviderProbeResultSchemaProviderStatusSchema | ModelCapabilitiesModelContentPartModelMessageModelModalityModelProviderAdapterModelProviderDeclarationModelProviderDeclarationInputModelProviderOperationContextModelProviderRequestModelProviderStreamEventModelToolModelUsageProviderModelProviderProbeResultProviderStatus |
@kun/extension-api | registry | ExtensionRegistryEntrySchemaExtensionRegistrySchemaExtensionSourceSchemaInstalledExtensionVersionSchemaPermissionGrantSchemaSignatureStatusSchema | ExtensionRegistryExtensionRegistryEntryExtensionSourceInstalledExtensionVersionPermissionGrantSignatureStatus |
@kun/extension-api | services | ConfigurationChangeEventSchemaHostMessageSchemaLocaleSchemaNetworkRequestSchemaNetworkResponseSchemaNotificationOptionsSchemaRESULT_PREVIEW_OPEN_CHANNELResultPreviewOpenPayloadSchemaResultPreviewSourceSchemaStorageEntrySchemaStorageScopeSchemaThemeSchemaWorkspaceFileSchema | AgentApiAgentRunSubscriptionAuthenticationApiCommandsApiConfigurationApiConfigurationChangeEventHostMessageHostNotificationHostRequestContextHostRequestHandlerHostRequestOptionsHostTransportJobsApiJobSubscriptionLocaleMediaApiModelProvidersApiNetworkApiNetworkRequestNetworkResponseNotificationOptionsResultPreviewOpenPayloadResultPreviewSourceScopedStorageApiStorageApiStorageEntryStorageScopeThemeThreadsApiToolsApiUiApiWorkspaceApiWorkspaceFile |
@kun/extension-api | tools | ExtensionToolDeclarationSchemaToolInvocationSchemaToolProgressSchemaToolResultSchemaToolSideEffectsSchema | CancellationTokenExtensionToolDeclarationExtensionToolDeclarationInputExtensionToolHandlerToolInvocationToolInvocationContextToolProgressToolResultToolSideEffects |
@kun/extension-react | index | AgentRunStatusExtensionAsyncBoundaryExtensionViewProvideruseAccountsuseAgentRunuseCommanduseConfigurationuseExtensionClientuseHostMessageuseLocaleusePostHostMessageuseProviderStatususeThemeuseViewState | AgentRunHookResultAgentRunStatusPropsAsyncBoundaryPropsAsyncValueCommandHookResultConfigurationHookResultExtensionViewProviderPropsViewStateResult |
@kun/extension-test | extension-test-harness | createExtensionTestHarnessExtensionTestHarness | ExtensionTestHarnessOptions |
@kun/extension-test | fake-basic-services | createGeneratedArtifactFixtureFakeAgentServiceFakeStorageServiceFakeWorkspaceService | — |
@kun/extension-test | fake-job-service | FakeJobService | — |
@kun/extension-test | fake-media-service | FakeMediaService | — |
@kun/extension-test | fake-registration-services | FakeAccountServiceFakeProviderServiceFakeToolServiceFakeWebviewService | — |
@kun/extension-test | fake-transport | FakeClockFakeHostTransport | FakeTransportOptions |
Stability and deprecation
Public exports are SemVer-protected from release. A new optional capability is a compatible minor; removal, rename, stricter accepted input, or changed existing semantics requires a new major. A deprecation simultaneously names its replacement and earliest removal major in type declarations, both language references, Changelog, diagnostics, and migration guidance. Raw DOM selectors, private IPC/HTTP, and unexported paths never enter this inventory and do not become stable merely because third parties use them.