@qaick/runner 0.32.19 → 0.32.21

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.
Files changed (28) hide show
  1. package/package-dist/package.json +1 -1
  2. package/package-dist/src/demo/RunnerWalkthrough.js +2 -2
  3. package/package-dist/src/demo/RunnerWalkthrough.js.map +1 -1
  4. package/package-dist/src/runner/RunnerModule.d.ts.map +1 -1
  5. package/package-dist/src/runner/RunnerModule.js +16 -16
  6. package/package-dist/src/runner/RunnerModule.js.map +1 -1
  7. package/package-dist/src/runner/catalog.js +2 -2
  8. package/package-dist/src/runner/catalog.js.map +1 -1
  9. package/package-dist/src/runner/hierarchy-presentation.js +1 -1
  10. package/package-dist/src/runner/hierarchy-presentation.js.map +1 -1
  11. package/package-dist/src/runner/history.d.ts +3 -2
  12. package/package-dist/src/runner/history.d.ts.map +1 -1
  13. package/package-dist/src/runner/history.js +9 -12
  14. package/package-dist/src/runner/history.js.map +1 -1
  15. package/package-dist/src/runner/invocation-inputs.js +3 -3
  16. package/package-dist/src/runner/invocation-inputs.js.map +1 -1
  17. package/package-dist/src/runner/result-export.d.ts +1 -1
  18. package/package-dist/src/runner/result-export.d.ts.map +1 -1
  19. package/package-dist/src/runner/result-export.js +2 -3
  20. package/package-dist/src/runner/result-export.js.map +1 -1
  21. package/package-dist/src/runner/studio-execution-document.js +2 -2
  22. package/package-dist/src/runner/studio-execution-document.js.map +1 -1
  23. package/package-dist/src/runner/studio-hierarchy-loader.js +2 -2
  24. package/package-dist/src/runner/studio-hierarchy-loader.js.map +1 -1
  25. package/package-dist/src/shared/application-menu.d.ts +1 -1
  26. package/package-dist/src/shared/application-menu.js +1 -1
  27. package/package-dist/src/shared/application-menu.js.map +1 -1
  28. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qaick/runner",
3
3
  "description": "Reusable QAick Runner module and standalone execution application.",
4
- "version": "0.32.19",
4
+ "version": "0.32.21",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "package-dist",
@@ -3,7 +3,7 @@ import { useState } from 'react';
3
3
  import { RUNNER_UI_VERSION } from "../build-info.js";
