@topolo/mcp 0.4.9 → 0.5.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
@@ -124,7 +124,7 @@ var APPLICATIONS = {
124
124
  "admin.topolo.app"
125
125
  ],
126
126
  "routes": [],
127
- "serviceId": null
127
+ "appId": null
128
128
  },
129
129
  {
130
130
  "name": "topolo-admin-api",
@@ -132,7 +132,7 @@ var APPLICATIONS = {
132
132
  "apiUrl": null,
133
133
  "domains": [],
134
134
  "routes": [],
135
- "serviceId": null
135
+ "appId": null
136
136
  }
137
137
  ]
138
138
  },
@@ -154,7 +154,7 @@ var APPLICATIONS = {
154
154
  "agent.topolo.app"
155
155
  ],
156
156
  "routes": [],
157
- "serviceId": "agent"
157
+ "appId": "agent"
158
158
  },
159
159
  {
160
160
  "name": "topolo-agent-api",
@@ -162,7 +162,7 @@ var APPLICATIONS = {
162
162
  "apiUrl": null,
163
163
  "domains": [],
164
164
  "routes": [],
165
- "serviceId": null
165
+ "appId": null
166
166
  }
167
167
  ]
168
168
  },
@@ -186,7 +186,7 @@ var APPLICATIONS = {
186
186
  "routes": [
187
187
  "auth.topolo.app"
188
188
  ],
189
- "serviceId": "auth"
189
+ "appId": "auth"
190
190
  }
191
191
  ]
192
192
  },
@@ -208,7 +208,7 @@ var APPLICATIONS = {
208
208
  "backup.topolo.app"
209
209
  ],
210
210
  "routes": [],
211
- "serviceId": "backup"
211
+ "appId": "backup"
212
212
  }
213
213
  ]
214
214
  },
@@ -230,7 +230,7 @@ var APPLICATIONS = {
230
230
  "books.topolo.app"
231
231
  ],
232
232
  "routes": [],
233
- "serviceId": "books"
233
+ "appId": "books"
234
234
  },
235
235
  {
236
236
  "name": "topolo-books-api",
@@ -238,7 +238,7 @@ var APPLICATIONS = {
238
238
  "apiUrl": null,
239
239
  "domains": [],
240
240
  "routes": [],
241
- "serviceId": null
241
+ "appId": null
242
242
  }
243
243
  ]
244
244
  },
@@ -260,7 +260,7 @@ var APPLICATIONS = {
260
260
  "bugfix.topolo.app"
261
261
  ],
262
262
  "routes": [],
263
- "serviceId": "bugfix"
263
+ "appId": "bugfix"
264
264
  }
265
265
  ]
266
266
  },
@@ -282,7 +282,7 @@ var APPLICATIONS = {
282
282
  "bytes.topolo.app"
283
283
  ],
284
284
  "routes": [],
285
- "serviceId": "bytes"
285
+ "appId": "bytes"
286
286
  },
287
287
  {
288
288
  "name": "topolo-bytes-api",
@@ -290,7 +290,7 @@ var APPLICATIONS = {
290
290
  "apiUrl": null,
291
291
  "domains": [],
292
292
  "routes": [],
293
- "serviceId": null
293
+ "appId": null
294
294
  }
295
295
  ]
296
296
  },
@@ -312,7 +312,7 @@ var APPLICATIONS = {
312
312
  "calendar.topolo.app"
313
313
  ],
314
314
  "routes": [],
315
- "serviceId": "calendar"
315
+ "appId": "calendar"
316
316
  },
317
317
  {
318
318
  "name": "topolo-calendar-api",
@@ -320,7 +320,7 @@ var APPLICATIONS = {
320
320
  "apiUrl": null,
321
321
  "domains": [],
322
322
  "routes": [],
323
- "serviceId": null
323
+ "appId": null
324
324
  }
325
325
  ]
326
326
  },
@@ -342,7 +342,7 @@ var APPLICATIONS = {
342
342
  "capacity.topolo.app"
343
343
  ],
344
344
  "routes": [],
345
- "serviceId": "capacity"
345
+ "appId": "capacity"
346
346
  }
347
347
  ]
348
348
  },
@@ -364,7 +364,7 @@ var APPLICATIONS = {
364
364
  "chat.topolo.app"
365
365
  ],
366
366
  "routes": [],
367
- "serviceId": "chat"
367
+ "appId": "chat"
368
368
  },
369
369
  {
370
370
  "name": "topolo-chat-api",
@@ -372,7 +372,7 @@ var APPLICATIONS = {
372
372
  "apiUrl": null,
373
373
  "domains": [],
374
374
  "routes": [],
375
- "serviceId": null
375
+ "appId": null
376
376
  }
377
377
  ]
378
378
  },
@@ -392,7 +392,7 @@ var APPLICATIONS = {
392
392
  "apiUrl": null,
393
393
  "domains": [],
394
394
  "routes": [],
395
- "serviceId": null
395
+ "appId": null
396
396
  },
397
397
  {
398
398
  "name": "topolo-commerce-guest-web",
@@ -402,7 +402,7 @@ var APPLICATIONS = {
402
402
  "guest.topolo.app"
403
403
  ],
404
404
  "routes": [],
405
- "serviceId": null
405
+ "appId": null
406
406
  },
407
407
  {
408
408
  "name": "topolo-commerce-ops-web",
@@ -412,7 +412,7 @@ var APPLICATIONS = {
412
412
  "commerce.topolo.app"
413
413
  ],
414
414
  "routes": [],
415
- "serviceId": "commerce"
415
+ "appId": "commerce"
416
416
  },
417
417
  {
418
418
  "name": "topolo-commerce-station-web",
@@ -422,7 +422,7 @@ var APPLICATIONS = {
422
422
  "station-commerce.topolo.app"
423
423
  ],
424
424
  "routes": [],
425
- "serviceId": null
425
+ "appId": null
426
426
  }
427
427
  ]
428
428
  },
@@ -444,7 +444,7 @@ var APPLICATIONS = {
444
444
  "compose.topolo.app"
445
445
  ],
446
446
  "routes": [],
447
- "serviceId": "compose"
447
+ "appId": "compose"
448
448
  },
449
449
  {
450
450
  "name": "topolo-compose-api",
@@ -452,7 +452,7 @@ var APPLICATIONS = {
452
452
  "apiUrl": null,
453
453
  "domains": [],
454
454
  "routes": [],
455
- "serviceId": null
455
+ "appId": null
456
456
  }
457
457
  ]
458
458
  },
@@ -474,7 +474,7 @@ var APPLICATIONS = {
474
474
  "consent.topolo.app"
475
475
  ],
476
476
  "routes": [],
477
- "serviceId": "consent"
477
+ "appId": "consent"
478
478
  },
479
479
  {
480
480
  "name": "topolo-consent-api",
@@ -482,7 +482,7 @@ var APPLICATIONS = {
482
482
  "apiUrl": null,
483
483
  "domains": [],
484
484
  "routes": [],
485
- "serviceId": null
485
+ "appId": null
486
486
  }
487
487
  ]
