common-qa-mcp 0.8.0 → 0.9.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.
Files changed (48) hide show
  1. package/dist/adapters/remoteMcp/adapter.js +1 -1
  2. package/dist/adapters/simplifyqa/adapter.d.ts +48 -4
  3. package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -1
  4. package/dist/adapters/simplifyqa/adapter.js +585 -63
  5. package/dist/adapters/simplifyqa/adapter.js.map +1 -1
  6. package/dist/adapters/simplifyqa/mapper.d.ts +2 -2
  7. package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -1
  8. package/dist/adapters/simplifyqa/mapper.js +257 -64
  9. package/dist/adapters/simplifyqa/mapper.js.map +1 -1
  10. package/dist/adapters/types.d.ts +10 -1
  11. package/dist/adapters/types.d.ts.map +1 -1
  12. package/dist/domain/types.d.ts +46 -4
  13. package/dist/domain/types.d.ts.map +1 -1
  14. package/dist/domain/validate.d.ts.map +1 -1
  15. package/dist/domain/validate.js +5 -1
  16. package/dist/domain/validate.js.map +1 -1
  17. package/dist/drafts/store.d.ts +9 -0
  18. package/dist/drafts/store.d.ts.map +1 -1
  19. package/dist/drafts/store.js +12 -0
  20. package/dist/drafts/store.js.map +1 -1
  21. package/dist/initAgents.d.ts.map +1 -1
  22. package/dist/initAgents.js +48 -16
  23. package/dist/initAgents.js.map +1 -1
  24. package/dist/server.d.ts.map +1 -1
  25. package/dist/server.js +6 -1
  26. package/dist/server.js.map +1 -1
  27. package/dist/tools/recording.tools.d.ts.map +1 -1
  28. package/dist/tools/recording.tools.js +234 -0
  29. package/dist/tools/recording.tools.js.map +1 -1
  30. package/dist/tools/run.tools.d.ts +4 -0
  31. package/dist/tools/run.tools.d.ts.map +1 -1
  32. package/dist/tools/run.tools.js +360 -114
  33. package/dist/tools/run.tools.js.map +1 -1
  34. package/dist/tools/schemas.d.ts +41 -49
  35. package/dist/tools/schemas.d.ts.map +1 -1
  36. package/dist/tools/schemas.js +19 -1
  37. package/dist/tools/schemas.js.map +1 -1
  38. package/dist/tools/tcEditPublisher.d.ts +20 -0
  39. package/dist/tools/tcEditPublisher.d.ts.map +1 -0
  40. package/dist/tools/tcEditPublisher.js +46 -0
  41. package/dist/tools/tcEditPublisher.js.map +1 -0
  42. package/dist/tools/testcase.tools.d.ts.map +1 -1
  43. package/dist/tools/testcase.tools.js +303 -10
  44. package/dist/tools/testcase.tools.js.map +1 -1
  45. package/dist/tools/testdata.tools.d.ts.map +1 -1
  46. package/dist/tools/testdata.tools.js +60 -6
  47. package/dist/tools/testdata.tools.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * HTTP publisher for the /tc-edit live-edit wire (see plan/tc-edit-live-protocol.md).
3
+ * Streams TC_EDIT_* events + opens the tc-viewer window on the Electron desktop app
4
+ * running at http://localhost:4504. Mirrors the Java UiPublisher fail-soft pattern:
5
+ * a POST failure logs and returns — never throws into the tool call, because live-view
6
+ * is a nice-to-have on top of the draft-store mutation that already happened.
7
+ */
8
+ const DEFAULT_ELECTRON_BASE = 'http://localhost:4504';
9
+ function baseUrl() {
10
+ return process.env['SIMPLIFYQA_UI_URL']?.replace(/\/$/, '') ?? DEFAULT_ELECTRON_BASE;
11
+ }
12
+ async function post(path, body) {
13
+ const ctl = new AbortController();
14
+ const timer = setTimeout(() => ctl.abort(), 3000);
15
+ try {
16
+ const res = await fetch(`${baseUrl()}${path}`, {
17
+ method: 'POST',
18
+ headers: { 'Content-Type': 'application/json' },
19
+ body: JSON.stringify(body),
20
+ signal: ctl.signal,
21
+ });
22
+ if (!res.ok && res.status !== 409) {
23
+ console.error(`[tc-edit] ${path} -> HTTP ${res.status}`);
24
+ }
25
+ return { ok: res.ok, status: res.status };
26
+ }
27
+ catch (e) {
28
+ console.error(`[tc-edit] ${path} push failed (${e.message}). Is the desktop app running on ${baseUrl()}?`);
29
+ return { ok: false };
30
+ }
31
+ finally {
32
+ clearTimeout(timer);
33
+ }
34
+ }
35
+ /** Emit one wire event to the given session's window. Best-effort. */
36
+ export async function emitTcEdit(sessionId, event, payload) {
37
+ if (!sessionId)
38
+ return; // no bound window (draft opened without tc_edit_open) — silently no-op
39
+ await post('/tc-edit/emit', { sessionId, event, payload: payload ?? {} });
40
+ }
41
+ /** Open the tc-viewer window on the desktop app for a given TC + session. */
42
+ export async function openTcViewerWindow(args) {
43
+ const { ok } = await post('/tc-viewer/open', args);
44
+ return ok;
45
+ }
46
+ //# sourceMappingURL=tcEditPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcEditPublisher.js","sourceRoot":"","sources":["../../src/tools/tcEditPublisher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,IAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;YAC7C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,iBAAkB,CAAW,CAAC,OAAO,oCAAoC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAA6B,EAC7B,KAAa,EACb,OAAgB;IAEhB,IAAI,CAAC,SAAS;QAAE,OAAO,CAAG,uEAAuE;IACjG,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAQxC;IACC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA4atF"}
1
+ {"version":3,"file":"testcase.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,KAAK,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAW5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;;sEAIkE;IAClE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAClF;0GACsG;IACtG,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AA+CF;;;;;uEAKuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK;;;;;;EAKvC;AA6BD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAivBtF"}
@@ -5,6 +5,7 @@ import { WALNUT_ACTIONS, actionDefsFrom, offlineCatalogFor } from '../adapters/w
5
5
  import { toWalnutStep } from '../adapters/walnut/mapper.js';
