@qaick/runner 0.2.0-alpha.10

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 (69) hide show
  1. package/README.md +72 -0
  2. package/package-dist/fixtures/action-catalog-v1.qaick.json +8 -0
  3. package/package-dist/fixtures/checkout-nested.qaick.json +24 -0
  4. package/package-dist/fixtures/checkout-project.qaick.json +30 -0
  5. package/package-dist/fixtures/checkout-regression.qaick.json +16 -0
  6. package/package-dist/fixtures/invalid-binding.qaick.json +13 -0
  7. package/package-dist/fixtures/parallel-project.qaick.json +41 -0
  8. package/package-dist/fixtures/studio-flow-v7.qaick.json +23 -0
  9. package/package-dist/fixtures/studio-project-v7.qaick.json +47 -0
  10. package/package-dist/package.json +80 -0
  11. package/package-dist/src/build-info.d.ts +4 -0
  12. package/package-dist/src/build-info.d.ts.map +1 -0
  13. package/package-dist/src/build-info.js +5 -0
  14. package/package-dist/src/build-info.js.map +1 -0
  15. package/package-dist/src/demo/RunnerWalkthrough.d.ts +3 -0
  16. package/package-dist/src/demo/RunnerWalkthrough.d.ts.map +1 -0
  17. package/package-dist/src/demo/RunnerWalkthrough.js +23 -0
  18. package/package-dist/src/demo/RunnerWalkthrough.js.map +1 -0
  19. package/package-dist/src/demo/runner-walkthrough.css +31 -0
  20. package/package-dist/src/runner/RunnerModule.d.ts +8 -0
  21. package/package-dist/src/runner/RunnerModule.d.ts.map +1 -0
  22. package/package-dist/src/runner/RunnerModule.js +267 -0
  23. package/package-dist/src/runner/RunnerModule.js.map +1 -0
  24. package/package-dist/src/runner/catalog.d.ts +15 -0
  25. package/package-dist/src/runner/catalog.d.ts.map +1 -0
  26. package/package-dist/src/runner/catalog.js +16 -0
  27. package/package-dist/src/runner/catalog.js.map +1 -0
  28. package/package-dist/src/runner/fixture.d.ts +5 -0
  29. package/package-dist/src/runner/fixture.d.ts.map +1 -0
  30. package/package-dist/src/runner/fixture.js +28 -0
  31. package/package-dist/src/runner/fixture.js.map +1 -0
  32. package/package-dist/src/runner/history.d.ts +15 -0
  33. package/package-dist/src/runner/history.d.ts.map +1 -0
  34. package/package-dist/src/runner/history.js +7 -0
  35. package/package-dist/src/runner/history.js.map +1 -0
  36. package/package-dist/src/runner/package-load-error.d.ts +11 -0
  37. package/package-dist/src/runner/package-load-error.d.ts.map +1 -0
  38. package/package-dist/src/runner/package-load-error.js +10 -0
  39. package/package-dist/src/runner/package-load-error.js.map +1 -0
  40. package/package-dist/src/runner/package-loader.d.ts +4 -0
  41. package/package-dist/src/runner/package-loader.d.ts.map +1 -0
  42. package/package-dist/src/runner/package-loader.js +114 -0
  43. package/package-dist/src/runner/package-loader.js.map +1 -0
  44. package/package-dist/src/runner/redaction.d.ts +7 -0
  45. package/package-dist/src/runner/redaction.d.ts.map +1 -0
  46. package/package-dist/src/runner/redaction.js +38 -0
  47. package/package-dist/src/runner/redaction.js.map +1 -0
  48. package/package-dist/src/runner/result-export.d.ts +12 -0
  49. package/package-dist/src/runner/result-export.d.ts.map +1 -0
  50. package/package-dist/src/runner/result-export.js +9 -0
  51. package/package-dist/src/runner/result-export.js.map +1 -0
  52. package/package-dist/src/runner/runtime-client-adapter.d.ts +21 -0
  53. package/package-dist/src/runner/runtime-client-adapter.d.ts.map +1 -0
  54. package/package-dist/src/runner/runtime-client-adapter.js +40 -0
  55. package/package-dist/src/runner/runtime-client-adapter.js.map +1 -0
  56. package/package-dist/src/runner/runtime-client.d.ts +24 -0
  57. package/package-dist/src/runner/runtime-client.d.ts.map +1 -0
  58. package/package-dist/src/runner/runtime-client.js +5 -0
  59. package/package-dist/src/runner/runtime-client.js.map +1 -0
  60. package/package-dist/src/runner/studio-artifact-loader.d.ts +6 -0
  61. package/package-dist/src/runner/studio-artifact-loader.d.ts.map +1 -0
  62. package/package-dist/src/runner/studio-artifact-loader.js +331 -0
  63. package/package-dist/src/runner/studio-artifact-loader.js.map +1 -0
  64. package/package-dist/src/runner/types.d.ts +81 -0
  65. package/package-dist/src/runner/types.d.ts.map +1 -0
  66. package/package-dist/src/runner/types.js +5 -0
  67. package/package-dist/src/runner/types.js.map +1 -0
  68. package/package-dist/styles.css +262 -0
  69. package/package.json +80 -0