488
488
  },
@@ -502,7 +502,7 @@ var APPLICATIONS = {
502
502
  "apiUrl": null,
503
503
  "domains": [],
504
504
  "routes": [],
505
- "serviceId": null
505
+ "appId": null
506
506
  },
507
507
  {
508
508
  "name": "topolo-crm-app",
@@ -512,7 +512,7 @@ var APPLICATIONS = {
512
512
  "crm.topolo.app"
513
513
  ],
514
514
  "routes": [],
515
- "serviceId": "crm"
515
+ "appId": "crm"
516
516
  }
517
517
  ]
518
518
  },
@@ -532,7 +532,7 @@ var APPLICATIONS = {
532
532
  "apiUrl": null,
533
533
  "domains": [],
534
534
  "routes": [],
535
- "serviceId": null
535
+ "appId": null
536
536
  },
537
537
  {
538
538
  "name": "topolo-developers",
@@ -542,7 +542,7 @@ var APPLICATIONS = {
542
542
  "developers.topolo.app"
543
543
  ],
544
544
  "routes": [],
545
- "serviceId": "developers"
545
+ "appId": "developers"
546
546
  },
547
547
  {
548
548
  "name": "topolo-developers-api",
@@ -550,7 +550,7 @@ var APPLICATIONS = {
550
550
  "apiUrl": null,
551
551
  "domains": [],
552
552
  "routes": [],
553
- "serviceId": null
553
+ "appId": null
554
554
  }
555
555
  ]
556
556
  },
@@ -572,7 +572,7 @@ var APPLICATIONS = {
572
572
  "director.topolo.app"
573
573
  ],
574
574
  "routes": [],
575
- "serviceId": "director"
575
+ "appId": "director"
576
576
  },
577
577
  {
578
578
  "name": "topolo-director-api",
@@ -580,7 +580,7 @@ var APPLICATIONS = {
580
580
  "apiUrl": null,
581
581
  "domains": [],
582
582
  "routes": [],
583
- "serviceId": null
583
+ "appId": null
584
584
  }
585
585
  ]
586
586
  },
@@ -600,7 +600,7 @@ var APPLICATIONS = {
600
600
  "docs.topolo.app"
601
601
  ],
602
602
  "routes": [],
603
- "serviceId": null
603
+ "appId": null
604
604
  },
605
605
  {
606
606
  "name": "topolo-docs-api",
@@ -608,7 +608,7 @@ var APPLICATIONS = {
608
608
  "apiUrl": null,
609
609
  "domains": [],
610
610
  "routes": [],
611
- "serviceId": null
611
+ "appId": null
612
612
  }
613
613
  ]
614
614
  },
@@ -630,7 +630,7 @@ var APPLICATIONS = {
630
630
  "feed-analytics-api.topolo.app"
631
631
  ],
632
632
  "routes": [],
633
- "serviceId": null
633
+ "appId": null
634
634
  },
635
635
  {
636
636
  "name": "topolo-feed-api",
@@ -640,7 +640,7 @@ var APPLICATIONS = {
640
640
  "feed-api.topolo.app"
641
641
  ],
642
642
  "routes": [],
643
- "serviceId": null
643
+ "appId": null
644
644
  },
645
645
  {
646
646
  "name": "topolo-feed-web",
@@ -650,7 +650,7 @@ var APPLICATIONS = {
650
650
  "feed.topolo.app"
651
651
  ],
652
652
  "routes": [],
653
- "serviceId": "feed"
653
+ "appId": "feed"
654
654
  }
655
655
  ]
656
656
  },
@@ -672,7 +672,7 @@ var APPLICATIONS = {
672
672
  "flow.topolo.app"
673
673
  ],
674
674
  "routes": [],
675
- "serviceId": "flow"
675
+ "appId": "flow"
676
676
  },
677
677
  {
678
678
  "name": "topolo-flow-api",
@@ -680,7 +680,7 @@ var APPLICATIONS = {
680
680
  "apiUrl": null,
681
681
  "domains": [],
682
682
  "routes": [],
683
- "serviceId": null
683
+ "appId": null
684
684
  }
685
685
  ]
686
686
  },
@@ -702,7 +702,7 @@ var APPLICATIONS = {
702
702
  "forecast.topolo.app"
703
703
  ],
704
704
  "routes": [],
705
- "serviceId": "forecast"
705
+ "appId": "forecast"
706
706
  },
707
707
  {
708
708
  "name": "topolo-forecast-api",
@@ -710,7 +710,7 @@ var APPLICATIONS = {
710
710
  "apiUrl": null,
711
711
  "domains": [],
712
712
  "routes": [],
713
- "serviceId": null
713
+ "appId": null
714
714
  }
715
715
  ]
716
716
  },
@@ -732,7 +732,7 @@ var APPLICATIONS = {
732
732
  "forms.topolo.app"
733
733
  ],
734
734
  "routes": [],
735
- "serviceId": "forms"
735
+ "appId": "forms"
736
736
  },
737
737
  {
738
738
  "name": "topolo-forms-api",
@@ -740,7 +740,7 @@ var APPLICATIONS = {
740
740
  "apiUrl": null,
741
741
  "domains": [],
742
742
  "routes": [],
743
- "serviceId": null
743
+ "appId": null
744
744
  }
745
745
  ]
746
746
  },
@@ -762,7 +762,7 @@ var APPLICATIONS = {
762
762
  "home.topolo.app"
763
763
  ],
764
764
  "routes": [],
765
- "serviceId": "home"
765
+ "appId": "home"
766
766
  },
767
767
  {
768
768
  "name": "topolo-home-api",
@@ -770,7 +770,7 @@ var APPLICATIONS = {
770
770
  "apiUrl": null,
771
771
  "domains": [],
772
772
  "routes": [],
773
- "serviceId": null
773
+ "appId": null
774
774
  }
775
775
  ]
776
776
  },
@@ -792,7 +792,7 @@ var APPLICATIONS = {
792
792
  "insights.topolo.app"
793
793
  ],
794
794
  "routes": [],
795
- "serviceId": "insights"
795
+ "appId": "insights"
796
796
  },
797
797
  {
798
798
  "name": "topolo-insights-api",
@@ -800,7 +800,7 @@ var APPLICATIONS = {
800
800
  "apiUrl": null,
801
801
  "domains": [],
802
802
  "routes": [],
803
- "serviceId": null
803
+ "appId": null
804
804
  }
805
805
  ]
806
806
  },
@@ -822,7 +822,7 @@ var APPLICATIONS = {
822
822
  "inventory.topolo.app"
823
823
  ],
824
824
  "routes": [],
825
- "serviceId": "inventory"
825
+ "appId": "inventory"
826
826
  },