4
4
  const steps = [
5
5
  { id: 'overview', title: 'Runner overview', action: 'Start with the loaded Project.', detail: 'Runner loads a durable QAick artifact, lets you choose a target, executes it, and presents structured evidence.' },
6
- { id: 'package', title: 'Open a Project', action: 'Choose a Project or Flow target.', detail: 'Open Project… accepts the Project file saved by Studio.' },
6
+ { id: 'package', title: 'Open a Project', action: 'Choose a Project or Stream target.', detail: 'Open Project… accepts the Project file saved by Studio.' },
7
7
  { id: 'configure', title: 'Configure a run', action: 'Set timeout and inputs.', detail: 'Invocation inputs and runtime values are supplied at execution time without changing the saved artifact.' },
8
8
  { id: 'preflight', title: 'Pre-run validation', action: 'Validate before invoking adapters.', detail: 'Runner reports missing bindings, outputs, runtime values and contract issues before a normal run can cause side effects.' },
9
9
  { id: 'hierarchy', title: 'Observe execution hierarchy', action: 'Follow Operations, loops and branches.', detail: 'Nested rows preserve invocation paths. Loops stay visible as one canvas with iteration progress and per-iteration outputs.' },
@@ -13,7 +13,7 @@ const steps = [
13
13
  function Balloon({ className, title, children }) { return _jsxs("div", { className: `runner-demo-balloon ${className}`, children: [_jsx("strong", { children: title }), _jsx("span", { children: children })] }); }
14
14
  function RunnerScreen({ step }) {
15
15
  const focus = step.id === 'overview' ? 'focus-all' : `focus-${step.id}`;
16
- return _jsxs("div", { className: `runner-demo-screen ${focus}`, children: [_jsxs("div", { className: "runner-demo-top", children: [_jsx("b", { children: "QAick Runner" }), _jsx("span", { children: RUNNER_UI_VERSION }), _jsx("span", { className: "runner-demo-menu", children: "Execution\u3000 Projects\u3000 Flows\u3000 Run History" }), _jsx("span", { children: "\u2193 Customer Checkout" }), _jsx("button", { children: "Pre-run validation" })] }), _jsxs("div", { className: "runner-demo-body", children: [_jsxs("div", { className: "runner-demo-nav", children: [_jsx("b", { children: "Execution" }), _jsx("b", { children: "Projects" }), _jsx("b", { children: "Flows" }), _jsx("b", { children: "History" })] }), _jsxs("div", { className: "runner-demo-left", children: [_jsx("small", { children: "PROJECT" }), _jsx("strong", { children: "checkout-project.qaick.json" }), _jsx("button", { children: "Open demo" }), _jsx("small", { children: "TARGET" }), _jsx("div", { className: "is-selected", children: "Customer Checkout" }), _jsx("small", { children: "CONFIGURATION" }), _jsx("div", { children: "Timeout\u3000none" }), _jsx("div", { children: "Inputs\u30003 values" })] }), _jsxs("div", { className: "runner-demo-main", children: [_jsxs("div", { className: "runner-demo-heading", children: [_jsx("small", { children: "LIVE EXECUTION" }), _jsx("b", { children: "Customer Checkout" }), _jsx("span", { children: "\u25CF completed" })] }), _jsxs("div", { className: "runner-demo-rows", children: [_jsxs("div", { className: "runner-demo-row operation", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Create Payment Context" }), _jsx("em", { children: "operation \u00B7 finished \u00B7 142 ms" })] }), _jsxs("div", { className: "runner-demo-loop", children: [_jsxs("header", { children: [_jsx("i", { children: "\u21BB" }), _jsx("b", { children: "Ten checkout checks" }), _jsx("span", { children: "LOOP \u00B7 10 / 10 \u00B7 1.7 s" })] }), _jsxs("div", { className: "runner-demo-row nested", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Get Payment Status" }), _jsx("em", { children: "action \u00B7 finished \u00B7 48 ms" })] }), _jsxs("div", { className: "runner-demo-row nested alt", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Verify Record" }), _jsx("em", { children: "action \u00B7 finished \u00B7 34 ms" })] }), _jsx("div", { className: "runner-demo-bar", children: _jsx("span", { style: { width: '100%' } }) })] }), _jsxs("div", { className: "runner-demo-row operation", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Verify Settlement" }), _jsx("em", { children: "operation \u00B7 finished \u00B7 86 ms" })] })] })] }), _jsxs("div", { className: "runner-demo-right", children: [_jsx("b", { children: step.id === 'preflight' ? 'Pre-run validation' : step.id === 'events' ? 'Event Log' : step.id === 'results' ? 'Run History' : 'Execution Details' }), step.id === 'preflight' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-error", children: "\u2713 0 issues found" }), _jsx("small", { children: "Adapters have not been invoked." })] }) : step.id === 'events' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-filter", children: "Search events\u3000\u3000Failures \u25BE" }), _jsx("div", { className: "demo-event", children: "STEP_FINISHED\u3000Verify Record" }), _jsx("div", { className: "demo-event", children: "PARALLEL_PROGRESS\u300010 / 10" })] }) : step.id === 'results' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-history", children: "Customer Checkout\u3000completed" }), _jsx("div", { className: "demo-history", children: "Export result JSON\u3000\u2197" })] }) : _jsxs(_Fragment, { children: [_jsx("small", { children: "Run outcome" }), _jsx("strong", { children: "COMPLETED" }), _jsx("small", { children: "Outputs" }), _jsx("div", { className: "demo-output", children: "paymentId = pay_demo" })] })] })] }), _jsxs("div", { className: "runner-demo-bottom", children: [_jsx("b", { children: step.id === 'preflight' ? 'PRE-RUN VALIDATION' : 'RUN RESULT' }), _jsx("span", { children: step.id === 'events' ? '3 events shown' : step.id === 'results' ? '2 stored runs' : 'Ready' })] }), _jsx("div", { className: "runner-demo-callouts", children: step.id === 'overview' ? _jsxs(_Fragment, { children: [_jsx(Balloon, { className: "demo-callout-left", title: "Project", children: "Load serialized artifacts here." }), _jsx(Balloon, { className: "demo-callout-canvas", title: "Execution hierarchy", children: "Observe nested steps and loops." }), _jsx(Balloon, { className: "demo-callout-right", title: "Inspector", children: "Inspect structured evidence." })] }) : _jsx(Balloon, { className: `demo-callout-${step.id}`, title: step.title, children: step.detail }) })] });
16
+ return _jsxs("div", { className: `runner-demo-screen ${focus}`, children: [_jsxs("div", { className: "runner-demo-top", children: [_jsx("b", { children: "QAick Runner" }), _jsx("span", { children: RUNNER_UI_VERSION }), _jsx("span", { className: "runner-demo-menu", children: "Execution\u3000 Projects\u3000 Streams\u3000 Run History" }), _jsx("span", { children: "\u2193 Customer Checkout" }), _jsx("button", { children: "Pre-run validation" })] }), _jsxs("div", { className: "runner-demo-body", children: [_jsxs("div", { className: "runner-demo-nav", children: [_jsx("b", { children: "Execution" }), _jsx("b", { children: "Projects" }), _jsx("b", { children: "Streams" }), _jsx("b", { children: "History" })] }), _jsxs("div", { className: "runner-demo-left", children: [_jsx("small", { children: "PROJECT" }), _jsx("strong", { children: "checkout-project.qaick.json" }), _jsx("button", { children: "Open demo" }), _jsx("small", { children: "TARGET" }), _jsx("div", { className: "is-selected", children: "Customer Checkout" }), _jsx("small", { children: "CONFIGURATION" }), _jsx("div", { children: "Timeout\u3000none" }), _jsx("div", { children: "Inputs\u30003 values" })] }), _jsxs("div", { className: "runner-demo-main", children: [_jsxs("div", { className: "runner-demo-heading", children: [_jsx("small", { children: "LIVE EXECUTION" }), _jsx("b", { children: "Customer Checkout" }), _jsx("span", { children: "\u25CF completed" })] }), _jsxs("div", { className: "runner-demo-rows", children: [_jsxs("div", { className: "runner-demo-row operation", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Create Payment Context" }), _jsx("em", { children: "operation \u00B7 finished \u00B7 142 ms" })] }), _jsxs("div", { className: "runner-demo-loop", children: [_jsxs("header", { children: [_jsx("i", { children: "\u21BB" }), _jsx("b", { children: "Ten checkout checks" }), _jsx("span", { children: "LOOP \u00B7 10 / 10 \u00B7 1.7 s" })] }), _jsxs("div", { className: "runner-demo-row nested", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Get Payment Status" }), _jsx("em", { children: "action \u00B7 finished \u00B7 48 ms" })] }), _jsxs("div", { className: "runner-demo-row nested alt", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Verify Record" }), _jsx("em", { children: "action \u00B7 finished \u00B7 34 ms" })] }), _jsx("div", { className: "runner-demo-bar", children: _jsx("span", { style: { width: '100%' } }) })] }), _jsxs("div", { className: "runner-demo-row operation", children: [_jsx("i", { children: "\u2713" }), _jsx("b", { children: "Verify Settlement" }), _jsx("em", { children: "operation \u00B7 finished \u00B7 86 ms" })] })] })] }), _jsxs("div", { className: "runner-demo-right", children: [_jsx("b", { children: step.id === 'preflight' ? 'Pre-run validation' : step.id === 'events' ? 'Event Log' : step.id === 'results' ? 'Run History' : 'Execution Details' }), step.id === 'preflight' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-error", children: "\u2713 0 issues found" }), _jsx("small", { children: "Adapters have not been invoked." })] }) : step.id === 'events' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-filter", children: "Search events\u3000\u3000Failures \u25BE" }), _jsx("div", { className: "demo-event", children: "STEP_FINISHED\u3000Verify Record" }), _jsx("div", { className: "demo-event", children: "PARALLEL_PROGRESS\u300010 / 10" })] }) : step.id === 'results' ? _jsxs(_Fragment, { children: [_jsx("div", { className: "demo-history", children: "Customer Checkout\u3000completed" }), _jsx("div", { className: "demo-history", children: "Export result JSON\u3000\u2197" })] }) : _jsxs(_Fragment, { children: [_jsx("small", { children: "Run outcome" }), _jsx("strong", { children: "COMPLETED" }), _jsx("small", { children: "Outputs" }), _jsx("div", { className: "demo-output", children: "paymentId = pay_demo" })] })] })] }), _jsxs("div", { className: "runner-demo-bottom", children: [_jsx("b", { children: step.id === 'preflight' ? 'PRE-RUN VALIDATION' : 'RUN RESULT' }), _jsx("span", { children: step.id === 'events' ? '3 events shown' : step.id === 'results' ? '2 stored runs' : 'Ready' })] }), _jsx("div", { className: "runner-demo-callouts", children: step.id === 'overview' ? _jsxs(_Fragment, { children: [_jsx(Balloon, { className: "demo-callout-left", title: "Project", children: "Load serialized artifacts here." }), _jsx(Balloon, { className: "demo-callout-canvas", title: "Execution hierarchy", children: "Observe nested steps and loops." }), _jsx(Balloon, { className: "demo-callout-right", title: "Inspector", children: "Inspect structured evidence." })] }) : _jsx(Balloon, { className: `demo-callout-${step.id}`, title: step.title, children: step.detail }) })] });
17
17
  }
18
18
  export function RunnerWalkthrough() {
19
19
  const [index, setIndex] = useState(0);
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerWalkthrough.js","sourceRoot":"","sources":["../../../src/demo/RunnerWalkthrough.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunnerWalkthrough.js","sourceRoot":"","sources":["../../../src/demo/RunnerWalkthrough.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerModule.d.ts","sourceRoot":"","sources":["../../../src/runner/RunnerModule.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RunnerModule.d.ts","sourceRoot":"","sources":["../../../src/runner/RunnerModule.tsx"],"names":[],"mappings":"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"}
@@ -17,10 +17,10 @@ import { PackageCatalog } from "./catalog.js";
17
17
  import { RUNNER_CONTRACT_VERSION } from "./types.js";
18
18
  import { RunnerWalkthrough } from "../demo/RunnerWalkthrough.js";
19
19
  import { RUNNER_BUILD_LABEL, RUNNER_UI_VERSION } from "../build-info.js";
20
- import { collectSecretValues, redactExecutionEvent, redactExecutionResult, redactKeyValuePairs, redactValue, redactText, isSensitiveKey } from "./redaction.js";
20
+ import { collectSecretValues, redactValue, redactText, isSensitiveKey } from "./redaction.js";
21
21
  import { createResultExport } from "./result-export.js";
22
22
  import { inspectDeclaredInputs, inputDrafts, resolvedArguments } from "./invocation-inputs.js";
23
- import { persistRunHistory, redactHistoryEntry, captureHistoryStructure, assertHistoryIdentity, recoverRunHistoryEntry, historyPresentationEntry } from "./history.js";
23
+ import { persistRunHistory, captureHistoryEntry, captureHistoryStructure, assertHistoryIdentity, recoverRunHistoryEntry, historyPresentationEntry } from "./history.js";
24
24
  import { prepareStudioDocument } from "./studio-execution-document.js";
25
25
  const statusGlyph = { pending: '', 'not executed': '', running: '', finished: '✓', failed: '✕', waiting: '◷', skipped: '–', cancelled: '⊘' };
26
26
  const HISTORY_KEY = 'qaick-runner.history.v1';
@@ -181,7 +181,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
181
181
  const index = previous.findIndex(item => item.requestId === entry.requestId);
182
182
  if (replace && index < 0)
183
183
  return; // Respect deletion/retention while collection was finishing.
184
- const safe = redactHistoryEntry(entry, secretValues);
184
+ const safe = captureHistoryEntry(entry);
185
185
  const next = replace ? previous.map((item, position) => position === index ? safe : item) : [safe, ...previous.filter(item => item.requestId !== entry.requestId)];
186
186
  try {
187
187
  updateHistory(persistRunHistory(localStorage, HISTORY_KEY, next, retentionRef.current, secretValues, entry.requestId));
@@ -235,7 +235,8 @@ function RunnerApp({ client, onExit, applicationMenu }) {
235
235
  const historicalEvents = presentedHistory?.events ?? [];
236
236
  const invocationSecrets = collectSecretValues(inputs, runtimeValues, inputContract, (preparedDocument ?? executionPackage));
237
237
  const shownSecrets = readOnly ? collectSecretValues(historicalEntry?.result) : invocationSecrets;
238
- const shownResult = readOnly ? presentedHistory?.result && redactExecutionResult(presentedHistory.result, shownSecrets) : result;
238
+ const shownResult = readOnly ? presentedHistory?.result : result;
239
+ const shownTargetKind = (readOnly ? historicalEntry?.result?.target.kind : contextTarget.kind) ?? 'Unknown';
239
240
  const shownPackage = readOnly ? historyPackage : authoringSource ? undefined : executionPackage;
240
241
  const shownPackageSteps = shownPackage ? packageStepsFor(shownPackage) : [];
241
242
  const shownSelectedStep = readOnly ? historySelectedStep : selectedStep;
@@ -243,12 +244,12 @@ function RunnerApp({ client, onExit, applicationMenu }) {
243
244
  const shownRunState = readOnly ? historicalEntry?.state ?? 'ready' : runState;
244
245
  const allResults = shownResult?.children?.flatMap(child => flattenResultSteps(child.steps)) ?? flattenResultSteps(shownResult?.steps ?? []);
245
246
  const displaySteps = readOnly ? historicalEntry?.structure ? contextDisplaySteps(historicalEntry.structure.context, historyCollapsedSteps) : recordedDisplaySteps(allResults) : liveDisplaySteps;
246
- const selectedStart = selectedStepStartedAt(displaySteps[shownSelectedStep], { results: allResults, result: shownResult, context: readOnly ? historicalEntry?.structure?.context : preparedDocument?.context, scope: readOnly ? historicalEntry?.structure?.scope : preparedDocument?.selection.root, events: readOnly ? historicalEvents.map(event => redactExecutionEvent(event, shownSecrets)) : events, requestId: shownRequestId });
247
+ const selectedStart = selectedStepStartedAt(displaySteps[shownSelectedStep], { results: allResults, result: shownResult, context: readOnly ? historicalEntry?.structure?.context : preparedDocument?.context, scope: readOnly ? historicalEntry?.structure?.scope : preparedDocument?.selection.root, events: readOnly ? historicalEvents : events, requestId: shownRequestId });
247
248
  const guides = hierarchyGuides(displaySteps);
248
249
  const hasNestedSteps = displaySteps.some(step => step.depth > 0 || step.hasChildren);
249
250
  const displayResults = displaySteps.map(step => resultForOccurrence(allResults, step.structuralAddress, step.occurrence));
250
251
  const selectedInvocations = resultsForOccurrence(allResults, displaySteps[shownSelectedStep]?.structuralAddress, displaySteps[shownSelectedStep]?.occurrence);
251
- const selectedPaths = readableInvocationPaths(displaySteps[shownSelectedStep], { context: readOnly ? historicalEntry?.structure?.context : preparedDocument?.context, invocations: selectedInvocations, allResults, result: shownResult, events: readOnly ? historicalEvents.map(event => redactExecutionEvent(event, shownSecrets)) : events, requestId: shownRequestId });
252
+ const selectedPaths = readableInvocationPaths(displaySteps[shownSelectedStep], { context: readOnly ? historicalEntry?.structure?.context : preparedDocument?.context, invocations: selectedInvocations, allResults, result: shownResult, events: readOnly ? historicalEvents : events, requestId: shownRequestId });
252
253
  const selectedError = displayResults[shownSelectedStep]?.error;
253
254
  const errorCode = selectedError?.code ?? shownResult?.error?.code;
254
255
  const errorMessage = selectedError?.message ?? shownResult?.error?.message;
@@ -267,7 +268,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
267
268
  switchWorkspace(next);
268
269
  document.getElementById(`runner-tab-${next}`)?.focus();
269
270
  }
270
- const executionEvents = (readOnly ? historicalEvents.map(event => redactExecutionEvent(event, shownSecrets)) : events).filter(event => event.requestId === shownRequestId);
271
+ const executionEvents = (readOnly ? historicalEvents : events).filter(event => event.requestId === shownRequestId);
271
272
  const visibleEvents = executionEvents.filter(event => { const categoryMatches = eventFilter === 'all' || eventFilter === 'parallel' && event.parallel || eventFilter === 'steps' && event.stepId || eventFilter === 'lifecycle' && !event.stepId && !event.parallel || eventFilter === 'failures' && (event.state === 'failed' || event.type.includes('error')); const searchMatches = !eventSearch.trim() || `${event.type} ${event.state} ${event.message} ${event.stepName ?? ''}`.toLowerCase().includes(eventSearch.trim().toLowerCase()); return categoryMatches && searchMatches; });
272
273
  function selectRoot(key) { if (activeInputRequest.current)
273
274
  return; setSelectedRoot(key); setSelectedStep(0); stepStateCache.current = {}; setStepStates(liveDisplaySteps.map(() => 'pending')); setResult(undefined); setEvents([]); setRequestId(undefined); setRunState('ready'); setControlState('idle'); setLoadError(undefined); }
@@ -325,7 +326,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
325
326
  for await (const event of client.events(id)) {
326
327
  if (event.requestId !== id)
327
328
  throw new Error('Execution event does not match the submitted run.');
328
- const recorded = structuredClone(redactExecutionEvent(event, secretValues));
329
+ const recorded = structuredClone(event);
329
330
  recordedEvents.push(recorded);
330
331
  setEvents(previous => [...previous, recorded]);
331
332
  admission = { ...admission, events: [...recordedEvents], lastObservedState: event.state,
@@ -366,8 +367,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
366
367
  let executionResult;
367
368
  try {
368
369
  const actualResult = await client.result(id);
369
- secretValues.push(...collectSecretValues(actualResult));
370
- executionResult = redactExecutionResult(actualResult, secretValues);
370
+ executionResult = structuredClone(actualResult);
371
371
  }
372
372
  catch {
373
373
  completed = true;
@@ -430,13 +430,13 @@ function RunnerApp({ client, onExit, applicationMenu }) {
430
430
  next.add(stepId); breakpointsRef.current = next; return next; }); }
431
431
  function toggleStopAfter(stepId) { setStopAfterStepId(previous => previous === stepId ? undefined : stepId); }
432
432
  function exportResult(value, packageId, schemaVersion, provenance, executionVersion) { if (!value)
433
- return; const storedEntry = runHistory.find(entry => entry.requestId === value.requestId); const exportPayload = storedEntry?.historyVersion === 2 ? { runnerResultVersion: 2, entry: redactHistoryEntry(storedEntry, collectSecretValues(storedEntry.result)) } : createResultExport(value, packageId ?? 'unknown', schemaVersion, storedEntry ? collectSecretValues(storedEntry.result) : invocationSecrets, provenance, executionVersion); const blob = new Blob([JSON.stringify(exportPayload, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = `${value.target.name.replace(/[^a-z0-9]+/gi, '-').toLowerCase()}-${value.requestId}.result.json`; link.click(); URL.revokeObjectURL(url); }
433
+ return; const storedEntry = runHistory.find(entry => entry.requestId === value.requestId); const exportPayload = storedEntry?.historyVersion === 2 ? { runnerResultVersion: 2, entry: captureHistoryEntry(storedEntry) } : createResultExport(value, packageId ?? 'unknown', schemaVersion, storedEntry ? collectSecretValues(storedEntry.result) : invocationSecrets, provenance, executionVersion); const blob = new Blob([JSON.stringify(exportPayload, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = `${value.target.name.replace(/[^a-z0-9]+/gi, '-').toLowerCase()}-${value.requestId}.result.json`; link.click(); URL.revokeObjectURL(url); }
434
434
  function exportHistoryEntry(entry) {
435
435
  if (entry.result && entry.historyVersion !== 2) {
436
436
  exportResult(entry.result, entry.packageId, entry.artifactSchemaVersion, entry.artifactProvenance, entry.executionSchemaVersion);
437
437
  return;
438
438
  }
439
- const blob = new Blob([JSON.stringify({ runnerResultVersion: 2, entry: redactHistoryEntry(entry, collectSecretValues(entry.result)) }, null, 2)], { type: 'application/json' });
439
+ const blob = new Blob([JSON.stringify({ runnerResultVersion: 2, entry: captureHistoryEntry(entry) }, null, 2)], { type: 'application/json' });
440
440
  const url = URL.createObjectURL(blob), link = document.createElement('a');
441
441
  link.href = url;
442
442
  link.download = `${entry.target.replace(/[^a-z0-9]+/gi, '-').toLowerCase()}-${entry.requestId}.result.json`;
@@ -643,7 +643,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
643
643
  about: () => menuActions.current.about(),
644
644
  demo: () => menuActions.current.demo(),
645
645
  }), [registerMenu]);
646
- return _jsxs("div", { className: "runner-shell", children: [_jsxs("header", { className: "runner-header", children: [_jsxs("div", { className: "runner-brand", children: [_jsx("span", { className: "runner-brand-mark", children: "QAICK" }), _jsx("span", { className: "runner-brand-product", children: "Runner" }), _jsx("span", { className: "alpha-label", children: RUNNER_UI_VERSION }), onExit && _jsx("button", { className: "about-button", onClick: onExit, children: "Studio" })] }), !applicationMenu?.native && _jsx(HeaderHelp, { enabled: id => menuActions.current.enabled(id), onAbout: () => menuActions.current.about(), onOpenProject: () => projectFileInput.current?.click() }), _jsx("span", { className: "header-spacer" }), _jsx(ScreenshotButton, { className: "about-button" }), _jsx("a", { className: "demo-entry", href: "./examples/qaick-local-http-regression.qaick.json", download: true, title: "Download QAick Local HTTP Regression. Start the local fixture on port 5197, then load this file. Runner executes both Flows. Editing is restricted in Studio.", children: "HTTP example" }), _jsx(ThemeToggle, { theme: theme, onChange: setTheme, className: "runner-theme-toggle" })] }), _jsx("input", { ref: projectFileInput, type: "file", accept: "application/json,.json", hidden: true, "aria-label": "Open Project\u2026", onChange: event => { const file = event.target.files?.[0]; event.target.value = ''; void loadPackage(file); } }), _jsx("div", { className: "runner-tabs", role: "tablist", "aria-label": "Runner workspace", children: ['execution', 'history'].map(tab => _jsx("button", { id: `runner-tab-${tab}`, role: "tab", "aria-selected": workspace === tab, "aria-controls": `runner-panel-${tab}`, tabIndex: workspace === tab ? 0 : -1, onKeyDown: tabKey, onClick: () => switchWorkspace(tab), children: tab === 'execution' ? 'Execution' : 'History' }, tab)) }), _jsx("div", { className: "runner-pane-scroll", role: "region", "aria-label": "Runner workspace and Inspector", tabIndex: 0, children: _jsxs("main", { style: { gridTemplateColumns: `minmax(560px, 1fr) 8px ${inspectorWidth}px`, minWidth: `${568 + inspectorWidth}px` }, className: "runner-main runner-tabbed-main", id: `runner-panel-${workspace}`, role: "tabpanel", "aria-labelledby": `runner-tab-${workspace}`, children: [_jsxs(_Fragment, { children: [_jsxs("section", { className: "runner-workspace", children: [diagnosticNotice && _jsx("p", { className: "notice", role: "status", children: diagnosticNotice }), historySaveError && _jsx("p", { className: "load-error", role: "alert", children: historySaveError }), readOnly && loadError && _jsx("p", { className: "load-error", role: "alert", children: loadError }), readOnly && loadIssues.length > 0 && _jsx(PreRunValidation, { issues: loadIssues.map(issue => ({ ...issue, message: redactText(issue.message, invocationSecrets) })), title: "Artifact validation" }), readOnly && historicalEntry && !historicalEntry.structure && _jsx("p", { className: "notice", children: "Original Project structure was not recorded for this run. Only recorded execution evidence is available." }), readOnly && _jsx(HistoryPanel, { entries: runHistory, onReload: reloadHistoryEntry, retention: historyRetention, onRetentionChange: changeHistoryRetention, onClear: clearHistory, onDelete: deleteHistoryEntry, onExport: exportHistoryEntry }), _jsxs("div", { hidden: readOnly, children: [_jsx("h1", { children: contextTarget.name }), _jsxs("p", { className: "description", children: ["Execute the selected QAick ", contextTarget.kind === 'project' ? 'Project' : 'Flow', " and capture structured evidence."] }), _jsxs("div", { className: "run-controls", children: [_jsxs("div", { className: "run-settings", role: "group", "aria-label": "Execution setup", children: [_jsxs("label", { children: ["Run only", _jsxs("select", { disabled: inputsLocked || preparing, value: selectedRoot, onChange: event => selectRoot(event.target.value), children: [_jsx("option", { value: "", children: "Entire project" }), preparedDocument && contextDisplaySteps(preparedDocument.context, new Set(), preparedDocument).filter(n => n.kind !== 'body' && n.kind !== 'branch').map(n => _jsxs("option", { value: n.id, children: [' '.repeat(n.depth), n.name] }, n.id))] })] }), _jsxs("label", { children: ["Timeout", _jsxs("select", { disabled: inputsLocked, value: timeoutMs, onChange: event => setTimeoutMs(event.target.value), children: [_jsx("option", { value: "none", children: "None" }), _jsx("option", { value: "1000", children: "1 second" }), _jsx("option", { value: "3000", children: "3 seconds" }), _jsx("option", { value: "10000", children: "10 seconds" })] })] })] }), _jsxs("div", { className: "run-actions", role: "group", "aria-label": "Execution actions", children: [_jsx("button", { className: "button", disabled: inputsLocked, onClick: () => { if (!activeInputRequest.current)
646
+ return _jsxs("div", { className: "runner-shell", children: [_jsxs("header", { className: "runner-header", children: [_jsxs("div", { className: "runner-brand", children: [_jsx("span", { className: "runner-brand-mark", children: "QAICK" }), _jsx("span", { className: "runner-brand-product", children: "Runner" }), _jsx("span", { className: "alpha-label", children: RUNNER_UI_VERSION }), onExit && _jsx("button", { className: "about-button", onClick: onExit, children: "Studio" })] }), !applicationMenu?.native && _jsx(HeaderHelp, { enabled: id => menuActions.current.enabled(id), onAbout: () => menuActions.current.about(), onOpenProject: () => projectFileInput.current?.click() }), _jsx("span", { className: "header-spacer" }), _jsx(ScreenshotButton, { className: "about-button" }), _jsx("a", { className: "demo-entry", href: "./examples/qaick-local-http-regression.qaick.json", download: true, title: "Download QAick Local HTTP Regression. Start the local fixture on port 5197, then load this file. Runner executes both Streams. Editing is restricted in Studio.", children: "HTTP example" }), _jsx(ThemeToggle, { theme: theme, onChange: setTheme, className: "runner-theme-toggle" })] }), _jsx("input", { ref: projectFileInput, type: "file", accept: "application/json,.json", hidden: true, "aria-label": "Open Project\u2026", onChange: event => { const file = event.target.files?.[0]; event.target.value = ''; void loadPackage(file); } }), _jsx("div", { className: "runner-tabs", role: "tablist", "aria-label": "Runner workspace", children: ['execution', 'history'].map(tab => _jsx("button", { id: `runner-tab-${tab}`, role: "tab", "aria-selected": workspace === tab, "aria-controls": `runner-panel-${tab}`, tabIndex: workspace === tab ? 0 : -1, onKeyDown: tabKey, onClick: () => switchWorkspace(tab), children: tab === 'execution' ? 'Execution' : 'History' }, tab)) }), _jsx("div", { className: "runner-pane-scroll", role: "region", "aria-label": "Runner workspace and Inspector", tabIndex: 0, children: _jsxs("main", { style: { gridTemplateColumns: `minmax(560px, 1fr) 8px ${inspectorWidth}px`, minWidth: `${568 + inspectorWidth}px` }, className: "runner-main runner-tabbed-main", id: `runner-panel-${workspace}`, role: "tabpanel", "aria-labelledby": `runner-tab-${workspace}`, children: [_jsxs(_Fragment, { children: [_jsxs("section", { className: "runner-workspace", children: [diagnosticNotice && _jsx("p", { className: "notice", role: "status", children: diagnosticNotice }), historySaveError && _jsx("p", { className: "load-error", role: "alert", children: historySaveError }), readOnly && loadError && _jsx("p", { className: "load-error", role: "alert", children: loadError }), readOnly && loadIssues.length > 0 && _jsx(PreRunValidation, { issues: loadIssues.map(issue => ({ ...issue, message: redactText(issue.message, invocationSecrets) })), title: "Artifact validation" }), readOnly && historicalEntry && !historicalEntry.structure && _jsx("p", { className: "notice", children: "Original Project structure was not recorded for this run. Only recorded execution evidence is available." }), readOnly && _jsx(HistoryPanel, { entries: runHistory, onReload: reloadHistoryEntry, retention: historyRetention, onRetentionChange: changeHistoryRetention, onClear: clearHistory, onDelete: deleteHistoryEntry, onExport: exportHistoryEntry }), _jsxs("div", { hidden: readOnly, children: [_jsx("h1", { children: contextTarget.name }), _jsxs("p", { className: "description", children: ["Execute the selected QAick ", contextTarget.kind === 'project' ? 'Project' : 'Stream', " and capture structured evidence."] }), _jsxs("div", { className: "run-controls", children: [_jsxs("div", { className: "run-settings", role: "group", "aria-label": "Execution setup", children: [_jsxs("label", { children: ["Run only", _jsxs("select", { disabled: inputsLocked || preparing, value: selectedRoot, onChange: event => selectRoot(event.target.value), children: [_jsx("option", { value: "", children: "Entire project" }), preparedDocument && contextDisplaySteps(preparedDocument.context, new Set(), preparedDocument).filter(n => n.kind !== 'body' && n.kind !== 'branch').map(n => _jsxs("option", { value: n.id, children: [' '.repeat(n.depth), n.name] }, n.id))] })] }), _jsxs("label", { children: ["Timeout", _jsxs("select", { disabled: inputsLocked, value: timeoutMs, onChange: event => setTimeoutMs(event.target.value), children: [_jsx("option", { value: "none", children: "None" }), _jsx("option", { value: "1000", children: "1 second" }), _jsx("option", { value: "3000", children: "3 seconds" }), _jsx("option", { value: "10000", children: "10 seconds" })] })] })] }), _jsxs("div", { className: "run-actions", role: "group", "aria-label": "Execution actions", children: [_jsx("button", { className: "button", disabled: inputsLocked, onClick: () => { if (!activeInputRequest.current)
647
647
  setEditingInputs(value => !value); }, children: editingInputs ? 'Done inputs' : 'Edit inputs' }), _jsx("button", { className: "button primary", onClick: () => void run(), disabled: !!inputBlocker || preparing || !!preparationError || runState === 'preflighting' || runState === 'running', children: "\u25B6\u00A0 Run" }), _jsx("button", { className: "button dry-run", onClick: () => void run(true), disabled: !!inputBlocker || preparing || !!preparationError || runState === "preflighting" || runState === "running", children: "\u25CE\u00A0 Pre-run validation" }), _jsx("button", { className: "button stop", onClick: () => void stop(), disabled: runState !== 'preflighting' && runState !== 'running', children: "\u25A0\u00A0 Stop" }), _jsx("button", { className: "button", onClick: () => void pause(), disabled: controlState !== 'running', children: "\u2161\u00A0 Pause" }), _jsx("button", { className: `button ${controlState === 'paused' ? 'resume-highlight' : ''}`, onClick: () => void resume(), disabled: controlState !== 'paused', children: "\u25B6\u00A0 Resume" }), _jsx("button", { className: "button", onClick: () => void stepExecution(), disabled: controlState !== 'paused', children: "\u21A6\u00A0 Step" }), breakpoints.size > 0 && _jsxs("span", { className: "debug-session-badge", children: [breakpoints.size, " breakpoint", breakpoints.size === 1 ? "" : "s", " armed"] })] })] }), preparing && _jsx("p", { role: "status", children: "Preparing Project\u2026" }), preparationError && _jsx("p", { role: "alert", children: redactText(preparationError, invocationSecrets) }), preparedDocument && !preparedDocument.selection.executable && _jsx("section", { role: "alert", children: preparedDocument.selection.issues.map((i, index) => _jsxs("p", { children: [preparedDocument.context.nodes.find(n => n.key === i.at)?.name, ": ", i.message] }, index)) }), conflict && _jsxs("section", { role: "alert", children: [_jsx("p", { children: conflict.message }), _jsx("ul", { children: conflict.entries.map((entry, index) => _jsxs("li", { children: [entry.owner, " \u00B7 ", entry.declaration.name, " \u00B7 ", entry.declaration.type, " \u00B7 ", entry.declaration.required ? 'required' : 'optional', " \u00B7 default: ", Object.hasOwn(entry.declaration, 'defaultValue') ? JSON.stringify(redactValue(entry.declaration.defaultValue, invocationSecrets, entry.declaration.name)) : 'none'] }, index)) }), _jsx("p", { children: "Retained input drafts:" }), _jsx("ul", { children: Object.entries(inputEdits).map(([name, draft]) => _jsxs("li", { children: [name, " \u00B7 ", draft.supplied ? 'supplied' : 'omitted'] }, name)) })] }), unresolved && _jsxs("section", { role: "alert", children: [_jsx("p", { children: unresolved.message }), _jsx("ul", { children: unresolved.entries.map((entry, index) => _jsxs("li", { children: [entry.owner, " \u00B7 ", entry.name, " \u00B7 required \u00B7 type unresolved"] }, index)) }), _jsx("p", { children: "Retained input drafts:" }), _jsx("ul", { children: Object.entries(inputEdits).map(([name, draft]) => _jsxs("li", { children: [name, " \u00B7 ", draft.supplied ? 'supplied' : 'omitted'] }, name)) })] }), inputError && _jsx("p", { role: "alert", children: redactText(inputError, invocationSecrets) }), loadError && _jsx("p", { className: "load-error", children: redactText(loadError, invocationSecrets) }), loadIssues.length > 0 && _jsx(PreRunValidation, { issues: loadIssues.map(issue => ({ ...issue, message: redactText(issue.message, invocationSecrets) })), title: "Artifact validation" }), result?.issues !== undefined && _jsx(PreRunValidation, { issues: result.issues }), result?.warnings !== undefined && result.warnings.length > 0 && _jsx(PreRunValidation, { issues: result.warnings, title: "Browser execution warnings" }), editingInputs && _jsxs("section", { className: "inputs-panel panel", children: [_jsxs("div", { className: "panel-heading", children: [_jsx("h2", { children: "Invocation Inputs" }), _jsx("span", { className: "panel-spacer" }), _jsx("span", { className: "input-hint", children: inputsLocked ? 'Inputs are locked while execution is active.' : 'Values are sent with the next run' })] }), _jsxs("fieldset", { className: "input-grid input-lock-fields", "aria-label": "Invocation input values", disabled: inputsLocked, children: [inputBlocker ? _jsx("p", { children: "Invocation input editing is unavailable until requirements are resolved." }) : declarations.map(declaration => { const draft = inputEdits[declaration.name] ?? { supplied: false, text: '' }; const change = (text) => { if (!activeInputRequest.current)
648
648
  setInputEdits(previous => ({ ...previous, [declaration.name]: { supplied: true, text } })); }; return _jsxs("div", { children: [_jsxs("label", { children: [_jsx("input", { type: "checkbox", "aria-label": `Supply ${declaration.name}`, checked: draft.supplied, onChange: event => { if (!activeInputRequest.current)
649
649
  setInputEdits(previous => ({ ...previous, [declaration.name]: { ...draft, supplied: event.target.checked } })); } }), "Supply ", declaration.name] }), declaration.type === 'boolean' ? _jsxs("label", { className: "input-field", children: [declaration.name, _jsxs("select", { value: draft.text, onChange: event => change(event.target.value), children: [_jsx("option", { value: "false", children: "false" }), _jsx("option", { value: "true", children: "true" })] })] }) : _jsx(InputField, { label: declaration.name, value: draft.text, onChange: change }), _jsxs("small", { children: [declaration.type, " \u00B7 ", draft.supplied ? 'supplied' : Object.hasOwn(declaration, 'defaultValue') ? 'omitted — declared default applies' : 'omitted', declaration.required ? ' · required' : ''] })] }, declaration.name); }), (executionPackage.runtimeRequirements ?? []).map(name => _jsx(InputField, { label: `Runtime · ${name}`, value: runtimeValues[name] ?? '', onChange: value => { if (!activeInputRequest.current)
@@ -654,7 +654,7 @@ function RunnerApp({ client, onExit, applicationMenu }) {
654
654
  event.preventDefault();
655
655
  selectDisplayedStep(Math.max(0, index - 1));
656
656
  } }, onClick: () => selectDisplayedStep(index), onContextMenu: event => { event.preventDefault(); if (readOnly)
657
- return; selectDisplayedStep(index); setContextMenu({ x: event.clientX, y: event.clientY, stepId: step.id }); }, children: [_jsx("td", { children: index + 1 }), _jsxs("td", { className: "hierarchy-cell", children: [_jsx(HierarchyGuides, { segments: guides.get(step.id) ?? [] }), _jsxs("span", { className: "hierarchy-name", style: { paddingLeft: `${step.depth * 18}px` }, children: [step.hasChildren && _jsx("button", { className: "collapse-toggle", "aria-label": `${(readOnly ? historyCollapsedSteps : collapsedSteps).has(step.id) ? 'Expand' : 'Collapse'} ${step.name}`, onClick: event => { event.stopPropagation(); toggleStep(step.id); }, children: (readOnly ? historyCollapsedSteps : collapsedSteps).has(step.id) ? '+' : '−' }), !step.hasChildren && _jsx("span", { className: "collapse-spacer", "aria-hidden": "true" }), _jsx(StructuralIcon, { kind: step.structuralKind }), !readOnly && breakpoints.has(step.id) && _jsx("span", { className: "breakpoint-marker", role: "img", "aria-label": "Breakpoint armed", title: "Breakpoint armed" }), _jsx("span", { children: step.name }), isLoop && _jsx("small", { className: "kind-label loop-label", children: "\u21BB LOOP" }), step.structuralKind === 'branch' && _jsx("small", { className: "kind-label", children: "BRANCH" }), (!step.structuralKind || step.structuralKind === 'unknown') && _jsx("small", { className: "kind-label", children: "TYPE NOT RECORDED" })] }), shownSelectedStep === index && _jsx("small", { className: "selected-label", children: "SELECTED" })] }), _jsxs("td", { children: [!outside && loopContexts.map(context => _jsxs("div", { className: "loop-progress", children: [context.context.length > 0 && _jsxs("small", { children: ["Enclosing iterations: ", context.context.map(s => s.iteration).join(' / ')] }), _jsx("strong", { children: context.label })] }, JSON.stringify(context.context))), _jsxs("span", { className: "execution-status", children: [_jsx("span", { className: `step-icon execution-status-icon ${displayState.replaceAll(' ', '-')}`, "aria-hidden": "true", children: statusGlyph[displayState] }), _jsx("span", { className: `status ${displayState.replaceAll(' ', '-')}`, children: presentation.label })] }), latestQualifier && _jsx("small", { className: "latest-invocation", children: "Latest invocation" })] }), _jsx("td", { children: rowStart ? new Date(rowStart).toLocaleTimeString() : '—' }), _jsx("td", { children: displayResults[index] ? `${displayResults[index].durationMs} ms` : '—' })] }, `${step.id}-${index}`); }) })] }) }), !readOnly && contextMenu && _jsxs("div", { className: "runner-context-menu", style: { left: contextMenu.x, top: contextMenu.y }, onClick: event => event.stopPropagation(), onContextMenu: event => event.preventDefault(), children: [_jsx("strong", { children: "Breakpoint" }), breakpoints.has(contextMenu.stepId) ? _jsx("button", { onClick: () => { toggleBreakpoint(contextMenu.stepId); setContextMenu(undefined); }, children: "Remove breakpoint" }) : _jsx("button", { onClick: () => { toggleBreakpoint(contextMenu.stepId); setContextMenu(undefined); }, children: "Add breakpoint" })] })] }), !readOnly && _jsxs("details", { className: "panel runner-event-log execution-event-log", children: [_jsx("summary", { children: "Event Log" }), _jsxs("div", { className: "event-log-content", children: [_jsxs("div", { className: "event-log-tools", children: [_jsx("input", { className: "event-search", "aria-label": "Search event log", placeholder: "Search events", value: eventSearch, onChange: event => setEventSearch(event.target.value) }), _jsxs("select", { "aria-label": "Filter execution events", className: "event-filter", value: eventFilter, onChange: event => setEventFilter(event.target.value), children: [_jsx("option", { value: "all", children: "All events" }), _jsx("option", { value: "steps", children: "Step events" }), _jsx("option", { value: "parallel", children: "Parallel groups" }), _jsx("option", { value: "lifecycle", children: "Lifecycle" }), _jsx("option", { value: "failures", children: "Failures" })] })] }), _jsx("div", { className: "event-log-scroll", role: "region", "aria-label": "Execution events", tabIndex: 0, children: _jsx(ExecutionEventRows, { events: visibleEvents }) }), executionEvents.length > 0 && visibleEvents.length === 0 && _jsx("p", { className: "empty-state", children: "No events match the current filter." }), executionEvents.length === 0 && _jsx("p", { className: "empty-state", children: "No execution events yet." })] })] }, JSON.stringify(['execution', requestId ?? 'ready', selectedTargetId]))] }), _jsx("div", { className: "inspector-divider", role: "separator", "aria-label": "Resize Inspector", "aria-orientation": "vertical", "aria-controls": "runner-inspector", "aria-valuemin": INSPECTOR_MIN_WIDTH, "aria-valuemax": INSPECTOR_MAX_WIDTH, "aria-valuenow": inspectorWidth, "aria-valuetext": `${inspectorWidth} pixels`, tabIndex: 0, hidden: readOnly && !historicalEntry, onPointerDown: startInspectorResize, onPointerMove: moveInspectorResize, onPointerUp: finishInspectorResize, onPointerCancel: finishInspectorResize, onLostPointerCapture: finishInspectorResize, onKeyDown: inspectorResizeKey }), _jsxs("aside", { id: "runner-inspector", className: "inspector", hidden: readOnly && !historicalEntry, children: [_jsx("h2", { children: "SELECTED STEP" }), _jsx("p", { className: "selected-detail-name", children: _jsx("strong", { children: displaySteps[shownSelectedStep] ? `${shownSelectedStep + 1}. ${displaySteps[shownSelectedStep].name}` : 'No step selected' }) }), _jsx("p", { className: "selected-step-start", children: selectedStart ? `Started: ${new Date(selectedStart).toLocaleTimeString()}` : 'Not started' }), _jsx(InspectorSection, { title: "Artifact summary", children: _jsx(KeyValues, { secretValues: shownSecrets, values: ["Target", (readOnly ? historicalEntry?.result?.target.name ?? historicalEntry?.target : contextTarget.name) ?? 'Unknown', "Type", (readOnly ? historicalEntry?.result?.target.kind : contextTarget.kind) ?? 'Unknown', "Project reference", (readOnly ? historicalEntry?.packageId : selectedTargetId) ?? 'Not recorded', "Execution format", `Execution v${readOnly ? historicalEntry?.executionSchemaVersion ?? 'unknown' : authoringSource ? 8 : executionPackage.schemaVersion}`, "Definitions", shownPackage ? String(shownPackage.definitions.length) : 'Not recorded', "Required inputs", shownPackage ? shownPackage.requiredInputs?.join(', ') || 'None' : !readOnly && preparedDocument ? preparedDocument.selection.requiredInputs?.join(', ') || 'None' : 'Not recorded', "Runtime values", shownPackage ? shownPackage.runtimeRequirements?.join(', ') || 'None' : !readOnly && preparedDocument ? preparedDocument.selection.runtimeRequirements?.join(', ') || 'None' : 'Not recorded'] }) }), _jsx(InspectorSection, { title: "Run outcome", children: _jsxs("div", { className: "notice", children: [_jsx("strong", { children: shownResult?.state.toUpperCase() ?? (readOnly && historicalEntry?.admittedAt ? historyOutcome(historicalEntry) : 'NOT STARTED') }), _jsx("br", {}), shownResult ? shownResult.state : readOnly && historicalEntry?.admittedAt ? `Last recorded state: ${historicalEntry.lastObservedState ?? 'Admission recorded'}. No terminal result is available.` : 'Run the Project to inspect its terminal outcome.'] }) }), _jsx(InspectorSection, { title: "Selected step inputs", children: _jsx(KeyValues, { secretValues: shownSecrets, values: Object.entries(displayResults[shownSelectedStep]?.inputs ?? (selectedInvocations.length > 1 ? {} : readOnly ? {} : inputs)).flatMap(([key, value]) => [key, String(value)]) }) }), _jsx(InspectorSection, { title: "Selected step outputs", children: _jsx(KeyValues, { secretValues: shownSecrets, values: displayResults[shownSelectedStep]?.outputs ? Object.entries(displayResults[shownSelectedStep]?.outputs ?? {}).flatMap(([key, value]) => [key, String(value)]) : ['—', selectedInvocations.length > 1 ? `${selectedInvocations.length} recorded invocations; see iteration history` : 'Available after execution'] }) }), (shownResult?.error || displayResults[shownSelectedStep]?.error) && _jsx(InspectorSection, { title: "Error", children: _jsxs("div", { className: "error-notice", children: [errorCode && _jsxs(_Fragment, { children: [_jsx("strong", { children: errorCode }), _jsx("br", {})] }), errorMessage, hasErrorDetails && _jsx("pre", { children: JSON.stringify(errorDetails, null, 2) }), !errorCode && !errorMessage && !hasErrorDetails && 'Error details were not recorded.'] }) }), shownResult?.issues !== undefined && _jsx(InspectorSection, { title: "Pre-run validation", children: _jsx(PreRunValidation, { issues: shownResult.issues }) }), _jsx(InspectorSection, { title: "Invocation path", children: selectedPaths.length ? selectedPaths.map(path => _jsxs("div", { className: "notice", children: [selectedInvocations.length > 1 && _jsx("small", { children: "Latest recorded invocation" }), path.names.map((name, index) => _jsx("div", { children: name }, index))] }, path.key)) : _jsx("div", { className: "notice", children: "No invocation path available." }) }), _jsx(InspectorSection, { title: "Iteration history", children: _jsx(RecordedInvocations, { results: selectedInvocations, definition: findInspectionDefinition(shownPackageSteps, displaySteps[shownSelectedStep]?.structuralAddress) }, JSON.stringify([shownRequestId, displaySteps[shownSelectedStep]?.structuralAddress])) }), _jsx(InspectorSection, { title: "Execution timing", children: _jsxs("div", { className: "timing-details", children: [_jsxs("span", { children: ["Wall ", shownResult?.executionTiming?.wallDurationMs ?? "—", " ms"] }), _jsxs("span", { children: ["Active ", shownResult?.executionTiming?.activeDurationMs ?? "—", " ms"] }), _jsxs("span", { children: ["Paused ", shownResult?.executionTiming?.pausedDurationMs ?? "—", " ms"] })] }) }), _jsx(InspectorSection, { title: "Selected step attempts", children: _jsx("div", { className: "attempt-history", children: displayResults[shownSelectedStep]?.attempts?.map(attempt => _jsxs("div", { className: "iteration-entry", children: [_jsxs("strong", { children: ["Attempt ", attempt.attempt] }), _jsxs("span", { children: [(attempt.kind ?? 'automatic').toUpperCase(), " \u00B7 ", attempt.state.toUpperCase(), " \u00B7 ", attempt.durationMs, " ms"] })] }, `${attempt.attempt}-${attempt.kind}`)) ?? _jsx("div", { className: "notice", children: "No retry attempts recorded." }) }) }), readOnly && _jsxs("details", { className: "inspector-section inspector-event-log runner-event-log", children: [_jsx("summary", { children: "Event Log" }), _jsxs("div", { className: "event-log-content", children: [_jsx("p", { className: "empty-state", children: historicalEntry?.events === undefined ? 'Events were not recorded for this run.' : historicalEntry.eventCollectionIncomplete ? 'Event collection was incomplete. Only captured events are shown.' : executionEvents.length === 0 ? 'No execution events were recorded.' : '' }), _jsx("div", { className: "event-log-scroll", role: "region", "aria-label": "Recorded execution events", tabIndex: 0, children: _jsx(ExecutionEventRows, { events: executionEvents }) })] })] }, JSON.stringify(['history', shownRequestId ?? 'ready', historicalEntry?.packageId])), _jsxs(InspectorSection, { title: "Selected step", children: [_jsxs("div", { className: "notice", children: [_jsx("strong", { children: displaySteps[shownSelectedStep]?.name ?? 'No step selected' }), _jsx("br", {}), displayResults[shownSelectedStep] ? displayResults[shownSelectedStep].error ? 'This step failed. See the error details above.' : `Completed in ${displayResults[shownSelectedStep].durationMs} ms.` : selectedInvocations.length > 1 ? `${selectedInvocations.length} invocations recorded. No single invocation selected.` : 'Run the Project to inspect execution details.', _jsxs("div", { className: "inspector-actions", children: [_jsx("button", { className: "button", onClick: () => void retrySelected(), disabled: readOnly || !!preparedDocument || !displayResults[shownSelectedStep] || (!displayResults[shownSelectedStep]?.error && runState !== "completed"), children: "Retry Action" }), _jsx("button", { className: `button ${stopAfterStepId === displaySteps[shownSelectedStep]?.id ? "active" : ""}`, onClick: () => displaySteps[shownSelectedStep] && toggleStopAfter(displaySteps[shownSelectedStep].id), disabled: readOnly || !displaySteps[shownSelectedStep], children: "Stop After" }), _jsx("button", { className: "button", onClick: () => void runFromSelected(), disabled: readOnly || !!preparedDocument || !displayResults[shownSelectedStep] || runState === "running", children: "Run From Here" })] })] }), _jsxs("div", { className: "selection-nav", children: [_jsx("button", { className: "button", disabled: shownSelectedStep <= 0, onClick: () => selectDisplayedStep(index => Math.max(0, index - 1)), children: "\u2039 Previous" }), _jsx("span", { children: displaySteps.length ? `${shownSelectedStep + 1} / ${displaySteps.length}` : '0 / 0' }), _jsx("button", { className: "button", disabled: shownSelectedStep >= displaySteps.length - 1, onClick: () => selectDisplayedStep(index => Math.min(displaySteps.length - 1, index + 1)), children: "Next \u203A" })] })] })] })] }), " "] }) }), showAbout && _jsx("div", { className: "about-backdrop", onClick: () => setShowAbout(false), children: _jsxs("section", { className: "about-dialog", role: "dialog", "aria-modal": "true", "aria-labelledby": "about-title", onClick: event => event.stopPropagation(), children: [_jsx("button", { className: "about-close", onClick: () => setShowAbout(false), "aria-label": "Close About", children: "\u00D7" }), _jsx("div", { className: "runner-logo", children: "\u25B6" }), _jsx("h2", { id: "about-title", children: "QAick Runner" }), _jsx("p", { children: "Standalone execution and evidence viewer for QAICK Projects." }), _jsxs("small", { children: [RUNNER_UI_VERSION, " \u00B7 ", RUNNER_BUILD_LABEL, " \u00B7 QAick contract"] }), _jsx("footer", { children: "\u00A9 2006\u20132026 QAick. All rights reserved." })] }) })] });
657
+ return; selectDisplayedStep(index); setContextMenu({ x: event.clientX, y: event.clientY, stepId: step.id }); }, children: [_jsx("td", { children: index + 1 }), _jsxs("td", { className: "hierarchy-cell", children: [_jsx(HierarchyGuides, { segments: guides.get(step.id) ?? [] }), _jsxs("span", { className: "hierarchy-name", style: { paddingLeft: `${step.depth * 18}px` }, children: [step.hasChildren && _jsx("button", { className: "collapse-toggle", "aria-label": `${(readOnly ? historyCollapsedSteps : collapsedSteps).has(step.id) ? 'Expand' : 'Collapse'} ${step.name}`, onClick: event => { event.stopPropagation(); toggleStep(step.id); }, children: (readOnly ? historyCollapsedSteps : collapsedSteps).has(step.id) ? '+' : '−' }), !step.hasChildren && _jsx("span", { className: "collapse-spacer", "aria-hidden": "true" }), _jsx(StructuralIcon, { kind: step.structuralKind }), !readOnly && breakpoints.has(step.id) && _jsx("span", { className: "breakpoint-marker", role: "img", "aria-label": "Breakpoint armed", title: "Breakpoint armed" }), _jsx("span", { children: step.name }), isLoop && _jsx("small", { className: "kind-label loop-label", children: "\u21BB LOOP" }), step.structuralKind === 'branch' && _jsx("small", { className: "kind-label", children: "BRANCH" }), (!step.structuralKind || step.structuralKind === 'unknown') && _jsx("small", { className: "kind-label", children: "TYPE NOT RECORDED" })] }), shownSelectedStep === index && _jsx("small", { className: "selected-label", children: "SELECTED" })] }), _jsxs("td", { children: [!outside && loopContexts.map(context => _jsxs("div", { className: "loop-progress", children: [context.context.length > 0 && _jsxs("small", { children: ["Enclosing iterations: ", context.context.map(s => s.iteration).join(' / ')] }), _jsx("strong", { children: context.label })] }, JSON.stringify(context.context))), _jsxs("span", { className: "execution-status", children: [_jsx("span", { className: `step-icon execution-status-icon ${displayState.replaceAll(' ', '-')}`, "aria-hidden": "true", children: statusGlyph[displayState] }), _jsx("span", { className: `status ${displayState.replaceAll(' ', '-')}`, children: presentation.label })] }), latestQualifier && _jsx("small", { className: "latest-invocation", children: "Latest invocation" })] }), _jsx("td", { children: rowStart ? new Date(rowStart).toLocaleTimeString() : '—' }), _jsx("td", { children: displayResults[index] ? `${displayResults[index].durationMs} ms` : '—' })] }, `${step.id}-${index}`); }) })] }) }), !readOnly && contextMenu && _jsxs("div", { className: "runner-context-menu", style: { left: contextMenu.x, top: contextMenu.y }, onClick: event => event.stopPropagation(), onContextMenu: event => event.preventDefault(), children: [_jsx("strong", { children: "Breakpoint" }), breakpoints.has(contextMenu.stepId) ? _jsx("button", { onClick: () => { toggleBreakpoint(contextMenu.stepId); setContextMenu(undefined); }, children: "Remove breakpoint" }) : _jsx("button", { onClick: () => { toggleBreakpoint(contextMenu.stepId); setContextMenu(undefined); }, children: "Add breakpoint" })] })] }), !readOnly && _jsxs("details", { className: "panel runner-event-log execution-event-log", children: [_jsx("summary", { children: "Event Log" }), _jsxs("div", { className: "event-log-content", children: [_jsxs("div", { className: "event-log-tools", children: [_jsx("input", { className: "event-search", "aria-label": "Search event log", placeholder: "Search events", value: eventSearch, onChange: event => setEventSearch(event.target.value) }), _jsxs("select", { "aria-label": "Filter execution events", className: "event-filter", value: eventFilter, onChange: event => setEventFilter(event.target.value), children: [_jsx("option", { value: "all", children: "All events" }), _jsx("option", { value: "steps", children: "Step events" }), _jsx("option", { value: "parallel", children: "Parallel groups" }), _jsx("option", { value: "lifecycle", children: "Lifecycle" }), _jsx("option", { value: "failures", children: "Failures" })] })] }), _jsx("div", { className: "event-log-scroll", role: "region", "aria-label": "Execution events", tabIndex: 0, children: _jsx(ExecutionEventRows, { events: visibleEvents }) }), executionEvents.length > 0 && visibleEvents.length === 0 && _jsx("p", { className: "empty-state", children: "No events match the current filter." }), executionEvents.length === 0 && _jsx("p", { className: "empty-state", children: "No execution events yet." })] })] }, JSON.stringify(['execution', requestId ?? 'ready', selectedTargetId]))] }), _jsx("div", { className: "inspector-divider", role: "separator", "aria-label": "Resize Inspector", "aria-orientation": "vertical", "aria-controls": "runner-inspector", "aria-valuemin": INSPECTOR_MIN_WIDTH, "aria-valuemax": INSPECTOR_MAX_WIDTH, "aria-valuenow": inspectorWidth, "aria-valuetext": `${inspectorWidth} pixels`, tabIndex: 0, hidden: readOnly && !historicalEntry, onPointerDown: startInspectorResize, onPointerMove: moveInspectorResize, onPointerUp: finishInspectorResize, onPointerCancel: finishInspectorResize, onLostPointerCapture: finishInspectorResize, onKeyDown: inspectorResizeKey }), _jsxs("aside", { id: "runner-inspector", className: "inspector", hidden: readOnly && !historicalEntry, children: [_jsx("h2", { children: "SELECTED STEP" }), _jsx("p", { className: "selected-detail-name", children: _jsx("strong", { children: displaySteps[shownSelectedStep] ? `${shownSelectedStep + 1}. ${displaySteps[shownSelectedStep].name}` : 'No step selected' }) }), _jsx("p", { className: "selected-step-start", children: selectedStart ? `Started: ${new Date(selectedStart).toLocaleTimeString()}` : 'Not started' }), _jsx(InspectorSection, { title: "Artifact summary", children: _jsx(KeyValues, { secretValues: shownSecrets, values: ["Target", (readOnly ? historicalEntry?.result?.target.name ?? historicalEntry?.target : contextTarget.name) ?? 'Unknown', "Type", shownTargetKind === 'flow' ? 'stream' : shownTargetKind, "Project reference", (readOnly ? historicalEntry?.packageId : selectedTargetId) ?? 'Not recorded', "Execution format", `Execution v${readOnly ? historicalEntry?.executionSchemaVersion ?? 'unknown' : authoringSource ? 8 : executionPackage.schemaVersion}`, "Definitions", shownPackage ? String(shownPackage.definitions.length) : 'Not recorded', "Required inputs", shownPackage ? shownPackage.requiredInputs?.join(', ') || 'None' : !readOnly && preparedDocument ? preparedDocument.selection.requiredInputs?.join(', ') || 'None' : 'Not recorded', "Runtime values", shownPackage ? shownPackage.runtimeRequirements?.join(', ') || 'None' : !readOnly && preparedDocument ? preparedDocument.selection.runtimeRequirements?.join(', ') || 'None' : 'Not recorded'] }) }), _jsx(InspectorSection, { title: "Run outcome", children: _jsxs("div", { className: "notice", children: [_jsx("strong", { children: shownResult?.state.toUpperCase() ?? (readOnly && historicalEntry?.admittedAt ? historyOutcome(historicalEntry) : 'NOT STARTED') }), _jsx("br", {}), shownResult ? shownResult.state : readOnly && historicalEntry?.admittedAt ? `Last recorded state: ${historicalEntry.lastObservedState ?? 'Admission recorded'}. No terminal result is available.` : 'Run the Project to inspect its terminal outcome.'] }) }), _jsx(InspectorSection, { title: "Selected step inputs", children: _jsx(KeyValues, { secretValues: shownSecrets, values: Object.entries(displayResults[shownSelectedStep]?.inputs ?? (selectedInvocations.length > 1 ? {} : readOnly ? {} : inputs)).flatMap(([key, value]) => [key, String(value)]) }) }), _jsx(InspectorSection, { title: "Selected step outputs", children: _jsx(KeyValues, { secretValues: shownSecrets, values: displayResults[shownSelectedStep]?.outputs ? Object.entries(displayResults[shownSelectedStep]?.outputs ?? {}).flatMap(([key, value]) => [key, String(value)]) : ['—', selectedInvocations.length > 1 ? `${selectedInvocations.length} recorded invocations; see iteration history` : 'Available after execution'] }) }), (shownResult?.error || displayResults[shownSelectedStep]?.error) && _jsx(InspectorSection, { title: "Error", children: _jsxs("div", { className: "error-notice", children: [errorCode && _jsxs(_Fragment, { children: [_jsx("strong", { children: errorCode }), _jsx("br", {})] }), errorMessage, hasErrorDetails && _jsx("pre", { children: JSON.stringify(errorDetails, null, 2) }), !errorCode && !errorMessage && !hasErrorDetails && 'Error details were not recorded.'] }) }), shownResult?.issues !== undefined && _jsx(InspectorSection, { title: "Pre-run validation", children: _jsx(PreRunValidation, { issues: shownResult.issues }) }), _jsx(InspectorSection, { title: "Invocation path", children: selectedPaths.length ? selectedPaths.map(path => _jsxs("div", { className: "notice", children: [selectedInvocations.length > 1 && _jsx("small", { children: "Latest recorded invocation" }), path.names.map((name, index) => _jsx("div", { children: name }, index))] }, path.key)) : _jsx("div", { className: "notice", children: "No invocation path available." }) }), _jsx(InspectorSection, { title: "Iteration history", children: _jsx(RecordedInvocations, { results: selectedInvocations, definition: findInspectionDefinition(shownPackageSteps, displaySteps[shownSelectedStep]?.structuralAddress) }, JSON.stringify([shownRequestId, displaySteps[shownSelectedStep]?.structuralAddress])) }), _jsx(InspectorSection, { title: "Execution timing", children: _jsxs("div", { className: "timing-details", children: [_jsxs("span", { children: ["Wall ", shownResult?.executionTiming?.wallDurationMs ?? "—", " ms"] }), _jsxs("span", { children: ["Active ", shownResult?.executionTiming?.activeDurationMs ?? "—", " ms"] }), _jsxs("span", { children: ["Paused ", shownResult?.executionTiming?.pausedDurationMs ?? "—", " ms"] })] }) }), _jsx(InspectorSection, { title: "Selected step attempts", children: _jsx("div", { className: "attempt-history", children: displayResults[shownSelectedStep]?.attempts?.map(attempt => _jsxs("div", { className: "iteration-entry", children: [_jsxs("strong", { children: ["Attempt ", attempt.attempt] }), _jsxs("span", { children: [(attempt.kind ?? 'automatic').toUpperCase(), " \u00B7 ", attempt.state.toUpperCase(), " \u00B7 ", attempt.durationMs, " ms"] })] }, `${attempt.attempt}-${attempt.kind}`)) ?? _jsx("div", { className: "notice", children: "No retry attempts recorded." }) }) }), readOnly && _jsxs("details", { className: "inspector-section inspector-event-log runner-event-log", children: [_jsx("summary", { children: "Event Log" }), _jsxs("div", { className: "event-log-content", children: [_jsx("p", { className: "empty-state", children: historicalEntry?.events === undefined ? 'Events were not recorded for this run.' : historicalEntry.eventCollectionIncomplete ? 'Event collection was incomplete. Only captured events are shown.' : executionEvents.length === 0 ? 'No execution events were recorded.' : '' }), _jsx("div", { className: "event-log-scroll", role: "region", "aria-label": "Recorded execution events", tabIndex: 0, children: _jsx(ExecutionEventRows, { events: executionEvents }) })] })] }, JSON.stringify(['history', shownRequestId ?? 'ready', historicalEntry?.packageId])), _jsxs(InspectorSection, { title: "Selected step", children: [_jsxs("div", { className: "notice", children: [_jsx("strong", { children: displaySteps[shownSelectedStep]?.name ?? 'No step selected' }), _jsx("br", {}), displayResults[shownSelectedStep] ? displayResults[shownSelectedStep].error ? 'This step failed. See the error details above.' : `Completed in ${displayResults[shownSelectedStep].durationMs} ms.` : selectedInvocations.length > 1 ? `${selectedInvocations.length} invocations recorded. No single invocation selected.` : 'Run the Project to inspect execution details.', _jsxs("div", { className: "inspector-actions", children: [_jsx("button", { className: "button", onClick: () => void retrySelected(), disabled: readOnly || !!preparedDocument || !displayResults[shownSelectedStep] || (!displayResults[shownSelectedStep]?.error && runState !== "completed"), children: "Retry Action" }), _jsx("button", { className: `button ${stopAfterStepId === displaySteps[shownSelectedStep]?.id ? "active" : ""}`, onClick: () => displaySteps[shownSelectedStep] && toggleStopAfter(displaySteps[shownSelectedStep].id), disabled: readOnly || !displaySteps[shownSelectedStep], children: "Stop After" }), _jsx("button", { className: "button", onClick: () => void runFromSelected(), disabled: readOnly || !!preparedDocument || !displayResults[shownSelectedStep] || runState === "running", children: "Run From Here" })] })] }), _jsxs("div", { className: "selection-nav", children: [_jsx("button", { className: "button", disabled: shownSelectedStep <= 0, onClick: () => selectDisplayedStep(index => Math.max(0, index - 1)), children: "\u2039 Previous" }), _jsx("span", { children: displaySteps.length ? `${shownSelectedStep + 1} / ${displaySteps.length}` : '0 / 0' }), _jsx("button", { className: "button", disabled: shownSelectedStep >= displaySteps.length - 1, onClick: () => selectDisplayedStep(index => Math.min(displaySteps.length - 1, index + 1)), children: "Next \u203A" })] })] })] })] }), " "] }) }), showAbout && _jsx("div", { className: "about-backdrop", onClick: () => setShowAbout(false), children: _jsxs("section", { className: "about-dialog", role: "dialog", "aria-modal": "true", "aria-labelledby": "about-title", onClick: event => event.stopPropagation(), children: [_jsx("button", { className: "about-close", onClick: () => setShowAbout(false), "aria-label": "Close About", children: "\u00D7" }), _jsx("div", { className: "runner-logo", children: "\u25B6" }), _jsx("h2", { id: "about-title", children: "QAick Runner" }), _jsx("p", { children: "Standalone execution and evidence viewer for QAICK Projects." }), _jsxs("small", { children: [RUNNER_UI_VERSION, " \u00B7 ", RUNNER_BUILD_LABEL, " \u00B7 QAick contract"] }), _jsx("footer", { children: "\u00A9 2006\u20132026 QAick. All rights reserved." })] }) })] });
658
658
  }
659
659
  function recordedDisplaySteps(results) {
660
660
  const unique = new Map();
@@ -678,7 +678,7 @@ function HistoryPanel({ entries, retention, onRetentionChange, onClear, onDelete
678
678
  }) })] }) }) : _jsx("p", { className: "empty-state", children: "Completed and failed runs will be kept here in this browser." })] });
