@kumwe/studio-protocol 0.1.0-alpha.6 → 0.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +67 -7
  2. package/THIRD_PARTY_NOTICES.md +9 -0
  3. package/dist/generated/schema-models.d.ts +2750 -0
  4. package/dist/generated/schema-models.d.ts.map +1 -0
  5. package/dist/generated/schema-models.js +1 -0
  6. package/dist/guards.d.ts.map +1 -1
  7. package/dist/guards.js +1 -374
  8. package/dist/host-failure.d.ts +16 -0
  9. package/dist/host-failure.d.ts.map +1 -0
  10. package/dist/host-failure.js +1 -0
  11. package/dist/index.d.ts +6 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -4
  14. package/dist/release.d.ts +8 -0
  15. package/dist/release.d.ts.map +1 -0
  16. package/dist/release.js +1 -0
  17. package/dist/schemas.d.ts +22 -0
  18. package/dist/schemas.d.ts.map +1 -1
  19. package/dist/schemas.js +1 -102
  20. package/dist/types.d.ts +435 -2
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/types.js +1 -3
  23. package/package.json +7 -3
  24. package/schemas/authoring-http-vector.schema.json +195 -0
  25. package/schemas/authoring-http.schema.json +505 -0
  26. package/schemas/authoring-message-catalog.schema.json +45 -0
  27. package/schemas/authoring-save.schema.json +188 -0
  28. package/schemas/authoring-session.schema.json +151 -0
  29. package/schemas/authoring-target.schema.json +160 -0
  30. package/schemas/authoring-web-vector.schema.json +236 -0
  31. package/schemas/binding-projection-vector.schema.json +127 -0
  32. package/schemas/block-definition.schema.json +10 -1
  33. package/schemas/common.schema.json +45 -0
  34. package/schemas/host-error.schema.json +22 -1
  35. package/schemas/host-operations.schema.json +16 -0
  36. package/schemas/host-vector.schema.json +2 -0
  37. package/schemas/manifest.json +103 -9
  38. package/schemas/plugin-manifest.schema.json +1 -0
  39. package/schemas/renderer-web-vector.schema.json +273 -0
  40. package/schemas/reusable-content-type.schema.json +99 -0
  41. package/schemas/rich-text-projection.schema.json +12 -3
  42. package/schemas/rich-text.schema.json +156 -7
  43. package/schemas/studio-browser-assets.schema.json +376 -0
  44. package/schemas/studio-chart.schema.json +35 -0
  45. package/schemas/studio-config.schema.json +1 -33
  46. package/schemas/studio-deployment.schema.json +347 -0
  47. package/schemas/studio-drawing.schema.json +44 -0
  48. package/schemas/studio-money.schema.json +16 -0
  49. package/schemas/studio-presentation.schema.json +31 -0
  50. package/schemas/studio-release.schema.json +125 -0
  51. package/schemas/studio-table.schema.json +27 -0
  52. package/studio-release.json +35 -0
  53. package/dist/guards.js.map +0 -1
  54. package/dist/index.js.map +0 -1
  55. package/dist/schemas.js.map +0 -1
  56. package/dist/types.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -2,6 +2,11 @@ export declare const STUDIO_CONTRACT_VERSION: "0.1-draft";
2
2
  export type StudioContractVersion = typeof STUDIO_CONTRACT_VERSION;
3
3
  export declare const STUDIO_WIRE_PROTOCOL_VERSION: "0.1.0-draft.2";
4
4
  export type StudioWireProtocolVersion = typeof STUDIO_WIRE_PROTOCOL_VERSION;
5
+ /**
6
+ * Stable diagnostic carried with the canonical `invalid-request` category
7
+ * when a host refuses an operation from an obsolete session generation.
8
+ */
9
+ export declare const STUDIO_STALE_SESSION_GENERATION_DIAGNOSTIC_CODE: "studio.host/stale-session-generation";
5
10
  export type JsonPrimitive = boolean | null | number | string;
6
11
  export type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