827
827
  {
828
828
  "name": "topolo-inventory-api",
@@ -830,7 +830,7 @@ var APPLICATIONS = {
830
830
  "apiUrl": null,
831
831
  "domains": [],
832
832
  "routes": [],
833
- "serviceId": null
833
+ "appId": null
834
834
  }
835
835
  ]
836
836
  },
@@ -852,7 +852,7 @@ var APPLICATIONS = {
852
852
  "learn.topolo.app"
853
853
  ],
854
854
  "routes": [],
855
- "serviceId": "learn"
855
+ "appId": "learn"
856
856
  },
857
857
  {
858
858
  "name": "topolo-learn-api",
@@ -860,7 +860,7 @@ var APPLICATIONS = {
860
860
  "apiUrl": null,
861
861
  "domains": [],
862
862
  "routes": [],
863
- "serviceId": null
863
+ "appId": null
864
864
  }
865
865
  ]
866
866
  },
@@ -884,7 +884,7 @@ var APPLICATIONS = {
884
884
  "routes": [
885
885
  "localize.topolo.app"
886
886
  ],
887
- "serviceId": "localize"
887
+ "appId": "localize"
888
888
  }
889
889
  ]
890
890
  },
@@ -906,7 +906,7 @@ var APPLICATIONS = {
906
906
  "mail.topolo.app"
907
907
  ],
908
908
  "routes": [],
909
- "serviceId": "mail"
909
+ "appId": "mail"
910
910
  },
911
911
  {
912
912
  "name": "topolo-mail-api",
@@ -914,7 +914,7 @@ var APPLICATIONS = {
914
914
  "apiUrl": null,
915
915
  "domains": [],
916
916
  "routes": [],
917
- "serviceId": null
917
+ "appId": null
918
918
  }
919
919
  ]
920
920
  },
@@ -934,7 +934,7 @@ var APPLICATIONS = {
934
934
  "apiUrl": null,
935
935
  "domains": [],
936
936
  "routes": [],
937
- "serviceId": null
937
+ "appId": null
938
938
  },
939
939
  {
940
940
  "name": "topolo-mdm-console",
@@ -944,7 +944,7 @@ var APPLICATIONS = {
944
944
  "mdm.topolo.app"
945
945
  ],
946
946
  "routes": [],
947
- "serviceId": "mdm"
947
+ "appId": "mdm"
948
948
  }
949
949
  ]
950
950
  },
@@ -966,7 +966,7 @@ var APPLICATIONS = {
966
966
  "messages.topolo.app"
967
967
  ],
968
968
  "routes": [],
969
- "serviceId": "messages"
969
+ "appId": "messages"
970
970
  },
971
971
  {
972
972
  "name": "topolo-messages-api",
@@ -974,7 +974,7 @@ var APPLICATIONS = {
974
974
  "apiUrl": null,
975
975
  "domains": [],
976
976
  "routes": [],
977
- "serviceId": null
977
+ "appId": null
978
978
  },
979
979
  {
980
980
  "name": "topolo-messages-dispatch",
@@ -982,7 +982,7 @@ var APPLICATIONS = {
982
982
  "apiUrl": null,
983
983
  "domains": [],
984
984
  "routes": [],
985
- "serviceId": null
985
+ "appId": null
986
986
  }
987
987
  ]
988
988
  },
@@ -1004,7 +1004,7 @@ var APPLICATIONS = {
1004
1004
  "nexus.topolo.app"
1005
1005
  ],
1006
1006
  "routes": [],
1007
- "serviceId": null
1007
+ "appId": null
1008
1008
  },
1009
1009
  {
1010
1010
  "name": "topolo-nexus-gateway",
@@ -1014,7 +1014,7 @@ var APPLICATIONS = {
1014
1014
  "nexus.topolo.app"
1015
1015
  ],
1016
1016
  "routes": [],
1017
- "serviceId": "nexus"
1017
+ "appId": "nexus"
1018
1018
  }
1019
1019
  ]
1020
1020
  },
@@ -1038,7 +1038,7 @@ var APPLICATIONS = {
1038
1038
  "routes": [
1039
1039
  "notify.topolo.app"
1040
1040
  ],
1041
- "serviceId": "notify"
1041
+ "appId": "notify"
1042
1042
  }
1043
1043
  ]
1044
1044
  },
@@ -1060,7 +1060,7 @@ var APPLICATIONS = {
1060
1060
  "observability-watch.topolo.app"
1061
1061
  ],
1062
1062
  "routes": [],
1063
- "serviceId": "observability_watch"
1063
+ "appId": "observability_watch"
1064
1064
  }
1065
1065
  ]
1066
1066
  },
@@ -1084,7 +1084,7 @@ var APPLICATIONS = {
1084
1084
  "routes": [
1085
1085
  "one.topolo.app/*"
1086
1086
  ],
1087
- "serviceId": null
1087
+ "appId": null
1088
1088
  },
1089
1089
  {
1090
1090
  "name": "topolo-one-api",
@@ -1096,7 +1096,7 @@ var APPLICATIONS = {
1096
1096
  "routes": [
1097
1097
  "www.topolo.app/*"
1098
1098
  ],
1099
- "serviceId": "one"
1099
+ "appId": "one"
1100
1100
  },
1101
1101
  {
1102
1102
  "name": "topolo-one-website",
@@ -1109,7 +1109,7 @@ var APPLICATIONS = {
1109
1109
  "topolo.io",
1110
1110
  "www.topolo.io"
1111
1111
  ],
1112
- "serviceId": null
1112
+ "appId": null
1113
1113
  }
1114
1114
  ]
1115
1115
  },
@@ -1131,7 +1131,7 @@ var APPLICATIONS = {
1131
1131
  "p2p.topolo.app"
1132
1132
  ],
1133
1133
  "routes": [],
1134
- "serviceId": "p2p"
1134
+ "appId": "p2p"
1135
1135
  },
1136
1136
  {
1137
1137
  "name": "topolo-p2p-api",
@@ -1139,7 +1139,7 @@ var APPLICATIONS = {
1139
1139
  "apiUrl": null,
1140
1140
  "domains": [],
1141
1141
  "routes": [],
1142
- "serviceId": null
1142
+ "appId": null
1143
1143
  }
1144
1144
  ]
1145
1145
  },
@@ -1161,7 +1161,7 @@ var APPLICATIONS = {
1161
1161
  "pay.topolo.app"
1162
1162
  ],
1163
1163
  "routes": [],
1164
- "serviceId": "pay"
1164
+ "appId": "pay"
1165
1165
  },
1166
1166
  {
1167
1167
  "name": "topolo-pay-api",
@@ -1169,7 +1169,7 @@ var APPLICATIONS = {
1169
1169
  "apiUrl": null,
1170
1170
  "domains": [],
1171
1171
  "routes": [],
1172
- "serviceId": null
1172
+ "appId": null
1173
1173
  }
1174
1174
  ]
1175
1175
  },
@@ -1191,7 +1191,7 @@ var APPLICATIONS = {
1191
1191
  "people.topolo.app"
1192
1192
  ],
