@topolo/mcp 0.10.3 → 0.11.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
- // ../../../development-workflow-acceleration/node_modules/.pnpm/@topolo+sdk@0.10.4/node_modules/@topolo/sdk/dist/index.js
6
+ // ../../../public-platform-tooling-boundary-20260813/packages/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);
@@ -356,1730 +356,6 @@ var APP_API_URLS = {
356
356
  auth: "https://auth.topolo.app",
357
357
  developers: "https://developers.topolo.app"
358
358
  };
359
- var APPLICATIONS = {
360
- "admin": {
361
- "id": "admin",
362
- "appDir": "TopoloAdmin",
363
- "name": "topolo-admin",
364
- "packageName": "topolo-admin",
365
- "productionUrl": "https://admin.topolo.app",
366
- "services": [],
367
- "deployTargets": [
368
- {
369
- "name": "topolo-admin",
370
- "kind": "worker",
371
- "apiUrl": "https://admin.topolo.app",
372
- "domains": [
373
- "admin.topolo.app"
374
- ],
375
- "routes": [
376
- "admin.topolo.app"
377
- ],
378
- "appId": null
379
- },
380
- {
381
- "name": "topolo-admin-api",
382
- "kind": "worker",
383
- "apiUrl": null,
384
- "domains": [],
385
- "routes": [],
386
- "appId": null
387
- }
388
- ]
389
- },
390
- "agent": {
391
- "id": "agent",
392
- "appDir": "TopoloAgent",
393
- "name": "topolo-agent",
394
- "packageName": "topolo-agent",
395
- "productionUrl": "https://agent.topolo.app",
396
- "services": [
397
- "agent"
398
- ],
399
- "deployTargets": [
400
- {
401
- "name": "topolo-agent",
402
- "kind": "worker",
403
- "apiUrl": "https://agent.topolo.app",
404
- "domains": [
405
- "agent.topolo.app"
406
- ],
407
- "routes": [
408
- "agent.topolo.app"
409
- ],
410
- "appId": "agent"
411
- },
412
- {
413
- "name": "topolo-agent-api",
414
- "kind": "worker",
415
- "apiUrl": null,
416
- "domains": [],
417
- "routes": [],
418
- "appId": null
419
- }
420
- ]
421
- },
422
- "auth": {
423
- "id": "auth",
424
- "appDir": "TopoloAuth",
425
- "name": "topolo-auth",
426
- "packageName": "topolo-auth",
427
- "productionUrl": "https://auth.topolo.app",
428
- "services": [
429
- "auth"
430
- ],
431
- "deployTargets": [
432
- {
433
- "name": "topolo-auth",
434
- "kind": "worker",
435
- "apiUrl": "https://auth.topolo.app",
436
- "domains": [
437
- "auth.topolo.app"
438
- ],
439
- "routes": [
440
- "auth.topolo.app"
441
- ],
442
- "appId": "auth"
443
- }
444
- ]
445
- },
446
- "backup": {
447
- "id": "backup",
448
- "appDir": "TopoloBackup",
449
- "name": "topolo-backup",
450
- "packageName": "topolo-backup",
451
- "productionUrl": "https://backup.topolo.app",
452
- "services": [
453
- "backup"
454
- ],
455
- "deployTargets": [
456
- {
457
- "name": "topolo-backup",
458
- "kind": "worker",
459
- "apiUrl": "https://backup.topolo.app",
460
- "domains": [
461
- "backup.topolo.app"
462
- ],
463
- "routes": [
464
- "backup.topolo.app"
465
- ],
466
- "appId": "backup"
467
- }
468
- ]
469
- },
470
- "blog": {
471
- "id": "blog",
472
- "appDir": "TopoloBlog",
473
- "name": "topolo-blog",
474
- "packageName": "topolo-blog",
475
- "productionUrl": "https://blog.topolo.app",
476
- "services": [
477
- "blog"
478
- ],
479
- "deployTargets": [
480
- {
481
- "name": "topolo-blog",
482
- "kind": "worker",
483
- "apiUrl": "https://blog.topolo.app",
484
- "domains": [
485
- "blog.topolo.app"
486
- ],
487
- "routes": [
488
- "blog.topolo.app"
489
- ],
490
- "appId": "blog"
491
- },
492
- {
493
- "name": "topolo-blog-api",
494
- "kind": "worker",
495
- "apiUrl": null,
496
- "domains": [],
497
- "routes": [],
498
- "appId": null
499
- }
500
- ]
501
- },
502
- "books": {
503
- "id": "books",
504
- "appDir": "TopoloBooks",
505
- "name": "topolo-books",
506
- "packageName": "topolo-books",
507
- "productionUrl": "https://books.topolo.app",
508
- "services": [
509
- "books"
510
- ],
511
- "deployTargets": [
512
- {
513
- "name": "topolo-books",
514
- "kind": "worker",
515
- "apiUrl": "https://books.topolo.app",
516
- "domains": [
517
- "books.topolo.app"
518
- ],
519
- "routes": [
520
- "books.topolo.app"
521
- ],
522
- "appId": "books"
523
- },
524
- {
525
- "name": "topolo-books-api",
526
- "kind": "worker",
527
- "apiUrl": null,
528
- "domains": [],
529
- "routes": [],
530
- "appId": null
531
- }
532
- ]
533
- },
534
- "brand": {
535
- "id": "brand",
536
- "appDir": "TopoloBrand",
537
- "name": "topolo-brand",
538
- "packageName": "@topolo/topolo-brand",
539
- "productionUrl": "https://brand.topolo.app",
540
- "services": [
541
- "brand"
542
- ],
543
- "deployTargets": [
544
- {
545
- "name": "topolo-brand",
546
- "kind": "worker",
547
- "apiUrl": "https://brand.topolo.app",
548
- "domains": [
549
- "brand.topolo.app"
550
- ],
551
- "routes": [
552
- "brand.topolo.app"
553
- ],
554
- "appId": "brand"
555
- },
556
- {
557
- "name": "topolo-brand-api",
558
- "kind": "worker",
559
- "apiUrl": null,
560
- "domains": [],
561
- "routes": [],
562
- "appId": null
563
- }
564
- ]
565
- },
566
- "bugfix": {
567
- "id": "bugfix",
568
- "appDir": "TopoloBugFix",
569
- "name": "topolo-bugfix",
570
- "packageName": "topolo-bugfix",
571
- "productionUrl": "https://bugfix.topolo.app",
572
- "services": [
573
- "bugfix"
574
- ],
575
- "deployTargets": [
576
- {
577
- "name": "topolo-bugfix",
578
- "kind": "worker",
579
- "apiUrl": "https://bugfix.topolo.app",
580
- "domains": [
581
- "bugfix.topolo.app"
582
- ],
583
- "routes": [
584
- "bugfix.topolo.app"
585
- ],
586
- "appId": "bugfix"
587
- }
588
- ]
589
- },
590
- "bytes": {
591
- "id": "bytes",
592
- "appDir": "TopoloBytes",
593
- "name": "topolo-bytes",
594
- "packageName": "topolo-bytes",
595
- "productionUrl": "https://bytes.topolo.app",
596
- "services": [
597
- "bytes"
598
- ],
599
- "deployTargets": [
600
- {
601
- "name": "topolo-bytes",
602
- "kind": "worker",
603
- "apiUrl": "https://bytes.topolo.app",
604
- "domains": [
605
- "bytes.topolo.app"
606
- ],
607
- "routes": [
608
- "bytes.topolo.app"
609
- ],
610
- "appId": "bytes"
611
- },
612
- {
613
- "name": "topolo-bytes-api",
614
- "kind": "worker",
615
- "apiUrl": null,
616
- "domains": [],
617
- "routes": [],
618
- "appId": null
619
- }
620
- ]
621
- },
622
- "calendar": {
623
- "id": "calendar",
624
- "appDir": "TopoloCalendar",
625
- "name": "topolo-calendar",
626
- "packageName": "topolo-calendar",
627
- "productionUrl": "https://calendar.topolo.app",
628
- "services": [
629
- "calendar"
630
- ],
631
- "deployTargets": [
632
- {
633
- "name": "topolo-calendar",
634
- "kind": "worker",
635
- "apiUrl": "https://calendar.topolo.app",
636
- "domains": [
637
- "calendar.topolo.app"
638
- ],
639
- "routes": [
640
- "calendar.topolo.app"
641
- ],
642
- "appId": "calendar"
643
- },
644
- {
645
- "name": "topolo-calendar-api",
646
- "kind": "worker",
647
- "apiUrl": null,
648
- "domains": [],
649
- "routes": [],
650
- "appId": null
651
- }
652
- ]
653
- },
654
- "campaigns": {
655
- "id": "campaigns",
656
- "appDir": "TopoloCampaigns",
657
- "name": "topolo-campaigns",
658
- "packageName": "topolo-campaigns",
659
- "productionUrl": "https://campaigns.topolo.app",
660
- "services": [
661
- "campaigns"
662
- ],
663
- "deployTargets": [
664
- {
665
- "name": "topolo-campaigns",
666
- "kind": "worker",
667
- "apiUrl": "https://campaigns.topolo.app",
668
- "domains": [
669
- "campaigns.topolo.app"
670
- ],
671
- "routes": [
672
- "campaigns.topolo.app"
673
- ],
674
- "appId": "campaigns"
675
- },
676
- {
677
- "name": "topolo-campaigns-api",
678
- "kind": "worker",
679
- "apiUrl": null,
680
- "domains": [],
681
- "routes": [],
682
- "appId": null
683
- }
684
- ]
685
- },
686
- "capacity": {
687
- "id": "capacity",
688
- "appDir": "TopoloCapacity",
689
- "name": "topolo-capacity",
690
- "packageName": "topolo-capacity",
691
- "productionUrl": "https://capacity.topolo.app",
692
- "services": [
693
- "capacity"
694
- ],
695
- "deployTargets": [
696
- {
697
- "name": "topolo-capacity",
698
- "kind": "worker",
699
- "apiUrl": "https://capacity.topolo.app",
700
- "domains": [
701
- "capacity.topolo.app"
702
- ],
703
- "routes": [
704
- "capacity.topolo.app"
705
- ],
706
- "appId": "capacity"
707
- }
708
- ]
709
- },
710
- "chat": {
711
- "id": "chat",
712
- "appDir": "TopoloChat",
713
- "name": "topolo-chat",
714
- "packageName": "topolo-chat",
715
- "productionUrl": "https://chat.topolo.app",
716
- "services": [
717
- "chat"
718
- ],
719
- "deployTargets": [
720
- {
721
- "name": "topolo-chat",
722
- "kind": "worker",
723
- "apiUrl": "https://chat.topolo.app",
724
- "domains": [
725
- "chat.topolo.app"
726
- ],
727
- "routes": [
728
- "chat.topolo.app"
729
- ],
730
- "appId": "chat"
731
- },
732
- {
733
- "name": "topolo-chat-api",
734
- "kind": "worker",
735
- "apiUrl": null,
736
- "domains": [],
737
- "routes": [],
738
- "appId": null
739
- }
740
- ]
741
- },
742
- "commerce": {
743
- "id": "commerce",
744
- "appDir": "TopoloCommerce",
745
- "name": "topolo-commerce",
746
- "packageName": "topolo-commerce",
747
- "productionUrl": "https://commerce.topolo.app",
748
- "services": [
749
- "commerce"
750
- ],
751
- "deployTargets": [
752
- {
753
- "name": "topolo-commerce-api",
754
- "kind": "worker",
755
- "apiUrl": null,
756
- "domains": [],
757
- "routes": [],
758
- "appId": null
759
- },
760
- {
761
- "name": "topolo-commerce-guest-web",
762
- "kind": "worker",
763
- "apiUrl": "https://guest.topolo.app",
764
- "domains": [
765
- "guest.topolo.app"
766
- ],
767
- "routes": [
768
- "guest.topolo.app"
769
- ],
770
- "appId": null
771
- },
772
- {
773
- "name": "topolo-commerce-ops-web",
774
- "kind": "worker",
775
- "apiUrl": "https://commerce.topolo.app",
776
- "domains": [
777
- "commerce.topolo.app"
778
- ],
779
- "routes": [
780
- "commerce.topolo.app"
781
- ],
782
- "appId": "commerce"
783
- },
784
- {
785
- "name": "topolo-commerce-station-web",
786
- "kind": "worker",
787
- "apiUrl": "https://station-commerce.topolo.app",
788
- "domains": [
789
- "station-commerce.topolo.app"
790
- ],
791
- "routes": [
792
- "station-commerce.topolo.app"
793
- ],
794
- "appId": null
795
- }
796
- ]
797
- },
798
- "compose": {
799
- "id": "compose",
800
- "appDir": "TopoloCompose",
801
- "name": "topolo-compose",
802
- "packageName": "@topolo/compose",
803
- "productionUrl": "https://compose.topolo.app",
804
- "services": [
805
- "compose"
806
- ],
807
- "deployTargets": [
808
- {
809
- "name": "topolo-compose",
810
- "kind": "worker",
811
- "apiUrl": "https://compose.topolo.app",
812
- "domains": [
813
- "compose.topolo.app"
814
- ],
815
- "routes": [
816
- "compose.topolo.app"
817
- ],
818
- "appId": "compose"
819
- },
820
- {
821
- "name": "topolo-compose-api",
822
- "kind": "worker",
823
- "apiUrl": null,
824
- "domains": [],
825
- "routes": [],
826
- "appId": null
827
- }
828
- ]
829
- },
830
- "consent": {
831
- "id": "consent",
832
- "appDir": "TopoloConsent",
833
- "name": "topolo-consent",
834
- "packageName": "topolo-consent",
835
- "productionUrl": "https://consent.topolo.app",
836
- "services": [
837
- "consent"
838
- ],
839
- "deployTargets": [
840
- {
841
- "name": "topolo-consent",
842
- "kind": "worker",
843
- "apiUrl": "https://consent.topolo.app",
844
- "domains": [
845
- "consent.topolo.app"
846
- ],
847
- "routes": [
848
- "consent.topolo.app"
849
- ],
850
- "appId": "consent"
851
- },
852
- {
853
- "name": "topolo-consent-api",
854
- "kind": "worker",
855
- "apiUrl": null,
856
- "domains": [],
857
- "routes": [],
858
- "appId": null
859
- }
860
- ]
861
- },
862
- "crm": {
863
- "id": "crm",
864
- "appDir": "TopoloCRM",
865
- "name": "topolo-crm",
866
- "packageName": "topolo-crm",
867
- "productionUrl": "https://crm.topolo.app",
868
- "services": [
869
- "crm"
870
- ],
871
- "deployTargets": [
872
- {
873
- "name": "topolo-crm-api",
874
- "kind": "worker",
875
- "apiUrl": null,
876
- "domains": [],
877
- "routes": [],
878
- "appId": null
879
- },
880
- {
881
- "name": "topolo-crm-app",
882
- "kind": "worker",
883
- "apiUrl": "https://crm.topolo.app",
884
- "domains": [
885
- "crm.topolo.app"
886
- ],
887
- "routes": [
888
- "crm.topolo.app"
889
- ],
890
- "appId": "crm"
891
- }
892
- ]
893
- },
894
- "design": {
895
- "id": "design",
896
- "appDir": "TopoloDesign",
897
- "name": "topolo-design",
898
- "packageName": "@topolo-io/design",
899
- "productionUrl": "https://design.topolo.app",
900
- "services": [
901
- "design"
902
- ],
903
- "deployTargets": [
904
- {
905
- "name": "topolo-design",
906
- "kind": "worker",
907
- "apiUrl": "https://design.topolo.app",
908
- "domains": [
909
- "design.topolo.app"
910
- ],
911
- "routes": [
912
- "design.topolo.app"
913
- ],
914
- "appId": "design"
915
- },
916
- {
917
- "name": "topolo-design-api",
918
- "kind": "worker",
919
- "apiUrl": null,
920
- "domains": [],
921
- "routes": [],
922
- "appId": null
923
- }
924
- ]
925
- },
926
- "developers": {
927
- "id": "developers",
928
- "appDir": "TopoloDevelopers",
929
- "name": "topolo-developers",
930
- "packageName": "topolo-developers",
931
- "productionUrl": "https://developers.topolo.app",
932
- "services": [
933
- "developers"
934
- ],
935
- "deployTargets": [
936
- {
937
- "name": "topolo-catalog-cron",
938
- "kind": "worker",
939
- "apiUrl": null,
940
- "domains": [],
941
- "routes": [],
942
- "appId": null
943
- },
944
- {
945
- "name": "topolo-developers",
946
- "kind": "worker",
947
- "apiUrl": "https://developers.topolo.app",
948
- "domains": [
949
- "developers.topolo.app"
950
- ],
951
- "routes": [
952
- "developers.topolo.app"
953
- ],
954
- "appId": "developers"
955
- },
956
- {
957
- "name": "topolo-developers-api",
958
- "kind": "worker",
959
- "apiUrl": null,
960
- "domains": [],
961
- "routes": [],
962
- "appId": null
963
- }
964
- ]
965
- },
966
- "director": {
967
- "id": "director",
968
- "appDir": "TopoloDirector",
969
- "name": "topolo-director",
970
- "packageName": "topolo-director",
971
- "productionUrl": "https://director.topolo.app",
972
- "services": [
973
- "director"
974
- ],
975
- "deployTargets": [
976
- {
977
- "name": "topolo-director",
978
- "kind": "worker",
979
- "apiUrl": "https://director.topolo.app",
980
- "domains": [
981
- "director.topolo.app"
982
- ],
983
- "routes": [
984
- "director.topolo.app"
985
- ],
986
- "appId": "director"
987
- },
988
- {
989
- "name": "topolo-director-api",
990
- "kind": "worker",
991
- "apiUrl": null,
992
- "domains": [],
993
- "routes": [],
994
- "appId": null
995
- }
996
- ]
997
- },
998
- "docs": {
999
- "id": "docs",
1000
- "appDir": "TopoloDocs",
1001
- "name": "topolo-docs",
1002
- "packageName": "topolo-docs",
1003
- "productionUrl": "https://docs.topolo.app",
1004
- "services": [],
1005
- "deployTargets": [
1006
- {
1007
- "name": "topolo-docs",
1008
- "kind": "worker",
1009
- "apiUrl": "https://docs.topolo.app",
1010
- "domains": [
1011
- "docs.topolo.app"
1012
- ],
1013
- "routes": [
1014
- "docs.topolo.app"
1015
- ],
1016
- "appId": null
1017
- },
1018
- {
1019
- "name": "topolo-docs-api",
1020
- "kind": "worker",
1021
- "apiUrl": null,
1022
- "domains": [],
1023
- "routes": [],
1024
- "appId": null
1025
- }
1026
- ]
1027
- },
1028
- "feed": {
1029
- "id": "feed",
1030
- "appDir": "TopoloFeed",
1031
- "name": "TopoloFeed",
1032
- "packageName": "topolo-feed",
1033
- "productionUrl": "https://feed.topolo.app",
1034
- "services": [
1035
- "feed"
1036
- ],
1037
- "deployTargets": [
1038
- {
1039
- "name": "topolo-feed-analytics-api",
1040
- "kind": "worker",
1041
- "apiUrl": "https://feed-analytics-api.topolo.app",
1042
- "domains": [
1043
- "feed-analytics-api.topolo.app"
1044
- ],
1045
- "routes": [
1046
- "feed-analytics-api.topolo.app"
1047
- ],
1048
- "appId": null
1049
- },
1050
- {
1051
- "name": "topolo-feed-api",
1052
- "kind": "worker",
1053
- "apiUrl": "https://feed-api.topolo.app",
1054
- "domains": [
1055
- "feed-api.topolo.app"
1056
- ],
1057
- "routes": [
1058
- "feed-api.topolo.app"
1059
- ],
1060
- "appId": null
1061
- },
1062
- {
1063
- "name": "topolo-feed-web",
1064
- "kind": "worker",
1065
- "apiUrl": "https://feed.topolo.app",
1066
- "domains": [
1067
- "feed.topolo.app"
1068
- ],
1069
- "routes": [
1070
- "feed.topolo.app"
1071
- ],
1072
- "appId": "feed"
1073
- }
1074
- ]
1075
- },
1076
- "flow": {
1077
- "id": "flow",
1078
- "appDir": "TopoloFlow",
1079
- "name": "topolo-flow",
1080
- "packageName": "topolo-flow",
1081
- "productionUrl": "https://flow.topolo.app",
1082
- "services": [
1083
- "flow"
1084
- ],
1085
- "deployTargets": [
1086
- {
1087
- "name": "topolo-flow",
1088
- "kind": "worker",
1089
- "apiUrl": "https://flow.topolo.app",
1090
- "domains": [
1091
- "flow.topolo.app"
1092
- ],
1093
- "routes": [
1094
- "flow.topolo.app"
1095
- ],
1096
- "appId": "flow"
1097
- },
1098
- {
1099
- "name": "topolo-flow-api",
1100
- "kind": "worker",
1101
- "apiUrl": null,
1102
- "domains": [],
1103
- "routes": [],
1104
- "appId": null
1105
- }
1106
- ]
1107
- },
1108
- "forecast": {
1109
- "id": "forecast",
1110
- "appDir": "TopoloForecast",
1111
- "name": "topolo-forecast",
1112
- "packageName": "topolo-forecast",
1113
- "productionUrl": "https://forecast.topolo.app",
1114
- "services": [
1115
- "forecast"
1116
- ],
1117
- "deployTargets": [
1118
- {
1119
- "name": "topolo-forecast",
1120
- "kind": "worker",
1121
- "apiUrl": "https://forecast.topolo.app",
1122
- "domains": [
1123
- "forecast.topolo.app"
1124
- ],
1125
- "routes": [
1126
- "forecast.topolo.app"
1127
- ],
1128
- "appId": "forecast"
1129
- },
1130
- {
1131
- "name": "topolo-forecast-api",
1132
- "kind": "worker",
1133
- "apiUrl": null,
1134
- "domains": [],
1135
- "routes": [],
1136
- "appId": null
1137
- }
1138
- ]
1139
- },
1140
- "forms": {
1141
- "id": "forms",
1142
- "appDir": "TopoloForms",
1143
- "name": "topolo-forms",
1144
- "packageName": "topolo-forms",
1145
- "productionUrl": "https://forms.topolo.app",
1146
- "services": [
1147
- "forms"
1148
- ],
1149
- "deployTargets": [
1150
- {
1151
- "name": "topolo-forms",
1152
- "kind": "worker",
1153
- "apiUrl": "https://forms.topolo.app",
1154
- "domains": [
1155
- "forms.topolo.app"
1156
- ],
1157
- "routes": [
1158
- "forms.topolo.app"
1159
- ],
1160
- "appId": "forms"
1161
- },
1162
- {
1163
- "name": "topolo-forms-api",
1164
- "kind": "worker",
1165
- "apiUrl": null,
1166
- "domains": [],
1167
- "routes": [],
1168
- "appId": null
1169
- }
1170
- ]
1171
- },
1172
- "home": {
1173
- "id": "home",
1174
- "appDir": "TopoloHome",
1175
- "name": "topolo-home",
1176
- "packageName": "topolo-home",
1177
- "productionUrl": "https://home.topolo.app",
1178
- "services": [
1179
- "home"
1180
- ],
1181
- "deployTargets": [
1182
- {
1183
- "name": "topolo-home",
1184
- "kind": "worker",
1185
- "apiUrl": "https://home.topolo.app",
1186
- "domains": [
1187
- "home.topolo.app"
1188
- ],
1189
- "routes": [
1190
- "home.topolo.app"
1191
- ],
1192
- "appId": "home"
1193
- },
1194
- {
1195
- "name": "topolo-home-api",
1196
- "kind": "worker",
1197
- "apiUrl": null,
1198
- "domains": [],
1199
- "routes": [],
1200
- "appId": null
1201
- }
1202
- ]
1203
- },
1204
- "insights": {
1205
- "id": "insights",
1206
- "appDir": "TopoloInsights",
1207
- "name": "topolo-insights",
1208
- "packageName": "topolo-insights",
1209
- "productionUrl": "https://insights.topolo.app",
1210
- "services": [
1211
- "insights"
1212
- ],
1213
- "deployTargets": [
1214
- {
1215
- "name": "topolo-insights",
1216
- "kind": "worker",
1217
- "apiUrl": "https://insights.topolo.app",
1218
- "domains": [
1219
- "insights.topolo.app"
1220
- ],
1221
- "routes": [
1222
- "insights.topolo.app"
1223
- ],
1224
- "appId": "insights"
1225
- },
1226
- {
1227
- "name": "topolo-insights-api",
1228
- "kind": "worker",
1229
- "apiUrl": null,
1230
- "domains": [],
1231
- "routes": [],
1232
- "appId": null
1233
- }
1234
- ]
1235
- },
1236
- "inventory": {
1237
- "id": "inventory",
1238
- "appDir": "TopoloInventory",
1239
- "name": "topolo-inventory",
1240
- "packageName": "topolo-inventory",
1241
- "productionUrl": "https://inventory.topolo.app",
1242
- "services": [
1243
- "inventory"
1244
- ],
1245
- "deployTargets": [
1246
- {
1247
- "name": "topolo-inventory",
1248
- "kind": "worker",
1249
- "apiUrl": "https://inventory.topolo.app",
1250
- "domains": [
1251
- "inventory.topolo.app"
1252
- ],
1253
- "routes": [
1254
- "inventory.topolo.app"
1255
- ],
1256
- "appId": "inventory"
1257
- },
1258
- {
1259
- "name": "topolo-inventory-api",
1260
- "kind": "worker",
1261
- "apiUrl": null,
1262
- "domains": [],
1263
- "routes": [],
1264
- "appId": null
1265
- }
1266
- ]
1267
- },
1268
- "learn": {
1269
- "id": "learn",
1270
- "appDir": "TopoloLearn",
1271
- "name": "topololearn",
1272
- "packageName": "topolo-learn",
1273
- "productionUrl": "https://learn.topolo.app",
1274
- "services": [
1275
- "learn"
1276
- ],
1277
- "deployTargets": [
1278
- {
1279
- "name": "topolo-learn",
1280
- "kind": "worker",
1281
- "apiUrl": "https://learn.topolo.app",
1282
- "domains": [
1283
- "learn.topolo.app"
1284
- ],
1285
- "routes": [
1286
- "learn.topolo.app"
1287
- ],
1288
- "appId": "learn"
1289
- },
1290
- {
1291
- "name": "topolo-learn-api",
1292
- "kind": "worker",
1293
- "apiUrl": null,
1294
- "domains": [],
1295
- "routes": [],
1296
- "appId": null
1297
- }
1298
- ]
1299
- },
1300
- "localize": {
1301
- "id": "localize",
1302
- "appDir": "TopoloLocalize",
1303
- "name": "topolo-localize",
1304
- "packageName": "topolo-localize",
1305
- "productionUrl": "https://localize.topolo.app",
1306
- "services": [
1307
- "localize"
1308
- ],
1309
- "deployTargets": [
1310
- {
1311
- "name": "topolo-localize",
1312
- "kind": "worker",
1313
- "apiUrl": "https://localize.topolo.app",
1314
- "domains": [
1315
- "localize.topolo.app"
1316
- ],
1317
- "routes": [
1318
- "localize.topolo.app"
1319
- ],
1320
- "appId": "localize"
1321
- }
1322
- ]
1323
- },
1324
- "mail": {
1325
- "id": "mail",
1326
- "appDir": "TopoloMail",
1327
- "name": "topolo-mail",
1328
- "packageName": "topolo-mail",
1329
- "productionUrl": "https://mail.topolo.app",
1330
- "services": [
1331
- "mail"
1332
- ],
1333
- "deployTargets": [
1334
- {
1335
- "name": "topolo-mail",
1336
- "kind": "worker",
1337
- "apiUrl": "https://mail.topolo.app",
1338
- "domains": [
1339
- "mail.topolo.app"
1340
- ],
1341
- "routes": [
1342
- "mail.topolo.app"
1343
- ],
1344
- "appId": "mail"
1345
- },
1346
- {
1347
- "name": "topolo-mail-api",
1348
- "kind": "worker",
1349
- "apiUrl": null,
1350
- "domains": [],
1351
- "routes": [],
1352
- "appId": null
1353
- }
1354
- ]
1355
- },
1356
- "mdm": {
1357
- "id": "mdm",
1358
- "appDir": "TopoloMDM",
1359
- "name": "TopoloMDM",
1360
- "packageName": "topolo-mdm",
1361
- "productionUrl": "https://mdm.topolo.app",
1362
- "services": [
1363
- "mdm"
1364
- ],
1365
- "deployTargets": [
1366
- {
1367
- "name": "topolo-mdm-api",
1368
- "kind": "worker",
1369
- "apiUrl": null,
1370
- "domains": [],
1371
- "routes": [],
1372
- "appId": null
1373
- },
1374
- {
1375
- "name": "topolo-mdm-console",
1376
- "kind": "worker",
1377
- "apiUrl": "https://mdm.topolo.app",
1378
- "domains": [
1379
- "mdm.topolo.app"
1380
- ],
1381
- "routes": [
1382
- "mdm.topolo.app"
1383
- ],
1384
- "appId": "mdm"
1385
- }
1386
- ]
1387
- },
1388
- "messages": {
1389
- "id": "messages",
1390
- "appDir": "TopoloMessages",
1391
- "name": "topolo-messages",
1392
- "packageName": "topolo-messages",
1393
- "productionUrl": "https://messages.topolo.app",
1394
- "services": [
1395
- "messages"
1396
- ],
1397
- "deployTargets": [
1398
- {
1399
- "name": "topolo-messages",
1400
- "kind": "worker",
1401
- "apiUrl": "https://messages.topolo.app",
1402
- "domains": [
1403
- "messages.topolo.app"
1404
- ],
1405
- "routes": [
1406
- "messages.topolo.app"
1407
- ],
1408
- "appId": "messages"
1409
- },
1410
- {
1411
- "name": "topolo-messages-api",
1412
- "kind": "worker",
1413
- "apiUrl": null,
1414
- "domains": [],
1415
- "routes": [],
1416
- "appId": null
1417
- },
1418
- {
1419
- "name": "topolo-messages-dispatch",
1420
- "kind": "worker",
1421
- "apiUrl": null,
1422
- "domains": [],
1423
- "routes": [],
1424
- "appId": null
1425
- }
1426
- ]
1427
- },
1428
- "nexus": {
1429
- "id": "nexus",
1430
- "appDir": "TopoloNexus",
1431
- "name": "topolo-nexus",
1432
- "packageName": "topolo-nexus",
1433
- "productionUrl": "https://nexus.topolo.app",
1434
- "services": [
1435
- "nexus"
1436
- ],
1437
- "deployTargets": [
1438
- {
1439
- "name": "topolo-nexus-dashboard",
1440
- "kind": "worker",
1441
- "apiUrl": "https://nexus.topolo.app",
1442
- "domains": [
1443
- "nexus.topolo.app"
1444
- ],
1445
- "routes": [
1446
- "nexus.topolo.app"
1447
- ],
1448
- "appId": null
1449
- },
1450
- {
1451
- "name": "topolo-nexus-gateway",
1452
- "kind": "worker",
1453
- "apiUrl": "https://nexus.topolo.app",
1454
- "domains": [
1455
- "nexus.topolo.app"
1456
- ],
1457
- "routes": [],
1458
- "appId": "nexus"
1459
- }
1460
- ]
1461
- },
1462
- "notify": {
1463
- "id": "notify",
1464
- "appDir": "TopoloNotify",
1465
- "name": "topolo-notify",
1466
- "packageName": "@topolo/notify",
1467
- "productionUrl": "https://notify.topolo.app",
1468
- "services": [
1469
- "notify"
1470
- ],
1471
- "deployTargets": [
1472
- {
1473
- "name": "topolo-notify",
1474
- "kind": "worker",
1475
- "apiUrl": "https://notify.topolo.app",
1476
- "domains": [
1477
- "notify.topolo.app"
1478
- ],
1479
- "routes": [
1480
- "notify.topolo.app"
1481
- ],
1482
- "appId": "notify"
1483
- }
1484
- ]
1485
- },
1486
- "observability_watch": {
1487
- "id": "observability_watch",
1488
- "appDir": "TopoloObservabilityWatch",
1489
- "name": "topolo-observability-watch",
1490
- "packageName": "topolo-observability-watch",
1491
- "productionUrl": "https://observability-watch.topolo.app",
1492
- "services": [
1493
- "observability_watch"
1494
- ],
1495
- "deployTargets": [
1496
- {
1497
- "name": "topolo-observability-watch",
1498
- "kind": "worker",
1499
- "apiUrl": "https://observability-watch.topolo.app",
1500
- "domains": [
1501
- "observability-watch.topolo.app"
1502
- ],
1503
- "routes": [
1504
- "observability-watch.topolo.app"
1505
- ],
1506
- "appId": "observability_watch"
1507
- }
1508
- ]
1509
- },
1510
- "one": {
1511
- "id": "one",
1512
- "appDir": "TopoloOne",
1513
- "name": "TopoloOne",
1514
- "packageName": "topolo-oneclick-sso",
1515
- "productionUrl": "https://one.topolo.app",
1516
- "services": [
1517
- "one"
1518
- ],
1519
- "deployTargets": [
1520
- {
1521
- "name": "topolo-one",
1522
- "kind": "worker",
1523
- "apiUrl": "https://one.topolo.app",
1524
- "domains": [
1525
- "one.topolo.app"
1526
- ],
1527
- "routes": [
1528
- "one.topolo.app/*"
1529
- ],
1530
- "appId": null
1531
- },
1532
- {
1533
- "name": "topolo-one-api",
1534
- "kind": "worker",
1535
- "apiUrl": "https://www.topolo.app",
1536
- "domains": [
1537
- "www.topolo.app"
1538
- ],
1539
- "routes": [
1540
- "www.topolo.app/*"
1541
- ],
1542
- "appId": "one"
1543
- },
1544
- {
1545
- "name": "topolo-one-website",
1546
- "kind": "worker",
1547
- "apiUrl": "https://topolo.io",
1548
- "domains": [
1549
- "topolo.io"
1550
- ],
1551
- "routes": [
1552
- "one.topolo.io",
1553
- "topolo.io",
1554
- "www.topolo.io"
1555
- ],
1556
- "appId": null
1557
- }
1558
- ]
1559
- },
1560
- "p2p": {
1561
- "id": "p2p",
1562
- "appDir": "TopoloP2P",
1563
- "name": "topolo-p2p",
1564
- "packageName": "topolo-p2p",
1565
- "productionUrl": "https://p2p.topolo.app",
1566
- "services": [
1567
- "p2p"
1568
- ],
1569
- "deployTargets": [
1570
- {
1571
- "name": "topolo-p2p",
1572
- "kind": "worker",
1573
- "apiUrl": "https://p2p.topolo.app",
1574
- "domains": [
1575
- "p2p.topolo.app"
1576
- ],
1577
- "routes": [
1578
- "p2p.topolo.app"
1579
- ],
1580
- "appId": "p2p"
1581
- },
1582
- {
1583
- "name": "topolo-p2p-api",
1584
- "kind": "worker",
1585
- "apiUrl": null,
1586
- "domains": [],
1587
- "routes": [],
1588
- "appId": null
1589
- }
1590
- ]
1591
- },
1592
- "pay": {
1593
- "id": "pay",
1594
- "appDir": "TopoloPay",
1595
- "name": "topolo-pay",
1596
- "packageName": "topolo-pay",
1597
- "productionUrl": "https://pay.topolo.app",
1598
- "services": [
1599
- "pay"
1600
- ],
1601
- "deployTargets": [
1602
- {
1603
- "name": "topolo-pay",
1604
- "kind": "worker",
1605
- "apiUrl": "https://pay.topolo.app",
1606
- "domains": [
1607
- "pay.topolo.app"
1608
- ],
1609
- "routes": [
1610
- "pay.topolo.app"
1611
- ],
1612
- "appId": "pay"
1613
- },
1614
- {
1615
- "name": "topolo-pay-api",
1616
- "kind": "worker",
1617
- "apiUrl": null,
1618
- "domains": [],
1619
- "routes": [],
1620
- "appId": null
1621
- }
1622
- ]
1623
- },
1624
- "people": {
1625
- "id": "people",
1626
- "appDir": "TopoloPeople",
1627
- "name": "topolo-people",
1628
- "packageName": "topolo-people",
1629
- "productionUrl": "https://people.topolo.app",
1630
- "services": [
1631
- "people"
1632
- ],
1633
- "deployTargets": [
1634
- {
1635
- "name": "topolo-people",
1636
- "kind": "worker",
1637
- "apiUrl": "https://people.topolo.app",
1638
- "domains": [
1639
- "people.topolo.app"
1640
- ],
1641
- "routes": [
1642
- "people.topolo.app"
1643
- ],
1644
- "appId": "people"
1645
- },
1646
- {
1647
- "name": "topolo-people-api",
1648
- "kind": "worker",
1649
- "apiUrl": null,
1650
- "domains": [],
1651
- "routes": [],
1652
- "appId": null
1653
- }
1654
- ]
1655
- },
1656
- "quro": {
1657
- "id": "quro",
1658
- "appDir": "TopoloQuro",
1659
- "name": "TopoloQuro",
1660
- "packageName": "topolo-quro",
1661
- "productionUrl": "https://quro.topolo.app",
1662
- "services": [
1663
- "quro.api",
1664
- "quro.redirect"
1665
- ],
1666
- "deployTargets": [
1667
- {
1668
- "name": "quro-api",
1669
- "kind": "worker",
1670
- "apiUrl": "https://api.ol0.me",
1671
- "domains": [
1672
- "api.ol0.me"
1673
- ],
1674
- "routes": [
1675
- "api.ol0.me/*"
1676
- ],
1677
- "appId": "quro.api"
1678
- },
1679
- {
1680
- "name": "quro-redirect-system",
1681
- "kind": "worker",
1682
- "apiUrl": "https://ol0.me",
1683
- "domains": [
1684
- "ol0.me"
1685
- ],
1686
- "routes": [
1687
- "ol0.me/*"
1688
- ],
1689
- "appId": "quro.redirect"
1690
- },
1691
- {
1692
- "name": "quro-ui",
1693
- "kind": "worker",
1694
- "apiUrl": "https://quro.topolo.app",
1695
- "domains": [
1696
- "quro.topolo.app"
1697
- ],
1698
- "routes": [
1699
- "quro.topolo.app"
1700
- ],
1701
- "appId": null
1702
- }
1703
- ]
1704
- },
1705
- "roadmapper": {
1706
- "id": "roadmapper",
1707
- "appDir": "TopoloRoadmapper",
1708
- "name": "topolo-roadmapper",
1709
- "packageName": "topolo-roadmapper",
1710
- "productionUrl": "https://roadmapper.topolo.app",
1711
- "services": [
1712
- "roadmapper"
1713
- ],
1714
- "deployTargets": [
1715
- {
1716
- "name": "topolo-roadmapper",
1717
- "kind": "worker",
1718
- "apiUrl": "https://roadmapper.topolo.app",
1719
- "domains": [
1720
- "roadmapper.topolo.app"
1721
- ],
1722
- "routes": [
1723
- "roadmapper.topolo.app"
1724
- ],
1725
- "appId": "roadmapper"
1726
- },
1727
- {
1728
- "name": "topolo-roadmapper-api",
1729
- "kind": "worker",
1730
- "apiUrl": null,
1731
- "domains": [],
1732
- "routes": [],
1733
- "appId": null
1734
- }
1735
- ]
1736
- },
1737
- "sign": {
1738
- "id": "sign",
1739
- "appDir": "TopoloSign",
1740
- "name": "topolo-sign",
1741
- "packageName": "topolo-sign",
1742
- "productionUrl": "https://sign.topolo.app",
1743
- "services": [
1744
- "sign"
1745
- ],
1746
- "deployTargets": [
1747
- {
1748
- "name": "topolo-sign",
1749
- "kind": "worker",
1750
- "apiUrl": "https://sign.topolo.app",
1751
- "domains": [
1752
- "sign.topolo.app"
1753
- ],
1754
- "routes": [
1755
- "sign.topolo.app"
1756
- ],
1757
- "appId": "sign"
1758
- },
1759
- {
1760
- "name": "topolo-sign-api",
1761
- "kind": "worker",
1762
- "apiUrl": null,
1763
- "domains": [],
1764
- "routes": [],
1765
- "appId": null
1766
- }
1767
- ]
1768
- },
1769
- "social_studio": {
1770
- "id": "social_studio",
1771
- "appDir": "TopoloSocialStudio",
1772
- "name": "topolo-social-studio",
1773
- "packageName": "topolo-social-studio",
1774
- "productionUrl": "https://studio.topolo.app",
1775
- "services": [
1776
- "social_studio"
1777
- ],
1778
- "deployTargets": [
1779
- {
1780
- "name": "topolo-social-studio",
1781
- "kind": "worker",
1782
- "apiUrl": "https://studio.topolo.app",
1783
- "domains": [
1784
- "studio.topolo.app"
1785
- ],
1786
- "routes": [
1787
- "studio.topolo.app"
1788
- ],
1789
- "appId": "social_studio"
1790
- },
1791
- {
1792
- "name": "topolo-social-studio-api",
1793
- "kind": "worker",
1794
- "apiUrl": null,
1795
- "domains": [],
1796
- "routes": [],
1797
- "appId": null
1798
- },
1799
- {
1800
- "name": "topolo-social-studio-queue",
1801
- "kind": "worker",
1802
- "apiUrl": null,
1803
- "domains": [],
1804
- "routes": [],
1805
- "appId": null
1806
- }
1807
- ]
1808
- },
1809
- "socialize": {
1810
- "id": "socialize",
1811
- "appDir": "TopoloSocialize",
1812
- "name": "socialize",
1813
- "packageName": "topolo-socialize",
1814
- "productionUrl": "https://socialize.topolo.app",
1815
- "services": [
1816
- "socialize"
1817
- ],
1818
- "deployTargets": [
1819
- {
1820
- "name": "topolo-socialize",
1821
- "kind": "worker",
1822
- "apiUrl": "https://socialize.topolo.app",
1823
- "domains": [
1824
- "socialize.topolo.app"
1825
- ],
1826
- "routes": [
1827
- "socialize.topolo.app"
1828
- ],
1829
- "appId": "socialize"
1830
- },
1831
- {
1832
- "name": "topolo-socialize-api",
1833
- "kind": "worker",
1834
- "apiUrl": "https://socialize-api.topolo.app",
1835
- "domains": [
1836
- "socialize-api.topolo.app"
1837
- ],
1838
- "routes": [
1839
- "socialize-api.topolo.app"
1840
- ],
1841
- "appId": null
1842
- },
1843
- {
1844
- "name": "topolo-socialize-scheduler",
1845
- "kind": "worker",
1846
- "apiUrl": null,
1847
- "domains": [],
1848
- "routes": [],
1849
- "appId": null
1850
- }
1851
- ]
1852
- },
1853
- "spaces": {
1854
- "id": "spaces",
1855
- "appDir": "TopoloSpaces",
1856
- "name": "topolo-spaces",
1857
- "packageName": "@topolo/spaces",
1858
- "productionUrl": "https://spaces.topolo.app",
1859
- "services": [
1860
- "spaces"
1861
- ],
1862
- "deployTargets": [
1863
- {
1864
- "name": "topolo-spaces",
1865
- "kind": "worker",
1866
- "apiUrl": "https://spaces.topolo.app",
1867
- "domains": [
1868
- "spaces.topolo.app"
1869
- ],
1870
- "routes": [
1871
- "spaces.topolo.app"
1872
- ],
1873
- "appId": "spaces"
1874
- },
1875
- {
1876
- "name": "topolo-spaces-api",
1877
- "kind": "worker",
1878
- "apiUrl": null,
1879
- "domains": [],
1880
- "routes": [],
1881
- "appId": null
1882
- }
1883
- ]
1884
- },
1885
- "status": {
1886
- "id": "status",
1887
- "appDir": "TopoloStatus",
1888
- "name": "topolo-status",
1889
- "packageName": "topolo-status",
1890
- "productionUrl": "https://status.topolo.app",
1891
- "services": [
1892
- "status"
1893
- ],
1894
- "deployTargets": [
1895
- {
1896
- "name": "topolo-status",
1897
- "kind": "worker",
1898
- "apiUrl": "https://status.topolo.app",
1899
- "domains": [
1900
- "status.topolo.app"
1901
- ],
1902
- "routes": [
1903
- "status.topolo.app"
1904
- ],
1905
- "appId": "status"
1906
- }
1907
- ]
1908
- },
1909
- "success": {
1910
- "id": "success",
1911
- "appDir": "TopoloSuccess",
1912
- "name": "topolo-success",
1913
- "packageName": "topolo-success",
1914
- "productionUrl": "https://success.topolo.app",
1915
- "services": [
1916
- "success"
1917
- ],
1918
- "deployTargets": [
1919
- {
1920
- "name": "topolo-success",
1921
- "kind": "worker",
1922
- "apiUrl": "https://success.topolo.app",
1923
- "domains": [
1924
- "success.topolo.app"
1925
- ],
1926
- "routes": [
1927
- "success.topolo.app"
1928
- ],
1929
- "appId": "success"
1930
- },
1931
- {
1932
- "name": "topolo-success-api",
1933
- "kind": "worker",
1934
- "apiUrl": null,
1935
- "domains": [],
1936
- "routes": [],
1937
- "appId": null
1938
- }
1939
- ]
1940
- },
1941
- "support": {
1942
- "id": "support",
1943
- "appDir": "TopoloSupport",
1944
- "name": "topolo-support",
1945
- "packageName": "topolo-support",
1946
- "productionUrl": "https://support.topolo.app",
1947
- "services": [
1948
- "support"
1949
- ],
1950
- "deployTargets": [
1951
- {
1952
- "name": "topolo-support",
1953
- "kind": "worker",
1954
- "apiUrl": "https://support.topolo.app",
1955
- "domains": [
1956
- "support.topolo.app"
1957
- ],
1958
- "routes": [
1959
- "support.topolo.app/*"
1960
- ],
1961
- "appId": "support"
1962
- },
1963
- {
1964
- "name": "topolo-support-api",
1965
- "kind": "worker",
1966
- "apiUrl": null,
1967
- "domains": [],
1968
- "routes": [],
1969
- "appId": null
1970
- }
1971
- ]
1972
- },
1973
- "survey": {
1974
- "id": "survey",
1975
- "appDir": "TopoloSurvey",
1976
- "name": "topolo-survey",
1977
- "packageName": "topolo-survey",
1978
- "productionUrl": "https://survey.topolo.app",
1979
- "services": [
1980
- "survey"
1981
- ],
1982
- "deployTargets": [
1983
- {
1984
- "name": "topolo-survey",
1985
- "kind": "worker",
1986
- "apiUrl": "https://survey.topolo.app",
1987
- "domains": [
1988
- "survey.topolo.app"
1989
- ],
1990
- "routes": [
1991
- "survey.topolo.app"
1992
- ],
1993
- "appId": "survey"
1994
- },
1995
- {
1996
- "name": "topolo-survey-api",
1997
- "kind": "worker",
1998
- "apiUrl": null,
1999
- "domains": [],
2000
- "routes": [],
2001
- "appId": null
2002
- }
2003
- ]
2004
- },
2005
- "voice": {
2006
- "id": "voice",
2007
- "appDir": "TopoloVoice",
2008
- "name": "topolo-voice",
2009
- "packageName": "topolo-voice",
2010
- "productionUrl": "https://voice.topolo.app",
2011
- "services": [
2012
- "voice"
2013
- ],
2014
- "deployTargets": [
2015
- {
2016
- "name": "topolo-voice",
2017
- "kind": "worker",
2018
- "apiUrl": "https://voice.topolo.app",
2019
- "domains": [
2020
- "voice.topolo.app"
2021
- ],
2022
- "routes": [
2023
- "voice.topolo.app"
2024
- ],
2025
- "appId": "voice"
2026
- },
2027
- {
2028
- "name": "topolo-voice-api",
2029
- "kind": "worker",
2030
- "apiUrl": null,
2031
- "domains": [],
2032
- "routes": [],
2033
- "appId": null
2034
- }
2035
- ]
2036
- },
2037
- "web": {
2038
- "id": "web",
2039
- "appDir": "TopoloWeb",
2040
- "name": "topoloweb",
2041
- "packageName": "topolo-web",
2042
- "productionUrl": "https://web.topolo.app",
2043
- "services": [
2044
- "web"
2045
- ],
2046
- "deployTargets": [
2047
- {
2048
- "name": "topolo-web-api",
2049
- "kind": "worker",
2050
- "apiUrl": null,
2051
- "domains": [],
2052
- "routes": [],
2053
- "appId": null
2054
- },
2055
- {
2056
- "name": "topolo-web-runtime",
2057
- "kind": "worker",
2058
- "apiUrl": "https://sites.topolo.app",
2059
- "domains": [
2060
- "sites.topolo.app"
2061
- ],
2062
- "routes": [
2063
- "*.sites.topolo.app/*",
2064
- "sites.topolo.app"
2065
- ],
2066
- "appId": null
2067
- },
2068
- {
2069
- "name": "topolo-web-studio",
2070
- "kind": "worker",
2071
- "apiUrl": "https://web.topolo.app",
2072
- "domains": [
2073
- "web.topolo.app"
2074
- ],
2075
- "routes": [
2076
- "web.topolo.app"
2077
- ],
2078
- "appId": "web"
2079
- }
2080
- ]
2081
- }
2082
- };
2083
359
  function friendlyAppId(entry) {
2084
360
  for (const value of [entry.slug, entry.name, entry.appId]) {
2085
361
  if (typeof value !== "string" || !value.trim()) continue;
@@ -2089,535 +365,6 @@ function friendlyAppId(entry) {
2089
365
  }
2090
366
  return entry.appId;
2091
367
  }
2092
- function idVariants(value) {
2093
- const normalized = value.trim().toLowerCase().replace(/\s+/g, "-");
2094
- return [.../* @__PURE__ */ new Set([
2095
- normalized,
2096
- normalized.replace(/-/g, "_"),
2097
- normalized.replace(/_/g, "-")
2098
- ])].filter(Boolean);
2099
- }
2100
- var STATIC_APPLICATIONS = APPLICATIONS;
2101
- function staticApplicationForId(id) {
2102
- for (const variant of idVariants(id)) {
2103
- const entry = STATIC_APPLICATIONS[variant];
2104
- if (entry) return entry;
2105
- }
2106
- return null;
2107
- }
2108
- function applicationEntryFromCatalog(live) {
2109
- const id = friendlyAppId(live);
2110
- return {
2111
- id,
2112
- appDir: "-",
2113
- name: live.name ?? live.slug ?? live.appId,
2114
- packageName: null,
2115
- productionUrl: live.launchUrl ?? live.apiBaseUrl ?? null,
2116
- services: live.apiBaseUrl ? [id] : [],
2117
- deployTargets: []
2118
- };
2119
- }
2120
- var DIRECTORY_PAGE_LIMIT = 100;
2121
- var DIRECTORY_MAX_PAGES = 100;
2122
- function staticApplicationDirectory() {
2123
- const applications = Object.entries(STATIC_APPLICATIONS).map(([id, application]) => ({
2124
- id,
2125
- application,
2126
- source: "static",
2127
- live: null
2128
- })).sort((left, right) => left.id.localeCompare(right.id));
2129
- return { source: "static_fallback", applications };
2130
- }
2131
- function directoryApplicationFromLive(live) {
2132
- const id = friendlyAppId(live);
2133
- return {
2134
- id,
2135
- // Prefer the static snapshot's richer repo/deploy metadata when the live
2136
- // registry confirms the app; synthesize from the live entry otherwise.
2137
- application: staticApplicationForId(id) ?? applicationEntryFromCatalog(live),
2138
- source: "live",
2139
- live
2140
- };
2141
- }
2142
- async function listApplicationDirectory(client) {
2143
- if (!client) return staticApplicationDirectory();
2144
- let services;
2145
- try {
2146
- services = [];
2147
- let cursor;
2148
- for (let page = 0; page < DIRECTORY_MAX_PAGES; page += 1) {
2149
- const result = await client.searchServices({
2150
- ...cursor ? { cursor } : {},
2151
- limit: DIRECTORY_PAGE_LIMIT
2152
- });
2153
- services.push(...result.services);
2154
- if (!result.page.nextCursor) break;
2155
- cursor = result.page.nextCursor;
2156
- }
2157
- } catch {
2158
- return staticApplicationDirectory();
2159
- }
2160
- const seen = /* @__PURE__ */ new Map();
2161
- for (const live of services) {
2162
- const entry = directoryApplicationFromLive(live);
2163
- if (!seen.has(entry.id)) seen.set(entry.id, entry);
2164
- }
2165
- return {
2166
- source: "live",
2167
- applications: [...seen.values()].sort((left, right) => left.id.localeCompare(right.id))
2168
- };
2169
- }
2170
- function matchesDirectoryApplication(app, needle) {
2171
- const candidates = new Set(idVariants(needle));
2172
- const keys = [
2173
- app.id,
2174
- app.application.id,
2175
- app.application.name,
2176
- app.live?.appId,
2177
- app.live?.slug,
2178
- app.live?.name
2179
- ];
2180
- for (const key of keys) {
2181
- if (typeof key !== "string" || !key.trim()) continue;
2182
- for (const variant of idVariants(key)) {
2183
- if (candidates.has(variant)) return true;
2184
- }
2185
- for (const variant of idVariants(friendlyAppId({ appId: key }))) {
2186
- if (candidates.has(variant)) return true;
2187
- }
2188
- }
2189
- return false;
2190
- }
2191
- function formatDirectoryApplicationIds(directory) {
2192
- const ids = directory.applications.map((app) => app.id).sort();
2193
- const preview = ids.slice(0, 50).join(", ");
2194
- const suffix = ids.length > 50 ? `, ... +${ids.length - 50} more` : "";
2195
- const label = directory.source === "live" ? "Applications available to this credential" : "Applications in the bundled static snapshot (live registry unreachable)";
2196
- return `${label}: ${preview}${suffix}`;
2197
- }
2198
- async function resolveApplicationDirectoryEntry(client, application) {
2199
- const needle = typeof application === "string" ? application.trim() : "";
2200
- if (!needle) {
2201
- throw new TopoloSdkError("unknown_application", "application is required");
2202
- }
2203
- if (client) {
2204
- let live = null;
2205
- try {
2206
- live = await client.getService(needle);
2207
- } catch {
2208
- live = null;
2209
- }
2210
- if (live) return directoryApplicationFromLive(live);
2211
- }
2212
- const directory = await listApplicationDirectory(client);
2213
- const match = directory.applications.find((app) => matchesDirectoryApplication(app, needle));
2214
- if (match) return match;
2215
- throw new TopoloSdkError(
2216
- "unknown_application",
2217
- `Unknown application "${application}". ${formatDirectoryApplicationIds(directory)}`
2218
- );
2219
- }
2220
- var STATIC_APPLICATIONS2 = APPLICATIONS;
2221
- var APPLICATION_REQUIREMENTS_VERSION = "2026-08-11.1";
2222
- var APPLICATION_REQUIREMENTS = [
2223
- {
2224
- id: "platform-metadata",
2225
- title: "Register the application in platform metadata",
2226
- summary: "Every app must have a stable application ID, CloudControl metadata for deployed surfaces, and package metadata where code is shipped.",
2227
- appliesTo: ["all"],
2228
- evidence: [
2229
- "topolo.cloudcontrol.json exists for every deployed app surface",
2230
- "package.json names the package or app when the repo ships code",
2231
- "The live platform registry exposes the app through topolo apps and MCP discovery"
2232
- ],
2233
- implementation: [
2234
- "Register the app in the live platform registry (Auth service catalog) before exposing it to agents",
2235
- "Keep production URLs, Worker names, Pages projects, routes, domains, and bindings current in CloudControl metadata",
2236
- "Do not leave a new Topolo* app directory without an explicit application ID"
2237
- ]
2238
- },
2239
- {
2240
- id: "canonical-docs",
2241
- title: "Update canonical docs with the code change",
2242
- summary: "TopoloDocs is the source of truth for application behavior, ownership, deployment shape, auth boundaries, and operations.",
2243
- appliesTo: ["all"],
2244
- evidence: [
2245
- "Matching system registry entry exists in TopoloDocs",
2246
- "Internal handbook coverage exists for the system",
2247
- "npm run validate passes in TopoloDocs when docs are touched"
2248
- ],
2249
- implementation: [
2250
- "Read the matching TopoloDocs system entry before coding",
2251
- "Update docs in the same change when behavior, API, auth, data ownership, deployment, or operations change",
2252
- "Update last_verified dates on touched canonical pages"
2253
- ]
2254
- },
2255
- {
2256
- id: "shared-auth-boundary",
2257
- title: "Use the shared Topolo auth boundary",
2258
- summary: "Applications must derive identity, organization, scopes, and app entitlement from TopoloAuth rather than inventing parallel auth state.",
2259
- appliesTo: ["browser", "api", "tooling", "agent_surface"],
2260
- evidence: [
2261
- "@topolo/auth-client or @topolo-io/worker-runtime is used where applicable",
2262
- "No public command, tool, or SDK method accepts orgId",
2263
- "App slug and Auth app registration are documented for protected APIs"
2264
- ],
2265
- implementation: [
2266
- "Use shared auth/runtime packages instead of copying token parsing, gateway, or browser storage flows",
2267
- "Derive organization from the credential on every request",
2268
- "Route OAuth, refresh, logout, and SSO paths according to the shared Auth contract"
2269
- ]
2270
- },
2271
- {
2272
- id: "shared-shell-and-launcher",
2273
- title: "Use the shared shell, launcher, and account menu",
2274
- summary: "Browser applications should feel like one platform and should not create isolated navigation or account surfaces.",
2275
- appliesTo: ["browser"],
2276
- evidence: [
2277
- "@topolo-io/app-shell is used for the platform shell where the app has authenticated UI",
2278
- "@topolo-io/app-launcher keeps the shared launcher/app switcher reachable from authenticated app chrome",
2279
- "Account menu and sign-out behavior use TopoloAppShell or the ui-kit TopoloAccountMenu primitive",
2280
- "Repeated app body surfaces use shared TopoloAppLayout primitives instead of local stat cards, empty states, or status badges",
2281
- "Local preview supports deterministic visual QA fixtures for overview, list, detail, settings, and empty/loading states",
2282
- "Authenticated app body content stays inside the viewport on mobile and desktop widths"
2283
- ],
2284
- implementation: [
2285
- "Use @topolo-io/app-shell TopoloAppShell for authenticated app layouts",
2286
- "Use the @topolo-io/ui-kit TopoloAccountMenu primitive when a partial-shell surface still needs account chrome",
2287
- "Pass app-specific account actions as additive menu items instead of forking dropdowns",
2288
- "Use shared design tokens and platform UI primitives before creating local equivalents",
2289
- "Use TopoloAppMetricCard, TopoloAppEmptyState, TopoloAppStatusBadge, TopoloAppGrid, and TopoloAppSection for repeated app body patterns",
2290
- "Keep visual QA fixtures available through visualQa=1 or __devpreview=1 so screenshot checks do not depend on live API state",
2291
- "Keep mobile and desktop shell behavior aligned with the platform UI kit",
2292
- "Constrain the app workspace-view layout wrappers with min-width: 0, width: auto, and viewport-aware max-width so shell padding cannot create page-level horizontal overflow"
2293
- ]
2294
- },
2295
- {
2296
- id: "app-registration-and-scopes",
2297
- title: "Register protected APIs as platform apps",
2298
- summary: "Callable app APIs need a stable app ID, app slug, permissions, role bundles, and API-key scopes before agents or users rely on them.",
2299
- appliesTo: ["api"],
2300
- evidence: [
2301
- "Auth app catalog contains the app ID and slug",
2302
- "Permissions, role bundles, and API-key scopes exist for the app",
2303
- "SDK, CLI, and MCP app discovery include the callable production API",
2304
- "CloudControl production HTTP targets classify agent reachability with sdk_app_id or agent_callable:false"
2305
- ],
2306
- implementation: [
2307
- "Add production Worker api_url metadata and sdk_app_id for every agent-callable API target",
2308
- "Mark browser, documentation, and runtime-only Worker targets with agent_callable:false",
2309
- "Expose stable app IDs through live catalog discovery",
2310
- "Keep typed SDK/CLI/MCP surfaces in sync when an API contract stabilizes"
2311
- ]
2312
- },
2313
- {
2314
- id: "organization-scoped-data",
2315
- title: "Keep application data organization-scoped",
2316
- summary: "Protected data access must be scoped by the authenticated organization at the backend boundary, not by client-provided hints.",
2317
- appliesTo: ["api"],
2318
- evidence: [
2319
- "Backend request handlers derive org membership from credential validation",
2320
- "Queries and Durable Object keys include the authenticated organization boundary where data is tenant-owned",
2321
- "MCP and CLI inputs do not include orgId overrides"
2322
- ],
2323
- implementation: [
2324
- "Reject or ignore organization hints supplied by clients",
2325
- "Bind SQL, KV, R2, queue, and Durable Object access to the authenticated organization",
2326
- "Document service-local exceptions explicitly in the system security assurance record"
2327
- ]
2328
- },
2329
- {
2330
- id: "cloudflare-deployment-contract",
2331
- title: "Keep Cloudflare deployment metadata complete",
2332
- summary: "Workers, Pages, bindings, routes, env vars, queues, cron triggers, and deployment commands must be discoverable through CloudControl metadata.",
2333
- appliesTo: ["browser", "api"],
2334
- evidence: [
2335
- "topolo.cloudcontrol.json lists production deploy targets and URLs",
2336
- "Wrangler/Pages configuration matches CloudControl metadata",
2337
- "Secrets and environment variables are not committed"
2338
- ],
2339
- implementation: [
2340
- "Update CloudControl metadata whenever deployment topology changes",
2341
- "Prefer Cloudflare-native runtime surfaces for new Topolo app infrastructure",
2342
- "Keep Worker bindings and Pages domains explicit enough for agents to inspect before deploying"
2343
- ]
2344
- },
2345
- {
2346
- id: "agent-and-operator-surfaces",
2347
- title: "Expose agent-safe operations through SDK, CLI, and MCP",
2348
- summary: "Agent-accessible functionality should be discoverable, scope-gated, and write-confirmed instead of hidden behind ad hoc HTTP calls.",
2349
- appliesTo: ["api", "tooling", "agent_surface"],
2350
- evidence: [
2351
- "Read operations have typed SDK/CLI/MCP surfaces once their contract stabilizes",
2352
- "Mutating generic calls require --confirm or confirm:true",
2353
- "MCP tools never accept orgId and advertise only appropriate scope-gated tools"
2354
- ],
2355
- implementation: [
2356
- "Add SDK types first, then CLI commands and MCP tools for durable workflows",
2357
- "Use generic API passthrough only as a temporary escape hatch",
2358
- "Keep command output JSON-stable for agents and human-readable with --no-json"
2359
- ]
2360
- },
2361
- {
2362
- id: "native-dashboard-widget",
2363
- title: "Expose a native dashboard widget contract",
2364
- summary: "Launchable first-party applications must populate TopoloOne live workspace through an app-owned /api/widget endpoint using the SDK widget response contract.",
2365
- appliesTo: ["api"],
2366
- evidence: [
2367
- "The app-owned API exposes GET /api/widget",
2368
- "The endpoint returns TopoloWidgetApiResponse from @topolo/sdk",
2369
- "Every returned widget includes snapshot.summary with app-owned operational prose",
2370
- "The endpoint derives organization/user context from the app auth boundary"
2371
- ],
2372
- implementation: [
2373
- "Import createTopoloWidgetResponse from @topolo/sdk in the app backend",
2374
- "Return native app metrics or action widgets instead of generic launch-card fallbacks",
2375
- "Populate snapshot.summary in the producing app for every widget instead of synthesizing summaries in TopoloOne",
2376
- "Add a route-level test that validates the response with validateTopoloWidgetResponse"
2377
- ]
2378
- },
2379
- {
2380
- id: "observability-and-audit",
2381
- title: "Emit platform audit and debugging signals",
2382
- summary: "Requests, agent actions, and operational workflows need traceable IDs, client labels, and useful failure evidence.",
2383
- appliesTo: ["api", "tooling", "agent_surface"],
2384
- evidence: [
2385
- "Requests carry X-Topolo-Client and X-Topolo-Request-Id where the SDK is involved",
2386
- "Agent-originated calls can include X-Topolo-Agent",
2387
- "Failure modes are documented with request IDs or deployment/log lookup paths"
2388
- ],
2389
- implementation: [
2390
- "Use TopoloClient for platform API calls rather than raw fetch where practical",
2391
- "Keep logs free of secrets and tokens",
2392
- "Document live smoke commands and request-id correlation in canonical docs"
2393
- ]
2394
- },
2395
- {
2396
- id: "verification-gates",
2397
- title: "Ship with build, test, docs, and smoke verification",
2398
- summary: "A Topolo app change is not complete until the relevant code checks and docs checks have been run or explicitly reported as blocked.",
2399
- appliesTo: ["all"],
2400
- evidence: [
2401
- "Relevant package build/typecheck/test commands pass",
2402
- "TopoloDocs validation passes when docs are touched",
2403
- "Live or local smoke evidence is captured for user-visible or API behavior"
2404
- ],
2405
- implementation: [
2406
- "Prefer existing package scripts before adding new tooling",
2407
- "Run app-specific checks and shared docs validation for behavior changes",
2408
- "Report any skipped verification with the blocker and residual risk"
2409
- ]
2410
- }
2411
- ];
2412
- function applicationRequirementScopes(application) {
2413
- const scopes = /* @__PURE__ */ new Set(["all"]);
2414
- const appId = application.id;
2415
- const hasBrowserSurface = Boolean(application.productionUrl) || // String() keeps this guard valid after the Pages->Worker migration narrowed
2416
- // the generated kind union to "worker" (no "pages" literal remains).
2417
- application.deployTargets.some((target) => String(target.kind) === "pages");
2418
- const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.appId));
2419
- if (hasBrowserSurface) scopes.add("browser");
2420
- if (hasApiSurface) scopes.add("api");
2421
- if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
2422
- scopes.add("tooling");
2423
- }
2424
- if (appId === "cli" || appId === "mcp" || hasApiSurface) {
2425
- scopes.add("agent_surface");
2426
- }
2427
- return Array.from(scopes);
2428
- }
2429
- function fallbackApplication(id) {
2430
- const entry = STATIC_APPLICATIONS2[id];
2431
- if (!entry) {
2432
- throw new Error(
2433
- `Unknown application "${id}" in the static fallback snapshot. Resolve applications from the live registry (resolveApplicationDirectoryEntry) and pass the entry directly.`
2434
- );
2435
- }
2436
- return entry;
2437
- }
2438
- function requirementsForApplication(applicationOrId) {
2439
- const application = typeof applicationOrId === "string" ? fallbackApplication(applicationOrId) : applicationOrId;
2440
- const scopes = new Set(applicationRequirementScopes(application));
2441
- return APPLICATION_REQUIREMENTS.filter(
2442
- (requirement) => requirement.appliesTo.some((scope) => scopes.has(scope))
2443
- );
2444
- }
2445
- function auditApplicationRequirements(applicationOrId) {
2446
- const application = typeof applicationOrId === "string" ? fallbackApplication(applicationOrId) : applicationOrId;
2447
- const scopes = applicationRequirementScopes(application);
2448
- const findings = requirementsForApplication(application).map(
2449
- (requirement) => evaluateRequirement(application, requirement)
2450
- );
2451
- return {
2452
- version: APPLICATION_REQUIREMENTS_VERSION,
2453
- application,
2454
- scopes,
2455
- score: scoreFindings(findings),
2456
- findings
2457
- };
2458
- }
2459
- function auditApplicationEntries(applications) {
2460
- return buildAuditReport(
2461
- applications.map((application) => auditApplicationRequirements(application))
2462
- );
2463
- }
2464
- function buildAuditReport(applications) {
2465
- const migrationQueue = applications.flatMap(
2466
- (audit) => audit.findings.filter((finding2) => finding2.status !== "met").map((finding2) => ({
2467
- applicationId: audit.application.id,
2468
- applicationName: audit.application.name,
2469
- requirementId: finding2.requirementId,
2470
- title: finding2.title,
2471
- status: finding2.status,
2472
- reason: finding2.reason,
2473
- nextActions: finding2.nextActions
2474
- }))
2475
- ).sort((a, b) => {
2476
- const statusOrder = statusRank(a.status) - statusRank(b.status);
2477
- if (statusOrder !== 0) return statusOrder;
2478
- const appOrder = a.applicationId.localeCompare(b.applicationId);
2479
- if (appOrder !== 0) return appOrder;
2480
- return a.requirementId.localeCompare(b.requirementId);
2481
- });
2482
- return {
2483
- version: APPLICATION_REQUIREMENTS_VERSION,
2484
- applications,
2485
- migrationQueue
2486
- };
2487
- }
2488
- function evaluateRequirement(application, requirement) {
2489
- const evidence = [];
2490
- switch (requirement.id) {
2491
- case "platform-metadata": {
2492
- if (application.packageName) evidence.push(`package=${application.packageName}`);
2493
- if (application.productionUrl) evidence.push(`productionUrl=${application.productionUrl}`);
2494
- if (application.deployTargets.length > 0) {
2495
- evidence.push(`deployTargets=${application.deployTargets.length}`);
2496
- }
2497
- if (application.services.length > 0) {
2498
- evidence.push(`services=${application.services.join(",")}`);
2499
- }
2500
- if (evidence.length === 0) {
2501
- return finding(requirement, "missing", "No package, production URL, deploy target, or service metadata is available.", evidence);
2502
- }
2503
- return finding(requirement, "met", "Catalog metadata exists for this application.", evidence);
2504
- }
2505
- case "canonical-docs":
2506
- return finding(
2507
- requirement,
2508
- "needs_review",
2509
- "Catalog metadata cannot verify matching TopoloDocs system and handbook coverage.",
2510
- evidence
2511
- );
2512
- case "shared-auth-boundary":
2513
- return finding(
2514
- requirement,
2515
- "needs_review",
2516
- "Catalog metadata cannot verify that implementation uses shared Topolo auth packages and derives org from credentials.",
2517
- evidence
2518
- );
2519
- case "shared-shell-and-launcher":
2520
- return finding(
2521
- requirement,
2522
- "needs_review",
2523
- "Catalog metadata cannot verify shared shell, launcher, and account menu adoption.",
2524
- evidence
2525
- );
2526
- case "app-registration-and-scopes": {
2527
- if (application.services.length > 0) {
2528
- evidence.push(`services=${application.services.join(",")}`);
2529
- return finding(
2530
- requirement,
2531
- "partial",
2532
- "SDK service discovery exists, but Auth catalog permissions, role bundles, and API-key scopes still need confirmation.",
2533
- evidence
2534
- );
2535
- }
2536
- return finding(requirement, "missing", "No SDK app API id is registered for this callable API surface.", evidence);
2537
- }
2538
- case "organization-scoped-data":
2539
- return finding(
2540
- requirement,
2541
- "needs_review",
2542
- "Catalog metadata cannot verify backend tenant filters, storage keys, or Durable Object boundaries.",
2543
- evidence
2544
- );
2545
- case "cloudflare-deployment-contract": {
2546
- if (application.deployTargets.length < 1) {
2547
- return finding(requirement, "missing", "No CloudControl deploy targets are registered.", evidence);
2548
- }
2549
- evidence.push(`deployTargets=${application.deployTargets.length}`);
2550
- if (application.productionUrl) evidence.push(`productionUrl=${application.productionUrl}`);
2551
- return finding(requirement, "met", "CloudControl deploy target metadata is present.", evidence);
2552
- }
2553
- case "agent-and-operator-surfaces": {
2554
- const appId = application.id;
2555
- if (application.services.length > 0) {
2556
- evidence.push(`services=${application.services.join(",")}`);
2557
- return finding(requirement, "partial", "SDK service discovery exists; typed SDK/CLI/MCP workflow coverage should be checked as APIs stabilize.", evidence);
2558
- }
2559
- if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
2560
- evidence.push(`tooling=${appId}`);
2561
- return finding(requirement, "met", "This application is itself an agent/operator surface.", evidence);
2562
- }
2563
- return finding(requirement, "missing", "No SDK service or tooling surface is registered.", evidence);
2564
- }
2565
- case "native-dashboard-widget":
2566
- return finding(
2567
- requirement,
2568
- "needs_review",
2569
- "Catalog metadata cannot verify app-owned /api/widget implementation details.",
2570
- evidence
2571
- );
2572
- case "observability-and-audit":
2573
- return finding(
2574
- requirement,
2575
- "needs_review",
2576
- "Catalog metadata cannot verify runtime request IDs, client labels, or log redaction.",
2577
- evidence
2578
- );
2579
- case "verification-gates":
2580
- return finding(
2581
- requirement,
2582
- "needs_review",
2583
- "Catalog metadata cannot verify package checks, docs validation, or smoke evidence.",
2584
- evidence
2585
- );
2586
- default:
2587
- return finding(requirement, "needs_review", "No automated evaluator exists for this requirement yet.", evidence);
2588
- }
2589
- }
2590
- function finding(requirement, status, reason, evidence) {
2591
- return {
2592
- requirementId: requirement.id,
2593
- title: requirement.title,
2594
- status,
2595
- reason,
2596
- evidence,
2597
- nextActions: status === "met" ? [] : requirement.implementation
2598
- };
2599
- }
2600
- function scoreFindings(findings) {
2601
- const met = findings.filter((finding2) => finding2.status === "met").length;
2602
- const partial = findings.filter((finding2) => finding2.status === "partial").length;
2603
- const missing = findings.filter((finding2) => finding2.status === "missing").length;
2604
- const needsReview = findings.filter((finding2) => finding2.status === "needs_review").length;
2605
- const total = findings.length;
2606
- const weighted = met + partial * 0.5;
2607
- return {
2608
- met,
2609
- partial,
2610
- missing,
2611
- needsReview,
2612
- total,
2613
- percent: total === 0 ? 100 : Math.round(weighted / total * 100)
2614
- };
2615
- }
2616
- function statusRank(status) {
2617
- if (status === "missing") return 0;
2618
- if (status === "partial") return 1;
2619
- return 2;
2620
- }
2621
368
  var DEFAULT_APP_URLS = APP_API_URLS;
