@topolo/sdk 0.4.6 → 0.4.8

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.
package/dist/index.d.cts CHANGED
@@ -88,6 +88,11 @@ interface RequestOptions {
88
88
  method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
89
89
  query?: Record<string, string | number | boolean | undefined>;
90
90
  body?: unknown;
91
+ /** Workspace-boundary resource context for resource-scoped API keys. */
92
+ resource?: {
93
+ resourceType: string;
94
+ resourceId: string;
95
+ };
91
96
  /** Explicit write-acknowledgement for mutating calls. */
92
97
  confirm?: boolean;
93
98
  /** Extra headers appended after auth/audit headers. */
@@ -110,6 +115,17 @@ interface TopoloServiceCatalogEntry {
110
115
  surfaceKind: string | null;
111
116
  launchable: boolean;
112
117
  permissions: string[];
118
+ apiKeyResource: TopoloApiKeyResourceMetadata | null;
119
+ apiKeyResources: TopoloApiKeyResourceMetadata[];
120
+ }
121
+ interface TopoloApiKeyResourceMetadata {
122
+ resourceType: string;
123
+ label: string;
124
+ emptyLabel: string;
125
+ resourceConcept: 'workspace';
126
+ canonicalResourceType: 'workspace';
127
+ defaultEntitlement: 'enterprise';
128
+ exceptionPolicy: 'app_or_organization';
113
129
  }
114
130
  interface TopoloActionCatalogEntry {
115
131
  actionId: string;
@@ -234,54 +250,53 @@ interface CredentialIntrospection {
234
250
  }
235
251
 
236
252
  declare const SERVICES: {
237
- readonly agent: "https://agent-api.topolo.app";
253
+ readonly agent: "https://agent.topolo.app";
238
254
  readonly auth: "https://auth.topolo.app";
239
255
  readonly backup: "https://backup.topolo.app";
240
256
  readonly books: "https://books.topolo.app";
241
257
  readonly bugfix: "https://bugfix.topolo.app";
242
- readonly bytes: "https://bytes-api.topolo.app";
258
+ readonly bytes: "https://bytes.topolo.app";
243
259
  readonly calendar: "https://calendar.topolo.app";
244
260
  readonly capacity: "https://capacity.topolo.app";
245
261
  readonly chat: "https://chat.topolo.app";
246
- readonly commerce: "https://commerce-api.topolo.app";
262
+ readonly commerce: "https://commerce.topolo.app";
247
263
  readonly compose: "https://compose.topolo.app";
248
264
  readonly consent: "https://consent.topolo.app";
249
- readonly crm: "https://crm-api.topolo.app";
265
+ readonly crm: "https://crm.topolo.app";
250
266
  readonly developers: "https://developers.topolo.app";
251
267
  readonly director: "https://director.topolo.app";
252
- readonly feed: "https://feed-api.topolo.app";
268
+ readonly feed: "https://feed.topolo.app";
253
269
  readonly flow: "https://flow.topolo.app";
254
- readonly forecast: "https://forecast-api.topolo.app";
270
+ readonly forecast: "https://forecast.topolo.app";
255
271
  readonly forms: "https://forms.topolo.app";
256
272
  readonly home: "https://home.topolo.app";
257
273
  readonly insights: "https://insights.topolo.app";
258
274
  readonly inventory: "https://inventory.topolo.app";
259
- readonly learn: "https://learn-api.topolo.app";
275
+ readonly learn: "https://learn.topolo.app";
260
276
  readonly localize: "https://localize.topolo.app";
261
- readonly mail: "https://mail-api.topolo.app";
262
- readonly mdm: "https://mdm-api.topolo.app";
277
+ readonly mail: "https://mail.topolo.app";
278
+ readonly mdm: "https://mdm.topolo.app";
263
279
  readonly messages: "https://messages.topolo.app";
264
280
  readonly nexus: "https://nexus-api.topolo.app";
265
281
  readonly notify: "https://notify.topolo.app";
266
282
  readonly observability_watch: "https://observability-watch.topolo.app";
267
- readonly one: "https://one.topolo.app";
283
+ readonly one: "https://www.topolo.app";
268
284
  readonly p2p: "https://p2p.topolo.app";
269
285
  readonly pay: "https://pay.topolo.app";
270
286
  readonly people: "https://people.topolo.app";
271
- readonly pulse: "https://pulse.topolo.app";
272
287
  readonly "quro.api": "https://api.ol0.me";
273
288
  readonly "quro.redirect": "https://ol0.me";
274
- readonly roadmapper: "https://roadmapper-api.topolo.app";
289
+ readonly roadmapper: "https://roadmapper.topolo.app";
275
290
  readonly sign: "https://sign.topolo.app";
276
- readonly social_studio: "https://studio-api.topolo.app";
277
- readonly socialize: "https://socialize-api.topolo.app";
291
+ readonly social_studio: "https://studio.topolo.app";
292
+ readonly socialize: "https://socialize.topolo.app";
278
293
  readonly spaces: "https://spaces.topolo.app";
279
294
  readonly status: "https://status.topolo.app";
280
295
  readonly success: "https://success.topolo.app";
281
296
  readonly support: "https://support.topolo.app";
282
297
  readonly survey: "https://survey.topolo.app";
283
298
  readonly voice: "https://voice.topolo.app";
284
- readonly web: "https://web-api.topolo.app";
299
+ readonly web: "https://web.topolo.app";
285
300
  };
286
301
  type ServiceId = keyof typeof SERVICES;
287
302
 
@@ -322,14 +337,14 @@ declare const APPLICATIONS: {
322
337
  readonly apiUrl: "https://agent.topolo.app";
323
338
  readonly domains: readonly ["agent.topolo.app"];
324
339
  readonly routes: readonly [];
325
- readonly serviceId: null;
340
+ readonly serviceId: "agent";
326
341
  }, {
327
342
  readonly name: "topolo-agent-api";
328
343
  readonly kind: "worker";
329
- readonly apiUrl: "https://agent-api.topolo.app";
330
- readonly domains: readonly ["agent-api.topolo.app"];
344
+ readonly apiUrl: null;
345
+ readonly domains: readonly [];
331
346
  readonly routes: readonly [];
332
- readonly serviceId: "agent";
347
+ readonly serviceId: null;
333
348
  }];
334
349
  };