6
6
  import { stepsMarkdown, validationSummaryLine } from './markdown.js';
7
7
  import { zCategory, zDraftOp, zNewStep, zPriority } from './schemas.js';
8
+ import { emitTcEdit, openTcViewerWindow } from './tcEditPublisher.js';
8
9
  function describeError(e) {
9
10
  return e instanceof Error ? e.message : String(e);
10
11
  }
@@ -102,10 +103,26 @@ export function registerTestcaseTools(server, deps) {
102
103
  annotations: { readOnlyHint: true },
103
104
  }, async ({ platform }) => {
104
105
  try {
105
- const all = actionDefsFrom(WALNUT_ACTIONS);
106
- const defs = platform ? all.filter((a) => a.platform === platform) : all;
106
+ // Prefer the LIVE backend catalog when connected — SQA rows carry numeric `id` that the
107
+ // model needs to round-trip existing steps (an SQA-hydrated step's actionType is the id
108
+ // string, not the name). Falls back to the offline walnut list when no adapter or when
109
+ // the adapter call fails, so the tool always returns something usable.
110
+ const adapter = deps.getAdapter?.();
111
+ let defs = null;
112
+ if (adapter?.actionsCatalog) {
113
+ try {
114
+ defs = await adapter.actionsCatalog(platform);
115
+ }
116
+ catch {
117
+ defs = null;
118
+ }
119
+ }
120
+ if (!defs) {
121
+ const all = actionDefsFrom(WALNUT_ACTIONS);
122
+ defs = platform ? all.filter((a) => a.platform === platform) : all;
123
+ }
107
124
  const text = `${defs.length} action type${defs.length === 1 ? '' : 's'}${platform ? ` for ${platform}` : ''}.\n\n` +
108
- defs.map((a) => `- \`${a.actionType}\` (${a.platform})`).join('\n');
125
+ defs.map((a) => `- \`${a.actionType}\` (${a.platform})${a.id != null ? ` — id ${a.id}` : ''}`).join('\n');
109
126
  return ok(text, { actions: defs });
110
127
  }
111
128
  catch (e) {
@@ -148,6 +165,60 @@ export function registerTestcaseTools(server, deps) {
148
165
  return err(describeError(e));
149
166
  }
150
167
  });
