@ottili/extension-sdk
v1.0.13
Published
Stable SDK for approved Ottili extensions (SoT §27, §34). Exposes only contracts and core helpers — no Foundation private internals.
Readme
@ottili/extension-sdk
Stable SDK for approved Ottili extensions (SoT \u00a727, \u00a734). Exposes only contracts and public helpers — no Foundation private internals.
Scope
This package is the safe surface third-party and first-party extension authors use to declare
an extension manifest, declare contributions, validate compatibility against the Foundation
version, and reason about the extension lifecycle. It depends on @ottili/foundation-contracts
and @ottili/foundation-core but does not reach into runtime internals.
Exports
ExtensionManifestBuilder— fluent, typed builder forExtensionManifest.- Contribution builders:
RouteContributionBuilder,NavigationContributionBuilder,CommandContributionBuilder,SettingsContributionBuilder,WidgetContributionBuilder,ActionContributionBuilder,CapabilitySurfaceBuilder,PermissionBuilder,SearchProviderBuilder,EventTopicBuilder. parseVersion,parseSemverRange,satisfiesSemverRange,compareSemver— safe semver helpers.checkExtensionCompatibility,isExtensionCompatible— Foundation/product version checks.isExtensionActive,isExtensionTerminal,nextExtensionState,missingPermissions,hasAllPermissions,canInstallExtension— lifecycle guards.
Usage
import {
ExtensionManifestBuilder,
RouteContributionBuilder,
CommandContributionBuilder,
EventTopicBuilder,
} from "@ottili/extension-sdk";
const manifest = new ExtensionManifestBuilder("acme.todo", "product-addon", "acme.todo.name")
.version("1.0.0")
.publisher("Acme GmbH")
.compatibility(">=1.0.0 <2.0.0")
.requestPermission("acme:read")
.contributeRoute(new RouteContributionBuilder("acme.home", "/apps/acme"))
.contributeCommand(
new CommandContributionBuilder(
"acme.run",
["extension", "acme"],
"run",
"acme.run.action",
).risk("medium"),
)
.contributeEventTopic(new EventTopicBuilder("acme.todo.changed"))
.build();