@ia-qa/pal 0.4.0 β 0.7.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 +75 -5
- package/TUTORIAL.md +106 -2
- package/dist/cli/index.js +65 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/history.d.ts +23 -0
- package/dist/history.js +108 -0
- package/dist/history.js.map +1 -0
- package/dist/htmlReport.d.ts +15 -0
- package/dist/htmlReport.js +381 -0
- package/dist/htmlReport.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +6 -0
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/rebaseline.d.ts +66 -0
- package/dist/rebaseline.js +176 -0
- package/dist/rebaseline.js.map +1 -0
- package/dist/report.d.ts +9 -0
- package/dist/report.js +39 -7
- package/dist/report.js.map +1 -1
- package/dist/run.d.ts +4 -0
- package/dist/run.js +34 -2
- package/dist/run.js.map +1 -1
- package/dist/setup.js +17 -1
- package/dist/setup.js.map +1 -1
- package/dist/suite.d.ts +44 -0
- package/dist/suite.js +83 -2
- package/dist/suite.js.map +1 -1
- package/dist/tour.d.ts +12 -0
- package/dist/tour.js +17 -7
- package/dist/tour.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.reportFile = void 0;
|
|
37
|
+
exports.renderHtmlReport = renderHtmlReport;
|
|
38
|
+
exports.writeHtmlReport = writeHtmlReport;
|
|
39
|
+
exports.openFile = openFile;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const child_process_1 = require("child_process");
|
|
43
|
+
const history_1 = require("./history");
|
|
44
|
+
const setup_1 = require("./setup");
|
|
45
|
+
const report_1 = require("./report");
|
|
46
|
+
const suite_1 = require("./suite");
|
|
47
|
+
/**
|
|
48
|
+
* The tour as one self-contained HTML file, for the person who does not live in a terminal.
|
|
49
|
+
*
|
|
50
|
+
* Rendered from the same `TourResult` the terminal prints, so the two cannot disagree. Three
|
|
51
|
+
* rules hold it: every string that came from the app under test is escaped (a button label is
|
|
52
|
+
* data, and a report must never run it); "Not seen" is never collapsed; counts are always
|
|
53
|
+
* "X of Y", never a percentage β a percentage reads as coverage, and this is not a coverage metric.
|
|
54
|
+
* No external resource, nothing sent anywhere: the file works offline and from a mail attachment.
|
|
55
|
+
*/
|
|
56
|
+
const esc = (value) => String(value ?? '').replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]);
|
|
57
|
+
const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
|
|
58
|
+
const MOOD = {
|
|
59
|
+
baseline: { color: '#3b82f6', badge: 'π', title: 'Baseline established' },
|
|
60
|
+
clean: { color: '#10b981', badge: 'β
', title: 'All clear' },
|
|
61
|
+
look: { color: '#f59e0b', badge: 'β οΈ', title: 'Worth a look' },
|
|
62
|
+
broken: { color: '#ef4444', badge: 'β', title: 'Something broke' },
|
|
63
|
+
'no-answer': { color: '#8b5cf6', badge: 'βΈ', title: 'No answer this time' },
|
|
64
|
+
};
|
|
65
|
+
function palSays(r, mood, toLook) {
|
|
66
|
+
switch (mood) {
|
|
67
|
+
case 'baseline':
|
|
68
|
+
return r.mode === 'explore'
|
|
69
|
+
? 'I opened more menus, tabs and dialogs and added what I found to the reference.'
|
|
70
|
+
: 'First look done. I wrote down how your app is today β next time, I will tell you what changed.';
|
|
71
|
+
case 'clean':
|
|
72
|
+
return 'Nothing moved since last time. Enjoy your day.';
|
|
73
|
+
case 'look':
|
|
74
|
+
return `Nothing broke, but I found ${plural(toLook, 'thing')} worth a look.`;
|
|
75
|
+
case 'broken':
|
|
76
|
+
return 'Something broke. Here is exactly what I saw.';
|
|
77
|
+
default:
|
|
78
|
+
return 'I could not give you an answer this time β here is why.';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const duration = (ms) => {
|
|
82
|
+
const s = Math.round(ms / 1000);
|
|
83
|
+
return s < 90 ? `${s} s` : s < 5400 ? `${Math.round(s / 60)} min` : `${Math.floor(s / 3600)} h ${String(Math.round((s % 3600) / 60)).padStart(2, '0')}`;
|
|
84
|
+
};
|
|
85
|
+
const cmd = (text) => `<span class="cmd"><code>${esc(text)}</code><button type="button" class="copy" data-copy="${esc(text)}" aria-label="Copy command">copy</button></span>`;
|
|
86
|
+
function gauge(label, have, of, note = '') {
|
|
87
|
+
const width = of > 0 ? Math.min(100, Math.round((have / of) * 100)) : 0;
|
|
88
|
+
return `<div class="gauge">
|
|
89
|
+
<div class="gauge-label"><span>${esc(label)}</span><strong>${have} of ${of}</strong></div>
|
|
90
|
+
<div class="bar" role="img" aria-label="${have} of ${of}"><span style="width:${width}%"></span></div>
|
|
91
|
+
${note ? `<div class="gauge-note">${esc(note)}</div>` : ''}
|
|
92
|
+
</div>`;
|
|
93
|
+
}
|
|
94
|
+
function card(id, icon, title, count, body, opts = {}) {
|
|
95
|
+
if (opts.alwaysOpen) {
|
|
96
|
+
return `<section class="card" id="${id}"><h2>${icon} ${esc(title)} <span class="count">${count}</span></h2>${body}</section>`;
|
|
97
|
+
}
|
|
98
|
+
return `<details class="card" id="${id}"${opts.open === false ? '' : ' open'}><summary><h2>${icon} ${esc(title)} <span class="count">${count}</span></h2></summary>${body}</details>`;
|
|
99
|
+
}
|
|
100
|
+
const item = (html, tone = '') => `<li class="${tone}">${html}</li>`;
|
|
101
|
+
function renderHtmlReport(r, history = [], meta = {}) {
|
|
102
|
+
const mood = (0, history_1.moodOf)(r);
|
|
103
|
+
const m = MOOD[mood];
|
|
104
|
+
const generatedAt = meta.generatedAt ?? new Date().toISOString();
|
|
105
|
+
const d = r.drift;
|
|
106
|
+
const s = r.suite;
|
|
107
|
+
const p = r.pages;
|
|
108
|
+
let host = r.baseUrl;
|
|
109
|
+
try {
|
|
110
|
+
host = new URL(r.baseUrl).host;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
/* keep the raw value */
|
|
114
|
+
}
|
|
115
|
+
const broken = [];
|
|
116
|
+
for (const link of r.check?.deadLinks ?? []) {
|
|
117
|
+
const from = link.from[0] ? ` <span class="muted">linked from ${esc(link.from[0].page)}${link.from[0].name ? ` (β${esc(link.from[0].name)}β)` : ''}${link.from.length > 1 ? `, +${link.from.length - 1} more` : ''}</span>` : '';
|
|
118
|
+
broken.push(item(`<span class="tag red">${esc(link.status ?? link.error ?? 'no answer')}</span> <code>${esc(link.url)}</code>${from}`));
|
|
119
|
+
}
|
|
120
|
+
if (r.check && r.check.knownDeadLinks > 0)
|
|
121
|
+
broken.push(item(`${plural(r.check.knownDeadLinks, 'dead link')} of these ${r.check.knownDeadLinks === 1 ? 'was' : 'were'} already reported by a previous tour.`, 'hint'));
|
|
122
|
+
if (s?.ranThisTour && s.run && s.run.exitCode !== 0) {
|
|
123
|
+
broken.push(item(`<span class="tag red">suite</span> your test command exited ${s.run.exitCode}: <code>${esc(s.run.command)}</code>`));
|
|
124
|
+
}
|
|
125
|
+
const decide = [];
|
|
126
|
+
if (d) {
|
|
127
|
+
for (const f of d.onLoad)
|
|
128
|
+
decide.push(item(`<span class="tag red">${esc(f.status)}</span> <strong>${esc(f.page)}</strong> Β· ${esc(f.role)} β${esc(f.name)}β <span class="muted">visible on load β fails the tour</span>`));
|
|
129
|
+
for (const page of d.suitePages)
|
|
130
|
+
decide.push(item(`<span class="tag red">tests</span> <strong>${esc(page)}</strong> Β· your tests would act on the wrong element ${cmd('npx -p @ia-qa/self-healing ia-qa-heal diff')}`));
|
|
131
|
+
for (const f of d.behindInteraction) {
|
|
132
|
+
decide.push(item(`<span class="tag amber">${esc(f.status)}</span> <strong>${esc(f.page)}</strong> Β· ${esc(f.role)} β${esc(f.name)}β <span class="path">after ${f.via.map((v) => `<span class="step">${esc(v)}</span>`).join('<span class="arrow">β</span>')}</span> <span class="muted">reached only by clicking β may depend on the data${d.gating ? '' : ', not failing the tour'}</span>`, 'soft'));
|
|
133
|
+
}
|
|
134
|
+
const pages = [...new Set([...d.onLoad, ...d.behindInteraction].map((f) => f.page).concat(d.suitePages))];
|
|
135
|
+
if (pages.length > 0)
|
|
136
|
+
decide.push(item(`If these changes are intended, make them the reference for those pages only: ${cmd(`npx -p @ia-qa/pal ia-qa-pal accept ${pages.join(' ')}`)}`, 'hint'));
|
|
137
|
+
}
|
|
138
|
+
const sf = d?.suiteFindings;
|
|
139
|
+
if (sf && sf.names + sf.bindings > 0) {
|
|
140
|
+
decide.push(item(`<span class="tag red">tests</span> ${[sf.names > 0 ? `${plural(sf.names, 'renamed label')} your tests locate by name` : '', sf.bindings > 0 ? `${plural(sf.bindings, 'selector')} your tests write changed what they reach` : ''].filter(Boolean).join(' Β· ')} ${cmd('npx -p @ia-qa/self-healing ia-qa-heal diff')}`));
|
|
141
|
+
}
|
|
142
|
+
if (r.check) {
|
|
143
|
+
const c = r.check;
|
|
144
|
+
if (c.newUnnamed.length > 0)
|
|
145
|
+
decide.push(item(`<span class="tag purple">new</span> ${plural(c.newUnnamed.length, 'element')} without an accessible name β e.g. ${esc(c.newUnnamed[0].role)} <code>${esc(c.newUnnamed[0].selector)}</code> on ${esc(c.newUnnamed[0].pages[0])}`));
|
|
146
|
+
if (c.newAmbiguous.length > 0)
|
|
147
|
+
decide.push(item(`<span class="tag purple">new</span> ${plural(c.newAmbiguous.length, 'name')} shared by several elements β e.g. ${esc(c.newAmbiguous[0].role)} β${esc(c.newAmbiguous[0].name)}β Γ${c.newAmbiguous[0].count} on ${esc(c.newAmbiguous[0].pages[0])}`));
|
|
148
|
+
if (c.newOrphans.length > 0)
|
|
149
|
+
decide.push(item(`<span class="tag purple">new</span> ${plural(c.newOrphans.length, 'page')} nothing links to β ${c.newOrphans.slice(0, 5).map((o) => esc(o.page)).join(', ')}${c.newOrphans.length > 5 ? ', β¦' : ''}`));
|
|
150
|
+
}
|
|
151
|
+
for (const dead of s?.newDeadNames ?? []) {
|
|
152
|
+
const site = dead.sites[0] ? ` at <code>${esc(dead.sites[0].file)}:${dead.sites[0].line}</code>` : '';
|
|
153
|
+
decide.push(item(`<span class="tag purple">tests</span> locator name β${esc(dead.name)}β${site} matches nothing on the mapped pages <span class="muted">(it may live on a page or a state not mapped)</span>`));
|
|
154
|
+
}
|
|
155
|
+
const masks = (d?.maskSuggestions ?? []).filter((x) => x.pattern);
|
|
156
|
+
if (masks.length > 0) {
|
|
157
|
+
decide.push(item(`π‘ A label differs only by a number (β${esc(masks[0].example.from)}β β β${esc(masks[0].example.to)}β) β a counter or a clock. Stop comparing it; the element stays under contract. Add to <code>.ia-qa/config.json</code>: ${cmd(`"nameMask": ${JSON.stringify(masks.map((x) => x.pattern))}`)}`, 'hint'));
|
|
158
|
+
}
|
|
159
|
+
const known = (r.check?.knownWarnings ?? 0) + (s?.knownDeadNames ?? 0);
|
|
160
|
+
const repair = [];
|
|
161
|
+
if (s?.repairs && s.repairs.total > 0) {
|
|
162
|
+
for (const f of s.repairs.files) {
|
|
163
|
+
for (const rep of f.replacements) {
|
|
164
|
+
repair.push(item(`<code>${esc(f.file)}${rep.lines.length ? `:${rep.lines.join(',')}` : ''}</code> <span class="diff"><del>${esc(rep.from)}</del><span class="arrow">β</span><ins>${esc(rep.to)}</ins></span>`));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (s.repairs.leftAlone > 0)
|
|
168
|
+
repair.push(item(`${plural(s.repairs.leftAlone, 'occurrence')} deliberately left alone β the command below says why.`, 'hint'));
|
|
169
|
+
repair.push(item(`Review, then apply β pal never edits your tests: ${cmd(s.repairs.command)}`, 'hint'));
|
|
170
|
+
}
|
|
171
|
+
const unseen = [];
|
|
172
|
+
if (p.notExplored.length > 0) {
|
|
173
|
+
const e = r.estimate;
|
|
174
|
+
unseen.push(item(`${plural(p.notExplored.length, 'page')} with closed menus, tabs or dialogs not explored yet${e ? ` β about ${duration(e.seconds * 1000)} <span class="muted">(${e.clicks} controls Γ ${e.secondsPerClick} s, pace measured on ${e.measuredClicks} clicks)</span>` : ''} ${cmd('npx -p @ia-qa/pal ia-qa-pal tour --more')}`));
|
|
175
|
+
}
|
|
176
|
+
const walled = p.notMapped.filter((x) => x.loginWall);
|
|
177
|
+
if (walled.length > 0)
|
|
178
|
+
unseen.push(item(`${plural(walled.length, 'page')} landed on a login page β the session expired or never took: ${walled.map((x) => esc(x.page)).join(', ')}. A person logs in again: ${cmd(setup_1.LOGIN_COMMAND)}`, 'warn'));
|
|
179
|
+
for (const x of p.notMapped.filter((y) => !y.loginWall))
|
|
180
|
+
unseen.push(item(`<strong>${esc(x.page)}</strong> not mapped β <span class="muted">${esc(x.reason)}</span>`));
|
|
181
|
+
for (const u of p.unreadable ?? [])
|
|
182
|
+
unseen.push(item(`<strong>${esc(u.page)}</strong> not compared β its contract file cannot be read <span class="muted">${esc(u.reason.replace(/^β\s*/, ''))}</span>`, 'warn'));
|
|
183
|
+
if (d && d.olderCapture.length > 0)
|
|
184
|
+
unseen.push(item(`Drift on ${[...new Set(d.olderCapture.map((f) => esc(f.page)))].join(', ')} is from an older capture and not counted.`));
|
|
185
|
+
if (p.partlyExplored.length > 0)
|
|
186
|
+
unseen.push(item(`Only partly explored (click budget reached): ${p.partlyExplored.map(esc).join(', ')}`));
|
|
187
|
+
if (p.notInBaseline.length > 0)
|
|
188
|
+
unseen.push(item(`Not in the baseline yet: ${p.notInBaseline.map(esc).join(', ')}`));
|
|
189
|
+
if ((p.outOfScope ?? []).length > 0) {
|
|
190
|
+
unseen.push(item(`${plural(p.outOfScope.length, 'contract')} in <code>.ia-qa/mapping/</code> your config does not declare β not measured: ${p.outOfScope.slice(0, 8).map(esc).join(', ')}${p.outOfScope.length > 8 ? ', β¦' : ''} ${cmd('npx -p @ia-qa/pal ia-qa-pal tour --all-contracts')}`));
|
|
191
|
+
}
|
|
192
|
+
for (const x of d?.staleExcluded ?? [])
|
|
193
|
+
unseen.push(item(`<strong>${esc(x)}</strong> not compared β same capture on both sides`));
|
|
194
|
+
if (d?.depthMismatch)
|
|
195
|
+
unseen.push(item(esc(d.depthMismatch)));
|
|
196
|
+
if (r.check && r.check.unverified > 0)
|
|
197
|
+
unseen.push(item(`${plural(r.check.unverified, 'link')} could not be verified (rate-limited or no answer)`));
|
|
198
|
+
for (const k of r.check?.skipped ?? [])
|
|
199
|
+
unseen.push(item(`Check skipped β ${esc(k.check)}: ${esc(k.why)}`));
|
|
200
|
+
if (s) {
|
|
201
|
+
if (s.inventory.missingPaths.length > 0)
|
|
202
|
+
unseen.push(item(`Test paths not found: ${s.inventory.missingPaths.map(esc).join(', ')}`, 'warn'));
|
|
203
|
+
if (s.inventory.filesScanned === 0)
|
|
204
|
+
unseen.push(item('No test file found under your test paths β nothing of your suite was read.', 'warn'));
|
|
205
|
+
if (!s.run)
|
|
206
|
+
unseen.push(item(`Which pages your suite visits is not measured yet. ${cmd('npx -p @ia-qa/pal ia-qa-pal tour --suite')}`));
|
|
207
|
+
else if (s.notVisited === null) {
|
|
208
|
+
const hints = s.captureHints ?? [suite_1.CAPTURE_IMPORT];
|
|
209
|
+
unseen.push(item(`Your suite ran (${esc(s.run.at.slice(0, 10))}, exit ${s.run.exitCode}) but recorded no page β it does not arm the capture hook. ${hints.map((h) => cmd(h)).join(' ')}`, 'warn'));
|
|
210
|
+
}
|
|
211
|
+
else if (s.notVisited.length > 0) {
|
|
212
|
+
unseen.push(item(`${s.run.dedicated ? `The command pal runs (<code>${esc(s.run.command)}</code>)` : 'Your suite'} never visits ${s.notVisited.length} of ${p.configured} pages (run of ${esc(s.run.at.slice(0, 10))}): ${s.notVisited.map(esc).join(', ')}` +
|
|
213
|
+
(s.run.dedicated ? ' <span class="muted">β a shorter command, not the whole suite: the rest of your tests may well visit them</span>' : '')));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const toLook = decide.filter((x) => !x.includes('class="hint"')).length + repair.filter((x) => !x.includes('class="hint"')).length;
|
|
217
|
+
const t = d?.totals;
|
|
218
|
+
const chips = t
|
|
219
|
+
? [
|
|
220
|
+
['ok', t.ok, 'green'],
|
|
221
|
+
['renamed', t.renamed, 'blue'],
|
|
222
|
+
['lost', t.lost, t.lost ? 'red' : 'grey'],
|
|
223
|
+
['ambiguous', t.ambiguous, t.ambiguous ? 'red' : 'grey'],
|
|
224
|
+
['rebound', t.rebound, t.rebound ? 'red' : 'grey'],
|
|
225
|
+
]
|
|
226
|
+
.map(([k, v, tone]) => `<span class="chip ${tone}"><strong>${v}</strong> ${k}</span>`)
|
|
227
|
+
.join('')
|
|
228
|
+
: '';
|
|
229
|
+
const headline = r.refused
|
|
230
|
+
? esc(r.refused)
|
|
231
|
+
: mood === 'baseline'
|
|
232
|
+
? r.mode === 'explore'
|
|
233
|
+
? {
|
|
234
|
+
explored: `${plural(p.exploredThisTour.length, 'page')} explored in depth and added to the reference`,
|
|
235
|
+
'nothing-mapped': 'Nothing was explored β no page is under contract yet',
|
|
236
|
+
'nothing-openable': 'Nothing to explore β no page under contract has a closed menu, tab or dialog',
|
|
237
|
+
'all-explored': 'Nothing left to explore β every page with closed controls is already explored in depth',
|
|
238
|
+
}[(0, report_1.exploreOutcome)(r)]
|
|
239
|
+
: 'Nothing to compare yet β this tour is the reference the next one measures against'
|
|
240
|
+
: d && d.verdict === 'BLOCK' && !d.gating
|
|
241
|
+
? 'Drift only behind interaction β not failing the tour'
|
|
242
|
+
: d
|
|
243
|
+
? `Compared with the baseline: ${d.verdict}`
|
|
244
|
+
: 'No page could be compared this tour';
|
|
245
|
+
const needing = p.explored + p.notExplored.length;
|
|
246
|
+
const gauges = [
|
|
247
|
+
gauge('Pages under contract', p.underContract, p.configured),
|
|
248
|
+
gauge('Explored in depth', p.explored, needing, 'pages with closed menus, tabs or dialogs'),
|
|
249
|
+
...(s?.notVisited ? [gauge('Visited by your suite', p.configured - s.notVisited.length, p.configured, `run of ${s.run.at.slice(0, 10)}`)] : []),
|
|
250
|
+
].join('');
|
|
251
|
+
const timeline = history.length
|
|
252
|
+
? `<section class="timeline" aria-label="Recent tours"><h3>Recent tours</h3><div class="dots">${history
|
|
253
|
+
.slice(-30)
|
|
254
|
+
.map((h) => `<span class="dot" style="background:${MOOD[h.mood].color}" title="${esc(new Date(h.at).toLocaleString('en-GB'))} Β· ${esc(MOOD[h.mood].title)} Β· ${esc(h.mode)} Β· ${esc(duration(h.durationMs))} Β· ${h.underContract} of ${h.configured} pages"></span>`)
|
|
255
|
+
.join('')}</div><div class="legend">${['clean', 'look', 'broken', 'baseline', 'no-answer']
|
|
256
|
+
.map((k) => `<span><i style="background:${MOOD[k].color}"></i>${esc(MOOD[k].title)}</span>`)
|
|
257
|
+
.join('')}</div></section>`
|
|
258
|
+
: '';
|
|
259
|
+
const setup = r.setupRequired ? `<p class="setup">Set it up: ${cmd(`npx -p @ia-qa/pal ${r.setupRequired.command}`)}</p>` : '';
|
|
260
|
+
return `<!doctype html>
|
|
261
|
+
<html lang="en">
|
|
262
|
+
<head>
|
|
263
|
+
<meta charset="utf-8">
|
|
264
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
265
|
+
<title>ia-qa-pal Β· ${esc(host || 'tour')} Β· ${esc(generatedAt.slice(0, 10))}</title>
|
|
266
|
+
<style>
|
|
267
|
+
:root{--bg:#f8fafc;--card:#fff;--ink:#18181b;--muted:#71717a;--line:#e4e4e7;--code:#f4f4f5;--mood:${m.color}}
|
|
268
|
+
@media (prefers-color-scheme:dark){:root{--bg:#09090b;--card:#18181b;--ink:#fafafa;--muted:#a1a1aa;--line:#27272a;--code:#27272a}}
|
|
269
|
+
*{box-sizing:border-box}
|
|
270
|
+
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
|
|
271
|
+
main{max-width:920px;margin:0 auto;padding:24px 16px 64px}
|
|
272
|
+
.hero{background:var(--card);border:1px solid var(--line);border-top:6px solid var(--mood);border-radius:16px;padding:24px;display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center}
|
|
273
|
+
.mascot{font-size:56px;line-height:1;filter:drop-shadow(0 4px 10px rgba(0,0,0,.15));animation:bob 3.2s ease-in-out infinite}
|
|
274
|
+
@keyframes bob{50%{transform:translateY(-4px) rotate(-3deg)}}
|
|
275
|
+
@media (prefers-reduced-motion:reduce){.mascot{animation:none}}
|
|
276
|
+
.bubble{background:color-mix(in srgb,var(--mood) 12%,transparent);border-radius:14px;padding:10px 14px;font-weight:600;margin:0 0 10px;display:inline-block}
|
|
277
|
+
.verdict{margin:0;font-size:clamp(22px,4vw,30px);line-height:1.2}
|
|
278
|
+
.verdict .badge{margin-right:8px}
|
|
279
|
+
.sub{color:var(--muted);margin:8px 0 0;font-size:14px}
|
|
280
|
+
.sub a{color:inherit}
|
|
281
|
+
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
|
|
282
|
+
.chip{border-radius:999px;padding:3px 10px;font-size:13px;background:var(--code)}
|
|
283
|
+
.chip.green{background:#10b98122;color:#059669}.chip.red{background:#ef444422;color:#dc2626}.chip.blue{background:#3b82f622;color:#2563eb}.chip.grey{opacity:.7}
|
|
284
|
+
.gauges{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:16px 0}
|
|
285
|
+
.gauge{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}
|
|
286
|
+
.gauge-label{display:flex;justify-content:space-between;gap:8px;font-size:14px}
|
|
287
|
+
.bar{height:10px;background:var(--code);border-radius:999px;margin-top:8px;overflow:hidden}
|
|
288
|
+
.bar span{display:block;height:100%;background:linear-gradient(90deg,#f97316,#fb923c);border-radius:999px}
|
|
289
|
+
.gauge-note{color:var(--muted);font-size:12px;margin-top:6px}
|
|
290
|
+
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:4px 20px;margin:12px 0}
|
|
291
|
+
.card summary{list-style:none;cursor:pointer}.card summary::-webkit-details-marker{display:none}
|
|
292
|
+
.card h2{font-size:17px;margin:14px 0;display:flex;align-items:center;gap:8px}
|
|
293
|
+
.card:not(details) h2{margin-top:14px}
|
|
294
|
+
.count{margin-left:auto;background:var(--code);border-radius:999px;padding:1px 10px;font-size:13px;font-weight:600}
|
|
295
|
+
#broken{border-left:5px solid #ef4444}#decide{border-left:5px solid #f59e0b}#repair{border-left:5px solid #10b981}#unseen{border-left:5px solid #8b5cf6}
|
|
296
|
+
ul{list-style:none;margin:0 0 14px;padding:0}
|
|
297
|
+
li{padding:9px 0;border-top:1px dashed var(--line);overflow-wrap:anywhere}
|
|
298
|
+
li.hint{color:var(--muted)}li.warn{background:#f59e0b14;border-radius:8px;padding:9px 10px}li.soft{opacity:.92}
|
|
299
|
+
.empty{color:var(--muted);margin:0 0 14px}
|
|
300
|
+
.tag{display:inline-block;border-radius:6px;padding:0 7px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
|
|
301
|
+
.tag.red{background:#ef444422;color:#dc2626}.tag.amber{background:#f59e0b22;color:#b45309}.tag.purple{background:#8b5cf622;color:#7c3aed}
|
|
302
|
+
.muted{color:var(--muted)}
|
|
303
|
+
code{background:var(--code);border-radius:6px;padding:1px 6px;font:13px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
|
|
304
|
+
.cmd{display:inline-flex;align-items:center;gap:4px;max-width:100%}
|
|
305
|
+
.cmd code{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
306
|
+
.copy{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:6px;font-size:12px;padding:1px 8px;cursor:pointer}
|
|
307
|
+
.copy.done{background:#10b981;color:#fff;border-color:#10b981}
|
|
308
|
+
.path .step{white-space:nowrap;background:#f9731618;color:#c2410c;border-radius:6px;padding:0 6px;font-size:13px}
|
|
309
|
+
.arrow{margin:0 4px;color:var(--muted)}
|
|
310
|
+
.diff del{background:#ef444422;text-decoration:line-through;border-radius:4px;padding:0 4px}
|
|
311
|
+
.diff ins{background:#10b98122;text-decoration:none;border-radius:4px;padding:0 4px}
|
|
312
|
+
.timeline{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 20px;margin:12px 0}
|
|
313
|
+
.timeline h3{margin:0 0 10px;font-size:15px}
|
|
314
|
+
.dots{display:flex;flex-wrap:wrap;gap:6px}.dot{width:16px;height:16px;border-radius:50%;display:inline-block}
|
|
315
|
+
.legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px;font-size:12px;color:var(--muted)}.legend i{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:4px}
|
|
316
|
+
.setup{margin:12px 0}
|
|
317
|
+
footer{color:var(--muted);font-size:13px;margin-top:28px;text-align:center}
|
|
318
|
+
footer details{text-align:left;margin-top:12px}footer pre{background:var(--code);border-radius:10px;padding:12px;overflow:auto;max-height:420px;font-size:12px}
|
|
319
|
+
@media (max-width:560px){.hero{grid-template-columns:1fr;text-align:left}.mascot{font-size:44px}}
|
|
320
|
+
</style>
|
|
321
|
+
</head>
|
|
322
|
+
<body>
|
|
323
|
+
<main>
|
|
324
|
+
<header class="hero">
|
|
325
|
+
<div class="mascot" aria-hidden="true">π§βπ¬</div>
|
|
326
|
+
<div>
|
|
327
|
+
<p class="bubble">${esc(palSays(r, mood, toLook))}</p>
|
|
328
|
+
<h1 class="verdict"><span class="badge">${m.badge}</span>${esc(m.title)}</h1>
|
|
329
|
+
<p class="sub">${headline}</p>
|
|
330
|
+
<p class="sub">${r.baseUrl ? `<a href="${esc(r.baseUrl)}" rel="noreferrer">${esc(host)}</a> Β· ` : ''}level ${r.level}${['', ' Β· with a login', ' Β· with your test suite'][r.level]} Β· ${esc(new Date(generatedAt).toLocaleString('en-GB'))} Β· took ${esc(duration(r.durationMs))} Β· exit ${r.exitCode}</p>
|
|
331
|
+
${chips ? `<div class="chips">${chips}</div>` : ''}
|
|
332
|
+
</div>
|
|
333
|
+
</header>
|
|
334
|
+
${setup}
|
|
335
|
+
${r.refused ? '' : `<div class="gauges">${gauges}</div>`}
|
|
336
|
+
${broken.length ? card('broken', 'π΄', 'Broken', broken.length, `<ul>${broken.join('')}</ul>`) : ''}
|
|
337
|
+
${decide.length ? card('decide', 'β', 'To decide', decide.filter((x) => !x.includes('class="hint"')).length, `<ul>${decide.join('')}</ul>${known ? `<p class="empty">${plural(known, 'warning')} already reported β not listed again.</p>` : ''}`) : ''}
|
|
338
|
+
${repair.length ? card('repair', 'π§', 'Ready to repair', s.repairs.total, `<ul>${repair.join('')}</ul>`) : ''}
|
|
339
|
+
${r.refused ? '' : card('unseen', 'π', 'Not seen', unseen.length, unseen.length ? `<ul>${unseen.join('')}</ul>` : '<p class="empty">Everything this tour set out to measure was measured.</p>', { alwaysOpen: true })}
|
|
340
|
+
${timeline}
|
|
341
|
+
<footer>
|
|
342
|
+
Made on this machine by ia-qa-pal${meta.version ? ` ${esc(meta.version)}` : ''} Β· deterministic, no LLM Β· nothing in this file was sent anywhere.
|
|
343
|
+
<details><summary>Raw report (JSON)</summary><pre>${esc(JSON.stringify(r, null, 2))}</pre></details>
|
|
344
|
+
</footer>
|
|
345
|
+
</main>
|
|
346
|
+
<script>
|
|
347
|
+
document.addEventListener('click', function (e) {
|
|
348
|
+
var b = e.target.closest && e.target.closest('.copy');
|
|
349
|
+
if (!b) return;
|
|
350
|
+
var text = b.getAttribute('data-copy');
|
|
351
|
+
var done = function () { b.textContent = 'copied'; b.classList.add('done'); setTimeout(function () { b.textContent = 'copy'; b.classList.remove('done'); }, 1600); };
|
|
352
|
+
if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(done, fallback); } else { fallback(); }
|
|
353
|
+
function fallback() { var t = document.createElement('textarea'); t.value = text; document.body.appendChild(t); t.select(); try { document.execCommand('copy'); done(); } catch (x) {} document.body.removeChild(t); }
|
|
354
|
+
});
|
|
355
|
+
</script>
|
|
356
|
+
</body>
|
|
357
|
+
</html>
|
|
358
|
+
`;
|
|
359
|
+
}
|
|
360
|
+
const reportFile = (dir) => path.join(dir, '.ia-qa', 'pal', 'report.html');
|
|
361
|
+
exports.reportFile = reportFile;
|
|
362
|
+
/** Writes the report next to the project's pal state (or where asked) and returns the absolute path. */
|
|
363
|
+
function writeHtmlReport(dir, r, opts = {}) {
|
|
364
|
+
const file = path.resolve(dir, opts.file ?? (0, exports.reportFile)(dir));
|
|
365
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
366
|
+
fs.writeFileSync(file, renderHtmlReport(r, (0, history_1.readHistory)(dir), { version: opts.version, generatedAt: opts.at }));
|
|
367
|
+
return file;
|
|
368
|
+
}
|
|
369
|
+
/** Best effort: a report that cannot be opened is still written, and its path was printed. */
|
|
370
|
+
function openFile(file) {
|
|
371
|
+
try {
|
|
372
|
+
const [cmd, args] = process.platform === 'win32' ? ['cmd', ['/c', 'start', '""', file]] : process.platform === 'darwin' ? ['open', [file]] : ['xdg-open', [file]];
|
|
373
|
+
const child = (0, child_process_1.spawn)(cmd, args, { detached: true, stdio: 'ignore', windowsHide: true });
|
|
374
|
+
child.on('error', () => undefined);
|
|
375
|
+
child.unref();
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
/* the path is on screen */
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=htmlReport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlReport.js","sourceRoot":"","sources":["../src/htmlReport.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,15 @@ export { trackedTour, startBackground, readRun, activeRun, TourAlreadyRunning }
|
|
|
4
4
|
export type { RunRecord, RunView, BackgroundStart } from './run';
|
|
5
5
|
export type { SuiteInventory, RepairPlan, SuiteAudit, SuiteRun } from './suite';
|
|
6
6
|
export { renderReport } from './report';
|
|
7
|
+
export { renderHtmlReport, writeHtmlReport, reportFile } from './htmlReport';
|
|
8
|
+
export { appendHistory, readHistory, moodOf } from './history';
|
|
9
|
+
export type { HistoryEntry, Mood } from './history';
|
|
7
10
|
export { runSetup, LOGIN_COMMAND } from './setup';
|
|
8
11
|
export type { SetupOptions, SetupOutcome, PalLogin } from './setup';
|
|
9
12
|
export { selectBatch, needingDepth, estimate, splitFindings, exitCodeFor, DEFAULT_BATCH } from './plan';
|
|
10
13
|
export type { Estimate, Pace, CheckSplit } from './plan';
|
|
14
|
+
export { rebaselinePlan, applyRebaseline, renderRebaseline, reasonText } from './rebaseline';
|
|
15
|
+
export type { RebaselinePlan, RebaselinePage, RebaselineReason } from './rebaseline';
|
|
16
|
+
export { suiteCommand } from './suite';
|
|
17
|
+
export { detectFrameworks, captureHints, CAPTURE_IMPORT } from './suite';
|
|
18
|
+
export type { Framework } from './suite';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_BATCH = exports.exitCodeFor = exports.splitFindings = exports.estimate = exports.needingDepth = exports.selectBatch = exports.LOGIN_COMMAND = exports.runSetup = exports.renderReport = exports.TourAlreadyRunning = exports.activeRun = exports.readRun = exports.startBackground = exports.trackedTour = exports.runTour = void 0;
|
|
3
|
+
exports.CAPTURE_IMPORT = exports.captureHints = exports.detectFrameworks = exports.suiteCommand = exports.reasonText = exports.renderRebaseline = exports.applyRebaseline = exports.rebaselinePlan = exports.DEFAULT_BATCH = exports.exitCodeFor = exports.splitFindings = exports.estimate = exports.needingDepth = exports.selectBatch = exports.LOGIN_COMMAND = exports.runSetup = exports.moodOf = exports.readHistory = exports.appendHistory = exports.reportFile = exports.writeHtmlReport = exports.renderHtmlReport = exports.renderReport = exports.TourAlreadyRunning = exports.activeRun = exports.readRun = exports.startBackground = exports.trackedTour = exports.runTour = void 0;
|
|
4
4
|
var tour_1 = require("./tour");
|
|
5
5
|
Object.defineProperty(exports, "runTour", { enumerable: true, get: function () { return tour_1.runTour; } });
|
|
6
6
|
var run_1 = require("./run");
|
|
@@ -11,6 +11,14 @@ Object.defineProperty(exports, "activeRun", { enumerable: true, get: function ()
|
|
|
11
11
|
Object.defineProperty(exports, "TourAlreadyRunning", { enumerable: true, get: function () { return run_1.TourAlreadyRunning; } });
|
|
12
12
|
var report_1 = require("./report");
|
|
13
13
|
Object.defineProperty(exports, "renderReport", { enumerable: true, get: function () { return report_1.renderReport; } });
|
|
14
|
+
var htmlReport_1 = require("./htmlReport");
|
|
15
|
+
Object.defineProperty(exports, "renderHtmlReport", { enumerable: true, get: function () { return htmlReport_1.renderHtmlReport; } });
|
|
16
|
+
Object.defineProperty(exports, "writeHtmlReport", { enumerable: true, get: function () { return htmlReport_1.writeHtmlReport; } });
|
|
17
|
+
Object.defineProperty(exports, "reportFile", { enumerable: true, get: function () { return htmlReport_1.reportFile; } });
|
|
18
|
+
var history_1 = require("./history");
|
|
19
|
+
Object.defineProperty(exports, "appendHistory", { enumerable: true, get: function () { return history_1.appendHistory; } });
|
|
20
|
+
Object.defineProperty(exports, "readHistory", { enumerable: true, get: function () { return history_1.readHistory; } });
|
|
21
|
+
Object.defineProperty(exports, "moodOf", { enumerable: true, get: function () { return history_1.moodOf; } });
|
|
14
22
|
var setup_1 = require("./setup");
|
|
15
23
|
Object.defineProperty(exports, "runSetup", { enumerable: true, get: function () { return setup_1.runSetup; } });
|
|
16
24
|
Object.defineProperty(exports, "LOGIN_COMMAND", { enumerable: true, get: function () { return setup_1.LOGIN_COMMAND; } });
|
|
@@ -21,4 +29,15 @@ Object.defineProperty(exports, "estimate", { enumerable: true, get: function ()
|
|
|
21
29
|
Object.defineProperty(exports, "splitFindings", { enumerable: true, get: function () { return plan_1.splitFindings; } });
|
|
22
30
|
Object.defineProperty(exports, "exitCodeFor", { enumerable: true, get: function () { return plan_1.exitCodeFor; } });
|
|
23
31
|
Object.defineProperty(exports, "DEFAULT_BATCH", { enumerable: true, get: function () { return plan_1.DEFAULT_BATCH; } });
|
|
32
|
+
var rebaseline_1 = require("./rebaseline");
|
|
33
|
+
Object.defineProperty(exports, "rebaselinePlan", { enumerable: true, get: function () { return rebaseline_1.rebaselinePlan; } });
|
|
34
|
+
Object.defineProperty(exports, "applyRebaseline", { enumerable: true, get: function () { return rebaseline_1.applyRebaseline; } });
|
|
35
|
+
Object.defineProperty(exports, "renderRebaseline", { enumerable: true, get: function () { return rebaseline_1.renderRebaseline; } });
|
|
36
|
+
Object.defineProperty(exports, "reasonText", { enumerable: true, get: function () { return rebaseline_1.reasonText; } });
|
|
37
|
+
var suite_1 = require("./suite");
|
|
38
|
+
Object.defineProperty(exports, "suiteCommand", { enumerable: true, get: function () { return suite_1.suiteCommand; } });
|
|
39
|
+
var suite_2 = require("./suite");
|
|
40
|
+
Object.defineProperty(exports, "detectFrameworks", { enumerable: true, get: function () { return suite_2.detectFrameworks; } });
|
|
41
|
+
Object.defineProperty(exports, "captureHints", { enumerable: true, get: function () { return suite_2.captureHints; } });
|
|
42
|
+
Object.defineProperty(exports, "CAPTURE_IMPORT", { enumerable: true, get: function () { return suite_2.CAPTURE_IMPORT; } });
|
|
24
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAEhB,6BAA6F;AAApF,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,gGAAA,SAAS,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAG7E,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,iCAAkD;AAAzC,iGAAA,QAAQ,OAAA;AAAE,sGAAA,aAAa,OAAA;AAEhC,+BAAwG;AAA/F,mGAAA,WAAW,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,mGAAA,WAAW,OAAA;AAAE,qGAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAEhB,6BAA6F;AAApF,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,8FAAA,OAAO,OAAA;AAAE,gGAAA,SAAS,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAG7E,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,2CAA6E;AAApE,8GAAA,gBAAgB,OAAA;AAAE,6GAAA,eAAe,OAAA;AAAE,wGAAA,UAAU,OAAA;AACtD,qCAA+D;AAAtD,wGAAA,aAAa,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iGAAA,MAAM,OAAA;AAE3C,iCAAkD;AAAzC,iGAAA,QAAQ,OAAA;AAAE,sGAAA,aAAa,OAAA;AAEhC,+BAAwG;AAA/F,mGAAA,WAAW,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,mGAAA,WAAW,OAAA;AAAE,qGAAA,aAAa,OAAA;AAEvF,2CAA6F;AAApF,4GAAA,cAAc,OAAA;AAAE,6GAAA,eAAe,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,wGAAA,UAAU,OAAA;AAEtE,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAyE;AAAhE,yGAAA,gBAAgB,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare const TOOLS: ({
|
|
|
16
16
|
more?: undefined;
|
|
17
17
|
suite?: undefined;
|
|
18
18
|
strict?: undefined;
|
|
19
|
+
all_contracts?: undefined;
|
|
19
20
|
batch?: undefined;
|
|
20
21
|
};
|
|
21
22
|
required?: undefined;
|
|
@@ -53,6 +54,7 @@ export declare const TOOLS: ({
|
|
|
53
54
|
more?: undefined;
|
|
54
55
|
suite?: undefined;
|
|
55
56
|
strict?: undefined;
|
|
57
|
+
all_contracts?: undefined;
|
|
56
58
|
batch?: undefined;
|
|
57
59
|
};
|
|
58
60
|
required: string[];
|
|
@@ -75,6 +77,10 @@ export declare const TOOLS: ({
|
|
|
75
77
|
type: string;
|
|
76
78
|
description: string;
|
|
77
79
|
};
|
|
80
|
+
all_contracts: {
|
|
81
|
+
type: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
78
84
|
batch: {
|
|
79
85
|
type: string;
|
|
80
86
|
description: string;
|
package/dist/mcp/server.js
CHANGED
|
@@ -97,6 +97,7 @@ exports.TOOLS = [
|
|
|
97
97
|
more: { type: 'boolean', description: 'Explore the next batch in depth instead of a regression tour. Refused after a BLOCK.' },
|
|
98
98
|
suite: { type: 'boolean', description: 'Also run the test command from config.json once, with the capture hook, to learn which pages the suite never visits. It runs the humanβs own suite on this machine β ask before setting it.' },
|
|
99
99
|
strict: { type: 'boolean', description: 'Also fail on drift behind interaction β elements reached only by clicking, which may depend on the data the click lands on.' },
|
|
100
|
+
all_contracts: { type: 'boolean', description: 'Judge every contract in .ia-qa/mapping/, not only the pages the config declares. Default false: contracts left by other applications are reported as not measured, never folded into the verdict.' },
|
|
100
101
|
batch: { type: 'integer', description: 'Pages per depth batch (default 10).' },
|
|
101
102
|
project_dir: PROJECT_DIR,
|
|
102
103
|
},
|
|
@@ -158,7 +159,7 @@ async function callTool(name, args, root = process.cwd()) {
|
|
|
158
159
|
}
|
|
159
160
|
if (name === 'pal_tour') {
|
|
160
161
|
const batch = Number.isInteger(args.batch) && args.batch > 0 ? args.batch : undefined;
|
|
161
|
-
const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, strict: !!args.strict, batch }, CLI_ENTRY);
|
|
162
|
+
const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, strict: !!args.strict, allContracts: !!args.all_contracts, batch }, CLI_ENTRY);
|
|
162
163
|
return started.started
|
|
163
164
|
? { ...started, next: 'Call pal_status to follow it. A tour takes minutes.' }
|
|
164
165
|
: { ...started, ...(!config ? { next: 'Not set up: ask the human where the app lives and how it logs in, then call pal_setup.' } : {}) };
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|