1193
1193
  "routes": [],
1194
- "serviceId": "people"
1194
+ "appId": "people"
1195
1195
  },
1196
1196
  {
1197
1197
  "name": "topolo-people-api",
@@ -1199,7 +1199,7 @@ var APPLICATIONS = {
1199
1199
  "apiUrl": null,
1200
1200
  "domains": [],
1201
1201
  "routes": [],
1202
- "serviceId": null
1202
+ "appId": null
1203
1203
  }
1204
1204
  ]
1205
1205
  },
@@ -1224,7 +1224,7 @@ var APPLICATIONS = {
1224
1224
  "routes": [
1225
1225
  "api.ol0.me/*"
1226
1226
  ],
1227
- "serviceId": "quro.api"
1227
+ "appId": "quro.api"
1228
1228
  },
1229
1229
  {
1230
1230
  "name": "quro-redirect-system",
@@ -1236,7 +1236,7 @@ var APPLICATIONS = {
1236
1236
  "routes": [
1237
1237
  "ol0.me/*"
1238
1238
  ],
1239
- "serviceId": "quro.redirect"
1239
+ "appId": "quro.redirect"
1240
1240
  },
1241
1241
  {
1242
1242
  "name": "quro-ui",
@@ -1246,7 +1246,7 @@ var APPLICATIONS = {
1246
1246
  "quro.topolo.app"
1247
1247
  ],
1248
1248
  "routes": [],
1249
- "serviceId": null
1249
+ "appId": null
1250
1250
  }
1251
1251
  ]
1252
1252
  },
@@ -1268,7 +1268,7 @@ var APPLICATIONS = {
1268
1268
  "roadmapper.topolo.app"
1269
1269
  ],
1270
1270
  "routes": [],
1271
- "serviceId": "roadmapper"
1271
+ "appId": "roadmapper"
1272
1272
  },
1273
1273
  {
1274
1274
  "name": "topolo-roadmapper-api",
@@ -1276,7 +1276,7 @@ var APPLICATIONS = {
1276
1276
  "apiUrl": null,
1277
1277
  "domains": [],
1278
1278
  "routes": [],
1279
- "serviceId": null
1279
+ "appId": null
1280
1280
  }
1281
1281
  ]
1282
1282
  },
@@ -1298,7 +1298,7 @@ var APPLICATIONS = {
1298
1298
  "sign.topolo.app"
1299
1299
  ],
1300
1300
  "routes": [],
1301
- "serviceId": "sign"
1301
+ "appId": "sign"
1302
1302
  },
1303
1303
  {
1304
1304
  "name": "topolo-sign-api",
@@ -1306,7 +1306,7 @@ var APPLICATIONS = {
1306
1306
  "apiUrl": null,
1307
1307
  "domains": [],
1308
1308
  "routes": [],
1309
- "serviceId": null
1309
+ "appId": null
1310
1310
  }
1311
1311
  ]
1312
1312
  },
@@ -1328,7 +1328,7 @@ var APPLICATIONS = {
1328
1328
  "studio.topolo.app"
1329
1329
  ],
1330
1330
  "routes": [],
1331
- "serviceId": "social_studio"
1331
+ "appId": "social_studio"
1332
1332
  },
1333
1333
  {
1334
1334
  "name": "topolo-social-studio-api",
@@ -1336,7 +1336,7 @@ var APPLICATIONS = {
1336
1336
  "apiUrl": null,
1337
1337
  "domains": [],
1338
1338
  "routes": [],
1339
- "serviceId": null
1339
+ "appId": null
1340
1340
  },
1341
1341
  {
1342
1342
  "name": "topolo-social-studio-queue",
@@ -1344,7 +1344,7 @@ var APPLICATIONS = {
1344
1344
  "apiUrl": null,
1345
1345
  "domains": [],
1346
1346
  "routes": [],
1347
- "serviceId": null
1347
+ "appId": null
1348
1348
  }
1349
1349
  ]
1350
1350
  },
@@ -1366,7 +1366,7 @@ var APPLICATIONS = {
1366
1366
  "socialize.topolo.app"
1367
1367
  ],
1368
1368
  "routes": [],
1369
- "serviceId": "socialize"
1369
+ "appId": "socialize"
1370
1370
  },
1371
1371
  {
1372
1372
  "name": "topolo-socialize-api",
@@ -1376,7 +1376,7 @@ var APPLICATIONS = {
1376
1376
  "socialize-api.topolo.app"
1377
1377
  ],
1378
1378
  "routes": [],
1379
- "serviceId": null
1379
+ "appId": null
1380
1380
  },
1381
1381
  {
1382
1382
  "name": "topolo-socialize-scheduler",
@@ -1384,7 +1384,7 @@ var APPLICATIONS = {
1384
1384
  "apiUrl": null,
1385
1385
  "domains": [],
1386
1386
  "routes": [],
1387
- "serviceId": null
1387
+ "appId": null
1388
1388
  }
1389
1389
  ]
1390
1390
  },
@@ -1406,7 +1406,7 @@ var APPLICATIONS = {
1406
1406
  "spaces.topolo.app"
1407
1407
  ],
1408
1408
  "routes": [],
1409
- "serviceId": "spaces"
1409
+ "appId": "spaces"
1410
1410
  },
1411
1411
  {
1412
1412
  "name": "topolo-spaces-api",
@@ -1414,7 +1414,7 @@ var APPLICATIONS = {
1414
1414
  "apiUrl": null,
1415
1415
  "domains": [],
1416
1416
  "routes": [],
1417
- "serviceId": null
1417
+ "appId": null
1418
1418
  }
1419
1419
  ]
1420
1420
  },
@@ -1436,7 +1436,7 @@ var APPLICATIONS = {
1436
1436
  "status.topolo.app"
1437
1437
  ],
1438
1438
  "routes": [],
1439
- "serviceId": "status"
1439
+ "appId": "status"
1440
1440
  }
1441
1441
  ]
1442
1442
  },
@@ -1460,7 +1460,7 @@ var APPLICATIONS = {
1460
1460
  "routes": [
1461
1461
  "success.topolo.app"
1462
1462
  ],
1463
- "serviceId": "success"
1463
+ "appId": "success"
1464
1464
  },
1465
1465
  {
1466
1466
  "name": "topolo-success-api",
@@ -1468,7 +1468,7 @@ var APPLICATIONS = {
1468
1468
  "apiUrl": null,
1469
1469
  "domains": [],
1470
1470
  "routes": [],
1471
- "serviceId": null
1471
+ "appId": null
1472
1472
  }
1473
1473
  ]
1474
1474
  },
@@ -1492,7 +1492,7 @@ var APPLICATIONS = {
1492
1492
  "routes": [
1493
1493
  "support.topolo.app/*"
1494
1494
  ],
1495
- "serviceId": "support"
1495
+ "appId": "support"
1496
1496
  },
