postgresai 0.15.0-dev.2 → 0.15.0-dev.4
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/bin/postgres-ai.ts +164 -49
- package/dist/bin/postgres-ai.js +736 -389
- package/lib/checkup.ts +16 -10
- package/lib/config.ts +3 -0
- package/lib/init.ts +1 -1
- package/lib/issues.ts +72 -72
- package/lib/reports.ts +12 -12
- package/lib/storage.ts +291 -0
- package/lib/util.ts +7 -1
- package/package.json +1 -1
- package/test/checkup.test.ts +28 -0
- package/test/init.test.ts +1 -1
- package/test/issues.cli.test.ts +230 -1
- package/test/mcp-server.test.ts +69 -0
- package/test/reports.cli.test.ts +84 -0
- package/test/reports.test.ts +3 -3
- package/test/storage.test.ts +761 -0
package/test/mcp-server.test.ts
CHANGED
|
@@ -75,6 +75,7 @@ describe("MCP Server", () => {
|
|
|
75
75
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
76
76
|
apiKey: null,
|
|
77
77
|
baseUrl: null,
|
|
78
|
+
storageBaseUrl: null,
|
|
78
79
|
orgId: null,
|
|
79
80
|
defaultProject: null,
|
|
80
81
|
projectName: null,
|
|
@@ -92,6 +93,7 @@ describe("MCP Server", () => {
|
|
|
92
93
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
93
94
|
apiKey: null,
|
|
94
95
|
baseUrl: null,
|
|
96
|
+
storageBaseUrl: null,
|
|
95
97
|
orgId: null,
|
|
96
98
|
defaultProject: null,
|
|
97
99
|
projectName: null,
|
|
@@ -121,6 +123,7 @@ describe("MCP Server", () => {
|
|
|
121
123
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
122
124
|
apiKey: "config-api-key",
|
|
123
125
|
baseUrl: null,
|
|
126
|
+
storageBaseUrl: null,
|
|
124
127
|
orgId: null,
|
|
125
128
|
defaultProject: null,
|
|
126
129
|
projectName: null,
|
|
@@ -151,6 +154,7 @@ describe("MCP Server", () => {
|
|
|
151
154
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
152
155
|
apiKey: null,
|
|
153
156
|
baseUrl: null,
|
|
157
|
+
storageBaseUrl: null,
|
|
154
158
|
orgId: null,
|
|
155
159
|
defaultProject: null,
|
|
156
160
|
projectName: null,
|
|
@@ -186,6 +190,7 @@ describe("MCP Server", () => {
|
|
|
186
190
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
187
191
|
apiKey: "test-key",
|
|
188
192
|
baseUrl: null,
|
|
193
|
+
storageBaseUrl: null,
|
|
189
194
|
orgId: null,
|
|
190
195
|
defaultProject: null,
|
|
191
196
|
projectName: null,
|
|
@@ -214,6 +219,7 @@ describe("MCP Server", () => {
|
|
|
214
219
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
215
220
|
apiKey: "test-key",
|
|
216
221
|
baseUrl: null,
|
|
222
|
+
storageBaseUrl: null,
|
|
217
223
|
orgId: null,
|
|
218
224
|
defaultProject: null,
|
|
219
225
|
projectName: null,
|
|
@@ -242,6 +248,7 @@ describe("MCP Server", () => {
|
|
|
242
248
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
243
249
|
apiKey: "test-key",
|
|
244
250
|
baseUrl: null,
|
|
251
|
+
storageBaseUrl: null,
|
|
245
252
|
orgId: null,
|
|
246
253
|
defaultProject: null,
|
|
247
254
|
projectName: null,
|
|
@@ -259,6 +266,7 @@ describe("MCP Server", () => {
|
|
|
259
266
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
260
267
|
apiKey: "test-key",
|
|
261
268
|
baseUrl: null,
|
|
269
|
+
storageBaseUrl: null,
|
|
262
270
|
orgId: null,
|
|
263
271
|
defaultProject: null,
|
|
264
272
|
projectName: null,
|
|
@@ -276,6 +284,7 @@ describe("MCP Server", () => {
|
|
|
276
284
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
277
285
|
apiKey: "test-key",
|
|
278
286
|
baseUrl: null,
|
|
287
|
+
storageBaseUrl: null,
|
|
279
288
|
orgId: null,
|
|
280
289
|
defaultProject: null,
|
|
281
290
|
projectName: null,
|
|
@@ -306,6 +315,7 @@ describe("MCP Server", () => {
|
|
|
306
315
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
307
316
|
apiKey: "test-key",
|
|
308
317
|
baseUrl: null,
|
|
318
|
+
storageBaseUrl: null,
|
|
309
319
|
orgId: null,
|
|
310
320
|
defaultProject: null,
|
|
311
321
|
projectName: null,
|
|
@@ -347,6 +357,7 @@ describe("MCP Server", () => {
|
|
|
347
357
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
348
358
|
apiKey: "test-key",
|
|
349
359
|
baseUrl: null,
|
|
360
|
+
storageBaseUrl: null,
|
|
350
361
|
orgId: null,
|
|
351
362
|
defaultProject: null,
|
|
352
363
|
projectName: null,
|
|
@@ -366,6 +377,7 @@ describe("MCP Server", () => {
|
|
|
366
377
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
367
378
|
apiKey: "test-key",
|
|
368
379
|
baseUrl: null,
|
|
380
|
+
storageBaseUrl: null,
|
|
369
381
|
orgId: null,
|
|
370
382
|
defaultProject: null,
|
|
371
383
|
projectName: null,
|
|
@@ -385,6 +397,7 @@ describe("MCP Server", () => {
|
|
|
385
397
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
386
398
|
apiKey: "test-key",
|
|
387
399
|
baseUrl: null,
|
|
400
|
+
storageBaseUrl: null,
|
|
388
401
|
orgId: null,
|
|
389
402
|
defaultProject: null,
|
|
390
403
|
projectName: null,
|
|
@@ -419,6 +432,7 @@ describe("MCP Server", () => {
|
|
|
419
432
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
420
433
|
apiKey: "test-key",
|
|
421
434
|
baseUrl: null,
|
|
435
|
+
storageBaseUrl: null,
|
|
422
436
|
orgId: null,
|
|
423
437
|
defaultProject: null,
|
|
424
438
|
projectName: null,
|
|
@@ -457,6 +471,7 @@ describe("MCP Server", () => {
|
|
|
457
471
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
458
472
|
apiKey: "test-key",
|
|
459
473
|
baseUrl: null,
|
|
474
|
+
storageBaseUrl: null,
|
|
460
475
|
orgId: 1,
|
|
461
476
|
defaultProject: null,
|
|
462
477
|
projectName: null,
|
|
@@ -474,6 +489,7 @@ describe("MCP Server", () => {
|
|
|
474
489
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
475
490
|
apiKey: "test-key",
|
|
476
491
|
baseUrl: null,
|
|
492
|
+
storageBaseUrl: null,
|
|
477
493
|
orgId: 1,
|
|
478
494
|
defaultProject: null,
|
|
479
495
|
projectName: null,
|
|
@@ -491,6 +507,7 @@ describe("MCP Server", () => {
|
|
|
491
507
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
492
508
|
apiKey: "test-key",
|
|
493
509
|
baseUrl: null,
|
|
510
|
+
storageBaseUrl: null,
|
|
494
511
|
orgId: null,
|
|
495
512
|
defaultProject: null,
|
|
496
513
|
projectName: null,
|
|
@@ -508,6 +525,7 @@ describe("MCP Server", () => {
|
|
|
508
525
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
509
526
|
apiKey: "test-key",
|
|
510
527
|
baseUrl: null,
|
|
528
|
+
storageBaseUrl: null,
|
|
511
529
|
orgId: 42,
|
|
512
530
|
defaultProject: null,
|
|
513
531
|
projectName: null,
|
|
@@ -537,6 +555,7 @@ describe("MCP Server", () => {
|
|
|
537
555
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
538
556
|
apiKey: "test-key",
|
|
539
557
|
baseUrl: null,
|
|
558
|
+
storageBaseUrl: null,
|
|
540
559
|
orgId: 1,
|
|
541
560
|
defaultProject: null,
|
|
542
561
|
projectName: null,
|
|
@@ -572,6 +591,7 @@ describe("MCP Server", () => {
|
|
|
572
591
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
573
592
|
apiKey: "test-key",
|
|
574
593
|
baseUrl: null,
|
|
594
|
+
storageBaseUrl: null,
|
|
575
595
|
orgId: null,
|
|
576
596
|
defaultProject: null,
|
|
577
597
|
projectName: null,
|
|
@@ -616,6 +636,7 @@ describe("MCP Server", () => {
|
|
|
616
636
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
617
637
|
apiKey: "test-key",
|
|
618
638
|
baseUrl: null,
|
|
639
|
+
storageBaseUrl: null,
|
|
619
640
|
orgId: null,
|
|
620
641
|
defaultProject: null,
|
|
621
642
|
projectName: null,
|
|
@@ -635,6 +656,7 @@ describe("MCP Server", () => {
|
|
|
635
656
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
636
657
|
apiKey: "test-key",
|
|
637
658
|
baseUrl: null,
|
|
659
|
+
storageBaseUrl: null,
|
|
638
660
|
orgId: null,
|
|
639
661
|
defaultProject: null,
|
|
640
662
|
projectName: null,
|
|
@@ -652,6 +674,7 @@ describe("MCP Server", () => {
|
|
|
652
674
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
653
675
|
apiKey: "test-key",
|
|
654
676
|
baseUrl: null,
|
|
677
|
+
storageBaseUrl: null,
|
|
655
678
|
orgId: null,
|
|
656
679
|
defaultProject: null,
|
|
657
680
|
projectName: null,
|
|
@@ -671,6 +694,7 @@ describe("MCP Server", () => {
|
|
|
671
694
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
672
695
|
apiKey: "test-key",
|
|
673
696
|
baseUrl: null,
|
|
697
|
+
storageBaseUrl: null,
|
|
674
698
|
orgId: null,
|
|
675
699
|
defaultProject: null,
|
|
676
700
|
projectName: null,
|
|
@@ -690,6 +714,7 @@ describe("MCP Server", () => {
|
|
|
690
714
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
691
715
|
apiKey: "test-key",
|
|
692
716
|
baseUrl: null,
|
|
717
|
+
storageBaseUrl: null,
|
|
693
718
|
orgId: null,
|
|
694
719
|
defaultProject: null,
|
|
695
720
|
projectName: null,
|
|
@@ -726,6 +751,7 @@ describe("MCP Server", () => {
|
|
|
726
751
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
727
752
|
apiKey: "test-key",
|
|
728
753
|
baseUrl: null,
|
|
754
|
+
storageBaseUrl: null,
|
|
729
755
|
orgId: null,
|
|
730
756
|
defaultProject: null,
|
|
731
757
|
projectName: null,
|
|
@@ -753,6 +779,7 @@ describe("MCP Server", () => {
|
|
|
753
779
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
754
780
|
apiKey: "test-key",
|
|
755
781
|
baseUrl: null,
|
|
782
|
+
storageBaseUrl: null,
|
|
756
783
|
orgId: null,
|
|
757
784
|
defaultProject: null,
|
|
758
785
|
projectName: null,
|
|
@@ -785,6 +812,7 @@ describe("MCP Server", () => {
|
|
|
785
812
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
786
813
|
apiKey: "test-key",
|
|
787
814
|
baseUrl: null,
|
|
815
|
+
storageBaseUrl: null,
|
|
788
816
|
orgId: null,
|
|
789
817
|
defaultProject: null,
|
|
790
818
|
projectName: null,
|
|
@@ -817,6 +845,7 @@ describe("MCP Server", () => {
|
|
|
817
845
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
818
846
|
apiKey: "test-key",
|
|
819
847
|
baseUrl: null,
|
|
848
|
+
storageBaseUrl: null,
|
|
820
849
|
orgId: null,
|
|
821
850
|
defaultProject: null,
|
|
822
851
|
projectName: null,
|
|
@@ -851,6 +880,7 @@ describe("MCP Server", () => {
|
|
|
851
880
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
852
881
|
apiKey: "test-key",
|
|
853
882
|
baseUrl: null,
|
|
883
|
+
storageBaseUrl: null,
|
|
854
884
|
orgId: null,
|
|
855
885
|
defaultProject: null,
|
|
856
886
|
projectName: null,
|
|
@@ -870,6 +900,7 @@ describe("MCP Server", () => {
|
|
|
870
900
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
871
901
|
apiKey: "test-key",
|
|
872
902
|
baseUrl: null,
|
|
903
|
+
storageBaseUrl: null,
|
|
873
904
|
orgId: null,
|
|
874
905
|
defaultProject: null,
|
|
875
906
|
projectName: null,
|
|
@@ -889,6 +920,7 @@ describe("MCP Server", () => {
|
|
|
889
920
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
890
921
|
apiKey: "test-key",
|
|
891
922
|
baseUrl: null,
|
|
923
|
+
storageBaseUrl: null,
|
|
892
924
|
orgId: null,
|
|
893
925
|
defaultProject: null,
|
|
894
926
|
projectName: null,
|
|
@@ -923,6 +955,7 @@ describe("MCP Server", () => {
|
|
|
923
955
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
924
956
|
apiKey: "test-key",
|
|
925
957
|
baseUrl: null,
|
|
958
|
+
storageBaseUrl: null,
|
|
926
959
|
orgId: null,
|
|
927
960
|
defaultProject: null,
|
|
928
961
|
projectName: null,
|
|
@@ -957,6 +990,7 @@ describe("MCP Server", () => {
|
|
|
957
990
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
958
991
|
apiKey: "test-key",
|
|
959
992
|
baseUrl: null,
|
|
993
|
+
storageBaseUrl: null,
|
|
960
994
|
orgId: null,
|
|
961
995
|
defaultProject: null,
|
|
962
996
|
projectName: null,
|
|
@@ -974,6 +1008,7 @@ describe("MCP Server", () => {
|
|
|
974
1008
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
975
1009
|
apiKey: "test-key",
|
|
976
1010
|
baseUrl: null,
|
|
1011
|
+
storageBaseUrl: null,
|
|
977
1012
|
orgId: null,
|
|
978
1013
|
defaultProject: null,
|
|
979
1014
|
projectName: null,
|
|
@@ -991,6 +1026,7 @@ describe("MCP Server", () => {
|
|
|
991
1026
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
992
1027
|
apiKey: "test-key",
|
|
993
1028
|
baseUrl: null,
|
|
1029
|
+
storageBaseUrl: null,
|
|
994
1030
|
orgId: null,
|
|
995
1031
|
defaultProject: null,
|
|
996
1032
|
projectName: null,
|
|
@@ -1008,6 +1044,7 @@ describe("MCP Server", () => {
|
|
|
1008
1044
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1009
1045
|
apiKey: "test-key",
|
|
1010
1046
|
baseUrl: null,
|
|
1047
|
+
storageBaseUrl: null,
|
|
1011
1048
|
orgId: null,
|
|
1012
1049
|
defaultProject: null,
|
|
1013
1050
|
projectName: null,
|
|
@@ -1025,6 +1062,7 @@ describe("MCP Server", () => {
|
|
|
1025
1062
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1026
1063
|
apiKey: "test-key",
|
|
1027
1064
|
baseUrl: null,
|
|
1065
|
+
storageBaseUrl: null,
|
|
1028
1066
|
orgId: null,
|
|
1029
1067
|
defaultProject: null,
|
|
1030
1068
|
projectName: null,
|
|
@@ -1063,6 +1101,7 @@ describe("MCP Server", () => {
|
|
|
1063
1101
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1064
1102
|
apiKey: "test-key",
|
|
1065
1103
|
baseUrl: null,
|
|
1104
|
+
storageBaseUrl: null,
|
|
1066
1105
|
orgId: null,
|
|
1067
1106
|
defaultProject: null,
|
|
1068
1107
|
projectName: null,
|
|
@@ -1098,6 +1137,7 @@ describe("MCP Server", () => {
|
|
|
1098
1137
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1099
1138
|
apiKey: "test-key",
|
|
1100
1139
|
baseUrl: null,
|
|
1140
|
+
storageBaseUrl: null,
|
|
1101
1141
|
orgId: null,
|
|
1102
1142
|
defaultProject: null,
|
|
1103
1143
|
projectName: null,
|
|
@@ -1133,6 +1173,7 @@ describe("MCP Server", () => {
|
|
|
1133
1173
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1134
1174
|
apiKey: "test-key",
|
|
1135
1175
|
baseUrl: null,
|
|
1176
|
+
storageBaseUrl: null,
|
|
1136
1177
|
orgId: null,
|
|
1137
1178
|
defaultProject: null,
|
|
1138
1179
|
projectName: null,
|
|
@@ -1150,6 +1191,7 @@ describe("MCP Server", () => {
|
|
|
1150
1191
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1151
1192
|
apiKey: "test-key",
|
|
1152
1193
|
baseUrl: null,
|
|
1194
|
+
storageBaseUrl: null,
|
|
1153
1195
|
orgId: null,
|
|
1154
1196
|
defaultProject: null,
|
|
1155
1197
|
projectName: null,
|
|
@@ -1172,6 +1214,7 @@ describe("MCP Server", () => {
|
|
|
1172
1214
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1173
1215
|
apiKey: "test-key",
|
|
1174
1216
|
baseUrl: null,
|
|
1217
|
+
storageBaseUrl: null,
|
|
1175
1218
|
orgId: null,
|
|
1176
1219
|
defaultProject: null,
|
|
1177
1220
|
projectName: null,
|
|
@@ -1202,6 +1245,7 @@ describe("MCP Server", () => {
|
|
|
1202
1245
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1203
1246
|
apiKey: "test-key",
|
|
1204
1247
|
baseUrl: null,
|
|
1248
|
+
storageBaseUrl: null,
|
|
1205
1249
|
orgId: null,
|
|
1206
1250
|
defaultProject: null,
|
|
1207
1251
|
projectName: null,
|
|
@@ -1221,6 +1265,7 @@ describe("MCP Server", () => {
|
|
|
1221
1265
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1222
1266
|
apiKey: "test-key",
|
|
1223
1267
|
baseUrl: null,
|
|
1268
|
+
storageBaseUrl: null,
|
|
1224
1269
|
orgId: null,
|
|
1225
1270
|
defaultProject: null,
|
|
1226
1271
|
projectName: null,
|
|
@@ -1240,6 +1285,7 @@ describe("MCP Server", () => {
|
|
|
1240
1285
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1241
1286
|
apiKey: "test-key",
|
|
1242
1287
|
baseUrl: null,
|
|
1288
|
+
storageBaseUrl: null,
|
|
1243
1289
|
orgId: null,
|
|
1244
1290
|
defaultProject: null,
|
|
1245
1291
|
projectName: null,
|
|
@@ -1276,6 +1322,7 @@ describe("MCP Server", () => {
|
|
|
1276
1322
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1277
1323
|
apiKey: "test-key",
|
|
1278
1324
|
baseUrl: null,
|
|
1325
|
+
storageBaseUrl: null,
|
|
1279
1326
|
orgId: null,
|
|
1280
1327
|
defaultProject: null,
|
|
1281
1328
|
projectName: null,
|
|
@@ -1318,6 +1365,7 @@ describe("MCP Server", () => {
|
|
|
1318
1365
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1319
1366
|
apiKey: "test-key",
|
|
1320
1367
|
baseUrl: null,
|
|
1368
|
+
storageBaseUrl: null,
|
|
1321
1369
|
orgId: null,
|
|
1322
1370
|
defaultProject: null,
|
|
1323
1371
|
projectName: null,
|
|
@@ -1356,6 +1404,7 @@ describe("MCP Server", () => {
|
|
|
1356
1404
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1357
1405
|
apiKey: "test-key",
|
|
1358
1406
|
baseUrl: null,
|
|
1407
|
+
storageBaseUrl: null,
|
|
1359
1408
|
orgId: null,
|
|
1360
1409
|
defaultProject: null,
|
|
1361
1410
|
projectName: null,
|
|
@@ -1375,6 +1424,7 @@ describe("MCP Server", () => {
|
|
|
1375
1424
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1376
1425
|
apiKey: "test-key",
|
|
1377
1426
|
baseUrl: null,
|
|
1427
|
+
storageBaseUrl: null,
|
|
1378
1428
|
orgId: null,
|
|
1379
1429
|
defaultProject: null,
|
|
1380
1430
|
projectName: null,
|
|
@@ -1394,6 +1444,7 @@ describe("MCP Server", () => {
|
|
|
1394
1444
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1395
1445
|
apiKey: "test-key",
|
|
1396
1446
|
baseUrl: null,
|
|
1447
|
+
storageBaseUrl: null,
|
|
1397
1448
|
orgId: null,
|
|
1398
1449
|
defaultProject: null,
|
|
1399
1450
|
projectName: null,
|
|
@@ -1413,6 +1464,7 @@ describe("MCP Server", () => {
|
|
|
1413
1464
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1414
1465
|
apiKey: "test-key",
|
|
1415
1466
|
baseUrl: null,
|
|
1467
|
+
storageBaseUrl: null,
|
|
1416
1468
|
orgId: null,
|
|
1417
1469
|
defaultProject: null,
|
|
1418
1470
|
projectName: null,
|
|
@@ -1446,6 +1498,7 @@ describe("MCP Server", () => {
|
|
|
1446
1498
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1447
1499
|
apiKey: "test-key",
|
|
1448
1500
|
baseUrl: null,
|
|
1501
|
+
storageBaseUrl: null,
|
|
1449
1502
|
orgId: null,
|
|
1450
1503
|
defaultProject: null,
|
|
1451
1504
|
projectName: null,
|
|
@@ -1478,6 +1531,7 @@ describe("MCP Server", () => {
|
|
|
1478
1531
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1479
1532
|
apiKey: "test-key",
|
|
1480
1533
|
baseUrl: null,
|
|
1534
|
+
storageBaseUrl: null,
|
|
1481
1535
|
orgId: null,
|
|
1482
1536
|
defaultProject: null,
|
|
1483
1537
|
projectName: null,
|
|
@@ -1517,6 +1571,7 @@ describe("MCP Server", () => {
|
|
|
1517
1571
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1518
1572
|
apiKey: "test-key",
|
|
1519
1573
|
baseUrl: null,
|
|
1574
|
+
storageBaseUrl: null,
|
|
1520
1575
|
orgId: null,
|
|
1521
1576
|
defaultProject: null,
|
|
1522
1577
|
projectName: null,
|
|
@@ -1540,6 +1595,7 @@ describe("MCP Server", () => {
|
|
|
1540
1595
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1541
1596
|
apiKey: "test-key",
|
|
1542
1597
|
baseUrl: null,
|
|
1598
|
+
storageBaseUrl: null,
|
|
1543
1599
|
orgId: null,
|
|
1544
1600
|
defaultProject: null,
|
|
1545
1601
|
projectName: null,
|
|
@@ -1568,6 +1624,7 @@ describe("MCP Server", () => {
|
|
|
1568
1624
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1569
1625
|
apiKey: "test-key",
|
|
1570
1626
|
baseUrl: null,
|
|
1627
|
+
storageBaseUrl: null,
|
|
1571
1628
|
orgId: null,
|
|
1572
1629
|
defaultProject: null,
|
|
1573
1630
|
projectName: null,
|
|
@@ -1601,6 +1658,7 @@ describe("MCP Server", () => {
|
|
|
1601
1658
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1602
1659
|
apiKey: "test-key",
|
|
1603
1660
|
baseUrl: null,
|
|
1661
|
+
storageBaseUrl: null,
|
|
1604
1662
|
orgId: null,
|
|
1605
1663
|
defaultProject: null,
|
|
1606
1664
|
projectName: null,
|
|
@@ -1627,6 +1685,7 @@ describe("MCP Server", () => {
|
|
|
1627
1685
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1628
1686
|
apiKey: "test-key",
|
|
1629
1687
|
baseUrl: null,
|
|
1688
|
+
storageBaseUrl: null,
|
|
1630
1689
|
orgId: null,
|
|
1631
1690
|
defaultProject: null,
|
|
1632
1691
|
projectName: null,
|
|
@@ -1656,6 +1715,7 @@ describe("MCP Server", () => {
|
|
|
1656
1715
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1657
1716
|
apiKey: "test-key",
|
|
1658
1717
|
baseUrl: null,
|
|
1718
|
+
storageBaseUrl: null,
|
|
1659
1719
|
orgId: null,
|
|
1660
1720
|
defaultProject: null,
|
|
1661
1721
|
projectName: null,
|
|
@@ -1692,6 +1752,7 @@ describe("MCP Server", () => {
|
|
|
1692
1752
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1693
1753
|
apiKey: "test-key",
|
|
1694
1754
|
baseUrl: null,
|
|
1755
|
+
storageBaseUrl: null,
|
|
1695
1756
|
orgId: null,
|
|
1696
1757
|
defaultProject: null,
|
|
1697
1758
|
projectName: null,
|
|
@@ -1713,6 +1774,7 @@ describe("MCP Server", () => {
|
|
|
1713
1774
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1714
1775
|
apiKey: "test-key",
|
|
1715
1776
|
baseUrl: null,
|
|
1777
|
+
storageBaseUrl: null,
|
|
1716
1778
|
orgId: null,
|
|
1717
1779
|
defaultProject: null,
|
|
1718
1780
|
projectName: null,
|
|
@@ -1750,6 +1812,7 @@ describe("MCP Server", () => {
|
|
|
1750
1812
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1751
1813
|
apiKey: "test-key",
|
|
1752
1814
|
baseUrl: null,
|
|
1815
|
+
storageBaseUrl: null,
|
|
1753
1816
|
orgId: null,
|
|
1754
1817
|
defaultProject: null,
|
|
1755
1818
|
projectName: null,
|
|
@@ -1788,6 +1851,7 @@ describe("MCP Server", () => {
|
|
|
1788
1851
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1789
1852
|
apiKey: "test-key",
|
|
1790
1853
|
baseUrl: null,
|
|
1854
|
+
storageBaseUrl: null,
|
|
1791
1855
|
orgId: null,
|
|
1792
1856
|
defaultProject: null,
|
|
1793
1857
|
projectName: null,
|
|
@@ -1816,6 +1880,7 @@ describe("MCP Server", () => {
|
|
|
1816
1880
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1817
1881
|
apiKey: "test-key",
|
|
1818
1882
|
baseUrl: null,
|
|
1883
|
+
storageBaseUrl: null,
|
|
1819
1884
|
orgId: null,
|
|
1820
1885
|
defaultProject: null,
|
|
1821
1886
|
projectName: null,
|
|
@@ -1860,6 +1925,7 @@ describe("MCP Server", () => {
|
|
|
1860
1925
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1861
1926
|
apiKey: "test-key",
|
|
1862
1927
|
baseUrl: null,
|
|
1928
|
+
storageBaseUrl: null,
|
|
1863
1929
|
orgId: null,
|
|
1864
1930
|
defaultProject: null,
|
|
1865
1931
|
projectName: null,
|
|
@@ -1891,6 +1957,7 @@ describe("MCP Server", () => {
|
|
|
1891
1957
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1892
1958
|
apiKey: "test-key",
|
|
1893
1959
|
baseUrl: null,
|
|
1960
|
+
storageBaseUrl: null,
|
|
1894
1961
|
orgId: null,
|
|
1895
1962
|
defaultProject: null,
|
|
1896
1963
|
projectName: null,
|
|
@@ -1926,6 +1993,7 @@ describe("MCP Server", () => {
|
|
|
1926
1993
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1927
1994
|
apiKey: "test-key",
|
|
1928
1995
|
baseUrl: null,
|
|
1996
|
+
storageBaseUrl: null,
|
|
1929
1997
|
orgId: 1,
|
|
1930
1998
|
defaultProject: null,
|
|
1931
1999
|
projectName: null,
|
|
@@ -1954,6 +2022,7 @@ describe("MCP Server", () => {
|
|
|
1954
2022
|
const readConfigSpy = spyOn(config, "readConfig").mockReturnValue({
|
|
1955
2023
|
apiKey: "test-key",
|
|
1956
2024
|
baseUrl: null,
|
|
2025
|
+
storageBaseUrl: null,
|
|
1957
2026
|
orgId: 1,
|
|
1958
2027
|
defaultProject: null,
|
|
1959
2028
|
projectName: null,
|
package/test/reports.cli.test.ts
CHANGED
|
@@ -299,6 +299,90 @@ describe("CLI reports command group", () => {
|
|
|
299
299
|
}
|
|
300
300
|
});
|
|
301
301
|
|
|
302
|
+
test("reports list --limit caps at 100", async () => {
|
|
303
|
+
const api = await startFakeApi();
|
|
304
|
+
try {
|
|
305
|
+
await runCliAsync(
|
|
306
|
+
["reports", "list", "--limit", "200"],
|
|
307
|
+
isolatedEnv({
|
|
308
|
+
PGAI_API_KEY: "test-key",
|
|
309
|
+
PGAI_API_BASE_URL: api.baseUrl,
|
|
310
|
+
})
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
const req = api.requests.find((x) =>
|
|
314
|
+
x.pathname.endsWith("/checkup_reports")
|
|
315
|
+
);
|
|
316
|
+
expect(req).toBeTruthy();
|
|
317
|
+
expect(req!.searchParams.limit).toBe("100");
|
|
318
|
+
} finally {
|
|
319
|
+
api.stop();
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
test("reports list --limit below cap passes through", async () => {
|
|
324
|
+
const api = await startFakeApi();
|
|
325
|
+
try {
|
|
326
|
+
await runCliAsync(
|
|
327
|
+
["reports", "list", "--limit", "50"],
|
|
328
|
+
isolatedEnv({
|
|
329
|
+
PGAI_API_KEY: "test-key",
|
|
330
|
+
PGAI_API_BASE_URL: api.baseUrl,
|
|
331
|
+
})
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
const req = api.requests.find((x) =>
|
|
335
|
+
x.pathname.endsWith("/checkup_reports")
|
|
336
|
+
);
|
|
337
|
+
expect(req).toBeTruthy();
|
|
338
|
+
expect(req!.searchParams.limit).toBe("50");
|
|
339
|
+
} finally {
|
|
340
|
+
api.stop();
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
test("reports list --limit with invalid value falls back to default", async () => {
|
|
345
|
+
const api = await startFakeApi();
|
|
346
|
+
try {
|
|
347
|
+
await runCliAsync(
|
|
348
|
+
["reports", "list", "--limit", "abc"],
|
|
349
|
+
isolatedEnv({
|
|
350
|
+
PGAI_API_KEY: "test-key",
|
|
351
|
+
PGAI_API_BASE_URL: api.baseUrl,
|
|
352
|
+
})
|
|
353
|
+
);
|
|
354
|
+
|
|
355
|
+
const req = api.requests.find((x) =>
|
|
356
|
+
x.pathname.endsWith("/checkup_reports")
|
|
357
|
+
);
|
|
358
|
+
expect(req).toBeTruthy();
|
|
359
|
+
expect(req!.searchParams.limit).toBe("20");
|
|
360
|
+
} finally {
|
|
361
|
+
api.stop();
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
test("reports list --limit with negative value clamps to 1", async () => {
|
|
366
|
+
const api = await startFakeApi();
|
|
367
|
+
try {
|
|
368
|
+
await runCliAsync(
|
|
369
|
+
["reports", "list", "--limit", "-5"],
|
|
370
|
+
isolatedEnv({
|
|
371
|
+
PGAI_API_KEY: "test-key",
|
|
372
|
+
PGAI_API_BASE_URL: api.baseUrl,
|
|
373
|
+
})
|
|
374
|
+
);
|
|
375
|
+
|
|
376
|
+
const req = api.requests.find((x) =>
|
|
377
|
+
x.pathname.endsWith("/checkup_reports")
|
|
378
|
+
);
|
|
379
|
+
expect(req).toBeTruthy();
|
|
380
|
+
expect(req!.searchParams.limit).toBe("1");
|
|
381
|
+
} finally {
|
|
382
|
+
api.stop();
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
|
|
302
386
|
test("reports files succeeds against a fake API", async () => {
|
|
303
387
|
const api = await startFakeApi();
|
|
304
388
|
try {
|
package/test/reports.test.ts
CHANGED
|
@@ -206,7 +206,7 @@ describe("fetchReports", () => {
|
|
|
206
206
|
});
|
|
207
207
|
|
|
208
208
|
test("logs debug info when debug is true", async () => {
|
|
209
|
-
const consoleSpy = spyOn(console, "
|
|
209
|
+
const consoleSpy = spyOn(console, "error").mockImplementation(() => {});
|
|
210
210
|
|
|
211
211
|
globalThis.fetch = mock(() =>
|
|
212
212
|
Promise.resolve(
|
|
@@ -578,7 +578,7 @@ describe("fetchReportFiles", () => {
|
|
|
578
578
|
});
|
|
579
579
|
|
|
580
580
|
test("logs debug info when debug is true", async () => {
|
|
581
|
-
const consoleSpy = spyOn(console, "
|
|
581
|
+
const consoleSpy = spyOn(console, "error").mockImplementation(() => {});
|
|
582
582
|
|
|
583
583
|
globalThis.fetch = mock(() =>
|
|
584
584
|
Promise.resolve(
|
|
@@ -796,7 +796,7 @@ describe("fetchReportFileData", () => {
|
|
|
796
796
|
});
|
|
797
797
|
|
|
798
798
|
test("logs debug info when debug is true", async () => {
|
|
799
|
-
const consoleSpy = spyOn(console, "
|
|
799
|
+
const consoleSpy = spyOn(console, "error").mockImplementation(() => {});
|
|
800
800
|
|
|
801
801
|
globalThis.fetch = mock(() =>
|
|
802
802
|
Promise.resolve(
|