@topolo/mcp 0.2.4 → 0.3.0

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.js CHANGED
@@ -3,7 +3,7 @@
3
3
  // src/index.ts
4
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
5
 
6
- // ../../PlatformApplications/packages/topolo-sdk/dist/index.js
6
+ // ../topolo-sdk/dist/index.js
7
7
  function applyAuthHeaders(headers, credential) {
8
8
  if (credential.kind === "api_key") {
9
9
  headers.set("X-Api-Key", credential.apiKey);
@@ -59,48 +59,69 @@ var TopoloHttpError = class extends TopoloSdkError {
59
59
  }
60
60
  };
61
61
  var SERVICES = {
62
- agent: "https://topolo-agent-worker.topolo.workers.dev",
62
+ agent: "https://agent-api.topolo.app",
63
63
  auth: "https://auth.topolo.app",
64
+ books: "https://books.topolo.app",
64
65
  bugfix: "https://bugfix.topolo.app",
65
- bytes: "https://r2-media-manager-worker.topolo.workers.dev",
66
+ bytes: "https://bytes-api.topolo.app",
66
67
  calendar: "https://calendar.topolo.app",
68
+ capacity: "https://capacity.topolo.app",
67
69
  chat: "https://chat.topolo.app",
68
- commerce: "https://topolo-commerce-api.topolo.workers.dev",
70
+ commerce: "https://commerce-api.topolo.app",
71
+ compose: "https://compose.topolo.app",
72
+ consent: "https://consent.topolo.app",
69
73
  crm: "https://crm-api.topolo.app",
70
- feed: "https://topolo-feed-api.topolo.app",
71
- forecast: "https://forecast-worker-production.topolo.workers.dev",
72
- learn: "https://topololearn-api.topolo.workers.dev",
74
+ customer_success: "https://success.topolo.app",
75
+ developers: "https://developers.topolo.app",
76
+ director: "https://director.topolo.app",
77
+ feed: "https://feed-api.topolo.app",
78
+ flow: "https://flow.topolo.app",
79
+ forecast: "https://forecast-api.topolo.app",
80
+ forms: "https://forms.topolo.app",
81
+ home: "https://home.topolo.app",
82
+ insights: "https://insights.topolo.app",
83
+ inventory: "https://inventory.topolo.app",
84
+ learn: "https://learn-api.topolo.app",
85
+ localize: "https://localize.topolo.app",
73
86
  mail: "https://mail.topolo.app",
74
- mdm: "https://topolo-mdm-api.topolo.app",
87
+ mdm: "https://mdm-api.topolo.app",
75
88
  messaging: "https://messages.topolo.app",
76
- nexus: "https://topolo-nexus-gateway.topolo.workers.dev",
77
- one: "https://topoloone-worker.topolo.workers.dev",
78
- pay: "https://topolo-pay.topolo.workers.dev",
89
+ nexus: "https://nexus-api.topolo.app",
90
+ notify: "https://notify.topolo.app",
91
+ one: "https://one.topolo.app",
92
+ p2p: "https://p2p.topolo.app",
93
+ pay: "https://pay.topolo.app",
94
+ people: "https://people.topolo.app",
95
+ pulse: "https://pulse.topolo.app",
79
96
  "quro.api": "https://api.ol0.me",
80
97
  "quro.redirect": "https://ol0.me",
81
98
  roadmapper: "https://roadmapper-api.topolo.app",
82
- social_studio: "https://topolo-social-studio-api.topolo.workers.dev",
83
- socialize: "https://socialize-prod-api.topolo.workers.dev",
99
+ sign: "https://sign.topolo.app",
100
+ social_studio: "https://studio-api.topolo.app",
101
+ socialize: "https://socialize-api.topolo.app",
102
+ spaces: "https://spaces.topolo.app",
103
+ status: "https://status.topolo.app",
84
104
  support: "https://support.topolo.app",
105
+ survey: "https://survey.topolo.app",
106
+ voice: "https://voice.topolo.app",
85
107
  web: "https://web-api.topolo.app"
86
108
  };
87
- var PLATFORM_SERVICE_IDS = {
88
- crm: "srv_iCwM4jGXcwlj"
89
- };
90
109
  var APPLICATIONS = {
91
110
  "admin": {
92
111
  "id": "admin",
93
112
  "appDir": "TopoloAdmin",
94
- "name": "topoloadmin",
113
+ "name": "topolo-admin",
95
114
  "packageName": "topolo-admin",
96
115
  "productionUrl": "https://admin.topolo.app",
97
116
  "services": [],
98
117
  "deployTargets": [
99
118
  {
100
- "name": "topoloadmin",
119
+ "name": "topolo-admin",
101
120
  "kind": "pages",
102
121
  "apiUrl": null,
103
- "domains": [],
122
+ "domains": [
123
+ "admin.topolo.app"
124
+ ],
104
125
  "routes": [],
105
126
  "serviceId": null
106
127
  }
@@ -118,17 +139,21 @@ var APPLICATIONS = {
118
139
  "deployTargets": [
119
140
  {
120
141
  "name": "topolo-agent",
121
- "kind": "pages",
142
+ "kind": "worker",
122
143
  "apiUrl": null,
123
- "domains": [],
144
+ "domains": [
145
+ "agent.topolo.app"
146
+ ],
124
147
  "routes": [],
125
148
  "serviceId": null
126
149
  },
127
150
  {
128
151
  "name": "topolo-agent-worker",
129
152
  "kind": "worker",
130
- "apiUrl": "https://topolo-agent-worker.topolo.workers.dev",
131
- "domains": [],
153
+ "apiUrl": "https://agent-api.topolo.app",
154
+ "domains": [
155
+ "agent-api.topolo.app"
156
+ ],
132
157
  "routes": [],
133
158
  "serviceId": "agent"
134
159
  }
@@ -158,6 +183,48 @@ var APPLICATIONS = {
158
183
  }
159
184
  ]
160
185
  },
186
+ "backup": {
187
+ "id": "backup",
188
+ "appDir": "TopoloBackup",
189
+ "name": "topolo-backup",
190
+ "packageName": "topolo-backup",
191
+ "productionUrl": null,
192
+ "services": [],
193
+ "deployTargets": [
194
+ {
195
+ "name": "topolo-backup",
196
+ "kind": "worker",
197
+ "apiUrl": null,
198
+ "domains": [],
199
+ "routes": [],
200
+ "serviceId": null
201
+ }
202
+ ]
203
+ },
204
+ "books": {
205
+ "id": "books",
206
+ "appDir": "TopoloBooks",
207
+ "name": "topolo-books",
208
+ "packageName": "topolo-books",
209
+ "productionUrl": "https://books.topolo.app",
210
+ "services": [
211
+ "books"
212
+ ],
213
+ "deployTargets": [
214
+ {
215
+ "name": "topolo-books",
216
+ "kind": "worker",
217
+ "apiUrl": "https://books.topolo.app",
218
+ "domains": [
219
+ "books.topolo.app"
220
+ ],
221
+ "routes": [
222
+ "books.topolo.app"
223
+ ],
224
+ "serviceId": "books"
225
+ }
226
+ ]
227
+ },
161
228
  "bugfix": {
162
229
  "id": "bugfix",
163
230
  "appDir": "TopoloBugFix",
@@ -193,18 +260,22 @@ var APPLICATIONS = {
193
260
  ],
194
261
  "deployTargets": [
195
262
  {
196
- "name": "bytes",
263
+ "name": "topolo-bytes",
197
264
  "kind": "pages",
198
265
  "apiUrl": null,
199
- "domains": [],
266
+ "domains": [
267
+ "bytes.topolo.app"
268
+ ],
200
269
  "routes": [],
201
270
  "serviceId": null
202
271
  },
203
272
  {
204
- "name": "r2-media-manager-worker",
273
+ "name": "topolo-bytes-api",
205
274
  "kind": "worker",
206
- "apiUrl": "https://r2-media-manager-worker.topolo.workers.dev",
207
- "domains": [],
275
+ "apiUrl": "https://bytes-api.topolo.app",
276
+ "domains": [
277
+ "bytes-api.topolo.app"
278
+ ],
208
279
  "routes": [],
209
280
  "serviceId": "bytes"
210
281
  }
@@ -234,6 +305,28 @@ var APPLICATIONS = {
234
305
  }
235
306
  ]
236
307
  },
308
+ "capacity": {
309
+ "id": "capacity",
310
+ "appDir": "TopoloCapacity",
311
+ "name": "topolo-capacity",
312
+ "packageName": "topolo-capacity",
313
+ "productionUrl": "https://capacity.topolo.app",
314
+ "services": [
315
+ "capacity"
316
+ ],
317
+ "deployTargets": [
318
+ {
319
+ "name": "topolo-capacity",
320
+ "kind": "worker",
321
+ "apiUrl": "https://capacity.topolo.app",
322
+ "domains": [
323
+ "capacity.topolo.app"
324
+ ],
325
+ "routes": [],
326
+ "serviceId": "capacity"
327
+ }
328
+ ]
329
+ },
237
330
  "chat": {
238
331
  "id": "chat",
239
332
  "appDir": "TopoloChat",
@@ -258,19 +351,10 @@ var APPLICATIONS = {
258
351
  }
259
352
  ]
260
353
  },
261
- "cli": {
262
- "id": "cli",
263
- "appDir": "TopoloCli",
264
- "name": "@topolo/cli",
265
- "packageName": "@topolo/cli",
266
- "productionUrl": null,
267
- "services": [],
268
- "deployTargets": []
269
- },
270
354
  "cloudcontrol": {
271
355
  "id": "cloudcontrol",
272
356
  "appDir": "TopoloCloudControl",
273
- "name": "topolo-cloudcontrol",
357
+ "name": "cloudcontrol",
274
358
  "packageName": "topolo-cloudcontrol",
275
359
  "productionUrl": null,
276
360
  "services": [],
@@ -289,9 +373,9 @@ var APPLICATIONS = {
289
373
  {
290
374
  "name": "topolo-commerce-api",
291
375
  "kind": "worker",
292
- "apiUrl": "https://topolo-commerce-api.topolo.workers.dev",
376
+ "apiUrl": "https://commerce-api.topolo.app",
293
377
  "domains": [
294
- "topolo-commerce-api.topolo.workers.dev"
378
+ "commerce-api.topolo.app"
295
379
  ],
296
380
  "routes": [],
297
381
  "serviceId": "commerce"
@@ -301,8 +385,7 @@ var APPLICATIONS = {
301
385
  "kind": "pages",
302
386
  "apiUrl": null,
303
387
  "domains": [
304
- "guest.topolo.app",
305
- "topolo-commerce-guest-web.pages.dev"
388
+ "guest.topolo.app"
306
389
  ],
307
390
  "routes": [],
308
391
  "serviceId": null
@@ -312,8 +395,7 @@ var APPLICATIONS = {
312
395
  "kind": "pages",
313
396
  "apiUrl": null,
314
397
  "domains": [
315
- "commerce.topolo.app",
316
- "topolo-commerce-ops-web.pages.dev"
398
+ "commerce.topolo.app"
317
399
  ],
318
400
  "routes": [],
319
401
  "serviceId": null
@@ -323,14 +405,61 @@ var APPLICATIONS = {
323
405
  "kind": "pages",
324
406
  "apiUrl": null,
325
407
  "domains": [
326
- "station-commerce.topolo.app",
327
- "topolo-commerce-station-web.pages.dev"
408
+ "station-commerce.topolo.app"
328
409
  ],
329
410
  "routes": [],
330
411
  "serviceId": null
331
412
  }
332
413
  ]
333
414
  },
415
+ "compose": {
416
+ "id": "compose",
417
+ "appDir": "TopoloCompose",
418
+ "name": "topolo-compose",
419
+ "packageName": "@topolo/compose",
420
+ "productionUrl": "https://compose.topolo.app",
421
+ "services": [
422
+ "compose"
423
+ ],
424
+ "deployTargets": [
425
+ {
426
+ "name": "topolo-compose",
427
+ "kind": "worker",
428
+ "apiUrl": "https://compose.topolo.app",
429
+ "domains": [
430
+ "compose.topolo.app"
431
+ ],
432
+ "routes": [
433
+ "compose.topolo.app"
434
+ ],
435
+ "serviceId": "compose"
436
+ }
437
+ ]
438
+ },
439
+ "consent": {
440
+ "id": "consent",
441
+ "appDir": "TopoloConsent",
442
+ "name": "topolo-consent",
443
+ "packageName": "topolo-consent",
444
+ "productionUrl": "https://consent.topolo.app",
445
+ "services": [
446
+ "consent"
447
+ ],
448
+ "deployTargets": [
449
+ {
450
+ "name": "topolo-consent",
451
+ "kind": "worker",
452
+ "apiUrl": "https://consent.topolo.app",
453
+ "domains": [
454
+ "consent.topolo.app"
455
+ ],
456
+ "routes": [
457
+ "consent.topolo.app"
458
+ ],
459
+ "serviceId": "consent"
460
+ }
461
+ ]
462
+ },
334
463
  "crm": {
335
464
  "id": "crm",
336
465
  "appDir": "TopoloCRM",
@@ -342,20 +471,48 @@ var APPLICATIONS = {
342
471
  ],
343
472
  "deployTargets": [
344
473
  {
345
- "name": "topolo-crm-frontend",
346
- "kind": "pages",
347
- "apiUrl": null,
348
- "domains": [],
474
+ "name": "topolo-crm-api",
475
+ "kind": "worker",
476
+ "apiUrl": "https://crm-api.topolo.app",
477
+ "domains": [
478
+ "crm-api.topolo.app"
479
+ ],
349
480
  "routes": [],
350
- "serviceId": null
481
+ "serviceId": "crm"
351
482
  },
352
483
  {
353
- "name": "topolo-crm-worker",
484
+ "name": "topolo-crm-app",
354
485
  "kind": "worker",
355
- "apiUrl": "https://crm-api.topolo.app",
356
- "domains": [],
486
+ "apiUrl": null,
487
+ "domains": [
488
+ "crm.topolo.app"
489
+ ],
357
490
  "routes": [],
358
- "serviceId": "crm"
491
+ "serviceId": null
492
+ }
493
+ ]
494
+ },
495
+ "customer_success": {
496
+ "id": "customer_success",
497
+ "appDir": "TopoloSuccess",
498
+ "name": "topolo-success",
499
+ "packageName": "topolo-success",
500
+ "productionUrl": "https://success.topolo.app",
501
+ "services": [
502
+ "customer_success"
503
+ ],
504
+ "deployTargets": [
505
+ {
506
+ "name": "topolo-success",
507
+ "kind": "worker",
508
+ "apiUrl": "https://success.topolo.app",
509
+ "domains": [
510
+ "success.topolo.app"
511
+ ],
512
+ "routes": [
513
+ "success.topolo.app"
514
+ ],
515
+ "serviceId": "customer_success"
359
516
  }
360
517
  ]
361
518
  },
@@ -365,17 +522,51 @@ var APPLICATIONS = {
365
522
  "name": "topolo-developers",
366
523
  "packageName": "topolo-developers",
367
524
  "productionUrl": "https://developers.topolo.app",
368
- "services": [],
525
+ "services": [
526
+ "developers"
527
+ ],
369
528
  "deployTargets": [
370
529
  {
371
- "name": "topolo-developers",
372
- "kind": "pages",
530
+ "name": "topolo-catalog-cron",
531
+ "kind": "worker",
373
532
  "apiUrl": null,
533
+ "domains": [],
534
+ "routes": [],
535
+ "serviceId": null
536
+ },
537
+ {
538
+ "name": "topolo-developers",
539
+ "kind": "worker",
540
+ "apiUrl": "https://developers.topolo.app",
374
541
  "domains": [
375
542
  "developers.topolo.app"
376
543
  ],
377
544
  "routes": [],
378
- "serviceId": null
545
+ "serviceId": "developers"
546
+ }
547
+ ]
548
+ },
549
+ "director": {
550
+ "id": "director",
551
+ "appDir": "TopoloDirector",
552
+ "name": "topolo-director",
553
+ "packageName": "topolo-director",
554
+ "productionUrl": "https://director.topolo.app",
555
+ "services": [
556
+ "director"
557
+ ],
558
+ "deployTargets": [
559
+ {
560
+ "name": "topolo-director",
561
+ "kind": "worker",
562
+ "apiUrl": "https://director.topolo.app",
563
+ "domains": [
564
+ "director.topolo.app"
565
+ ],
566
+ "routes": [
567
+ "director.topolo.app"
568
+ ],
569
+ "serviceId": "director"
379
570
  }
380
571
  ]
381
572
  },
@@ -403,8 +594,8 @@ var APPLICATIONS = {
403
594
  "id": "feed",
404
595
  "appDir": "TopoloFeed",
405
596
  "name": "TopoloFeed",
406
- "packageName": null,
407
- "productionUrl": "https://topolo-feed-api.topolo.app",
597
+ "packageName": "topolo-feed",
598
+ "productionUrl": "https://feed-api.topolo.app",
408
599
  "services": [
409
600
  "feed"
410
601
  ],
@@ -412,29 +603,53 @@ var APPLICATIONS = {
412
603
  {
413
604
  "name": "topolo-feed-analytics-api",
414
605
  "kind": "worker",
415
- "apiUrl": "https://topolo-feed-analytics-api.topolo.app",
606
+ "apiUrl": "https://feed-analytics-api.topolo.app",
416
607
  "domains": [
417
- "topolo-feed-analytics-api.topolo.app"
608
+ "feed-analytics-api.topolo.app"
418
609
  ],
419
610
  "routes": [
420
- "topolo-feed-analytics-api.topolo.app"
611
+ "feed-analytics-api.topolo.app"
421
612
  ],
422
613
  "serviceId": null
423
614
  },
424
615
  {
425
616
  "name": "topolo-feed-api",
426
617
  "kind": "worker",
427
- "apiUrl": "https://topolo-feed-api.topolo.app",
618
+ "apiUrl": "https://feed-api.topolo.app",
428
619
  "domains": [
429
- "topolo-feed-api.topolo.app"
620
+ "feed-api.topolo.app"
430
621
  ],
431
622
  "routes": [
432
- "topolo-feed-api.topolo.app"
623
+ "feed-api.topolo.app"
433
624
  ],
434
625
  "serviceId": "feed"
435
626
  }
436
627
  ]
437
628
  },
629
+ "flow": {
630
+ "id": "flow",
631
+ "appDir": "TopoloFlow",
632
+ "name": "topolo-flow",
633
+ "packageName": "topolo-flow",
634
+ "productionUrl": "https://flow.topolo.app",
635
+ "services": [
636
+ "flow"
637
+ ],
638
+ "deployTargets": [
639
+ {
640
+ "name": "topolo-flow",
641
+ "kind": "worker",
642
+ "apiUrl": "https://flow.topolo.app",
643
+ "domains": [
644
+ "flow.topolo.app"
645
+ ],
646
+ "routes": [
647
+ "flow.topolo.app"
648
+ ],
649
+ "serviceId": "flow"
650
+ }
651
+ ]
652
+ },
438
653
  "forecast": {
439
654
  "id": "forecast",
440
655
  "appDir": "TopoloForecast",
@@ -446,23 +661,123 @@ var APPLICATIONS = {
446
661
  ],
447
662
  "deployTargets": [
448
663
  {
449
- "name": "forecast",
450
- "kind": "pages",
664
+ "name": "topolo-forecast",
665
+ "kind": "worker",
451
666
  "apiUrl": null,
452
- "domains": [],
667
+ "domains": [
668
+ "forecast.topolo.app"
669
+ ],
453
670
  "routes": [],
454
671
  "serviceId": null
455
672
  },
456
673
  {
457
- "name": "forecast-worker-production",
674
+ "name": "topolo-forecast-api",
458
675
  "kind": "worker",
459
- "apiUrl": "https://forecast-worker-production.topolo.workers.dev",
460
- "domains": [],
676
+ "apiUrl": "https://forecast-api.topolo.app",
677
+ "domains": [
678
+ "forecast-api.topolo.app"
679
+ ],
461
680
  "routes": [],
462
681
  "serviceId": "forecast"
463
682
  }
464
683
  ]
465
684
  },
685
+ "forms": {
686
+ "id": "forms",
687
+ "appDir": "TopoloForms",
688
+ "name": "topolo-forms",
689
+ "packageName": "topolo-forms",
690
+ "productionUrl": "https://forms.topolo.app",
691
+ "services": [
692
+ "forms"
693
+ ],
694
+ "deployTargets": [
695
+ {
696
+ "name": "topolo-forms",
697
+ "kind": "worker",
698
+ "apiUrl": "https://forms.topolo.app",
699
+ "domains": [
700
+ "forms.topolo.app"
701
+ ],
702
+ "routes": [
703
+ "forms.topolo.app"
704
+ ],
705
+ "serviceId": "forms"
706
+ }
707
+ ]
708
+ },
709
+ "home": {
710
+ "id": "home",
711
+ "appDir": "TopoloHome",
712
+ "name": "topolo-home",
713
+ "packageName": "topolo-home",
714
+ "productionUrl": "https://home.topolo.app",
715
+ "services": [
716
+ "home"
717
+ ],
718
+ "deployTargets": [
719
+ {
720
+ "name": "topolo-home",
721
+ "kind": "worker",
722
+ "apiUrl": "https://home.topolo.app",
723
+ "domains": [
724
+ "home.topolo.app"
725
+ ],
726
+ "routes": [
727
+ "home.topolo.app"
728
+ ],
729
+ "serviceId": "home"
730
+ }
731
+ ]
732
+ },
733
+ "insights": {
734
+ "id": "insights",
735
+ "appDir": "TopoloInsights",
736
+ "name": "topolo-insights",
737
+ "packageName": "topolo-insights",
738
+ "productionUrl": "https://insights.topolo.app",
739
+ "services": [
740
+ "insights"
741
+ ],
742
+ "deployTargets": [
743
+ {
744
+ "name": "topolo-insights",
745
+ "kind": "worker",
746
+ "apiUrl": "https://insights.topolo.app",
747
+ "domains": [
748
+ "insights.topolo.app"
749
+ ],
750
+ "routes": [
751
+ "insights.topolo.app"
752
+ ],
753
+ "serviceId": "insights"
754
+ }
755
+ ]
756
+ },
757
+ "inventory": {
758
+ "id": "inventory",
759
+ "appDir": "TopoloInventory",
760
+ "name": "topolo-inventory",
761
+ "packageName": "topolo-inventory",
762
+ "productionUrl": "https://inventory.topolo.app",
763
+ "services": [
764
+ "inventory"
765
+ ],
766
+ "deployTargets": [
767
+ {
768
+ "name": "topolo-inventory",
769
+ "kind": "worker",
770
+ "apiUrl": "https://inventory.topolo.app",
771
+ "domains": [
772
+ "inventory.topolo.app"
773
+ ],
774
+ "routes": [
775
+ "inventory.topolo.app"
776
+ ],
777
+ "serviceId": "inventory"
778
+ }
779
+ ]
780
+ },
466
781
  "learn": {
467
782
  "id": "learn",
468
783
  "appDir": "TopoloLearn",
@@ -474,8 +789,8 @@ var APPLICATIONS = {
474
789
  ],
475
790
  "deployTargets": [
476
791
  {
477
- "name": "topololearn",
478
- "kind": "pages",
792
+ "name": "topolo-learn",
793
+ "kind": "worker",
479
794
  "apiUrl": null,
480
795
  "domains": [
481
796
  "learn.topolo.app"
@@ -484,17 +799,41 @@ var APPLICATIONS = {
484
799
  "serviceId": null
485
800
  },
486
801
  {
487
- "name": "topololearn-api",
802
+ "name": "topolo-learn-api",
488
803
  "kind": "worker",
489
- "apiUrl": "https://topololearn-api.topolo.workers.dev",
804
+ "apiUrl": "https://learn-api.topolo.app",
490
805
  "domains": [
491
- "topololearn-api.topolo.workers.dev"
806
+ "learn-api.topolo.app"
492
807
  ],
493
808
  "routes": [],
494
809
  "serviceId": "learn"
495
810
  }
496
811
  ]
497
812
  },
813
+ "localize": {
814
+ "id": "localize",
815
+ "appDir": "TopoloLocalize",
816
+ "name": "topolo-localize",
817
+ "packageName": "topolo-localize",
818
+ "productionUrl": "https://localize.topolo.app",
819
+ "services": [
820
+ "localize"
821
+ ],
822
+ "deployTargets": [
823
+ {
824
+ "name": "topolo-localize",
825
+ "kind": "worker",
826
+ "apiUrl": "https://localize.topolo.app",
827
+ "domains": [
828
+ "localize.topolo.app"
829
+ ],
830
+ "routes": [
831
+ "localize.topolo.app"
832
+ ],
833
+ "serviceId": "localize"
834
+ }
835
+ ]
836
+ },
498
837
  "mail": {
499
838
  "id": "mail",
500
839
  "appDir": "TopoloMail",
@@ -507,7 +846,7 @@ var APPLICATIONS = {
507
846
  "deployTargets": [
508
847
  {
509
848
  "name": "topolo-mail",
510
- "kind": "workers",
849
+ "kind": "worker",
511
850
  "apiUrl": "https://mail.topolo.app",
512
851
  "domains": [
513
852
  "mail.topolo.app"
@@ -519,20 +858,11 @@ var APPLICATIONS = {
519
858
  }
520
859
  ]
521
860
  },
522
- "mcp": {
523
- "id": "mcp",
524
- "appDir": "TopoloMCP",
525
- "name": "@topolo/mcp",
526
- "packageName": "@topolo/mcp",
527
- "productionUrl": null,
528
- "services": [],
529
- "deployTargets": []
530
- },
531
861
  "mdm": {
532
862
  "id": "mdm",
533
863
  "appDir": "TopoloMDM",
534
864
  "name": "TopoloMDM",
535
- "packageName": null,
865
+ "packageName": "topolo-mdm",
536
866
  "productionUrl": "https://mdm.topolo.app",
537
867
  "services": [
538
868
  "mdm"
@@ -541,22 +871,21 @@ var APPLICATIONS = {
541
871
  {
542
872
  "name": "topolo-mdm-api",
543
873
  "kind": "worker",
544
- "apiUrl": "https://topolo-mdm-api.topolo.app",
874
+ "apiUrl": "https://mdm-api.topolo.app",
545
875
  "domains": [
546
- "topolo-mdm-api.topolo.app"
876
+ "mdm-api.topolo.app"
547
877
  ],
548
878
  "routes": [
549
- "topolo-mdm-api.topolo.app"
879
+ "mdm-api.topolo.app"
550
880
  ],
551
881
  "serviceId": "mdm"
552
882
  },
553
883
  {
554
884
  "name": "topolo-mdm-console",
555
- "kind": "pages",
885
+ "kind": "worker",
556
886
  "apiUrl": null,
557
887
  "domains": [
558
- "mdm.topolo.app",
559
- "topolo-mdm-console.pages.dev"
888
+ "mdm.topolo.app"
560
889
  ],
561
890
  "routes": [
562
891
  "mdm.topolo.app"
@@ -577,7 +906,7 @@ var APPLICATIONS = {
577
906
  "deployTargets": [
578
907
  {
579
908
  "name": "topolo-messaging",
580
- "kind": "workers",
909
+ "kind": "worker",
581
910
  "apiUrl": "https://messages.topolo.app",
582
911
  "domains": [
583
912
  "messages.topolo.app"
@@ -587,7 +916,7 @@ var APPLICATIONS = {
587
916
  },
588
917
  {
589
918
  "name": "topolo-messaging-dispatch",
590
- "kind": "workers",
919
+ "kind": "worker",
591
920
  "apiUrl": null,
592
921
  "domains": [],
593
922
  "routes": [],
@@ -607,11 +936,10 @@ var APPLICATIONS = {
607
936
  "deployTargets": [
608
937
  {
609
938
  "name": "topolo-nexus-dashboard",
610
- "kind": "pages",
939
+ "kind": "worker",
611
940
  "apiUrl": null,
612
941
  "domains": [
613
- "nexus.topolo.app",
614
- "topolo-nexus-dashboard.pages.dev"
942
+ "nexus.topolo.app"
615
943
  ],
616
944
  "routes": [],
617
945
  "serviceId": null
@@ -619,19 +947,52 @@ var APPLICATIONS = {
619
947
  {
620
948
  "name": "topolo-nexus-gateway",
621
949
  "kind": "worker",
622
- "apiUrl": "https://topolo-nexus-gateway.topolo.workers.dev",
950
+ "apiUrl": "https://nexus-api.topolo.app",
623
951
  "domains": [
624
- "topolo-nexus-gateway.topolo.workers.dev"
952
+ "nexus-api.topolo.app"
625
953
  ],
626
954
  "routes": [],
627
955
  "serviceId": "nexus"
628
956
  }
629
957
  ]
630
958
  },
959
+ "notify": {
960
+ "id": "notify",
961
+ "appDir": "TopoloNotify",
962
+ "name": "topolo-notify",
963
+ "packageName": "@topolo/notify",
964
+ "productionUrl": "https://notify.topolo.app",
965
+ "services": [
966
+ "notify"
967
+ ],
968
+ "deployTargets": [
969
+ {
970
+ "name": "topolo-notify",
971
+ "kind": "worker",
972
+ "apiUrl": "https://notify.topolo.app",
973
+ "domains": [
974
+ "notify.topolo.app"
975
+ ],
976
+ "routes": [
977
+ "notify.topolo.app"
978
+ ],
979
+ "serviceId": "notify"
980
+ }
981
+ ]
982
+ },
983
+ "observability_watch": {
984
+ "id": "observability_watch",
985
+ "appDir": "TopoloObservabilityWatch",
986
+ "name": "topolo-observability-watch",
987
+ "packageName": "topolo-observability-watch",
988
+ "productionUrl": null,
989
+ "services": [],
990
+ "deployTargets": []
991
+ },
631
992
  "one": {
632
993
  "id": "one",
633
994
  "appDir": "TopoloOne",
634
- "name": "topolo-oneclick-sso",
995
+ "name": "TopoloOne",
635
996
  "packageName": "topolo-oneclick-sso",
636
997
  "productionUrl": "https://one.topolo.app",
637
998
  "services": [
@@ -639,44 +1000,65 @@ var APPLICATIONS = {
639
1000
  ],
640
1001
  "deployTargets": [
641
1002
  {
642
- "name": "ai-chat-rag",
643
- "kind": "worker",
1003
+ "name": "topolo-one",
1004
+ "kind": "pages",
644
1005
  "apiUrl": null,
645
1006
  "domains": [
646
- "ai-chat-rag.topolo.workers.dev"
1007
+ "one.topolo.app"
647
1008
  ],
648
1009
  "routes": [],
649
1010
  "serviceId": null
650
1011
  },
651
1012
  {
652
- "name": "topoloone",
653
- "kind": "pages",
1013
+ "name": "topolo-one-website",
1014
+ "kind": "worker",
654
1015
  "apiUrl": null,
655
1016
  "domains": [
656
- "oneclick-dashboard.pages.dev"
1017
+ "topolo.io",
1018
+ "www.topolo.io"
657
1019
  ],
658
1020
  "routes": [],
659
1021
  "serviceId": null
660
1022
  },
661
1023
  {
662
- "name": "topoloone-website",
1024
+ "name": "topolo-one-worker",
663
1025
  "kind": "worker",
664
- "apiUrl": null,
1026
+ "apiUrl": "https://one.topolo.app",
665
1027
  "domains": [
666
- "one.topolo.io"
1028
+ "one.topolo.app",
1029
+ "topolo.app",
1030
+ "www.topolo.app"
667
1031
  ],
668
- "routes": [],
669
- "serviceId": null
670
- },
1032
+ "routes": [
1033
+ "one.topolo.app/*",
1034
+ "topolo.app",
1035
+ "www.topolo.app/*"
1036
+ ],
1037
+ "serviceId": "one"
1038
+ }
1039
+ ]
1040
+ },
1041
+ "p2p": {
1042
+ "id": "p2p",
1043
+ "appDir": "TopoloP2P",
1044
+ "name": "topolo-p2p",
1045
+ "packageName": "topolo-p2p",
1046
+ "productionUrl": "https://p2p.topolo.app",
1047
+ "services": [
1048
+ "p2p"
1049
+ ],
1050
+ "deployTargets": [
671
1051
  {
672
- "name": "topoloone-worker",
1052
+ "name": "topolo-p2p",
673
1053
  "kind": "worker",
674
- "apiUrl": "https://topoloone-worker.topolo.workers.dev",
675
- "domains": [],
1054
+ "apiUrl": "https://p2p.topolo.app",
1055
+ "domains": [
1056
+ "p2p.topolo.app"
1057
+ ],
676
1058
  "routes": [
677
- "one.topolo.app/*"
1059
+ "p2p.topolo.app"
678
1060
  ],
679
- "serviceId": "one"
1061
+ "serviceId": "p2p"
680
1062
  }
681
1063
  ]
682
1064
  },
@@ -693,18 +1075,68 @@ var APPLICATIONS = {
693
1075
  {
694
1076
  "name": "topolo-pay",
695
1077
  "kind": "worker",
696
- "apiUrl": "https://topolo-pay.topolo.workers.dev",
697
- "domains": [],
1078
+ "apiUrl": "https://pay.topolo.app",
1079
+ "domains": [
1080
+ "pay.topolo.app"
1081
+ ],
698
1082
  "routes": [],
699
1083
  "serviceId": "pay"
700
1084
  }
701
1085
  ]
702
1086
  },
1087
+ "people": {
1088
+ "id": "people",
1089
+ "appDir": "TopoloPeople",
1090
+ "name": "topolo-people",
1091
+ "packageName": "topolo-people",
1092
+ "productionUrl": "https://people.topolo.app",
1093
+ "services": [
1094
+ "people"
1095
+ ],
1096
+ "deployTargets": [
1097
+ {
1098
+ "name": "topolo-people",
1099
+ "kind": "worker",
1100
+ "apiUrl": "https://people.topolo.app",
1101
+ "domains": [
1102
+ "people.topolo.app"
1103
+ ],
1104
+ "routes": [
1105
+ "people.topolo.app"
1106
+ ],
1107
+ "serviceId": "people"
1108
+ }
1109
+ ]
1110
+ },
1111
+ "pulse": {
1112
+ "id": "pulse",
1113
+ "appDir": "TopoloPulse",
1114
+ "name": "topolo-pulse",
1115
+ "packageName": "topolo-pulse",
1116
+ "productionUrl": "https://pulse.topolo.app",
1117
+ "services": [
1118
+ "pulse"
1119
+ ],
1120
+ "deployTargets": [
1121
+ {
1122
+ "name": "topolo-pulse",
1123
+ "kind": "worker",
1124
+ "apiUrl": "https://pulse.topolo.app",
1125
+ "domains": [
1126
+ "pulse.topolo.app"
1127
+ ],
1128
+ "routes": [
1129
+ "pulse.topolo.app"
1130
+ ],
1131
+ "serviceId": "pulse"
1132
+ }
1133
+ ]
1134
+ },
703
1135
  "quro": {
704
1136
  "id": "quro",
705
1137
  "appDir": "TopoloQuro",
706
1138
  "name": "TopoloQuro",
707
- "packageName": null,
1139
+ "packageName": "topolo-quro",
708
1140
  "productionUrl": "https://quro.topolo.app",
709
1141
  "services": [
710
1142
  "quro.api",
@@ -715,7 +1147,9 @@ var APPLICATIONS = {
715
1147
  "name": "quro-api",
716
1148
  "kind": "worker",
717
1149
  "apiUrl": "https://api.ol0.me",
718
- "domains": [],
1150
+ "domains": [
1151
+ "api.ol0.me"
1152
+ ],
719
1153
  "routes": [],
720
1154
  "serviceId": "quro.api"
721
1155
  },
@@ -723,7 +1157,9 @@ var APPLICATIONS = {
723
1157
  "name": "quro-redirect-system",
724
1158
  "kind": "worker",
725
1159
  "apiUrl": "https://ol0.me",
726
- "domains": [],
1160
+ "domains": [
1161
+ "ol0.me"
1162
+ ],
727
1163
  "routes": [
728
1164
  "ol0.me/*"
729
1165
  ],
@@ -731,9 +1167,11 @@ var APPLICATIONS = {
731
1167
  },
732
1168
  {
733
1169
  "name": "quro-ui",
734
- "kind": "pages",
1170
+ "kind": "worker",
735
1171
  "apiUrl": null,
736
- "domains": [],
1172
+ "domains": [
1173
+ "quro.topolo.app"
1174
+ ],
737
1175
  "routes": [],
738
1176
  "serviceId": null
739
1177
  }
@@ -750,8 +1188,8 @@ var APPLICATIONS = {
750
1188
  ],
751
1189
  "deployTargets": [
752
1190
  {
753
- "name": "roadmapper",
754
- "kind": "pages",
1191
+ "name": "topolo-roadmapper",
1192
+ "kind": "worker",
755
1193
  "apiUrl": null,
756
1194
  "domains": [
757
1195
  "roadmapper.topolo.app"
@@ -760,7 +1198,7 @@ var APPLICATIONS = {
760
1198
  "serviceId": null
761
1199
  },
762
1200
  {
763
- "name": "topolo-production-roadmapper",
1201
+ "name": "topolo-roadmapper-api",
764
1202
  "kind": "worker",
765
1203
  "apiUrl": "https://roadmapper-api.topolo.app",
766
1204
  "domains": [
@@ -771,6 +1209,30 @@ var APPLICATIONS = {
771
1209
  }
772
1210
  ]
773
1211
  },
1212
+ "sign": {
1213
+ "id": "sign",
1214
+ "appDir": "TopoloSign",
1215
+ "name": "topolo-sign",
1216
+ "packageName": "topolo-sign",
1217
+ "productionUrl": "https://sign.topolo.app",
1218
+ "services": [
1219
+ "sign"
1220
+ ],
1221
+ "deployTargets": [
1222
+ {
1223
+ "name": "topolo-sign",
1224
+ "kind": "worker",
1225
+ "apiUrl": "https://sign.topolo.app",
1226
+ "domains": [
1227
+ "sign.topolo.app"
1228
+ ],
1229
+ "routes": [
1230
+ "sign.topolo.app"
1231
+ ],
1232
+ "serviceId": "sign"
1233
+ }
1234
+ ]
1235
+ },
774
1236
  "social_studio": {
775
1237
  "id": "social_studio",
776
1238
  "appDir": "TopoloSocialStudio",
@@ -783,17 +1245,21 @@ var APPLICATIONS = {
783
1245
  "deployTargets": [
784
1246
  {
785
1247
  "name": "topolo-social-studio",
786
- "kind": "pages",
1248
+ "kind": "worker",
787
1249
  "apiUrl": null,
788
- "domains": [],
1250
+ "domains": [
1251
+ "studio.topolo.app"
1252
+ ],
789
1253
  "routes": [],
790
1254
  "serviceId": null
791
1255
  },
792
1256
  {
793
1257
  "name": "topolo-social-studio-api",
794
1258
  "kind": "worker",
795
- "apiUrl": "https://topolo-social-studio-api.topolo.workers.dev",
796
- "domains": [],
1259
+ "apiUrl": "https://studio-api.topolo.app",
1260
+ "domains": [
1261
+ "studio-api.topolo.app"
1262
+ ],
797
1263
  "routes": [],
798
1264
  "serviceId": "social_studio"
799
1265
  },
@@ -818,23 +1284,27 @@ var APPLICATIONS = {
818
1284
  ],
819
1285
  "deployTargets": [
820
1286
  {
821
- "name": "socialize",
1287
+ "name": "topolo-socialize",
822
1288
  "kind": "pages",
823
1289
  "apiUrl": null,
824
- "domains": [],
1290
+ "domains": [
1291
+ "socialize.topolo.app"
1292
+ ],
825
1293
  "routes": [],
826
1294
  "serviceId": null
827
1295
  },
828
1296
  {
829
- "name": "socialize-prod-api",
1297
+ "name": "topolo-socialize-api",
830
1298
  "kind": "worker",
831
- "apiUrl": "https://socialize-prod-api.topolo.workers.dev",
832
- "domains": [],
1299
+ "apiUrl": "https://socialize-api.topolo.app",
1300
+ "domains": [
1301
+ "socialize-api.topolo.app"
1302
+ ],
833
1303
  "routes": [],
834
1304
  "serviceId": "socialize"
835
1305
  },
836
1306
  {
837
- "name": "socialize-prod-scheduler",
1307
+ "name": "topolo-socialize-scheduler",
838
1308
  "kind": "worker",
839
1309
  "apiUrl": null,
840
1310
  "domains": [],
@@ -843,6 +1313,54 @@ var APPLICATIONS = {
843
1313
  }
844
1314
  ]
845
1315
  },
1316
+ "spaces": {
1317
+ "id": "spaces",
1318
+ "appDir": "TopoloSpaces",
1319
+ "name": "topolo-spaces",
1320
+ "packageName": "@topolo/spaces",
1321
+ "productionUrl": "https://spaces.topolo.app",
1322
+ "services": [
1323
+ "spaces"
1324
+ ],
1325
+ "deployTargets": [
1326
+ {
1327
+ "name": "topolo-spaces",
1328
+ "kind": "worker",
1329
+ "apiUrl": "https://spaces.topolo.app",
1330
+ "domains": [
1331
+ "spaces.topolo.app"
1332
+ ],
1333
+ "routes": [
1334
+ "spaces.topolo.app"
1335
+ ],
1336
+ "serviceId": "spaces"
1337
+ }
1338
+ ]
1339
+ },
1340
+ "status": {
1341
+ "id": "status",
1342
+ "appDir": "TopoloStatus",
1343
+ "name": "topolo-status",
1344
+ "packageName": "topolo-status",
1345
+ "productionUrl": "https://status.topolo.app",
1346
+ "services": [
1347
+ "status"
1348
+ ],
1349
+ "deployTargets": [
1350
+ {
1351
+ "name": "topolo-status",
1352
+ "kind": "worker",
1353
+ "apiUrl": "https://status.topolo.app",
1354
+ "domains": [
1355
+ "status.topolo.app"
1356
+ ],
1357
+ "routes": [
1358
+ "status.topolo.app"
1359
+ ],
1360
+ "serviceId": "status"
1361
+ }
1362
+ ]
1363
+ },
846
1364
  "support": {
847
1365
  "id": "support",
848
1366
  "appDir": "TopoloSupport",
@@ -855,7 +1373,7 @@ var APPLICATIONS = {
855
1373
  "deployTargets": [
856
1374
  {
857
1375
  "name": "topolo-support",
858
- "kind": "workers",
1376
+ "kind": "worker",
859
1377
  "apiUrl": "https://support.topolo.app",
860
1378
  "domains": [
861
1379
  "support.topolo.app"
@@ -867,6 +1385,54 @@ var APPLICATIONS = {
867
1385
  }
868
1386
  ]
869
1387
  },
1388
+ "survey": {
1389
+ "id": "survey",
1390
+ "appDir": "TopoloSurvey",
1391
+ "name": "topolo-survey",
1392
+ "packageName": "topolo-survey",
1393
+ "productionUrl": "https://survey.topolo.app",
1394
+ "services": [
1395
+ "survey"
1396
+ ],
1397
+ "deployTargets": [
1398
+ {
1399
+ "name": "topolo-survey",
1400
+ "kind": "worker",
1401
+ "apiUrl": "https://survey.topolo.app",
1402
+ "domains": [
1403
+ "survey.topolo.app"
1404
+ ],
1405
+ "routes": [
1406
+ "survey.topolo.app"
1407
+ ],
1408
+ "serviceId": "survey"
1409
+ }
1410
+ ]
1411
+ },
1412
+ "voice": {
1413
+ "id": "voice",
1414
+ "appDir": "TopoloVoice",
1415
+ "name": "topolo-voice",
1416
+ "packageName": "topolo-voice",
1417
+ "productionUrl": "https://voice.topolo.app",
1418
+ "services": [
1419
+ "voice"
1420
+ ],
1421
+ "deployTargets": [
1422
+ {
1423
+ "name": "topolo-voice",
1424
+ "kind": "worker",
1425
+ "apiUrl": "https://voice.topolo.app",
1426
+ "domains": [
1427
+ "voice.topolo.app"
1428
+ ],
1429
+ "routes": [
1430
+ "voice.topolo.app"
1431
+ ],
1432
+ "serviceId": "voice"
1433
+ }
1434
+ ]
1435
+ },
870
1436
  "web": {
871
1437
  "id": "web",
872
1438
  "appDir": "TopoloWeb",
@@ -878,7 +1444,7 @@ var APPLICATIONS = {
878
1444
  ],
879
1445
  "deployTargets": [
880
1446
  {
881
- "name": "topoloweb-api",
1447
+ "name": "topolo-web-api",
882
1448
  "kind": "worker",
883
1449
  "apiUrl": "https://web-api.topolo.app",
884
1450
  "domains": [
@@ -888,7 +1454,7 @@ var APPLICATIONS = {
888
1454
  "serviceId": "web"
889
1455
  },
890
1456
  {
891
- "name": "topoloweb-runtime",
1457
+ "name": "topolo-web-runtime",
892
1458
  "kind": "worker",
893
1459
  "apiUrl": "https://sites.topolo.app",
894
1460
  "domains": [
@@ -898,8 +1464,8 @@ var APPLICATIONS = {
898
1464
  "serviceId": null
899
1465
  },
900
1466
  {
901
- "name": "topoloweb-studio",
902
- "kind": "pages",
1467
+ "name": "topolo-web-studio",
1468
+ "kind": "worker",
903
1469
  "apiUrl": null,
904
1470
  "domains": [
905
1471
  "web.topolo.app"
@@ -910,7 +1476,7 @@ var APPLICATIONS = {
910
1476
  ]
911
1477
  }
912
1478
  };
913
- var APPLICATION_REQUIREMENTS_VERSION = "2026-04-22.1";
1479
+ var APPLICATION_REQUIREMENTS_VERSION = "2026-05-01.1";
914
1480
  var APPLICATION_REQUIREMENTS = [
915
1481
  {
916
1482
  id: "platform-metadata",
@@ -968,14 +1534,16 @@ var APPLICATION_REQUIREMENTS = [
968
1534
  evidence: [
969
1535
  "@topolo/ui-kit is used for the platform shell where the app has authenticated UI",
970
1536
  "The shared launcher/app switcher is reachable from authenticated app chrome",
971
- "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu"
1537
+ "Account menu and sign-out behavior use TopoloAppShell or TopoloAccountMenu",
1538
+ "Authenticated app body content stays inside the viewport on mobile and desktop widths"
972
1539
  ],
973
1540
  implementation: [
974
1541
  "Use TopoloAppShell for authenticated app layouts",
975
1542
  "Use TopoloAccountMenu when a partial-shell surface still needs account chrome",
976
1543
  "Pass app-specific account actions as additive menu items instead of forking dropdowns",
977
1544
  "Use shared design tokens and platform UI primitives before creating local equivalents",
978
- "Keep mobile and desktop shell behavior aligned with the platform UI kit"
1545
+ "Keep mobile and desktop shell behavior aligned with the platform UI kit",
1546
+ "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"
979
1547
  ]
980
1548
  },
981
1549
  {
@@ -1042,6 +1610,22 @@ var APPLICATION_REQUIREMENTS = [
1042
1610
  "Keep command output JSON-stable for agents and human-readable with --no-json"
1043
1611
  ]
1044
1612
  },
1613
+ {
1614
+ id: "native-dashboard-widget",
1615
+ title: "Expose a native dashboard widget contract",
1616
+ summary: "Launchable first-party applications must populate TopoloOne live workspace through an app-owned /api/widget endpoint using the SDK widget response contract.",
1617
+ appliesTo: ["api"],
1618
+ evidence: [
1619
+ "The app-owned API exposes GET /api/widget",
1620
+ "The endpoint returns TopoloWidgetApiResponse from @topolo/sdk",
1621
+ "The endpoint derives organization/user context from the app auth boundary"
1622
+ ],
1623
+ implementation: [
1624
+ "Import createTopoloWidgetResponse from @topolo/sdk in the app backend",
1625
+ "Return native app metrics or action widgets instead of generic launch-card fallbacks",
1626
+ "Add a route-level test that validates the response with validateTopoloWidgetResponse"
1627
+ ]
1628
+ },
1045
1629
  {
1046
1630
  id: "observability-and-audit",
1047
1631
  title: "Emit platform audit and debugging signals",
@@ -1077,14 +1661,15 @@ var APPLICATION_REQUIREMENTS = [
1077
1661
  ];
1078
1662
  function applicationRequirementScopes(application) {
1079
1663
  const scopes = /* @__PURE__ */ new Set(["all"]);
1664
+ const appId = application.id;
1080
1665
  const hasBrowserSurface = Boolean(application.productionUrl) || application.deployTargets.some((target) => target.kind === "pages");
1081
1666
  const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.apiUrl));
1082
1667
  if (hasBrowserSurface) scopes.add("browser");
1083
1668
  if (hasApiSurface) scopes.add("api");
1084
- if (application.id === "cli" || application.id === "mcp" || application.id === "cloudcontrol") {
1669
+ if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
1085
1670
  scopes.add("tooling");
1086
1671
  }
1087
- if (application.id === "cli" || application.id === "mcp" || hasApiSurface) {
1672
+ if (appId === "cli" || appId === "mcp" || hasApiSurface) {
1088
1673
  scopes.add("agent_surface");
1089
1674
  }
1090
1675
  return Array.from(scopes);
@@ -1203,16 +1788,24 @@ function evaluateRequirement(application, requirement) {
1203
1788
  return finding(requirement, "met", "CloudControl deploy target metadata is present.", evidence);
1204
1789
  }
1205
1790
  case "agent-and-operator-surfaces": {
1791
+ const appId = application.id;
1206
1792
  if (application.services.length > 0) {
1207
1793
  evidence.push(`services=${application.services.join(",")}`);
1208
1794
  return finding(requirement, "partial", "SDK service discovery exists; typed SDK/CLI/MCP workflow coverage should be checked as APIs stabilize.", evidence);
1209
1795
  }
1210
- if (application.id === "cli" || application.id === "mcp" || application.id === "cloudcontrol") {
1211
- evidence.push(`tooling=${application.id}`);
1796
+ if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
1797
+ evidence.push(`tooling=${appId}`);
1212
1798
  return finding(requirement, "met", "This application is itself an agent/operator surface.", evidence);
1213
1799
  }
1214
1800
  return finding(requirement, "missing", "No SDK service or tooling surface is registered.", evidence);
1215
1801
  }
1802
+ case "native-dashboard-widget":
1803
+ return finding(
1804
+ requirement,
1805
+ "needs_review",
1806
+ "Catalog metadata cannot verify app-owned /api/widget implementation details.",
1807
+ evidence
1808
+ );
1216
1809
  case "observability-and-audit":
1217
1810
  return finding(
1218
1811
  requirement,
@@ -1272,20 +1865,38 @@ function resolveServiceUrl(service, overrides) {
1272
1865
  return DEFAULT_SERVICE_URLS[service];
1273
1866
  }
1274
1867
  var WRITE_METHODS = /* @__PURE__ */ new Set(["POST", "PUT", "PATCH", "DELETE"]);
1275
- var TopoloClient = class {
1868
+ var POSITIVE_CACHE_TTL_MS = 5 * 60 * 1e3;
1869
+ var NEGATIVE_CACHE_TTL_MS = 60 * 1e3;
1870
+ var TopoloClient = class _TopoloClient {
1276
1871
  credential;
1277
1872
  agent;
1278
1873
  serviceUrls;
1874
+ serviceIds;
1279
1875
  requireConfirmForWrites;
1280
1876
  timeoutMs;
1281
1877
  fetchImpl;
1282
1878
  debug;
1879
+ /**
1880
+ * Process-wide cache for slug → service-id lookups. Keyed by
1881
+ * `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
1882
+ * the same Auth share, but staging vs prod don't poison each other.
1883
+ * Cleared via `TopoloClient.clearServiceIdCache()` if a test needs it.
1884
+ */
1885
+ static serviceIdCache = /* @__PURE__ */ new Map();
1886
+ /**
1887
+ * Drop the slug→service-id cache. Test-only — production callers should
1888
+ * let the 5-minute TTL expire naturally.
1889
+ */
1890
+ static clearServiceIdCache() {
1891
+ _TopoloClient.serviceIdCache.clear();
1892
+ }
1283
1893
  constructor(options) {
1284
1894
  if (!options.credential) throw new TopoloAuthError("credential is required");
1285
1895
  if (!options.agent?.clientName) throw new TopoloAuthError("agent.clientName is required");
1286
1896
  this.credential = options.credential;
1287
1897
  this.agent = options.agent;
1288
1898
  this.serviceUrls = options.serviceUrls;
1899
+ this.serviceIds = options.serviceIds;
1289
1900
  this.requireConfirmForWrites = options.requireConfirmForWrites !== false;
1290
1901
  this.timeoutMs = options.timeoutMs ?? 3e4;
1291
1902
  this.fetchImpl = options.fetch ?? fetch;
@@ -1320,7 +1931,7 @@ var TopoloClient = class {
1320
1931
  const headers = new Headers();
1321
1932
  headers.set("Accept", "application/json");
1322
1933
  if (opts.body !== void 0) headers.set("Content-Type", "application/json");
1323
- const platformServiceId = PLATFORM_SERVICE_IDS[opts.service];
1934
+ const platformServiceId = resolveConfiguredServiceId(opts.service, this.serviceIds);
1324
1935
  if (platformServiceId) headers.set("X-Service-ID", platformServiceId);
1325
1936
  applyAuthHeaders(headers, this.credential);
1326
1937
  const requestId = generateRequestId();
@@ -1394,6 +2005,63 @@ var TopoloClient = class {
1394
2005
  });
1395
2006
  return parsed;
1396
2007
  }
2008
+ /**
2009
+ * Resolve a service-slug → opaque service-id via caller config or TopoloAuth.
2010
+ *
2011
+ * Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
2012
+ * results (404) are cached for 60s so a typo doesn't hot-loop the
2013
+ * resolver. Returns null when the slug isn't registered — callers decide
2014
+ * whether to throw.
2015
+ *
2016
+ * No credential is sent: the endpoint is public (slugs aren't secret).
2017
+ * This keeps the resolver usable during early bootstrap before a caller
2018
+ * has acquired an access token.
2019
+ */
2020
+ async getServiceIdBySlug(slug) {
2021
+ if (typeof slug !== "string") return null;
2022
+ const normalized = slug.trim().toLowerCase();
2023
+ if (!normalized) return null;
2024
+ const configuredServiceId = resolveConfiguredServiceId(normalized, this.serviceIds);
2025
+ if (configuredServiceId) return configuredServiceId;
2026
+ const authBase = resolveServiceUrl("auth", this.serviceUrls);
2027
+ const cacheKey = `${authBase}|${normalized}`;
2028
+ const now = Date.now();
2029
+ const cached = _TopoloClient.serviceIdCache.get(cacheKey);
2030
+ if (cached && cached.expiresAt > now) {
2031
+ return cached.value;
2032
+ }
2033
+ const url = new URL(
2034
+ `/api/services/by-slug/${encodeURIComponent(normalized)}`,
2035
+ authBase.endsWith("/") ? authBase : `${authBase}/`
2036
+ ).toString();
2037
+ let res;
2038
+ try {
2039
+ res = await this.fetchImpl(url, {
2040
+ method: "GET",
2041
+ headers: { Accept: "application/json" }
2042
+ });
2043
+ } catch {
2044
+ return null;
2045
+ }
2046
+ if (res.status === 404) {
2047
+ _TopoloClient.serviceIdCache.set(cacheKey, {
2048
+ value: null,
2049
+ expiresAt: now + NEGATIVE_CACHE_TTL_MS
2050
+ });
2051
+ return null;
2052
+ }
2053
+ if (!res.ok) {
2054
+ return null;
2055
+ }
2056
+ const body = await res.json().catch(() => null);
2057
+ const serviceId = body?.data?.service_id;
2058
+ const value = typeof serviceId === "string" && serviceId ? serviceId : null;
2059
+ _TopoloClient.serviceIdCache.set(cacheKey, {
2060
+ value,
2061
+ expiresAt: now + POSITIVE_CACHE_TTL_MS
2062
+ });
2063
+ return value;
2064
+ }
1397
2065
  /**
1398
2066
  * Introspect the current credential. Returns the caller's resolved identity,
1399
2067
  * organization, and permission set. Used by CLI `whoami` and by MCP to gate
@@ -1430,6 +2098,26 @@ var TopoloClient = class {
1430
2098
  };
1431
2099
  }
1432
2100
  };
2101
+ function resolveConfiguredServiceId(slug, serviceIds) {
2102
+ for (const serviceKey of serviceKeyCandidates(slug)) {
2103
+ const configured = serviceIds?.[serviceKey];
2104
+ if (typeof configured === "string" && configured.trim()) return configured.trim();
2105
+ const envKey = `TOPOLO_SERVICE_ID_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
2106
+ const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
2107
+ if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
2108
+ }
2109
+ return null;
2110
+ }
2111
+ function serviceKeyCandidates(slug) {
2112
+ const normalized = slug.trim().toLowerCase();
2113
+ const withoutTopolo = normalized.startsWith("topolo-") ? normalized.slice("topolo-".length) : normalized;
2114
+ return [.../* @__PURE__ */ new Set([
2115
+ normalized,
2116
+ normalized.replace(/-/g, "_"),
2117
+ withoutTopolo,
2118
+ withoutTopolo.replace(/-/g, "_")
2119
+ ])];
2120
+ }
1433
2121
  function describeError(body, fallback) {
1434
2122
  if (body && typeof body === "object") {
1435
2123
  const maybe = body;
@@ -1557,8 +2245,11 @@ import {
1557
2245
  } from "@modelcontextprotocol/sdk/types.js";
1558
2246
 
1559
2247
  // src/gating.ts
2248
+ function hasPlatformAccess(set) {
2249
+ return (set.role === "platform_super_admin" || set.role === "platform_admin") && set.orgSlug === "admin";
2250
+ }
1560
2251
  function hasScope(set, required) {
1561
- if (set.role === "super_admin") return true;
2252
+ if (hasPlatformAccess(set)) return true;
1562
2253
  if (set.permissions.includes("*")) return true;
1563
2254
  const [servicePart, actionPart] = splitPermission(required);
1564
2255
  if (!servicePart) return set.permissions.includes(required);
@@ -1913,7 +2604,7 @@ function statusesAtOrWorse(threshold) {
1913
2604
  }
1914
2605
 
1915
2606
  // src/version.ts
1916
- var MCP_VERSION = "0.2.4";
2607
+ var MCP_VERSION = "0.3.0";
1917
2608
 
1918
2609
  // src/server.ts
1919
2610
  function buildServer(topolo, scopes, tools = TOOLS) {
@@ -2008,9 +2699,11 @@ async function main() {
2008
2699
  async function loadScopes(topolo) {
2009
2700
  try {
2010
2701
  const info = await topolo.identity.whoami();
2702
+ const userWithOrgSlug = info.user;
2011
2703
  return {
2012
2704
  permissions: info.user.permissions,
2013
- role: info.user.role
2705
+ role: info.user.role,
2706
+ orgSlug: info.organization?.slug || userWithOrgSlug.orgSlug || void 0
2014
2707
  };
2015
2708
  } catch (err) {
2016
2709
  if (err instanceof TopoloAuthError) {