@qaick/runner 0.32.2 → 0.32.3

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 (37) hide show
  1. package/package-dist/package.json +5 -5
  2. package/package-dist/src/demo/RunnerWalkthrough.js +4 -4
  3. package/package-dist/src/demo/RunnerWalkthrough.js.map +1 -1
  4. package/package-dist/src/runner/RunnerModule.d.ts +4 -3
  5. package/package-dist/src/runner/RunnerModule.d.ts.map +1 -1
  6. package/package-dist/src/runner/RunnerModule.js +228 -63
  7. package/package-dist/src/runner/RunnerModule.js.map +1 -1
  8. package/package-dist/src/runner/catalog.js +1 -1
  9. package/package-dist/src/runner/execution-context.d.ts +1 -1
  10. package/package-dist/src/runner/execution-context.d.ts.map +1 -1
  11. package/package-dist/src/runner/execution-context.js +3 -3
  12. package/package-dist/src/runner/execution-context.js.map +1 -1
  13. package/package-dist/src/runner/history.d.ts +20 -1
  14. package/package-dist/src/runner/history.d.ts.map +1 -1
  15. package/package-dist/src/runner/history.js +14 -0
  16. package/package-dist/src/runner/history.js.map +1 -1
  17. package/package-dist/src/runner/invocation-inputs.d.ts +6 -2
  18. package/package-dist/src/runner/invocation-inputs.d.ts.map +1 -1
  19. package/package-dist/src/runner/invocation-inputs.js.map +1 -1
  20. package/package-dist/src/runner/loop-presentation.d.ts +4 -4
  21. package/package-dist/src/runner/loop-presentation.d.ts.map +1 -1
  22. package/package-dist/src/runner/loop-presentation.js +4 -4
  23. package/package-dist/src/runner/loop-presentation.js.map +1 -1
  24. package/package-dist/src/runner/presentation-state.d.ts +19 -4
  25. package/package-dist/src/runner/presentation-state.d.ts.map +1 -1
  26. package/package-dist/src/runner/presentation-state.js +68 -3
  27. package/package-dist/src/runner/presentation-state.js.map +1 -1
  28. package/package-dist/src/runner/runtime-client-adapter.d.ts +1 -1
  29. package/package-dist/src/runner/studio-execution-document.d.ts +4 -0
  30. package/package-dist/src/runner/studio-execution-document.d.ts.map +1 -0
  31. package/package-dist/src/runner/studio-execution-document.js +239 -0
  32. package/package-dist/src/runner/studio-execution-document.js.map +1 -0
  33. package/package-dist/src/runner/studio-hierarchy-loader.js +2 -2
  34. package/package-dist/src/runner/types.d.ts +26 -6
  35. package/package-dist/src/runner/types.d.ts.map +1 -1
  36. package/package-dist/styles.css +55 -27
  37. package/package.json +5 -5
@@ -1,8 +1,10 @@
1
- export function eventPresentationEvidence(events) {
1
+ export function eventPresentationEvidence(events, requestId) {
2
2
  const latest = new Map();
3
3
  for (const e of events)
4
- if (e.structuralAddress && e.stepId)
5
- latest.set(JSON.stringify([e.structuralAddress, e.iterations ?? []]), { structuralAddress: e.structuralAddress, iterations: e.iterations, state: e.state });
4
+ if ((requestId === undefined || e.requestId === requestId) && e.stepId && (e.structuralAddress || 'occurrence' in e && e.occurrence)) {
5
+ const occurrence = 'occurrence' in e ? e.occurrence : undefined;
6
+ latest.set(JSON.stringify([occurrence ?? e.structuralAddress, e.iterations ?? []]), { occurrence, structuralAddress: e.structuralAddress, iterations: e.iterations, state: e.state });
7
+ }
6
8
  return [...latest.values()];
7
9
  }
8
10
  const key = (value) => JSON.stringify(value);
@@ -30,6 +32,8 @@ export function presentationState(row, results, terminal, fallback = 'pending')
30
32
  matches = results.filter(r => prefix(r.structuralAddress, branch) && (parent.iterations ?? []).every((selection, i) => key(selection) === key((r.iterations ?? [])[i])));
31
33
  }
32
34
  }
35
+ else if (row.occurrence)
36
+ matches = results.filter(r => r.occurrence === row.occurrence);
33
37
  else if (row.structuralAddress)
34
38
  matches = results.filter(r => key(r.structuralAddress) === key(row.structuralAddress));
35
39
  if (matches.length)
@@ -38,4 +42,65 @@ export function presentationState(row, results, terminal, fallback = 'pending')
38
42
  return 'not executed';
39
43
  return fallback;
40
44
  }