7
12
  export interface JsonObject {
@@ -163,12 +168,23 @@ export interface BlockSlotDefinition {
163
168
  ordered: boolean;
164
169
  }
165
170
  export interface BlockPortDefinition {
171
+ /**
172
+ * Portable authoring hints. They select a Studio control/profile without
173
+ * exposing an editor implementation. A read-only port may still be bound by
174
+ * the host, but Studio never offers a value mutation for it.
175
+ */
176
+ authoring?: BlockPortAuthoringMetadata;
166
177
  id: LocalName;
167
178
  label: MessageReference;
168
179
  multiple: boolean;
169
180
  required: boolean;
170
181
  valueType: string;
171
182
  }
183
+ export interface BlockPortAuthoringMetadata {
184
+ control?: QualifiedName;
185
+ profile?: QualifiedName;
186
+ readOnly?: boolean;
187
+ }
172
188
  export interface RendererRequirement {
173
189
  capability: QualifiedName;
174
190
  surface: 'document' | 'email' | 'native' | 'preview' | 'web';
@@ -222,6 +238,63 @@ export interface BlockDefinition {
222
238
  type: BlockType;
223
239
  version: SemanticVersion;
224
240
  }
241
+ /** Canonical, renderer-neutral chart data. It carries no Chart.js configuration. */
242
+ export interface StudioChartDataset {
243
+ label: string;
244
+ values: number[];
245
+ }
246
+ export interface StudioChartSpec {
247
+ datasets: StudioChartDataset[];
248
+ labels: string[];
249
+ title?: string;
250
+ type: 'bar' | 'doughnut' | 'line' | 'pie';
251
+ }
252
+ export interface StudioDrawingPoint {
253
+ x: number;
254
+ y: number;
255
+ }
256
+ export interface StudioDrawingStroke {
257
+ color: string;
258
+ points: StudioDrawingPoint[];
259
+ width: number;
260
+ }
261
+ /** Bounded vector drawing data; never an SVG or canvas command stream. */
262
+ export interface StudioDrawingDocument {
263
+ alt: string;
264
+ height: number;
265
+ strokes: StudioDrawingStroke[];
266
+ width: number;
267
+ }
268
+ /** Decimal money uses a string so persistence never rounds through a binary float. */
269
+ export interface StudioMoneyValue {
270
+ amount: string;
271
+ currency: string;
272
+ }
273
+ /** Portable visual intent resolved by Studio renderers; it contains no CSS values or selectors. */
274
+ export interface StudioPresentationIntent {
275
+ align?: 'center' | 'end' | 'start' | 'stretch';
276
+ animation?: 'fade' | 'none' | 'parallax' | 'scale' | 'slide';
277
+ height?: 'auto' | 'content' | 'full' | 'viewport';
278
+ inverse?: boolean;
279
+ margin?: 'comfortable' | 'compact' | 'none' | 'spacious';
280
+ marker?: 'check' | 'decimal' | 'disc' | 'none';
281
+ padding?: 'comfortable' | 'compact' | 'none' | 'spacious';
282
+ position?: 'flow' | 'relative' | 'sticky';
283
+ print?: 'hide' | 'only' | 'show';
284
+ scrolling?: 'auto' | 'clip' | 'snap' | 'visible';
285
+ visibility?: {
286
+ compact?: 'hidden' | 'visible';
287
+ expanded?: 'hidden' | 'visible';
288
+ medium?: 'hidden' | 'visible';
289
+ };
290
+ width?: 'auto' | 'content' | 'full';
291
+ }
292
+ /** Canonical bounded table data used by static authoring and host query projections. */
293
+ export interface StudioTableDocument {
294
+ caption?: string;
295
+ columns: string[];
296
+ rows: string[][];
297
+ }
225
298
  export interface HostPortCapability {
226
299
  id: QualifiedName;
227
300
  operations: QualifiedName[];
@@ -327,7 +400,7 @@ export interface PluginEntryModule {
327
400
  path: PackageRelativePath;
328
401
  realm: PluginEntryRealm;
329
402
  }
330
- export type PluginContributionKind = 'block' | 'command' | 'design-vocabulary' | 'field-adapter' | 'inspector' | 'locale' | 'migration' | 'panel' | 'pattern' | 'renderer-capability' | 'test-fixture' | 'transform';
403
+ export type PluginContributionKind = 'authoring-target' | 'block' | 'command' | 'design-vocabulary' | 'field-adapter' | 'inspector' | 'locale' | 'migration' | 'panel' | 'pattern' | 'renderer-capability' | 'test-fixture' | 'transform';
331
404
  export interface PluginContributionDeclaration {
332
405
  executable?: boolean;
333
406
  id: QualifiedName;
@@ -441,6 +514,42 @@ export interface DesignVocabulary {
441
514
  recipes: ThemeRecipe[];
442
515
  version: SemanticVersion;
443
516
  }
517
+ /**
518
+ * The declarative payload behind a `field-adapter` contribution. Executable
519
+ * control code remains host-bound; this document is safe to validate and
520
+ * activate into an immutable contribution generation.
521
+ */
522
+ export interface FieldAdapterContribution {
523
+ contractVersion: StudioContractVersion;
524
+ control: QualifiedName;
525
+ description?: MessageReference;
526
+ extensions?: Record<QualifiedName, JsonValue>;
527
+ fieldKinds: QualifiedName[];
528
+ id: QualifiedName;
529
+ kind: 'field-adapter';
530
+ label: MessageReference;
531
+ optionSchema?: JsonSchema;
532
+ owner: OwnerReference;
533
+ requiredCapability?: QualifiedName;
534
+ version: SemanticVersion;
535
+ }
536
+ /**
537
+ * The declarative payload behind an `inspector` contribution. Its executable
538
+ * surface is resolved separately through host capability policy.
539
+ */
540
+ export interface InspectorContribution {
541
+ blockTypes: BlockType[];
542
+ contractVersion: StudioContractVersion;
543
+ description?: MessageReference;
544
+ extensions?: Record<QualifiedName, JsonValue>;
545
+ id: QualifiedName;
546
+ kind: 'inspector';
547
+ label: MessageReference;
548
+ owner: OwnerReference;
549
+ placement: 'augment' | 'replace';
550
+ requiredCapability?: QualifiedName;
551
+ version: SemanticVersion;
552
+ }
444
553
  export type MigrationArtifactKind = 'block-definition' | 'blueprint' | 'content-model' | 'entry' | 'theme';
445
554
  /**
446
555
  * The declarative payload behind a `migration` plugin contribution: the
@@ -498,6 +607,20 @@ export interface ArtifactPort {
498
607
  save(artifact: StudioArtifact, context: HostRequestContext): Promise<HostPortResult<null>>;
499
608
  unpublish(reference: ArtifactReference, context: HostRequestContext): Promise<HostPortResult<null>>;
500
609
  }
610
+ /**
611
+ * Host-authoritative contextual authoring operations. The port is additive to
612
+ * the legacy single-artifact port: no method may be implemented as an
613
+ * undocumented sequence of `artifact.save` calls.
614
+ */
615
+ export interface AuthoringPort {
616
+ listTypes(query: AuthoringTypeListQuery, context: HostRequestContext): Promise<HostPortResult<AuthoringTypeListPage>>;
617
+ planSave(intent: AuthoringSaveIntent, context: HostRequestContext): Promise<HostPortResult<AuthoringSavePlan>>;
618
+ resolveTarget(request: AuthoringTargetResolveRequest, context: HostRequestContext): Promise<HostPortResult<AuthoringTargetResolution>>;
619
+ saveAsNewType(request: AuthoringSaveAsNewTypeRequest, context: HostRequestContext): Promise<HostPortResult<AuthoringSaveResult>>;
620
+ saveItem(request: AuthoringSaveItemRequest, context: HostRequestContext): Promise<HostPortResult<AuthoringSaveResult>>;
621
+ saveNewTypeVersion(request: AuthoringSaveNewTypeVersionRequest, context: HostRequestContext): Promise<HostPortResult<AuthoringSaveResult>>;
622
+ start(request: AuthoringStartRequest, context: HostRequestContext): Promise<HostPortResult<AuthoringSessionSnapshot>>;
623
+ }
501
624
  export interface ModelPort {
502
625
  get(reference: ArtifactReference, context: HostRequestContext): Promise<HostPortResult<ContentModelDocument>>;
503
626
  list(context: HostRequestContext): Promise<HostPortResult<ContentModelDocument[]>>;
@@ -578,6 +701,7 @@ export interface TelemetryPort {
578
701
  }
579
702
  export interface HostAdapter {
580
703
  artifact: ArtifactPort;
704
+ authoring?: AuthoringPort;
581
705
  localization?: LocalizationPort;
582
706
  media?: MediaHostPort;
583
707
  model?: ModelPort;
@@ -602,6 +726,215 @@ export interface EntryDocument {
602
726
  values: Record<LocalName, JsonValue>;
603
727
  workflowState?: QualifiedName;
604
728
  }
729
+ export type AuthoringTargetEligibility = 'create' | 'edit';
730
+ export type AuthoringStartKind = 'blank' | 'existing' | 'from-type';
731
+ export type AuthoringPresentationState = 'fullscreen' | 'inline' | 'maximized' | 'minimized';
732
+ export type AuthoringSaveOutcome = 'save-as-new-type' | 'save-item' | 'save-new-type-version';
733
+ export type AuthoringContributionKind = 'block-definition' | 'design-vocabulary' | 'field-adapter' | 'inspector' | 'migration' | 'pattern';
734
+ export interface AuthoringCapabilityRequirement {
735
+ id: QualifiedName;
736
+ versions: string;
737
+ }
738
+ export interface AuthoringContributionDependency {
739
+ id: QualifiedName;
740
+ kind: AuthoringContributionKind;
741
+ required: boolean;
742
+ versions: string;
743
+ }
744
+ /**
745
+ * Bounded discovery metadata shared by host-core and extension-owned targets.
746
+ * A declaration is never authorization and cannot mint a resource context.
747
+ */
748
+ export interface AuthoringTargetDeclaration {
749
+ contractVersion: StudioContractVersion;
750
+ contributionDependencies: readonly AuthoringContributionDependency[];
751
+ eligibility: readonly AuthoringTargetEligibility[];
752
+ extensions?: Record<QualifiedName, JsonValue>;
753
+ id: QualifiedName;
754
+ kind: 'authoring-target';
755
+ label: MessageReference;
756
+ modes: readonly StudioAuthoringMode[];
757
+ owner: OwnerReference;
758
+ presentationStates: readonly AuthoringPresentationState[];
759
+ requiredCapabilities: readonly AuthoringCapabilityRequirement[];
760
+ resourceTypes: readonly QualifiedName[];
761
+ saveOutcomes: readonly AuthoringSaveOutcome[];
762
+ startKinds: readonly AuthoringStartKind[];
763
+ surface: QualifiedName;
764
+ }
765
+ export interface AuthoringReturnContext {
766
+ key: StableId;
767
+ label?: MessageReference;
768
+ }
769
+ export interface AuthoringTargetResolveRequest {
770
+ intent: AuthoringTargetEligibility;
771
+ requestedPresentation?: AuthoringPresentationState;
772
+ resourceContext: StudioResourceContext;
773
+ targetId: QualifiedName;
774
+ }
775
+ export interface AuthoringTargetResolution {
776
+ availableStarts: readonly AuthoringStartKind[];
777
+ initialPresentation: AuthoringPresentationState;
778
+ resourceContext: StudioResourceContext;
779
+ returnContext?: AuthoringReturnContext;
780
+ target: AuthoringTargetDeclaration;
781
+ }
782
+ export interface ReusableContentTypeReference {
783
+ id: StableId;
784
+ revision: Revision;
785
+ version: SemanticVersion;
786
+ }
787
+ export interface ReusableContentTypeAuthoringPolicy {
788
+ itemComposition: 'denied' | 'overrides';
789
+ modes: readonly StudioAuthoringMode[];
790
+ }
791
+ /** Host-owned projection; deliberately not a member of `StudioArtifact`. */
792
+ export interface ReusableContentTypeDefinition extends ReusableContentTypeReference {
793
+ authoringPolicy: ReusableContentTypeAuthoringPolicy;
794
+ blueprint: LockedArtifactReference;
795
+ contractVersion: StudioContractVersion;
796
+ extensions?: Record<QualifiedName, JsonValue>;
797
+ kind: 'reusable-content-type';
798
+ label: MessageReference;
799
+ model: LockedArtifactReference;
800
+ status: 'draft' | 'published' | 'retired';
801
+ }
802
+ export interface AuthoringTypeSummary {
803
+ blueprint: LockedArtifactReference;
804
+ label: MessageReference;
805
+ model: LockedArtifactReference;
806
+ reference: ReusableContentTypeReference;
807
+ }
808
+ export interface AuthoringTypeListQuery {
809
+ cursor?: string;
810
+ limit: number;
811
+ resourceContext: StudioResourceContext;
812
+ search?: string;
813
+ targetId: QualifiedName;
814
+ }
815
+ export interface AuthoringTypeListPage {
816
+ items: AuthoringTypeSummary[];
817
+ nextCursor?: string;
818
+ }
819
+ export type AuthoringStartSource = {
820
+ kind: 'blank';
821
+ } | {
822
+ kind: 'existing';
823
+ } | {
824
+ kind: 'from-type';
825
+ type: ReusableContentTypeReference;
826
+ };
827
+ export interface AuthoringStartRequest {
828
+ presentation?: AuthoringPresentationState;
829
+ resourceContext: StudioResourceContext;
830
+ source: AuthoringStartSource;
831
+ targetId: QualifiedName;
832
+ }
833
+ export interface AuthoringArtifactCoordinates {
834
+ blueprint: LockedArtifactReference;
835
+ entry: ResolvedEntryReference;
836
+ model: LockedArtifactReference;
837
+ type?: ReusableContentTypeReference;
838
+ }
839
+ export type AuthoringDirtyArtifact = 'blueprint' | 'entry' | 'model';
840
+ export interface AuthoringArtifactState {
841
+ blueprint: BlueprintDocument;
842
+ coordinates: AuthoringArtifactCoordinates;
843
+ diagnostics: StudioDiagnostic[];
844
+ dirty: AuthoringDirtyArtifact[];
845
+ entry: EntryDocument;
846
+ model: ContentModelDocument;
847
+ }
848
+ export interface AuthoringSessionCapabilities {
849
+ modes: readonly StudioAuthoringMode[];
850
+ presentationStates: readonly AuthoringPresentationState[];
851
+ saveOutcomes: readonly AuthoringSaveOutcome[];
852
+ }
853
+ export interface AuthoringSessionPresentation {
854
+ current: AuthoringPresentationState;
855
+ returnContext?: AuthoringReturnContext;
856
+ }
857
+ export interface AuthoringSessionSnapshot {
858
+ capabilities: AuthoringSessionCapabilities;
859
+ contractVersion: StudioContractVersion;
860
+ contributionGeneration: Revision;
861
+ extensions?: Record<QualifiedName, JsonValue>;
862
+ kind: 'authoring-session';
863
+ presentation: AuthoringSessionPresentation;
864
+ resourceContext: StudioResourceContext;
865
+ sessionGeneration: Revision;
866
+ sessionId: StableId;
867
+ start: AuthoringStartSource;
868
+ state: AuthoringArtifactState;
869
+ target: AuthoringTargetDeclaration;
870
+ type?: ReusableContentTypeDefinition;
871
+ }
872
+ export interface AuthoringSaveItemDraft {
873
+ entry: EntryDocument;
874
+ itemBlueprint?: BlueprintDocument;
875
+ outcome: 'save-item';
876
+ }
877
+ export interface AuthoringSaveNewTypeVersionDraft {
878
+ blueprint: BlueprintDocument;
879
+ model: ContentModelDocument;
880
+ outcome: 'save-new-type-version';
881
+ }
882
+ export interface AuthoringSaveAsNewTypeDraft {
883
+ authoringPolicy: ReusableContentTypeAuthoringPolicy;
884
+ blueprint: BlueprintDocument;
885
+ label: MessageReference;
886
+ model: ContentModelDocument;
887
+ outcome: 'save-as-new-type';
888
+ }
889
+ export type AuthoringSaveDraft = AuthoringSaveAsNewTypeDraft | AuthoringSaveItemDraft | AuthoringSaveNewTypeVersionDraft;
890
+ export interface AuthoringSaveIntent {
891
+ contractVersion: StudioContractVersion;
892
+ draft: AuthoringSaveDraft;
893
+ expected: AuthoringArtifactCoordinates;
894
+ kind: 'authoring-save-intent';
895
+ sessionId: StableId;
896
+ }
897
+ export type AuthoringAffectedArtifact = 'blueprint' | 'entry' | 'model' | 'reusable-content-type';
898
+ export interface AuthoringSavePlanReference {
899
+ id: StableId;
900
+ revision: Revision;
901
+ /** Exact host-minted return context adopted only after this planned save is accepted. */
902
+ successorContext: AuthoringReturnContext;
903
+ }
904
+ export interface AuthoringSavePlan extends AuthoringSavePlanReference {
905
+ affectedArtifacts: AuthoringAffectedArtifact[];
906
+ confirmationRequired: boolean;
907
+ consequences: StudioDiagnostic[];
908
+ contractVersion: StudioContractVersion;
909
+ expected: AuthoringArtifactCoordinates;
910
+ kind: 'authoring-save-plan';
911
+ outcome: AuthoringSaveOutcome;
912
+ sessionId: StableId;
913
+ }
914
+ interface AuthoringSaveRequestBase {
915
+ acceptedConsequences: QualifiedName[];
916
+ contractVersion: StudioContractVersion;
917
+ plan: AuthoringSavePlanReference;
918
+ }
919
+ export interface AuthoringSaveItemRequest extends AuthoringSaveRequestBase {
920
+ draft: AuthoringSaveItemDraft;
921
+ kind: 'authoring-save-item-request';
922
+ }
923
+ export interface AuthoringSaveNewTypeVersionRequest extends AuthoringSaveRequestBase {
924
+ draft: AuthoringSaveNewTypeVersionDraft;
925
+ kind: 'authoring-save-new-type-version-request';
926
+ }
927
+ export interface AuthoringSaveAsNewTypeRequest extends AuthoringSaveRequestBase {
928
+ draft: AuthoringSaveAsNewTypeDraft;
929
+ kind: 'authoring-save-as-new-type-request';
930
+ }
931
+ export interface AuthoringSaveResult {
932
+ contractVersion: StudioContractVersion;
933
+ kind: 'authoring-save-result';
934
+ outcome: AuthoringSaveOutcome;
935
+ plan: AuthoringSavePlanReference;
936
+ session: AuthoringSessionSnapshot;
937
+ }
605
938
  export type StudioAuthoringMode = 'blueprint' | 'content' | 'model';
606
939
  /**
607
940
  * The single permission determinant of a headless editing session, fixed at
@@ -653,6 +986,104 @@ export interface StudioLimits {
653
986
  maxRichTextDepth: number;
654
987
  maxSlotsPerNode: number;
655
988
  }
989
+ export interface StudioDeploymentLaunch {
990
+ initialPresentation: AuthoringPresentationState;
991
+ intent: AuthoringTargetEligibility;
992
+ resourceContext: StudioResourceContext;
993
+ start: AuthoringStartSource;
994
+ targetId: QualifiedName;
995
+ }
996
+ export type StudioDeploymentOperationRoute = 'artifact/dependencies' | 'artifact/load' | 'artifact/publish' | 'artifact/save' | 'artifact/unpublish' | 'authoring/list-types' | 'authoring/plan-save' | 'authoring/resolve-target' | 'authoring/save-as-new-type' | 'authoring/save-item' | 'authoring/save-new-type-version' | 'authoring/start' | 'localization/messages' | 'media/abort-upload' | 'media/authorize-upload' | 'media/complete-upload' | 'media/get' | 'media/import-external' | 'media/list' | 'media/upload-status' | 'model/get' | 'model/list' | 'permission/explain' | 'permission/refresh' | 'preview/cancel' | 'preview/render' | 'recovery/discard' | 'recovery/load' | 'recovery/store' | 'resource/search' | 'telemetry/emit';
997
+ export type StudioDeploymentOperationEndpoints = Readonly<Partial<Record<StudioDeploymentOperationRoute, string>>> & {
998
+ readonly 'authoring/resolve-target': string;
999
+ readonly 'authoring/start': string;
1000
+ };
1001
+ export interface StudioDeploymentSingleEndpointRouting {
1002
+ endpoint: string;
1003
+ kind: 'single-endpoint';
1004
+ }
1005
+ export interface StudioDeploymentOperationMapRouting {
1006
+ endpoints: StudioDeploymentOperationEndpoints;
1007
+ kind: 'operation-map';
1008
+ }
1009
+ export type StudioDeploymentRouting = StudioDeploymentOperationMapRouting | StudioDeploymentSingleEndpointRouting;
1010
+ export interface StudioDeploymentSameOriginSessionAuthentication {
1011
+ credentials: 'same-origin';
1012
+ csrf: {
1013
+ headerName: string;
1014
+ token: string;
1015
+ };
1016
+ kind: 'same-origin-session';
1017
+ }
1018
+ export interface StudioDeploymentBearerTokenAuthentication {
1019
+ credentials: 'omit';
1020
+ expiresAt: string;
1021
+ issuedAt: string;
1022
+ kind: 'bearer-token';
1023
+ token: string;
1024
+ }
1025
+ export interface StudioDeploymentHeaderTokenAuthentication {
1026
+ credentials: 'omit';
1027
+ expiresAt: string;
1028
+ headerName: string;
1029
+ issuedAt: string;
1030
+ kind: 'header-token';
1031
+ token: string;
1032
+ }
1033
+ export type StudioDeploymentAuthentication = StudioDeploymentBearerTokenAuthentication | StudioDeploymentHeaderTokenAuthentication | StudioDeploymentSameOriginSessionAuthentication;
1034
+ export interface StudioDeploymentStandaloneTransport {
1035
+ kind: 'standalone';
1036
+ }
1037
+ export interface StudioDeploymentHttpTransport {
1038
+ authentication: StudioDeploymentAuthentication;
1039
+ kind: 'http';
1040
+ maximumResponseBytes?: number;
1041
+ requestTimeoutMilliseconds?: number;
1042
+ routing: StudioDeploymentRouting;
1043
+ }
1044
+ export type StudioDeploymentTransport = StudioDeploymentHttpTransport | StudioDeploymentStandaloneTransport;
1045
+ /** Safe declarative contributions; executable controls remain precompiled registry entries. */
1046
+ export type StudioDeploymentContributionPayload = BlockDefinition | DesignVocabulary | FieldAdapterContribution | InspectorContribution | MigrationDeclaration | PatternDocument;
1047
+ export interface StudioDeploymentContributionBundle {
1048
+ generation: Revision;
1049
+ payloads: readonly StudioDeploymentContributionPayload[];
1050
+ }
1051
+ /** Exact release identity copied from the prebuilt browser asset manifest. */
1052
+ export interface StudioDeploymentRelease {
1053
+ corpusManifestDigest: string;
1054
+ version: string;
1055
+ }
1056
+ export interface StudioDeploymentConfigurationBase {
1057
+ contractVersion?: StudioContractVersion;
1058
+ instanceId?: StableId;
1059
+ kind: 'studio-deployment';
1060
+ mount: string;
1061
+ release: StudioDeploymentRelease;
1062
+ }
1063
+ export interface StudioStandaloneDeploymentConfiguration extends StudioDeploymentConfigurationBase {
1064
+ contributions?: never;
1065
+ launch?: never;
1066
+ /** Requested local UI locale. English remains the built-in message fallback. */
1067
+ locale?: string;
1068
+ session?: never;
1069
+ transport?: StudioDeploymentStandaloneTransport;
1070
+ }
1071
+ export interface StudioHostedDeploymentConfiguration extends StudioDeploymentConfigurationBase {
1072
+ contributions?: StudioDeploymentContributionBundle;
1073
+ launch: StudioDeploymentLaunch;
1074
+ locale?: never;
1075
+ session: StudioConfiguration;
1076
+ transport: StudioDeploymentHttpTransport;
1077
+ }
1078
+ /**
1079
+ * Bounded JSON emitted by any host into an `application/json` DOM script for
1080
+ * one Studio mount. Every emitted document is bound to its exact browser asset
1081
+ * release. Omitting the document entirely for an explicit or associated DOM
1082
+ * target selects local defaults; omitting `transport` from a complete document
1083
+ * selects the deterministic standalone blank-page profile. HTTP deployments
1084
+ * provide an exact launch plus the PHP/host-resolved Studio session configuration.
1085
+ */
1086
+ export type StudioDeploymentConfiguration = StudioHostedDeploymentConfiguration | StudioStandaloneDeploymentConfiguration;
656
1087
  export interface StudioConfiguration {
657
1088
  actor: {
658
1089
  displayName: string;
@@ -702,7 +1133,8 @@ export interface StudioConfiguration {
702
1133
  resourceContext: StudioResourceContext;
703
1134
  }
704
1135
  export interface ExperimentalShellConfiguration {
705
- blockDefinitions: BlockDefinition[];
1136
+ /** Omit to use Studio's complete first-party catalog; an explicit array overrides it. */
1137
+ blockDefinitions?: BlockDefinition[];
706
1138
  session: StudioConfiguration;
707
1139
  }
708
1140
  export interface CommandDestination {
@@ -1143,4 +1575,5 @@ export interface MediaPage {
1143
1575
  assets: MediaAsset[];
1144
1576
  nextCursor?: string;
1145
1577
  }
1578
+ export {};
1146
1579
  //# sourceMappingURL=types.d.ts.map