@ia-qa/pal 0.3.0 β†’ 0.5.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { TourResult } from './tour';
2
+ import type { HistoryEntry } from './history';
3
+ export declare function renderHtmlReport(r: TourResult, history?: HistoryEntry[], meta?: {
4
+ version?: string;
5
+ generatedAt?: string;
6
+ }): string;
7
+ export declare const reportFile: (dir: string) => string;
8
+ /** Writes the report next to the project's pal state (or where asked) and returns the absolute path. */
9
+ export declare function writeHtmlReport(dir: string, r: TourResult, opts?: {
10
+ file?: string;
11
+ version?: string;
12
+ at?: string;
13
+ }): string;
14
+ /** Best effort: a report that cannot be opened is still written, and its path was printed. */
15
+ export declare function openFile(file: string): void;
@@ -0,0 +1,368 @@
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 suite_1 = require("./suite");
46
+ /**
47
+ * The tour as one self-contained HTML file, for the person who does not live in a terminal.
48
+ *
49
+ * Rendered from the same `TourResult` the terminal prints, so the two cannot disagree. Three
50
+ * rules hold it: every string that came from the app under test is escaped (a button label is
51
+ * data, and a report must never run it); "Not seen" is never collapsed; counts are always
52
+ * "X of Y", never a percentage β€” a percentage reads as coverage, and this is not a coverage metric.
53
+ * No external resource, nothing sent anywhere: the file works offline and from a mail attachment.
54
+ */
55
+ const esc = (value) => String(value ?? '').replace(/[&<>"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[c]);
56
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
57
+ const MOOD = {
58
+ baseline: { color: '#3b82f6', badge: 'πŸ“Œ', title: 'Baseline established' },
59
+ clean: { color: '#10b981', badge: 'βœ…', title: 'All clear' },
60
+ look: { color: '#f59e0b', badge: '⚠️', title: 'Worth a look' },
61
+ broken: { color: '#ef4444', badge: 'β›”', title: 'Something broke' },
62
+ 'no-answer': { color: '#8b5cf6', badge: '⏸', title: 'No answer this time' },
63
+ };
64
+ function palSays(r, mood, toLook) {
65
+ switch (mood) {
66
+ case 'baseline':
67
+ return r.mode === 'explore'
68
+ ? 'I opened more menus, tabs and dialogs and added what I found to the reference.'
69
+ : 'First look done. I wrote down how your app is today β€” next time, I will tell you what changed.';
70
+ case 'clean':
71
+ return 'Nothing moved since last time. Enjoy your day.';
72
+ case 'look':
73
+ return `Nothing broke, but I found ${plural(toLook, 'thing')} worth a look.`;
74
+ case 'broken':
75
+ return 'Something broke. Here is exactly what I saw.';
76
+ default:
77
+ return 'I could not give you an answer this time β€” here is why.';
78
+ }
79
+ }
80
+ const duration = (ms) => {
81
+ const s = Math.round(ms / 1000);
82
+ 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')}`;
83
+ };
84
+ 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>`;
85
+ function gauge(label, have, of, note = '') {
86
+ const width = of > 0 ? Math.min(100, Math.round((have / of) * 100)) : 0;
87
+ return `<div class="gauge">
88
+ <div class="gauge-label"><span>${esc(label)}</span><strong>${have} of ${of}</strong></div>
89
+ <div class="bar" role="img" aria-label="${have} of ${of}"><span style="width:${width}%"></span></div>
90
+ ${note ? `<div class="gauge-note">${esc(note)}</div>` : ''}
91
+ </div>`;
92
+ }
93
+ function card(id, icon, title, count, body, opts = {}) {
94
+ if (opts.alwaysOpen) {
95
+ return `<section class="card" id="${id}"><h2>${icon} ${esc(title)} <span class="count">${count}</span></h2>${body}</section>`;
96
+ }
97
+ return `<details class="card" id="${id}"${opts.open === false ? '' : ' open'}><summary><h2>${icon} ${esc(title)} <span class="count">${count}</span></h2></summary>${body}</details>`;
98
+ }
99
+ const item = (html, tone = '') => `<li class="${tone}">${html}</li>`;
100
+ function renderHtmlReport(r, history = [], meta = {}) {
101
+ const mood = (0, history_1.moodOf)(r);
102
+ const m = MOOD[mood];
103
+ const generatedAt = meta.generatedAt ?? new Date().toISOString();
104
+ const d = r.drift;
105
+ const s = r.suite;
106
+ const p = r.pages;
107
+ let host = r.baseUrl;
108
+ try {
109
+ host = new URL(r.baseUrl).host;
110
+ }
111
+ catch {
112
+ /* keep the raw value */
113
+ }
114
+ const broken = [];
115
+ for (const link of r.check?.deadLinks ?? []) {
116
+ 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>` : '';
117
+ broken.push(item(`<span class="tag red">${esc(link.status ?? link.error ?? 'no answer')}</span> <code>${esc(link.url)}</code>${from}`));
118
+ }
119
+ if (r.check && r.check.knownDeadLinks > 0)
120
+ broken.push(item(`${plural(r.check.knownDeadLinks, 'dead link')} of these ${r.check.knownDeadLinks === 1 ? 'was' : 'were'} already reported by a previous tour.`, 'hint'));
121
+ if (s?.ranThisTour && s.run && s.run.exitCode !== 0) {
122
+ broken.push(item(`<span class="tag red">suite</span> your test command exited ${s.run.exitCode}: <code>${esc(s.run.command)}</code>`));
123
+ }
124
+ const decide = [];
125
+ if (d) {
126
+ for (const f of d.onLoad)
127
+ 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>`));
128
+ for (const page of d.suitePages)
129
+ 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')}`));
130
+ for (const f of d.behindInteraction) {
131
+ 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'));
132
+ }
133
+ const pages = [...new Set([...d.onLoad, ...d.behindInteraction].map((f) => f.page).concat(d.suitePages))];
134
+ if (pages.length > 0)
135
+ 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'));
136
+ }
137
+ const sf = d?.suiteFindings;
138
+ if (sf && sf.names + sf.bindings > 0) {
139
+ 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')}`));
140
+ }
141
+ if (r.check) {
142
+ const c = r.check;
143
+ if (c.newUnnamed.length > 0)
144
+ 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])}`));
145
+ if (c.newAmbiguous.length > 0)
146
+ 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])}`));
147
+ if (c.newOrphans.length > 0)
148
+ 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 ? ', …' : ''}`));
149
+ }
150
+ for (const dead of s?.newDeadNames ?? []) {
151
+ const site = dead.sites[0] ? ` at <code>${esc(dead.sites[0].file)}:${dead.sites[0].line}</code>` : '';
152
+ 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>`));
153
+ }
154
+ const masks = (d?.maskSuggestions ?? []).filter((x) => x.pattern);
155
+ if (masks.length > 0) {
156
+ 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'));
157
+ }
158
+ const known = (r.check?.knownWarnings ?? 0) + (s?.knownDeadNames ?? 0);
159
+ const repair = [];
160
+ if (s?.repairs && s.repairs.total > 0) {
161
+ for (const f of s.repairs.files) {
162
+ for (const rep of f.replacements) {
163
+ 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>`));
164
+ }
165
+ }
166
+ if (s.repairs.leftAlone > 0)
167
+ repair.push(item(`${plural(s.repairs.leftAlone, 'occurrence')} deliberately left alone β€” the command below says why.`, 'hint'));
168
+ repair.push(item(`Review, then apply β€” pal never edits your tests: ${cmd(s.repairs.command)}`, 'hint'));
169
+ }
170
+ const unseen = [];
171
+ if (p.notExplored.length > 0) {
172
+ const e = r.estimate;
173
+ 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')}`));
174
+ }
175
+ const walled = p.notMapped.filter((x) => x.loginWall);
176
+ if (walled.length > 0)
177
+ 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'));
178
+ for (const x of p.notMapped.filter((y) => !y.loginWall))
179
+ unseen.push(item(`<strong>${esc(x.page)}</strong> not mapped β€” <span class="muted">${esc(x.reason)}</span>`));
180
+ for (const u of p.unreadable ?? [])
181
+ 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'));
182
+ if (d && d.olderCapture.length > 0)
183
+ unseen.push(item(`Drift on ${[...new Set(d.olderCapture.map((f) => esc(f.page)))].join(', ')} is from an older capture and not counted.`));
184
+ if (p.partlyExplored.length > 0)
185
+ unseen.push(item(`Only partly explored (click budget reached): ${p.partlyExplored.map(esc).join(', ')}`));
186
+ if (p.notInBaseline.length > 0)
187
+ unseen.push(item(`Not in the baseline yet: ${p.notInBaseline.map(esc).join(', ')}`));
188
+ for (const x of d?.staleExcluded ?? [])
189
+ unseen.push(item(`<strong>${esc(x)}</strong> not compared β€” same capture on both sides`));
190
+ if (d?.depthMismatch)
191
+ unseen.push(item(esc(d.depthMismatch)));
192
+ if (r.check && r.check.unverified > 0)
193
+ unseen.push(item(`${plural(r.check.unverified, 'link')} could not be verified (rate-limited or no answer)`));
194
+ for (const k of r.check?.skipped ?? [])
195
+ unseen.push(item(`Check skipped β€” ${esc(k.check)}: ${esc(k.why)}`));
196
+ if (s) {
197
+ if (s.inventory.missingPaths.length > 0)
198
+ unseen.push(item(`Test paths not found: ${s.inventory.missingPaths.map(esc).join(', ')}`, 'warn'));
199
+ if (s.inventory.filesScanned === 0)
200
+ unseen.push(item('No test file found under your test paths β€” nothing of your suite was read.', 'warn'));
201
+ if (!s.run)
202
+ unseen.push(item(`Which pages your suite visits is not measured yet. ${cmd('npx -p @ia-qa/pal ia-qa-pal tour --suite')}`));
203
+ else if (s.notVisited === null)
204
+ unseen.push(item(`Your suite ran (${esc(s.run.at.slice(0, 10))}, exit ${s.run.exitCode}) but recorded no page β€” its specs need the capture hook: ${cmd(suite_1.CAPTURE_IMPORT)}`, 'warn'));
205
+ else if (s.notVisited.length > 0)
206
+ unseen.push(item(`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(', ')}`));
207
+ }
208
+ const toLook = decide.filter((x) => !x.includes('class="hint"')).length + repair.filter((x) => !x.includes('class="hint"')).length;
209
+ const t = d?.totals;
210
+ const chips = t
211
+ ? [
212
+ ['ok', t.ok, 'green'],
213
+ ['renamed', t.renamed, 'blue'],
214
+ ['lost', t.lost, t.lost ? 'red' : 'grey'],
215
+ ['ambiguous', t.ambiguous, t.ambiguous ? 'red' : 'grey'],
216
+ ['rebound', t.rebound, t.rebound ? 'red' : 'grey'],
217
+ ]
218
+ .map(([k, v, tone]) => `<span class="chip ${tone}"><strong>${v}</strong> ${k}</span>`)
219
+ .join('')
220
+ : '';
221
+ const headline = r.refused
222
+ ? esc(r.refused)
223
+ : mood === 'baseline'
224
+ ? r.mode === 'explore'
225
+ ? `${plural(p.exploredThisTour.length, 'page')} explored in depth and added to the reference`
226
+ : 'Nothing to compare yet β€” this tour is the reference the next one measures against'
227
+ : d && d.verdict === 'BLOCK' && !d.gating
228
+ ? 'Drift only behind interaction β€” not failing the tour'
229
+ : d
230
+ ? `Compared with the baseline: ${d.verdict}`
231
+ : 'No page could be compared this tour';
232
+ const needing = p.explored + p.notExplored.length;
233
+ const gauges = [
234
+ gauge('Pages under contract', p.underContract, p.configured),
235
+ gauge('Explored in depth', p.explored, needing, 'pages with closed menus, tabs or dialogs'),
236
+ ...(s?.notVisited ? [gauge('Visited by your suite', p.configured - s.notVisited.length, p.configured, `run of ${s.run.at.slice(0, 10)}`)] : []),
237
+ ].join('');
238
+ const timeline = history.length
239
+ ? `<section class="timeline" aria-label="Recent tours"><h3>Recent tours</h3><div class="dots">${history
240
+ .slice(-30)
241
+ .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>`)
242
+ .join('')}</div><div class="legend">${['clean', 'look', 'broken', 'baseline', 'no-answer']
243
+ .map((k) => `<span><i style="background:${MOOD[k].color}"></i>${esc(MOOD[k].title)}</span>`)
244
+ .join('')}</div></section>`
245
+ : '';
246
+ const setup = r.setupRequired ? `<p class="setup">Set it up: ${cmd(`npx -p @ia-qa/pal ${r.setupRequired.command}`)}</p>` : '';
247
+ return `<!doctype html>
248
+ <html lang="en">
249
+ <head>
250
+ <meta charset="utf-8">
251
+ <meta name="viewport" content="width=device-width, initial-scale=1">
252
+ <title>ia-qa-pal Β· ${esc(host || 'tour')} Β· ${esc(generatedAt.slice(0, 10))}</title>
253
+ <style>
254
+ :root{--bg:#f8fafc;--card:#fff;--ink:#18181b;--muted:#71717a;--line:#e4e4e7;--code:#f4f4f5;--mood:${m.color}}
255
+ @media (prefers-color-scheme:dark){:root{--bg:#09090b;--card:#18181b;--ink:#fafafa;--muted:#a1a1aa;--line:#27272a;--code:#27272a}}
256
+ *{box-sizing:border-box}
257
+ body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
258
+ main{max-width:920px;margin:0 auto;padding:24px 16px 64px}
259
+ .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}
260
+ .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}
261
+ @keyframes bob{50%{transform:translateY(-4px) rotate(-3deg)}}
262
+ @media (prefers-reduced-motion:reduce){.mascot{animation:none}}
263
+ .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}
264
+ .verdict{margin:0;font-size:clamp(22px,4vw,30px);line-height:1.2}
265
+ .verdict .badge{margin-right:8px}
266
+ .sub{color:var(--muted);margin:8px 0 0;font-size:14px}
267
+ .sub a{color:inherit}
268
+ .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
269
+ .chip{border-radius:999px;padding:3px 10px;font-size:13px;background:var(--code)}
270
+ .chip.green{background:#10b98122;color:#059669}.chip.red{background:#ef444422;color:#dc2626}.chip.blue{background:#3b82f622;color:#2563eb}.chip.grey{opacity:.7}
271
+ .gauges{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:16px 0}
272
+ .gauge{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}
273
+ .gauge-label{display:flex;justify-content:space-between;gap:8px;font-size:14px}
274
+ .bar{height:10px;background:var(--code);border-radius:999px;margin-top:8px;overflow:hidden}
275
+ .bar span{display:block;height:100%;background:linear-gradient(90deg,#f97316,#fb923c);border-radius:999px}
276
+ .gauge-note{color:var(--muted);font-size:12px;margin-top:6px}
277
+ .card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:4px 20px;margin:12px 0}
278
+ .card summary{list-style:none;cursor:pointer}.card summary::-webkit-details-marker{display:none}
279
+ .card h2{font-size:17px;margin:14px 0;display:flex;align-items:center;gap:8px}
280
+ .card:not(details) h2{margin-top:14px}
281
+ .count{margin-left:auto;background:var(--code);border-radius:999px;padding:1px 10px;font-size:13px;font-weight:600}
282
+ #broken{border-left:5px solid #ef4444}#decide{border-left:5px solid #f59e0b}#repair{border-left:5px solid #10b981}#unseen{border-left:5px solid #8b5cf6}
283
+ ul{list-style:none;margin:0 0 14px;padding:0}
284
+ li{padding:9px 0;border-top:1px dashed var(--line);overflow-wrap:anywhere}
285
+ li.hint{color:var(--muted)}li.warn{background:#f59e0b14;border-radius:8px;padding:9px 10px}li.soft{opacity:.92}
286
+ .empty{color:var(--muted);margin:0 0 14px}
287
+ .tag{display:inline-block;border-radius:6px;padding:0 7px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
288
+ .tag.red{background:#ef444422;color:#dc2626}.tag.amber{background:#f59e0b22;color:#b45309}.tag.purple{background:#8b5cf622;color:#7c3aed}
289
+ .muted{color:var(--muted)}
290
+ code{background:var(--code);border-radius:6px;padding:1px 6px;font:13px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
291
+ .cmd{display:inline-flex;align-items:center;gap:4px;max-width:100%}
292
+ .cmd code{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
293
+ .copy{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:6px;font-size:12px;padding:1px 8px;cursor:pointer}
294
+ .copy.done{background:#10b981;color:#fff;border-color:#10b981}
295
+ .path .step{white-space:nowrap;background:#f9731618;color:#c2410c;border-radius:6px;padding:0 6px;font-size:13px}
296
+ .arrow{margin:0 4px;color:var(--muted)}
297
+ .diff del{background:#ef444422;text-decoration:line-through;border-radius:4px;padding:0 4px}
298
+ .diff ins{background:#10b98122;text-decoration:none;border-radius:4px;padding:0 4px}
299
+ .timeline{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 20px;margin:12px 0}
300
+ .timeline h3{margin:0 0 10px;font-size:15px}
301
+ .dots{display:flex;flex-wrap:wrap;gap:6px}.dot{width:16px;height:16px;border-radius:50%;display:inline-block}
302
+ .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}
303
+ .setup{margin:12px 0}
304
+ footer{color:var(--muted);font-size:13px;margin-top:28px;text-align:center}
305
+ 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}
306
+ @media (max-width:560px){.hero{grid-template-columns:1fr;text-align:left}.mascot{font-size:44px}}
307
+ </style>
308
+ </head>
309
+ <body>
310
+ <main>
311
+ <header class="hero">
312
+ <div class="mascot" aria-hidden="true">πŸ§‘β€πŸ”¬</div>
313
+ <div>
314
+ <p class="bubble">${esc(palSays(r, mood, toLook))}</p>
315
+ <h1 class="verdict"><span class="badge">${m.badge}</span>${esc(m.title)}</h1>
316
+ <p class="sub">${headline}</p>
317
+ <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>
318
+ ${chips ? `<div class="chips">${chips}</div>` : ''}
319
+ </div>
320
+ </header>
321
+ ${setup}
322
+ ${r.refused ? '' : `<div class="gauges">${gauges}</div>`}
323
+ ${broken.length ? card('broken', 'πŸ”΄', 'Broken', broken.length, `<ul>${broken.join('')}</ul>`) : ''}
324
+ ${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>` : ''}`) : ''}
325
+ ${repair.length ? card('repair', 'πŸ”§', 'Ready to repair', s.repairs.total, `<ul>${repair.join('')}</ul>`) : ''}
326
+ ${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 })}
327
+ ${timeline}
328
+ <footer>
329
+ Made on this machine by ia-qa-pal${meta.version ? ` ${esc(meta.version)}` : ''} Β· deterministic, no LLM Β· nothing in this file was sent anywhere.
330
+ <details><summary>Raw report (JSON)</summary><pre>${esc(JSON.stringify(r, null, 2))}</pre></details>
331
+ </footer>
332
+ </main>
333
+ <script>
334
+ document.addEventListener('click', function (e) {
335
+ var b = e.target.closest && e.target.closest('.copy');
336
+ if (!b) return;
337
+ var text = b.getAttribute('data-copy');
338
+ var done = function () { b.textContent = 'copied'; b.classList.add('done'); setTimeout(function () { b.textContent = 'copy'; b.classList.remove('done'); }, 1600); };
339
+ if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(done, fallback); } else { fallback(); }
340
+ 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); }
341
+ });
342
+ </script>
343
+ </body>
344
+ </html>
345
+ `;
346
+ }
347
+ const reportFile = (dir) => path.join(dir, '.ia-qa', 'pal', 'report.html');
348
+ exports.reportFile = reportFile;
349
+ /** Writes the report next to the project's pal state (or where asked) and returns the absolute path. */
350
+ function writeHtmlReport(dir, r, opts = {}) {
351
+ const file = path.resolve(dir, opts.file ?? (0, exports.reportFile)(dir));
352
+ fs.mkdirSync(path.dirname(file), { recursive: true });
353
+ fs.writeFileSync(file, renderHtmlReport(r, (0, history_1.readHistory)(dir), { version: opts.version, generatedAt: opts.at }));
354
+ return file;
355
+ }
356
+ /** Best effort: a report that cannot be opened is still written, and its path was printed. */
357
+ function openFile(file) {
358
+ try {
359
+ const [cmd, args] = process.platform === 'win32' ? ['cmd', ['/c', 'start', '""', file]] : process.platform === 'darwin' ? ['open', [file]] : ['xdg-open', [file]];
360
+ const child = (0, child_process_1.spawn)(cmd, args, { detached: true, stdio: 'ignore', windowsHide: true });
361
+ child.on('error', () => undefined);
362
+ child.unref();
363
+ }
364
+ catch {
365
+ /* the path is on screen */
366
+ }
367
+ }
368
+ //# sourceMappingURL=htmlReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlReport.js","sourceRoot":"","sources":["../src/htmlReport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EA,4CAuPC;AAKD,0CAKC;AAGD,4BAUC;AAzVD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAsC;AAGtC,uCAAgD;AAChD,mCAAwC;AACxC,mCAAyC;AAEzC;;;;;;;;GAQG;AAEH,MAAM,GAAG,GAAG,CAAC,KAAc,EAAU,EAAE,CACrC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;AAEhI,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAE5F,MAAM,IAAI,GAAkE;IAC1E,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC1E,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE;IAC3D,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE;IAC9D,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE;IAClE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE;CAC5E,CAAC;AAEF,SAAS,OAAO,CAAC,CAAa,EAAE,IAAU,EAAE,MAAc;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS;gBACzB,CAAC,CAAC,gFAAgF;gBAClF,CAAC,CAAC,gGAAgG,CAAC;QACvG,KAAK,OAAO;YACV,OAAO,gDAAgD,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,8BAA8B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC;QAC/E,KAAK,QAAQ;YACX,OAAO,8CAA8C,CAAC;QACxD;YACE,OAAO,yDAAyD,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC1J,CAAC,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAC3B,2BAA2B,GAAG,CAAC,IAAI,CAAC,wDAAwD,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC;AAE1J,SAAS,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,EAAU,EAAE,IAAI,GAAG,EAAE;IAC/D,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO;qCAC4B,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,OAAO,EAAE;8CAChC,IAAI,OAAO,EAAE,wBAAwB,KAAK;MAClF,IAAI,CAAC,CAAC,CAAC,2BAA2B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SACrD,CAAC;AACV,CAAC;AAED,SAAS,IAAI,CAAC,EAAU,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa,EAAE,IAAY,EAAE,OAAiD,EAAE;IACrI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,6BAA6B,EAAE,SAAS,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,wBAAwB,KAAK,eAAe,IAAI,YAAY,CAAC;IAChI,CAAC;IACD,OAAO,6BAA6B,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,iBAAiB,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,wBAAwB,KAAK,yBAAyB,IAAI,YAAY,CAAC;AACxL,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,cAAc,IAAI,KAAK,IAAI,OAAO,CAAC;AAE7E,SAAgB,gBAAgB,CAAC,CAAa,EAAE,UAA0B,EAAE,EAAE,OAAmD,EAAE;IACjI,MAAM,IAAI,GAAG,IAAA,gBAAM,EAAC,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAElB,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;IACrB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1I,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,uCAAuC,EAAE,MAAM,CAAC,CAAC,CAAC;IACtN,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,GAAG,CAAC,QAAQ,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACzI,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC,CAAC;QAC3N,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C,GAAG,CAAC,IAAI,CAAC,yDAAyD,GAAG,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC,CAAC;QACxN,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CACT,IAAI,CACF,2BAA2B,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,GAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,gFAAgF,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,SAAS,EAC5W,MAAM,CACP,CACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1G,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gFAAgF,GAAG,CAAC,sCAAsC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAClM,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,CAAC;IAC5B,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,IAAI,CACF,sCAAsC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,2CAA2C,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,4CAA4C,CAAC,EAAE,CACtT,CACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,sCAAsC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjR,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,sCAAsC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrS,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxP,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,YAAY,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uDAAuD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,+GAA+G,CAAC,CAAC,CAAC;IAClN,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,IAAI,CACF,yCAAyC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,2HAA2H,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EACjS,MAAM,CACP,CACF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,mCAAmC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,0CAA0C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;YAClN,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,wDAAwD,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7J,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAoD,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC,eAAe,wBAAwB,CAAC,CAAC,cAAc,iBAAiB,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,yCAAyC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjV,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,gEAAgE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,qBAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7O,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,8CAA8C,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACvK,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,iFAAiF,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAClN,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAC/K,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3I,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrH,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAClI,IAAI,CAAC,EAAE,aAAa;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;IACpJ,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,CAAC,EAAE,CAAC;QACN,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5I,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4EAA4E,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5I,IAAI,CAAC,CAAC,CAAC,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,sDAAsD,GAAG,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC,CAAC;aAClI,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,6DAA6D,GAAG,CAAC,sBAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;aAC9M,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,UAAU,CAAC,MAAM,OAAO,CAAC,CAAC,UAAU,kBAAkB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7M,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;IACnI,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,KAAK,GAAG,CAAC;QACb,CAAC,CAAC;YACE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC;YACrB,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC;YAC9B,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACxD,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;SACnD;aACE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,qBAAqB,IAAI,aAAa,CAAC,aAAa,CAAC,SAAS,CAAC;aACrF,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO;QACxB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAChB,CAAC,CAAC,IAAI,KAAK,UAAU;YACnB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;gBACpB,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,+CAA+C;gBAC7F,CAAC,CAAC,mFAAmF;YACvF,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM;gBACvC,CAAC,CAAC,sDAAsD;gBACxD,CAAC,CAAC,CAAC;oBACD,CAAC,CAAC,+BAA+B,CAAC,CAAC,OAAO,EAAE;oBAC5C,CAAC,CAAC,qCAAqC,CAAC;IAEhD,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IAClD,MAAM,MAAM,GAAG;QACb,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC;QAC5D,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,0CAA0C,CAAC;QAC3F,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjJ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM;QAC7B,CAAC,CAAC,8FAA8F,OAAO;aAClG,KAAK,CAAC,CAAC,EAAE,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uCAAuC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,OAAO,CAAC,CAAC,UAAU,iBAAiB,CAAC;aACpQ,IAAI,CAAC,EAAE,CAAC,6BAA8B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAY;aACrG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;aAC3F,IAAI,CAAC,EAAE,CAAC,kBAAkB;QAC/B,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,+BAA+B,GAAG,CAAC,qBAAqB,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9H,OAAO;;;;;qBAKY,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;oGAEyB,CAAC,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4DnF,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;8CACP,CAAC,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;qBACtD,QAAQ;qBACR,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,iBAAiB,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ;MACnS,KAAK,CAAC,CAAC,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE;;;EAGpD,KAAK;EACL,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uBAAuB,MAAM,QAAQ;EACtD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;EACjG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,2CAA2C,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;EACrP,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAE,CAAC,OAAQ,CAAC,KAAK,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;EAC9G,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,4EAA4E,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;EACpN,QAAQ;;qCAE2B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;sDAC1B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;CAepF,CAAC;AACF,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAA7E,QAAA,UAAU,cAAmE;AAE1F,wGAAwG;AACxG,SAAgB,eAAe,CAAC,GAAW,EAAE,CAAa,EAAE,OAAyD,EAAE;IACrH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,IAAA,qBAAW,EAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8FAA8F;AAC9F,SAAgB,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GACf,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChJ,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,IAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnC,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,9 @@ 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';
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.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; } });
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"}
@@ -15,6 +15,7 @@ export declare const TOOLS: ({
15
15
  tests?: undefined;
16
16
  more?: undefined;
17
17
  suite?: undefined;
18
+ strict?: undefined;
18
19
  batch?: undefined;
19
20
  };
20
21
  required?: undefined;
@@ -51,6 +52,7 @@ export declare const TOOLS: ({
51
52
  };
52
53
  more?: undefined;
53
54
  suite?: undefined;
55
+ strict?: undefined;
54
56
  batch?: undefined;
55
57
  };
56
58
  required: string[];
@@ -69,6 +71,10 @@ export declare const TOOLS: ({
69
71
  type: string;
70
72
  description: string;
71
73
  };
74
+ strict: {
75
+ type: string;
76
+ description: string;
77
+ };
72
78
  batch: {
73
79
  type: string;
74
80
  description: string;
@@ -96,6 +96,7 @@ exports.TOOLS = [
96
96
  properties: {
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
+ 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.' },
99
100
  batch: { type: 'integer', description: 'Pages per depth batch (default 10).' },
100
101
  project_dir: PROJECT_DIR,
101
102
  },
@@ -103,7 +104,7 @@ exports.TOOLS = [
103
104
  },
104
105
  {
105
106
  name: 'pal_status',
106
- description: 'The tour running now β€” phase and progress β€” or the last one: its full report once done, as JSON and as the text a human reads. A tour whose process died before finishing is reported as interrupted, never as running. Read-only.',
107
+ description: 'The tour running now β€” phase and progress β€” or the last one: its full report once done, as JSON and as the text a human reads. A tour whose process died before finishing is reported as interrupted, never as running. Read-only. When the report lists drift a human judges intended, the human accepts it with `ia-qa-pal accept <page>` β€” there is no tool for that on purpose.',
107
108
  inputSchema: { type: 'object', properties: { project_dir: PROJECT_DIR } },
108
109
  },
109
110
  ];
@@ -157,7 +158,7 @@ async function callTool(name, args, root = process.cwd()) {
157
158
  }
158
159
  if (name === 'pal_tour') {
159
160
  const batch = Number.isInteger(args.batch) && args.batch > 0 ? args.batch : undefined;
160
- const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, batch }, CLI_ENTRY);
161
+ const started = (0, run_1.startBackground)(dir, { more: !!args.more, suite: !!args.suite, strict: !!args.strict, batch }, CLI_ENTRY);
161
162
  return started.started
162
163
  ? { ...started, next: 'Call pal_status to follow it. A tour takes minutes.' }
163
164
  : { ...started, ...(!config ? { next: 'Not set up: ask the human where the app lives and how it logs in, then call pal_setup.' } : {}) };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}