1497
1497
  {
1498
1498
  "name": "topolo-support-api",
@@ -1500,7 +1500,7 @@ var APPLICATIONS = {
1500
1500
  "apiUrl": null,
1501
1501
  "domains": [],
1502
1502
  "routes": [],
1503
- "serviceId": null
1503
+ "appId": null
1504
1504
  }
1505
1505
  ]
1506
1506
  },
@@ -1522,7 +1522,7 @@ var APPLICATIONS = {
1522
1522
  "survey.topolo.app"
1523
1523
  ],
1524
1524
  "routes": [],
1525
- "serviceId": "survey"
1525
+ "appId": "survey"
1526
1526
  },
1527
1527
  {
1528
1528
  "name": "topolo-survey-api",
@@ -1530,7 +1530,7 @@ var APPLICATIONS = {
1530
1530
  "apiUrl": null,
1531
1531
  "domains": [],
1532
1532
  "routes": [],
1533
- "serviceId": null
1533
+ "appId": null
1534
1534
  }
1535
1535
  ]
1536
1536
  },
@@ -1552,7 +1552,7 @@ var APPLICATIONS = {
1552
1552
  "voice.topolo.app"
1553
1553
  ],
1554
1554
  "routes": [],
1555
- "serviceId": "voice"
1555
+ "appId": "voice"
1556
1556
  },
1557
1557
  {
1558
1558
  "name": "topolo-voice-api",
@@ -1560,7 +1560,7 @@ var APPLICATIONS = {
1560
1560
  "apiUrl": null,
1561
1561
  "domains": [],
1562
1562
  "routes": [],
1563
- "serviceId": null
1563
+ "appId": null
1564
1564
  }
1565
1565
  ]
1566
1566
  },
@@ -1580,7 +1580,7 @@ var APPLICATIONS = {
1580
1580
  "apiUrl": null,
1581
1581
  "domains": [],
1582
1582
  "routes": [],
1583
- "serviceId": null
1583
+ "appId": null
1584
1584
  },
1585
1585
  {
1586
1586
  "name": "topolo-web-runtime",
@@ -1593,7 +1593,7 @@ var APPLICATIONS = {
1593
1593
  "*.sites.topolo.app/*",
1594
1594
  "sites.topolo.app"
1595
1595
  ],
1596
- "serviceId": null
1596
+ "appId": null
1597
1597
  },
1598
1598
  {
1599
1599
  "name": "topolo-web-studio",
@@ -1603,7 +1603,7 @@ var APPLICATIONS = {
1603
1603
  "web.topolo.app"
1604
1604
  ],
1605
1605
  "routes": [],
1606
- "serviceId": "web"
1606
+ "appId": "web"
1607
1607
  }
1608
1608
  ]
1609
1609
  }
@@ -1805,7 +1805,7 @@ function applicationRequirementScopes(application) {
1805
1805
  const hasBrowserSurface = Boolean(application.productionUrl) || // String() keeps this guard valid after the Pages->Worker migration narrowed
1806
1806
  // the generated kind union to "worker" (no "pages" literal remains).
1807
1807
  application.deployTargets.some((target) => String(target.kind) === "pages");
1808
- const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.serviceId));
1808
+ const hasApiSurface = application.services.length > 0 || application.deployTargets.some((target) => Boolean(target.appId));
1809
1809
  if (hasBrowserSurface) scopes.add("browser");
1810
1810
  if (hasApiSurface) scopes.add("api");