2622
369
  function resolveCatalogServiceUrl(entry, options = {}) {
2623
370
  const keys = catalogServiceKeyCandidates(entry, options.serviceKey);
@@ -3809,28 +1556,6 @@ var TopoloClient = class _TopoloClient {
3809
1556
  confirm: options.confirm === true || entry.readOnly && !entry.destructive && !entry.requiresConfirmation
3810
1557
  });
3811
1558
  }
3812
- /**
3813
- * @deprecated Static fallback snapshot only. Use `searchServices()` (the
3814
- * live credential-scoped registry) for anything that decides behavior; this
3815
- * exists for offline packaging audits when the registry is unreachable.
3816
- */
3817
- listBundledServices() {
3818
- const apps = Object.values(APPLICATIONS);
3819
- return apps.map((app) => ({
3820
- appId: app.id,
3821
- slug: app.id,
3822
- name: app.name ?? app.id,
3823
- description: null,
3824
- apiBaseUrl: null,
3825
- launchUrl: app.productionUrl ?? null,
3826
- status: "bundled",
3827
- surfaceKind: "application",
3828
- launchable: Boolean(app.productionUrl),
3829
- permissions: [],
3830
- apiKeyResource: null,
3831
- apiKeyResources: []
3832
- }));
3833
- }
3834
1559
  /**
3835
1560
  * Introspect the current credential. Returns the caller's resolved identity,
3836
1561
  * organization, and permission set. Used by CLI `whoami` and by MCP to gate
@@ -4081,6 +1806,7 @@ function normalizeActionCatalogEntry(item) {
4081
1806
  path,
4082
1807
  permissionName: pickActionString(a.permission_name) ?? pickActionString(a.permissionName) ?? "",
4083
1808
  requiredPermission: pickActionString(a.required_permission) ?? pickActionString(a.requiredPermission) ?? "",
1809
+ principalAccess: pickPrincipalAccess(a.principal_access ?? a.principalAccess),
4084
1810
  authorizationMode: pickAuthorizationMode(a.authorization_mode ?? a.authorizationMode),
4085
1811
  allowedServices: stringArray(a.allowed_services ?? a.allowedServices),
4086
1812
  inputSchema: plainObject(a.input_schema ?? a.inputSchema),
@@ -4097,6 +1823,9 @@ function normalizeActionCatalogEntry(item) {
4097
1823
  function isHttpMethod(value) {
4098
1824
  return value === "GET" || value === "POST" || value === "PUT" || value === "PATCH" || value === "DELETE";
4099
1825
  }
1826
+ function pickPrincipalAccess(value) {
1827
+ return value === "platform_admin" || value === "platform_super_admin" ? value : null;
1828
+ }
4100
1829
  function pickActionString(value) {
4101
1830
  return typeof value === "string" && value.trim() ? value.trim() : null;
4102
1831
  }
@@ -4313,17 +2042,6 @@ function compactActionPreparation(preparation, context) {
4313
2042
  const compact = compactActionPreparationCore(preparation);
4314
2043
  return context ? { context, ...compact } : compact;
4315
2044
  }
4316
- function compactApplicationAudit(report) {
4317
- return {
4318
- version: report.version,
4319
- applications: report.applications.map((audit) => ({
4320
- applicationId: audit.application.id,
4321
- applicationName: audit.application.name,
4322
- score: audit.score
4323
- })),
4324
- migrationQueueCount: report.migrationQueue.length
4325
- };
4326
- }
4327
2045
  var CrmModule = class {
4328
2046
  constructor(client) {
4329
2047
  this.client = client;
@@ -4451,7 +2169,7 @@ function createTopolo(options) {
4451
2169
  };
4452
2170
  }
4453
2171
 
4454
- // ../../../development-workflow-acceleration/node_modules/.pnpm/@topolo+sdk@0.10.4/node_modules/@topolo/sdk/dist/node/credential-store.js
2172
+ // ../../../public-platform-tooling-boundary-20260813/packages/topolo-sdk/dist/node/credential-store.js
4455
2173
  import { mkdir, readFile, writeFile, chmod } from "fs/promises";
4456
2174
  import { existsSync } from "fs";
4457
2175
  import { homedir, platform } from "os";
@@ -4773,8 +2491,7 @@ var TOPOLO_ENVIRONMENT_SERVICE_URLS = {
4773
2491
  },
4774
2492
  staging: {
4775
2493
  auth: "https://auth.stg.topolo.us",
4776
- developers: "https://developers.stg.topolo.us",
4777
- seed: "https://seed.stg.topolo.us"
2494
+ developers: "https://developers.stg.topolo.us"
4778
2495
  },
4779
2496
  development: {
4780
2497
  auth: "https://auth.topolo.dev",
@@ -5046,11 +2763,7 @@ import {
5046
2763
  } from "@modelcontextprotocol/sdk/types.js";
5047
2764
 
5048
2765
  // src/gating.ts
5049
- function hasPlatformAccess(set) {
5050
- return (set.role === "platform_super_admin" || set.role === "platform_admin") && set.orgSlug === "admin";
5051
- }
5052
2766
  function hasScope(set, required) {
5053
- if (hasPlatformAccess(set)) return true;
5054
2767
  if (set.permissions.includes("*")) return true;
5055
2768
  const [servicePart, actionPart] = splitPermission(required);
5056
2769
  if (!servicePart) return set.permissions.includes(required);
@@ -5643,87 +3356,6 @@ var TOOLS = [
5643
3356
  args["confirm"] === true
5644
3357
  )
5645
3358
  },
5646
- {
5647
- name: "topolo_list_application_requirements",
5648
- title: "List Topolo application build requirements",
5649
- description: "Returns the current versioned Topolo application-build contract, optionally filtered to one application. Use this before creating or expanding a Topolo app so the agent follows shared metadata, docs, auth, shell, service registration, deployment, observability, and verification requirements.",
5650
- requiredScopes: [],
5651
- destructive: false,
5652
- inputSchema: {
5653
- type: "object",
5654
- properties: {
5655
- application: {
5656
- type: "string",
5657
- description: "Optional application ID from topolo_search_applications."
5658
- }
5659
- },
5660
- additionalProperties: false
5661
- },
5662
- handler: async (topolo, args) => {
5663
- const application = args["application"];
5664
- if (application === void 0) {
5665
- return {
5666
- version: APPLICATION_REQUIREMENTS_VERSION,
5667
- application: null,
5668
- scopes: ["all", "browser", "api", "tooling", "agent_surface"],
5669
- requirements: APPLICATION_REQUIREMENTS
5670
- };
5671
- }
5672
- const resolved = await resolveDirectoryApplication(topolo, application);
5673
- const app = resolved.application;
5674
- return {
5675
- version: APPLICATION_REQUIREMENTS_VERSION,
5676
- application: app,
5677
- scopes: applicationRequirementScopes(app),
5678
- requirements: requirementsForApplication(app)
5679
- };
5680
- }
5681
- },
5682
- {
5683
- name: "topolo_audit_applications",
5684
- title: "Audit Topolo applications against platform requirements",
5685
- description: "Returns catalog-backed conformance scores and migration-queue items for all Topolo apps, or one application when provided. Use this to see which shared platform requirements need implementation, verification, or deeper review.",
5686
- requiredScopes: [],
5687
- destructive: false,
5688
- inputSchema: {
5689
- type: "object",
5690
- properties: {
5691
- application: {
5692
- type: "string",
5693
- description: "Optional application ID from topolo_search_applications."
5694
- },
5695
- failOn: {
5696
- type: "string",
5697
- enum: ["missing", "needs_review", "partial"],
5698
- description: "Optional conformance gate. Returns conformanceGate.passed=false when findings at this severity or worse exist."
5699
- },
5700
- detail: {
5701
- type: "boolean",
5702
- description: "Include every finding and migration item. Defaults to per-app scores and a queue count."
5703
- }
5704
- },
5705
- additionalProperties: false
5706
- },
5707
- handler: async (topolo, args) => {
5708
- const application = args["application"];
5709
- const failOn = args["failOn"];
5710
- if (failOn !== void 0 && typeof failOn !== "string") {
5711
- throw new TopoloMcpPublicError("failOn must be one of: missing, needs_review, partial");
5712
- }
5713
- const gate = failOn ? normalizeFailOn(failOn) : null;
5714
- let report;
5715
- if (application === void 0) {
5716
- const directory = await listApplicationDirectory(topolo.client);
5717
- report = auditApplicationEntries(directory.applications.map((app) => app.application));
5718
- const output2 = args["detail"] === true ? report : compactApplicationAudit(report);
5719
- return gate ? { ...output2, conformanceGate: evaluateApplicationAuditGate(report, gate) } : output2;
5720
- }
5721
- const resolved = await resolveDirectoryApplication(topolo, application);
5722
- report = auditApplicationEntries([resolved.application]);
5723
- const output = args["detail"] === true ? report : compactApplicationAudit(report);
5724
- return gate ? { ...output, conformanceGate: evaluateApplicationAuditGate(report, gate) } : output;
5725
- }
5726
- },
5727
3359
  {
5728
3360
  name: "topolo_api_call",
5729
3361
  title: "Call any Topolo platform service",
@@ -5823,57 +3455,9 @@ async function buildTopoloTools(topolo, scopes, tools = TOOLS) {
5823
3455
  void topolo;
5824
3456
  return filterToolsByScopes(tools, scopes);
5825
3457
  }
5826
- function evaluateApplicationAuditGate(report, threshold) {
5827
- const counts = {
5828
- met: 0,
5829
- partial: 0,
5830
- missing: 0,
5831
- needs_review: 0
5832
- };
5833
- for (const audit of report.applications) {
5834
- for (const finding2 of audit.findings) {
5835
- counts[finding2.status] += 1;
5836
- }
5837
- }
5838
- const failingFindings = statusesAtOrWorse(threshold).reduce(
5839
- (total, status) => total + counts[status],
5840
- 0
5841
- );
5842
- return {
5843
- threshold,
5844
- passed: failingFindings === 0,
5845
- message: failingFindings === 0 ? `No findings at or above ${threshold}.` : `${failingFindings} finding(s) at or above ${threshold}.`,
5846
- failingFindings,
5847
- counts
5848
- };
5849
- }
5850
- function normalizeFailOn(value) {
5851
- const normalized = value.trim().toLowerCase().replace(/-/g, "_");
5852
- if (normalized === "missing" || normalized === "needs_review" || normalized === "partial") {
5853
- return normalized;
5854
- }
5855
- throw new TopoloMcpPublicError("failOn must be one of: missing, needs_review, partial");
5856
- }
5857
- function statusesAtOrWorse(threshold) {
5858
- if (threshold === "missing") return ["missing"];
5859
- if (threshold === "needs_review") return ["missing", "needs_review"];
5860
- return ["missing", "needs_review", "partial"];
5861
- }
5862
3458
  function displayAppId(entry) {
5863
3459
  return friendlyAppId(entry);
5864
3460
  }
5865
- async function resolveDirectoryApplication(topolo, application) {
5866
- if (typeof application !== "string" || !application.trim()) {
5867
- throw new TopoloMcpPublicError("`application` must be a non-empty string.");
5868
- }
5869
- try {
5870
- return await resolveApplicationDirectoryEntry(topolo.client, application);
5871
- } catch (error) {
5872
- throw new TopoloMcpPublicError(
5873
- error instanceof Error ? error.message : `Unknown application "${application}".`
5874
- );
5875
- }
5876
- }
5877
3461
 
5878
3462
  // src/version.ts
5879
3463
  import { readFileSync } from "fs";