45
+ export function scopeIncludes(context, root, key) {
46
+ const rootKey = root.kind === 'document' ? context.root : root.key;
47
+ let node = context.nodes.find(n => n.key === key);
48
+ while (node) {
49
+ if (node.key === rootKey)
50
+ return true;
51
+ const parent = node.parent ? context.nodes.find(n => n.key === node.parent) : undefined;
52
+ if (parent?.sequence && !parent.sequence.includes(node.key))
53
+ return false;
54
+ node = parent;
55
+ }
56
+ return false;
57
+ }
58
+ /** Read-only projection. Actual outcomes are never replaced with descendant summaries. */
59
+ export function rowPresentation(row, evidence, terminal, fallback = 'pending', options = {}) {
60
+ const display = (state, source, label = state.toUpperCase()) => ({ state, label, source });
61
+ const { context, scope, result } = options;
62
+ if (row.occurrence && context && scope && !scopeIncludes(context, scope, row.occurrence))
63
+ return display('not executed', 'outside');
64
+ const node = context?.nodes.find(n => n.key === row.occurrence);
65
+ if (node?.kind === 'flow' && result) {
66
+ // Selection identifies an isolated Flow even when target retains its Project identity.
67
+ let outcome;
68
+ if (scope?.kind === 'occurrence' && scope.key === node.key)
69
+ outcome = result;
70
+ else if (node.locator.kind === 'source') {
71
+ const sourceId = node.locator.path.at(-1);
72
+ const id = sourceId?.kind === 'flow' ? sourceId.id : node.locator.path.length === 0 && node.locator.root.kind === 'flow' ? node.locator.root.id : undefined;
73
+ const candidates = (result.children ?? (result.target.kind === 'flow' ? [result] : [])).filter(r => r.target.kind === 'flow' && r.target.id === id);
74
+ if (candidates.length === 1)
75
+ outcome = candidates[0];
76
+ }
77
+ if (outcome)
78
+ return display(outcome.state === 'completed' ? 'finished' : outcome.state, 'flow-result', outcome.state.toUpperCase());
79
+ }
80
+ const own = row.occurrence ? evidence.filter(r => r.occurrence === row.occurrence) : [];
81
+ if (own.length)
82
+ return display(presentationState(row, [own.at(-1)], terminal, fallback), 'invocation');
83
+ if (node && node.kind !== 'action' && context) {
84
+ let descendants = evidence.filter(r => r.occurrence && r.occurrence !== node.key && scopeIncludes(context, { kind: 'occurrence', key: node.key }, r.occurrence));
85
+ // Branch summaries belong to the latest actual owning Control invocation only.
86
+ if (node.kind === 'branch') {
87
+ const owner = evidence.filter(r => r.occurrence === node.parent).at(-1);
88
+ descendants = owner ? descendants.filter(r => (owner.iterations ?? []).every((value, i) => key(value) === key(r.iterations?.[i]))) : [];
89
+ }
90
+ if (descendants.length) {
91
+ // The same occurrence may run repeatedly; earlier invocations cannot recolor the latest one.
92
+ const latest = new Map();
93
+ for (const item of descendants)
94
+ latest.set(item.occurrence, item);
95
+ const state = aggregate([...latest.values()].map(r => r.state));
96
+ if (!terminal && (state === 'finished' || state === 'skipped'))
97
+ return display('pending', 'descendants', 'RECORDED ACTIVITY');
98
+ return display(state, 'descendants', `RECORDED STEPS: ${state.toUpperCase()}`);
99
+ }
100
+ if (node.kind === 'branch' && terminal)
101
+ return display('not executed', 'none', 'NO RECORDED EXECUTION');
102
+ }
103
+ const state = presentationState(row, evidence, terminal, fallback);
104
+ return display(state, row.branchOwner && state !== 'not executed' && state !== 'pending' ? 'descendants' : 'none', row.branchOwner && state !== 'not executed' && state !== 'pending' ? `RECORDED STEPS: ${state.toUpperCase()}` : state.toUpperCase());
105
+ }
41
106
  //# sourceMappingURL=presentation-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-state.js","sourceRoot":"","sources":["../../../src/runner/presentation-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presentation-state.js","sourceRoot":"","sources":["../../../src/runner/presentation-state.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,7 @@ export declare function createBrowserRuntimeBridge(): {
26
26
  cancel: (id: string) => Promise<void>;
27
27
  control: (id: string, command: import("@qaick/runtime").ControlCommand) => Promise<void>;
28
28
  controlState: (id: string) => Promise<import("@qaick/executor").ExecutionControlState | undefined>;
29
- getResult: (id: string) => Promise<import("@qaick/executor").ExecutorResult>;
29
+ getResult: (id: string) => Promise<import("@qaick/executor").AcceptedExecutorResult>;
30
30
  subscribe(id: string, listener: (event: ExecutionEvent) => void): () => void;
31
31
  getRuntimeInfo: () => Promise<import("@qaick/runtime").RuntimeInfo>;
32
32
  retryAction: () => Promise<never>;