1811
1811
  if (appId === "cli" || appId === "mcp" || appId === "cloudcontrol") {
@@ -2012,7 +2012,7 @@ function resolveServiceUrl(service, overrides) {
2012
2012
  return DEFAULT_SERVICE_URLS[service];
2013
2013
  }
2014
2014
  function catalogServiceKeyCandidates(entry, preferred) {
2015
- const values = [preferred, entry.slug, entry.name, entry.serviceId].filter(
2015
+ const values = [preferred, entry.slug, entry.name, entry.appId].filter(
2016
2016
  (value) => typeof value === "string" && value.trim().length > 0
2017
2017
  );
2018
2018
  const keys = /* @__PURE__ */ new Set();
@@ -2064,7 +2064,7 @@ var TopoloClient = class _TopoloClient {
2064
2064
  credential;
2065
2065
  agent;
2066
2066
  serviceUrls;
2067
- serviceIds;
2067
+ appIds;
2068
2068
  requireConfirmForWrites;
2069
2069
  timeoutMs;
2070
2070
  fetchImpl;
@@ -2072,18 +2072,18 @@ var TopoloClient = class _TopoloClient {
2072
2072
  serviceCatalogCache = null;
2073
2073
  actionCatalogCache = null;
2074
2074
  /**
2075
- * Process-wide cache for slug → service-id lookups. Keyed by
2075
+ * Process-wide cache for slug → app-id lookups. Keyed by
2076
2076
  * `${authBaseUrl}|${slug}` so multiple `TopoloClient` instances pointing at
2077
2077
  * the same Auth share, but staging vs prod don't poison each other.
2078
- * Cleared via `TopoloClient.clearServiceIdCache()` if a test needs it.
2078
+ * Cleared via `TopoloClient.clearAppIdCache()` if a test needs it.
2079
2079
  */
2080
- static serviceIdCache = /* @__PURE__ */ new Map();
2080
+ static appIdCache = /* @__PURE__ */ new Map();
2081
2081
  /**
2082
- * Drop the slug→service-id cache. Test-only — production callers should
2082
+ * Drop the slug→app-id cache. Test-only — production callers should
2083
2083
  * let the 5-minute TTL expire naturally.
2084
2084
  */
2085
- static clearServiceIdCache() {
2086
- _TopoloClient.serviceIdCache.clear();
2085
+ static clearAppIdCache() {
2086
+ _TopoloClient.appIdCache.clear();
2087
2087
  }
2088
2088
  constructor(options) {
2089
2089
  if (!options.credential) throw new TopoloAuthError("credential is required");
@@ -2091,7 +2091,7 @@ var TopoloClient = class _TopoloClient {
2091
2091
  this.credential = options.credential;
2092
2092
  this.agent = options.agent;
2093
2093
  this.serviceUrls = options.serviceUrls;
2094
- this.serviceIds = options.serviceIds;
2094
+ this.appIds = options.appIds;
2095
2095
  this.requireConfirmForWrites = options.requireConfirmForWrites !== false;
2096
2096
  this.timeoutMs = options.timeoutMs ?? 3e4;
2097
2097
  this.fetchImpl = options.fetch ?? fetch;
@@ -2127,8 +2127,8 @@ var TopoloClient = class _TopoloClient {
2127
2127
  const headers = new Headers();
2128
2128
  headers.set("Accept", "application/json");
2129
2129
  if (opts.body !== void 0) headers.set("Content-Type", "application/json");
2130
- const platformServiceId = resolveConfiguredServiceId(resolvedService.serviceKey, this.serviceIds);
2131
- if (platformServiceId) headers.set("X-Service-ID", platformServiceId);
2130
+ const platformAppId = resolveConfiguredAppId(resolvedService.serviceKey, this.appIds);
2131
+ if (platformAppId) headers.set("X-App-ID", platformAppId);
2132
2132
  applyAuthHeaders(headers, this.credential);
2133
2133
  const requestId = generateRequestId();
2134
2134
  applyAuditHeaders(headers, this.agent, requestId);
@@ -2248,7 +2248,7 @@ var TopoloClient = class _TopoloClient {
2248
2248
  return baseUrl ? { serviceKey, baseUrl } : null;
2249
2249
  }
2250
2250
  /**
2251
- * Resolve a service-slug → opaque service-id via caller config or TopoloAuth.
2251
+ * Resolve a service-slug → opaque app-id via caller config or TopoloAuth.
2252
2252
  *
2253
2253
  * Cache: 5 minutes per process per `(slug, auth_base_url)`. Negative
2254
2254
  * results (404) are cached for 60s so a typo doesn't hot-loop the
@@ -2259,16 +2259,16 @@ var TopoloClient = class _TopoloClient {
2259
2259
  * This keeps the resolver usable during early bootstrap before a caller
2260
2260
  * has acquired an access token.
2261
2261
  */
2262
- async getServiceIdBySlug(slug) {
2262
+ async getAppIdBySlug(slug) {
2263
2263
  if (typeof slug !== "string") return null;
2264
2264
  const normalized = slug.trim().toLowerCase();
2265
2265
  if (!normalized) return null;
2266
- const configuredServiceId = resolveConfiguredServiceId(normalized, this.serviceIds);
2267
- if (configuredServiceId) return configuredServiceId;
2266
+ const configuredAppId = resolveConfiguredAppId(normalized, this.appIds);
2267
+ if (configuredAppId) return configuredAppId;
2268
2268
  const authBase = resolveServiceUrl("developers", this.serviceUrls);
2269
2269
  const cacheKey = `${authBase}|${normalized}`;
2270
2270
  const now = Date.now();
2271
- const cached = _TopoloClient.serviceIdCache.get(cacheKey);
2271
+ const cached = _TopoloClient.appIdCache.get(cacheKey);
2272
2272
  if (cached && cached.expiresAt > now) {
2273
2273
  return cached.value;
2274
2274
  }
@@ -2286,7 +2286,7 @@ var TopoloClient = class _TopoloClient {
2286
2286
  return null;
2287
2287
  }
2288
2288
  if (res.status === 404) {
2289
- _TopoloClient.serviceIdCache.set(cacheKey, {
2289
+ _TopoloClient.appIdCache.set(cacheKey, {
2290
2290
  value: null,
2291
2291
  expiresAt: now + NEGATIVE_CACHE_TTL_MS
2292
2292
  });
@@ -2296,9 +2296,9 @@ var TopoloClient = class _TopoloClient {
2296
2296
  return null;
2297
2297
  }
2298
2298
  const body = await res.json().catch(() => null);
2299
- const serviceId = body?.data?.service_id;
2300
- const value = typeof serviceId === "string" && serviceId ? serviceId : null;
2301
- _TopoloClient.serviceIdCache.set(cacheKey, {
2299
+ const appId = body?.data?.app_id;
2300
+ const value = typeof appId === "string" && appId ? appId : null;
2301
+ _TopoloClient.appIdCache.set(cacheKey, {
2302
2302
  value,
2303
2303
  expiresAt: now + POSITIVE_CACHE_TTL_MS
2304
2304
  });
@@ -2330,8 +2330,8 @@ var TopoloClient = class _TopoloClient {
2330
2330
  const entries = [];
2331
2331
  for (const item of raw) {
2332
2332
  const s = item;
2333
- const serviceId = typeof s.service_id === "string" ? s.service_id : typeof s.id === "string" ? s.id : null;
2334
- if (!serviceId) continue;
2333
+ const appId = typeof s.app_id === "string" ? s.app_id : typeof s.id === "string" ? s.id : null;
2334
+ if (!appId) continue;
2335
2335
  const permissions = Array.isArray(s.granted_permissions) ? s.granted_permissions.filter((permission) => typeof permission === "string" && permission.trim().length > 0) : [];
2336
2336
  const catalogApiKeyResources = normalizeApiKeyResourceMetadataList(
2337
2337
  s.api_key_resources ?? s.apiKeyResources
@@ -2339,7 +2339,7 @@ var TopoloClient = class _TopoloClient {
2339
2339
  const apiKeyResource = normalizeApiKeyResourceMetadata(s.api_key_resource ?? s.apiKeyResource) ?? catalogApiKeyResources[0] ?? null;
2340
2340
  const apiKeyResources = catalogApiKeyResources.length > 0 ? catalogApiKeyResources : apiKeyResource ? [apiKeyResource] : [];
2341
2341
  entries.push({
2342
- serviceId,
2342
+ appId,
2343
2343
  slug: typeof s.app_slug === "string" ? s.app_slug : null,
2344
2344
  name: typeof s.name === "string" ? s.name : null,
2345
2345
  description: typeof s.description === "string" ? s.description : null,
@@ -2360,8 +2360,9 @@ var TopoloClient = class _TopoloClient {
2360
2360
  return entries;
2361
2361
  }
2362
2362
  /**
2363
- * List callable actions from the live Auth catalog. The response is scoped to
2364
- * the caller's organization and effective permissions; no bundled/static app
2363
+ * List callable actions from the live registry-canonical catalog (definitions
2364
+ * from the Catalog registry, scoping from Auth). The response is scoped to the
2365
+ * caller's organization and effective permissions; no bundled/static app
2365
2366
  * action list is used as an authorization source.
2366
2367
  */
2367
2368
  async listActions(options = {}) {
@@ -2370,7 +2371,7 @@ var TopoloClient = class _TopoloClient {
2370
2371
  return this.actionCatalogCache.entries;
2371
2372
  }
2372
2373
  const res = await this.request({
2373
- service: "auth",
2374
+ service: "developers",
2374
2375
  method: "GET",
2375
2376
  path: "/api/actions/catalog",
2376
2377
  ...options.service ? { query: { service: options.service } } : {}
@@ -2406,7 +2407,7 @@ var TopoloClient = class _TopoloClient {
2406
2407
  async callAction(action, input = {}, options = {}) {
2407
2408
  const entry = await this.getAction(action);
2408
2409
  const mapped = mapActionInput(entry, input);
2409
- const service = entry.serviceSlug || entry.serviceId;
2410
+ const service = entry.serviceSlug || entry.appId;
2410
2411
  return this.request({
2411
2412
  service,
2412
2413
  method: entry.method,
@@ -2427,7 +2428,7 @@ var TopoloClient = class _TopoloClient {
2427
2428
  listBundledServices() {
2428
2429
  const apps = Object.values(APPLICATIONS);
2429
2430
  return apps.map((app) => ({
2430
- serviceId: app.id,
2431
+ appId: app.id,
2431
2432
  slug: app.id,
2432
2433
  name: app.name ?? app.id,
2433
2434
  description: null,
@@ -2477,11 +2478,11 @@ var TopoloClient = class _TopoloClient {
2477
2478
  };
2478
2479
  }
2479
2480
  };
2480
- function resolveConfiguredServiceId(slug, serviceIds) {
2481
+ function resolveConfiguredAppId(slug, appIds) {
2481
2482
  for (const serviceKey of serviceKeyCandidates2(slug)) {
2482
- const configured = serviceIds?.[serviceKey];
2483
+ const configured = appIds?.[serviceKey];
2483
2484
  if (typeof configured === "string" && configured.trim()) return configured.trim();
2484
- const envKey = `TOPOLO_SERVICE_ID_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
2485
+ const envKey = `TOPOLO_APP_ID_${serviceKey.replace(/\./g, "_").toUpperCase()}`;
2485
2486
  const envValue = typeof process !== "undefined" ? process.env?.[envKey] : void 0;
2486
2487
  if (typeof envValue === "string" && envValue.trim()) return envValue.trim();
2487
2488
  }
@@ -2565,7 +2566,7 @@ function catalogEntryMatches(entry, needle) {
2565
2566
  return catalogEntryLookupKeys(entry).includes(needle);
2566
2567
  }
2567
2568
  function catalogEntryLookupKeys(entry) {
2568
- const values = [entry.serviceId, entry.slug, entry.name].filter((value) => typeof value === "string" && value.trim().length > 0);
2569
+ const values = [entry.appId, entry.slug, entry.name].filter((value) => typeof value === "string" && value.trim().length > 0);
2569
2570
  const keys = /* @__PURE__ */ new Set();
2570
2571
  for (const value of values) {
2571
2572
  const normalized = normalizeLookupKey(value);
@@ -2581,10 +2582,10 @@ function normalizeActionCatalogEntry(item) {
2581
2582
  const a = item;
2582
2583
  const actionId = pickActionString(a.action_id) ?? pickActionString(a.actionId);
2583
2584
  const name = pickActionString(a.name);
2584
- const serviceId = pickActionString(a.service_id) ?? pickActionString(a.serviceId);
2585
+ const appId = pickActionString(a.app_id) ?? pickActionString(a.appId);
2585
2586
  const method = pickActionString(a.method)?.toUpperCase();
2586
2587
  const path = pickActionString(a.path);
2587
- if (!actionId || !name || !serviceId || !method || !path || !isHttpMethod(method)) {
2588
+ if (!actionId || !name || !appId || !method || !path || !isHttpMethod(method)) {
2588
2589
  return null;
2589
2590
  }
2590
2591
  return {
@@ -2593,7 +2594,7 @@ function normalizeActionCatalogEntry(item) {
2593
2594
  toolName: pickActionString(a.tool_name) ?? pickActionString(a.toolName) ?? null,
2594
2595
  title: pickActionString(a.title) ?? name,
2595
2596
  description: pickActionString(a.description) ?? "",
2596
- serviceId,
2597
+ appId,
2597
2598
  serviceSlug: pickActionString(a.service_slug) ?? pickActionString(a.serviceSlug) ?? null,
2598
2599
  serviceName: pickActionString(a.service_name) ?? pickActionString(a.serviceName) ?? null,
2599
2600
  method,
@@ -2605,6 +2606,7 @@ function normalizeActionCatalogEntry(item) {
2605
2606
  readOnly: Boolean(a.read_only ?? a.readOnly),
2606
2607
  destructive: Boolean(a.destructive),
2607
2608
  requiresConfirmation: Boolean(a.requires_confirmation ?? a.requiresConfirmation),
2609
+ agentAccess: pickAgentAccess(a.agent_access ?? a.agentAccess),
2608
2610
  status: pickActionString(a.status),
2609
2611
  sourceRevision: pickActionString(a.source_revision) ?? pickActionString(a.sourceRevision)
2610
2612
  };
@@ -2615,6 +2617,9 @@ function isHttpMethod(value) {
2615
2617
  function pickActionString(value) {
2616
2618
  return typeof value === "string" && value.trim() ? value.trim() : null;
2617
2619
  }
2620
+ function pickAgentAccess(value) {
2621
+ return value === "auto" || value === "confirm" || value === "off" ? value : null;
2622
+ }
2618
2623
  function plainObject(value) {
2619
2624
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
2620
2625
  }
@@ -2706,7 +2711,6 @@ var CrmModule = class {
2706
2711
  constructor(client) {
2707
2712
  this.client = client;
2708
2713
  }
2709
- client;
2710
2714
  async listContacts(options = {}) {
2711
2715
  const res = await this.client.request({
2712
2716
  service: "crm",
@@ -2752,7 +2756,6 @@ var IdentityModule = class {
2752
2756
  constructor(client) {
2753
2757
  this.client = client;
2754
2758
  }
2755
- client;
2756
2759
  /** Returns the resolved user, organization, and permission set for the
2757
2760
  * current credential. Equivalent to `TopoloClient.introspect()` — exposed
2758
2761
  * on this module for symmetry with the other domain modules. */
@@ -2803,13 +2806,13 @@ function hasScope(set, required) {
2803
2806
  if (set.permissions.includes("*")) return true;
2804
2807
  const [servicePart, actionPart] = splitPermission(required);
2805
2808
  if (!servicePart) return set.permissions.includes(required);
2806
- const [serviceId, resource] = splitService(servicePart);
2809
+ const [appId, resource] = splitService(servicePart);
2807
2810
  const candidates = new Set([
2808
2811
  required,
2809
2812
  "*",
2810
- serviceId ? `${serviceId}.*` : null,
2811
- serviceId && resource && actionPart ? `${serviceId}.${resource}:*` : null,
2812
- serviceId && resource && actionPart ? `${serviceId}.${resource}.${actionPart}` : null,
2813
+ appId ? `${appId}.*` : null,
2814
+ appId && resource && actionPart ? `${appId}.${resource}:*` : null,
2815
+ appId && resource && actionPart ? `${appId}.${resource}.${actionPart}` : null,
2813
2816
  resource && actionPart ? `${resource}:*` : null,
2814
2817
  resource && actionPart ? `${resource}.${actionPart}` : null,
2815
2818
  resource && actionPart ? `${resource}:${actionPart}` : null
@@ -2861,10 +2864,10 @@ var TOOLS = [
2861
2864
  },
2862
2865
  handler: async (topolo) => {
2863
2866
  const services = (await topolo.client.listServices()).map((entry) => {
2864
- const id = displayServiceId(entry);
2867
+ const id = displayAppId(entry);
2865
2868
  return {
2866
2869
  id,
2867
- serviceId: entry.serviceId,
2870
+ appId: entry.appId,
2868
2871
  slug: entry.slug,
2869
2872
  name: entry.name,
2870
2873
  apiBaseUrl: entry.apiBaseUrl,
@@ -2891,7 +2894,7 @@ var TOOLS = [
2891
2894
  properties: {
2892
2895
  service: {
2893
2896
  type: "string",
2894
- description: "Optional service id, slug, or name filter."
2897
+ description: "Optional app id, slug, or name filter."
2895
2898
  }
2896
2899
  },
2897
2900
  additionalProperties: false
@@ -2920,7 +2923,7 @@ var TOOLS = [
2920
2923
  {
2921
2924
  name: "topolo_get_application",
2922
2925
  title: "Describe one Topolo platform application",
2923
- description: "Returns one live application catalog entry (service id, slug, name, API URL, launch URL, status). Accepts the service id, slug, or name. Resolved against the live registry so newly-registered apps work without a client rebuild.",
2926
+ description: "Returns one live application catalog entry (app id, slug, name, API URL, launch URL, status). Accepts the app id, slug, or name. Resolved against the live registry so newly-registered apps work without a client rebuild.",
2924
2927
  requiredScopes: [],
2925
2928
  destructive: false,
2926
2929
  inputSchema: {
@@ -2928,7 +2931,7 @@ var TOOLS = [
2928
2931
  properties: {
2929
2932
  application: {
2930
2933
  type: "string",
2931
- description: "Application identifier: service id, slug, or name from topolo_list_applications."
2934
+ description: "Application identifier: app id, slug, or name from topolo_list_applications."
2932
2935
  }
2933
2936
  },
2934
2937
  required: ["application"],
@@ -2942,10 +2945,10 @@ var TOOLS = [
2942
2945
  const needle = application.trim().toLowerCase();
2943
2946
  const catalog = await topolo.client.listServices();
2944
2947
  const match = catalog.find(
2945
- (e) => e.serviceId.toLowerCase() === needle || e.slug && e.slug.toLowerCase() === needle || e.name && e.name.toLowerCase() === needle
2948
+ (e) => e.appId.toLowerCase() === needle || e.slug && e.slug.toLowerCase() === needle || e.name && e.name.toLowerCase() === needle
2946
2949
  );
2947
2950
  if (!match) {
2948
- const known = catalog.map((e) => e.slug || e.serviceId).sort().filter((value) => typeof value === "string" && value.length > 0);
2951
+ const known = catalog.map((e) => e.slug || e.appId).sort().filter((value) => typeof value === "string" && value.length > 0);
2949
2952
  throw new Error(
2950
2953
  `Unknown application "${application}". ${formatKnownValues(known, "applications")}`
2951
2954
  );
@@ -3128,14 +3131,20 @@ async function buildTopoloTools(topolo, scopes, tools = TOOLS) {
3128
3131
  const actionTools = actionsToToolDefs(actions);
3129
3132
  return filterToolsByScopes([...baseTools, ...actionTools], scopes);
3130
3133
  }
3134
+ function effectiveAgentAccess(a) {
3135
+ if (a.agentAccess) return a.agentAccess;
3136
+ if (a.destructive) return "off";
3137
+ if (a.readOnly && !a.requiresConfirmation) return "auto";
3138
+ return "confirm";
3139
+ }
3131
3140
  function actionsToToolDefs(actions) {
3132
- return actions.map((action) => ({
3141
+ return actions.map((action) => ({ action, access: effectiveAgentAccess(action) })).filter(({ access }) => access !== "off").map(({ action, access }) => ({
3133
3142
  name: action.toolName || toolNameForAction(action),
3134
3143
  title: action.title,
3135
3144
  description: action.description,
3136
3145
  requiredScopes: action.requiredPermission ? [action.requiredPermission] : [],
3137
- destructive: action.destructive || action.requiresConfirmation || action.method !== "GET",
3138
- inputSchema: actionInputSchema(action),
3146
+ destructive: access === "confirm",
3147
+ inputSchema: actionInputSchema(action, access),
3139
3148
  handler: async (topolo, args) => {
3140
3149
  const confirm = Boolean(args["confirm"]);
3141
3150
  const input = { ...args };
@@ -3145,11 +3154,11 @@ function actionsToToolDefs(actions) {
3145
3154
  }));
3146
3155
  }
3147
3156
  function toolNameForAction(action) {
3148
- const service = (action.serviceSlug || action.serviceId || "service").replace(/^topolo-/, "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
3157
+ const service = (action.serviceSlug || action.appId || "service").replace(/^topolo-/, "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
3149
3158
  const name = action.name.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
3150
3159
  return ["topolo", service, name].filter(Boolean).join("_").slice(0, 96);
3151
3160
  }
3152
- function actionInputSchema(action) {
3161
+ function actionInputSchema(action, access = "auto") {
3153
3162
  const schema = {
3154
3163
  type: "object",
3155
3164
  properties: {},
@@ -3157,7 +3166,7 @@ function actionInputSchema(action) {
3157
3166
  ...action.inputSchema
3158
3167
  };
3159
3168
  const properties = schema.properties && typeof schema.properties === "object" && !Array.isArray(schema.properties) ? { ...schema.properties } : {};
3160
- if (action.requiresConfirmation || action.method !== "GET") {
3169
+ if (access === "confirm") {
3161
3170
  properties.confirm = {
3162
3171
  type: "boolean",
3163
3172
  description: "Required for mutating actions. Explicit human-in-the-loop acknowledgement."
@@ -3206,18 +3215,18 @@ function statusesAtOrWorse(threshold) {
3206
3215
  if (threshold === "needs_review") return ["missing", "needs_review"];
3207
3216
  return ["missing", "needs_review", "partial"];
3208
3217
  }
3209
- function displayServiceId(entry) {
3210
- for (const value of [entry.slug, entry.name, entry.serviceId]) {
3218
+ function displayAppId(entry) {
3219
+ for (const value of [entry.slug, entry.name, entry.appId]) {
3211
3220
  if (typeof value !== "string" || !value.trim()) continue;
3212
- for (const candidate of serviceIdCandidates(value)) {
3221
+ for (const candidate of appIdCandidates(value)) {
3213
3222
  if (Object.prototype.hasOwnProperty.call(DEFAULT_SERVICE_URLS, candidate)) {
3214
3223
  return candidate;
3215
3224
  }
3216
3225
  }
3217
3226
  }
3218
- return serviceIdCandidates(entry.slug || entry.serviceId)[0] || entry.serviceId;
3227
+ return appIdCandidates(entry.slug || entry.appId)[0] || entry.appId;
3219
3228
  }
3220
- function serviceIdCandidates(value) {
3229
+ function appIdCandidates(value) {
3221
3230
  const normalized = value.trim().toLowerCase().replace(/\s+/g, "-");
3222
3231
  const withoutTopolo = normalized.startsWith("topolo-") ? normalized.slice("topolo-".length) : normalized;
3223
3232
  return [.../* @__PURE__ */ new Set([