@ai-ecoverse/mcpcat 0.23.2 → 0.23.3
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/host/mcpcat.mjs +39 -23
- package/dist/kernel/mcpcat.mjs +39 -23
- package/package.json +1 -1
package/dist/host/mcpcat.mjs
CHANGED
|
@@ -12737,6 +12737,7 @@ function startHolder(platform2, options) {
|
|
|
12737
12737
|
var DIALOG_HOLD_MIN_VERSION = "1.39.0";
|
|
12738
12738
|
var DIALOG_ANSWER_MS = 7e3;
|
|
12739
12739
|
var DIALOG_CLAIM_MS = 1e3;
|
|
12740
|
+
var DIALOG_FAIL_FAST = 2;
|
|
12740
12741
|
var DIALOG_MODES = ["report", "dismiss", "accept"];
|
|
12741
12742
|
var LABEL2 = "mcpcat serve --webmcp";
|
|
12742
12743
|
var REFUSED = "playwright-cli refuses to answer it (protected, unverified or in a frame)";
|
|
@@ -12770,6 +12771,26 @@ function reporter(options) {
|
|
|
12770
12771
|
function answerProblem(event, answerMs) {
|
|
12771
12772
|
return event === "timeout" ? `playwright-cli dialog-hold did not answer within ${Math.round(answerMs / 1e3)}s` : `playwright-cli dialog-hold replied ${event}`;
|
|
12772
12773
|
}
|
|
12774
|
+
function latch() {
|
|
12775
|
+
let shut = false;
|
|
12776
|
+
let wait = Promise.resolve();
|
|
12777
|
+
let release = () => {
|
|
12778
|
+
};
|
|
12779
|
+
return {
|
|
12780
|
+
close() {
|
|
12781
|
+
if (shut) return;
|
|
12782
|
+
shut = true;
|
|
12783
|
+
wait = new Promise((resolve) => {
|
|
12784
|
+
release = () => {
|
|
12785
|
+
shut = false;
|
|
12786
|
+
resolve();
|
|
12787
|
+
};
|
|
12788
|
+
});
|
|
12789
|
+
},
|
|
12790
|
+
open: () => release(),
|
|
12791
|
+
wait: () => wait
|
|
12792
|
+
};
|
|
12793
|
+
}
|
|
12773
12794
|
var isId = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
|
|
12774
12795
|
function startDialogHolder(platform2, options) {
|
|
12775
12796
|
const verb = options.accept ? "dialog-accept" : "dialog-dismiss";
|
|
@@ -12779,6 +12800,8 @@ function startDialogHolder(platform2, options) {
|
|
|
12779
12800
|
let stopped = false;
|
|
12780
12801
|
let isReady = false;
|
|
12781
12802
|
let waitedOut = false;
|
|
12803
|
+
let failing = false;
|
|
12804
|
+
let failures = 0;
|
|
12782
12805
|
let armed = 0;
|
|
12783
12806
|
let current;
|
|
12784
12807
|
let nextId2 = 1;
|
|
@@ -12787,21 +12810,11 @@ function startDialogHolder(platform2, options) {
|
|
|
12787
12810
|
let delay = HOLDER_RESTART_MIN_MS;
|
|
12788
12811
|
let readyAt;
|
|
12789
12812
|
let restartTimer;
|
|
12790
|
-
|
|
12791
|
-
let pending = Promise.resolve();
|
|
12792
|
-
let settle = () => {
|
|
12793
|
-
};
|
|
12813
|
+
const gate = latch();
|
|
12794
12814
|
const unready = () => {
|
|
12795
12815
|
isReady = false;
|
|
12796
12816
|
waitedOut = false;
|
|
12797
|
-
|
|
12798
|
-
settled = false;
|
|
12799
|
-
pending = new Promise((resolve) => {
|
|
12800
|
-
settle = () => {
|
|
12801
|
-
settled = true;
|
|
12802
|
-
resolve();
|
|
12803
|
-
};
|
|
12804
|
-
});
|
|
12817
|
+
gate.close();
|
|
12805
12818
|
};
|
|
12806
12819
|
let exited = Promise.resolve();
|
|
12807
12820
|
const report = reporter(options);
|
|
@@ -12844,8 +12857,9 @@ function startDialogHolder(platform2, options) {
|
|
|
12844
12857
|
}
|
|
12845
12858
|
if (event.event === "ready") {
|
|
12846
12859
|
isReady = true;
|
|
12860
|
+
failing = false;
|
|
12847
12861
|
readyAt = Date.now();
|
|
12848
|
-
|
|
12862
|
+
gate.open();
|
|
12849
12863
|
} else if (event.event === "dialog-opened" && isId(event.dialogId)) {
|
|
12850
12864
|
current = { id: event.dialogId, armed: armed > 0 };
|
|
12851
12865
|
if (current.armed) answer(current);
|
|
@@ -12867,7 +12881,7 @@ function startDialogHolder(platform2, options) {
|
|
|
12867
12881
|
child = await platform2.spawn({ argv, dieWithParent: true });
|
|
12868
12882
|
} catch (err2) {
|
|
12869
12883
|
report(`cannot start playwright-cli dialog-hold: ${err2.message}`);
|
|
12870
|
-
scheduleRestart();
|
|
12884
|
+
scheduleRestart(false);
|
|
12871
12885
|
return;
|
|
12872
12886
|
}
|
|
12873
12887
|
if (stopped) {
|
|
@@ -12890,22 +12904,24 @@ function startDialogHolder(platform2, options) {
|
|
|
12890
12904
|
current = void 0;
|
|
12891
12905
|
reply?.resolve("holder-gone");
|
|
12892
12906
|
if (!stopped) unready();
|
|
12893
|
-
|
|
12894
|
-
|
|
12895
|
-
}
|
|
12907
|
+
const reached = readyAt !== void 0;
|
|
12908
|
+
if (reached && Date.now() - readyAt >= HOLDER_STABLE_MS) delay = HOLDER_RESTART_MIN_MS;
|
|
12896
12909
|
readyAt = void 0;
|
|
12897
12910
|
if (stopped) return;
|
|
12898
12911
|
const why = lastError ?? `exited ${result.status}`;
|
|
12899
12912
|
report(
|
|
12900
12913
|
`the dialog holder for tab ${options.tab} stopped (playwright-cli dialog-hold: ${why}); restarting in ${Math.ceil(delay / 1e3)}s`
|
|
12901
12914
|
);
|
|
12902
|
-
scheduleRestart();
|
|
12915
|
+
scheduleRestart(reached);
|
|
12903
12916
|
});
|
|
12904
12917
|
};
|
|
12905
|
-
const scheduleRestart = () => {
|
|
12918
|
+
const scheduleRestart = (reached) => {
|
|
12906
12919
|
if (stopped) return;
|
|
12907
12920
|
const wait = delay;
|
|
12908
12921
|
delay = Math.min(delay * 2, HOLDER_RESTART_MAX_MS);
|
|
12922
|
+
failures = reached ? 0 : failures + 1;
|
|
12923
|
+
failing = failures >= DIALOG_FAIL_FAST || wait >= options.readyTimeoutMs;
|
|
12924
|
+
if (failing) gate.open();
|
|
12909
12925
|
restartTimer = setTimeout(() => {
|
|
12910
12926
|
restartTimer = void 0;
|
|
12911
12927
|
if (!stopped) void spawn3();
|
|
@@ -12915,8 +12931,8 @@ function startDialogHolder(platform2, options) {
|
|
|
12915
12931
|
void spawn3();
|
|
12916
12932
|
return {
|
|
12917
12933
|
async ready() {
|
|
12918
|
-
if (waitedOut || isReady) return;
|
|
12919
|
-
if (!await within(
|
|
12934
|
+
if (failing || waitedOut || isReady) return;
|
|
12935
|
+
if (!await within(gate.wait(), options.readyTimeoutMs)) waitedOut = true;
|
|
12920
12936
|
},
|
|
12921
12937
|
attached: () => isReady,
|
|
12922
12938
|
open: () => current !== void 0,
|
|
@@ -12936,7 +12952,7 @@ function startDialogHolder(platform2, options) {
|
|
|
12936
12952
|
},
|
|
12937
12953
|
async stop() {
|
|
12938
12954
|
stopped = true;
|
|
12939
|
-
|
|
12955
|
+
gate.open();
|
|
12940
12956
|
clearTimeout(restartTimer);
|
|
12941
12957
|
const child = proc;
|
|
12942
12958
|
const w = writer;
|
|
@@ -18927,5 +18943,5 @@ try {
|
|
|
18927
18943
|
});
|
|
18928
18944
|
} catch {
|
|
18929
18945
|
}
|
|
18930
|
-
var code = await run(platform, "0.23.
|
|
18946
|
+
var code = await run(platform, "0.23.3", args);
|
|
18931
18947
|
process.exit(code);
|
package/dist/kernel/mcpcat.mjs
CHANGED
|
@@ -12358,6 +12358,7 @@ function startHolder(platform2, options) {
|
|
|
12358
12358
|
var DIALOG_HOLD_MIN_VERSION = "1.39.0";
|
|
12359
12359
|
var DIALOG_ANSWER_MS = 7e3;
|
|
12360
12360
|
var DIALOG_CLAIM_MS = 1e3;
|
|
12361
|
+
var DIALOG_FAIL_FAST = 2;
|
|
12361
12362
|
var DIALOG_MODES = ["report", "dismiss", "accept"];
|
|
12362
12363
|
var LABEL2 = "mcpcat serve --webmcp";
|
|
12363
12364
|
var REFUSED = "playwright-cli refuses to answer it (protected, unverified or in a frame)";
|
|
@@ -12391,6 +12392,26 @@ function reporter(options) {
|
|
|
12391
12392
|
function answerProblem(event, answerMs) {
|
|
12392
12393
|
return event === "timeout" ? `playwright-cli dialog-hold did not answer within ${Math.round(answerMs / 1e3)}s` : `playwright-cli dialog-hold replied ${event}`;
|
|
12393
12394
|
}
|
|
12395
|
+
function latch() {
|
|
12396
|
+
let shut = false;
|
|
12397
|
+
let wait = Promise.resolve();
|
|
12398
|
+
let release = () => {
|
|
12399
|
+
};
|
|
12400
|
+
return {
|
|
12401
|
+
close() {
|
|
12402
|
+
if (shut) return;
|
|
12403
|
+
shut = true;
|
|
12404
|
+
wait = new Promise((resolve2) => {
|
|
12405
|
+
release = () => {
|
|
12406
|
+
shut = false;
|
|
12407
|
+
resolve2();
|
|
12408
|
+
};
|
|
12409
|
+
});
|
|
12410
|
+
},
|
|
12411
|
+
open: () => release(),
|
|
12412
|
+
wait: () => wait
|
|
12413
|
+
};
|
|
12414
|
+
}
|
|
12394
12415
|
var isId = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
|
|
12395
12416
|
function startDialogHolder(platform2, options) {
|
|
12396
12417
|
const verb = options.accept ? "dialog-accept" : "dialog-dismiss";
|
|
@@ -12400,6 +12421,8 @@ function startDialogHolder(platform2, options) {
|
|
|
12400
12421
|
let stopped = false;
|
|
12401
12422
|
let isReady = false;
|
|
12402
12423
|
let waitedOut = false;
|
|
12424
|
+
let failing = false;
|
|
12425
|
+
let failures = 0;
|
|
12403
12426
|
let armed = 0;
|
|
12404
12427
|
let current;
|
|
12405
12428
|
let nextId2 = 1;
|
|
@@ -12408,21 +12431,11 @@ function startDialogHolder(platform2, options) {
|
|
|
12408
12431
|
let delay = HOLDER_RESTART_MIN_MS;
|
|
12409
12432
|
let readyAt;
|
|
12410
12433
|
let restartTimer;
|
|
12411
|
-
|
|
12412
|
-
let pending = Promise.resolve();
|
|
12413
|
-
let settle = () => {
|
|
12414
|
-
};
|
|
12434
|
+
const gate = latch();
|
|
12415
12435
|
const unready = () => {
|
|
12416
12436
|
isReady = false;
|
|
12417
12437
|
waitedOut = false;
|
|
12418
|
-
|
|
12419
|
-
settled = false;
|
|
12420
|
-
pending = new Promise((resolve2) => {
|
|
12421
|
-
settle = () => {
|
|
12422
|
-
settled = true;
|
|
12423
|
-
resolve2();
|
|
12424
|
-
};
|
|
12425
|
-
});
|
|
12438
|
+
gate.close();
|
|
12426
12439
|
};
|
|
12427
12440
|
let exited = Promise.resolve();
|
|
12428
12441
|
const report = reporter(options);
|
|
@@ -12465,8 +12478,9 @@ function startDialogHolder(platform2, options) {
|
|
|
12465
12478
|
}
|
|
12466
12479
|
if (event.event === "ready") {
|
|
12467
12480
|
isReady = true;
|
|
12481
|
+
failing = false;
|
|
12468
12482
|
readyAt = Date.now();
|
|
12469
|
-
|
|
12483
|
+
gate.open();
|
|
12470
12484
|
} else if (event.event === "dialog-opened" && isId(event.dialogId)) {
|
|
12471
12485
|
current = { id: event.dialogId, armed: armed > 0 };
|
|
12472
12486
|
if (current.armed) answer(current);
|
|
@@ -12488,7 +12502,7 @@ function startDialogHolder(platform2, options) {
|
|
|
12488
12502
|
child = await platform2.spawn({ argv, dieWithParent: true });
|
|
12489
12503
|
} catch (err2) {
|
|
12490
12504
|
report(`cannot start playwright-cli dialog-hold: ${err2.message}`);
|
|
12491
|
-
scheduleRestart();
|
|
12505
|
+
scheduleRestart(false);
|
|
12492
12506
|
return;
|
|
12493
12507
|
}
|
|
12494
12508
|
if (stopped) {
|
|
@@ -12511,22 +12525,24 @@ function startDialogHolder(platform2, options) {
|
|
|
12511
12525
|
current = void 0;
|
|
12512
12526
|
reply?.resolve("holder-gone");
|
|
12513
12527
|
if (!stopped) unready();
|
|
12514
|
-
|
|
12515
|
-
|
|
12516
|
-
}
|
|
12528
|
+
const reached = readyAt !== void 0;
|
|
12529
|
+
if (reached && Date.now() - readyAt >= HOLDER_STABLE_MS) delay = HOLDER_RESTART_MIN_MS;
|
|
12517
12530
|
readyAt = void 0;
|
|
12518
12531
|
if (stopped) return;
|
|
12519
12532
|
const why = lastError ?? `exited ${result.status}`;
|
|
12520
12533
|
report(
|
|
12521
12534
|
`the dialog holder for tab ${options.tab} stopped (playwright-cli dialog-hold: ${why}); restarting in ${Math.ceil(delay / 1e3)}s`
|
|
12522
12535
|
);
|
|
12523
|
-
scheduleRestart();
|
|
12536
|
+
scheduleRestart(reached);
|
|
12524
12537
|
});
|
|
12525
12538
|
};
|
|
12526
|
-
const scheduleRestart = () => {
|
|
12539
|
+
const scheduleRestart = (reached) => {
|
|
12527
12540
|
if (stopped) return;
|
|
12528
12541
|
const wait = delay;
|
|
12529
12542
|
delay = Math.min(delay * 2, HOLDER_RESTART_MAX_MS);
|
|
12543
|
+
failures = reached ? 0 : failures + 1;
|
|
12544
|
+
failing = failures >= DIALOG_FAIL_FAST || wait >= options.readyTimeoutMs;
|
|
12545
|
+
if (failing) gate.open();
|
|
12530
12546
|
restartTimer = setTimeout(() => {
|
|
12531
12547
|
restartTimer = void 0;
|
|
12532
12548
|
if (!stopped) void spawn2();
|
|
@@ -12536,8 +12552,8 @@ function startDialogHolder(platform2, options) {
|
|
|
12536
12552
|
void spawn2();
|
|
12537
12553
|
return {
|
|
12538
12554
|
async ready() {
|
|
12539
|
-
if (waitedOut || isReady) return;
|
|
12540
|
-
if (!await within(
|
|
12555
|
+
if (failing || waitedOut || isReady) return;
|
|
12556
|
+
if (!await within(gate.wait(), options.readyTimeoutMs)) waitedOut = true;
|
|
12541
12557
|
},
|
|
12542
12558
|
attached: () => isReady,
|
|
12543
12559
|
open: () => current !== void 0,
|
|
@@ -12557,7 +12573,7 @@ function startDialogHolder(platform2, options) {
|
|
|
12557
12573
|
},
|
|
12558
12574
|
async stop() {
|
|
12559
12575
|
stopped = true;
|
|
12560
|
-
|
|
12576
|
+
gate.open();
|
|
12561
12577
|
clearTimeout(restartTimer);
|
|
12562
12578
|
const child = proc;
|
|
12563
12579
|
const w = writer;
|
|
@@ -18154,7 +18170,7 @@ async function main(ctx) {
|
|
|
18154
18170
|
packageDir: "/node_modules/@ai-ecoverse/mcpcat"
|
|
18155
18171
|
});
|
|
18156
18172
|
const args = ctx.argv.slice(1);
|
|
18157
|
-
return run(platform2, "0.23.
|
|
18173
|
+
return run(platform2, "0.23.3", args);
|
|
18158
18174
|
}
|
|
18159
18175
|
export {
|
|
18160
18176
|
main as default
|