common-qa-mcp 0.1.1 → 0.3.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/README.md +25 -70
- package/dist/adapters/factory.d.ts +17 -7
- package/dist/adapters/factory.d.ts.map +1 -1
- package/dist/adapters/factory.js +61 -7
- package/dist/adapters/factory.js.map +1 -1
- package/dist/adapters/http.d.ts +50 -0
- package/dist/adapters/http.d.ts.map +1 -0
- package/dist/adapters/http.js +109 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/remoteMcp/adapter.d.ts +10 -1
- package/dist/adapters/remoteMcp/adapter.d.ts.map +1 -1
- package/dist/adapters/remoteMcp/adapter.js +31 -3
- package/dist/adapters/remoteMcp/adapter.js.map +1 -1
- package/dist/adapters/simplifyqa/adapter.d.ts +154 -0
- package/dist/adapters/simplifyqa/adapter.d.ts.map +1 -0
- package/dist/adapters/simplifyqa/adapter.js +1150 -0
- package/dist/adapters/simplifyqa/adapter.js.map +1 -0
- package/dist/adapters/simplifyqa/mapper.d.ts +63 -0
- package/dist/adapters/simplifyqa/mapper.d.ts.map +1 -0
- package/dist/adapters/simplifyqa/mapper.js +409 -0
- package/dist/adapters/simplifyqa/mapper.js.map +1 -0
- package/dist/adapters/types.d.ts +48 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/walnut/adapter.d.ts +231 -0
- package/dist/adapters/walnut/adapter.d.ts.map +1 -0
- package/dist/adapters/walnut/adapter.js +1083 -0
- package/dist/adapters/walnut/adapter.js.map +1 -0
- package/dist/adapters/walnut/mapper.d.ts +29 -9
- package/dist/adapters/walnut/mapper.d.ts.map +1 -1
- package/dist/adapters/walnut/mapper.js +136 -24
- package/dist/adapters/walnut/mapper.js.map +1 -1
- package/dist/cli.js +5 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +32 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +41 -19
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts +6 -2
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +37 -14
- package/dist/connection.js.map +1 -1
- package/dist/domain/types.d.ts +195 -1
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/drafts/store.d.ts +4 -1
- package/dist/drafts/store.d.ts.map +1 -1
- package/dist/drafts/store.js +7 -2
- package/dist/drafts/store.js.map +1 -1
- package/dist/initAgents.d.ts.map +1 -1
- package/dist/initAgents.js +69 -21
- package/dist/initAgents.js.map +1 -1
- package/dist/requestConnection.d.ts +5 -3
- package/dist/requestConnection.d.ts.map +1 -1
- package/dist/requestConnection.js +11 -5
- package/dist/requestConnection.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/connection.tools.d.ts.map +1 -1
- package/dist/tools/connection.tools.js +12 -10
- package/dist/tools/connection.tools.js.map +1 -1
- package/dist/tools/discovery.tools.d.ts.map +1 -1
- package/dist/tools/discovery.tools.js +94 -2
- package/dist/tools/discovery.tools.js.map +1 -1
- package/dist/tools/formulas.tools.d.ts +7 -0
- package/dist/tools/formulas.tools.d.ts.map +1 -0
- package/dist/tools/formulas.tools.js +56 -0
- package/dist/tools/formulas.tools.js.map +1 -0
- package/dist/tools/heal.tools.d.ts +17 -0
- package/dist/tools/heal.tools.d.ts.map +1 -0
- package/dist/tools/heal.tools.js +76 -0
- package/dist/tools/heal.tools.js.map +1 -0
- package/dist/tools/recording.tools.d.ts.map +1 -1
- package/dist/tools/recording.tools.js +34 -12
- 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 +378 -37
- package/dist/tools/run.tools.js.map +1 -1
- package/dist/tools/storySync.tools.d.ts +66 -0
- package/dist/tools/storySync.tools.d.ts.map +1 -0
- package/dist/tools/storySync.tools.js +213 -0
- package/dist/tools/storySync.tools.js.map +1 -0
- package/dist/tools/testcase.tools.d.ts.map +1 -1
- package/dist/tools/testcase.tools.js +24 -9
- package/dist/tools/testcase.tools.js.map +1 -1
- package/dist/tools/testdata.tools.d.ts +7 -0
- package/dist/tools/testdata.tools.d.ts.map +1 -0
- package/dist/tools/testdata.tools.js +161 -0
- package/dist/tools/testdata.tools.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ok, err } from '../mcpResult.js';
|
|
3
|
+
function describeError(e) {
|
|
4
|
+
return e instanceof Error ? e.message : String(e);
|
|
5
|
+
}
|
|
6
|
+
export function registerTestdataTools(server, deps) {
|
|
7
|
+
server.registerTool('tc_get_testdata', {
|
|
8
|
+
title: 'Read the current testdata template for a test case',
|
|
9
|
+
description: 'Fetch the default iteration (template row) for TC `tcId` — the parameter list plus the ' +
|
|
10
|
+
'CURRENT seed values. Call this FIRST when you plan to generate testdata: use the seeds + ' +
|
|
11
|
+
'the test case\'s steps (from tc_get) to reason about what realistic values look like for ' +
|
|
12
|
+
'THIS flow, then pass those values to tc_generate_testdata. Example: for a SauceDemo login ' +
|
|
13
|
+
'flow, seeds tell you the valid usernames and the constant password/product/prices.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
tcId: z.string().describe('Test case id (or business key like TC_123).'),
|
|
16
|
+
environmentType: z.string().optional()
|
|
17
|
+
.describe('Env key; defaults to the first configured env for the project (falls back to "general").'),
|
|
18
|
+
},
|
|
19
|
+
annotations: { readOnlyHint: true },
|
|
20
|
+
}, async ({ tcId, environmentType }) => {
|
|
21
|
+
const adapter = deps.getAdapter?.();
|
|
22
|
+
if (!adapter)
|
|
23
|
+
return err('Not connected to a product. Use qa_connect first.');
|
|
24
|
+
if (!adapter.getDefaultIteration) {
|
|
25
|
+
return err('This provider does not expose a testdata store.');
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const tpl = await adapter.getDefaultIteration({
|
|
29
|
+
tcId,
|
|
30
|
+
...(environmentType !== undefined ? { environmentType } : {}),
|
|
31
|
+
});
|
|
32
|
+
if (!tpl.parameters?.length) {
|
|
33
|
+
return ok(`Test case "${tcId}" has no parameterized fields in env "${tpl.environmentType}" — nothing to generate.`, { tcId, parameters: [] });
|
|
34
|
+
}
|
|
35
|
+
const text = `Testdata template for ${tcId} · env ${tpl.environmentType} · version ${tpl.versionId}\n` +
|
|
36
|
+
`${tpl.parameters.length} parameter(s):\n` +
|
|
37
|
+
tpl.parameters.map((p) => `- ${p.name} = "${p.seed}"`).join('\n');
|
|
38
|
+
return ok(text, {
|
|
39
|
+
tcId,
|
|
40
|
+
versionId: tpl.versionId,
|
|
41
|
+
environmentType: tpl.environmentType,
|
|
42
|
+
parameters: tpl.parameters,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
return err(`Could not read testdata for "${tcId}": ${describeError(e)}`);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
server.registerTool('tc_generate_testdata', {
|
|
50
|
+
title: 'Save generated testdata rows to a test case',
|
|
51
|
+
description: 'Persist up to 20 testdata rows for TC `tcId`. Two ways to feed values:\n' +
|
|
52
|
+
' 1) Model-generated — pass `rows: [{paramName: value}, ...]`. Call tc_get_testdata first ' +
|
|
53
|
+
'for the parameter names + seeds, tc_get for step context, then produce rows that fit the flow.\n' +
|
|
54
|
+
' 2) Formula-driven — pass `formulas: {paramName: {name, args?}}` (names from tc_list_formulas). ' +
|
|
55
|
+
'The adapter evaluates each formula per row via /tm/customFormula and stamps both the value ' +
|
|
56
|
+
'and the source `=NAME(...)` expression. Use `count` to say how many rows, or provide `rows` ' +
|
|
57
|
+
'for constant columns; mixing is fine (formulas win over row values for the same param).\n' +
|
|
58
|
+
'Rows are appended as new iterations; they do not become the default. Hard cap: 20 rows.',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
tcId: z.string().describe('Test case id (or business key like TC_123).'),
|
|
61
|
+
rows: z.array(z.record(z.string(), z.string())).max(20).optional()
|
|
62
|
+
.describe('Rows keyed by param name (from tc_get_testdata). 1..20 rows. Omit when using formulas + count.'),
|
|
63
|
+
count: z.number().int().min(1).max(20).optional()
|
|
64
|
+
.describe('How many rows to generate when using formulas without explicit rows. Ignored if rows is set.'),
|
|
65
|
+
formulas: z.record(z.string(), z.object({
|
|
66
|
+
name: z.string().describe('RAW formula name from tc_list_formulas — the identifier only, no parens, no arg list. Correct: "FIRST_NAME". Wrong: "FIRST_NAME()", "FIRST_NAME(country,sex)".'),
|
|
67
|
+
args: z.record(z.string(), z.string()).optional()
|
|
68
|
+
.describe('Named args. Keys MUST match Formula.parameters[].keyName exactly, no trailing colons or extra whitespace. Correct: {"country name": "United States"}. Wrong: {"country name:": "..."}.'),
|
|
69
|
+
})).optional()
|
|
70
|
+
.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
|
+
environmentType: z.string().optional()
|
|
72
|
+
.describe('Env key; defaults to whatever tc_get_testdata resolved.'),
|
|
73
|
+
},
|
|
74
|
+
annotations: { readOnlyHint: false },
|
|
75
|
+
}, async ({ tcId, rows, count, formulas, environmentType }) => {
|
|
76
|
+
const adapter = deps.getAdapter?.();
|
|
77
|
+
if (!adapter)
|
|
78
|
+
return err('Not connected to a product. Use qa_connect first.');
|
|
79
|
+
if (!adapter.getDefaultIteration || !adapter.saveGeneratedIterations) {
|
|
80
|
+
return err('This provider does not expose a testdata store.');
|
|
81
|
+
}
|
|
82
|
+
const hasFormulas = formulas != null && Object.keys(formulas).length > 0;
|
|
83
|
+
// Reconcile rows vs count. Explicit rows always win; otherwise formulas + count seeds N empty
|
|
84
|
+
// rows that the adapter fills column-by-column via evaluateFormula.
|
|
85
|
+
let baseRows;
|
|
86
|
+
if (rows && rows.length > 0) {
|
|
87
|
+
baseRows = rows;
|
|
88
|
+
}
|
|
89
|
+
else if (hasFormulas && count && count > 0) {
|
|
90
|
+
baseRows = Array.from({ length: count }, () => ({}));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return err('Provide either `rows` (1..20) or `formulas` together with `count` (1..20).');
|
|
94
|
+
}
|
|
95
|
+
if (baseRows.length > 20)
|
|
96
|
+
return err('Max 20 rows per call.');
|
|
97
|
+
// Resolve version + env by re-reading the template. Server-side env resolution honors project
|
|
98
|
+
// config; passing rows without this echo would risk saving into the wrong env.
|
|
99
|
+
let tpl;
|
|
100
|
+
try {
|
|
101
|
+
tpl = await adapter.getDefaultIteration({
|
|
102
|
+
tcId,
|
|
103
|
+
...(environmentType !== undefined ? { environmentType } : {}),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
return err(`Could not fetch the default iteration for "${tcId}": ${describeError(e)}`);
|
|
108
|
+
}
|
|
109
|
+
if (!tpl.parameters?.length) {
|
|
110
|
+
return err(`Test case "${tcId}" has no parameterized fields — nothing to save.`);
|
|
111
|
+
}
|
|
112
|
+
const known = new Set(tpl.parameters.map((p) => p.name));
|
|
113
|
+
const unknown = new Set();
|
|
114
|
+
for (const r of baseRows)
|
|
115
|
+
for (const k of Object.keys(r))
|
|
116
|
+
if (!known.has(k))
|
|
117
|
+
unknown.add(k);
|
|
118
|
+
if (hasFormulas)
|
|
119
|
+
for (const k of Object.keys(formulas))
|
|
120
|
+
if (!known.has(k))
|
|
121
|
+
unknown.add(k);
|
|
122
|
+
let result;
|
|
123
|
+
try {
|
|
124
|
+
result = await adapter.saveGeneratedIterations({
|
|
125
|
+
tcId,
|
|
126
|
+
versionId: tpl.versionId,
|
|
127
|
+
environmentType: tpl.environmentType,
|
|
128
|
+
rows: baseRows,
|
|
129
|
+
parameters: tpl.parameters, // reuse the just-fetched template; adapter skips its own re-fetch
|
|
130
|
+
...(hasFormulas ? { formulas: formulas } : {}),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
return err(`Save failed: ${describeError(e)}`);
|
|
135
|
+
}
|
|
136
|
+
const paramNames = tpl.parameters.map((p) => p.name);
|
|
137
|
+
const preview = baseRows.slice(0, 3);
|
|
138
|
+
const formulaNote = hasFormulas
|
|
139
|
+
? `\nFormula columns: ${Object.keys(formulas).join(', ')} (evaluated per row).`
|
|
140
|
+
: '';
|
|
141
|
+
const warn = unknown.size
|
|
142
|
+
? `\n(Ignored unknown param name(s): ${[...unknown].join(', ')} — not in the template.)`
|
|
143
|
+
: '';
|
|
144
|
+
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` +
|
|
146
|
+
`Preview (first ${preview.length}, formula values shown as their param name):\n` +
|
|
147
|
+
preview
|
|
148
|
+
.map((r, i) => `${i + 1}. ${paramNames.map((n) => `${n}=${r[n] ?? (hasFormulas && (n in formulas) ? `<${formulas[n].name}()>` : '')}`).join(' | ')}`)
|
|
149
|
+
.join('\n');
|
|
150
|
+
return ok(text, {
|
|
151
|
+
tcId,
|
|
152
|
+
generated: result.inserted,
|
|
153
|
+
params: paramNames,
|
|
154
|
+
preview,
|
|
155
|
+
...(hasFormulas ? { formulasUsed: Object.keys(formulas) } : {}),
|
|
156
|
+
...(result.datasetUrl ? { datasetUrl: result.datasetUrl } : {}),
|
|
157
|
+
...(result.iterationIds ? { iterationIds: result.iterationIds } : {}),
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=testdata.tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testdata.tools.js","sourceRoot":"","sources":["../../src/tools/testdata.tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "common-qa-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Common QA MCP — one product-neutral MCP that routes test-case lifecycle requests to Walnut or SimplifyQA for any AI client. Launch over stdio via npx; install the Walnut QA agent with `init-agents`.",
|
|
6
6
|
"bin": {
|