common-qa-mcp 0.3.0 → 0.4.1
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/factory.d.ts +1 -1
- package/dist/adapters/factory.d.ts.map +1 -1
- package/dist/adapters/factory.js +12 -29
- package/dist/adapters/factory.js.map +1 -1
- package/dist/adapters/http.js +2 -3
- package/dist/adapters/http.js.map +1 -1
- package/dist/adapters/remoteMcp/adapter.d.ts +7 -2
- package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -1
- package/dist/adapters/remoteMcp/adapter.js +9 -3
- package/dist/adapters/remoteMcp/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/adapter.d.ts +309 -23
- package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/adapter.js +2042 -86
- package/dist/adapters/simplifyqa/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/mapper.d.ts +43 -11
- package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -1
- package/dist/adapters/simplifyqa/mapper.js +470 -21
- package/dist/adapters/simplifyqa/mapper.js.map +1 -1
- package/dist/adapters/types.d.ts +126 -5
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/walnut/adapter.d.ts +6 -2
- package/dist/adapters/walnut/adapter.d.ts.map +1 -1
- package/dist/adapters/walnut/adapter.js +33 -2
- package/dist/adapters/walnut/adapter.js.map +1 -1
- package/dist/adapters/walnut/mapper.d.ts +2 -1
- package/dist/adapters/walnut/mapper.d.ts.map +1 -1
- package/dist/adapters/walnut/mapper.js +13 -0
- package/dist/adapters/walnut/mapper.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -0
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +15 -7
- package/dist/connection.js.map +1 -1
- package/dist/domain/types.d.ts +485 -4
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/initAgents.d.ts.map +1 -1
- package/dist/initAgents.js +22 -9
- package/dist/initAgents.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +23 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/backlog.tools.d.ts +13 -0
- package/dist/tools/backlog.tools.d.ts.map +1 -0
- package/dist/tools/backlog.tools.js +399 -0
- package/dist/tools/backlog.tools.js.map +1 -0
- package/dist/tools/defects.tools.d.ts +7 -0
- package/dist/tools/defects.tools.d.ts.map +1 -0
- package/dist/tools/defects.tools.js +82 -0
- package/dist/tools/defects.tools.js.map +1 -0
- package/dist/tools/discovery.tools.d.ts.map +1 -1
- package/dist/tools/discovery.tools.js +912 -55
- package/dist/tools/discovery.tools.js.map +1 -1
- package/dist/tools/markdown.d.ts +3 -3
- package/dist/tools/markdown.d.ts.map +1 -1
- package/dist/tools/markdown.js +89 -18
- package/dist/tools/markdown.js.map +1 -1
- package/dist/tools/objects.tools.d.ts +7 -0
- package/dist/tools/objects.tools.d.ts.map +1 -0
- package/dist/tools/objects.tools.js +201 -0
- package/dist/tools/objects.tools.js.map +1 -0
- package/dist/tools/recording.tools.d.ts.map +1 -1
- package/dist/tools/recording.tools.js +64 -5
- 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 +102 -18
- package/dist/tools/run.tools.js.map +1 -1
- package/dist/tools/schemas.d.ts +21 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +14 -1
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/tasks.tools.d.ts +7 -0
- package/dist/tools/tasks.tools.d.ts.map +1 -0
- package/dist/tools/tasks.tools.js +75 -0
- package/dist/tools/tasks.tools.js.map +1 -0
- package/dist/tools/testcase.tools.d.ts.map +1 -1
- package/dist/tools/testcase.tools.js +146 -100
- 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 +99 -11
- package/dist/tools/testdata.tools.js.map +1 -1
- package/package.json +3 -3
|
@@ -109,25 +109,62 @@ export function registerTestcaseTools(server, deps) {
|
|
|
109
109
|
return err(describeError(e));
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
|
+
server.registerTool('tc_draft_from_tc', {
|
|
113
|
+
title: 'Load an existing test case as a draft for in-place editing',
|
|
114
|
+
description: 'Fetch a REAL test case from the connected product and hydrate it into a draft, carrying the ' +
|
|
115
|
+
"original tcId. Because the draft carries the id, a later `tc_save({ draftId })` UPDATES that " +
|
|
116
|
+
'SAME test case (preserving id, run history, parameters, testdata bindings, and suite ' +
|
|
117
|
+
'membership) instead of creating a sibling.\n\n' +
|
|
118
|
+
'Use this to apply a `story_sync_testcases` drift report:\n' +
|
|
119
|
+
' 1. tc_draft_from_tc({ tcId })\n' +
|
|
120
|
+
' 2. tc_draft_update({ draftId, ops: <filtered proposedOps> })\n' +
|
|
121
|
+
' 3. tc_save({ draftId })\n' +
|
|
122
|
+
'Requires a live connection (qa_connect).',
|
|
123
|
+
inputSchema: {
|
|
124
|
+
tcId: z.string().describe('The existing test-case id to load as a draft.'),
|
|
125
|
+
},
|
|
126
|
+
}, async ({ tcId }) => {
|
|
127
|
+
const adapter = deps.getAdapter?.();
|
|
128
|
+
if (!adapter) {
|
|
129
|
+
return err('Not connected to a product. Use qa_connect first — loading a real TC needs a live backend.');
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const tc = await adapter.getTestCase(tcId);
|
|
133
|
+
if (!tc.id)
|
|
134
|
+
tc.id = tcId; // adapter contract guarantees id, but belt-and-braces for the update path
|
|
135
|
+
const draftId = deps.drafts.create(tc);
|
|
136
|
+
return draftResult(deps.drafts.get(draftId));
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
return err(describeError(e));
|
|
140
|
+
}
|
|
141
|
+
});
|
|
112
142
|
server.registerTool('tc_draft_create', {
|
|
113
143
|
title: 'Create a test-case draft',
|
|
114
|
-
description: '
|
|
144
|
+
description: 'MANUAL-ONLY authoring. Call this when the user asked for a MANUAL test case: they said "manual", ' +
|
|
145
|
+
'"draft only", "plain prose", "no automation", or asked to cover a user story\'s acceptance criteria ' +
|
|
146
|
+
'as manual cases. For those, this IS the right tool — call it.\n\n' +
|
|
147
|
+
'Do NOT use for automated tests. "create a test case", "record this flow", "add a test for X" (with no ' +
|
|
148
|
+
'"manual" qualifier) mean AUTOMATED — route to the `web` / `mainframe` sub-agent to RECORD with real ' +
|
|
149
|
+
'locators instead.\n\n' +
|
|
150
|
+
'Create a new in-memory test-case draft from steps you author yourself. Nothing is persisted -- no disk, ' +
|
|
115
151
|
'no backend, no network. Use tc_draft_open to hand it to the test-case editor for viewing.\n\n' +
|
|
116
152
|
'DO NOT USE THIS FOR A REAL WEB APPLICATION. Steps written here have no locators, so the test case cannot ' +
|
|
117
153
|
'execute -- it only reads plausibly. Whenever there is an app you can reach (the user gives a URL, names an ' +
|
|
118
|
-
'environment, or asks for a test of a real flow), call `
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'
|
|
122
|
-
'
|
|
123
|
-
'
|
|
124
|
-
'
|
|
125
|
-
'
|
|
126
|
-
'
|
|
127
|
-
'
|
|
128
|
-
|
|
129
|
-
'
|
|
130
|
-
'
|
|
154
|
+
'environment, or asks for a test of a real flow), call the `web` sub-agent instead: that captures real ' +
|
|
155
|
+
'locators, real element names and real parameters, and is the DEFAULT way to create a web test case. You ' +
|
|
156
|
+
'do not need the user to say "record" -- if a test case for a real app is wanted, recording is how it is made.\n\n' +
|
|
157
|
+
'Legitimate uses: a MANUAL test case the user explicitly asked for (no automation), API/database steps that ' +
|
|
158
|
+
'need no element binding, restructuring or drafting steps the user supplied verbatim, or sketching a plan ' +
|
|
159
|
+
'when no app is reachable -- and say plainly that the result is not executable until recorded.\n\n' +
|
|
160
|
+
'PARAMETERISE EVERY DYNAMIC VALUE — this is mandatory for manual test cases whenever the step ' +
|
|
161
|
+
'names a URL, credential, product name, form value, expected string, or anything the tester will ' +
|
|
162
|
+
'type / compare. Instead of hard-coding "Enter admin in the Username field", write "Enter ${username} ' +
|
|
163
|
+
'in the Username field" and pass `data: { username: "admin" }` at the TC level. Every `${name}` token ' +
|
|
164
|
+
'becomes a Local parameter in the product and the value from `data` populates the test case\'s ' +
|
|
165
|
+
'default test-data row (ITR-1) automatically. Steps with no `${...}` tokens create no parameters — ' +
|
|
166
|
+
'that is only correct for pure checklist verifications ("verify heading is visible"). If a step ' +
|
|
167
|
+
'references a real value, tokenise it.',
|
|
131
168
|
inputSchema: {
|
|
132
169
|
title: z.string().min(1),
|
|
133
170
|
priority: zPriority.optional(),
|
|
@@ -139,8 +176,11 @@ export function registerTestcaseTools(server, deps) {
|
|
|
139
176
|
'list_modules). ASK the user which module before drafting; SimplifyQA files test cases in ' +
|
|
140
177
|
'a module tree. Walnut ignores this.'),
|
|
141
178
|
steps: z.array(zNewStep).optional(),
|
|
179
|
+
data: z.record(z.string(), z.string()).optional().describe('Default values for the `${name}` tokens in step descriptions — one entry per token. ' +
|
|
180
|
+
'Populates the auto-created default test-data row (ITR-1) on save. Example: ' +
|
|
181
|
+
'`{ username: "admin", password: "admin123", url: "https://saucedemo.com" }`.'),
|
|
142
182
|
},
|
|
143
|
-
}, async ({ title, priority, category, description, storyRef, folderOrModule, steps }) => {
|
|
183
|
+
}, async ({ title, priority, category, description, storyRef, folderOrModule, steps, data }) => {
|
|
144
184
|
try {
|
|
145
185
|
const tc = {
|
|
146
186
|
title,
|
|
@@ -149,6 +189,7 @@ export function registerTestcaseTools(server, deps) {
|
|
|
149
189
|
...(description ? { description } : {}),
|
|
150
190
|
...(storyRef ? { storyRef } : {}),
|
|
151
191
|
...(folderOrModule ? { folderOrModule } : {}),
|
|
192
|
+
...(data ? { data } : {}),
|
|
152
193
|
// zod (zNewStep) is the runtime gate on shape; DraftStore.create
|
|
153
194
|
// assigns real step numbers regardless of what's passed here.
|
|
154
195
|
steps: (steps ?? []),
|
|
@@ -162,7 +203,10 @@ export function registerTestcaseTools(server, deps) {
|
|
|
162
203
|
});
|
|
163
204
|
server.registerTool('tc_draft_update', {
|
|
164
205
|
title: 'Update a test-case draft',
|
|
165
|
-
description: 'Apply one or more ops (set_meta | add_step | update_step | remove_step | move_step) to a draft. Steps renumber contiguously from 1 after every op
|
|
206
|
+
description: 'Apply one or more ops (set_meta | add_step | update_step | remove_step | move_step) to a draft. Steps renumber contiguously from 1 after every op.\n\n' +
|
|
207
|
+
'STEP TYPE — for add_step / update_step on a MANUAL test case (tc.category === "manual", or every existing step arrived with stepType "manual"), pass `stepType: "manual"`. ' +
|
|
208
|
+
'For an AUTOMATED test case pick the execution technology ("web", "api", "android", …). ' +
|
|
209
|
+
'Getting this wrong routes the row to the wrong UI card and it renders blank in the desktop viewer.',
|
|
166
210
|
inputSchema: { draftId: z.string(), ops: z.array(zDraftOp).min(1) },
|
|
167
211
|
}, async ({ draftId, ops }) => {
|
|
168
212
|
try {
|
|
@@ -261,6 +305,30 @@ export function registerTestcaseTools(server, deps) {
|
|
|
261
305
|
const detail = issues.map((i) => `- step ${i.step ?? '-'}${i.field ? ` (${i.field})` : ''}: ${i.msg}`).join('\n');
|
|
262
306
|
return err(`Cannot save "${draft.tc.title}" — ${issues.length} validation issue(s):\n${detail}`);
|
|
263
307
|
}
|
|
308
|
+
const isCreate = !draft.tc.id;
|
|
309
|
+
if (isCreate && adapter.listModules && !draft.tc.folderOrModule) {
|
|
310
|
+
return err(`Cannot save "${draft.tc.title}" — SimplifyQA files every test case under a module. ` +
|
|
311
|
+
'Call list_modules, ASK the user which module to file this test case under, then ' +
|
|
312
|
+
`tc_draft_update({ draftId: "${draftId}", ops: [{ op: "set_meta", patch: { folderOrModule: "<module id>" } }] }) ` +
|
|
313
|
+
'before retrying tc_save.');
|
|
314
|
+
}
|
|
315
|
+
if (draft.tc.category === 'manual') {
|
|
316
|
+
const tokens = new Set();
|
|
317
|
+
for (const s of draft.tc.steps ?? []) {
|
|
318
|
+
for (const m of (s.description ?? '').matchAll(/\$\{([A-Za-z0-9_]+)\}/g)) {
|
|
319
|
+
tokens.add(m[1]);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const data = draft.tc.data ?? {};
|
|
323
|
+
const missing = [...tokens].filter((n) => !Object.prototype.hasOwnProperty.call(data, n) || data[n] === '');
|
|
324
|
+
if (missing.length) {
|
|
325
|
+
return err(`Cannot save "${draft.tc.title}" — these step tokens have no value in \`data\`: ${missing.map((n) => '${' + n + '}').join(', ')}. ` +
|
|
326
|
+
'Every \`${name}\` token in a manual step description MUST have a default value in the TC\'s \`data\` map, ' +
|
|
327
|
+
'or the auto-created test-data row (ITR-1) lands with empty cells. Update the draft: ' +
|
|
328
|
+
`tc_draft_update({ draftId: "${draftId}", ops: [{ op: "set_meta", patch: { data: { ${missing.map((n) => `${n}: "<value>"`).join(', ')} } } }] }) ` +
|
|
329
|
+
'then retry tc_save.');
|
|
330
|
+
}
|
|
331
|
+
}
|
|
264
332
|
try {
|
|
265
333
|
const isUpdate = !!draft.tc.id;
|
|
266
334
|
const saved = isUpdate
|
|
@@ -290,27 +358,25 @@ export function registerTestcaseTools(server, deps) {
|
|
|
290
358
|
}
|
|
291
359
|
});
|
|
292
360
|
server.registerTool('tc_automate', {
|
|
293
|
-
title: '
|
|
294
|
-
description: '
|
|
295
|
-
|
|
296
|
-
'
|
|
297
|
-
'
|
|
298
|
-
'
|
|
299
|
-
'
|
|
300
|
-
'
|
|
361
|
+
title: 'Turn a manual test case into a recording guide (creates a NEW automated TC)',
|
|
362
|
+
description: 'Read an EXISTING MANUAL test case and return a recording guide the model uses to drive a live ' +
|
|
363
|
+
"recording via the connected agent's granular tools (web_launch_application, web_snapshot, " +
|
|
364
|
+
'web_click, web_enter_text, …, core_close_session). The Electron recorder window opens ' +
|
|
365
|
+
'automatically on web_launch_application; each captured step streams into it. The user reviews ' +
|
|
366
|
+
'and clicks Save in the recorder — that CREATES A NEW automated test case (via POST /tm/testcase); ' +
|
|
367
|
+
'the source manual TC is left untouched. Pass `url` unless the manual steps already contain one, ' +
|
|
368
|
+
'and `extra` for credentials / data / what to assert. Read-only from MCP: this tool composes text, ' +
|
|
369
|
+
'it never writes. Requires a live connection.',
|
|
301
370
|
inputSchema: {
|
|
302
371
|
tcId: z.string().describe('The manual test case id (or business key TC_123) to automate.'),
|
|
303
372
|
url: z.string().optional().describe('Starting URL for the recording (the app under test).'),
|
|
304
|
-
|
|
305
|
-
extra: z.string().optional().describe('Extra guidance for the recorder: credentials, data, assertions.'),
|
|
373
|
+
extra: z.string().optional().describe('Extra guidance for the recording: credentials, data, assertions.'),
|
|
306
374
|
},
|
|
307
|
-
annotations: { readOnlyHint:
|
|
308
|
-
}, async ({ tcId, url,
|
|
375
|
+
annotations: { readOnlyHint: true },
|
|
376
|
+
}, async ({ tcId, url, extra }) => {
|
|
309
377
|
const adapter = deps.getAdapter?.();
|
|
310
378
|
if (!adapter)
|
|
311
379
|
return err('Not connected to a product. Use qa_connect first.');
|
|
312
|
-
if (!adapter.callRaw)
|
|
313
|
-
return err('This product agent does not expose recording — cannot automate here.');
|
|
314
380
|
let source;
|
|
315
381
|
try {
|
|
316
382
|
source = await adapter.getTestCase(tcId);
|
|
@@ -318,82 +384,62 @@ export function registerTestcaseTools(server, deps) {
|
|
|
318
384
|
catch (e) {
|
|
319
385
|
return err(`Could not read test case "${tcId}": ${describeError(e)}`);
|
|
320
386
|
}
|
|
321
|
-
|
|
387
|
+
if (source.category !== 'manual') {
|
|
388
|
+
return err(`"${source.title}" (${tcId}) is not manual (category: ${source.category}). ` +
|
|
389
|
+
'tc_automate promotes MANUAL → automated. To re-record an automated TC, record + tc_save with a fresh title.');
|
|
390
|
+
}
|
|
391
|
+
// "US_7" → 7, "7" → 7, "MOD_12" → 12. Absent → undefined (don't invent).
|
|
392
|
+
const numericSuffix = (s) => {
|
|
393
|
+
if (!s)
|
|
394
|
+
return undefined;
|
|
395
|
+
const m = s.match(/(\d+)$/);
|
|
396
|
+
return m ? parseInt(m[1], 10) : undefined;
|
|
397
|
+
};
|
|
398
|
+
const userstoryId = numericSuffix(source.storyRef);
|
|
399
|
+
const moduleId = numericSuffix(source.folderOrModule);
|
|
322
400
|
const stepLines = source.steps
|
|
323
401
|
.map((s, i) => `${i + 1}. ${s.description}${s.expectedResult ? ` (expect: ${s.expectedResult})` : ''}`)
|
|
324
402
|
.join('\n');
|
|
325
|
-
|
|
326
|
-
`Test case: ${source.title}\n` +
|
|
327
|
-
(source.preconditions ? `Preconditions: ${source.preconditions}\n` : '') +
|
|
328
|
-
(url ? `Start URL: ${url}\n` : '') +
|
|
329
|
-
(extra ? `${extra}\n` : '') +
|
|
330
|
-
`\nSteps:\n${stepLines}`;
|
|
331
|
-
if (!url && !/https?:\/\//.test(task)) {
|
|
403
|
+
if (!url && !/https?:\/\//.test(`${extra ?? ''}\n${stepLines}`)) {
|
|
332
404
|
return err(`To automate "${source.title}" I need the app URL — the manual steps don't contain one. ` +
|
|
333
405
|
'Call again with `url` (and any credentials/data via `extra`).');
|
|
334
406
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}
|
|
372
|
-
// else still 'recording' → keep polling
|
|
373
|
-
}
|
|
374
|
-
if (!recorded || !recorded.steps?.length) {
|
|
375
|
-
return err(`The recording for "${source.title}" is still running (session ${sessionId}) or produced no steps. ` +
|
|
376
|
-
`Poll web_status({ sessionId: "${sessionId}" }); once it's done, retry tc_automate.`);
|
|
377
|
-
}
|
|
378
|
-
// Promote IN PLACE: same id, recorded steps, category automated, story link + metadata kept.
|
|
379
|
-
const promoted = {
|
|
380
|
-
...recorded,
|
|
381
|
-
id: tcId,
|
|
382
|
-
title: source.title,
|
|
383
|
-
priority: source.priority,
|
|
384
|
-
category: 'automated',
|
|
385
|
-
...(source.description ? { description: source.description } : {}),
|
|
386
|
-
...(source.storyRef ? { storyRef: source.storyRef } : {}),
|
|
387
|
-
};
|
|
388
|
-
try {
|
|
389
|
-
const saved = await adapter.updateTestCase(tcId, promoted);
|
|
390
|
-
const link = saved.productUrl ? `\n${saved.productUrl}` : '';
|
|
391
|
-
return ok(`Automated "${source.title}" (${tcId}) — recorded ${recorded.steps.length} step(s) and saved it ` +
|
|
392
|
-
`as AUTOMATED in place${source.storyRef ? ', keeping the story link' : ''}.${link}`, { saved, recordedStepCount: recorded.steps.length });
|
|
393
|
-
}
|
|
394
|
-
catch (e) {
|
|
395
|
-
return err(`Recorded the flow but saving the automated version failed: ${describeError(e)}`);
|
|
396
|
-
}
|
|
407
|
+
const storyLine = userstoryId !== undefined
|
|
408
|
+
? `userstoryId:${userstoryId} — is already selected in the recorder's story picker.`
|
|
409
|
+
: 'no story on source — will need to be picked at Save in the recorder if the user wants a link.';
|
|
410
|
+
const moduleLine = moduleId !== undefined
|
|
411
|
+
? `moduleId:${moduleId} — is already selected in the recorder's module bar.`
|
|
412
|
+
: 'no module on source — the user picks one in the recorder before Save.';
|
|
413
|
+
const guide = 'Automate this manual test case by recording it end-to-end.\n\n' +
|
|
414
|
+
`testcaseName:"${source.title}"\n` +
|
|
415
|
+
`Story: ${storyLine}\n` +
|
|
416
|
+
`Module: ${moduleLine}\n` +
|
|
417
|
+
(source.preconditions ? `Preconditions: ${source.preconditions}\n` : '') +
|
|
418
|
+
(url ? `Start URL: ${url}\n` : '') +
|
|
419
|
+
(extra ? `${extra}\n` : '') +
|
|
420
|
+
`\nManual steps (guide only — do not paste verbatim; each granular action captures a real step):\n${stepLines}\n\n` +
|
|
421
|
+
'── Recording tools (call on the connected agent) ──\n' +
|
|
422
|
+
'1. core_activate_technology({ technology: "WEB", testcaseName, userstoryId?, moduleId? }) — session context.\n' +
|
|
423
|
+
`2. web_launch_application(${url ? `"${url}"` : '{ url }'}) — must be FIRST browser call; opens the Electron recorder window.\n` +
|
|
424
|
+
'3. web_snapshot() — call BEFORE every action to get fresh element refs.\n' +
|
|
425
|
+
'4. web_click({ ref }) / web_enter_text({ ref, value }) / web_select_item_from_dropdown({ ref, item })\n' +
|
|
426
|
+
' web_check_if_not_checked({ ref }) / web_un_check_if_checked({ ref })\n' +
|
|
427
|
+
' web_validate_text({ ref, expected }) / web_validate_partial_text({ ref, expected })\n' +
|
|
428
|
+
' web_keyboard_action({ keys, ref? }) / web_wait_until_element_present({ ref, timeout? })\n' +
|
|
429
|
+
' Tab / iframe: web_switch_to_tab, web_switch_to_parent_tab, web_close_tab,\n' +
|
|
430
|
+
' web_switch_to_iframe, web_switch_to_parent_iframe, web_switch_to_default_content.\n' +
|
|
431
|
+
'5. core_close_session() — when the flow is done.\n\n' +
|
|
432
|
+
'── Save ──\n' +
|
|
433
|
+
'The recorder window streams each step as it is captured. When done, STOP and ask the user to ' +
|
|
434
|
+
'review the step cards and click Save Testcase in the recorder. That save CREATES A NEW ' +
|
|
435
|
+
`automated test case; the source manual TC ${tcId} stays as-is.\n\n` +
|
|
436
|
+
'Do NOT call tc_save / update_testcase / journal_modify from MCP in this flow — the recorder UI is the persist step.';
|
|
437
|
+
return ok(guide, {
|
|
438
|
+
sourceTcId: tcId,
|
|
439
|
+
sourceTitle: source.title,
|
|
440
|
+
...(userstoryId !== undefined ? { userstoryId } : {}),
|
|
441
|
+
...(moduleId !== undefined ? { moduleId } : {}),
|
|
442
|
+
});
|
|
397
443
|
});
|
|
398
444
|
}
|
|
399
445
|
//# sourceMappingURL=testcase.tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcase.tools.js","sourceRoot":"","sources":["../../src/tools/testcase.tools.ts"],"names":[],"mappings":"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"}
|
|
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;
|
|
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;AA2BF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA0OtF"}
|
|
@@ -3,18 +3,70 @@ import { ok, err } from '../mcpResult.js';
|
|
|
3
3
|
function describeError(e) {
|
|
4
4
|
return e instanceof Error ? e.message : String(e);
|
|
5
5
|
}
|
|
6
|
+
/** Reject an `environmentType` that doesn't match a real configured env. Null means accepted
|
|
7
|
+
* (a match, or listing wasn't possible — the adapter's own call is then the judge). */
|
|
8
|
+
async function rejectUnlistedEnv(adapter, environmentType) {
|
|
9
|
+
let envs;
|
|
10
|
+
try {
|
|
11
|
+
envs = await adapter.listEnvironments();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
if (!envs.length)
|
|
17
|
+
return null;
|
|
18
|
+
const wanted = environmentType.trim().toLowerCase();
|
|
19
|
+
const match = envs.some((e) => (e.key ?? e.id)?.toLowerCase() === wanted);
|
|
20
|
+
if (match)
|
|
21
|
+
return null;
|
|
22
|
+
const options = envs.map((e) => `${e.name} · key: ${e.key ?? e.id}`).join(', ');
|
|
23
|
+
return (`"${environmentType}" is not a configured environment for this project — configured options are: ` +
|
|
24
|
+
`${options}. Call tc_list_environments, show these to the user, ask which one, and retry with the ` +
|
|
25
|
+
'real `key` value (don\'t guess or reuse a value from a different project).');
|
|
26
|
+
}
|
|
6
27
|
export function registerTestdataTools(server, deps) {
|
|
28
|
+
server.registerTool('tc_list_environments', {
|
|
29
|
+
title: 'List environments configured for the connected project',
|
|
30
|
+
description: 'List every environment configured for the currently connected project (e.g. general, staging, ' +
|
|
31
|
+
'production). Testdata is stored PER ENVIRONMENT — each env has its own iteration rows. ALWAYS ' +
|
|
32
|
+
'call this before tc_get_testdata / tc_generate_testdata, show the user the options, and ASK which ' +
|
|
33
|
+
'env they want to generate testdata for. Never assume. The value to pass onward as ' +
|
|
34
|
+
'`environmentType` is the `key` field on each returned env.',
|
|
35
|
+
inputSchema: {},
|
|
36
|
+
annotations: { readOnlyHint: true },
|
|
37
|
+
}, async () => {
|
|
38
|
+
const adapter = deps.getAdapter?.();
|
|
39
|
+
if (!adapter)
|
|
40
|
+
return err('Not connected to a product. Use qa_connect first.');
|
|
41
|
+
try {
|
|
42
|
+
const envs = await adapter.listEnvironments();
|
|
43
|
+
if (!envs.length) {
|
|
44
|
+
return ok('This project reports zero configured environments. Do NOT assume "general" — confirm ' +
|
|
45
|
+
'with the user before calling tc_get_testdata / tc_generate_testdata, since environments ' +
|
|
46
|
+
'may exist under a different key than expected.', { environments: [] });
|
|
47
|
+
}
|
|
48
|
+
const text = `${envs.length} environment${envs.length === 1 ? '' : 's'} configured — ask the user which ` +
|
|
49
|
+
`one, even if there is only one option, since "general" is not guaranteed to be among them:\n\n` +
|
|
50
|
+
envs.map((e) => `- ${e.name}${e.isDefault ? ' (default)' : ''} · key: ${e.key ?? e.id}`).join('\n');
|
|
51
|
+
return ok(text, { environments: envs });
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
return err(`Could not list environments: ${describeError(e)}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
7
57
|
server.registerTool('tc_get_testdata', {
|
|
8
58
|
title: 'Read the current testdata template for a test case',
|
|
9
|
-
description: 'Fetch the default iteration (template row) for TC `tcId`
|
|
10
|
-
'CURRENT seed values.
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'
|
|
59
|
+
description: 'Fetch the default iteration (template row) for TC `tcId` in a specific environment — the ' +
|
|
60
|
+
'parameter list plus the CURRENT seed values. Testdata is per-env: seeds may differ across ' +
|
|
61
|
+
'envs. `environmentType` is REQUIRED — this tool refuses when it is omitted, since silently ' +
|
|
62
|
+
'guessing an env previously caused false "testdata not found" results. FIRST call ' +
|
|
63
|
+
'tc_list_environments and ask the user which env they want. Then read the template here, and ' +
|
|
64
|
+
'use the seeds + the test case\'s steps (from tc_get) to reason about realistic values before ' +
|
|
65
|
+
'calling tc_generate_testdata.',
|
|
14
66
|
inputSchema: {
|
|
15
67
|
tcId: z.string().describe('Test case id (or business key like TC_123).'),
|
|
16
68
|
environmentType: z.string().optional()
|
|
17
|
-
.describe('Env key
|
|
69
|
+
.describe('Env `key` (from tc_list_environments). REQUIRED — this tool refuses when omitted. Ask the user which env before reading testdata.'),
|
|
18
70
|
},
|
|
19
71
|
annotations: { readOnlyHint: true },
|
|
20
72
|
}, async ({ tcId, environmentType }) => {
|
|
@@ -24,6 +76,15 @@ export function registerTestdataTools(server, deps) {
|
|
|
24
76
|
if (!adapter.getDefaultIteration) {
|
|
25
77
|
return err('This provider does not expose a testdata store.');
|
|
26
78
|
}
|
|
79
|
+
if (!environmentType || !environmentType.trim()) {
|
|
80
|
+
return err('environmentType is required — testdata is stored per environment and this tool refuses to ' +
|
|
81
|
+
'guess (a silent guess previously produced false "testdata not found" results). Call ' +
|
|
82
|
+
'tc_list_environments, show the user the options, ask which env, then call tc_get_testdata ' +
|
|
83
|
+
'again with that env `key` as `environmentType`.');
|
|
84
|
+
}
|
|
85
|
+
const envError = await rejectUnlistedEnv(adapter, environmentType);
|
|
86
|
+
if (envError)
|
|
87
|
+
return err(envError);
|
|
27
88
|
try {
|
|
28
89
|
const tpl = await adapter.getDefaultIteration({
|
|
29
90
|
tcId,
|
|
@@ -34,7 +95,11 @@ export function registerTestdataTools(server, deps) {
|
|
|
34
95
|
}
|
|
35
96
|
const text = `Testdata template for ${tcId} · env ${tpl.environmentType} · version ${tpl.versionId}\n` +
|
|
36
97
|
`${tpl.parameters.length} parameter(s):\n` +
|
|
37
|
-
tpl.parameters
|
|
98
|
+
tpl.parameters
|
|
99
|
+
.map((p) => p.protected
|
|
100
|
+
? `- ${p.name} = ${p.seed} [PROTECTED — value hidden, not exposed by this tool]`
|
|
101
|
+
: `- ${p.name} = "${p.seed}"`)
|
|
102
|
+
.join('\n');
|
|
38
103
|
return ok(text, {
|
|
39
104
|
tcId,
|
|
40
105
|
versionId: tpl.versionId,
|
|
@@ -48,7 +113,11 @@ export function registerTestdataTools(server, deps) {
|
|
|
48
113
|
});
|
|
49
114
|
server.registerTool('tc_generate_testdata', {
|
|
50
115
|
title: 'Save generated testdata rows to a test case',
|
|
51
|
-
description: 'Persist up to 20 testdata rows for TC `tcId
|
|
116
|
+
description: 'Persist up to 20 testdata rows for TC `tcId` into a SPECIFIC environment. Testdata is stored ' +
|
|
117
|
+
'per environment — rows saved here only affect the env you pass. WORKFLOW: (1) call ' +
|
|
118
|
+
'tc_list_environments and ASK the user which env; (2) call tc_get_testdata with that env to ' +
|
|
119
|
+
'read seeds; (3) call this tool with the SAME `environmentType`. `environmentType` is REQUIRED ' +
|
|
120
|
+
'here — this tool refuses when it is omitted. Two ways to feed values:\n' +
|
|
52
121
|
' 1) Model-generated — pass `rows: [{paramName: value}, ...]`. Call tc_get_testdata first ' +
|
|
53
122
|
'for the parameter names + seeds, tc_get for step context, then produce rows that fit the flow.\n' +
|
|
54
123
|
' 2) Formula-driven — pass `formulas: {paramName: {name, args?}}` (names from tc_list_formulas). ' +
|
|
@@ -69,7 +138,7 @@ export function registerTestdataTools(server, deps) {
|
|
|
69
138
|
})).optional()
|
|
70
139
|
.describe('Per-column formula assignments applied to every row. Outer keys are param names from tc_get_testdata. Wins over rows[i] for the same key.'),
|
|
71
140
|
environmentType: z.string().optional()
|
|
72
|
-
.describe('Env key
|
|
141
|
+
.describe('Env `key` (from tc_list_environments). REQUIRED — this tool refuses when omitted. Ask the user which env before generating.'),
|
|
73
142
|
},
|
|
74
143
|
annotations: { readOnlyHint: false },
|
|
75
144
|
}, async ({ tcId, rows, count, formulas, environmentType }) => {
|
|
@@ -79,6 +148,14 @@ export function registerTestdataTools(server, deps) {
|
|
|
79
148
|
if (!adapter.getDefaultIteration || !adapter.saveGeneratedIterations) {
|
|
80
149
|
return err('This provider does not expose a testdata store.');
|
|
81
150
|
}
|
|
151
|
+
if (!environmentType || !environmentType.trim()) {
|
|
152
|
+
return err('environmentType is required — testdata is stored per environment and this tool refuses to ' +
|
|
153
|
+
'guess. Call tc_list_environments, show the user the options, ask which env, then call ' +
|
|
154
|
+
'tc_generate_testdata again with that env `key` as `environmentType`.');
|
|
155
|
+
}
|
|
156
|
+
const envError = await rejectUnlistedEnv(adapter, environmentType);
|
|
157
|
+
if (envError)
|
|
158
|
+
return err(envError);
|
|
82
159
|
const hasFormulas = formulas != null && Object.keys(formulas).length > 0;
|
|
83
160
|
// Reconcile rows vs count. Explicit rows always win; otherwise formulas + count seeds N empty
|
|
84
161
|
// rows that the adapter fills column-by-column via evaluateFormula.
|
|
@@ -134,15 +211,26 @@ export function registerTestdataTools(server, deps) {
|
|
|
134
211
|
return err(`Save failed: ${describeError(e)}`);
|
|
135
212
|
}
|
|
136
213
|
const paramNames = tpl.parameters.map((p) => p.name);
|
|
137
|
-
const
|
|
214
|
+
const protectedNames = new Set(tpl.parameters.filter((p) => p.protected).map((p) => p.name));
|
|
215
|
+
// Mask protected columns before they reach the text or structuredContent.
|
|
216
|
+
const preview = baseRows.slice(0, 3).map((r) => {
|
|
217
|
+
const masked = { ...r };
|
|
218
|
+
for (const n of protectedNames)
|
|
219
|
+
if (n in masked)
|
|
220
|
+
masked[n] = masked[n] ? '*****' : '(empty)';
|
|
221
|
+
return masked;
|
|
222
|
+
});
|
|
138
223
|
const formulaNote = hasFormulas
|
|
139
224
|
? `\nFormula columns: ${Object.keys(formulas).join(', ')} (evaluated per row).`
|
|
140
225
|
: '';
|
|
141
226
|
const warn = unknown.size
|
|
142
227
|
? `\n(Ignored unknown param name(s): ${[...unknown].join(', ')} — not in the template.)`
|
|
143
228
|
: '';
|
|
229
|
+
const protectedNote = protectedNames.size
|
|
230
|
+
? `\nProtected column(s) [${[...protectedNames].join(', ')}] are masked below — their values are never echoed by this tool.`
|
|
231
|
+
: '';
|
|
144
232
|
const link = result.datasetUrl ? `\n${result.datasetUrl}` : '';
|
|
145
|
-
const text = `Saved ${result.inserted} testdata row(s) for ${tcId} · env ${tpl.environmentType}.${link}${formulaNote}${warn}\n\n` +
|
|
233
|
+
const text = `Saved ${result.inserted} testdata row(s) for ${tcId} · env ${tpl.environmentType}.${link}${formulaNote}${warn}${protectedNote}\n\n` +
|
|
146
234
|
`Preview (first ${preview.length}, formula values shown as their param name):\n` +
|
|
147
235
|
preview
|
|
148
236
|
.map((r, i) => `${i + 1}. ${paramNames.map((n) => `${n}=${r[n] ?? (hasFormulas && (n in formulas) ? `<${formulas[n].name}()>` : '')}`).join(' | ')}`)
|