679
679
  }
680
680
  function InspectorSection({ title, children }) { return _jsxs("section", { className: "inspector-section", children: [_jsx("h3", { children: title }), children] }); }
681
- function KeyValues({ values, secretValues = [] }) { return _jsx("div", { className: "key-values", children: redactKeyValuePairs(values, secretValues).map((value, index) => _jsx("span", { children: value }, `${value}-${index}`)) }); }
681
+ function KeyValues({ values }) { return _jsx("div", { className: "key-values", children: values.map((value, index) => _jsx("span", { children: value }, `${value}-${index}`)) }); }
682
682
  function IterationHistory({ result }) { return _jsxs(_Fragment, { children: [_jsx("div", { className: "iteration-history", children: result?.children?.length ? result.children.map((iteration, index) => _jsxs("div", { className: "iteration-entry", children: [_jsx("strong", { children: iteration.name }), _jsxs("span", { children: [iteration.state.toUpperCase(), " \u00B7 ", iteration.durationMs, " ms"] }), _jsx("small", { children: iteration.children?.map(child => `${child.name}: ${Object.entries(child.outputs).map(([key, value]) => `${key}=${String(value)}`).join(', ') || 'no outputs'}`).join(' · ') || 'No nested output.' })] }, `${iteration.id}-${index}`)) : _jsx("div", { className: "notice", children: "No iteration history available." }) }), result?.terminalReason && _jsxs("div", { className: "timing-details", children: [_jsx("strong", { children: "Terminal reason" }), _jsx("span", { children: result.terminalReason })] }), _jsx(TransportTiming, { timing: result?.transportTiming }), _jsx(BranchExecutionPath, { result: result }), _jsx(ParallelGroupDetails, { result: result }), _jsx(ResultSummary, { result: result })] }); }
