Contract status
Canonical interface contract
This page is based on the actual implementation in:
platform.sec-admn.com-2/packages/app-sdk/src/imports.jsplatform.sec-admn.com-2/sdk/packages/manifest/src/index.tsplatform.sec-admn.com-2/docs/platform-app-package-format.md
Why this page matters
The manifest is the contract the platform uses to understand what a module consumes, exposes, extends, and renders. If the manifest is wrong, the platform cannot wire the module safely.Two manifest shapes in v1
The original repo contains two closely related manifest models:- The platform package-import manifest used by
packages/app-sdk - The SDK validator manifest used by
@aiconnected/manifest
Golden path example
Use this as a starting point for importer-facing module packages:Platform app package manifest
The importer-oriented manifest uses this shape:schemaVersionappinputsoutputsextensionPointsextendspermissionsmetadataui.components
Valid app categories
Frompackages/app-sdk/src/imports.js:
customer-facingoperationstraining
Valid contract kinds
Frompackages/app-sdk/src/imports.js:
actioncapabilitycontextdataevent
Valid extension modes
Frompackages/app-sdk/src/imports.js:
feature-extensionruntime-channelsidecar
Key normalization behavior
The manifest normalizer supports multiple aliases while producing a canonical shape:schemaVersionorschema_versionapp.keyorkeyextensionPointsorextension_pointstargetApportarget_appfeatureKeyorfeature_keyui.componentsoruiComponents
App key rules
The importer uses this kebab-case app key regex:chat and kb-studio.
SDK validator manifest
The@aiconnected/manifest package validates a more function-oriented manifest:
SDK validator rules
Fromsdk/packages/manifest/src/index.ts:
app_idmust be kebab-caseversionmust be semverfunctionsmust be an array- each function name must be
snake_case - each function endpoint must start with
/api/ event_emittedandevents_consumedmust usenoun.verbformat- UI component names must be
PascalCase - full-page components require a route
- UI permissions arrays must not be empty
UI component rules
The validator defines these component types:full_pagewidgetoverlay
full_pagepanelwidgetsettings
Importer behavior
The package-format doc states:- required inputs and extensions must be satisfiable by the current app catalog
- the importer blocks registration if a required dependency cannot be satisfied
- if only one compatible provider exists, the importer stores that connection automatically
- warns on multiple compatible providers
- warns when no outputs are declared
- warns when the package declares no inputs, outputs, or extensions
- generates stable connection keys using
createConnectionKey()
Common validation and assessment failures
Importer-side failures
Examples directly implied bypackages/app-sdk/src/imports.js:
schema_version_unsupportedapp_key_missingapp_key_invalidapp_category_missingapp_category_invalidduplicate_input_keyduplicate_output_keyduplicate_extension_point_keycontract_key_invalidextension_target_invalidextension_feature_invalidrequired_input_missingextension_target_missingextension_feature_missing
Validator-side failures
Examples directly implied bysdk/packages/manifest/src/index.ts:
MISSING_APP_IDINVALID_APP_ID_FORMATMISSING_VERSIONINVALID_VERSION_FORMATMISSING_FUNCTION_NAMEINVALID_FUNCTION_NAMEINVALID_METHODMISSING_ENDPOINTINVALID_ENDPOINT_PREFIXINVALID_EVENT_NAMEMISSING_COMPONENT_NAMEINVALID_COMPONENT_NAMEINVALID_COMPONENT_TYPE
What to do when validation fails
- Fix app key format first.
- Fix category and contract kind issues next.
- Remove duplicate input, output, or extension-point keys.
- Ensure every required input has at least one catalog provider.
- Ensure every required extension target exists and exposes the requested feature key.
- Align route names, UI component names, and event names with validator rules.
v1 reality vs v2 target
Implemented in v1
- import-time manifest normalization
- explicit assessment with warnings and blocking issues
- manifest validator with structured error codes
Carry forward to v2
- the importer assessment model
- stable connection key generation
- explicit required-versus-optional dependency behavior
Known mismatch or migration risk
- v1 has two manifest contracts instead of one
- the importer model is app-and-contract oriented, while the validator model is function oriented
- UI component enums do not match perfectly between packages