@ivorycanvas/qamap 0.3.2 → 0.3.4
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/CHANGELOG.md +56 -0
- package/README.md +44 -578
- package/dist/agent-init.d.ts +16 -0
- package/dist/agent-init.js +110 -0
- package/dist/agent-init.js.map +1 -0
- package/dist/cli.js +17 -1
- package/dist/cli.js.map +1 -1
- package/dist/context.d.ts +1 -0
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/domain-language.js +121 -12
- package/dist/domain-language.js.map +1 -1
- package/dist/e2e.d.ts +4 -0
- package/dist/e2e.js +424 -85
- package/dist/e2e.js.map +1 -1
- package/dist/fixture-insight.d.ts +8 -0
- package/dist/fixture-insight.js +193 -0
- package/dist/fixture-insight.js.map +1 -0
- package/dist/fs.js +11 -0
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +5 -0
- package/dist/manifest.js +478 -54
- package/dist/manifest.js.map +1 -1
- package/dist/qa.d.ts +4 -0
- package/dist/qa.js +177 -14
- package/dist/qa.js.map +1 -1
- package/dist/terminal.d.ts +2 -0
- package/dist/terminal.js +51 -0
- package/dist/terminal.js.map +1 -0
- package/dist/test-plan.js +56 -6
- package/dist/test-plan.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/adoption.md +62 -0
- package/docs/agent-format.md +52 -0
- package/docs/agent-skill.md +17 -1
- package/docs/benchmarking.md +60 -20
- package/docs/commands.md +242 -0
- package/docs/configuration.md +11 -0
- package/docs/e2e-output-examples.md +8 -4
- package/docs/guardrails.md +64 -0
- package/docs/manifest.md +3 -3
- package/docs/quickstart-demo.md +1 -1
- package/docs/release-validation.md +31 -4
- package/docs/releasing.md +13 -10
- package/docs/roadmap.md +9 -14
- package/package.json +4 -3
- package/schema/qamap-agent.schema.json +171 -0
- package/skills/qamap-pr-qa/SKILL.md +2 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface FixtureFileInsight {
|
|
2
|
+
file: string;
|
|
3
|
+
exports: string[];
|
|
4
|
+
handledEndpoints: string[];
|
|
5
|
+
sampleKeys: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function analyzeFixtureSource(file: string, text: string): FixtureFileInsight;
|
|
8
|
+
export declare function insightCoversEndpoint(insight: FixtureFileInsight, endpoint: string): boolean;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// Static analysis of discovered mock/fixture/seed files. The project scan
|
|
2
|
+
// already loads their text; this module turns that text into concrete,
|
|
3
|
+
// nameable evidence (exports, handled routes, response-shape keys) so fixture
|
|
4
|
+
// guidance can say "extend this file for that endpoint" instead of "add a
|
|
5
|
+
// deterministic mock somewhere".
|
|
6
|
+
const maxExports = 6;
|
|
7
|
+
const maxHandledEndpoints = 8;
|
|
8
|
+
const maxSampleKeys = 6;
|
|
9
|
+
const maxScanChars = 200_000;
|
|
10
|
+
const jsExportMatcher = /\bexport\s+(?:default\s+)?(?:async\s+)?(?:const|let|var|function|class)\s+([A-Za-z_$][\w$]*)/g;
|
|
11
|
+
const commonJsExportMatcher = /\bmodule\.exports\.([A-Za-z_$][\w$]*)\s*=/g;
|
|
12
|
+
const pythonDefinitionMatcher = /^(?:def|class)\s+([A-Za-z_][\w]*)/gm;
|
|
13
|
+
// MSW v1 (rest.get) and MSW v2 (http.get) handlers. graphql.query/mutation
|
|
14
|
+
// handlers are skipped: operation names are not URL routes.
|
|
15
|
+
const mswHandlerMatcher = /\b(?:rest|http)\.(?:get|post|put|patch|delete|head|options|all)\s*\(\s*["'`]([^"'`\n]+)["'`]/g;
|
|
16
|
+
// Mirage server routes and express-style mock servers.
|
|
17
|
+
const serverRouteMatcher = /\b(?:this|app|router|server)\.(?:get|post|put|patch|del|delete|all)\s*\(\s*["'`](\/[^"'`\n]*)["'`]/g;
|
|
18
|
+
// Playwright route interception patterns registered inside fixture helpers.
|
|
19
|
+
const playwrightRouteMatcher = /\broute\s*\(\s*["'`]([^"'`\n]+)["'`]/g;
|
|
20
|
+
// Keys only count as response-shape evidence when their value starts like a
|
|
21
|
+
// data literal; `mutationFn: fn` style code options and TS type annotations
|
|
22
|
+
// are noise, `total: 0` and `items: []` are signal.
|
|
23
|
+
const objectKeyMatcher = /[{,]\s*["']?([A-Za-z_$][\w$]{1,40})["']?\s*:\s*(?=["'`[{\d-]|true\b|false\b|null\b)/g;
|
|
24
|
+
const yamlTopLevelKeyMatcher = /^([A-Za-z_][\w-]{1,40}):/gm;
|
|
25
|
+
export function analyzeFixtureSource(file, text) {
|
|
26
|
+
const scanText = text.slice(0, maxScanChars);
|
|
27
|
+
if (/\.json$/i.test(file)) {
|
|
28
|
+
return {
|
|
29
|
+
file,
|
|
30
|
+
exports: [],
|
|
31
|
+
handledEndpoints: [],
|
|
32
|
+
sampleKeys: jsonSampleKeys(scanText),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (/\.ya?ml$/i.test(file)) {
|
|
36
|
+
return {
|
|
37
|
+
file,
|
|
38
|
+
exports: [],
|
|
39
|
+
handledEndpoints: [],
|
|
40
|
+
sampleKeys: matchAllCaptures(scanText, yamlTopLevelKeyMatcher).slice(0, maxSampleKeys),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const exports = /\.py$/i.test(file)
|
|
44
|
+
? matchAllCaptures(scanText, pythonDefinitionMatcher)
|
|
45
|
+
: uniqueInOrder([
|
|
46
|
+
...matchAllCaptures(scanText, jsExportMatcher),
|
|
47
|
+
...matchAllCaptures(scanText, commonJsExportMatcher),
|
|
48
|
+
]);
|
|
49
|
+
const handledEndpoints = uniqueInOrder([
|
|
50
|
+
...matchAllCaptures(scanText, mswHandlerMatcher),
|
|
51
|
+
...matchAllCaptures(scanText, serverRouteMatcher),
|
|
52
|
+
...matchAllCaptures(scanText, playwrightRouteMatcher),
|
|
53
|
+
]
|
|
54
|
+
.map(normalizeRoutePattern)
|
|
55
|
+
.filter((route) => route !== undefined));
|
|
56
|
+
return {
|
|
57
|
+
file,
|
|
58
|
+
exports: exports.slice(0, maxExports),
|
|
59
|
+
handledEndpoints: handledEndpoints.slice(0, maxHandledEndpoints),
|
|
60
|
+
sampleKeys: codeSampleKeys(scanText),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// True when a handler pattern in the fixture file already serves the endpoint.
|
|
64
|
+
// Dynamic single segments (:id, [id], ${...}, globs) normalize to "*" and
|
|
65
|
+
// match exactly one segment on either side; only a trailing "**" acts as a
|
|
66
|
+
// rest glob that matches any remaining segments (including none). A pattern
|
|
67
|
+
// like /api/orders/:id therefore covers /api/orders/123 but not /api/orders
|
|
68
|
+
// or /api/orders/123/items.
|
|
69
|
+
export function insightCoversEndpoint(insight, endpoint) {
|
|
70
|
+
const target = routeSegments(endpoint);
|
|
71
|
+
if (target.length === 0) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return insight.handledEndpoints.some((handled) => {
|
|
75
|
+
const pattern = routeSegments(handled);
|
|
76
|
+
if (pattern.length === 0) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const restGlob = pattern[pattern.length - 1] === "**";
|
|
80
|
+
if (!restGlob && pattern.length !== target.length) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (restGlob && pattern.length - 1 > target.length) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
const compareLength = restGlob ? pattern.length - 1 : pattern.length;
|
|
87
|
+
for (let index = 0; index < compareLength; index += 1) {
|
|
88
|
+
if (!segmentsMatch(pattern[index], target[index])) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function segmentsMatch(patternSegment, targetSegment) {
|
|
96
|
+
const isWildcard = (segment) => segment === "*" || segment === "**";
|
|
97
|
+
return isWildcard(patternSegment) || isWildcard(targetSegment) || patternSegment === targetSegment;
|
|
98
|
+
}
|
|
99
|
+
function normalizeRoutePattern(value) {
|
|
100
|
+
let route = value.trim();
|
|
101
|
+
if (route.length === 0 || route.length > 180 || /\s/.test(route)) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
route = route.replace(/\$\{[^}]*\}/g, "*");
|
|
105
|
+
// Strip host-bearing prefixes: schemes (https://host, *://host) and
|
|
106
|
+
// protocol-relative //host, so hosts never masquerade as path segments.
|
|
107
|
+
route = route.replace(/^(?:[a-z][a-z0-9+.-]*|\*):\/\/[^/]*/i, "");
|
|
108
|
+
route = route.replace(/^\/\/[^/]*/, "");
|
|
109
|
+
// A handler registered on "*" or "**" alone intercepts every route.
|
|
110
|
+
if (/^\*+$/.test(route)) {
|
|
111
|
+
return "/**";
|
|
112
|
+
}
|
|
113
|
+
const firstSlash = route.indexOf("/");
|
|
114
|
+
if (firstSlash === -1) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
// Only glob prefixes (e.g. "**" in "**/api/orders") may precede the path;
|
|
118
|
+
// a relative pattern like "api/orders" is ambiguous, so it is dropped
|
|
119
|
+
// rather than silently truncated.
|
|
120
|
+
const prefix = route.slice(0, firstSlash);
|
|
121
|
+
if (prefix.length > 0 && !/^\*+$/.test(prefix)) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
route = route.slice(firstSlash);
|
|
125
|
+
route = route.split(/[?#]/)[0];
|
|
126
|
+
return route === "/" ? undefined : route;
|
|
127
|
+
}
|
|
128
|
+
function routeSegments(value) {
|
|
129
|
+
const normalized = normalizeRoutePattern(value);
|
|
130
|
+
if (!normalized) {
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
return normalized
|
|
134
|
+
.split("/")
|
|
135
|
+
.filter((segment) => segment.length > 0)
|
|
136
|
+
.map((segment) => {
|
|
137
|
+
if (segment === "**") {
|
|
138
|
+
return "**";
|
|
139
|
+
}
|
|
140
|
+
if (segment.includes("*") || segment.startsWith(":") || /^\[.*\]$/.test(segment)) {
|
|
141
|
+
return "*";
|
|
142
|
+
}
|
|
143
|
+
return segment.toLowerCase();
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function jsonSampleKeys(text) {
|
|
147
|
+
try {
|
|
148
|
+
let parsed = JSON.parse(text);
|
|
149
|
+
if (Array.isArray(parsed)) {
|
|
150
|
+
parsed = parsed[0];
|
|
151
|
+
}
|
|
152
|
+
if (parsed && typeof parsed === "object") {
|
|
153
|
+
return Object.keys(parsed).slice(0, maxSampleKeys);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Malformed JSON fixtures still count as path-level evidence.
|
|
158
|
+
}
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
function codeSampleKeys(text) {
|
|
162
|
+
const keys = [];
|
|
163
|
+
for (const key of matchAllCaptures(text, objectKeyMatcher)) {
|
|
164
|
+
if (!keys.includes(key)) {
|
|
165
|
+
keys.push(key);
|
|
166
|
+
}
|
|
167
|
+
if (keys.length >= maxSampleKeys) {
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return keys;
|
|
172
|
+
}
|
|
173
|
+
function matchAllCaptures(text, matcher) {
|
|
174
|
+
const results = [];
|
|
175
|
+
for (const match of text.matchAll(matcher)) {
|
|
176
|
+
if (match[1]) {
|
|
177
|
+
results.push(match[1]);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
function uniqueInOrder(values) {
|
|
183
|
+
const seen = new Set();
|
|
184
|
+
const results = [];
|
|
185
|
+
for (const value of values) {
|
|
186
|
+
if (!seen.has(value)) {
|
|
187
|
+
seen.add(value);
|
|
188
|
+
results.push(value);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return results;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=fixture-insight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture-insight.js","sourceRoot":"","sources":["../src/fixture-insight.ts"],"names":[],"mappings":"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"}
|
package/dist/fs.js
CHANGED
|
@@ -13,6 +13,14 @@ const ignoredDirectories = new Set([
|
|
|
13
13
|
".turbo",
|
|
14
14
|
".cache",
|
|
15
15
|
"vendor",
|
|
16
|
+
// Mobile vendor/derived trees: on React Native and Expo repos these hold
|
|
17
|
+
// tens of thousands of files and, because the walk is alphabetical and
|
|
18
|
+
// capped, they can starve the scan before it ever reaches src/.
|
|
19
|
+
"Pods",
|
|
20
|
+
".expo",
|
|
21
|
+
".gradle",
|
|
22
|
+
"DerivedData",
|
|
23
|
+
"Carthage",
|
|
16
24
|
]);
|
|
17
25
|
const textExtensions = new Set([
|
|
18
26
|
".bash",
|
|
@@ -41,6 +49,8 @@ const textExtensions = new Set([
|
|
|
41
49
|
".ts",
|
|
42
50
|
".tsx",
|
|
43
51
|
".txt",
|
|
52
|
+
".vue",
|
|
53
|
+
".svelte",
|
|
44
54
|
".yaml",
|
|
45
55
|
".yml",
|
|
46
56
|
".zsh",
|
|
@@ -55,6 +65,7 @@ const textBasenames = new Set([
|
|
|
55
65
|
"CODE_OF_CONDUCT.md",
|
|
56
66
|
"Dockerfile",
|
|
57
67
|
"Makefile",
|
|
68
|
+
"setup.cfg",
|
|
58
69
|
]);
|
|
59
70
|
const maxReadableBytes = 256 * 1024;
|
|
60
71
|
export function toPosixPath(value) {
|
package/dist/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM;IACN,KAAK;IACL,MAAM;IACN,cAAc;IACd,MAAM;IACN,OAAO;IACP,UAAU;IACV,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export { buildAgentQaSection, formatAgentInitReport, initAgentSetup } from "./agent-init.js";
|
|
1
2
|
export { defaultConfig, loadConfig, writeDefaultConfig } from "./config.js";
|
|
2
|
-
export { generateAgentContext } from "./context.js";
|
|
3
|
+
export { detectDlxCommand, generateAgentContext } from "./context.js";
|
|
3
4
|
export { buildDomainLanguageSummary } from "./domain-language.js";
|
|
4
5
|
export { defaultDomainManifestPath, loadDomainManifest, matchDomains, writeDefaultDomainManifest, } from "./domains.js";
|
|
5
6
|
export { buildDoctorResult, formatDoctorReport, formatMarkdownDoctorReport } from "./doctor.js";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export { buildAgentQaSection, formatAgentInitReport, initAgentSetup } from "./agent-init.js";
|
|
1
2
|
export { defaultConfig, loadConfig, writeDefaultConfig } from "./config.js";
|
|
2
|
-
export { generateAgentContext } from "./context.js";
|
|
3
|
+
export { detectDlxCommand, generateAgentContext } from "./context.js";
|
|
3
4
|
export { buildDomainLanguageSummary } from "./domain-language.js";
|
|
4
5
|
export { defaultDomainManifestPath, loadDomainManifest, matchDomains, writeDefaultDomainManifest, } from "./domains.js";
|
|
5
6
|
export { buildDoctorResult, formatDoctorReport, formatMarkdownDoctorReport } from "./doctor.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,EACZ,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EAChC,8BAA8B,EAC9B,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kCAAkC,EAClC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,uCAAuC,EACvC,uCAAuC,EACvC,oCAAoC,EACpC,0CAA0C,EAC1C,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAC1H,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -104,6 +104,11 @@ export interface VerificationManifestInitResult {
|
|
|
104
104
|
validationCommands: number;
|
|
105
105
|
safetyRules: number;
|
|
106
106
|
};
|
|
107
|
+
scan: {
|
|
108
|
+
files: number;
|
|
109
|
+
maxFiles: number;
|
|
110
|
+
truncated: boolean;
|
|
111
|
+
};
|
|
107
112
|
}
|
|
108
113
|
export interface VerificationManifestMatch {
|
|
109
114
|
kind: VerificationManifestMatchKind;
|