168
+ server.registerTool('tc_draft_from_journal', {
169
+ title: 'Load a recording journal as an automation draft',
170
+ description: 'Load the steps from a recording session (the journal on the connected agent) into a new ' +
171
+ 'AUTOMATION draft. Use this to save a recording that finished — including one from an ' +
172
+ "earlier session. Then review with tc_draft_get and persist with tc_save. If the recording " +
173
+ 'targeted an existing TC, pass its id via `tcId` so the draft inherits title/module/project ' +
174
+ 'and tc_save UPDATES that TC instead of creating a new one. Requires a live connection ' +
175
+ '(qa_connect) with an agent that owns the recording journal.',
176
+ inputSchema: {
177
+ sessionId: z.string().describe('The recording session id — the same id used when the recording started.'),
178
+ tcId: z.string().optional().describe('Optional: an existing TC id to inherit title/module/project from (and to UPDATE on save).'),
179
+ title: z.string().optional().describe('Optional draft title (overrides tcId meta). Defaults to "Recording <sessionId>" when no tcId is passed.'),
180
+ },
181
+ }, async ({ sessionId, tcId, title }) => {
182
+ const adapter = deps.getAdapter?.();
183
+ if (!adapter) {
184
+ return err('Not connected to a product. Use qa_connect first — reading a journal needs a live agent.');
185
+ }
186
+ if (!adapter.readJournal) {
187
+ return err('This product has no recording journal.');
188
+ }
189
+ let view;
190
+ try {
191
+ view = await adapter.readJournal(sessionId);
192
+ }
193
+ catch (e) {
194
+ return err(`Could not read journal for session "${sessionId}": ${describeError(e)}`);
195
+ }
196
+ if (!view.steps || view.steps.length === 0) {
197
+ return err(`Journal for session "${sessionId}" is empty — nothing to save. Record steps first.`);
198
+ }
199
+ let meta = {};
200
+ if (tcId) {
201
+ try {
202
+ const existing = await adapter.getTestCase(tcId);
203
+ meta = existing;
204
+ }
205
+ catch (e) {
206
+ return err(`Could not fetch meta from tcId "${tcId}": ${describeError(e)}`);
207
+ }
208
+ }
209
+ const tc = {
210
+ ...meta,
211
+ title: title ?? meta.title ?? `Recording ${sessionId}`,
212
+ priority: meta.priority ?? 'medium',
213
+ category: 'automated',
214
+ steps: view.steps,
215
+ // When no tcId: this is a NEW TC, so drop any id that leaked in from meta.
216
+ // When tcId: keep meta.id so tc_save UPDATES it in place.
217
+ ...(tcId ? {} : { id: undefined }),
218
+ };
219
+ const draftId = deps.drafts.create(tc, sessionId);
220
+ return draftResult(deps.drafts.get(draftId));
221
+ });
151
222
  server.registerTool('tc_draft_create', {
152
223
  title: 'Create a test-case draft',
153
224
  description: 'MANUAL-ONLY authoring. Call this when the user asked for a MANUAL test case: they said "manual", ' +
@@ -220,6 +291,30 @@ export function registerTestcaseTools(server, deps) {
220
291
  }, async ({ draftId, ops }) => {
221
292
  try {
222
293
  const draft = deps.drafts.applyOps(draftId, ops);
294
+ // Live-view fanout: emit one wire event per op so the Angular listener
295
+ // can apply position-only ops (DELETE/MOVE) surgically without a full
296
+ // reload. Shape-heavy ops (INSERT/UPDATE) currently log on the UI side
297
+ // pending Phase 1.5's step-shape mapper — see plan/tc-edit-live-protocol.md.
298
+ // set_meta has no wire event (§3 of the spec covers step-level only).
299
+ if (draft.sessionId) {
300
+ for (const op of ops) {
301
+ switch (op.op) {
302
+ case 'add_step':
303
+ void emitTcEdit(draft.sessionId, 'TC_EDIT_INSERT', { at: op.at, step: op.step });
304
+ break;
305
+ case 'update_step':
306
+ void emitTcEdit(draft.sessionId, 'TC_EDIT_UPDATE', { n: op.n, step: op.patch });
307
+ break;
308
+ case 'remove_step':
309
+ void emitTcEdit(draft.sessionId, 'TC_EDIT_DELETE', { n: op.n });
310
+ break;
311
+ case 'move_step':
312
+ void emitTcEdit(draft.sessionId, 'TC_EDIT_MOVE', { from: op.n, to: op.to });
313
+ break;
314
+ // set_meta → no wire event; changes surface on next tc_save + reload
315
+ }
316
+ }
317
+ }
223
318
  return draftResult(draft);
224
319
  }
225
320
  catch (e) {
@@ -286,6 +381,167 @@ export function registerTestcaseTools(server, deps) {
286
381
  return err(describeError(e));
287
382
  }
288
383
  });
384
+ server.registerTool('tc_edit_open', {
385
+ title: 'Open an existing test case for live prompt-driven step editing',
386
+ description: 'One-shot: hydrate an EXISTING test case as a draft, open it in the desktop TC-viewer window, ' +
387
+ 'and bind a live-edit session so subsequent tc_draft_update calls stream the changes into the ' +
388
+ 'window in real time (TC_EDIT_RESYNC on each op batch, per plan/tc-edit-live-protocol.md). ' +
389
+ 'Use this when the user says "edit test case N", "add steps to TC N", "change step 3 of N" — ' +
390
+ 'anything that mutates an existing TC while the viewer is open.\n\n' +
391
+ 'Returns { draftId, sessionId, tcId }. Follow up with tc_draft_update({ draftId, ops }) for edits ' +
392
+ 'and tc_save({ draftId }) to persist. Requires a live connection (qa_connect); the desktop app ' +
393
+ 'must be running on the same machine or the window-open call silently no-ops (the draft still ' +
394
+ 'mutates correctly — only the live view is lost).',
395
+ inputSchema: {
396
+ tcId: z.string().describe('The existing test-case id to open for editing.'),
397
+ hashRoute: z.string().optional().describe('Optional Angular hash route override, e.g. "#/user/testcase/details/593". Defaults to ' +
398
+ '"#/user/testcase/details/<numericTcId>" (matches the browser UI route). Pass this only if ' +
399
+ 'the product\'s testcase-details route differs from the default.'),
400
+ baseUrl: z.string().optional().describe('sqa-ui origin (defaults to whatever the desktop app is configured with).'),
401
+ accessToken: z.string().optional().describe('Bearer token forwarded to the desktop window for API calls.'),
402
+ userId: z.union([z.string(), z.number()]).optional(),
403
+ projectId: z.union([z.string(), z.number()]).optional(),
404
+ },
405
+ }, async ({ tcId, hashRoute, baseUrl, accessToken, userId, projectId }) => {
406
+ const adapter = deps.getAdapter?.();
407
+ if (!adapter) {
408
+ return err('Not connected to a product. Use qa_connect first — opening a real TC needs a live backend.');
409
+ }
410
+ let tc;
411
+ try {
412
+ tc = await adapter.getTestCase(tcId);
413
+ if (!tc.id)
414
+ tc.id = tcId;
415
+ }
416
+ catch (e) {
417
+ return err(`Could not fetch test case "${tcId}": ${describeError(e)}`);
418
+ }
419
+ // sessionId is our correlation key: (a) stamped on the draft so tc_draft_update knows where to
420
+ // fan out edits, (b) sent to Electron as the windowList key, (c) put in the URL query so the
421
+ // Angular renderer knows MCP owns edits (§6 of the wire spec). One id, three places.
422
+ const sessionId = `tc-edit-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
423
+ const draftId = deps.drafts.create(tc, sessionId);
424
+ const draft = deps.drafts.get(draftId);
425
+ // ponytail: fall back to the adapter's session context — the LLM has no way to know the
426
+ // bearer token, and without it the desktop app loads sqa-ui unauthenticated → skeleton
427
+ // loaders forever because API fetches 401. Caller args still win when explicitly provided.
428
+ const sess = adapter.getSessionContext?.() ?? {};
429
+ const _baseUrl = baseUrl ?? sess.baseUrl;
430
+ const _accessToken = accessToken ?? sess.token;
431
+ const _userId = userId ?? sess.userId;
432
+ const _projectId = projectId ?? sess.projectId;
433
+ const opened = await openTcViewerWindow({
434
+ sessionId, tcId,
435
+ ...(hashRoute ? { hashRoute } : {}),
436
+ ...(_baseUrl ? { baseUrl: _baseUrl } : {}),
437
+ ...(_accessToken ? { accessToken: _accessToken } : {}),
438
+ ...(_userId !== undefined && _userId !== '' ? { userId: _userId } : {}),
439
+ ...(_projectId !== undefined && _projectId !== '' ? { projectId: _projectId } : {}),
440
+ });
441
+ // TC_EDIT_HELLO gives the UI its baseline. Skipped if the window didn't open — no consumer.
442
+ if (opened) {
443
+ void emitTcEdit(sessionId, 'TC_EDIT_HELLO', {
444
+ tcId, draftId, steps: draft.tc.steps,
445
+ });
446
+ }
447
+ const issues = validateTestCase(draft.tc, offlineCatalogFor);
448
+ const summary = validationSummaryLine(draft.tc, issues);
449
+ const openedLine = opened
450
+ ? `Opened "${draft.tc.title}" in the desktop TC editor. Session ${sessionId}.`
451
+ : `Draft ${draftId} ready. Desktop app not reachable on this machine — edits will apply to the draft, but nothing will render live.`;
452
+ return ok(`${openedLine}\n\nDraft ${draft.draftId} · ${summary}\n\n${stepsMarkdown(draft.tc)}`, { draftId, sessionId, tcId, opened, tc: draft.tc, issues });
453
+ });
454
+ server.registerTool('tc_record_append', {
455
+ title: 'Record additional steps into a TC that is already open in the editor',
456
+ description: 'Start a live-browser recording session whose captured steps stream into the tc-viewer window ' +
457
+ 'bound by an earlier `tc_edit_open`. Each user interaction becomes a TC_EDIT_INSERT event in the ' +
458
+ 'editor. Returns instructions the model must follow (this tool itself does not touch the driver):\n' +
459
+ ' 1. `core_activate_technology({ technology:"WEB", mcpTcEditSessionId, testcaseName })` — starts ' +
460
+ ' the browser and binds captures to this window. The response `structuredContent.sessionId` is ' +
461
+ ' the RECORDING session id — remember it for step 3.\n' +
462
+ ' 2. Use `web_*` tools to drive the browser. Every captured step shows up live in the editor.\n' +
463
+ ' 3. When done, `tc_record_stop({ draftId, recordingSessionId })` reads the recording journal ' +
464
+ ' and appends the captured steps to the draft. Then `tc_save({ draftId })` to persist.\n\n' +
465
+ 'The draft must have been opened via `tc_edit_open` first — its stored sessionId is what binds ' +
466
+ 'the recorder to the correct window.',
467
+ inputSchema: {
468
+ draftId: z.string().describe('The draft id from tc_edit_open.'),
469
+ },
470
+ }, async ({ draftId }) => {
471
+ let draft;
472
+ try {
473
+ draft = deps.drafts.get(draftId);
474
+ }
475
+ catch (e) {
476
+ return err(describeError(e));
477
+ }
478
+ if (!draft.sessionId) {
479
+ return err(`Draft "${draftId}" was not opened via tc_edit_open — no tc-viewer window is bound. ` +
480
+ 'Open it with tc_edit_open first, then call tc_record_append.');
481
+ }
482
+ const guide = `Recording will stream into the TC editor bound to session ${draft.sessionId}.\n\n` +
483
+ `1. core_activate_technology({ technology: "WEB", mcpTcEditSessionId: "${draft.sessionId}", ` +
484
+ `testcaseName: "${draft.tc.title}" }) — response.structuredContent.sessionId is the RECORDING id.\n` +
485
+ `2. web_launch_application({ url: "..." }) — must be the first browser call.\n` +
486
+ `3. web_snapshot() before each action; web_click / web_enter_text / web_validate_text / etc. to drive.\n` +
487
+ `4. core_close_session() when done recording.\n` +
488
+ `5. tc_record_stop({ draftId: "${draftId}", recordingSessionId: "<from step 1>" }) — append to draft.\n` +
489
+ `6. tc_save({ draftId: "${draftId}" }) — persist to the SAME test case, same version.`;
490
+ return ok(guide, { draftId, tcViewerSessionId: draft.sessionId, tcId: draft.tc.id });
491
+ });
492
+ server.registerTool('tc_record_stop', {
493
+ title: 'Append recorded steps to the draft after tc_record_append',
494
+ description: 'Read the recording journal for a session and add each captured step to the draft as an ' +
495
+ '`add_step` op. Pairs with `tc_record_append`. Follow with `tc_save({ draftId })` to persist.\n\n' +
496
+ 'CAVEAT: The recording journal is process-scoped and may contain steps from earlier recordings ' +
497
+ 'in the same Java-server process. Pass `fromIndex` to skip the first N steps if the journal ' +
498
+ 'accumulated prior state — usually the count of steps recorded before `tc_record_append` was called.',
499
+ inputSchema: {
500
+ draftId: z.string(),
501
+ recordingSessionId: z.string().describe('The session id from `core_activate_technology`\'s response.structuredContent.sessionId.'),
502
+ fromIndex: z.number().int().nonnegative().optional().describe('Optional: skip the first N steps in the journal (defaults to 0 = take all).'),
503
+ },
504
+ }, async ({ draftId, recordingSessionId, fromIndex }) => {
505
+ const adapter = deps.getAdapter?.();
506
+ if (!adapter) {
507
+ return err('Not connected to a product. Use qa_connect first — reading a journal needs a live agent.');
508
+ }
509
+ if (!adapter.readJournal) {
510
+ return err('This product has no recording journal.');
511
+ }
512
+ let draft;
513
+ try {
514
+ draft = deps.drafts.get(draftId);
515
+ }
516
+ catch (e) {
517
+ return err(describeError(e));
518
+ }
519
+ let view;
520
+ try {
521
+ view = await adapter.readJournal(recordingSessionId);
522
+ }
523
+ catch (e) {
524
+ return err(`Could not read journal for session "${recordingSessionId}": ${describeError(e)}`);
525
+ }
526
+ const skip = fromIndex ?? 0;
527
+ const toAppend = (view.steps ?? []).slice(skip);
528
+ if (toAppend.length === 0) {
529
+ return ok(`No new steps to append (journal had ${view.steps?.length ?? 0} steps, skipped ${skip}).`, { draftId, appended: 0, tc: draft.tc });
530
+ }
531
+ const ops = toAppend.map((step) => ({
532
+ op: 'add_step',
533
+ step: { ...step, n: undefined },
534
+ }));
535
+ try {
536
+ const updated = deps.drafts.applyOps(draftId, ops);
537
+ // The per-op TC_EDIT_INSERT events already streamed to the editor DURING recording;
538
+ // no re-emit here or the UI would double-render.
539
+ return ok(`Appended ${toAppend.length} recorded step(s) to draft ${draftId}. Call tc_save to persist.`, { draftId, appended: toAppend.length, tc: updated.tc });
540
+ }
541
+ catch (e) {
542
+ return err(describeError(e));
543
+ }
544
+ });
289
545
  server.registerTool('tc_save', {
290
546
  title: 'Save a draft test case to the product',
291
547
  description: 'Validate a draft, then PERSIST it to the connected product — creating a NEW test case, or ' +
@@ -344,6 +600,46 @@ export function registerTestcaseTools(server, deps) {
344
600
  'then retry tc_save.');
345
601
  }
346
602
  }
603
+ if (draft.tc.category === 'automated') {
604
+ // Every automation step needs a canonical actionType name + a stepType (technology). Without
605
+ // these the adapter's resolveAutomationSteps throws deep inside the multipart POST — cryptic
606
+ // for the caller. objectRef presence is action-dependent (launch has none, click needs one),
607
+ // so we leave that check to the resolver which has the catalog and knows objectRequired.
608
+ const stepIssues = [];
609
+ (draft.tc.steps ?? []).forEach((s, i) => {
610
+ if (!s.actionType)
611
+ stepIssues.push(`step ${i + 1}: missing actionType (e.g. "Click", "Type Text")`);
612
+ if (!s.stepType)
613
+ stepIssues.push(`step ${i + 1}: missing stepType (e.g. "web", "android", "mainframe")`);
614
+ });
615
+ if (stepIssues.length) {
616
+ return err(`Cannot save "${draft.tc.title}" — ${stepIssues.length} automation step issue(s):\n- ${stepIssues.join('\n- ')}\n` +
617
+ 'Automation steps must carry a canonical actionType + stepType. Recorded drafts get these ' +
618
+ 'from the recorder; hand-built drafts must set them via tc_draft_update. For a past recording, ' +
619
+ 'use tc_draft_from_journal({ sessionId }) to load its journal into a save-ready draft.');
620
+ }
621
+ }
622
+ // Optimistic-concurrency guard: refuse an UPDATE that would silently
623
+ // overwrite someone else's changes. `draft.tc.version` snapshotted at
624
+ // hydrate time (via tc_draft_from_tc / tc_edit_open) is compared against
625
+ // the CURRENT backend version; a mismatch means the TC moved between
626
+ // hydrate and save. Best-effort — the re-fetch failing is not a save
627
+ // blocker (backend transient issue vs. genuine drift are indistinguishable
628
+ // here, and the PUT itself will surface real errors).
629
+ if (draft.tc.id && draft.tc.version != null) {
630
+ try {
631
+ const current = await adapter.getTestCase(draft.tc.id);
632
+ if (current.version != null && current.version !== draft.tc.version) {
633
+ return err(`Cannot save "${draft.tc.title}" — TC ${draft.tc.id} was modified externally ` +
634
+ `since this draft was opened (version ${draft.tc.version} → ${current.version}). ` +
635
+ `Discard this draft with tc_draft_discard, then re-open with tc_edit_open / ` +
636
+ `tc_draft_from_tc to pick up the latest state, then re-apply your edits.`);
637
+ }
638
+ }
639
+ catch {
640
+ // Best-effort — proceed to the actual save if the version pre-check fails
641
+ }
642
+ }
347
643
  try {
348
644
  const isUpdate = !!draft.tc.id;
349
645
  const saved = isUpdate
@@ -358,13 +654,10 @@ export function registerTestcaseTools(server, deps) {
358
654
  }
359
655
  catch { /* draft already gone — nothing to bind */ }
360
656
  }
361
- // Saving a RECORDED draft through the MCP path: close that recording's live-steps window on the
362
- // agent so it doesn't linger behind the freshly-opened saved-TC window. Best-effort — only when
363
- // the draft came from a recording (has a sessionId) and an agent hop exists; never fails the save.
364
- // (A MANUAL save in the FE never reaches here, so those windows are left alone.)
365
- if (draft.sessionId && adapter.callRaw) {
366
- await adapter.callRaw('recording_window_close', { sessionId: draft.sessionId }).catch(() => { });
367
- }
657
+ // The /mcp-recorder window is torn down by core_close_session (RecordingSubAgent.close →
658
+ // ui.close), which is the ONE place windows close. tc_save no longer tries to close it
659
+ // per-save — the previous callRaw('recording_window_close', ...) had no handler anywhere and
660
+ // was a silently-swallowed no-op.
368
661
  const link = saved.productUrl ? `\n${saved.productUrl}` : '';
369
662
  return ok(`${isUpdate ? 'Updated' : 'Created'} test case ${saved.id}.${link}`, { saved, draftId: draft.draftId });
370
663
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testcase.tools.js","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA6BxE,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,wBAAwB,CACrC,QAA4B,EAC5B,GAAW,EACX,KAAa;IAEb,MAAM,IAAI,GAAG,QAAQ,IAAI,uBAAuB,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;uEAKuE;AACvE,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,OAAO,MAAM,OAAO,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACjF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;SAChD,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,KAAY;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,OAAO,GAAG;QACd,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK;QACrB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ;QAC3B,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,MAAe;QACrB,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;KAC7C,CAAC;IACF,OAAO,GAAG,OAAO,4BAA4B,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,IAAuB;IAC9E,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,sCAAsC;QAC7C,WAAW,EACT,gGAAgG;cAC9F,6FAA6F;cAC7F,4FAA4F;cAC5F,8DAA8D;QAClE,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;QACvG,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzE,MAAM,IAAI,GACR,GAAG,IAAI,CAAC,MAAM,eAAe,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;gBACrG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,4DAA4D;QACnE,WAAW,EACT,8FAA8F;YAC9F,+FAA+F;YAC/F,uFAAuF;YACvF,gDAAgD;YAChD,yFAAyF;YACzF,+FAA+F;YAC/F,8CAA8C;YAC9C,mCAAmC;YACnC,+FAA+F;YAC/F,yFAAyF;YACzF,wCAAwC;YACxC,6BAA6B;YAC7B,0FAA0F;YAC1F,4FAA4F;YAC5F,eAAe;QACjB,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SAC3E;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,4FAA4F,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAG,0EAA0E;YACtG,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,mGAAmG;YACnG,sGAAsG;YACtG,mEAAmE;YACnE,wGAAwG;YACxG,sGAAsG;YACtG,uBAAuB;YACvB,0GAA0G;YAC1G,+FAA+F;YAC/F,2GAA2G;YAC3G,6GAA6G;YAC7G,wGAAwG;YACxG,0GAA0G;YAC1G,mHAAmH;YACnH,6GAA6G;YAC7G,2GAA2G;YAC3G,mGAAmG;YACnG,+FAA+F;YAC/F,kGAAkG;YAClG,uGAAuG;YACvG,uGAAuG;YACvG,gGAAgG;YAChG,oGAAoG;YACpG,iGAAiG;YACjG,uCAAuC;QACzC,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC9B,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACtC,0FAA0F;gBACxF,yFAAyF,CAC5F;YACD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5C,wFAAwF;gBACtF,2FAA2F;gBAC3F,qCAAqC,CACxC;YACD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACxD,sFAAsF;gBACpF,6EAA6E;gBAC7E,8EAA8E,CACjF;SACF;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QAC1F,IAAI,CAAC;YACH,MAAM,EAAE,GAAa;gBACnB,KAAK;gBACL,QAAQ,EAAE,QAAQ,IAAI,QAAQ;gBAC9B,QAAQ,EAAE,QAAQ,IAAI,WAAW;gBACjC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,iEAAiE;gBACjE,8DAA8D;gBAC9D,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,CAAW;aAC/B,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,wJAAwJ;YACxJ,6KAA6K;YAC7K,yFAAyF;YACzF,oGAAoG;QACtG,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;KACpE,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAgB,CAAC,CAAC;YAC9D,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,0FAA0F;QACvG,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;QACpC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,0FAA0F;QACvG,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC,mBAAmB,OAAO,+BAA+B,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,sCAAsC;QAC7C,WAAW,EACT,6OAA6O;QAC/O,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACrC,2EAA2E;YAC3E,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACvC;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,uBAAuB,CAAC;YAChF,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,SAAS,KAAK,CAAC,OAAO,MAAM,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;YAEtF,0EAA0E;YAC1E,4EAA4E;YAC5E,4EAA4E;YAC5E,MAAM,UAAU,GACd,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrG,MAAM,aAAa,GAAG,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAE/F,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,EAAE,CACP,WAAW,KAAK,CAAC,EAAE,CAAC,KAAK,sCAAsC,OAAO,MAAM;oBAC1E,sCAAsC,GAAG,EAAE,EAC7C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CACxE,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,CACP,GAAG,GAAG,MAAM;gBACV,2BAA2B,KAAK,CAAC,EAAE,CAAC,KAAK,4FAA4F;gBACrI,GAAG,OAAO,EAAE,EACd,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAChE,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,SAAS,EACT;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,4FAA4F;YAC5F,iGAAiG;YACjG,oGAAoG;YACpG,iGAAiG;YACjG,kGAAkG;YAClG,oGAAoG;YACpG,4EAA4E;QAC9E,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC,EAAE;QACnG,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;KACrC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,oFAAoF,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAY,CAAC;QACjB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC,aAAa,OAAO,uFAAuF,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClH,OAAO,GAAG,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC,KAAK,OAAO,MAAM,CAAC,MAAM,0BAA0B,MAAM,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9B,IAAI,QAAQ,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;YAChE,OAAO,GAAG,CACR,gBAAgB,KAAK,CAAC,EAAE,CAAC,KAAK,uDAAuD;gBACnF,kFAAkF;gBAClF,+BAA+B,OAAO,4EAA4E;gBAClH,0BAA0B,CAC7B,CAAC;QACJ,CAAC;QACD,CAAC;YACC,MAAM,OAAO,GAAuC,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;oBACzE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtF,MAAM,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;oBAC/F,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;wBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5E,OAAO,GAAG,CACR,gBAAgB,KAAK,CAAC,EAAE,CAAC,KAAK,mDAAmD,OAAO,IAAI;oBAC1F,0FAA0F;oBAC1F,yFAAyF;oBACzF,qDAAqD;oBACrD,+BAA+B,OAAO,+CAA+C,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa;oBACtJ,qBAAqB,CACxB,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,QAAQ;gBACpB,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAY,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC/D,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3C,6FAA6F;YAC7F,iGAAiG;YACjG,6CAA6C;YAC7C,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;YAC9G,CAAC;YACD,gGAAgG;YAChG,gGAAgG;YAChG,mGAAmG;YACnG,iFAAiF;YACjF,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAClG,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,CACP,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,cAAc,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,EACnE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAClC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,6EAA6E;QACpF,WAAW,EACT,gGAAgG;YAChG,4FAA4F;YAC5F,wFAAwF;YACxF,gGAAgG;YAChG,oGAAoG;YACpG,kGAAkG;YAClG,oGAAoG;YACpG,8CAA8C;QAChD,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YAC1F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;SAC1G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;KACpC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAC9E,IAAI,MAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,6BAA6B,IAAI,MAAM,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,GAAG,CACR,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,8BAA8B,MAAM,CAAC,QAAQ,KAAK;gBAC1E,6GAA6G,CAChH,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,MAAM,aAAa,GAAG,CAAC,CAAqB,EAAsB,EAAE;YAClE,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7C,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aACtG,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC,EAAE,CAAC;YAChE,OAAO,GAAG,CACR,gBAAgB,MAAM,CAAC,KAAK,6DAA6D;gBACvF,+DAA+D,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,KAAK,SAAS;YACzC,CAAC,CAAC,eAAe,WAAW,wDAAwD;YACpF,CAAC,CAAC,+FAA+F,CAAC;QACpG,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS;YACvC,CAAC,CAAC,YAAY,QAAQ,sDAAsD;YAC5E,CAAC,CAAC,uEAAuE,CAAC;QAC5E,MAAM,KAAK,GACT,gEAAgE;YAChE,iBAAiB,MAAM,CAAC,KAAK,KAAK;YAClC,UAAU,SAAS,IAAI;YACvB,WAAW,UAAU,IAAI;YACzB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,oGAAoG,SAAS,MAAM;YACnH,uDAAuD;YACvD,gHAAgH;YAChH,6BAA6B,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,uEAAuE;YAChI,2EAA2E;YAC3E,yGAAyG;YACzG,2EAA2E;YAC3E,0FAA0F;YAC1F,8FAA8F;YAC9F,gFAAgF;YAChF,wFAAwF;YACxF,sDAAsD;YACtD,cAAc;YACd,+FAA+F;YAC/F,yFAAyF;YACzF,6CAA6C,IAAI,mBAAmB;YACpE,qHAAqH,CAAC;QACxH,OAAO,EAAE,CAAC,KAAK,EAAE;YACf,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,MAAM,CAAC,KAAK;YACzB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"testcase.tools.js","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"testdata.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testdata.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAiDF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAkQtF"}
1
+ {"version":3,"file":"testdata.tools.d.ts","sourceRoot":"","sources":["../../src/tools/testdata.tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAiDF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAsTtF"}
@@ -83,7 +83,16 @@ export function registerTestdataTools(server, deps) {
83
83
  'VERSIONS: SimplifyQA TCs can have multiple versions with different params/seeds. When the TC ' +
84
84
  'has more than one version and `versionId` is omitted, this tool REFUSES and lists the ' +
85
85
  'available versions — ASK the user which one, then call again with `versionId`. Pass ' +
86
- '`versionId: \'\'` to accept the TC\'s currently-selected version. Single-version TCs are read directly.',
86
+ '`versionId: \'\'` to accept the TC\'s currently-selected version. Single-version TCs are read directly.\n\n' +
87
+ 'FUNCTIONS: if a step in this TC calls a reusable FUNCTION, the `parameters` array (and the ' +
88
+ 'row list in this response\'s text) includes ONE extra row for it — a row whose "seed" is the ' +
89
+ 'function\'s NAME + VERSION, not its testdata (a called function\'s testdata is its own ' +
90
+ 'separate tc_get_testdata call, never guessed or fabricated here). It is a normal row in the ' +
91
+ 'SAME table as the TC\'s own parameters — do not pull it out into separate prose afterward. ' +
92
+ 'When one or more functions were called, this response ALSO ends with an explicit prompt ' +
93
+ 'listing each one and the exact tc_get_testdata args to fetch its testdata — ASK the user ' +
94
+ 'which (if any) they want BEFORE calling tc_get_testdata again for a function; do not fetch ' +
95
+ 'one unprompted, and do not skip the ask just because there is only one.',
87
96
  inputSchema: {
88
97
  tcId: z.string().describe('Test case id (or business key like TC_123).'),
89
98
  environmentType: z.string().optional()
@@ -118,21 +127,66 @@ export function registerTestdataTools(server, deps) {
118
127
  ...(vsel.versionId !== undefined ? { versionId: vsel.versionId } : {}),
119
128
  ...(environmentType !== undefined ? { environmentType } : {}),
120
129
  });
121
- if (!tpl.parameters?.length) {
130
+ // List called functions by NAME + VERSION only — their own testdata lives in a separate
131
+ // row (a separate tc_get_testdata call against that function), never fetched or guessed here.
132
+ let calledFunctions = [];
133
+ try {
134
+ const tc = await adapter.getTestCase(tcId, tpl.versionId);
135
+ const seen = new Set();
136
+ for (const s of tc.steps) {
137
+ const fc = s.functionCall;
138
+ if (!fc?.testCaseId)
139
+ continue;
140
+ const key = `${fc.testCaseId}::${fc.versionId ?? ''}`;
141
+ if (seen.has(key))
142
+ continue;
143
+ seen.add(key);
144
+ calledFunctions.push({
145
+ id: fc.testCaseId,
146
+ ...(fc.testCaseCode ? { code: fc.testCaseCode } : {}),
147
+ ...(fc.testCaseName ? { name: fc.testCaseName } : {}),
148
+ ...(fc.versionId ? { versionId: fc.versionId } : {}),
149
+ ...(fc.versionName ? { versionName: fc.versionName } : {}),
150
+ });
151
+ }
152
+ }
153
+ catch {
154
+ // Best-effort — a TC's own testdata is still useful without the called-function list.
155
+ }
156
+ // Synthetic ROWS added directly into the SAME `parameters` array the TC's own fields are
157
+ // in (paramId is a negative sentinel — never a real backend param id) so a called function
158
+ // is structurally IDENTICAL to a real row wherever this array gets rendered as a table,
159
+ // instead of living in a side-channel field that a renderer would show separately.
160
+ const fnParamRows = calledFunctions.map((f, i) => ({
161
+ paramId: -1 - i,
162
+ name: `${[f.code, f.name].filter(Boolean).join(' - ') || f.id} (called function)`,
163
+ seed: f.versionName ?? f.versionId ?? 'current',
164
+ }));
165
+ const displayParams = [...tpl.parameters, ...fnParamRows];
166
+ if (!displayParams.length) {
122
167
  return ok(`Test case "${tcId}" has no parameterized fields in env "${tpl.environmentType}" — nothing to generate.`, { tcId, parameters: [] });
123
168
  }
169
+ const fnAskNote = calledFunctions.length
170
+ ? `\n\nASK the user which called function's testdata they want (do not guess or fetch one unasked):\n` +
171
+ calledFunctions
172
+ .map((f) => `- ${[f.code, f.name].filter(Boolean).join(' - ') || f.id} (${f.versionName ?? f.versionId ?? 'current'}) — ` +
173
+ `call tc_get_testdata again with tcId: "${f.id}"${f.versionId ? `, versionId: "${f.versionId}"` : ''}, ` +
174
+ `environmentType: "${tpl.environmentType}"`)
175
+ .join('\n')
176
+ : '';
124
177
  const text = `Testdata template for ${tcId} · env ${tpl.environmentType} · version ${tpl.versionId}\n` +
125
- `${tpl.parameters.length} parameter(s):\n` +
126
- tpl.parameters
178
+ `${displayParams.length} row(s)${fnParamRows.length ? ` (${fnParamRows.length} of these is a called function's name + version, not its testdata)` : ''}:\n` +
179
+ displayParams
127
180
  .map((p) => p.protected
128
181
  ? `- ${p.name} = ${p.seed} [PROTECTED — value hidden, not exposed by this tool]`
129
182
  : `- ${p.name} = "${p.seed}"`)
130
- .join('\n');
183
+ .join('\n') +
184
+ fnAskNote;
131
185
  return ok(text, {
132
186
  tcId,
133
187
  versionId: tpl.versionId,
134
188
  environmentType: tpl.environmentType,
135
- parameters: tpl.parameters,
189
+ parameters: displayParams,
136
190
  });
137
191
  }
138
192
  catch (e) {