@ia-qa/pal 1.7.0 → 1.7.2

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 CHANGED
@@ -97,10 +97,17 @@ npx ia-qa-pal ui
97
97
 
98
98
  Your browser opens on a page that does the whole loop from buttons:
99
99
 
100
+ [![The pal console while a tour runs: two users with saved sessions, the tour walking page 9 of 14 with a live heartbeat, and the history of the last seven tours with who each one ran as](https://www.ia-qa.com/media/pal-console.png)](https://www.ia-qa.com/media/pal-console.png)
101
+
100
102
  - **Who the tour runs as.** Every user the project knows (see *Several users* below), whether each one still has a working session, a **Check** button that asks the app, and **Log in** — a browser window opens on your app, you log in, and it is saved by itself the moment the app actually opens. Nothing to come back and confirm; the *I have logged in* button is there if your login cannot be seen from outside.
101
103
  - **Run a tour**, as the user you choose, optionally with your tests.
102
104
  - **Now** — the phase, *page N of M*, the last line your tests printed, and the last heartbeat. A tour that has said nothing for a while says so, instead of looking the same as a working one.
103
105
  - **Last result** and **History** — the mood, the counts, who it ran as, and the full report one click away.
106
+ - **The repair console, when it is time for it.** When a tour leaves elements for a person to decide or repairs ready to apply, the result says how many and offers **Decide and repair** — it opens `ia-qa-heal ui` on the same project, where each row is shown side by side and nothing is applied until you say so. The **Repair console** link in the header opens it any time.
107
+
108
+ [![The console after a tour: Broken, 14 of 16 pages under contract, 3 lost, 2 ambiguous, 1 rebound, 7 repairs ready, and the button that opens the repair console](https://www.ia-qa.com/media/pal-console-result.png)](https://www.ia-qa.com/media/pal-console-result.png)
109
+
110
+ - **Before a tour starts**, the page checks that the login secrets it will need resolve (only when it logs in with `auth`, not with a session) — a missing one is named, and the field to store it is filled in for you. A tour that fails anyway shows its reason in *Now*, never only in `.ia-qa/pal/run.log`.
104
111
  - **Secrets** — listed **by name**, checked for whether they resolve, and **set from the page**: type a value once and it goes into this machine's credential store (Windows DPAPI, the macOS keychain, or the Linux keyring) — the same place `ia-qa-heal secret set <NAME>` writes to, and nowhere else. The page never shows it back, not even its length; the store is read back before the page says *stored*; `.ia-qa/config.json` is **never edited**. An existing `{ "source": "env", "key": "APP_PASSWORD" }` reference picks up a value stored under `APP_PASSWORD` when your shell does not set that variable. A variable set in the shell always wins, so CI, which sets it and has no store, behaves exactly as before. On a machine with no store, the page says so and points you to the shell. Secrets kept in AWS are never checked from here: that would call AWS, and nothing here leaves your machine without asking.
105
112
 
106
113
  It listens on `127.0.0.1` only, every request carries a one-time token (the link it opens for you), and it stops by itself when you close the tab. It is the same guarded server `ia-qa-heal ui` uses, not a second one. `--port`, `--no-open`, `--keep-alive`. It refuses to start under CI.
package/TUTORIAL.md CHANGED
@@ -439,6 +439,33 @@ When it is done, `status` prints the report, and `npx ia-qa-pal report --open` o
439
439
 
440
440
  ---
441
441
 
442
+ ## 8b. Without a terminal — the console
443
+
444
+ Everything above, from buttons:
445
+
446
+ ```bash
447
+ npx ia-qa-pal ui
448
+ ```
449
+
450
+ [![The pal console while a tour runs: who the tour runs as, the tour walking page 9 of 14, the heartbeat, and the history](https://www.ia-qa.com/media/pal-console.png)](https://www.ia-qa.com/media/pal-console.png)
451
+
452
+ 1. **Who the tour runs as.** Each user the project knows, with **Check** (does the session still open the app?) and **Log in** — a browser window opens on your app, you log in, and it is saved by itself. No user yet: type a name, then *Log in as this user*.
453
+ 2. **Run a tour.** Pick the user (with several, the page never picks for you), tick *also run my tests* if you want the pages your suite never visits, then **Start the tour**. If the tour logs in with a form and a secret it needs is not set, the page says which one before starting and fills in the field to store it — you never wait for a tour that was going to die in its first second.
454
+ 3. **Now** follows it: the phase, *page N of M*, the page being walked, the last heartbeat. You can close the tab; the tour keeps going and the page picks it up when you come back. A tour that failed shows its reason here.
455
+ 4. **Last result.** The mood, the counts, who it ran as, and the full report. When there are elements to decide or repairs ready, **Decide and repair** opens the repair console (`ia-qa-heal ui`) on the same project — each row side by side, nothing applied until you say so.
456
+
457
+ [![The console after a tour: Broken, the counts, 6 elements to decide and 7 repairs ready, and the button that opens the repair console](https://www.ia-qa.com/media/pal-console-result.png)](https://www.ia-qa.com/media/pal-console-result.png)
458
+
459
+ 5. **Secrets.** Listed by name, never by value. **Set a value** stores one in this machine's credential store — `.ia-qa/config.json` is not changed, and a variable set in your shell still wins, so CI behaves as before.
460
+
461
+ It works the same on a phone-sized window and in dark mode:
462
+
463
+ ![The console on a phone, in dark mode](https://www.ia-qa.com/media/pal-console-mobile-dark.png)
464
+
465
+ The page listens on `127.0.0.1` only, every request carries the one-time token in the link it opens, and it stops by itself when you close the tab. It refuses to start under CI — a pipeline wants `tour --json`, see below.
466
+
467
+ ---
468
+
442
469
  ## 9. In CI
443
470
 
444
471
  Build the baseline on your machine, commit it, and let CI compare.
package/dist/ui/page.js CHANGED
@@ -33,6 +33,8 @@ main{max-width:1000px;margin:0 auto;padding:22px 16px 60px}
33
33
  h1{font-size:24px;margin:0;letter-spacing:-.02em}
34
34
  .hello{opacity:.92;font-size:14px}
35
35
  .where{margin-top:10px;font-size:14px;opacity:.95;overflow-wrap:anywhere;position:relative;z-index:1}
36
+ .chip.chipBtn{margin-left:0;border:0;color:#fff;cursor:pointer;font:inherit;font-size:13px;font-weight:600}
37
+ .chip.chipBtn:hover:not(:disabled){background:#ffffff4d;box-shadow:none}
36
38
  .chip{margin-left:auto;display:inline-flex;align-items:center;gap:8px;background:#ffffff2e;border-radius:999px;padding:5px 12px;font-size:13px;font-weight:600}
37
39
  .dot{width:9px;height:9px;border-radius:50%;background:#fff;opacity:.7}
38
40
  .dot.live{background:#4ade80;opacity:1;box-shadow:0 0 0 0 #4ade80aa;animation:pulse 1.4s infinite}
@@ -94,6 +96,7 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
94
96
  <div class="mascot">🧭</div>
95
97
  <div><h1>ia-qa-pal</h1><div class="hello" id="hello">Your QA pal — it walks your app and tells you what moved.</div></div>
96
98
  <span class="chip"><span class="dot" id="liveDot"></span><span id="liveWord">Idle</span></span>
99
+ <button class="chip chipBtn" id="healLink" title="ia-qa-heal ui — decide the rows the tour could not, apply repairs, see the drift history">🔧 Repair console ↗</button>
97
100
  </div>
98
101
  <div class="where" id="where">loading…</div>
99
102
  </header>
@@ -126,6 +129,7 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
126
129
  <section class="card">
127
130
  <h2><span class="ic">📡</span>Now</h2>
128
131
  <div id="nowIdle" class="idle"><span class="big">💤</span><span id="nowIdleText">Nothing running. Start a tour and watch it walk your app here.</span></div>
132
+ <div id="nowFail" class="notice bad hidden"></div>
129
133
  <div id="nowRun" class="hidden">
130
134
  <div class="row"><span class="pill info" id="phase"></span><span class="muted" id="count"></span></div>
131
135
  <div class="bar"><i id="barFill"></i></div>
@@ -138,11 +142,12 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
138
142
 
139
143
  <section class="card">
140
144
  <h2><span class="ic">🏁</span>Last result</h2>
141
- <div id="resultEmpty" class="idle"><span class="big">🗺️</span><span>No finished tour yet — the first one draws the map everything else is compared with.</span></div>
145
+ <div id="resultEmpty" class="idle"><span class="big">🗺️</span><span id="resultEmptyText">No finished tour yet — the first one draws the map everything else is compared with.</span></div>
142
146
  <div id="result" class="hidden">
143
147
  <div class="row"><span class="mood" id="mood"></span><span id="resultHead"></span></div>
144
148
  <div class="stats" id="stats"></div>
145
149
  <div class="muted" id="resultCounts"></div>
150
+ <div id="healCta" class="notice hidden"><span id="healCtaText"></span> <button class="primary" id="healCtaBtn">🔧 Decide and repair in the repair console ↗</button></div>
146
151
  <div class="row"><a id="reportLink" target="_blank" rel="noopener">Open the full report →</a></div>
147
152
  </div>
148
153
  <h2 style="margin-top:18px"><span class="ic">📈</span>History</h2>
@@ -227,6 +232,13 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
227
232
  show('nowIdle', !running); show('nowRun', running);
228
233
  q('liveDot').className = 'dot' + (running ? ' live' : ''); q('liveWord').textContent = running ? 'Tour running' : 'Idle';
229
234
  q('startTour').disabled = !!running || !(state && state.project.setUp);
235
+ const failed = !running && run && run.status === 'failed';
236
+ show('nowFail', !!failed);
237
+ if (failed) {
238
+ // A tour that died is said in the page, with its reason — never left in a log file the person cannot see.
239
+ q('nowFail').textContent = '❌ The last tour stopped after ' + span(Date.parse(run.finishedAt || run.updatedAt) - Date.parse(run.startedAt)) + ' and measured nothing:\\n\\n' + (run.error || 'no reason recorded — see .ia-qa/pal/run.log');
240
+ q('nowIdleText').textContent = 'Fix the cause below, then start the tour again.';
241
+ }
230
242
  if (!running) { if (run && run.status === 'interrupted') q('nowIdleText').textContent = 'The last tour stopped before finishing (interrupted).'; return; }
231
243
  const p = run.progress || {};
232
244
  q('phase').textContent = p.phase || 'starting';
@@ -242,7 +254,7 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
242
254
 
243
255
  function renderResult(s) {
244
256
  show('resultEmpty', !s); show('result', !!s);
245
- if (!s) return;
257
+ if (!s) { q('resultEmptyText').textContent = (state && state.run && state.run.status === 'running') ? 'A tour is walking your app right now — its result lands here when it finishes.' : (state && state.history && state.history.length) ? 'The last run did not finish, so there is no result to show — earlier tours are in History below.' : 'No finished tour yet — the first one draws the map everything else is compared with.'; return; }
246
258
  const [tone, icon, word] = MOOD[s.mood] || ['info', '•', s.mood];
247
259
  q('mood').className = 'mood ' + tone; q('mood').textContent = icon + ' ' + word;
248
260
  q('resultHead').textContent = (s.refused ? 'Refused: ' + s.refused.split('\\n')[0] : s.mode + ' tour') + (s.persona ? ' · as ' + s.persona : '');
@@ -255,8 +267,28 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
255
267
  if (s.notMapped) box.appendChild(stat(s.notMapped, 'not mapped', 'warn'));
256
268
  q('resultCounts').textContent = '⏱ took ' + span(s.durationMs);
257
269
  q('reportLink').href = '/report?t=' + TOKEN;
270
+ // The moment heal's console is FOR: rows the tour could not settle, or repairs it proposed.
271
+ const repairs = s.totals ? (s.totals.healable || 0) : 0;
272
+ const toDecide = s.totals ? (s.totals.lost || 0) + (s.totals.ambiguous || 0) + (s.totals.rebound || 0) : 0;
273
+ const due = !s.refused && (s.verdict === 'BLOCK' || s.verdict === 'FIX' || toDecide > 0 || repairs > 0);
274
+ show('healCta', due);
275
+ if (due) q('healCtaText').textContent = (toDecide ? toDecide + ' element' + (toDecide > 1 ? 's' : '') + ' need a person to decide' : '') + (toDecide && repairs ? ' · ' : '') + (repairs ? repairs + ' repair' + (repairs > 1 ? 's are' : ' is') + ' ready' : '') + (toDecide || repairs ? '. ' : 'The tour was held back. ') + 'The repair console shows each one side by side, and applies nothing until you say so.';
258
276
  }
259
277
 
278
+ async function openHeal(btn) {
279
+ // Opened on the click itself — a window opened after an await is a popup the browser blocks.
280
+ const w = window.open('about:blank', '_blank');
281
+ const label = btn.textContent; btn.disabled = true; btn.textContent = '⏳ Opening…';
282
+ try {
283
+ const out = await (await api('/api/heal-console', {})).json();
284
+ if (out.url && w) w.location.href = out.url;
285
+ else { if (w) w.close(); note('tourNotice', out.url ? 'Your browser blocked the new tab — open ' + out.url : (out.error || 'The repair console did not start.'), out.url ? '' : 'bad'); }
286
+ } catch { if (w) w.close(); }
287
+ finally { btn.disabled = false; btn.textContent = label; }
288
+ }
289
+ q('healLink').onclick = () => openHeal(q('healLink'));
290
+ q('healCtaBtn').onclick = () => openHeal(q('healCtaBtn'));
291
+
260
292
  function renderHistory(h) {
261
293
  const list = q('history'); list.textContent = ''; const strip = q('strip'); strip.textContent = '';
262
294
  if (!h.length) { list.appendChild(el('li', 'Nothing yet — every finished tour lands here.', 'muted')); return; }
@@ -312,7 +344,11 @@ footer{color:var(--muted);font-size:13px;margin-top:24px;text-align:center}
312
344
  const body = { persona: q('tourPersona').value || undefined, suite: q('optSuite').checked, strict: q('optStrict').checked };
313
345
  const r = await api('/api/tour', body); const out = await r.json();
314
346
  if (out.started) note('tourNotice', '🚀 Started. Follow it on the right — you can close this tab, the tour keeps going.', 'ok');
315
- else note('tourNotice', out.reason || 'Not started.', out.ask === 'persona' ? '' : 'bad');
347
+ else note('tourNotice', (out.ask === 'secret' ? '🔐 ' : '') + (out.reason || 'Not started.'), out.ask === 'persona' ? '' : 'bad');
348
+ if (out.ask === 'secret' && out.missing && out.missing.length) {
349
+ q('secretName').value = out.missing[0].key;
350
+ q('secretName').scrollIntoView({ behavior: 'smooth', block: 'center' }); q('secretValue').focus();
351
+ }
316
352
  refresh();
317
353
  };
318
354
 
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.ts"],"names":[],"mappings":";;AAcA,8CAuVC;AArWD;;;;;;;;;;;;;GAaG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0JS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA2LxB,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/ui/page.ts"],"names":[],"mappings":";;AAcA,8CA2XC;AAzYD;;;;;;;;;;;;;GAaG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA+JS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA0NxB,CAAC;AAChB,CAAC"}
@@ -35,6 +35,8 @@ export interface PalUiOptions {
35
35
  /** Injected so tests exercise the routes without a browser. */
36
36
  login?: typeof performLogin;
37
37
  probe?: typeof probeSession;
38
+ /** The heal CLI the repair console is started from. Default: the installed @ia-qa/self-healing. */
39
+ healEntry?: string;
38
40
  /** Injected so tests never write to the real credential store. */
39
41
  store?: {
40
42
  write: typeof writeSecret;
@@ -73,6 +75,41 @@ export declare function checkSecrets(dir: string): Array<{
73
75
  from?: string;
74
76
  why?: string;
75
77
  }>;
78
+ /**
79
+ * The secrets a tour is about to need, and which of them will not resolve.
80
+ *
81
+ * `map` logs in with `config.auth` only when no session is in use, so that is the only case
82
+ * checked — asking for a password the run will never use would refuse a tour that works. Measured
83
+ * in the field: without this, a click answered "Started" and the tour died one second later on
84
+ * an unset variable, in a log file the page never showed. `aws-ssm` is not checked (a call to AWS).
85
+ */
86
+ export declare function missingAuthSecrets(dir: string, config: {
87
+ auth?: {
88
+ usernameSecret: string;
89
+ passwordSecret: string;
90
+ };
91
+ }, usesSession: boolean): Array<{
92
+ name: string;
93
+ key: string;
94
+ }>;
95
+ /** Where `ia-qa-heal` lives: the self-healing this package already depends on, never a PATH lookup. */
96
+ export declare function healCliEntry(): string;
97
+ /**
98
+ * Open heal's repair console on THIS project and hand back its address.
99
+ *
100
+ * A separate process, never an in-process `startUi`: both consoles keep "which project" in
101
+ * module-global state (`setBaseDir`), and two servers sharing one would let a request of one
102
+ * run against the other's folder. The argv is fixed — `ui --no-open --offline --config <dir>` —
103
+ * `--offline` because this page promises nothing leaves the machine, and heal's once-a-day update
104
+ * check would be a request nobody announced here. Heal reuses a console already open on the
105
+ * project, so a second click never starts a rival with a different token. Its output goes to a
106
+ * file rather than a pipe: a pipe closed after the URL is read would kill heal on its next line.
107
+ */
108
+ export declare function openHealConsole(dir: string, entry?: string, timeoutMs?: number): Promise<{
109
+ url: string;
110
+ } | {
111
+ error: string;
112
+ }>;
76
113
  /** A name a store entry may carry: the shape of an environment variable, so one name serves both. */
77
114
  export declare const SECRET_NAME: RegExp;
78
115
  export type SetSecretAnswer = {
package/dist/ui/server.js CHANGED
@@ -37,10 +37,14 @@ exports.SECRET_NAME = void 0;
37
37
  exports.consoleState = consoleState;
38
38
  exports.consoleSecrets = consoleSecrets;
39
39
  exports.checkSecrets = checkSecrets;
40
+ exports.missingAuthSecrets = missingAuthSecrets;
41
+ exports.healCliEntry = healCliEntry;
42
+ exports.openHealConsole = openHealConsole;
40
43
  exports.setSecret = setSecret;
41
44
  exports.startPalUi = startPalUi;
42
45
  const fs = __importStar(require("fs"));
43
46
  const path = __importStar(require("path"));
47
+ const child_process_1 = require("child_process");
44
48
  const self_healing_1 = require("@ia-qa/self-healing");
45
49
  const project_1 = require("../project");
46
50
  const run_1 = require("../run");
@@ -160,6 +164,59 @@ function checkSecrets(dir) {
160
164
  return { name: r.name, source: r.source, resolves: null, why: 'not checked from here: resolving it would call AWS' };
161
165
  });
162
166
  }
167
+ /**
168
+ * The secrets a tour is about to need, and which of them will not resolve.
169
+ *
170
+ * `map` logs in with `config.auth` only when no session is in use, so that is the only case
171
+ * checked — asking for a password the run will never use would refuse a tour that works. Measured
172
+ * in the field: without this, a click answered "Started" and the tour died one second later on
173
+ * an unset variable, in a log file the page never showed. `aws-ssm` is not checked (a call to AWS).
174
+ */
175
+ function missingAuthSecrets(dir, config, usesSession) {
176
+ if (!config.auth || usesSession)
177
+ return [];
178
+ const needed = new Set([config.auth.usernameSecret, config.auth.passwordSecret]);
179
+ const { references } = consoleSecrets(dir);
180
+ const keyOf = new Map(references.map((r) => [r.name, r.key]));
181
+ return checkSecrets(dir)
182
+ .filter((c) => needed.has(c.name) && c.resolves === false)
183
+ .map((c) => ({ name: c.name, key: keyOf.get(c.name) ?? c.name }));
184
+ }
185
+ /** Where `ia-qa-heal` lives: the self-healing this package already depends on, never a PATH lookup. */
186
+ function healCliEntry() {
187
+ return path.join(path.dirname(require.resolve('@ia-qa/self-healing/package.json')), 'dist', 'cli', 'index.js');
188
+ }
189
+ const CONSOLE_URL = /http:\/\/127\.0\.0\.1:\d+\/\?t=[0-9a-f]+/;
190
+ /**
191
+ * Open heal's repair console on THIS project and hand back its address.
192
+ *
193
+ * A separate process, never an in-process `startUi`: both consoles keep "which project" in
194
+ * module-global state (`setBaseDir`), and two servers sharing one would let a request of one
195
+ * run against the other's folder. The argv is fixed — `ui --no-open --offline --config <dir>` —
196
+ * `--offline` because this page promises nothing leaves the machine, and heal's once-a-day update
197
+ * check would be a request nobody announced here. Heal reuses a console already open on the
198
+ * project, so a second click never starts a rival with a different token. Its output goes to a
199
+ * file rather than a pipe: a pipe closed after the URL is read would kill heal on its next line.
200
+ */
201
+ async function openHealConsole(dir, entry = healCliEntry(), timeoutMs = 20_000) {
202
+ const log = path.join(dir, '.ia-qa', 'pal', 'heal-ui.log');
203
+ fs.mkdirSync(path.dirname(log), { recursive: true });
204
+ const out = fs.openSync(log, 'w');
205
+ const child = (0, child_process_1.spawn)(process.execPath, [entry, 'ui', '--no-open', '--offline', '--config', dir], { cwd: dir, detached: true, stdio: ['ignore', out, out], windowsHide: true });
206
+ child.unref();
207
+ fs.closeSync(out);
208
+ const deadline = Date.now() + timeoutMs;
209
+ while (Date.now() < deadline) {
210
+ await new Promise((r) => setTimeout(r, 150));
211
+ const text = fs.existsSync(log) ? fs.readFileSync(log, 'utf8') : '';
212
+ const found = CONSOLE_URL.exec(text);
213
+ if (found)
214
+ return { url: found[0] };
215
+ if (child.exitCode !== null && child.exitCode !== 0)
216
+ return { error: text.trim().split('\n').slice(0, 6).join('\n') || `ia-qa-heal ui exited with code ${child.exitCode}` };
217
+ }
218
+ return { error: 'The repair console did not answer in time — see .ia-qa/pal/heal-ui.log.' };
219
+ }
163
220
  /** A name a store entry may carry: the shape of an environment variable, so one name serves both. */
164
221
  exports.SECRET_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/;
165
222
  const MAX_SECRET = 8 * 1024;
@@ -251,6 +308,17 @@ async function startPalUi(opts) {
251
308
  });
252
309
  return true;
253
310
  }
311
+ const missing = inProject(dir, () => missingAuthSecrets(dir, (0, self_healing_1.loadConfig)(), !!who.choice));
312
+ if (missing.length) {
313
+ (0, self_healing_1.sendJson)(res, 409, {
314
+ started: false,
315
+ ask: 'secret',
316
+ missing,
317
+ reason: `This tour logs in with the form in .ia-qa/config.json, and ${missing.map((m) => m.key).join(' and ')} ${missing.length > 1 ? 'are' : 'is'} not set for it. ` +
318
+ 'Store the value below (it stays on this machine), or start the console from a shell where the variable is loaded — e.g. npx dotenv-cli -- ia-qa-pal ui.',
319
+ });
320
+ return true;
321
+ }
254
322
  const flags = Object.fromEntries(TOUR_FLAGS.map((f) => [f, body[f] === true]));
255
323
  const started = (0, run_1.startBackground)(dir, { more: flags.more, suite: flags.suite || flags.suiteOnly, suiteOnly: flags.suiteOnly, strict: flags.strict, allContracts: flags.allContracts, persona }, opts.cliEntry);
256
324
  (0, self_healing_1.sendJson)(res, started.started ? 202 : 409, started);
@@ -342,6 +410,11 @@ async function startPalUi(opts) {
342
410
  (0, self_healing_1.sendJson)(res, 200, { ok: true });
343
411
  return true;
344
412
  }
413
+ if (post && url.pathname === '/api/heal-console') {
414
+ const opened = await openHealConsole(dir, opts.healEntry);
415
+ (0, self_healing_1.sendJson)(res, 'url' in opened ? 200 : 500, opened);
416
+ return true;
417
+ }
345
418
  if (get && url.pathname === '/api/secrets') {
346
419
  (0, self_healing_1.sendJson)(res, 200, consoleSecrets(dir));
347
420
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ui/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ui/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ia-qa/pal",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "A QA pal next to your team: one command walks your web app, maps it, checks it and diffs it against yesterday, then reports what broke, what needs a decision and what it could not see. Local, deterministic, no LLM.",
5
5
  "keywords": [
6
6
  "qa",