683
683
  function TransportTiming({ timing }) { return _jsxs("div", { className: "timing-details", children: [_jsx("strong", { children: timing ? 'Request timing' : 'Contract version' }), timing ? _jsxs(_Fragment, { children: [_jsxs("span", { children: ["Started ", new Date(timing.requestStartedAt).toLocaleTimeString()] }), _jsxs("span", { children: ["Response ", new Date(timing.responseReceivedAt).toLocaleTimeString()] }), _jsxs("span", { children: ["Transport duration ", timing.durationMs, " ms"] })] }) : _jsxs("span", { children: ["@qaick/contract ", RUNNER_CONTRACT_VERSION] })] }); }
684
684
  function BranchExecutionPath({ result }) { const branches = result?.children?.filter(child => child.kind === 'control-block' && child.children?.length); if (!branches?.length)
@@ -758,7 +758,7 @@ function contextDisplaySteps(context, collapsed, document) {
758
758
  function visit(key, depth, parentId) { const n = byKey.get(key); const visible = !['project', 'body'].includes(n.kind); const payload = document?.nodes.find(p => p.occurrence === key); const row = { parentId, structuralKind: n.kind, id: key, occurrence: key, name: n.name, kind: n.kind === 'project' ? 'flow' : n.kind === 'unknown' ? 'action' : n.kind, depth, structuralAddress: n.originalAddress, hasChildren: n.children.length > 0, loopRepeat: payload?.control?.type === 'repeat', loopTotal: payload?.control?.iterations, loopDuration: payload?.control?.durationMs }; return [...(visible ? [row] : []), ...(collapsed.has(key) ? [] : [...(n.sequence ?? []), ...n.children.filter(child => !n.sequence?.includes(child))].flatMap(child => visit(child, depth + (visible ? 1 : 0), visible ? key : parentId)))]; }
759
759
  return visit(context.root, 0);
760
760
  }
761
- function ExecutionEventRows({ events }) { return _jsx("ul", { className: "event-log-list", children: events.map(event => _jsx("li", { children: _jsxs("button", { type: "button", className: "event-row", "data-event-sequence": event.sequence, children: [_jsxs("span", { className: "event-row-meta", children: [_jsx("time", { dateTime: event.timestamp, children: new Date(event.timestamp).toLocaleTimeString() }), _jsx("code", { children: event.type.toUpperCase() }), _jsx("span", { className: "event-state", children: event.state.toUpperCase() })] }), _jsx("span", { className: "event-message", children: event.message }), event.parallel && _jsxs("small", { className: "parallel-event", children: ["Parallel ", event.parallel.completed, "/", event.parallel.total, " (", event.parallel.join, ")"] })] }) }, event.sequence)) }); }
761
+ function ExecutionEventRows({ events }) { return _jsx("ul", { className: "event-log-list", children: events.map(event => _jsx("li", { children: _jsxs("button", { type: "button", className: "event-row", "data-event-sequence": event.sequence, children: [_jsxs("span", { className: "event-row-meta", children: [_jsx("time", { dateTime: event.timestamp, children: new Date(event.timestamp).toLocaleTimeString() }), _jsx("code", { children: event.type.replace(/^flow_/, 'stream_').toUpperCase() }), _jsx("span", { className: "event-state", children: event.state.toUpperCase() })] }), _jsx("span", { className: "event-message", children: event.message }), event.parallel && _jsxs("small", { className: "parallel-event", children: ["Parallel ", event.parallel.completed, "/", event.parallel.total, " (", event.parallel.join, ")"] })] }) }, event.sequence)) }); }
762
762
  /** Match only recorded identities; labels and ID suffixes never select a different occurrence. */
763
763
  export function resolveDiagnosticTarget(rows, target, context) {
764
764
  let matches;