@qaick/runner 0.30.1 → 0.30.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.
@@ -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.30.1",
4
+ "version": "0.30.3",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "package-dist",
@@ -58,10 +58,10 @@
58
58
  "publish:release": "npm run check:package && npm publish --tag latest"
59
59
  },
60
60
  "dependencies": {
61
- "@qaick/contract": "0.3.0",
62
- "@qaick/executor": "0.2.1",
63
- "@qaick/http-executor": "0.2.1",
64
- "@qaick/runtime": "0.2.2",
61
+ "@qaick/contract": "0.3.1",
62
+ "@qaick/executor": "0.2.2",
63
+ "@qaick/http-executor": "0.2.2",
64
+ "@qaick/runtime": "0.2.3",
65
65
  "zustand": "^5.0.15"
66
66
  },
67
67
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { RUNNER_UI_VERSION } from '../build-info.js';
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 execution package.', detail: 'Runner loads a durable QAick artifact, lets you choose a target, executes it, and presents structured evidence.' },
6
6
  { id: 'package', title: 'Load and select a package', action: 'Choose a Project or Flow target.', detail: 'The package selector lists the available target. Load package accepts the serialized file produced by Studio.' },
@@ -1,16 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useState } from 'react';
3
- import { checkoutNestedPackage, checkoutPackage, checkoutProjectPackage } from './fixture.js';
4
- import { PackageLoadError } from './package-loader.js';
5
- import { loadTarget, restoreTarget } from './loaded-target.js';
6
- import { PackageCatalog } from './catalog.js';
7
- import { RUNNER_CONTRACT_VERSION } from './types.js';
8
- import { RunnerWalkthrough } from '../demo/RunnerWalkthrough.js';
9
- import { RUNNER_BUILD_LABEL, RUNNER_UI_VERSION } from '../build-info.js';
10
- import { collectSecretValues, redactExecutionEvent, redactExecutionResult, redactKeyValuePairs } from './redaction.js';
11
- import { createResultExport } from './result-export.js';
12
- import { inspectDeclaredInputs, inputDrafts, resolvedArguments } from './invocation-inputs.js';
13
- import { persistRunHistory } from './history.js';
3
+ import { checkoutNestedPackage, checkoutPackage, checkoutProjectPackage } from "./fixture.js";
4
+ import { PackageLoadError } from "./package-loader.js";
5
+ import { loadTarget, restoreTarget } from "./loaded-target.js";
6
+ import { PackageCatalog } from "./catalog.js";
7
+ import { RUNNER_CONTRACT_VERSION } from "./types.js";
8
+ import { RunnerWalkthrough } from "../demo/RunnerWalkthrough.js";
9
+ import { RUNNER_BUILD_LABEL, RUNNER_UI_VERSION } from "../build-info.js";
10
+ import { collectSecretValues, redactExecutionEvent, redactExecutionResult, redactKeyValuePairs } from "./redaction.js";
11
+ import { createResultExport } from "./result-export.js";
12
+ import { inspectDeclaredInputs, inputDrafts, resolvedArguments } from "./invocation-inputs.js";
13
+ import { persistRunHistory } from "./history.js";
14
14
  const HISTORY_KEY = 'qaick-runner.history.v1';
15
15
  const HISTORY_RETENTION_KEY = 'qaick-runner.history-retention.v1';
16
16
  const IMPORTED_PACKAGE_KEY = 'qaick-runner.imported-package.v1';
@@ -243,7 +243,7 @@ function RunnerApp({ client, onExit }) {
243
243
  return undefined; const timer = window.setInterval(() => setClock(Date.now()), 250); return () => window.clearInterval(timer); }, [runState]);
244
244
  useEffect(() => { const navigateIssue = (event) => { const target = event.target; const issue = target.closest('.validation-issue'); const stepId = issue?.dataset.stepId; const eventRow = target.closest('.event-row'); const index = stepId ? displaySteps.findIndex(step => step.id === stepId || step.id.endsWith(`.${stepId}`)) : eventRow ? displaySteps.findIndex(step => eventRow.textContent?.includes(step.name)) : -1; if (index >= 0)
245
245
  setSelectedStep(index); }; document.addEventListener('click', navigateIssue); return () => document.removeEventListener('click', navigateIssue); }, [displaySteps]);