@@ -0,0 +1,4 @@
1
+ import type { ExecutionDocumentV8, ExecutionRoot } from '@qaick/contract';
2
+ /** Existing authoring lowering boundary: retain the source, prepare only its selected closure. */
3
+ export declare function prepareStudioDocument(serialized: string, selection?: ExecutionRoot): Promise<ExecutionDocumentV8>;
4
+ //# sourceMappingURL=studio-execution-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-execution-document.d.ts","sourceRoot":"","sources":["../../../src/runner/studio-execution-document.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,mBAAmB,EAAqG,aAAa,EAAC,MAAM,iBAAiB,CAAC;AASxL,kGAAkG;AAClG,wBAAsB,qBAAqB,CAAC,UAAU,EAAC,MAAM,EAAE,SAAS,GAAC,aAA+B,GAAE,OAAO,CAAC,mBAAmB,CAAC,CAgJrI"}
@@ -0,0 +1,239 @@
1
+ import { hashCanonicalJson, migrateArtifact, occurrenceKey, validateExecutionDocumentV8 } from '@qaick/contract';
2
+ import { lowerStudioActionOccurrence, runtimeTemplates } from "./action-template-lowering.js";
3
+ import { PackageLoadError } from "./package-load-error.js";
4
+ const record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
5
+ const records = (v) => Array.isArray(v) ? v.filter(record) : [];
6
+ const literal = (v) => record(v) && v.type === 'literal' ? v.value : undefined;
7
+ const clean = (v) => JSON.parse(JSON.stringify(v));
8
+ const declarations = (v) => records(v.inputs).map(i => ({ name: String(i.name), type: (i.type ?? 'string'), required: i.required === true, ...(Object.hasOwn(i, 'defaultValue') ? { defaultValue: i.defaultValue } : {}) }));
9
+ /** Existing authoring lowering boundary: retain the source, prepare only its selected closure. */
10
+ export async function prepareStudioDocument(serialized, selection = { kind: 'document' }) {
11
+ const source = migrateArtifact(JSON.parse(serialized)).artifact;
12
+ // Saved canonical bindings are not re-migrated through ordinal-only traversal: drafts have no such order.
13
+ const migrated = source;
14
+ const sourceValue = source;
15
+ const project = record(migrated.project) ? migrated.project : undefined;
16
+ const loaded = project ?? (record(migrated.flow) ? migrated.flow : undefined);
17
+ if (!loaded)
18
+ throw new PackageLoadError('Expected a saved Project or Flow.');
19
+ const rootIdentity = { kind: project ? 'project' : 'flow', id: String(loaded.id) };
20
+ const context = { coverage: project ? 'complete-project' : 'loaded-root', root: '', nodes: [], edges: [] };
21
+ const values = new Map(), byKey = new Map();
22
+ const issue = (node, code, message) => node.issues.push({ at: node.key, code, message });
23
+ function add(value, kind, name, parent, path) {
24
+ const locator = { kind: 'source', root: rootIdentity, path };
25
+ const node = { key: occurrenceKey(locator), locator, kind, name, parent: parent?.key ?? null, children: [], sequence: null, orderState: 'not-applicable', issues: [] };
26
+ if (byKey.has(node.key))
27
+ throw new PackageLoadError('Duplicate source occurrence identity.');
28
+ context.nodes.push(node);
29
+ byKey.set(node.key, node);
30
+ values.set(node.key, value);
31
+ parent?.children.push(node.key);
32
+ return node;
33
+ }
34
+ const path = (n) => n.locator.path;
35
+ function container(value, node) {
36
+ for (const child of records(value.nodes))
37
+ visit(child, node, [...path(node), { kind: 'node', id: String(child.id) }]);
38
+ const ids = Array.isArray(value.sequence) ? value.sequence : undefined;
39
+ const children = records(value.nodes);
40
+ if (ids && ids.length === children.length && new Set(ids).size === ids.length && ids.every(id => children.some(c => c.id === id))) {
41
+ node.orderState = 'ordered';
42
+ node.sequence = ids.map(id => node.children.find(k => values.get(k)?.id === id));
43
+ }
44
+ else {
45
+ node.orderState = 'draft';
46
+ issue(node, 'MISSING_EXECUTION_ORDER', 'This location has no valid execution order. Check its steps in Studio.');
47
+ }
48
+ for (const edge of records(value.edges)) {
49
+ const from = record(edge.source) ? edge.source.nodeId : edge.source, to = record(edge.target) ? edge.target.nodeId : edge.target;
50
+ const source = node.children.find(k => values.get(k)?.id === from), target = node.children.find(k => values.get(k)?.id === to);
51
+ if (!source || !target)
52
+ throw new PackageLoadError('A saved connection has an unavailable endpoint.');
53
+ context.edges.push({ id: String(edge.id), container: node.key, source, target });
54
+ }
55
+ }
56
+ function visit(value, parent, path) {
57
+ const kind = value.type === 'action' ? 'action' : value.type === 'operation' ? 'operation' : value.type === 'block' || value.type === 'control-block' ? 'control-block' : undefined;
58
+ if (!kind)
59
+ throw new PackageLoadError('Unsupported authoring node kind.');
60
+ const node = add(value, kind, String(value.label), parent, path);
61
+ if (kind === 'operation') {
62
+ if (!record(value.body))
63
+ throw new PackageLoadError('Operation has no owned body.');
64
+ const body = add(value.body, 'body', String(value.body.name ?? value.label), node, [...path, { kind: 'body' }]);
65
+ container(value.body, body);
66
+ }
67
+ else if (kind === 'control-block') {
68
+ const branches = records(record(value.settings) ? value.settings.branches : undefined);
69
+ for (const [i, branch] of branches.entries()) {
70
+ const b = add(branch, 'branch', String(branch.name ?? 'Unnamed Branch'), node, [...path, { kind: 'branch', id: String(branch.id) }]);
71
+ b.originalPosition = i + 1;
72
+ container(branch, b);
73
+ }
74
+ const body = add(value, 'body', String(value.label), node, [...path, { kind: 'body' }]);
75
+ container(value, body);
76
+ node.orderState = 'ordered';
77
+ node.sequence = branches.length ? node.children.filter(k => byKey.get(k).kind === 'branch') : [...node.children];
78
+ }
79
+ }
80
+ const root = add(loaded, rootIdentity.kind, String(loaded.name), undefined, []);
81
+ context.root = root.key;
82
+ if (project) {
83
+ const flows = records(project.flows), refs = records(project.flowReferences);
84
+ const order = refs.length ? refs.map(r => r.flowId) : flows.map(f => f.id);
85
+ for (const flow of flows) {
86
+ const f = add(flow, 'flow', String(flow.name), root, [{ kind: 'flow', id: String(flow.id) }]);
87
+ container(flow, f);
88
+ }
89
+ if (order.length !== root.children.length || new Set(order).size !== order.length || order.some(id => !flows.some(f => f.id === id)))
90
+ throw new PackageLoadError('Project Flow ownership is inconsistent.');
91
+ root.orderState = 'ordered';
92
+ root.sequence = order.map(id => root.children.find(k => values.get(k)?.id === id));
93
+ root.sequence.forEach((key, i) => byKey.get(key).originalPosition = i + 1);
94
+ }
95
+ else
96
+ container(loaded, root);
97
+ function addresses(node, prefix) {
98
+ if (['action', 'operation', 'control-block'].includes(node.kind) && prefix)
99
+ node.originalAddress = { scope: project ? 'routine' : 'flow', segments: prefix };
100
+ for (const key of node.children) {
101
+ const child = byKey.get(key);
102
+ const index = node.sequence?.indexOf(key);
103
+ const segment = child.kind === 'body' ? { kind: 'body' } : index !== undefined && index >= 0 ? { kind: child.kind === 'flow' ? 'flow' : child.kind === 'branch' ? 'branch' : 'step', position: index + 1 } : undefined;
104
+ addresses(child, prefix && segment ? [...prefix, segment] : undefined);
105
+ }
106
+ }
107
+ addresses(root, []);
108
+ const selected = selection.kind === 'document' ? root : byKey.get(selection.key);
109
+ if (!selected || !['project', 'flow', 'action', 'operation', 'control-block'].includes(selected.kind))
110
+ throw new PackageLoadError('Selected execution root is unavailable.');
111
+ const closure = new Set();
112
+ const collect = (n) => { closure.add(n.key); (n.sequence ?? n.children).forEach(k => collect(byKey.get(k))); };
113
+ collect(selected);
114
+ const selectedIssues = [];
115
+ const payloads = [], flows = [];
116
+ // Resolve aliases only from their persisted declaration and original ownership. No ID-only fallback.
117
+ function aliases(node) {
118
+ const chain = [];
119
+ let current = node;
120
+ while (current) {
121
+ chain.unshift(current);
122
+ current = current.parent ? byKey.get(current.parent) : undefined;
123
+ }
124
+ const result = new Map();
125
+ for (const owner of chain) {
126
+ const value = values.get(owner.key);
127
+ for (const variable of records(value.variables)) {
128
+ const link = record(variable.link) ? variable.link : undefined;
129
+ if (!link)
130
+ continue;
131
+ if (link.sourceKind === 'input') {
132
+ result.set(String(variable.name), { type: 'input', path: [String(variable.name)] });
133
+ continue;
134
+ }
135
+ const candidates = owner.children.map(k => byKey.get(k)).filter(n => n.kind === 'action' && values.get(n.key)?.id === link.sourceNodeId);
136
+ const producer = candidates.length === 1 ? candidates[0] : undefined;
137
+ const definition = producer ? values.get(producer.key)?.actionDefinition : undefined;
138
+ const outputs = records(record(definition) ? definition.outputs : undefined).filter(o => o.id === link.sourceId);
139
+ if (producer && outputs.length === 1 && typeof outputs[0].name === 'string')
140
+ result.set(String(variable.name), { type: 'occurrence-output', producer: producer.key, iterations: [], outputName: outputs[0].name });
141
+ }
142
+ }
143
+ return result;
144
+ }
145
+ function operand(value, node) {
146
+ if (!record(value))
147
+ throw new PackageLoadError('Expected a persisted binding.');
148
+ if (value.type === 'variable')
149
+ return aliases(node).get(String(value.variableName)) ?? { type: 'input', path: [String(value.variableName)] };
150
+ if (value.type === 'hierarchy-output')
151
+ return clean({ type: 'hierarchy-output', address: value.address, iterations: value.iterations, outputName: value.outputName });
152
+ if (value.type === 'broken-output')
153
+ return { type: 'unresolved-output', code: 'needs-repair', reason: 'The saved output reference requires repair in Studio.', former: clean(value.former) };
154
+ // Resolve legacy references only within their original lexical ownership. The
155
+ // canonical preflight still proves ordering, declarations and iteration scope.
156
+ // Broken operands above are never recovered through this resolution.
157
+ if (value.type === 'output') {
158
+ const candidates = [];
159
+ let owner = node;
160
+ while (owner) {
161
+ candidates.push(...owner.children.map(k => byKey.get(k)).filter(n => values.get(n.key)?.id === value.nodeId && ['action', 'operation'].includes(n.kind)));
162
+ owner = owner.parent ? byKey.get(owner.parent) : undefined;
163
+ }
164
+ if (candidates.length === 1)
165
+ return { type: 'occurrence-output', producer: candidates[0].key, iterations: [], outputName: String(value.outputName) };
166
+ return { type: 'unresolved-output', code: 'needs-repair', reason: 'The saved output reference has no unique source in its original context.', former: clean(value) };
167
+ }
168
+ if (value.type === 'input' || value.type === 'occurrence-output' || value.type === 'unresolved-output')
169
+ return clean(value);
170
+ throw new PackageLoadError('Unsupported saved execution operand.');
171
+ }
172
+ function bindings(value, node) { const bindings = {}, staticInputs = {}; for (const [name, v] of Object.entries(record(value) ? value : {})) {
173
+ if (record(v) && v.type === 'literal')
174
+ staticInputs[name] = runtimeTemplates(v.value);
175
+ else
176
+ bindings[name] = operand(v, node);
177
+ } return { bindings, staticInputs }; }
178
+ function condition(v, node) { const l = literal(v); if (typeof l === 'boolean')
179
+ return l; if (v === undefined)
180
+ return undefined; return { binding: operand(v, node) }; }
181
+ function compile(node) {
182
+ const value = values.get(node.key);
183
+ if (node.kind === 'flow') {
184
+ flows.push({ occurrence: node.key, children: node.sequence, inputDeclarations: declarations(value), requiredInputs: declarations(value).filter(d => d.required).map(d => d.name) });
185
+ return;
186
+ }
187
+ if (!['action', 'operation', 'control-block'].includes(node.kind))
188
+ return;
189
+ const supplied = bindings(value.inputs, node);
190
+ if (node.kind === 'action') {
191
+ const action = lowerStudioActionOccurrence(value, [], { bindings: {}, staticInputs: supplied.staticInputs });
192
+ payloads.push({ ...action, kind: 'action', occurrence: node.key, bindings: supplied.bindings });
193
+ return;
194
+ }
195
+ const body = node.children.map(k => byKey.get(k)).find(n => n.kind === 'body');
196
+ if (node.kind === 'operation') {
197
+ const bodyValue = values.get(body.key);
198
+ const returns = bindings(bodyValue.outputBindings, body);
199
+ const locals = Object.fromEntries(records(bodyValue.variables).filter(v => Object.hasOwn(v, 'initialValue')).map(v => [String(v.name), v.initialValue]));
200
+ payloads.push({ occurrence: node.key, id: String(value.id), name: node.name, kind: 'operation', action: `operation:${value.operationId}`, output: Object.fromEntries(records(bodyValue.outputs).map(o => [String(o.name), null])), children: body.sequence, inputDeclarations: declarations(bodyValue), ...supplied, staticInputs: { ...locals, ...supplied.staticInputs }, outputBindings: returns.bindings, staticOutputs: returns.staticInputs });
201
+ return;
202
+ }
203
+ const settings = record(value.settings) ? value.settings : {};
204
+ if (record(settings.count) && settings.count.type !== 'literal')
205
+ throw new PackageLoadError('Runtime-bound counts remain unsupported.');
206
+ const branchNodes = node.children.map(k => byKey.get(k)).filter(n => n.kind === 'branch');
207
+ const parallel = settings.parallel === true || settings.mode === 'parallel';
208
+ const branches = branchNodes.map(b => { const val = values.get(b.key); const c = val.condition === undefined && parallel ? true : condition(val.condition, node); if (c === undefined)
209
+ throw new PackageLoadError('A Branch has no supported condition.'); return { occurrence: b.key, condition: c, children: b.sequence }; });
210
+ const count = literal(settings.count), iterations = typeof count === 'number' && Number.isInteger(count) ? count : undefined;
211
+ const c = condition(settings.condition, node), minutes = literal(settings.durationMinutes), millis = literal(settings.durationMs), duration = typeof millis === 'number' ? millis : typeof minutes === 'number' ? minutes * 60000 : undefined;
212
+ const delay = literal(settings.iterationDelaySeconds);
213
+ const control = { type: parallel && branches.length ? 'parallel' : branches.length ? 'branch' : iterations && iterations > 1 || duration !== undefined || c !== undefined ? 'repeat' : 'sequence', ...(settings.onError !== undefined ? { onError: settings.onError } : {}), ...(iterations !== undefined ? { iterations } : {}), ...(c !== undefined ? { condition: c } : {}), ...(duration !== undefined ? { durationMs: duration } : {}), ...(typeof delay === 'number' ? { iterationDelayMs: delay * 1000 } : {}), ...(parallel ? { join: 'all', merge: settings.merge === 'first' || settings.merge === 'last' ? settings.merge : 'collect', ...(record(settings.mergeBindings) ? { mergeBindings: Object.fromEntries(Object.entries(settings.mergeBindings).map(([name, v]) => [name, operand(v, node)])) } : {}) } : {}), ...(branches.length ? { branches } : {}) };
214
+ payloads.push({ occurrence: node.key, id: String(value.id), name: node.name, kind: 'control-block', action: parallel ? 'control.parallel' : branches.length ? 'control.branch' : 'control.sequence', output: {}, children: branches.length ? branches.flatMap(b => b.children) : body.sequence, control });
215
+ }
216
+ // Complete payloads may be indexed outside the selected scope; only the selected root dispatches.
217
+ // Draft containers stay structural context, while valid descendants remain independently selectable.
218
+ const incomplete = (n) => n.issues.length > 0 || (n.sequence ?? n.children).some(k => incomplete(byKey.get(k)));
219
+ for (const n of [...context.nodes].reverse()) {
220
+ if (incomplete(n))
221
+ continue;
222
+ try {
223
+ compile(n);
224
+ }
225
+ catch (error) {
226
+ issue(n, 'UNSUPPORTED_PREPARATION', error instanceof PackageLoadError ? error.message : 'This scope cannot be prepared.');
227
+ }
228
+ }
229
+ selectedIssues.push(...context.nodes.filter(n => closure.has(n.key)).flatMap(n => n.issues));
230
+ const selectedValue = values.get(selected.key);
231
+ const entryValue = selected.kind === 'operation' ? values.get(selected.children[0]) : selected.kind === 'action' && record(selectedValue.actionDefinition) ? selectedValue.actionDefinition : selectedValue;
232
+ const inputs = declarations(entryValue);
233
+ const doc = clean({ schemaVersion: 8, packageId: `studio-${project ? 'project' : 'flow'}-${loaded.id}`, target: { kind: project ? 'project' : 'flow', id: String(loaded.id), name: String(loaded.name) }, source: { kind: 'authoring', id: String(loaded.id), schemaVersion: Number(sourceValue.schemaVersion), contentHash: await hashCanonicalJson(source) }, context, selection: { root: selection, inputDeclarations: inputs, requiredInputs: inputs.filter(d => d.required).map(d => d.name), executable: !selectedIssues.length, issues: selectedIssues }, nodes: payloads, flows });
234
+ const errors = validateExecutionDocumentV8(doc);
235
+ if (errors.length)
236
+ throw new PackageLoadError('Execution document preparation failed.', errors);
237
+ return doc;
238
+ }
239
+ //# sourceMappingURL=studio-execution-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-execution-document.js","sourceRoot":"","sources":["../../../src/runner/studio-execution-document.ts"],"names":[],"mappings":"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"}
@@ -298,10 +298,10 @@ export function loadHierarchyExecutionPackage(serialized, options = {}) {
298
298
  }