335
350
  readonly auth: {
@@ -416,14 +431,14 @@ declare const APPLICATIONS: {
416
431
  readonly apiUrl: "https://bytes.topolo.app";
417
432
  readonly domains: readonly ["bytes.topolo.app"];
418
433
  readonly routes: readonly [];
419
- readonly serviceId: null;
434
+ readonly serviceId: "bytes";
420
435
  }, {
421
436
  readonly name: "topolo-bytes-api";
422
437
  readonly kind: "worker";
423
- readonly apiUrl: "https://bytes-api.topolo.app";
424
- readonly domains: readonly ["bytes-api.topolo.app"];
438
+ readonly apiUrl: null;
439
+ readonly domains: readonly [];
425
440
  readonly routes: readonly [];
426
- readonly serviceId: "bytes";
441
+ readonly serviceId: null;
427
442
  }];
428
443
  };
429
444
  readonly calendar: {
@@ -498,10 +513,10 @@ declare const APPLICATIONS: {
498
513
  readonly deployTargets: readonly [{
499
514
  readonly name: "topolo-commerce-api";
500
515
  readonly kind: "worker";
501
- readonly apiUrl: "https://commerce-api.topolo.app";
502
- readonly domains: readonly ["commerce-api.topolo.app"];
516
+ readonly apiUrl: null;
517
+ readonly domains: readonly [];
503
518
  readonly routes: readonly [];
504
- readonly serviceId: "commerce";
519
+ readonly serviceId: null;
505
520
  }, {
506
521
  readonly name: "topolo-commerce-guest-web";
507
522
  readonly kind: "worker";
@@ -515,7 +530,7 @@ declare const APPLICATIONS: {
515
530
  readonly apiUrl: "https://commerce.topolo.app";
516
531
  readonly domains: readonly ["commerce.topolo.app"];
517
532
  readonly routes: readonly [];
518
- readonly serviceId: null;
533
+ readonly serviceId: "commerce";
519
534
  }, {
520
535
  readonly name: "topolo-commerce-station-web";
521
536
  readonly kind: "worker";
@@ -581,17 +596,17 @@ declare const APPLICATIONS: {
581
596
  readonly deployTargets: readonly [{
582
597
  readonly name: "topolo-crm-api";
583
598
  readonly kind: "worker";
584
- readonly apiUrl: "https://crm-api.topolo.app";
585
- readonly domains: readonly ["crm-api.topolo.app"];
599
+ readonly apiUrl: null;
600
+ readonly domains: readonly [];
586
601
  readonly routes: readonly [];
587
- readonly serviceId: "crm";
602
+ readonly serviceId: null;
588
603
  }, {
589
604
  readonly name: "topolo-crm-app";
590
605
  readonly kind: "worker";
591
606
  readonly apiUrl: "https://crm.topolo.app";
592
607
  readonly domains: readonly ["crm.topolo.app"];
593
608
  readonly routes: readonly [];
594
- readonly serviceId: null;
609
+ readonly serviceId: "crm";
595
610
  }];
596
611
  };
597
612
  readonly developers: {
@@ -687,17 +702,17 @@ declare const APPLICATIONS: {
687
702
  }, {
688
703
  readonly name: "topolo-feed-api";
689
704
  readonly kind: "worker";
690
- readonly apiUrl: "https://feed-api.topolo.app";
691
- readonly domains: readonly ["feed-api.topolo.app"];
705
+ readonly apiUrl: null;
706
+ readonly domains: readonly [];
692
707
  readonly routes: readonly [];
693
- readonly serviceId: "feed";
708
+ readonly serviceId: null;
694
709
  }, {
695
710
  readonly name: "topolo-feed-web";
696
711
  readonly kind: "worker";
697
712
  readonly apiUrl: "https://feed.topolo.app";
698
713
  readonly domains: readonly ["feed.topolo.app"];
699
714
  readonly routes: readonly [];
700
- readonly serviceId: null;
715
+ readonly serviceId: "feed";
701
716
  }];
702
717
  };
703
718
  readonly flow: {
@@ -736,14 +751,14 @@ declare const APPLICATIONS: {
736
751
  readonly apiUrl: "https://forecast.topolo.app";
737
752
  readonly domains: readonly ["forecast.topolo.app"];
738
753
  readonly routes: readonly [];
739
- readonly serviceId: null;
754
+ readonly serviceId: "forecast";
740
755
  }, {
741
756
  readonly name: "topolo-forecast-api";
742
757
  readonly kind: "worker";
743
- readonly apiUrl: "https://forecast-api.topolo.app";
744
- readonly domains: readonly ["forecast-api.topolo.app"];
758
+ readonly apiUrl: null;
759
+ readonly domains: readonly [];
745
760
  readonly routes: readonly [];
746
- readonly serviceId: "forecast";
761
+ readonly serviceId: null;
747
762
  }];
748
763
  };
749
764
  readonly forms: {
@@ -851,14 +866,14 @@ declare const APPLICATIONS: {
851
866
  readonly apiUrl: "https://learn.topolo.app";
852
867
  readonly domains: readonly ["learn.topolo.app"];
853
868
  readonly routes: readonly [];
854
- readonly serviceId: null;
869
+ readonly serviceId: "learn";
855
870
  }, {
856
871
  readonly name: "topolo-learn-api";
857
872
  readonly kind: "worker";
858
- readonly apiUrl: "https://learn-api.topolo.app";
859
- readonly domains: readonly ["learn-api.topolo.app"];
873
+ readonly apiUrl: null;
874
+ readonly domains: readonly [];
860
875
  readonly routes: readonly [];
861
- readonly serviceId: "learn";
876
+ readonly serviceId: null;
862
877
  }];
863
878
  };
864
879
  readonly localize: {
@@ -890,14 +905,14 @@ declare const APPLICATIONS: {
890
905
  readonly apiUrl: "https://mail.topolo.app";
891
906
  readonly domains: readonly ["mail.topolo.app"];
892
907
  readonly routes: readonly [];
893
- readonly serviceId: null;
908
+ readonly serviceId: "mail";
894
909
  }, {
895
910
  readonly name: "topolo-mail-api";
896
911
  readonly kind: "worker";
897
- readonly apiUrl: "https://mail-api.topolo.app";
898
- readonly domains: readonly ["mail-api.topolo.app"];
912
+ readonly apiUrl: null;
913
+ readonly domains: readonly [];
899
914
  readonly routes: readonly [];
900
- readonly serviceId: "mail";
915
+ readonly serviceId: null;
901
916
  }];
902
917
  };
903
918
  readonly mdm: {
@@ -910,17 +925,17 @@ declare const APPLICATIONS: {
910
925
  readonly deployTargets: readonly [{
911
926
  readonly name: "topolo-mdm-api";
912
927
  readonly kind: "worker";
913
- readonly apiUrl: "https://mdm-api.topolo.app";
914
- readonly domains: readonly ["mdm-api.topolo.app"];
928
+ readonly apiUrl: null;
929
+ readonly domains: readonly [];
915
930
  readonly routes: readonly [];
916
- readonly serviceId: "mdm";
931
+ readonly serviceId: null;
917
932
  }, {
918
933
  readonly name: "topolo-mdm-console";
919
934
  readonly kind: "worker";
920
935
  readonly apiUrl: "https://mdm.topolo.app";
921
936
  readonly domains: readonly ["mdm.topolo.app"];
922
937
  readonly routes: readonly [];
923
- readonly serviceId: null;
938
+ readonly serviceId: "mdm";
924
939
  }];
925
940
  };
926
941
  readonly messages: {
@@ -1018,16 +1033,16 @@ declare const APPLICATIONS: {
1018
1033
  readonly deployTargets: readonly [{
1019
1034
  readonly name: "topolo-one";
1020
1035
  readonly kind: "worker";
1021
- readonly apiUrl: null;
1022
- readonly domains: readonly [];
1023
- readonly routes: readonly [];
1036
+ readonly apiUrl: "https://one.topolo.app";
1037
+ readonly domains: readonly ["one.topolo.app"];
1038
+ readonly routes: readonly ["one.topolo.app/*"];
1024
1039
  readonly serviceId: null;
1025
1040
  }, {
1026
1041
  readonly name: "topolo-one-api";
1027
1042
  readonly kind: "worker";
1028
- readonly apiUrl: "https://one.topolo.app";
1029
- readonly domains: readonly ["one.topolo.app"];
1030
- readonly routes: readonly ["one.topolo.app/*", "www.topolo.app/*"];
1043
+ readonly apiUrl: "https://www.topolo.app";
1044
+ readonly domains: readonly ["www.topolo.app"];
1045
+ readonly routes: readonly ["www.topolo.app/*"];
1031
1046
  readonly serviceId: "one";
1032
1047
  }, {
1033
1048
  readonly name: "topolo-one-website";
@@ -1107,29 +1122,6 @@ declare const APPLICATIONS: {
1107
1122
  readonly serviceId: null;
1108
1123
  }];
1109
1124
  };
1110
- readonly pulse: {
1111
- readonly id: "pulse";
1112
- readonly appDir: "TopoloPulse";
1113
- readonly name: "topolo-pulse";
1114
- readonly packageName: "topolo-pulse";
1115
- readonly productionUrl: "https://pulse.topolo.app";
1116
- readonly services: readonly ["pulse"];
1117
- readonly deployTargets: readonly [{
1118
- readonly name: "topolo-pulse";
1119
- readonly kind: "worker";
1120
- readonly apiUrl: "https://pulse.topolo.app";
1121
- readonly domains: readonly ["pulse.topolo.app"];
1122
- readonly routes: readonly [];
1123
- readonly serviceId: "pulse";
1124
- }, {
1125
- readonly name: "topolo-pulse-api";
1126
- readonly kind: "worker";
1127
- readonly apiUrl: null;
1128
- readonly domains: readonly [];
1129
- readonly routes: readonly [];
1130
- readonly serviceId: null;
1131
- }];
1132
- };
1133
1125
  readonly quro: {
1134
1126
  readonly id: "quro";
1135
1127
  readonly appDir: "TopoloQuro";
@@ -1173,14 +1165,14 @@ declare const APPLICATIONS: {
1173
1165
  readonly apiUrl: "https://roadmapper.topolo.app";
1174
1166
  readonly domains: readonly ["roadmapper.topolo.app"];
1175
1167
  readonly routes: readonly [];
1176
- readonly serviceId: null;
1168
+ readonly serviceId: "roadmapper";
1177
1169
  }, {
1178
1170
  readonly name: "topolo-roadmapper-api";
1179
1171
  readonly kind: "worker";
1180
- readonly apiUrl: "https://roadmapper-api.topolo.app";
1181
- readonly domains: readonly ["roadmapper-api.topolo.app"];
1172
+ readonly apiUrl: null;
1173
+ readonly domains: readonly [];
1182
1174
  readonly routes: readonly [];
1183
- readonly serviceId: "roadmapper";
1175
+ readonly serviceId: null;
1184
1176
  }];
1185
1177
  };
1186
1178
  readonly sign: {
@@ -1219,14 +1211,14 @@ declare const APPLICATIONS: {
1219
1211
  readonly apiUrl: "https://studio.topolo.app";
1220
1212
  readonly domains: readonly ["studio.topolo.app"];
1221
1213
  readonly routes: readonly [];
1222
- readonly serviceId: null;
1214
+ readonly serviceId: "social_studio";
1223
1215
  }, {
1224
1216
  readonly name: "topolo-social-studio-api";
1225
1217
  readonly kind: "worker";
1226
- readonly apiUrl: "https://studio-api.topolo.app";
1227
- readonly domains: readonly ["studio-api.topolo.app"];
1218
+ readonly apiUrl: null;
1219
+ readonly domains: readonly [];
1228
1220
  readonly routes: readonly [];
1229
- readonly serviceId: "social_studio";
1221
+ readonly serviceId: null;
1230
1222
  }, {
1231
1223
  readonly name: "topolo-social-studio-queue";
1232
1224
  readonly kind: "worker";
@@ -1249,14 +1241,14 @@ declare const APPLICATIONS: {
1249
1241
  readonly apiUrl: "https://socialize.topolo.app";
1250
1242
  readonly domains: readonly ["socialize.topolo.app"];
1251
1243
  readonly routes: readonly [];
1252
- readonly serviceId: null;
1244
+ readonly serviceId: "socialize";
1253
1245
  }, {
1254
1246
  readonly name: "topolo-socialize-api";
1255
1247
  readonly kind: "worker";
1256
- readonly apiUrl: "https://socialize-api.topolo.app";
1257
- readonly domains: readonly ["socialize-api.topolo.app"];
1248
+ readonly apiUrl: null;
1249
+ readonly domains: readonly [];
1258
1250
  readonly routes: readonly [];
1259
- readonly serviceId: "socialize";
1251
+ readonly serviceId: null;
1260
1252
  }, {
1261
1253
  readonly name: "topolo-socialize-scheduler";
1262
1254
  readonly kind: "worker";
@@ -1407,10 +1399,10 @@ declare const APPLICATIONS: {
1407
1399
  readonly deployTargets: readonly [{
1408
1400
  readonly name: "topolo-web-api";
1409
1401
  readonly kind: "worker";
1410
- readonly apiUrl: "https://web-api.topolo.app";
1411
- readonly domains: readonly ["web-api.topolo.app"];
1402
+ readonly apiUrl: null;
1403
+ readonly domains: readonly [];
1412
1404
  readonly routes: readonly [];
1413
- readonly serviceId: "web";
1405
+ readonly serviceId: null;
1414
1406
  }, {
1415
1407
  readonly name: "topolo-web-runtime";
1416
1408
  readonly kind: "worker";
@@ -1424,7 +1416,7 @@ declare const APPLICATIONS: {
1424
1416
  readonly apiUrl: "https://web.topolo.app";
1425
1417
  readonly domains: readonly ["web.topolo.app"];
1426
1418
  readonly routes: readonly [];
1427
- readonly serviceId: null;
1419
+ readonly serviceId: "web";
1428
1420
  }];
1429
1421
  };
1430
1422
  };
@@ -1432,7 +1424,7 @@ type ApplicationId = keyof typeof APPLICATIONS;
1432
1424
  type ApplicationCatalogEntry = (typeof APPLICATIONS)[ApplicationId];
1433
1425
  type ApplicationDeployTarget = ApplicationCatalogEntry['deployTargets'][number];
1434
1426
 
1435
- declare const APPLICATION_REQUIREMENTS_VERSION = "2026-05-01.1";
1427
+ declare const APPLICATION_REQUIREMENTS_VERSION = "2026-06-07.1";
1436
1428
  type ApplicationRequirementScope = 'all' | 'browser' | 'api' | 'tooling' | 'agent_surface';
1437
1429
  interface ApplicationRequirement {
1438
1430
  id: string;
@@ -1506,8 +1498,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
1506
1498
  readonly title: "Use the shared shell, launcher, and account menu";
1507
1499
  readonly summary: "Browser applications should feel like one platform and should not create isolated navigation or account surfaces.";
1508
1500
  readonly appliesTo: readonly ["browser"];
1509
- readonly evidence: readonly ["@topolo/ui-kit is used for the platform shell where the app has authenticated UI", "The shared launcher/app switcher is reachable from authenticated app chrome", "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu", "Authenticated app body content stays inside the viewport on mobile and desktop widths"];
1510
- readonly implementation: readonly ["Use TopoloAppShell for authenticated app layouts", "Use TopoloAccountMenu when a partial-shell surface still needs account chrome", "Pass app-specific account actions as additive menu items instead of forking dropdowns", "Use shared design tokens and platform UI primitives before creating local equivalents", "Keep mobile and desktop shell behavior aligned with the platform UI kit", "Constrain app-owned workspace wrappers with min-width: 0, width: auto, and viewport-aware max-width so shell padding cannot create page-level horizontal overflow"];
1501
+ readonly evidence: readonly ["@topolo-io/app-shell is used for the platform shell where the app has authenticated UI", "@topolo-io/app-launcher keeps the shared launcher/app switcher reachable from authenticated app chrome", "Account menu and sign-out behavior use TopoloAppShell or the ui-kit TopoloAccountMenu primitive", "Repeated app body surfaces use shared TopoloAppLayout primitives instead of local stat cards, empty states, or status badges", "Local preview supports deterministic visual QA fixtures for overview, list, detail, settings, and empty/loading states", "Authenticated app body content stays inside the viewport on mobile and desktop widths"];
1502
+ readonly implementation: readonly ["Use @topolo-io/app-shell TopoloAppShell for authenticated app layouts", "Use the @topolo-io/ui-kit TopoloAccountMenu primitive when a partial-shell surface still needs account chrome", "Pass app-specific account actions as additive menu items instead of forking dropdowns", "Use shared design tokens and platform UI primitives before creating local equivalents", "Use TopoloAppMetricCard, TopoloAppEmptyState, TopoloAppStatusBadge, TopoloAppGrid, and TopoloAppSection for repeated app body patterns", "Keep visual QA fixtures available through visualQa=1 or __devpreview=1 so screenshot checks do not depend on live API state", "Keep mobile and desktop shell behavior aligned with the platform UI kit", "Constrain app-owned workspace wrappers with min-width: 0, width: auto, and viewport-aware max-width so shell padding cannot create page-level horizontal overflow"];
1511
1503
  }, {
1512
1504
  readonly id: "service-registration-and-scopes";
1513
1505
  readonly title: "Register protected APIs as platform services";
@@ -1541,8 +1533,8 @@ declare const APPLICATION_REQUIREMENTS: readonly [{
1541
1533
  readonly title: "Expose a native dashboard widget contract";
1542
1534
  readonly summary: "Launchable first-party applications must populate TopoloOne live workspace through an app-owned /api/widget endpoint using the SDK widget response contract.";
1543
1535
  readonly appliesTo: readonly ["api"];
1544
- readonly evidence: readonly ["The app-owned API exposes GET /api/widget", "The endpoint returns TopoloWidgetApiResponse from @topolo/sdk", "The endpoint derives organization/user context from the app auth boundary"];
1545
- readonly implementation: readonly ["Import createTopoloWidgetResponse from @topolo/sdk in the app backend", "Return native app metrics or action widgets instead of generic launch-card fallbacks", "Add a route-level test that validates the response with validateTopoloWidgetResponse"];
1536
+ readonly evidence: readonly ["The app-owned API exposes GET /api/widget", "The endpoint returns TopoloWidgetApiResponse from @topolo/sdk", "Every returned widget includes snapshot.summary with app-owned operational prose", "The endpoint derives organization/user context from the app auth boundary"];
1537
+ readonly implementation: readonly ["Import createTopoloWidgetResponse from @topolo/sdk in the app backend", "Return native app metrics or action widgets instead of generic launch-card fallbacks", "Populate snapshot.summary in the producing app for every widget instead of synthesizing summaries in TopoloOne", "Add a route-level test that validates the response with validateTopoloWidgetResponse"];
1546
1538
  }, {
1547
1539
  readonly id: "observability-and-audit";
1548
1540
  readonly title: "Emit platform audit and debugging signals";
@@ -1971,7 +1963,7 @@ interface TopoloWidgetBase {
1971
1963
  serviceIcon?: string;
1972
1964
  type: TopoloWidgetType;
1973
1965
  lastUpdated: string;
1974
- snapshot?: TopoloWidgetSnapshotMetadata;
1966
+ snapshot: TopoloWidgetSnapshotMetadata;
1975
1967
  }
1976
1968
  interface TopoloWidgetMetric {
1977
1969
  key?: string;
@@ -1995,7 +1987,7 @@ interface TopoloWidgetSnapshotMetadata {
1995
1987
  scope?: string;
1996
1988
  scopeLabel?: string;
1997
1989
  generatedAt?: string;
1998
- summary?: string;
1990
+ summary: string;
1999
1991
  defaultMetricKeys?: string[];
2000
1992
  availableMetrics?: TopoloWidgetSnapshotMetric[];
2001
1993
  highlights?: string[];
@@ -2099,4 +2091,4 @@ declare function createTopolo(options: TopoloClientOptions): {
2099
2091
  };
2100
2092
  type Topolo = ReturnType<typeof createTopolo>;
2101
2093
 
2102
- export { APPLICATIONS, APPLICATION_REQUIREMENTS, APPLICATION_REQUIREMENTS_VERSION, type AgentIdentity, type ApplicationCatalogEntry, type ApplicationDeployTarget, type ApplicationId, type ApplicationRequirement, type ApplicationRequirementAudit, type ApplicationRequirementFinding, type ApplicationRequirementMigrationItem, type ApplicationRequirementScope, type ApplicationRequirementScore, type ApplicationRequirementStatus, type ApplicationRequirementsAuditReport, type CredentialIntrospection, type CrmContactSummary, CrmModule, DEFAULT_SERVICE_URLS, type DeviceAuthorizationResponse, IdentityModule, type ListContactsOptions, type ListContactsResult, type OAuthHelperOptions, type P2PActionDetail, type P2PActionRequestInput, type P2PActionRequestResult, type P2PActionRow, type P2PActionRun, type P2PCapability, type P2PConnection, type P2PHold, type P2PLedgerEntry, P2PModule, type P2PPolicy, type P2PPricingModel, type P2PSettlementBatch, type P2PSettlementGroup, type PublishCapabilityInput, type RequestOptions, type ServiceCatalogUrlEntry, type ServiceId, TOPOLO_WIDGET_ENDPOINT, TOPOLO_WIDGET_REFRESH_INTERVAL_MS, type TokenResponse, type Topolo, type TopoloActionCatalogEntry, TopoloAuthError, type TopoloChartWidget, TopoloClient, type TopoloClientOptions, type TopoloCredential, type TopoloDebugEvent, TopoloHttpError, type TopoloNotificationsWidget, TopoloOAuth, TopoloPermissionError, type TopoloQuickActionsWidget, type TopoloRecentActivityWidget, TopoloSdkError, type TopoloServiceCatalogEntry, type TopoloStatsWidget, type TopoloWidget, type TopoloWidgetActionItem, type TopoloWidgetActivityItem, type TopoloWidgetApiResponse, type TopoloWidgetBase, type TopoloWidgetConfig, type TopoloWidgetDraft, type TopoloWidgetMetric, type TopoloWidgetNotificationItem, type TopoloWidgetResponseOptions, type TopoloWidgetSnapshotMetadata, type TopoloWidgetSnapshotMetric, type TopoloWidgetType, type TopoloWidgetValidationResult, applicationRequirementScopes, auditAllApplicationRequirements, auditApplicationRequirements, createTopolo, createTopoloWidgetError, createTopoloWidgetResponse, defineTopoloChartWidget, defineTopoloNotificationsWidget, defineTopoloQuickActionsWidget, defineTopoloRecentActivityWidget, defineTopoloStatsWidget, requirementsForApplication, resolveCatalogServiceUrl, resolveServiceUrl, validateTopoloWidgetResponse };
2094
+ export { APPLICATIONS, APPLICATION_REQUIREMENTS, APPLICATION_REQUIREMENTS_VERSION, type AgentIdentity, type ApplicationCatalogEntry, type ApplicationDeployTarget, type ApplicationId, type ApplicationRequirement, type ApplicationRequirementAudit, type ApplicationRequirementFinding, type ApplicationRequirementMigrationItem, type ApplicationRequirementScope, type ApplicationRequirementScore, type ApplicationRequirementStatus, type ApplicationRequirementsAuditReport, type CredentialIntrospection, type CrmContactSummary, CrmModule, DEFAULT_SERVICE_URLS, type DeviceAuthorizationResponse, IdentityModule, type ListContactsOptions, type ListContactsResult, type OAuthHelperOptions, type P2PActionDetail, type P2PActionRequestInput, type P2PActionRequestResult, type P2PActionRow, type P2PActionRun, type P2PCapability, type P2PConnection, type P2PHold, type P2PLedgerEntry, P2PModule, type P2PPolicy, type P2PPricingModel, type P2PSettlementBatch, type P2PSettlementGroup, type PublishCapabilityInput, type RequestOptions, type ServiceCatalogUrlEntry, type ServiceId, TOPOLO_WIDGET_ENDPOINT, TOPOLO_WIDGET_REFRESH_INTERVAL_MS, type TokenResponse, type Topolo, type TopoloActionCatalogEntry, type TopoloApiKeyResourceMetadata, TopoloAuthError, type TopoloChartWidget, TopoloClient, type TopoloClientOptions, type TopoloCredential, type TopoloDebugEvent, TopoloHttpError, type TopoloNotificationsWidget, TopoloOAuth, TopoloPermissionError, type TopoloQuickActionsWidget, type TopoloRecentActivityWidget, TopoloSdkError, type TopoloServiceCatalogEntry, type TopoloStatsWidget, type TopoloWidget, type TopoloWidgetActionItem, type TopoloWidgetActivityItem, type TopoloWidgetApiResponse, type TopoloWidgetBase, type TopoloWidgetConfig, type TopoloWidgetDraft, type TopoloWidgetMetric, type TopoloWidgetNotificationItem, type TopoloWidgetResponseOptions, type TopoloWidgetSnapshotMetadata, type TopoloWidgetSnapshotMetric, type TopoloWidgetType, type TopoloWidgetValidationResult, applicationRequirementScopes, auditAllApplicationRequirements, auditApplicationRequirements, createTopolo, createTopoloWidgetError, createTopoloWidgetResponse, defineTopoloChartWidget, defineTopoloNotificationsWidget, defineTopoloQuickActionsWidget, defineTopoloRecentActivityWidget, defineTopoloStatsWidget, requirementsForApplication, resolveCatalogServiceUrl, resolveServiceUrl, validateTopoloWidgetResponse };