common-qa-mcp 0.8.1 → 0.10.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/adapters/remoteMcp/adapter.js +1 -1
- package/dist/adapters/remoteMcp/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/adapter.d.ts +24 -4
- package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/adapter.js +273 -47
- package/dist/adapters/simplifyqa/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/mapper.d.ts +6 -1
- package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/mapper.js +137 -6
- package/dist/adapters/simplifyqa/mapper.js.map +1 -1
- package/dist/adapters/types.d.ts +10 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/domain/types.d.ts +24 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/validate.d.ts.map +1 -1
- package/dist/domain/validate.js +14 -8
- package/dist/domain/validate.js.map +1 -1
- package/dist/drafts/store.d.ts +9 -0
- package/dist/drafts/store.d.ts.map +1 -1
- package/dist/drafts/store.js +12 -0
- package/dist/drafts/store.js.map +1 -1
- package/dist/initAgents.d.ts.map +1 -1
- package/dist/initAgents.js +43 -9
- package/dist/initAgents.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/actionCatalog.d.ts +24 -0
- package/dist/tools/actionCatalog.d.ts.map +1 -0
- package/dist/tools/actionCatalog.js +50 -0
- package/dist/tools/actionCatalog.js.map +1 -0
- package/dist/tools/recording.tools.d.ts.map +1 -1
- package/dist/tools/recording.tools.js +234 -0
- package/dist/tools/recording.tools.js.map +1 -1
- package/dist/tools/run.tools.d.ts.map +1 -1
- package/dist/tools/run.tools.js +160 -9
- package/dist/tools/run.tools.js.map +1 -1
- package/dist/tools/schemas.d.ts +28 -0
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +4 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/testcase.tools.d.ts +15 -1
- package/dist/tools/testcase.tools.d.ts.map +1 -1
- package/dist/tools/testcase.tools.js +39 -20
- package/dist/tools/testcase.tools.js.map +1 -1
- package/dist/tools/testdata.tools.d.ts.map +1 -1
- package/dist/tools/testdata.tools.js +60 -6
- package/dist/tools/testdata.tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { randomBytes } from 'node:crypto';
|
|
2
3
|
import { ok, err } from '../mcpResult.js';
|
|
3
4
|
import { log } from '../log.js';
|
|
5
|
+
// One-shot confirm tokens for core_close_session. Minted on refusal, redeemed on the follow-up call,
|
|
6
|
+
// short TTL. Stops the LLM from self-authorising a discard: it must return the EXACT nonce the tool
|
|
7
|
+
// just handed it, which only happens if it goes back to the user, hears "close anyway", then calls
|
|
8
|
+
// again with the token. Process-scoped — matches DraftStore's lifetime.
|
|
9
|
+
const CLOSE_NONCE_TTL_MS = 5 * 60000;
|
|
10
|
+
const closeNonces = new Map();
|
|
11
|
+
function mintCloseNonce() {
|
|
12
|
+
const nonce = randomBytes(12).toString('base64url');
|
|
13
|
+
closeNonces.set(nonce, Date.now() + CLOSE_NONCE_TTL_MS);
|
|
14
|
+
return nonce;
|
|
15
|
+
}
|
|
16
|
+
/** Single-use: if valid & unexpired, delete + return true. Also opportunistically prunes expired entries. */
|
|
17
|
+
function redeemCloseNonce(nonce) {
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
for (const [n, exp] of closeNonces)
|
|
20
|
+
if (exp < now)
|
|
21
|
+
closeNonces.delete(n);
|
|
22
|
+
const exp = closeNonces.get(nonce);
|
|
23
|
+
if (exp === undefined)
|
|
24
|
+
return false;
|
|
25
|
+
closeNonces.delete(nonce);
|
|
26
|
+
return exp >= now;
|
|
27
|
+
}
|
|
4
28
|
/**
|
|
5
29
|
* Bridges the product MCP's AGENT-BOUND recording surface (recording_start, browser_*, verify_*,
|
|
6
30
|
* control_flow_marker, generate_test_steps, recording_steps/save/discard, ...) through the Common
|
|
@@ -381,6 +405,22 @@ export function registerRecordingPassthrough(server, deps) {
|
|
|
381
405
|
proxied++;
|
|
382
406
|
continue;
|
|
383
407
|
}
|
|
408
|
+
if (t.name === 'core_close_session') {
|
|
409
|
+
registerCloseSessionWithSaveGuard(server, deps, t);
|
|
410
|
+
proxied++;
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
// SimplifyQA-only: intercept `core_activate_technology` so mobile (ANDROID/IOS) recordings
|
|
414
|
+
// can't be started without the LLM having explicitly asked the user which platform. The
|
|
415
|
+
// Java-side tool takes `technology` as a required string; without wrapping, the LLM picks
|
|
416
|
+
// ANDROID vs IOS silently and reuses the previous session's pick on the second recording
|
|
417
|
+
// (the reported bug). Walnut mobile uses a different tool (`android`/`ios`) with its own
|
|
418
|
+
// cascade in registerDelegatedRecorder — this wrapper does NOT apply there.
|
|
419
|
+
if (simplifyqa && t.name === 'core_activate_technology') {
|
|
420
|
+
registerActivateTechnologyWithMobileGuard(server, deps, t);
|
|
421
|
+
proxied++;
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
384
424
|
// SimplifyQA: preserve the agent's REAL parameter schema (ref/expected/value/count/…) so the
|
|
385
425
|
// client sends the right args (without it, web_validate_text's required `expected` is hidden →
|
|
386
426
|
// "Arguments length does not match"). Walnut keeps the permissive record exactly as before.
|
|
@@ -484,6 +524,200 @@ function registerDelegatedRecorder(server, deps, t, cfg) {
|
|
|
484
524
|
}
|
|
485
525
|
});
|
|
486
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* Wrap `core_close_session` with a SAVE GUARD so a tear-down can't silently drop a recorded but
|
|
529
|
+
* unsaved draft (web, mobile, mainframe — any technology). The agent's own close is coarse: it
|
|
530
|
+
* closes every active session (WEB + ANDROID + IOS) at once, and only the browser/driver + device
|
|
531
|
+
* mirror are torn down — the model may still have a `draft_...` in Common that never made it to
|
|
532
|
+
* `tc_save`. This wrapper checks Common's DraftStore for recording-sourced drafts with no `tc.id`
|
|
533
|
+
* and, unless `force:true`, refuses with a list of the offenders and the two ways out (`tc_save` to
|
|
534
|
+
* persist, `tc_draft_discard` to throw away).
|
|
535
|
+
*/
|
|
536
|
+
function registerCloseSessionWithSaveGuard(server, deps, t) {
|
|
537
|
+
server.registerTool(t.name, {
|
|
538
|
+
description: `${t.description ?? t.name}\n\n` +
|
|
539
|
+
`(Common wraps this with a SAVE GUARD covering BOTH recording paths: (a) delegated-recorder ` +
|
|
540
|
+
`drafts in Common's DraftStore — save with tc_save({draftId}) or discard with ` +
|
|
541
|
+
`tc_draft_discard({draftId}); (b) granular recordings on the Java agent (queried live via ` +
|
|
542
|
+
`core_active_recordings) — the user saves those by clicking Save Testcase in the ` +
|
|
543
|
+
`/mcp-recorder window. If either has unsaved work the close is REFUSED and the refusal ` +
|
|
544
|
+
`hands back a ONE-SHOT confirm token. To close AND lose the unsaved steps, call again as ` +
|
|
545
|
+
`core_close_session({ confirm: "<the-token-from-the-refusal>" }) — the browser, driver AND ` +
|
|
546
|
+
`recorder window all tear down. Only redeem the token after the user explicitly says ` +
|
|
547
|
+
`"discard" or "close anyway"; never invent one.)`,
|
|
548
|
+
inputSchema: {
|
|
549
|
+
confirm: z.string().optional().describe('One-shot confirm token minted by this tool in a prior REFUSAL. Only pass it when the ' +
|
|
550
|
+
'user has explicitly said "discard" or "close anyway" after seeing the refusal. Do NOT ' +
|
|
551
|
+
'invent a value — if you don\'t have a token from a prior refusal, call without confirm ' +
|
|
552
|
+
'and the refusal (if any) will give you a fresh one.'),
|
|
553
|
+
},
|
|
554
|
+
}, async (args) => {
|
|
555
|
+
const a = deps.getAdapter();
|
|
556
|
+
if (!a?.callRaw)
|
|
557
|
+
return err('Not connected to a product agent — recording runs on the agent (qa_connect first).');
|
|
558
|
+
const confirmArg = args?.confirm;
|
|
559
|
+
const confirm = typeof confirmArg === 'string' ? confirmArg.trim() : '';
|
|
560
|
+
const bypass = confirm.length > 0 && redeemCloseNonce(confirm);
|
|
561
|
+
if (!bypass) {
|
|
562
|
+
// Two sources of "unsaved":
|
|
563
|
+
// (a) delegated-recorder drafts re-homed into Common's DraftStore (from web/mainframe
|
|
564
|
+
// background recordings polled via *_status).
|
|
565
|
+
// (b) granular recordings live in the JAVA journal (core_activate_technology + *_ verbs).
|
|
566
|
+
// Both must be checked, both must be reported in ONE refusal so the LLM can act on the
|
|
567
|
+
// whole picture. The Java probe is best-effort — if it fails (agent gone, tool not
|
|
568
|
+
// advertised on an older jar), fall back to just (a) so we never widen a failure into
|
|
569
|
+
// a refusal-to-close for the wrong reason.
|
|
570
|
+
const delegatedUnsaved = deps.drafts.listUnsavedRecordings();
|
|
571
|
+
let granularUnsaved = [];
|
|
572
|
+
try {
|
|
573
|
+
const probe = (await a.callRaw('core_active_recordings', {}));
|
|
574
|
+
if (!probe.isError) {
|
|
575
|
+
const sc = probe.structuredContent;
|
|
576
|
+
const rows = Array.isArray(sc?.recordings) ? sc.recordings : [];
|
|
577
|
+
for (const r of rows) {
|
|
578
|
+
const row = r;
|
|
579
|
+
const count = typeof row.stepCount === 'number' ? row.stepCount : 0;
|
|
580
|
+
if (count > 0 && typeof row.sessionId === 'string' && typeof row.mcpSessionKey === 'string') {
|
|
581
|
+
granularUnsaved.push({ sessionId: row.sessionId, mcpSessionKey: row.mcpSessionKey, stepCount: count });
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
catch { /* older jar / no probe — Java's own guard still catches this on forward */ }
|
|
587
|
+
if (delegatedUnsaved.length || granularUnsaved.length) {
|
|
588
|
+
const lines = [];
|
|
589
|
+
if (delegatedUnsaved.length) {
|
|
590
|
+
lines.push(`Unsaved DELEGATED-recorder draft(s) (save with tc_save or discard with tc_draft_discard):`);
|
|
591
|
+
for (const u of delegatedUnsaved) {
|
|
592
|
+
lines.push(` • draftId: ${u.draftId} — "${u.title}" (recording session ${u.sessionId})`);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
if (granularUnsaved.length) {
|
|
596
|
+
lines.push(`Unsaved GRANULAR recording(s) — click Save Testcase in the /mcp-recorder window to persist:`);
|
|
597
|
+
for (const g of granularUnsaved) {
|
|
598
|
+
lines.push(` • session ${g.sessionId} (${g.mcpSessionKey}) — ${g.stepCount} step(s)`);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
const nonce = mintCloseNonce();
|
|
602
|
+
return err(`Refusing to close: ${delegatedUnsaved.length + granularUnsaved.length} recording(s) are NOT saved yet.\n` +
|
|
603
|
+
`${lines.join('\n')}\n\n` +
|
|
604
|
+
`ASK the user what to do:\n` +
|
|
605
|
+
` • SAVE — for a delegated draft, tc_save({ draftId: "<id>" }); for a granular ` +
|
|
606
|
+
`recording, tell the user to click Save Testcase in the recorder window.\n` +
|
|
607
|
+
` • DISCARD — for a delegated draft, tc_draft_discard({ draftId: "<id>" }); then retry close.\n` +
|
|
608
|
+
` • CLOSE ANYWAY — call core_close_session({ confirm: "${nonce}" }) to tear down the ` +
|
|
609
|
+
`browser, driver AND recorder window (all captured steps above are LOST). This token ` +
|
|
610
|
+
`is one-shot, valid for 5 minutes, tied to THIS refusal. Only redeem it after the ` +
|
|
611
|
+
`user literally says "discard" or "close anyway" — never invent a token.`);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
// Forward to Java. `force:true` goes over the wire ONLY when Common has just redeemed a
|
|
615
|
+
// valid confirm nonce it minted itself — never in response to a raw `force` argument from
|
|
616
|
+
// the client. That means a caller who skips the two-call ceremony (e.g. an LLM that decides
|
|
617
|
+
// on its own to bypass) still faces Java's own save-guard for GRANULAR recordings. Both
|
|
618
|
+
// guards must clear.
|
|
619
|
+
try {
|
|
620
|
+
return (await a.callRaw(t.name, bypass ? { force: true } : {}));
|
|
621
|
+
}
|
|
622
|
+
catch (e) {
|
|
623
|
+
return err(e instanceof Error ? e.message : String(e));
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
/**
|
|
628
|
+
* SimplifyQA-only wrapper around `core_activate_technology`. Enforces the mobile question sequence
|
|
629
|
+
* — "Android or iOS?" then "which device?" — on EVERY call, not just the first of the session. The
|
|
630
|
+
* bug this fixes: the underlying tool takes `technology` as a bare required string, so an LLM that
|
|
631
|
+
* silently reuses the previous session's pick or infers a platform from a vague prompt ("record an
|
|
632
|
+
* app") passes schema validation and starts recording on the wrong device with no re-prompt.
|
|
633
|
+
*
|
|
634
|
+
* Enforcement is per-rung:
|
|
635
|
+
* 1. `technology` — schema-required (Java-side).
|
|
636
|
+
* 2. Mobile (ANDROID/IOS) → `deviceId` MUST be present. Refusal names the fresh discovery call
|
|
637
|
+
* the LLM has to make (`android_list_devices` / `ios_list_devices`) so the user's picking off
|
|
638
|
+
* the CURRENT roster, not a stale memory of last session's udids.
|
|
639
|
+
* 3. Mobile → `platformAskedUser` MUST match `technology`. This is a "did you ask?" checkbox the
|
|
640
|
+
* LLM has to fill AFTER asking the user "Android or iOS?". Same soft ceiling as every other
|
|
641
|
+
* cascade in this file — the LLM can fabricate — but it makes the choice explicit in the
|
|
642
|
+
* call, so the ceiling matches deviceType/cloudDeviceType across the file.
|
|
643
|
+
*
|
|
644
|
+
* Non-mobile (WEB/MAINFRAME) is forwarded verbatim — the guard only fires when technology names a
|
|
645
|
+
* mobile OS, so existing web/mainframe recording is unaffected.
|
|
646
|
+
*/
|
|
647
|
+
function registerActivateTechnologyWithMobileGuard(server, deps, t) {
|
|
648
|
+
// Merge the agent's schema with our added `platformAskedUser` rung. Fresh object so the JSON-
|
|
649
|
+
// schema→zod conversion output (which may be typed as readonly) isn't mutated in place.
|
|
650
|
+
const base = jsonSchemaToShape(t.inputSchema) ?? {};
|
|
651
|
+
const shape = {
|
|
652
|
+
...base,
|
|
653
|
+
platformAskedUser: z.enum(['android', 'ios']).optional().describe('REQUIRED when technology is ANDROID or IOS. Set to the platform the USER explicitly named ' +
|
|
654
|
+
'after you ASKED them "Android or iOS?". If the user\'s prompt already named the platform ' +
|
|
655
|
+
'("record an iOS app…"), set it to that; otherwise ASK first, then set. Do NOT reuse a ' +
|
|
656
|
+
'previous session\'s answer. Must match `technology` (case-insensitive). The tool refuses ' +
|
|
657
|
+
'mobile recordings without this, so a silent tool-side pick can\'t sneak through.'),
|
|
658
|
+
};
|
|
659
|
+
server.registerTool(t.name, {
|
|
660
|
+
description: `${t.description ?? t.name}${RECORDING_MODE_PROMPT}\n\n` +
|
|
661
|
+
`⚠️ MOBILE (technology ANDROID/IOS) — EVERY recording session, WITHOUT EXCEPTION:\n` +
|
|
662
|
+
` 1. ASK the user "Android or iOS?" if their prompt did not explicitly name a platform ` +
|
|
663
|
+
`("record an app" is NOT an answer). Never infer, never reuse a previous session's pick.\n` +
|
|
664
|
+
` 2. Set BOTH \`technology\` and \`platformAskedUser\` to that answer.\n` +
|
|
665
|
+
` 3. Call \`android_list_devices\` / \`ios_list_devices\` FRESH — the roster changes ` +
|
|
666
|
+
`between sessions as devices are plugged/unplugged. Show the user the rows, let them ` +
|
|
667
|
+
`pick, pass the row's udid as \`deviceId\`.\n` +
|
|
668
|
+
`The tool refuses each rung it doesn't get, so skipping one just wastes a round-trip.\n\n` +
|
|
669
|
+
`(Agent-bound tool — runs on the connected product agent, forwarded through the Common MCP.)`,
|
|
670
|
+
inputSchema: shape,
|
|
671
|
+
}, async (args = {}) => {
|
|
672
|
+
const a = deps.getAdapter();
|
|
673
|
+
if (!a?.callRaw)
|
|
674
|
+
return err('Not connected to a product agent — recording runs on the agent (qa_connect first).');
|
|
675
|
+
const technologyRaw = typeof args['technology'] === 'string' ? args['technology'] : '';
|
|
676
|
+
const technology = technologyRaw.toUpperCase();
|
|
677
|
+
const mobile = technology === 'ANDROID' || technology === 'IOS';
|
|
678
|
+
if (mobile) {
|
|
679
|
+
const platform = technology.toLowerCase();
|
|
680
|
+
const listTool = platform === 'android' ? 'android_list_devices' : 'ios_list_devices';
|
|
681
|
+
const asked = typeof args['platformAskedUser'] === 'string'
|
|
682
|
+
? args['platformAskedUser'].toLowerCase()
|
|
683
|
+
: undefined;
|
|
684
|
+
// Rung 1 — force the platform question. Refuse when the LLM committed to technology
|
|
685
|
+
// without an explicit "I asked" marker matching it.
|
|
686
|
+
if (asked !== platform) {
|
|
687
|
+
return err(`Refusing to start a ${technology} recording: no evidence the user was asked which ` +
|
|
688
|
+
`mobile platform to use. ASK the user: "Android or iOS?" — do NOT infer from the ` +
|
|
689
|
+
`prompt (e.g. "record an app" gives NO platform), and do NOT reuse a previous ` +
|
|
690
|
+
`session's answer. After they answer, retry \`core_activate_technology\` with ` +
|
|
691
|
+
`\`platformAskedUser\` set to their choice AND \`technology\` matching it. ` +
|
|
692
|
+
(asked && asked !== platform
|
|
693
|
+
? `(You passed platformAskedUser='${asked}' but technology='${technology}' — those ` +
|
|
694
|
+
`contradict. The user's answer must drive BOTH.)`
|
|
695
|
+
: ''));
|
|
696
|
+
}
|
|
697
|
+
// Rung 2 — force the device question. deviceId is per-session (devices plug/unplug) so
|
|
698
|
+
// the LLM must call the listing tool fresh AND let the user pick.
|
|
699
|
+
const deviceId = typeof args['deviceId'] === 'string' ? args['deviceId'].trim() : '';
|
|
700
|
+
if (!deviceId) {
|
|
701
|
+
return err(`${technology} recording needs \`deviceId\`. Call \`${listTool}\` FRESH this session ` +
|
|
702
|
+
`(the connected roster changes between sessions — do NOT reuse a udid from an ` +
|
|
703
|
+
`earlier call), show the user the returned rows and ASK which device they want to ` +
|
|
704
|
+
`record on, then retry with the picked row's udid as \`deviceId\`.`);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
// platformAskedUser is intercept-only — the Java tool doesn't know about it, so don't
|
|
708
|
+
// leak it downstream.
|
|
709
|
+
const forwarded = {};
|
|
710
|
+
for (const k of Object.keys(args))
|
|
711
|
+
if (k !== 'platformAskedUser')
|
|
712
|
+
forwarded[k] = args[k];
|
|
713
|
+
try {
|
|
714
|
+
return (await a.callRaw(t.name, forwarded));
|
|
715
|
+
}
|
|
716
|
+
catch (e) {
|
|
717
|
+
return err(e instanceof Error ? e.message : String(e));
|
|
718
|
+
}
|
|
719
|
+
});
|
|
720
|
+
}
|
|
487
721
|
/**
|
|
488
722
|
* Register a delegated recorder's POLL tool (`web_status`, `mainframe_status`) — and with it THE DRAFT
|
|
489
723
|
* BRIDGE. While the recording is running the downstream result is forwarded verbatim; on "done" the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording.tools.js","sourceRoot":"","sources":["../../src/tools/recording.tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recording.tools.js","sourceRoot":"","sources":["../../src/tools/recording.tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.tools.d.ts","sourceRoot":"","sources":["../../src/tools/run.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACzC;;oBAEgB;IAChB,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.tools.d.ts","sourceRoot":"","sources":["../../src/tools/run.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACzC;;oBAEgB;IAChB,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;AA6OF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAo/B5E"}
|
package/dist/tools/run.tools.js
CHANGED
|
@@ -140,14 +140,87 @@ function statusText(s) {
|
|
|
140
140
|
(total > 0 ? '\n\nTo see WHY a specific one passed/failed, call run_status again with the same runId ' +
|
|
141
141
|
'plus `tcId` set to one of the ids above.' : '')
|
|
142
142
|
: '';
|
|
143
|
+
// First 5 non-blank lines of the raw error string — the previous single-line slice usually
|
|
144
|
+
// showed a "[ERROR] session …" log prefix instead of the actual exception. Enough context for
|
|
145
|
+
// the LLM to name the failure ("NoSuchElement on #foo") without dumping a full stack.
|
|
146
|
+
const errBlock = (raw) => {
|
|
147
|
+
if (!raw)
|
|
148
|
+
return '';
|
|
149
|
+
const lines = raw.split('\n').map((l) => l.trim()).filter((l) => l.length > 0).slice(0, 5);
|
|
150
|
+
return lines.map((l) => ` ${l}`).join('\n');
|
|
151
|
+
};
|
|
152
|
+
const stepIcon = (st) => st === 'passed' ? '✅' : st === 'failed' ? '❌' : st === 'skipped' ? '⏭️' : '•';
|
|
143
153
|
const steps = s.stepResults?.length
|
|
144
154
|
? '\n\n' + s.stepResults.map((st) => {
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
return `${
|
|
155
|
+
const desc = st.description?.trim() || '(no description)';
|
|
156
|
+
const err = errBlock(st.error);
|
|
157
|
+
return `${stepIcon(st.status)} step ${st.n}: ${desc} (${st.status})${err ? '\n' + err : ''}`;
|
|
148
158
|
}).join('\n')
|
|
149
159
|
: '';
|
|
150
|
-
|
|
160
|
+
// Failed-step summary: hoist FAILED rows to the top so the LLM sees "which step, why" without
|
|
161
|
+
// scanning the full list. Only fires when the run itself is failed AND at least one step row is
|
|
162
|
+
// failed (a run can be marked FAILED before any step logs, in which case the reportUrl is the
|
|
163
|
+
// only lead). Multi-step failures are all listed — cascading failures often clarify the root.
|
|
164
|
+
const failedSteps = (s.stepResults ?? []).filter((st) => st.status === 'failed');
|
|
165
|
+
const failedSummary = s.state === 'failed' && failedSteps.length
|
|
166
|
+
? '\n\n**Failed at:**\n' + failedSteps.map((st) => {
|
|
167
|
+
const desc = st.description?.trim() || '(no description)';
|
|
168
|
+
const err = errBlock(st.error);
|
|
169
|
+
return `- step ${st.n}: ${desc}${err ? '\n' + err : ''}`;
|
|
170
|
+
}).join('\n')
|
|
171
|
+
: '';
|
|
172
|
+
return `Run ${s.runId} · **${s.state}**${prog}${when}${tally}${link}${failedSummary}${kids}${steps}`;
|
|
173
|
+
}
|
|
174
|
+
/** Compact per-run bullet list for `run_history`. Matches the icon vocabulary `statusText` uses so
|
|
175
|
+
* the two outputs feel like one surface. Duration only shows when both timestamps are present
|
|
176
|
+
* (running/queued rows will read as `-> (running)` without a `(53s)` suffix). */
|
|
177
|
+
function renderRunHistory(type, entityId, runs) {
|
|
178
|
+
const stateIcon = (st) => st === 'passed' ? '✅'
|
|
179
|
+
: st === 'failed' ? '❌'
|
|
180
|
+
: st === 'running' ? '⏳'
|
|
181
|
+
: st === 'skipped' ? '⏭️'
|
|
182
|
+
: st === 'notExecuted' ? '➖'
|
|
183
|
+
: st === 'stopped' ? '⏹️'
|
|
184
|
+
: st === 'error' ? '⚠️'
|
|
185
|
+
: '•';
|
|
186
|
+
const durationOf = (r) => {
|
|
187
|
+
if (!r.startedAt || !r.endedAt)
|
|
188
|
+
return '';
|
|
189
|
+
const start = Date.parse(r.startedAt);
|
|
190
|
+
const end = Date.parse(r.endedAt);
|
|
191
|
+
if (!Number.isFinite(start) || !Number.isFinite(end) || end < start)
|
|
192
|
+
return '';
|
|
193
|
+
const secs = Math.round((end - start) / 1000);
|
|
194
|
+
if (secs < 60)
|
|
195
|
+
return ` (${secs}s)`;
|
|
196
|
+
const m = Math.floor(secs / 60);
|
|
197
|
+
const s = secs % 60;
|
|
198
|
+
return ` (${m}m ${s.toString().padStart(2, '0')}s)`;
|
|
199
|
+
};
|
|
200
|
+
const when = (r) => {
|
|
201
|
+
if (r.startedAt && r.endedAt)
|
|
202
|
+
return ` · ${r.startedAt} → ${r.endedAt}${durationOf(r)}`;
|
|
203
|
+
if (r.startedAt)
|
|
204
|
+
return ` · started ${r.startedAt}`;
|
|
205
|
+
return '';
|
|
206
|
+
};
|
|
207
|
+
const tally = (r) => {
|
|
208
|
+
if (type !== 'SUITE' || r.totalTestCases === undefined)
|
|
209
|
+
return '';
|
|
210
|
+
const parts = [`${r.passed ?? 0}✅`];
|
|
211
|
+
parts.push(`${r.failed ?? 0}❌`);
|
|
212
|
+
parts.push(`${r.skipped ?? 0}⏭`);
|
|
213
|
+
if ((r.notExecuted ?? 0) > 0)
|
|
214
|
+
parts.push(`${r.notExecuted}➖`);
|
|
215
|
+
return ` · ${parts.join('/')} of ${r.totalTestCases}`;
|
|
216
|
+
};
|
|
217
|
+
const label = type === 'SUITE' ? 'suite' : 'test case';
|
|
218
|
+
const header = `Recent executions of ${label} ${entityId} (${runs.length} shown):\n`;
|
|
219
|
+
const lines = runs.map((r) => `- ${stateIcon(r.state)} ${r.runId} · ${r.state}${tally(r)}${when(r)}`);
|
|
220
|
+
const hint = type === 'SUITE'
|
|
221
|
+
? '\n\nCall run_status({ runId: "<id>" }) for the per-test-case rollup, then again with tcId for a child\'s steps.'
|
|
222
|
+
: '\n\nCall run_status({ runId: "<id>" }) for step-level detail on any one.';
|
|
223
|
+
return header + '\n' + lines.join('\n') + hint;
|
|
151
224
|
}
|
|
152
225
|
export function registerRunTools(server, deps) {
|
|
153
226
|
server.registerTool('cloud_runners', {
|
|
@@ -863,18 +936,96 @@ export function registerRunTools(server, deps) {
|
|
|
863
936
|
return err(describeError(e));
|
|
864
937
|
}
|
|
865
938
|
});
|
|
939
|
+
server.registerTool('run_history', {
|
|
940
|
+
title: 'Recent execution history for a suite or test case',
|
|
941
|
+
description: 'Return the top-N most recent STANDALONE executions of a suite or test case (newest first), ' +
|
|
942
|
+
'as a scoreboard — runId, state, timing, reportUrl, plus a per-test-case tally for SUITE ' +
|
|
943
|
+
'runs (passed/failed/skipped of total). No step-level detail; use `run_status({ runId })` ' +
|
|
944
|
+
'on any row to drill in. Pass EXACTLY one of `suiteId` or `tcId`. `limit` defaults to 5, ' +
|
|
945
|
+
'capped at 20. Suite-child TC rows are excluded from a `tcId` query, so a test case that ' +
|
|
946
|
+
'only runs inside suites returns empty. Requires a live connection.',
|
|
947
|
+
inputSchema: {
|
|
948
|
+
suiteId: z.string().optional().describe('A suite id (from suite_list) — returns the suite\'s recent executions.'),
|
|
949
|
+
tcId: z.string().optional().describe('A test case id — returns the TC\'s recent STANDALONE executions.'),
|
|
950
|
+
limit: z.number().int().min(1).max(20).optional().describe('How many recent runs to return (default 5, max 20).'),
|
|
951
|
+
},
|
|
952
|
+
annotations: { readOnlyHint: true },
|
|
953
|
+
}, async ({ suiteId, tcId, limit }) => {
|
|
954
|
+
const adapter = deps.getAdapter();
|
|
955
|
+
if (!adapter)
|
|
956
|
+
return err(NOT_CONNECTED);
|
|
957
|
+
if ((suiteId && tcId) || (!suiteId && !tcId)) {
|
|
958
|
+
return err('Pass exactly one of `suiteId` or `tcId`.');
|
|
959
|
+
}
|
|
960
|
+
if (!adapter.listRecentRuns) {
|
|
961
|
+
return err('This product does not support run-history lookup.');
|
|
962
|
+
}
|
|
963
|
+
const type = suiteId ? 'SUITE' : 'TC';
|
|
964
|
+
const entityId = (suiteId ?? tcId);
|
|
965
|
+
const n = Math.min(Math.max(limit ?? 5, 1), 20);
|
|
966
|
+
try {
|
|
967
|
+
const runs = await adapter.listRecentRuns(type, entityId, n);
|
|
968
|
+
if (!runs.length) {
|
|
969
|
+
const label = type === 'SUITE' ? 'suite' : 'test case';
|
|
970
|
+
return ok(`No executions found for ${label} ${entityId}.`, { runs: [] });
|
|
971
|
+
}
|
|
972
|
+
const text = renderRunHistory(type, entityId, runs);
|
|
973
|
+
return ok(text, { runs });
|
|
974
|
+
}
|
|
975
|
+
catch (e) {
|
|
976
|
+
return err(describeError(e));
|
|
977
|
+
}
|
|
978
|
+
});
|
|
866
979
|
server.registerTool('run_stop', {
|
|
867
980
|
title: 'Stop a run',
|
|
868
|
-
description: 'Signal a running execution to stop
|
|
869
|
-
|
|
981
|
+
description: 'Signal a running execution to stop, and poll briefly for the terminal state so the reply ' +
|
|
982
|
+
"reflects reality (not a fire-and-forget). Pass EXACTLY one of: `runId` (from tc_run / " +
|
|
983
|
+
"suite_run), `suiteId` (stops the suite's LATEST execution), or `tcId` (stops the TC's " +
|
|
984
|
+
'LATEST standalone execution — suite-child rows are excluded). Requires a live connection.',
|
|
985
|
+
inputSchema: {
|
|
986
|
+
runId: z.string().optional().describe('The run id (from tc_run / suite_run).'),
|
|
987
|
+
suiteId: z.string().optional().describe("A suite id (from suite_list) — stops the suite's latest execution."),
|
|
988
|
+
tcId: z.string().optional().describe("A test case id — stops the TC's latest STANDALONE execution."),
|
|
989
|
+
},
|
|
870
990
|
annotations: { readOnlyHint: false },
|
|
871
|
-
}, async ({ runId }) => {
|
|
991
|
+
}, async ({ runId, suiteId, tcId }) => {
|
|
872
992
|
const adapter = deps.getAdapter();
|
|
873
993
|
if (!adapter)
|
|
874
994
|
return err(NOT_CONNECTED);
|
|
995
|
+
if ([runId, suiteId, tcId].filter((v) => v !== undefined && v !== '').length !== 1) {
|
|
996
|
+
return err('Pass exactly one of `runId`, `suiteId`, or `tcId`.');
|
|
997
|
+
}
|
|
875
998
|
try {
|
|
876
|
-
|
|
877
|
-
|
|
999
|
+
let effectiveRunId = runId;
|
|
1000
|
+
if (suiteId) {
|
|
1001
|
+
if (!adapter.getLatestSuiteRun)
|
|
1002
|
+
return err('This product does not support latest-suite-run lookup — pass `runId` instead.');
|
|
1003
|
+
const latest = await adapter.getLatestSuiteRun(suiteId);
|
|
1004
|
+
if (!latest)
|
|
1005
|
+
return err(`Suite ${suiteId} has no executions to stop.`);
|
|
1006
|
+
effectiveRunId = latest;
|
|
1007
|
+
}
|
|
1008
|
+
else if (tcId) {
|
|
1009
|
+
if (!adapter.getLatestTestcaseRun)
|
|
1010
|
+
return err('This product does not support latest-testcase-run lookup — pass `runId` instead.');
|
|
1011
|
+
const latest = await adapter.getLatestTestcaseRun(tcId);
|
|
1012
|
+
if (!latest)
|
|
1013
|
+
return err(`Test case ${tcId} has no executions to stop.`);
|
|
1014
|
+
effectiveRunId = latest;
|
|
1015
|
+
}
|
|
1016
|
+
await adapter.stopRun(effectiveRunId);
|
|
1017
|
+
// Confirm — the backend accepts the stop async, so getRun is the source of truth. Poll a few
|
|
1018
|
+
// times so the reply reports the actual state instead of lying "requested" and moving on.
|
|
1019
|
+
// ponytail: fixed 3×1.5s poll, upgrade to configurable/backoff if teams hit slow stop paths.
|
|
1020
|
+
const TERMINAL = new Set(['stopped', 'passed', 'failed', 'error', 'skipped', 'notExecuted']);
|
|
1021
|
+
for (let i = 0; i < 3; i++) {
|
|
1022
|
+
await new Promise((r) => setTimeout(r, 1500));
|
|
1023
|
+
const s = await adapter.getRun(effectiveRunId);
|
|
1024
|
+
if (TERMINAL.has(s.state))
|
|
1025
|
+
return ok(`Run ${effectiveRunId} is now **${s.state}**.`, { run: s });
|
|
1026
|
+
}
|
|
1027
|
+
return ok(`Stop request sent for run ${effectiveRunId}. State is still queued/running — poll ` +
|
|
1028
|
+
`run_status({ runId: "${effectiveRunId}" }) to confirm.`);
|
|
878
1029
|
}
|
|
879
1030
|
catch (e) {
|
|
880
1031
|
return err(describeError(e));
|