299
299
  if (record(value) && value.schemaVersion === 7 && typeof value.packageId === 'string') {
300
300
  if (options.flowId)
301
- throw new PackageLoadError('Select isolated target while lowering the saved Routine, not by rebasing an existing package.');
301
+ throw new PackageLoadError('Select isolated target while lowering the saved Routine, not by rebasing an existing Project.');
302
302
  const issues = validateExecutionPackageV7(value);
303
303
  if (issues.length)
304
- throw new PackageLoadError('Invalid Execution v7 package.', issues);
304
+ throw new PackageLoadError('Invalid Execution v7 Project.', issues);
305
305
  return value;
306
306
  }
307
307
  return lowerStudioHierarchy(value, options);
@@ -78,15 +78,35 @@ declare module '@qaick/contract' {
78
78
  }
79
79
  }
80
80
  export type { ExecutionPackageV7 as ExecutionPackage, ExecutionStepV7 as ExecutionStep, ExecutionFlowV7 as ExecutionFlow } from '@qaick/contract';
81
- export type { ExecutorRequest as RunnerRequest, ExecutorEvent as ExecutionEvent, ExecutorResult, ExecutorStepResult } from '@qaick/runtime';
81
+ export type { AcceptedExecutorRequest as RunnerRequest, ExecutorResult, ExecutorStepResult } from '@qaick/runtime';
82
+ export type ExecutionEvent = import('@qaick/runtime').AcceptedExecutorEvent;
82
83
  export interface RunnerEngine {
83
- submit(request: import('@qaick/runtime').ExecutorRequest): Promise<import('@qaick/contract').RunAccepted>;
84
+ submit(request: import('@qaick/runtime').AcceptedExecutorRequest): Promise<import('@qaick/contract').RunAccepted>;
84
85
  cancel(requestId: string): Promise<void>;
85
- events(requestId: string): AsyncIterable<import('@qaick/runtime').ExecutorEvent>;
86
- result(requestId: string): Promise<import('@qaick/runtime').ExecutorResult>;
86
+ events(requestId: string): AsyncIterable<ExecutionEvent>;
87
+ result(requestId: string): Promise<ExecutionResult>;
87
88
  }