@@ -0,0 +1,10 @@
1
+ export class PackageLoadError extends Error {
2
+ category = 'contract-invalid';
3
+ issues;
4
+ constructor(message, issues = []) {
5
+ super(message);
6
+ this.name = 'PackageLoadError';
7
+ this.issues = issues;
8
+ }
9
+ }
10
+ //# sourceMappingURL=package-load-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-load-error.js","sourceRoot":"","sources":["../../../src/runner/package-load-error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,QAAQ,GAAG,kBAA2B,CAAC;IACvC,MAAM,CAAqB;IAEpC,YAAY,OAAe,EAAE,SAA6B,EAAE;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ExecutionPackage } from './types';
2
+ export { PackageLoadError } from './package-load-error';
3
+ export declare function loadExecutionPackage(serialized: string): ExecutionPackage;
4
+ //# sourceMappingURL=package-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-loader.d.ts","sourceRoot":"","sources":["../../../src/runner/package-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA2DzE"}
@@ -0,0 +1,114 @@
1
+ import { RUNNER_PACKAGE_SCHEMA_VERSION, STUDIO_ARTIFACT_SCHEMA_VERSION } from './types';
2
+ import { validateArtifact } from '@qaick/contract';
3
+ import { loadStudioFlowArtifact, loadStudioProjectFile } from './studio-artifact-loader';
4
+ import { PackageLoadError } from './package-load-error';
5
+ export { PackageLoadError } from './package-load-error';
6
+ export function loadExecutionPackage(serialized) {
7
+ let candidate;
8
+ try {
9
+ candidate = JSON.parse(serialized);
10
+ }
11
+ catch {
12
+ throw new PackageLoadError('The selected file is not valid JSON.');
13
+ }
14
+ if (isRecord(candidate) && candidate.artifactKind === 'flow' && candidate.schemaVersion === STUDIO_ARTIFACT_SCHEMA_VERSION) {
15
+ assertStudioContract(candidate);
16
+ return loadStudioFlowArtifact(candidate);
17
+ }
18
+ if (isRecord(candidate) && candidate.schemaVersion === STUDIO_ARTIFACT_SCHEMA_VERSION && isRecord(candidate.project)) {
19
+ assertStudioContract(candidate);
20
+ return loadStudioProjectFile(candidate);
21
+ }
22
+ if (isRecord(candidate) && candidate.artifactKind === 'project' && candidate.schemaVersion === STUDIO_ARTIFACT_SCHEMA_VERSION) {
23
+ throw new PackageLoadError('This Studio Project is a published reference artifact. Load the complete Studio project file or provide the referenced catalog definitions.');
24
+ }
25
+ if (isRecord(candidate) && typeof candidate.schemaVersion === 'number' && candidate.schemaVersion < 7 && isRecord(candidate.project)) {
26
+ throw new PackageLoadError(`This Studio project uses schema version ${candidate.schemaVersion}. Open it in QAick Studio, save the project, and then load the newly saved file in Runner.`);
27
+ }
28
+ if (!isRecord(candidate) || candidate.schemaVersion !== RUNNER_PACKAGE_SCHEMA_VERSION) {
29
+ throw new PackageLoadError(`The package must use QAick schema version ${RUNNER_PACKAGE_SCHEMA_VERSION}.`);
30
+ }
31
+ if (typeof candidate.packageId !== 'string' || candidate.packageId.trim() === '') {
32
+ throw new PackageLoadError('The package id is missing.');
33
+ }
34
+ if (!isRecord(candidate.target) || !isTargetKind(candidate.target.kind) || typeof candidate.target.id !== 'string' || typeof candidate.target.name !== 'string') {
35
+ throw new PackageLoadError('The package target is incomplete.');
36
+ }
37
+ const hasValidFlowSteps = Array.isArray(candidate.steps) && candidate.steps.length > 0 && candidate.steps.every(isStep);
38
+ const hasValidProjectFlows = candidate.target.kind === 'project' && Array.isArray(candidate.flows) && candidate.flows.length > 0 && candidate.flows.every(isFlow);
39
+ if (!hasValidFlowSteps && !hasValidProjectFlows) {
40
+ throw new PackageLoadError('The package must contain at least one valid executable step.');
41
+ }
42
+ if (hasValidFlowSteps)
43
+ validateStepGraph(candidate.steps);
44
+ if (hasValidProjectFlows) {
45
+ for (const flow of candidate.flows)
46
+ validateStepGraph(flow.steps);
47
+ }
48
+ if (!Array.isArray(candidate.definitions)) {
49
+ throw new PackageLoadError('The package definitions are missing.');
50
+ }
51
+ if (!candidate.definitions.every(isDefinition)) {
52
+ throw new PackageLoadError('The package contains an invalid definition.');
53
+ }
54
+ const target = candidate.target;
55
+ const targetDefinition = candidate.definitions.find(definition => isRecord(definition) && definition.id === target.id && definition.kind === target.kind);
56
+ if (!targetDefinition) {
57
+ throw new PackageLoadError('The package target definition is missing.');
58
+ }
59
+ if (candidate.runtimeRequirements !== undefined && (!Array.isArray(candidate.runtimeRequirements) || !candidate.runtimeRequirements.every(value => typeof value === 'string' && value.trim() !== '') || new Set(candidate.runtimeRequirements).size !== candidate.runtimeRequirements.length)) {
60
+ throw new PackageLoadError('The package runtime requirements are invalid.');
61
+ }
62
+ if (candidate.catalogReferences !== undefined && (!Array.isArray(candidate.catalogReferences) || !candidate.catalogReferences.every(isCatalogReference) || new Set(candidate.catalogReferences.map(reference => reference.catalogId)).size !== candidate.catalogReferences.length)) {
63
+ throw new PackageLoadError('The package catalog references are invalid.');
64
+ }
65
+ return candidate;
66
+ }
67
+ function assertStudioContract(candidate) {
68
+ const issues = validateArtifact(candidate);
69
+ if (issues.length > 0) {
70
+ throw new PackageLoadError(`The Studio artifact failed contract validation with ${issues.length} issue${issues.length === 1 ? '' : 's'}.`, issues.map((issue) => ({ path: issue.path, code: issue.code, message: issue.message })));
71
+ }
72
+ }
73
+ function isRecord(value) { return typeof value === 'object' && value !== null; }
74
+ function isTargetKind(value) { return value === 'flow' || value === 'project'; }
75
+ function isStep(value) {
76
+ return isRecord(value) && typeof value.id === 'string' && typeof value.name === 'string' && typeof value.action === 'string' && isRecord(value.output)
77
+ && (value.dependsOn === undefined || Array.isArray(value.dependsOn) && value.dependsOn.every(dependency => typeof dependency === 'string'))
78
+ && (value.children === undefined || Array.isArray(value.children) && value.children.length > 0 && value.children.every(isStep))
79
+ && (value.retry === undefined || isRecord(value.retry) && typeof value.retry.maxAttempts === 'number' && value.retry.maxAttempts >= 1)
80
+ && (value.control === undefined || isRecord(value.control) && (value.control.type === 'sequence' || value.control.type === 'repeat' || value.control.type === 'condition' || value.control.type === 'branch' || value.control.type === 'parallel')
81
+ && (value.control.iterations === undefined || typeof value.control.iterations === 'number' && Number.isInteger(value.control.iterations) && value.control.iterations >= 1)
82
+ && (value.control.condition === undefined || typeof value.control.condition === 'boolean' || isCondition(value.control.condition))
83
+ && (value.control.branches === undefined || Array.isArray(value.control.branches) && value.control.branches.length > 0 && value.control.branches.every(branch => isRecord(branch) && typeof branch.id === 'string' && isCondition(branch.condition) && Array.isArray(branch.children) && branch.children.length > 0 && branch.children.every(isStep)))
84
+ && (value.control.join === undefined || value.control.join === 'all' || value.control.join === 'first')
85
+ && (value.control.merge === undefined || value.control.merge === 'collect' || value.control.merge === 'first' || value.control.merge === 'last')
86
+ && (value.control.mergeBindings === undefined || isRecord(value.control.mergeBindings) && Object.entries(value.control.mergeBindings).every(([name, source]) => name.trim() !== '' && typeof source === 'string' && /^[^.]+\.[^.]+$/.test(source)))
87
+ && (value.control.durationMs === undefined || typeof value.control.durationMs === 'number' && value.control.durationMs >= 0)
88
+ && (value.control.iterationDelayMs === undefined || typeof value.control.iterationDelayMs === 'number' && value.control.iterationDelayMs >= 0));
89
+ }
90
+ function isFlow(value) { return isRecord(value) && typeof value.id === 'string' && typeof value.name === 'string' && Array.isArray(value.steps) && value.steps.length > 0 && value.steps.every(isStep); }
91
+ function isDefinition(value) { return isRecord(value) && typeof value.id === 'string' && typeof value.name === 'string' && (value.kind === 'action' || value.kind === 'flow' || value.kind === 'project'); }
92
+ function isCatalogReference(value) { return isRecord(value) && typeof value.catalogId === 'string' && (value.source === 'embedded' || value.source === 'remote') && (value.uri === undefined || typeof value.uri === 'string') && (value.integrity === undefined || typeof value.integrity === 'string'); }
93
+ function validateStepGraph(steps) {
94
+ const ids = new Set();
95
+ const dependencies = [];
96
+ const collect = (nested) => {
97
+ for (const step of nested) {
98
+ if (ids.has(step.id))
99
+ throw new PackageLoadError(`The package contains duplicate step id ${step.id}.`);
100
+ ids.add(step.id);
101
+ dependencies.push({ id: step.id, dependsOn: step.dependsOn ?? [] });
102
+ if (step.control?.branches)
103
+ step.control.branches.forEach(branch => collect(branch.children));
104
+ else if (step.children)
105
+ collect(step.children);
106
+ }
107
+ };
108
+ collect(steps);
109
+ const missing = dependencies.flatMap(item => item.dependsOn.map(dependency => ({ step: item.id, dependency }))).find(item => !ids.has(item.dependency));
110
+ if (missing)
111
+ throw new PackageLoadError(`Step ${missing.step} depends on missing step ${missing.dependency}.`);
112
+ }
113
+ function isCondition(value) { return (typeof value === 'boolean') || (isRecord(value) && typeof value.binding === 'string' && (value.equals === undefined || ['string', 'number', 'boolean'].includes(typeof value.equals)) && (value.notEquals === undefined || ['string', 'number', 'boolean'].includes(typeof value.notEquals)) && (value.exists === undefined || typeof value.exists === 'boolean')); }
114
+ //# sourceMappingURL=package-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-loader.js","sourceRoot":"","sources":["../../../src/runner/package-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ExecutionEvent, ExecutionResult } from './types';
2
+ export declare function collectSecretValues(...sources: Array<Record<string, unknown> | undefined>): string[];
3
+ export declare function redactValue(value: unknown, secretValues?: string[], key?: string): unknown;
4
+ export declare function redactExecutionResult(result: ExecutionResult, secretValues?: string[]): ExecutionResult;
5
+ export declare function redactExecutionEvent(event: ExecutionEvent, secretValues?: string[]): ExecutionEvent;
6
+ export declare function redactKeyValuePairs(values: string[], secretValues?: string[]): string[];
7
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/runner/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/D,wBAAgB,mBAAmB,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAYpG;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,GAAE,MAAM,EAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAM9F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,eAAe,CAE3G;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,cAAc,CAEvG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAE3F"}
@@ -0,0 +1,38 @@
1
+ const SENSITIVE_KEY = /(authorization|token|secret|password|api[-_]?key|cookie)/i;
2
+ export function collectSecretValues(...sources) {
3
+ const values = new Set();
4
+ const visit = (value, key) => {
5
+ if (SENSITIVE_KEY.test(key ?? '')) {
6
+ if (typeof value === 'string' && value)
7
+ values.add(value);
8
+ return;
9
+ }
10
+ if (Array.isArray(value))
11
+ value.forEach(item => visit(item));
12
+ else if (value && typeof value === 'object')
13
+ Object.entries(value).forEach(([name, child]) => visit(child, name));
14
+ };
15
+ sources.forEach(source => visit(source));
16
+ return [...values].sort((left, right) => right.length - left.length);
17
+ }
18
+ export function redactValue(value, secretValues = [], key) {
19
+ if (key && SENSITIVE_KEY.test(key))
20
+ return '<redacted>';
21
+ if (typeof value === 'string')
22
+ return secretValues.reduce((text, secret) => text.split(secret).join('<redacted>'), value);
23
+ if (Array.isArray(value))
24
+ return value.map(item => redactValue(item, secretValues));
25
+ if (value && typeof value === 'object')
26
+ return Object.fromEntries(Object.entries(value).map(([name, child]) => [name, redactValue(child, secretValues, name)]));
27
+ return value;
28
+ }
29
+ export function redactExecutionResult(result, secretValues = []) {
30
+ return redactValue(result, secretValues);
31
+ }
32
+ export function redactExecutionEvent(event, secretValues = []) {
33
+ return { ...event, message: String(redactValue(event.message, secretValues)) };
34
+ }
35
+ export function redactKeyValuePairs(values, secretValues = []) {
36
+ return values.map((value, index) => index % 2 === 1 ? String(redactValue(value, secretValues, values[index - 1])) : value);
37
+ }
38
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/runner/redaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ExecutionResult } from './types';
2
+ export interface RunnerResultExport {
3
+ runnerResultVersion: 1;
4
+ artifact: {
5
+ packageId: string;
6
+ schemaVersion: number;
7
+ contentHash?: string;
8
+ };
9
+ result: ExecutionResult;
10
+ }
11
+ export declare function createResultExport(value: ExecutionResult, packageId: string, schemaVersion: number, secretValues?: string[]): RunnerResultExport;
12
+ //# sourceMappingURL=result-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-export.d.ts","sourceRoot":"","sources":["../../../src/runner/result-export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,CAAC,CAAC;IACvB,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,kBAAkB,CAMpJ"}
@@ -0,0 +1,9 @@
1
+ import { redactExecutionResult } from './redaction';
2
+ export function createResultExport(value, packageId, schemaVersion, secretValues = []) {
3
+ return {
4
+ runnerResultVersion: 1,
5
+ artifact: { packageId, schemaVersion, ...(value.artifactHash ? { contentHash: value.artifactHash } : {}) },
6
+ result: redactExecutionResult(value, secretValues),
7
+ };
8
+ }
9
+ //# sourceMappingURL=result-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-export.js","sourceRoot":"","sources":["../../../src/runner/result-export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAQpD,MAAM,UAAU,kBAAkB,CAAC,KAAsB,EAAE,SAAiB,EAAE,aAAqB,EAAE,eAAyB,EAAE;IAC9H,OAAO;QACL,mBAAmB,EAAE,CAAC;QACtB,QAAQ,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC1G,MAAM,EAAE,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ExecutionControlState, ExecutionEvent, ExecutionResult, RunnerRequest, RunAccepted } from './types';
2
+ import type { RunnerRuntimeClient } from './runtime-client';
3
+ /** Minimal host bridge implemented by an integrated or standalone composition. */
4
+ export interface RunnerHostRuntimeBridge {
5
+ execute(request: RunnerRequest): Promise<RunAccepted>;
6
+ cancel(requestId: string): Promise<void>;
7
+ control(requestId: string, command: {
8
+ type: 'pause' | 'resume' | 'step' | 'stop';
9
+ } | {
10
+ type: 'stop-after';
11
+ stepId: string;
12
+ }): Promise<void>;
13
+ retryAction(requestId: string, stepId: string, invocationPath?: string[]): Promise<void>;
14
+ retryOperation(requestId: string, stepId: string, invocationPath?: string[]): Promise<void>;
15
+ runFromHere(requestId: string, stepId: string, invocationPath?: string[]): Promise<RunAccepted | undefined>;
16
+ subscribe(requestId: string, listener: (event: ExecutionEvent) => void): () => void;
17
+ getResult(requestId: string): Promise<ExecutionResult>;
18
+ controlState(requestId: string): ExecutionControlState | undefined | Promise<ExecutionControlState | undefined>;
19
+ }
20
+ export declare function createRunnerRuntimeClient(bridge: RunnerHostRuntimeBridge): RunnerRuntimeClient;
21
+ //# sourceMappingURL=runtime-client-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-client-adapter.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime-client-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5I,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAC5G,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACpF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;CACjH;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,uBAAuB,GAAG,mBAAmB,CAe9F"}
@@ -0,0 +1,40 @@
1
+ export function createRunnerRuntimeClient(bridge) {
2
+ return {
3
+ submit: bridge.execute,
4
+ cancel: bridge.cancel,
5
+ events: requestId => eventStream(bridge, requestId),
6
+ result: bridge.getResult,
7
+ pauseExecution: requestId => bridge.control(requestId, { type: 'pause' }),
8
+ resumeExecution: requestId => bridge.control(requestId, { type: 'resume' }),
9
+ stepExecution: requestId => bridge.control(requestId, { type: 'step' }),
10
+ stopAfter: (requestId, stepId) => bridge.control(requestId, { type: 'stop-after', stepId }),
11
+ retryAction: bridge.retryAction,
12
+ retryOperation: bridge.retryOperation,
13
+ runFromHere: bridge.runFromHere,
14
+ controlState: bridge.controlState,
15
+ };
16
+ }
17
+ async function* eventStream(bridge, requestId) {
18
+ const queued = [];
19
+ let resolveNext;
20
+ let terminal = false;
21
+ const unsubscribe = bridge.subscribe(requestId, event => {
22
+ queued.push(event);
23
+ if (event.state === 'completed' || event.state === 'failed' || event.state === 'cancelled')
24
+ terminal = true;
25
+ resolveNext?.();
26
+ resolveNext = undefined;
27
+ });
28
+ try {
29
+ while (queued.length > 0 || !terminal) {
30
+ if (queued.length === 0)
31
+ await new Promise(resolve => { resolveNext = resolve; });
32
+ while (queued.length > 0)
33
+ yield queued.shift();
34
+ }
35
+ }
36
+ finally {
37
+ unsubscribe();
38
+ }
39
+ }
40
+ //# sourceMappingURL=runtime-client-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-client-adapter.js","sourceRoot":"","sources":["../../../src/runner/runtime-client-adapter.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,yBAAyB,CAAC,MAA+B;IACvE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC;QACnD,MAAM,EAAE,MAAM,CAAC,SAAS;QACxB,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACzE,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3E,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACvE,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAC3F,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;AACJ,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,WAAW,CAAC,MAA+B,EAAE,SAAiB;IAC5E,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,WAAqC,CAAC;IAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;QACtD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW;YAAE,QAAQ,GAAG,IAAI,CAAC;QAC5G,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,MAAM,CAAC,KAAK,EAAG,CAAC;QAClD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,WAAW,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { QaickRuntime, RuntimeConfiguration } from '@qaick/runtime';
2
+ import type { ExecutionControlState, ExecutionEvent, ExecutionResult, RunnerEngine, RunAccepted } from './types';
3
+ /**
4
+ * Runner's host boundary. The local implementation is in-process today;
5
+ * Desktop and Server hosts can provide another client without changing Runner policy.
6
+ */
7
+ export type QaickRuntimeClient = QaickRuntime;
8
+ /** Client contract consumed by the shared Runner module. */
9
+ export interface RunnerRuntimeClient {
10
+ submit: RunnerEngine['submit'];
11
+ cancel: RunnerEngine['cancel'];
12
+ events(requestId: string): AsyncIterable<ExecutionEvent>;
13
+ result(requestId: string): Promise<ExecutionResult>;
14
+ pauseExecution(requestId: string): Promise<void>;
15
+ resumeExecution(requestId: string): Promise<void>;
16
+ stepExecution(requestId: string): Promise<void>;
17
+ stopAfter(requestId: string, stepId: string): Promise<void>;
18
+ retryAction(requestId: string, stepId: string, invocationPath?: string[]): Promise<void>;
19
+ retryOperation(requestId: string, stepId: string, invocationPath?: string[]): Promise<void>;
20
+ runFromHere(requestId: string, stepId: string, invocationPath?: string[]): Promise<RunAccepted | undefined>;
21
+ controlState(requestId: string): ExecutionControlState | undefined | Promise<ExecutionControlState | undefined>;
22
+ }
23
+ export declare function createLocalRuntimeClient(configuration?: RuntimeConfiguration): QaickRuntimeClient;
24
+ //# sourceMappingURL=runtime-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-client.d.ts","sourceRoot":"","sources":["../../../src/runner/runtime-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEjH;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAE9C,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACpD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAC5G,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;CACjH;AAED,wBAAgB,wBAAwB,CAAC,aAAa,GAAE,oBAAyB,GAAG,kBAAkB,CAErG"}
@@ -0,0 +1,5 @@
1
+ import { createRuntime } from '@qaick/runtime';
2
+ export function createLocalRuntimeClient(configuration = {}) {
3
+ return createRuntime(configuration);
4
+ }
5
+ //# sourceMappingURL=runtime-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-client.js","sourceRoot":"","sources":["../../../src/runner/runtime-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA0B/C,MAAM,UAAU,wBAAwB,CAAC,gBAAsC,EAAE;IAC/E,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { StudioFlowArtifact, StudioProjectFile } from '@qaick/contract';
2
+ import type { ExecutionPackage } from './types';
3
+ /** Converts the Studio schema 7 Flow envelope into Runner's execution port. */
4
+ export declare function loadStudioFlowArtifact(candidate: StudioFlowArtifact): ExecutionPackage;
5
+ export declare function loadStudioProjectFile(candidate: StudioProjectFile): ExecutionPackage;
6
+ //# sourceMappingURL=studio-artifact-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-artifact-loader.d.ts","sourceRoot":"","sources":["../../../src/runner/studio-artifact-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKlE,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,kBAAkB,GAAG,gBAAgB,CAoBtF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,iBAAiB,GAAG,gBAAgB,CAsCpF"}