@wjarka/cezarion 0.14.8-pr511.765 → 0.14.8-pr512.766
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.
|
@@ -16,10 +16,8 @@ const CONTROL_RE = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/gu;
|
|
|
16
16
|
* the cost of a false positive is two wasted prompts (bounded below), while the
|
|
17
17
|
* cost of a false negative is a dead run that needed a human Continue. Fatal
|
|
18
18
|
* prose like "context length exceeded" or "model not found" matches none of these.
|
|
19
|
-
* Cursor's explicit RetriableError includes stream-protocol failures (#508);
|
|
20
|
-
* the word boundary keeps NonRetriableError and unknown protocol errors fatal.
|
|
21
19
|
*/
|
|
22
|
-
const TRANSIENT_SIGNAL_RE = /\b(?:429|500|502|503|504|rate[ _-]?limit(?:ed)?|overloaded|temporar(?:y|ily)|timed?[ _-]?out|bad gateway|service unavailable|internal server error|connection (?:reset|refused|closed|error)|econn(?:reset|refused|aborted)|socket hang up|try again|retry
|
|
20
|
+
const TRANSIENT_SIGNAL_RE = /\b(?:429|500|502|503|504|rate[ _-]?limit(?:ed)?|overloaded|temporar(?:y|ily)|timed?[ _-]?out|bad gateway|service unavailable|internal server error|connection (?:reset|refused|closed|error)|econn(?:reset|refused|aborted)|socket hang up|try again|retry)\b/i;
|
|
23
21
|
/**
|
|
24
22
|
* Strip the envelope prefix, control characters and runs of whitespace. Uncapped — this is the
|
|
25
23
|
* form classification and limit parsing read, so a verbose envelope cannot bury its reset
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-provider-error.js","sourceRoot":"","sources":["../../src/core/cursor-provider-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;GAOG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAOnD,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,UAAU,GAAG,kDAAkD,CAAC;AAEtE
|
|
1
|
+
{"version":3,"file":"cursor-provider-error.js","sourceRoot":"","sources":["../../src/core/cursor-provider-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;GAOG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAOnD,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,UAAU,GAAG,kDAAkD,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,mBAAmB,GACvB,gQAAgQ,CAAC;AAEnQ;;;;GAIG;AACH,SAAS,2BAA2B,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACxE,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAChE,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -365,6 +365,18 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
365
365
|
} & {
|
|
366
366
|
"/:workerId": {
|
|
367
367
|
$get: {
|
|
368
|
+
output: {
|
|
369
|
+
error: string;
|
|
370
|
+
code?: "invalid_input" | undefined;
|
|
371
|
+
};
|
|
372
|
+
outputFormat: "json";
|
|
373
|
+
status: 400;
|
|
374
|
+
input: {
|
|
375
|
+
param: {
|
|
376
|
+
workerId: string;
|
|
377
|
+
};
|
|
378
|
+
};
|
|
379
|
+
} | {
|
|
368
380
|
output: {
|
|
369
381
|
workerId: string;
|
|
370
382
|
parentRunId: string;
|
|
@@ -441,7 +453,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
441
453
|
workerId: string;
|
|
442
454
|
};
|
|
443
455
|
};
|
|
444
|
-
}
|
|
456
|
+
};
|
|
457
|
+
};
|
|
458
|
+
} & {
|
|
459
|
+
"/:workerId/collect": {
|
|
460
|
+
$post: {
|
|
445
461
|
output: {
|
|
446
462
|
error: string;
|
|
447
463
|
code?: "invalid_input" | undefined;
|
|
@@ -452,12 +468,10 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
452
468
|
param: {
|
|
453
469
|
workerId: string;
|
|
454
470
|
};
|
|
471
|
+
} & {
|
|
472
|
+
json: Record<string, never>;
|
|
455
473
|
};
|
|
456
|
-
}
|
|
457
|
-
};
|
|
458
|
-
} & {
|
|
459
|
-
"/:workerId/collect": {
|
|
460
|
-
$post: {
|
|
474
|
+
} | {
|
|
461
475
|
output: {
|
|
462
476
|
workerId: string;
|
|
463
477
|
parentRunId: string;
|
|
@@ -559,7 +573,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
559
573
|
} & {
|
|
560
574
|
json: Record<string, never>;
|
|
561
575
|
};
|
|
562
|
-
}
|
|
576
|
+
};
|
|
577
|
+
};
|
|
578
|
+
} & {
|
|
579
|
+
"/:workerId/steer": {
|
|
580
|
+
$post: {
|
|
563
581
|
output: {
|
|
564
582
|
error: string;
|
|
565
583
|
code?: "invalid_input" | undefined;
|
|
@@ -571,13 +589,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
571
589
|
workerId: string;
|
|
572
590
|
};
|
|
573
591
|
} & {
|
|
574
|
-
json:
|
|
592
|
+
json: {
|
|
593
|
+
text: string;
|
|
594
|
+
};
|
|
575
595
|
};
|
|
576
|
-
}
|
|
577
|
-
};
|
|
578
|
-
} & {
|
|
579
|
-
"/:workerId/steer": {
|
|
580
|
-
$post: {
|
|
596
|
+
} | {
|
|
581
597
|
output: {
|
|
582
598
|
workerId: string;
|
|
583
599
|
state: "delivered" | "queued";
|
|
@@ -593,7 +609,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
593
609
|
text: string;
|
|
594
610
|
};
|
|
595
611
|
};
|
|
596
|
-
}
|
|
612
|
+
};
|
|
613
|
+
};
|
|
614
|
+
} & {
|
|
615
|
+
"/:workerId/stop": {
|
|
616
|
+
$post: {
|
|
597
617
|
output: {
|
|
598
618
|
error: string;
|
|
599
619
|
code?: "invalid_input" | undefined;
|
|
@@ -605,15 +625,9 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
605
625
|
workerId: string;
|
|
606
626
|
};
|
|
607
627
|
} & {
|
|
608
|
-
json:
|
|
609
|
-
text: string;
|
|
610
|
-
};
|
|
628
|
+
json: Record<string, never>;
|
|
611
629
|
};
|
|
612
|
-
}
|
|
613
|
-
};
|
|
614
|
-
} & {
|
|
615
|
-
"/:workerId/stop": {
|
|
616
|
-
$post: {
|
|
630
|
+
} | {
|
|
617
631
|
output: {
|
|
618
632
|
workerId: string;
|
|
619
633
|
state: "stopping" | "terminated";
|
|
@@ -627,7 +641,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
627
641
|
} & {
|
|
628
642
|
json: Record<string, never>;
|
|
629
643
|
};
|
|
630
|
-
}
|
|
644
|
+
};
|
|
645
|
+
};
|
|
646
|
+
} & {
|
|
647
|
+
"/:workerId/destroy": {
|
|
648
|
+
$post: {
|
|
631
649
|
output: {
|
|
632
650
|
error: string;
|
|
633
651
|
code?: "invalid_input" | undefined;
|
|
@@ -641,11 +659,7 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
641
659
|
} & {
|
|
642
660
|
json: Record<string, never>;
|
|
643
661
|
};
|
|
644
|
-
}
|
|
645
|
-
};
|
|
646
|
-
} & {
|
|
647
|
-
"/:workerId/destroy": {
|
|
648
|
-
$post: {
|
|
662
|
+
} | {
|
|
649
663
|
output: {
|
|
650
664
|
workerId: string;
|
|
651
665
|
state: "complete" | "incomplete";
|
|
@@ -668,20 +682,6 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
668
682
|
} & {
|
|
669
683
|
json: Record<string, never>;
|
|
670
684
|
};
|
|
671
|
-
} | {
|
|
672
|
-
output: {
|
|
673
|
-
error: string;
|
|
674
|
-
code?: "invalid_input" | undefined;
|
|
675
|
-
};
|
|
676
|
-
outputFormat: "json";
|
|
677
|
-
status: 400;
|
|
678
|
-
input: {
|
|
679
|
-
param: {
|
|
680
|
-
workerId: string;
|
|
681
|
-
};
|
|
682
|
-
} & {
|
|
683
|
-
json: Record<string, never>;
|
|
684
|
-
};
|
|
685
685
|
} | {
|
|
686
686
|
output: {
|
|
687
687
|
workerId: string;
|
|
@@ -711,13 +711,11 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
711
711
|
"/:workerId/diff": {
|
|
712
712
|
$get: {
|
|
713
713
|
output: {
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
diff: string;
|
|
717
|
-
truncated: boolean;
|
|
714
|
+
error: string;
|
|
715
|
+
code?: "invalid_input" | undefined;
|
|
718
716
|
};
|
|
719
717
|
outputFormat: "json";
|
|
720
|
-
status:
|
|
718
|
+
status: 400;
|
|
721
719
|
input: {
|
|
722
720
|
param: {
|
|
723
721
|
workerId: string;
|
|
@@ -725,11 +723,13 @@ export declare function createDelegationApp(routes: DelegationRoutes): import("h
|
|
|
725
723
|
};
|
|
726
724
|
} | {
|
|
727
725
|
output: {
|
|
728
|
-
|
|
729
|
-
|
|
726
|
+
workerId: string;
|
|
727
|
+
baselineSha: string;
|
|
728
|
+
diff: string;
|
|
729
|
+
truncated: boolean;
|
|
730
730
|
};
|
|
731
731
|
outputFormat: "json";
|
|
732
|
-
status:
|
|
732
|
+
status: 200;
|
|
733
733
|
input: {
|
|
734
734
|
param: {
|
|
735
735
|
workerId: string;
|
package/dist/server/server.d.ts
CHANGED
|
@@ -4181,19 +4181,6 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
4181
4181
|
} & {
|
|
4182
4182
|
"/repo/commit/:sha": {
|
|
4183
4183
|
$get: {
|
|
4184
|
-
output: string;
|
|
4185
|
-
outputFormat: "text";
|
|
4186
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
4187
|
-
input: {
|
|
4188
|
-
query: {
|
|
4189
|
-
structured?: string | undefined;
|
|
4190
|
-
};
|
|
4191
|
-
} & {
|
|
4192
|
-
param: {
|
|
4193
|
-
sha: string;
|
|
4194
|
-
};
|
|
4195
|
-
};
|
|
4196
|
-
} | {
|
|
4197
4184
|
output: {
|
|
4198
4185
|
error: string;
|
|
4199
4186
|
code?: "invalid_input" | undefined;
|
|
@@ -4257,6 +4244,19 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
4257
4244
|
sha: string;
|
|
4258
4245
|
};
|
|
4259
4246
|
};
|
|
4247
|
+
} | {
|
|
4248
|
+
output: string;
|
|
4249
|
+
outputFormat: "text";
|
|
4250
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
4251
|
+
input: {
|
|
4252
|
+
query: {
|
|
4253
|
+
structured?: string | undefined;
|
|
4254
|
+
};
|
|
4255
|
+
} & {
|
|
4256
|
+
param: {
|
|
4257
|
+
sha: string;
|
|
4258
|
+
};
|
|
4259
|
+
};
|
|
4260
4260
|
};
|
|
4261
4261
|
};
|
|
4262
4262
|
} & {
|
|
@@ -10990,20 +10990,20 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
10990
10990
|
} & {
|
|
10991
10991
|
"/runs/:id/handoff": {
|
|
10992
10992
|
$get: {
|
|
10993
|
-
output:
|
|
10994
|
-
|
|
10995
|
-
|
|
10993
|
+
output: {
|
|
10994
|
+
error: string;
|
|
10995
|
+
};
|
|
10996
|
+
outputFormat: "json";
|
|
10997
|
+
status: 404;
|
|
10996
10998
|
input: {
|
|
10997
10999
|
param: {
|
|
10998
11000
|
id: string;
|
|
10999
11001
|
};
|
|
11000
11002
|
};
|
|
11001
11003
|
} | {
|
|
11002
|
-
output:
|
|
11003
|
-
|
|
11004
|
-
|
|
11005
|
-
outputFormat: "json";
|
|
11006
|
-
status: 404;
|
|
11004
|
+
output: string;
|
|
11005
|
+
outputFormat: "text";
|
|
11006
|
+
status: 200;
|
|
11007
11007
|
input: {
|
|
11008
11008
|
param: {
|
|
11009
11009
|
id: string;
|
|
@@ -11041,20 +11041,20 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
11041
11041
|
} & {
|
|
11042
11042
|
"/runs/:id/diff": {
|
|
11043
11043
|
$get: {
|
|
11044
|
-
output:
|
|
11045
|
-
|
|
11046
|
-
|
|
11044
|
+
output: {
|
|
11045
|
+
error: string;
|
|
11046
|
+
};
|
|
11047
|
+
outputFormat: "json";
|
|
11048
|
+
status: 404;
|
|
11047
11049
|
input: {
|
|
11048
11050
|
param: {
|
|
11049
11051
|
id: string;
|
|
11050
11052
|
};
|
|
11051
11053
|
};
|
|
11052
11054
|
} | {
|
|
11053
|
-
output:
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
outputFormat: "json";
|
|
11057
|
-
status: 404;
|
|
11055
|
+
output: string;
|
|
11056
|
+
outputFormat: "text";
|
|
11057
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
11058
11058
|
input: {
|
|
11059
11059
|
param: {
|
|
11060
11060
|
id: string;
|
|
@@ -13587,19 +13587,6 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
13587
13587
|
} & {
|
|
13588
13588
|
"/repo/commit/:sha": {
|
|
13589
13589
|
$get: {
|
|
13590
|
-
output: string;
|
|
13591
|
-
outputFormat: "text";
|
|
13592
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
13593
|
-
input: {
|
|
13594
|
-
query: {
|
|
13595
|
-
structured?: string | undefined;
|
|
13596
|
-
};
|
|
13597
|
-
} & {
|
|
13598
|
-
param: {
|
|
13599
|
-
sha: string;
|
|
13600
|
-
};
|
|
13601
|
-
};
|
|
13602
|
-
} | {
|
|
13603
13590
|
output: {
|
|
13604
13591
|
error: string;
|
|
13605
13592
|
code?: "invalid_input" | undefined;
|
|
@@ -13663,6 +13650,19 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
13663
13650
|
sha: string;
|
|
13664
13651
|
};
|
|
13665
13652
|
};
|
|
13653
|
+
} | {
|
|
13654
|
+
output: string;
|
|
13655
|
+
outputFormat: "text";
|
|
13656
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
13657
|
+
input: {
|
|
13658
|
+
query: {
|
|
13659
|
+
structured?: string | undefined;
|
|
13660
|
+
};
|
|
13661
|
+
} & {
|
|
13662
|
+
param: {
|
|
13663
|
+
sha: string;
|
|
13664
|
+
};
|
|
13665
|
+
};
|
|
13666
13666
|
};
|
|
13667
13667
|
};
|
|
13668
13668
|
} & {
|
|
@@ -20396,20 +20396,20 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
20396
20396
|
} & {
|
|
20397
20397
|
"/runs/:id/handoff": {
|
|
20398
20398
|
$get: {
|
|
20399
|
-
output:
|
|
20400
|
-
|
|
20401
|
-
|
|
20399
|
+
output: {
|
|
20400
|
+
error: string;
|
|
20401
|
+
};
|
|
20402
|
+
outputFormat: "json";
|
|
20403
|
+
status: 404;
|
|
20402
20404
|
input: {
|
|
20403
20405
|
param: {
|
|
20404
20406
|
id: string;
|
|
20405
20407
|
};
|
|
20406
20408
|
};
|
|
20407
20409
|
} | {
|
|
20408
|
-
output:
|
|
20409
|
-
|
|
20410
|
-
|
|
20411
|
-
outputFormat: "json";
|
|
20412
|
-
status: 404;
|
|
20410
|
+
output: string;
|
|
20411
|
+
outputFormat: "text";
|
|
20412
|
+
status: 200;
|
|
20413
20413
|
input: {
|
|
20414
20414
|
param: {
|
|
20415
20415
|
id: string;
|
|
@@ -20447,20 +20447,20 @@ export declare function createApp(deps: ServerDeps): import("hono/hono-base").Ho
|
|
|
20447
20447
|
} & {
|
|
20448
20448
|
"/runs/:id/diff": {
|
|
20449
20449
|
$get: {
|
|
20450
|
-
output:
|
|
20451
|
-
|
|
20452
|
-
|
|
20450
|
+
output: {
|
|
20451
|
+
error: string;
|
|
20452
|
+
};
|
|
20453
|
+
outputFormat: "json";
|
|
20454
|
+
status: 404;
|
|
20453
20455
|
input: {
|
|
20454
20456
|
param: {
|
|
20455
20457
|
id: string;
|
|
20456
20458
|
};
|
|
20457
20459
|
};
|
|
20458
20460
|
} | {
|
|
20459
|
-
output:
|
|
20460
|
-
|
|
20461
|
-
|
|
20462
|
-
outputFormat: "json";
|
|
20463
|
-
status: 404;
|
|
20461
|
+
output: string;
|
|
20462
|
+
outputFormat: "text";
|
|
20463
|
+
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
20464
20464
|
input: {
|
|
20465
20465
|
param: {
|
|
20466
20466
|
id: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wjarka/cezarion",
|
|
3
|
-
"version": "0.14.8-
|
|
3
|
+
"version": "0.14.8-pr512.766",
|
|
4
4
|
"description": "Local cockpit for running and tracking AI agent tasks in your repo. Uses your logged-in `claude` CLI and `gh` — zero config, zero database.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"zod": "^4.4.3"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@open-mercato/cezar-api-client": "0.14.8-
|
|
55
|
-
"@open-mercato/cezar-contract": "0.14.8-
|
|
54
|
+
"@open-mercato/cezar-api-client": "0.14.8-pr512.766",
|
|
55
|
+
"@open-mercato/cezar-contract": "0.14.8-pr512.766",
|
|
56
56
|
"@types/node": "^20.14.0",
|
|
57
57
|
"@types/ws": "^8.18.1",
|
|
58
58
|
"esbuild": "^0.28.1",
|
|
@@ -34,9 +34,6 @@ async function prompt(id, content) {
|
|
|
34
34
|
if (input.includes('mock:rpc-error')) { emit({ id, error: { code: -32603, message: 'Provider rejected request' } }); return; }
|
|
35
35
|
// #443 provider-error envelopes: the specific scenarios must be matched BEFORE the
|
|
36
36
|
// bare 'mock:provider-error' prefix, which every one of them contains.
|
|
37
|
-
// #508: observed Cursor 2026.09.18-9a7762b error envelope, followed by end_turn.
|
|
38
|
-
if (input.includes('mock:provider-error-protocol') && (input.includes('-exhaust') || prompts === 1)) { text('\n\nError: RetriableError: [invalid_argument] protocol error: missing EndStreamResponse'); complete(id); return; }
|
|
39
|
-
if (input.includes('mock:provider-error-unknown-protocol')) { text('\n\nError: [invalid_argument] protocol error: unknown frame'); complete(id); return; }
|
|
40
37
|
if (input.includes('mock:provider-error-transient') && prompts === 1) { text('\n\nError: 502 bad gateway.'); complete(id); return; }
|
|
41
38
|
if (input.includes('mock:provider-error-bare')) { text('\n\nError: 502 bad gateway.'); complete(id); return; }
|
|
42
39
|
if (input.includes('mock:provider-error-instant-near') && prompts === 1) { text(`\n\nError: 429 rate limited, try again at ${new Date(Date.now() + 300).toISOString()}.`); complete(id); return; }
|