88
- export type StepResult = import('@qaick/runtime').ExecutorStepResult & {
89
+ export type StepResult = Omit<import('@qaick/runtime').ExecutorStepResult, 'iterations' | 'children' | 'attempts' | 'iteration'> & {
90
+ occurrence?: string;
91
+ iteration?: {
92
+ loop?: string;
93
+ loopId?: string;
94
+ current: number;
95
+ total: number;
96
+ };
97
+ iterations?: Array<import('@qaick/contract').IterationSelection | import('@qaick/contract').ScopeIteration>;
98
+ children?: StepResult[];
99
+ attempts?: Array<Omit<NonNullable<import('@qaick/runtime').ExecutorStepResult['attempts']>[number], 'children'> & {
100
+ children?: StepResult[];
101
+ }>;
89
102
  transportTiming?: import('./legacy-types.js').StepTransportTiming;
90
103
  };
91
- export type ExecutionResult = import('@qaick/runtime').ExecutorResult & Pick<import('@qaick/contract').ExecutionResult, 'warnings' | 'artifactHash' | 'provenance'>;
104
+ export type ExecutionResult = Omit<import('@qaick/runtime').ExecutorResult, 'steps' | 'children'> & {
105
+ steps: StepResult[];
106
+ children?: ExecutionResult[];
107
+ resultVersion?: 2;
108
+ source?: import('@qaick/contract').DocumentSource;
109
+ scope?: import('@qaick/contract').ExecutionRoot;
110
+ documentHash?: string;
111
+ } & Pick<import('@qaick/contract').ExecutionResult, 'warnings' | 'artifactHash' | 'provenance'>;
92
112
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runner/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runner/types.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,cAAc,iBAAiB,CAAC;AAIhC,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AAEnF,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AACxI,MAAM,WAAW,kBAAkB;IAAG,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAAE;AACjH,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,QAAQ,GAAG,SAAS,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,6BAA6B,GAAG,uBAAuB,GAAG,yBAAyB,CAAC;AAE3P,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,gBAAgB;QAAG,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAAE;IAC7D,UAAU,mBAAmB;QAAG,gBAAgB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAC1G,UAAU,UAAU;QAAG,eAAe,CAAC,EAAE,mBAAmB,CAAA;KAAE;IAC9D,UAAU,UAAU;QAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;IAC3D,UAAU,UAAU;QAAG,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAC;YAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE;IACjU,UAAU,eAAe;QAAG,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IACnD,UAAU,eAAe;QAAG,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IAClG,UAAU,eAAe;QAAG,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,eAAe,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,cAAc,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE;IAC/M,UAAU,eAAe;QAAG,eAAe,CAAC,EAAE;YAAE,cAAc,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAC;YAAC,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAC9H,UAAU,aAAa;QAAG,YAAY,CAAC,EAAE,kBAAkB,CAAA;KAAE;IAC7D,UAAU,cAAc;QAAG,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,yBAAyB,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;CAC5F;AAGD,YAAY,EAAC,kBAAkB,IAAI,gBAAgB,EAAC,eAAe,IAAI,aAAa,EAAC,eAAe,IAAI,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9I,YAAY,EAAC,uBAAuB,IAAI,aAAa,EAAC,cAAc,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AAC/G,MAAM,MAAM,cAAc,GAAC,OAAO,gBAAgB,EAAE,qBAAqB,CAAC;AAC1E,MAAM,WAAW,YAAY;IAAE,MAAM,CAAC,OAAO,EAAC,OAAO,gBAAgB,EAAE,uBAAuB,GAAE,OAAO,CAAC,OAAO,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAAA,MAAM,CAAC,SAAS,EAAC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAAA,MAAM,CAAC,SAAS,EAAC,MAAM,GAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAAA,MAAM,CAAC,SAAS,EAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAAC;AAChS,MAAM,MAAM,UAAU,GAAC,IAAI,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,EAAC,YAAY,GAAC,UAAU,GAAC,UAAU,GAAC,WAAW,CAAC,GAAG;IACzH,UAAU,CAAC,EAAC,MAAM,CAAC;IACnB,SAAS,CAAC,EAAC;QAAC,IAAI,CAAC,EAAC,MAAM,CAAC;QAAA,MAAM,CAAC,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,CAAC;IACrE,UAAU,CAAC,EAAC,KAAK,CAAC,OAAO,iBAAiB,EAAE,kBAAkB,GAAC,OAAO,iBAAiB,EAAE,cAAc,CAAC,CAAC;IACzG,QAAQ,CAAC,EAAC,UAAU,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,gBAAgB,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,UAAU,CAAC,GAAG;QAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,CAAA;KAAC,CAAC,CAAC;IAC1I,eAAe,CAAC,EAAC,OAAO,mBAAgB,EAAE,mBAAmB,CAAC;CAC9D,CAAC;AACF,MAAM,MAAM,eAAe,GAAC,IAAI,CAAC,OAAO,gBAAgB,EAAE,cAAc,EAAC,OAAO,GAAC,UAAU,CAAC,GAAG;IAC9F,KAAK,EAAC,UAAU,EAAE,CAAC;IAAA,QAAQ,CAAC,EAAC,eAAe,EAAE,CAAC;IAC/C,aAAa,CAAC,EAAC,CAAC,CAAC;IAAA,MAAM,CAAC,EAAC,OAAO,iBAAiB,EAAE,cAAc,CAAC;IAAA,KAAK,CAAC,EAAC,OAAO,iBAAiB,EAAE,aAAa,CAAC;IAAA,YAAY,CAAC,EAAC,MAAM,CAAC;CACtI,GAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE,eAAe,EAAC,UAAU,GAAC,cAAc,GAAC,YAAY,CAAC,CAAC"}
@@ -18,7 +18,7 @@
18
18
  .panel { margin-top: 24px; border: 1px solid #e5e7eb; border-radius: 8px; background: white; overflow: hidden; } .panel-heading { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-bottom: 1px solid #e5e7eb; } h2 { margin: 0; font-size: 16px; } .running { color: #14804a; font-size: 12px; font-weight: 600; } .stopped { color: #b33a30; font-size: 12px; font-weight: 600; }
19
19
  table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding: 10px 14px; color: #7b899d; background: #fafbfd; font-size: 11px; text-align: left; text-transform: uppercase; letter-spacing: .04em; } td { padding: 10px 12px; border-top: 1px solid #edf0f7; } tr.parent-row td { background: #ffffff; } tr.nested-row td { background: #f3f7fd; } tr.selected td { background: #dce8ff !important; border-top-color: #9db9ed; } tr.selected td:first-child { border-left: 4px solid #4f46d8; } tr.selected .hierarchy-name { color: #173e91; font-weight: 500; } tbody tr { cursor: pointer; }
20
20
  .hierarchy-hint { display: flex; align-items: center; gap: 10px; padding: 9px 16px; border-bottom: 1px solid #dbe6fa; color: #315da9; background: #f2f6ff; font-size: 11px; } .hierarchy-hint span { color: #637897; } .hierarchy-action { padding: 4px 7px; border: 1px solid #b9cbed; border-radius: 4px; color: #315da9; background: #fff; font-size: 10px; font-weight: 500; cursor: pointer; } .hierarchy-action:first-of-type { margin-left: auto; } .hierarchy-name { display: inline-flex; align-items: center; gap: 7px; min-height: 22px; } .collapse-toggle { display: inline-grid; width: 18px; height: 18px; place-items: center; padding: 0; border: 1px solid #9eb5df; border-radius: 4px; color: #315da9; background: #eaf1ff; font-size: 14px; line-height: 1; cursor: pointer; } .branch-marker { color: #5d82ca; font-size: 18px; font-weight: 400; } .kind-label { display: inline-flex; padding: 3px 5px; border-radius: 4px; color: #6c7890; background: #edf0f7; font-size: 9px; font-weight: 600; letter-spacing: .05em; } .nested-label { color: #315da9; background: #e5efff; } .nested-row td:first-child { border-left: 3px solid #8eaded; } .parent-row td:first-child { border-left: 3px solid transparent; }
21
- .step-icon { display: inline-grid; width: 20px; height: 20px; margin-right: 7px; place-items: center; border-radius: 50%; color: white; background: var(--runner-surface-3); font-size: 11px; } .nested-row .step-icon { margin-left: 18px; } .nested-row .hierarchy-name { padding-left: 0 !important; } .step-icon.waiting { background: #efaa18; } .step-icon.skipped { color: #62738c; background: #edf1f6; } .step-icon.failed, .step-icon.cancelled { background: #c94b42; } .step-icon.pending { border: 2px solid #aab6c7; background: transparent; }
21
+ .step-icon { display: inline-grid; width: 20px; height: 20px; margin-right: 7px; place-items: center; border-radius: 50%; color: white; background: var(--runner-surface-3); font-size: 11px; } .nested-row .step-icon { margin-left: 18px; } .step-icon.waiting { background: #efaa18; } .step-icon.skipped { color: #62738c; background: #edf1f6; } .step-icon.failed, .step-icon.cancelled { background: #c94b42; } .step-icon.pending { border: 2px solid #aab6c7; background: transparent; }
22
22
  .selected-label { display: inline-flex; margin-left: 8px; padding: 3px 5px; border-radius: 4px; color: #3f37b8; background: #c4d7ff; font-size: 9px; font-weight: 600; letter-spacing: .05em; }
23
23
  .status { display: inline-flex; padding: 4px 8px; border-radius: 5px; font-size: 10px; font-weight: 600; letter-spacing: .03em; } .status.finished { color: #14804a; background: #e7f6ed; } .status.waiting { color: #98660b; background: #fff2d5; } .status.pending, .status.skipped { color: #62738c; background: #edf1f6; } .status.failed, .status.cancelled { color: #a33a32; background: #ffebe8; }
24
24
  .loop-row td { background: #f5f8fe; border-top: 1px solid #c8d7f0; border-bottom: 1px solid #dce6f6; } .loop-row td:first-child { border-left: 3px solid #668bd2; border-radius: 9px 0 0 0; } .loop-row td:last-child { border-right: 1px solid #c8d7f0; border-radius: 0 9px 0 0; } .loop-icon { color: #fff; background: #668bd2; font-size: 15px; } .loop-label { color: #315da9; background: #e7efff; } .loop-progress { display: flex; align-items: center; flex-wrap: wrap; gap: 5px 8px; min-width: 220px; margin-bottom: 4px; color: #315da9; font-size: 10px; letter-spacing: .02em; } .loop-progress small { flex-basis: 100%; color: #71839c; font-size: 10px; } .loop-bar { width: 92px; height: 6px; overflow: hidden; border-radius: 99px; background: #dce6f6; } .loop-bar i { display: block; height: 100%; border-radius: inherit; background: #668bd2; transition: width .2s ease; } .loop-content td { border-top: 0; border-bottom: 0; background: #ffffff; } .loop-content td:first-child { border-left: 3px solid #c8d7f0; } .loop-content td:last-child { border-right: 1px solid #c8d7f0; } .loop-end td { border-bottom: 1px solid #c8d7f0; } .loop-end td:first-child { border-radius: 0 0 0 9px; } .loop-end td:last-child { border-radius: 0 0 9px 0; }
@@ -339,7 +339,7 @@ select { color: var(--runner-ink); }
339
339
  .runner-nav, .inspector { scrollbar-gutter: stable; }
340
340
  .runner-nav .nav-item { white-space: nowrap; }
341
341
  .run-controls { display: grid; gap: 12px; margin-top: 18px; }
342
- .run-settings { display: grid; grid-template-columns: minmax(180px, 2fr) repeat(3, minmax(120px, 1fr)); gap: 8px 12px; }
342
+ .run-settings { display: grid; grid-template-columns: minmax(180px, 2fr) minmax(120px, 1fr); gap: 8px 12px; }
343
343
  .run-settings label { min-width: 0; font-weight: 500; gap: 5px; }
344
344
  .run-settings select { min-width: 0; width: 100%; }
345
345
  .run-actions { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding-bottom: 4px; }
@@ -386,31 +386,6 @@ select { color: var(--runner-ink); }
386
386
  .run-settings { grid-template-columns: repeat(2, minmax(0, 1fr)); }
387
387
  }
388
388
  @media (max-width: 1100px) {
389
- .runner-main {
390
- grid-template-columns: 170px minmax(0, 1fr);
391
- grid-template-rows: max-content max-content;
392
- align-content: start;
393
- overflow-y: auto;
394
- }
395
- .runner-workspace { grid-column: 2; padding: 16px; overflow: visible; }
396
- .runner-nav {
397
- grid-column: 1;
398
- grid-row: 1 / span 2;
399
- position: sticky;
400
- top: 0;
401
- align-self: start;
402
- max-height: 100%;
403
- padding: 14px 8px;
404
- }
405
- .nav-item { gap: 6px; padding-inline: 8px; }
406
- .inspector {
407
- grid-column: 2;
408
- grid-row: 2;
409
- padding: 16px 12px;
410
- overflow: visible;
411
- border-left: 0;
412
- border-top: 1px solid var(--runner-line);
413
- }
414
389
  .input-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
415
390
  .panel-heading .panel-spacer { display: none; }
416
391
  .panel-heading h2 { flex: 1 1 auto; }
@@ -432,6 +407,59 @@ select { color: var(--runner-ink); }
432
407
  .runner-authoring-source .run-settings { max-width: 40rem; }
433
408
  .runner-authoring-source .notice, .runner-authoring-source [role="alert"] { max-width: 80ch; }
434
409
 
410
+ /* Execution and History share the loaded artifact context and live lifecycle. */
411
+ .runner-shell { grid-template-rows: auto auto auto minmax(0, 1fr); }
412
+ .runner-tabs { display: flex; gap: 6px; padding: 8px 16px; border-bottom: 1px solid var(--runner-line); background: var(--runner-chrome); }
413
+ .runner-tabs [role="tab"] { padding: 6px 14px; border: 1px solid transparent; border-radius: 4px; background: transparent; color: var(--runner-ink); font: inherit; cursor: pointer; }
414
+ .runner-tabs [aria-selected="true"] { background: var(--runner-blue); color: var(--runner-primary-label); }
415
+ .runner-tabs [role="tab"]:hover:not([aria-selected="true"]) { background: var(--runner-surface-3); }
416
+ .runner-tabs [role="tab"]:focus-visible { outline: 2px solid var(--runner-blue); outline-offset: 2px; }
417
+ .runner-project-context { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 16px; padding: 10px 16px; background: var(--runner-surface-2); border-bottom: 1px solid var(--runner-line); font-size: 12px; min-width: 0; }
418
+ .runner-project-context .loaded-identity { min-width: 0; overflow-wrap: anywhere; color: var(--runner-muted); }
419
+ .runner-pane-scroll { min-height: 0; min-width: 0; overflow: auto; }
420
+ .runner-pane-scroll:focus-visible { outline: 2px solid var(--runner-blue); outline-offset: -2px; }
421
+ .runner-main.runner-tabbed-main { height: 100%; grid-template-rows: minmax(0, 1fr); }
422
+ .runner-tabbed-main > .runner-workspace { grid-column: 1; grid-row: 1; }
423
+ .runner-tabbed-main > .inspector { grid-column: 3; grid-row: 1; border-left: 0; }
424
+ .inspector-divider { position: relative; grid-column: 2; grid-row: 1; min-height: 0; background: var(--runner-pane-properties); cursor: col-resize; touch-action: none; user-select: none; }
425
+ .inspector-divider::before { content: ''; position: absolute; inset-block: 0; left: 3px; width: 1px; background: var(--runner-divider); }
426
+ .inspector-divider:hover::before, .inspector-divider:focus-visible::before { width: 2px; background: var(--runner-blue); }
427
+ .inspector-divider:focus-visible { outline: 2px solid var(--runner-blue); outline-offset: -2px; }
428
+ .runner-shell [hidden] { display: none !important; }
429
+
430
+ /* Live evidence belongs below execution; History retains its Inspector disclosure. */
431
+ .runner-event-log > summary { cursor: pointer; color: var(--runner-ink); font-size: 13px; font-weight: 600; }
432
+ .runner-event-log .event-log-content { margin-top: 10px; min-width: 0; }
433
+ .runner-event-log .event-log-tools { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
434
+ .runner-event-log .event-search { flex: 1 1 120px; width: auto; max-width: none; }
435
+ .runner-event-log .event-filter { flex: 1 1 110px; min-width: 0; }
436
+ .runner-event-log .event-log-scroll { max-height: 320px; overflow: auto; }
437
+ .runner-event-log .event-log-list { margin: 0; padding: 0; list-style: none; }
438
+ .runner-event-log .event-log-list > li + li { border-top: 1px solid var(--runner-line); }
439
+ .runner-event-log .event-row { display: grid; gap: 4px; width: 100%; min-width: 0; padding: 10px 4px; border: 0; border-radius: 0; background: transparent; color: var(--runner-ink); font: inherit; font-size: 12px; text-align: left; white-space: normal; overflow-wrap: anywhere; cursor: pointer; }
440
+ .runner-event-log .event-row:hover { background: var(--runner-surface-3); }
441
+ .runner-event-log .event-row:focus-visible { outline-offset: -2px; }
442
+ .runner-event-log .event-row-meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 3px 8px; min-width: 0; font-size: 10px; }
443
+ .runner-event-log .event-row-meta time, .runner-event-log .event-state { color: var(--runner-muted); }
444
+ .runner-event-log .event-row-meta code { min-width: 0; }
445
+ .runner-event-log .event-message, .runner-event-log .parallel-event { min-width: 0; }
446
+ .runner-event-log .empty-state { padding: 0; overflow-wrap: anywhere; }
447
+
448
+ .execution-event-log { padding: 12px; }
449
+
450
+ .input-lock-fields { margin: 0; border: 0; min-width: 0; }
451
+
452
+ /* Keep names aligned at each hierarchy depth, including leaves without a toggle. */
453
+ .collapse-spacer { display: inline-block; flex: 0 0 18px; width: 18px; }
454
+ .collapse-toggle { flex: 0 0 18px; }
455
+
456
+ /* Outside the submitted execution scope: retain inspection and focus affordances. */
457
+ .table-scroll tr.outside-scope td,
458
+ .table-scroll tr.outside-scope .hierarchy-name,
459
+ .table-scroll tr.outside-scope .branch-marker,
460
+ .table-scroll tr.outside-scope .kind-label,
461
+ .table-scroll tr.outside-scope .selected-label { color: var(--runner-muted); }
462
+
435
463
  .runner-demo { min-height: 100vh; padding: 24px 32px 34px; box-sizing: border-box; background: #edf2f8; color: #243654; }
436
464
  .runner-demo-title { display: flex; align-items: center; justify-content: space-between; max-width: 1420px; margin: 0 auto 24px; }
437
465
  .runner-demo-title div { display: flex; align-items: baseline; gap: 14px; }