246
- 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" })] }), _jsx("span", { className: "header-spacer" }), _jsx("a", { className: "demo-entry", href: "./examples/qaick-local-http-regression.qaick.json" with { type: '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("a", { className: "demo-entry", href: "?demo", children: "View demo" }), _jsx("button", { className: "about-button", onClick: () => setShowAbout(true), children: "About" }), _jsxs("label", { className: "theme-picker", children: ["Theme", _jsxs("select", { value: theme, onChange: event => setTheme(event.target.value), children: [_jsx("option", { value: "light", children: "Light" }), _jsx("option", { value: "dark", children: "Dark" })] })] })] }), _jsxs("main", { className: "runner-main", children: [_jsxs("nav", { className: "runner-nav", children: [_jsx("p", { className: "nav-label", children: "Workspace" }), _jsx(NavItem, { active: true, icon: "\u25C8", text: "Execution Package" }), _jsx(NavItem, { icon: "\u25A1", text: "Projects" }), _jsx(NavItem, { icon: "\u2318", text: "Flows" }), _jsx(NavItem, { icon: "\u21B6", text: "Run History" }), _jsxs("div", { className: "package-card", children: [_jsx("small", { children: "Loaded package" }), _jsxs("strong", { children: [executionPackage.packageId, ".qaick.json"] }), _jsxs("small", { children: ["Execution v", executionPackage.schemaVersion, " \u00B7 ", executionPackage.definitions.length, " definitions"] })] })] }), _jsxs("section", { className: "runner-workspace", children: [_jsx("div", { className: "eyebrow", children: "EXECUTION PACKAGE" }), _jsx("h1", { children: executionPackage.target.name }), _jsxs("p", { className: "description", children: ["Execute the selected QAick ", executionPackage.target.kind === 'project' ? 'Project' : 'Flow', " and capture structured evidence."] }), _jsxs("div", { className: "run-controls", children: [_jsxs("label", { children: ["Target", _jsx("select", { value: executionPackage.packageId, onChange: event => { const next = packageCatalog.get(event.target.value); setExecutionPackage(next); if (!inspectDeclaredInputs(next).conflict && !inspectDeclaredInputs(next).unresolved)
246
+ 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" })] }), _jsx("span", { className: "header-spacer" }), _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("a", { className: "demo-entry", href: "?demo", children: "View demo" }), _jsx("button", { className: "about-button", onClick: () => setShowAbout(true), children: "About" }), _jsxs("label", { className: "theme-picker", children: ["Theme", _jsxs("select", { value: theme, onChange: event => setTheme(event.target.value), children: [_jsx("option", { value: "light", children: "Light" }), _jsx("option", { value: "dark", children: "Dark" })] })] })] }), _jsxs("main", { className: "runner-main", children: [_jsxs("nav", { className: "runner-nav", children: [_jsx("p", { className: "nav-label", children: "Workspace" }), _jsx(NavItem, { active: true, icon: "\u25C8", text: "Execution Package" }), _jsx(NavItem, { icon: "\u25A1", text: "Projects" }), _jsx(NavItem, { icon: "\u2318", text: "Flows" }), _jsx(NavItem, { icon: "\u21B6", text: "Run History" }), _jsxs("div", { className: "package-card", children: [_jsx("small", { children: "Loaded package" }), _jsxs("strong", { children: [executionPackage.packageId, ".qaick.json"] }), _jsxs("small", { children: ["Execution v", executionPackage.schemaVersion, " \u00B7 ", executionPackage.definitions.length, " definitions"] })] })] }), _jsxs("section", { className: "runner-workspace", children: [_jsx("div", { className: "eyebrow", children: "EXECUTION PACKAGE" }), _jsx("h1", { children: executionPackage.target.name }), _jsxs("p", { className: "description", children: ["Execute the selected QAick ", executionPackage.target.kind === 'project' ? 'Project' : 'Flow', " and capture structured evidence."] }), _jsxs("div", { className: "run-controls", children: [_jsxs("label", { children: ["Target", _jsx("select", { value: executionPackage.packageId, onChange: event => { const next = packageCatalog.get(event.target.value); setExecutionPackage(next); if (!inspectDeclaredInputs(next).conflict && !inspectDeclaredInputs(next).unresolved)
247
247
  setInputEdits(inputDrafts(inspectDeclaredInputs(next).declarations)); setBreakpoints(new Set()); breakpointsRef.current = new Set(); setStopAfterStepId(undefined); setLoadError(undefined); setLoadIssues([]); setRuntimeValues(Object.fromEntries((next.runtimeRequirements ?? []).map(name => [name, '']))); setStepStates((next.target.kind === 'project' ? next.flows?.flatMap(flow => flattenDisplaySteps(flow.steps)) ?? [] : flattenDisplaySteps(next.steps)).map(() => 'pending')); setLoopProgress(loopProgressFor(next.target.kind === 'project' ? next.flows?.flatMap(flow => flow.steps) ?? [] : next.steps)); setSelectedStep(0); setResult(undefined); setEvents([]); setRunState('ready'); }, children: packageCatalog.targets().map(item => _jsx("option", { value: item.packageId, children: item.target.name }, item.packageId)) })] }), _jsxs("label", { children: ["Environment", _jsxs("select", { value: environment, onChange: event => setEnvironment(event.target.value), children: [_jsx("option", { children: "test" }), _jsx("option", { children: "local" }), _jsx("option", { children: "staging" })] })] }), _jsxs("label", { children: ["Timeout", _jsxs("select", { 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("label", { children: ["Run configuration", _jsxs("select", { defaultValue: "Default", children: [_jsx("option", { children: "Default" }), _jsx("option", { children: "Debug" })] })] }), _jsxs("label", { className: "file-button", children: ["Load package", _jsx("input", { type: "file", accept: "application/json,.json", onChange: event => void loadPackage(event.target.files?.[0]) })] }), _jsx("button", { className: "button", onClick: () => setEditingInputs(value => !value), children: editingInputs ? 'Done inputs' : 'Edit inputs' }), _jsx("button", { className: "button primary", onClick: () => void run(), disabled: !!inputBlocker || runState === 'preflighting' || runState === 'running', children: "\u25B6\u00A0 Run" }), _jsx("button", { className: "button dry-run", onClick: () => void run(true), disabled: !!inputBlocker || 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"] })] }), viewingHistoryEntry && _jsxs("div", { className: "history-view-banner", children: ["Viewing stored results \u00B7 ", viewingHistoryEntry] }), 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(entry.declaration.defaultValue) : '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)) })] }), loadError && _jsx("p", { className: "load-error", children: loadError }), loadIssues.length > 0 && _jsx(PreRunValidation, { issues: loadIssues, 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: "Values are sent with the next run" })] }), _jsxs("div", { className: "input-grid", 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) => 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 => 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); }), inputError && _jsx("p", { role: "alert", children: inputError }), (executionPackage.runtimeRequirements ?? []).map(name => _jsx(InputField, { label: `Runtime · ${name}`, value: runtimeValues[name] ?? '', onChange: value => setRuntimeValues(previous => ({ ...previous, [name]: value })) }, name))] })] }), _jsxs("section", { className: "panel", children: [_jsxs("div", { className: "panel-heading", children: [_jsx("h2", { children: "Live Execution" }), _jsx("span", { className: "panel-spacer" }), _jsxs("span", { className: "execution-menu-label", children: ["Right-click a row to manage its breakpoint \u00B7 Selected: ", displaySteps[selectedStep]?.name ?? 'None'] }), _jsxs("span", { className: runState === 'running' ? 'running' : runState === 'failed' ? 'stopped' : 'run-status', children: ["\u25CF ", statusLabel] })] }), hasNestedSteps && _jsxs("div", { className: "hierarchy-hint", children: [_jsx("strong", { children: "Nested execution" }), _jsx("span", { children: "Use \u2212 / + to collapse or expand nested Operations, Control Blocks, and loops." }), _jsx("button", { className: "hierarchy-action", onClick: () => setAllCollapsed(true), children: "Collapse all" }), _jsx("button", { className: "hierarchy-action", onClick: () => setAllCollapsed(false), children: "Expand all" })] }), _jsxs("table", { children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "#" }), _jsx("th", { children: "Step hierarchy" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Start time" }), _jsx("th", { children: "Duration" })] }) }), _jsx("tbody", { children: displaySteps.map((step, index) => { const progress = step.loopTotal ? loopProgress[step.id] ?? { current: 0, total: step.loopTotal } : undefined; const percent = progress ? Math.round(progress.current / progress.total * 100) : 0; const isLoop = Boolean(step.loopTotal); const displayState = displayResults[index]?.state ?? stepStates[index] ?? 'pending'; const isLoopContent = Boolean(step.loopId); const isLoopEnd = isLoopContent && displaySteps[index + 1]?.loopId !== step.loopId; const elapsed = step.loopId && loopStartedAt[step.loopId] ? formatElapsed(clock - loopStartedAt[step.loopId]) : undefined; return _jsxs("tr", { className: `${selectedStep === index ? 'selected ' : ''}${isLoop ? 'loop-row ' : ''}${isLoopContent ? 'loop-content ' : ''}${isLoopEnd ? 'loop-end ' : ''}${step.depth > 0 ? 'nested-row' : 'parent-row'}`, tabIndex: 0, onKeyDown: event => { if (event.key === "ArrowDown") {
248
248
  event.preventDefault();
249
249
  setSelectedStep(Math.min(displaySteps.length - 1, index + 1));
@@ -1,4 +1,4 @@
1
- import { PackageLoadError } from './package-load-error.js';
1
+ import { PackageLoadError } from "./package-load-error.js";
2
2
  import { isApiResponseField } from '@qaick/contract';
3
3
  function actionOutputNames(action) {
4
4
  const declared = Array.isArray(action.outputs) ? action.outputs.filter(isRecord).flatMap(output => typeof output.name === 'string' ? [output.name] : []) : [];
@@ -1,4 +1,4 @@
1
- import { loadTarget } from './loaded-target.js';
1
+ import { loadTarget } from "./loaded-target.js";
2
2
  export class PackageCatalog {
3
3
  provenance = new Map();
4
4
  packages = new Map();
@@ -1,4 +1,4 @@
1
- import { redactExecutionResult } from './redaction.js';
1
+ import { redactExecutionResult } from "./redaction.js";
2
2
  export function persistRunHistory(storage, key, entries, retention, secretValues = []) {
3
3
  const next = entries.slice(0, retention).map(entry => ({ ...entry, result: redactExecutionResult(entry.result, secretValues) }));
4
4
  storage.setItem(key, JSON.stringify(next));
@@ -56,8 +56,10 @@ export function resolvedArguments(declarations, drafts) {
56
56
  const values = Object.create(null);
57
57
  for (const d of declarations) {
58
58
  const draft = drafts[d.name];
59
- if (!draft?.supplied)
59
+ if (!draft?.supplied || draft.text === '') {
60
+ values[d.name] = null;
60
61
  continue;
62
+ }
61
63
  if (d.type === 'string')
62
64
  values[d.name] = draft.text;
63
65
  else if (d.type === 'number') {
@@ -1 +1 @@
1
- {"version":3,"file":"invocation-inputs.js","sourceRoot":"","sources":["../../../src/runner/invocation-inputs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invocation-inputs.js","sourceRoot":"","sources":["../../../src/runner/invocation-inputs.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { migrateArtifact } from '@qaick/contract';
2
- import { loadExecutionPackage } from './package-loader.js';
2
+ import { loadExecutionPackage } from "./package-loader.js";
3
3
  export function loadTarget(serialized) {
4
4
  const value = JSON.parse(serialized);
5
5
  const executionPackage = loadExecutionPackage(serialized);
@@ -1,5 +1,5 @@
1
- import { loadHierarchyExecutionPackage } from './studio-hierarchy-loader.js';
2
- export { PackageLoadError } from './package-load-error.js';
1
+ import { loadHierarchyExecutionPackage } from "./studio-hierarchy-loader.js";
2
+ export { PackageLoadError } from "./package-load-error.js";
3
3
  /** Normal package load preserves authored structural context through canonical lowering. */
4
4
  export const loadExecutionPackage = loadHierarchyExecutionPackage;
5
5
  //# sourceMappingURL=package-loader.js.map
@@ -1,4 +1,4 @@
1
- import { redactExecutionResult } from './redaction.js';
1
+ import { redactExecutionResult } from "./redaction.js";
2
2
  export function createResultExport(value, packageId, schemaVersion, secretValues = [], provenance, executionVersion) {
3
3
  return {
4
4
  runnerResultVersion: 1,
@@ -1,7 +1,7 @@
1
1
  import { createRuntime, InMemoryActionExecutor } from '@qaick/runtime';
2
2
  import { HttpActionExecutor } from '@qaick/http-executor';
3
- import { FetchHttpTransport } from './adapters.js';
4
- import { assertSupportedExecutionContext } from './execution-context.js';
3
+ import { FetchHttpTransport } from "./adapters.js";
4
+ import { assertSupportedExecutionContext } from "./execution-context.js";
5
5
  export function createRunnerRuntimeClient(bridge) {
6
6
  return {
7
7
  submit: async (request) => {
@@ -1,5 +1,5 @@
1
- import { lowerStudioHierarchy } from './studio-hierarchy-loader.js';
2
- export { lowerStudioHierarchy, loadHierarchyExecutionPackage } from './studio-hierarchy-loader.js';
1
+ import { lowerStudioHierarchy } from "./studio-hierarchy-loader.js";
2
+ export { lowerStudioHierarchy, loadHierarchyExecutionPackage } from "./studio-hierarchy-loader.js";
3
3
  export function loadStudioFlowArtifact(artifact) { return lowerStudioHierarchy(artifact); }
4
4
  export function loadStudioProjectFile(artifact) { return lowerStudioHierarchy(artifact); }
5
5
  //# sourceMappingURL=studio-artifact-loader.js.map
@@ -1,6 +1,6 @@
1
1
  import { migrateArtifact, migrateHierarchyBindings, hierarchyOccurrences, orderedRoutineNodes, executionOutputPackagingIssues, normalizeExecutionOutputAlias, validateExecutionPackageV7 } from '@qaick/contract';
2
- import { PackageLoadError } from './package-load-error.js';
3
- import { lowerStudioActionOccurrence, runtimeTemplates } from './action-template-lowering.js';
2
+ import { PackageLoadError } from "./package-load-error.js";
3
+ import { lowerStudioActionOccurrence, runtimeTemplates } from "./action-template-lowering.js";
4
4
  const record = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
5
5
  const key = (a) => JSON.stringify([a.scope, a.segments.map(s => s.kind === 'body' ? ['body'] : [s.kind, s.position])]);
6
6
  const literal = (v) => record(v) && v.type === 'literal' ? v.value : undefined;
package/package.json CHANGED
@@ -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.30.1",
4
+ "version": "0.30.3",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "package-dist",
@@ -58,10 +58,10 @@
58
58
  "publish:release": "npm run check:package && npm publish --tag latest"
59
59
  },
60
60
  "dependencies": {
61
- "@qaick/contract": "0.3.0",
62
- "@qaick/executor": "0.2.1",
63
- "@qaick/http-executor": "0.2.1",
64
- "@qaick/runtime": "0.2.2",
61
+ "@qaick/contract": "0.3.1",
62
+ "@qaick/executor": "0.2.2",
63
+ "@qaick/http-executor": "0.2.2",
64
+ "@qaick/runtime": "0.2.3",
65
65
  "zustand": "^5.0.15"
66
66
  },
67
67
  "peerDependencies": {