@farmslot/protocol 0.38.0 → 0.40.0

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 (183) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/agents/reviewer-context.d.ts +4 -4
  3. package/dist/agents/reviewer-context.d.ts.map +1 -1
  4. package/dist/agents/reviewer-context.js +10 -10
  5. package/dist/agents/reviewer-context.js.map +1 -1
  6. package/dist/agents/roles.d.ts +2 -2
  7. package/dist/agents/roles.d.ts.map +1 -1
  8. package/dist/agents/roles.js +5 -9
  9. package/dist/agents/roles.js.map +1 -1
  10. package/dist/checklist-target.d.ts +6 -6
  11. package/dist/checklist-target.d.ts.map +1 -1
  12. package/dist/checklist-target.js +11 -11
  13. package/dist/checklist-target.js.map +1 -1
  14. package/dist/contracts/acceptance.d.ts +19 -34
  15. package/dist/contracts/acceptance.d.ts.map +1 -1
  16. package/dist/contracts/acceptance.js +11 -156
  17. package/dist/contracts/acceptance.js.map +1 -1
  18. package/dist/contracts/agents.d.ts +7 -2
  19. package/dist/contracts/agents.d.ts.map +1 -1
  20. package/dist/contracts/agents.js +13 -2
  21. package/dist/contracts/agents.js.map +1 -1
  22. package/dist/contracts/analytics.d.ts +2 -2
  23. package/dist/contracts/analytics.d.ts.map +1 -1
  24. package/dist/contracts/backlog.d.ts +16 -7
  25. package/dist/contracts/backlog.d.ts.map +1 -1
  26. package/dist/contracts/backlog.js.map +1 -1
  27. package/dist/contracts/config.d.ts +12 -3
  28. package/dist/contracts/config.d.ts.map +1 -1
  29. package/dist/contracts/config.js +32 -0
  30. package/dist/contracts/config.js.map +1 -1
  31. package/dist/contracts/dispatch.d.ts +7 -4
  32. package/dist/contracts/dispatch.d.ts.map +1 -1
  33. package/dist/contracts/family.d.ts +2 -2
  34. package/dist/contracts/family.d.ts.map +1 -1
  35. package/dist/contracts/index.d.ts +3 -0
  36. package/dist/contracts/index.d.ts.map +1 -1
  37. package/dist/contracts/index.js +3 -0
  38. package/dist/contracts/index.js.map +1 -1
  39. package/dist/contracts/pr-monitoring.d.ts +8 -8
  40. package/dist/contracts/pr-monitoring.d.ts.map +1 -1
  41. package/dist/contracts/pr-rules.d.ts +5 -7
  42. package/dist/contracts/pr-rules.d.ts.map +1 -1
  43. package/dist/contracts/pr-rules.js +4 -6
  44. package/dist/contracts/pr-rules.js.map +1 -1
  45. package/dist/contracts/qa.d.ts +2 -2
  46. package/dist/contracts/qa.d.ts.map +1 -1
  47. package/dist/contracts/qa.js +5 -9
  48. package/dist/contracts/qa.js.map +1 -1
  49. package/dist/contracts/recipe-conformance.d.ts +51 -0
  50. package/dist/contracts/recipe-conformance.d.ts.map +1 -1
  51. package/dist/contracts/recipe-conformance.js +134 -1
  52. package/dist/contracts/recipe-conformance.js.map +1 -1
  53. package/dist/contracts/resources.d.ts +1 -1
  54. package/dist/contracts/resources.d.ts.map +1 -1
  55. package/dist/contracts/resources.js.map +1 -1
  56. package/dist/contracts/reviews.d.ts +19 -3
  57. package/dist/contracts/reviews.d.ts.map +1 -1
  58. package/dist/contracts/reviews.js +2 -2
  59. package/dist/contracts/reviews.js.map +1 -1
  60. package/dist/contracts/run-gate-readiness.d.ts +26 -0
  61. package/dist/contracts/run-gate-readiness.d.ts.map +1 -0
  62. package/dist/contracts/run-gate-readiness.js +5 -0
  63. package/dist/contracts/run-gate-readiness.js.map +1 -0
  64. package/dist/contracts/run-lifecycle-view.d.ts +17 -0
  65. package/dist/contracts/run-lifecycle-view.d.ts.map +1 -0
  66. package/dist/contracts/run-lifecycle-view.js +70 -0
  67. package/dist/contracts/run-lifecycle-view.js.map +1 -0
  68. package/dist/contracts/runner-mobile-keys.d.ts +217 -0
  69. package/dist/contracts/runner-mobile-keys.d.ts.map +1 -0
  70. package/dist/contracts/runner-mobile-keys.js +189 -0
  71. package/dist/contracts/runner-mobile-keys.js.map +1 -0
  72. package/dist/contracts/runs.d.ts +109 -91
  73. package/dist/contracts/runs.d.ts.map +1 -1
  74. package/dist/contracts/runs.js +12 -14
  75. package/dist/contracts/runs.js.map +1 -1
  76. package/dist/contracts/runtime-capabilities.d.ts +2 -0
  77. package/dist/contracts/runtime-capabilities.d.ts.map +1 -1
  78. package/dist/contracts/runtime-capabilities.js.map +1 -1
  79. package/dist/contracts/template-placeholders.d.ts +0 -6
  80. package/dist/contracts/template-placeholders.d.ts.map +1 -1
  81. package/dist/contracts/template-placeholders.js +22 -4
  82. package/dist/contracts/template-placeholders.js.map +1 -1
  83. package/dist/contracts/worker-terminal.d.ts +19 -0
  84. package/dist/contracts/worker-terminal.d.ts.map +1 -1
  85. package/dist/contracts/worker-terminal.js.map +1 -1
  86. package/dist/index.d.ts +4 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +4 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/integrations/pr-monitoring.d.ts.map +1 -1
  91. package/dist/integrations/pr-monitoring.js +9 -3
  92. package/dist/integrations/pr-monitoring.js.map +1 -1
  93. package/dist/integrations/pr-rule-config.d.ts.map +1 -1
  94. package/dist/integrations/pr-rule-config.js +21 -25
  95. package/dist/integrations/pr-rule-config.js.map +1 -1
  96. package/dist/integrations/pr-workflow-defaults.d.ts.map +1 -1
  97. package/dist/integrations/pr-workflow-defaults.js +2 -5
  98. package/dist/integrations/pr-workflow-defaults.js.map +1 -1
  99. package/dist/recipe/artifact.d.ts.map +1 -1
  100. package/dist/recipe/artifact.js +20 -4
  101. package/dist/recipe/artifact.js.map +1 -1
  102. package/dist/recipe/document.d.ts +5 -1
  103. package/dist/recipe/document.d.ts.map +1 -1
  104. package/dist/recipe/document.js +66 -37
  105. package/dist/recipe/document.js.map +1 -1
  106. package/dist/recipe/evidence.d.ts +128 -0
  107. package/dist/recipe/evidence.d.ts.map +1 -0
  108. package/dist/recipe/evidence.js +141 -0
  109. package/dist/recipe/evidence.js.map +1 -0
  110. package/dist/recipe/hud-intent.d.ts +56 -0
  111. package/dist/recipe/hud-intent.d.ts.map +1 -0
  112. package/dist/recipe/hud-intent.js +46 -0
  113. package/dist/recipe/hud-intent.js.map +1 -0
  114. package/dist/recipe/index.d.ts +4 -2
  115. package/dist/recipe/index.d.ts.map +1 -1
  116. package/dist/recipe/index.js +4 -2
  117. package/dist/recipe/index.js.map +1 -1
  118. package/dist/recipe/recording.d.ts +7 -0
  119. package/dist/recipe/recording.d.ts.map +1 -1
  120. package/dist/recipe/recording.js +48 -0
  121. package/dist/recipe/recording.js.map +1 -1
  122. package/dist/recipe/workflow.d.ts.map +1 -1
  123. package/dist/recipe/workflow.js +23 -1
  124. package/dist/recipe/workflow.js.map +1 -1
  125. package/dist/recipes/step-io.d.ts +8 -4
  126. package/dist/recipes/step-io.d.ts.map +1 -1
  127. package/dist/recipes/step-io.js.map +1 -1
  128. package/dist/rpc/copilot-runtime.d.ts +1 -1
  129. package/dist/rpc/copilot-runtime.d.ts.map +1 -1
  130. package/dist/rpc/dispatch.d.ts +10 -6
  131. package/dist/rpc/dispatch.d.ts.map +1 -1
  132. package/dist/rpc/native-session.d.ts +1 -0
  133. package/dist/rpc/native-session.d.ts.map +1 -1
  134. package/dist/rpc/native-session.js.map +1 -1
  135. package/dist/rpc/roadmap.d.ts +2 -0
  136. package/dist/rpc/roadmap.d.ts.map +1 -1
  137. package/dist/rpc/run.d.ts +5 -3
  138. package/dist/rpc/run.d.ts.map +1 -1
  139. package/dist/rpc/run.js.map +1 -1
  140. package/dist/rpc/slot.d.ts +1 -0
  141. package/dist/rpc/slot.d.ts.map +1 -1
  142. package/dist/rpc/tmux.d.ts +10 -0
  143. package/dist/rpc/tmux.d.ts.map +1 -1
  144. package/dist/runs/ci-decision-context.d.ts +40 -0
  145. package/dist/runs/ci-decision-context.d.ts.map +1 -0
  146. package/dist/runs/ci-decision-context.js +129 -0
  147. package/dist/runs/ci-decision-context.js.map +1 -0
  148. package/dist/runs/decision-resolution.d.ts +37 -1
  149. package/dist/runs/decision-resolution.d.ts.map +1 -1
  150. package/dist/runs/decision-resolution.js +44 -1
  151. package/dist/runs/decision-resolution.js.map +1 -1
  152. package/dist/runs/family-iteration-ledger.js +1 -1
  153. package/dist/runs/family-iteration-ledger.js.map +1 -1
  154. package/dist/runs/publish-approval.d.ts +20 -0
  155. package/dist/runs/publish-approval.d.ts.map +1 -0
  156. package/dist/runs/publish-approval.js +29 -0
  157. package/dist/runs/publish-approval.js.map +1 -0
  158. package/dist/runs/review-chain.d.ts +2 -2
  159. package/dist/runs/review-chain.d.ts.map +1 -1
  160. package/dist/runs/review-chain.js +4 -4
  161. package/dist/runs/review-chain.js.map +1 -1
  162. package/dist/runs/review-curation.d.ts +51 -0
  163. package/dist/runs/review-curation.d.ts.map +1 -0
  164. package/dist/runs/review-curation.js +138 -0
  165. package/dist/runs/review-curation.js.map +1 -0
  166. package/dist/runs/review-policy.d.ts +9 -0
  167. package/dist/runs/review-policy.d.ts.map +1 -0
  168. package/dist/runs/review-policy.js +34 -0
  169. package/dist/runs/review-policy.js.map +1 -0
  170. package/dist/runs/review-retries.d.ts +10 -10
  171. package/dist/runs/review-retries.d.ts.map +1 -1
  172. package/dist/runs/review-retries.js +17 -22
  173. package/dist/runs/review-retries.js.map +1 -1
  174. package/dist/runs/slot-resolution.js +1 -1
  175. package/dist/runs/slot-resolution.js.map +1 -1
  176. package/dist/transport/signal.d.ts +3 -3
  177. package/dist/transport/signal.d.ts.map +1 -1
  178. package/dist/version.d.ts +1 -1
  179. package/dist/version.js +1 -1
  180. package/package.json +9 -2
  181. package/schemas/recipe-v1.schema.json +113 -22
  182. package/scripts/acceptance.d.mts +16 -0
  183. package/scripts/acceptance.mjs +233 -0
@@ -1,6 +1,9 @@
1
1
  import { addFinding, createContext, finishResult, hasOwn, isNonEmptyString, isRecord, RECIPE_PROTOCOL_SCHEMA_URL, validateOptionalStringField, } from './common.js';
2
+ import { normalizeRecipeClaimId, validateRecipeClaimDeclarations } from './evidence.js';
3
+ import { RECIPE_INTENT_MAX_LENGTH, RECIPE_INTENT_WARN_LENGTH } from './hud-intent.js';
2
4
  import { getRecipeActionManifestActionNames, validateRecipeActionManifestDocument, } from './manifest.js';
3
5
  import { validateRecipeParams, validateRecipeParamsSchema } from './params.js';
6
+ import { hasRecipeTemplate, replaceRecipeTemplates } from './template.js';
4
7
  import { extractWorkflow, getRecipeActionParams, getRecipeWorkflowActionEntries, validateRecipeActionCases, validateRecipeCalls, validateWorkflowGraph, } from './workflow.js';
5
8
  const RECIPE_FIELDS = new Set([
6
9
  '$schema',
@@ -23,11 +26,11 @@ export function validateResolvedRecipeActionNode(node, manifest, options) {
23
26
  addFinding(ctx, 'error', 'recipe.action_schema_missing', 'node.action', `Action ${node.action} must declare a parameter schema in the runner manifest.`);
24
27
  return finishResult(ctx);
25
28
  }
26
- ctx.findings.push(...validateRecipeParams(getRecipeActionParams(node), contract.schema).findings);
29
+ ctx.findings.push(...validateRecipeParams(getRecipeActionParams(node), contract.schema, options).findings);
27
30
  const adapter = options?.adapter;
28
31
  const adapterSchema = adapter ? contract.adapterSchemas?.[adapter] : undefined;
29
32
  if (adapterSchema) {
30
- const paramsResult = validateRecipeParams(getRecipeActionParams(node), adapterSchema);
33
+ const paramsResult = validateRecipeParams(getRecipeActionParams(node), adapterSchema, options);
31
34
  ctx.findings.push(...paramsResult.findings.map((finding) => ({
32
35
  ...rebaseFinding(finding, 'node'),
33
36
  code: 'recipe.action_params_not_supported_by_adapter',
@@ -87,6 +90,31 @@ export function validateRecipeWithManifest(recipe, manifest, options) {
87
90
  return finishResult(ctx);
88
91
  }
89
92
  function validateOfficialActionRelationships(ctx, action, node, path) {
93
+ if (action === 'watch_logs') {
94
+ const timeout = node.timeout_ms;
95
+ if (timeout !== undefined &&
96
+ !(typeof timeout === 'string' && hasRecipeTemplate(timeout)) &&
97
+ (typeof timeout !== 'number' || !Number.isInteger(timeout) || timeout < 0 || timeout > 60_000)) {
98
+ addFinding(ctx, 'error', 'recipe.invalid_log_window', `${path}.timeout_ms`, 'watch_logs.timeout_ms must be an integer from 0 through 60000.');
99
+ }
100
+ if (typeof timeout === 'number' &&
101
+ timeout > 0 &&
102
+ (typeof node.contains !== 'string' || node.contains.length === 0)) {
103
+ addFinding(ctx, 'error', 'recipe.missing_log_condition', `${path}.contains`, 'A positive watch_logs.timeout_ms requires nonempty contains.');
104
+ }
105
+ if (node.scope !== 'file' && typeof node.path === 'string') {
106
+ let outputDependent = false;
107
+ replaceRecipeTemplates(node.path, (reference, template) => {
108
+ if (reference.source === 'outputs')
109
+ outputDependent = true;
110
+ return template;
111
+ });
112
+ if (outputDependent) {
113
+ addFinding(ctx, 'error', 'recipe.unbound_run_log_path', `${path}.path`, 'Output-derived watch_logs paths require explicit scope=file; run paths must resolve before producers execute.');
114
+ }
115
+ }
116
+ return;
117
+ }
90
118
  if (action !== 'ui.pan' && action !== 'ui.drag')
91
119
  return;
92
120
  const hasPath = hasOwn(node, 'path');
@@ -123,62 +151,63 @@ export function validateRecipeDocument(recipe, options) {
123
151
  const workflow = extractWorkflow(ctx, recipe);
124
152
  if (workflow) {
125
153
  validateWorkflowGraph(ctx, workflow);
154
+ if (options?.lintIntent) {
155
+ for (const [id, node] of Object.entries(workflow.nodes)) {
156
+ if (typeof node.intent !== 'string')
157
+ continue;
158
+ const length = Array.from(node.intent.trim()).length;
159
+ if (length > RECIPE_INTENT_WARN_LENGTH) {
160
+ addFinding(ctx, length > RECIPE_INTENT_MAX_LENGTH ? 'error' : 'warning', 'workflow.intent_too_long', `workflow.nodes.${id}.intent`, `Intent has ${length} characters. Use one plain sentence, preferably at most ${RECIPE_INTENT_WARN_LENGTH} characters, never more than ${RECIPE_INTENT_MAX_LENGTH}.`);
161
+ }
162
+ }
163
+ }
126
164
  validateRecipeCalls(ctx, workflow, {
127
165
  ...(options?.externalRecipeIds ? { externalRecipeIds: options.externalRecipeIds } : {}),
128
166
  skipResolution: options?.skipRecipeCallResolution === true,
129
167
  });
130
- validateProofLinks(ctx, workflow.nodes, proofTargetIds);
168
+ const parentIds = new Set(Array.isArray(recipe.proofTargets)
169
+ ? recipe.proofTargets
170
+ .filter(isRecord)
171
+ .filter((target) => isNonEmptyString(target.parentId))
172
+ .map((target) => normalizeRecipeClaimId(String(target.parentId)))
173
+ : []);
174
+ validateProofLinks(ctx, workflow.nodes, proofTargetIds, parentIds);
131
175
  }
132
176
  return finishResult(ctx);
133
177
  }
134
178
  function validateProofTargets(ctx, value) {
135
- const ids = new Set();
136
- if (!Array.isArray(value)) {
137
- addFinding(ctx, 'error', 'recipe.invalid_proof_targets', 'proofTargets', 'proofTargets must be an array.');
138
- return ids;
139
- }
140
- value.forEach((target, index) => {
141
- const path = `proofTargets[${index}]`;
142
- if (!isRecord(target)) {
143
- addFinding(ctx, 'error', 'recipe.invalid_proof_target', path, `${path} must be an object.`);
144
- return;
145
- }
146
- for (const field of Object.keys(target)) {
147
- if (field !== 'id' && field !== 'claim') {
148
- addFinding(ctx, 'error', 'recipe.unsupported_proof_target_field', `${path}.${field}`, `Proof targets do not support ${field}.`);
149
- }
150
- }
151
- if (!isNonEmptyString(target.id)) {
152
- addFinding(ctx, 'error', 'recipe.invalid_proof_target_id', `${path}.id`, 'Proof target id must be a non-empty string.');
153
- }
154
- else if (ids.has(target.id)) {
155
- addFinding(ctx, 'error', 'recipe.duplicate_proof_target', `${path}.id`, `Proof target ${target.id} is duplicated.`);
156
- }
157
- else {
158
- ids.add(target.id);
159
- }
160
- if (!isNonEmptyString(target.claim)) {
161
- addFinding(ctx, 'error', 'recipe.invalid_proof_target_claim', `${path}.claim`, 'Proof target claim must be a non-empty string.');
162
- }
163
- });
164
- return ids;
179
+ ctx.findings.push(...validateRecipeClaimDeclarations(value).findings);
180
+ return new Set(Array.isArray(value)
181
+ ? value
182
+ .filter(isRecord)
183
+ .filter((target) => isNonEmptyString(target.id))
184
+ .map((target) => normalizeRecipeClaimId(String(target.id)))
185
+ : []);
165
186
  }
166
- function validateProofLinks(ctx, nodes, declared) {
187
+ function validateProofLinks(ctx, nodes, declared, parents) {
167
188
  const covered = new Set();
168
189
  for (const [nodeId, node] of Object.entries(nodes)) {
190
+ if (node.action === 'call' && isRecord(node.claimBindings)) {
191
+ for (const target of Object.values(node.claimBindings)) {
192
+ if (isNonEmptyString(target) && declared.has(normalizeRecipeClaimId(target)))
193
+ covered.add(normalizeRecipeClaimId(target));
194
+ else
195
+ addFinding(ctx, 'error', 'recipe.undeclared_proof_target', `workflow.nodes.${nodeId}.claimBindings`, 'Claim binding must name a registered parent claim.');
196
+ }
197
+ }
169
198
  if (!Array.isArray(node.proves))
170
199
  continue;
171
200
  node.proves.forEach((target, index) => {
172
201
  if (!isNonEmptyString(target))
173
202
  return;
174
- if (!declared.has(target)) {
203
+ if (!declared.has(normalizeRecipeClaimId(target))) {
175
204
  addFinding(ctx, 'error', 'recipe.undeclared_proof_target', `workflow.nodes.${nodeId}.proves[${index}]`, `Proof target ${target} is not declared by recipe.proofTargets.`);
176
205
  }
177
- covered.add(target);
206
+ covered.add(normalizeRecipeClaimId(target));
178
207
  });
179
208
  }
180
209
  for (const target of declared) {
181
- if (!covered.has(target)) {
210
+ if (!covered.has(target) && !parents.has(target)) {
182
211
  addFinding(ctx, 'error', 'recipe.uncovered_proof_target', 'proofTargets', `Proof target ${target} is not covered by any workflow node.`);
183
212
  }
184
213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/recipe/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/recipe/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { type RecipeArtifactPackageInput, type RecipeValidationResult } from './common.js';
2
+ import type { RecipeRecordingTimelineDocument } from './recording.js';
3
+ /** Serialized target identity; resolution remains the provider's responsibility. */
4
+ export type RecipeRecordingTarget = {
5
+ kind: 'cdp-page';
6
+ host: string;
7
+ port: number;
8
+ targetId: string;
9
+ } | {
10
+ kind: 'android-device';
11
+ serial: string;
12
+ } | {
13
+ kind: 'window-id';
14
+ windowId: string;
15
+ } | {
16
+ kind: 'pid';
17
+ pid: number;
18
+ } | {
19
+ kind: 'app-window';
20
+ appName: string;
21
+ windowName: string;
22
+ } | {
23
+ kind: 'simulator';
24
+ device: string;
25
+ };
26
+ /** Canonical serialized identity validation for providers and lease acquisition. */
27
+ export declare function validateRecipeRecordingTarget(value: unknown): RecipeValidationResult;
28
+ /** Shared by SDK admission and the existing lease registry's declared recording binding. */
29
+ export declare function recordingTargetClaimKey(context: {
30
+ backend: string;
31
+ target: RecipeRecordingTarget;
32
+ }): string;
33
+ /** One policy for every recorded-evidence consumer (ADR-062). */
34
+ export declare const EVIDENCE_PADDING_MS = 1000;
35
+ export declare const RECIPE_CLAIM_KINDS: readonly ["acceptance", "qa-case", "qa-check"];
36
+ export declare const RECIPE_ASSERTION_ACTIONS: ReadonlySet<string>;
37
+ /** Declared retries retain failed attempts without turning a later successful occurrence into failure. */
38
+ export declare function hasUnresolvedRecipeFailure(entries: readonly unknown[]): boolean;
39
+ export type RecipeClaimKind = (typeof RECIPE_CLAIM_KINDS)[number];
40
+ export declare const RECIPE_CLAIM_VERDICTS: readonly ["proven", "weak", "missing", "untestable", "failed", "awaiting-review"];
41
+ export type RecipeClaimVerdict = (typeof RECIPE_CLAIM_VERDICTS)[number];
42
+ export type RecipeClaimProofMode = 'state' | 'visual' | 'mixed';
43
+ /** Extends the existing proofTargets declaration; it is not a second registry. */
44
+ export interface RecipeClaimDeclaration {
45
+ id: string;
46
+ claim: string;
47
+ kind?: RecipeClaimKind;
48
+ parentId?: string;
49
+ proofMode?: RecipeClaimProofMode;
50
+ }
51
+ /** Foreign keys only. Labels, intent and playback ranges come from the trace/timeline. */
52
+ export interface EvidenceMomentRef {
53
+ recipeRunId: string;
54
+ videoDigest: string;
55
+ traceIndex: number;
56
+ }
57
+ /** Verdict and checked references, derived once from the executed proof. */
58
+ export interface RecipeClaimEvidence {
59
+ id: string;
60
+ text: string;
61
+ kind: RecipeClaimKind;
62
+ parentId?: string;
63
+ proofMode: RecipeClaimProofMode;
64
+ verdict: RecipeClaimVerdict;
65
+ recipeNodes: string[];
66
+ assertionIndices: number[];
67
+ evidence: string[];
68
+ moments: EvidenceMomentRef[];
69
+ /** Honest timing limitations, independent of the semantic verdict. */
70
+ timing?: 'measured' | 'untimed' | 'outside-recording';
71
+ note?: string;
72
+ }
73
+ export interface RecipeClaimLedger {
74
+ schemaVersion: 2;
75
+ recipeRunId: string;
76
+ criteria: RecipeClaimEvidence[];
77
+ recording: RecordedEvidenceState;
78
+ judgments?: RecipeVisualJudgment[];
79
+ }
80
+ /** A gate reviewer confirms visual meaning against the exact retained moments. */
81
+ export interface RecipeVisualJudgment {
82
+ claimId: string;
83
+ recipeRunId: string;
84
+ verdict: 'confirmed' | 'rejected';
85
+ moments: EvidenceMomentRef[];
86
+ actor: string;
87
+ reason: string;
88
+ judgedAt: string;
89
+ }
90
+ /** Original media in capture order. A restart gap must never be hidden with held frames. */
91
+ export interface RecordingSegmentRef {
92
+ videoPath: string;
93
+ videoDigest: string;
94
+ timelinePath?: string;
95
+ gapBefore?: boolean;
96
+ }
97
+ export interface RecordedEvidencePolicy {
98
+ mode?: 'auto' | 'full-run' | 'off';
99
+ reason?: string;
100
+ maxFps?: number;
101
+ maxSize?: number;
102
+ maxDurationMs?: number;
103
+ maxBytes?: number;
104
+ }
105
+ export declare const DEFAULT_RECORDED_EVIDENCE_POLICY: {
106
+ readonly mode: "auto";
107
+ readonly maxFps: 15;
108
+ readonly maxSize: 1080;
109
+ readonly maxDurationMs: number;
110
+ readonly maxBytes: number;
111
+ };
112
+ export interface RecordedEvidenceState {
113
+ status: 'not-required' | 'explicit-off' | 'recording' | 'finalizing' | 'complete' | 'incomplete' | 'failed';
114
+ reason?: string;
115
+ segments: RecordingSegmentRef[];
116
+ }
117
+ /** Readers supply identities computed from actual bytes, not hashes copied from a manifest. */
118
+ export interface RecordedEvidencePackageInput extends RecipeArtifactPackageInput {
119
+ recipeRunId?: string;
120
+ artifactDigests: Readonly<Record<string, string>>;
121
+ timelines: Readonly<Record<string, RecipeRecordingTimelineDocument>>;
122
+ claims?: RecipeClaimLedger;
123
+ /** Retained execution-input snapshot; task registration comes from this, never the verdict file. */
124
+ invocation?: unknown;
125
+ }
126
+ export declare function normalizeRecipeClaimId(id: string): string;
127
+ export declare function validateRecipeClaimDeclarations(value: unknown): RecipeValidationResult;
128
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/recipe/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { ACCEPTANCE_VERDICTS } from '../contracts/acceptance.js';
2
+ import { addFinding, createContext, finishResult, isNonEmptyString, isRecord, } from './common.js';
3
+ import { digestRecipeDocument } from './digest.js';
4
+ /** Canonical serialized identity validation for providers and lease acquisition. */
5
+ export function validateRecipeRecordingTarget(value) {
6
+ const context = createContext();
7
+ const issue = (path, message) => addFinding(context, 'error', 'recording_target.invalid', path, message);
8
+ if (!isRecord(value)) {
9
+ issue('$', 'Recording target must be an object.');
10
+ return finishResult(context);
11
+ }
12
+ const fields = {
13
+ 'cdp-page': ['host', 'port', 'targetId'],
14
+ 'android-device': ['serial'],
15
+ 'window-id': ['windowId'],
16
+ pid: ['pid'],
17
+ 'app-window': ['appName', 'windowName'],
18
+ simulator: ['device'],
19
+ };
20
+ const required = typeof value.kind === 'string' && Object.hasOwn(fields, value.kind)
21
+ ? fields[value.kind]
22
+ : undefined;
23
+ if (!required) {
24
+ issue('kind', 'Unknown recording target kind.');
25
+ return finishResult(context);
26
+ }
27
+ for (const field of Object.keys(value)) {
28
+ if (field !== 'kind' && !required.includes(field))
29
+ issue(field, 'Unknown recording target field.');
30
+ }
31
+ for (const field of required) {
32
+ if (field === 'pid' || field === 'port') {
33
+ const number = value[field];
34
+ if (typeof number !== 'number' ||
35
+ !Number.isSafeInteger(number) ||
36
+ number < 1 ||
37
+ (field === 'port' && number > 65_535))
38
+ issue(field, `Recording ${field} must be a positive integer${field === 'port' ? ' at most 65535' : ''}.`);
39
+ }
40
+ else if (!isNonEmptyString(value[field])) {
41
+ issue(field, `Recording ${field} must be non-empty.`);
42
+ }
43
+ }
44
+ return finishResult(context);
45
+ }
46
+ /** Shared by SDK admission and the existing lease registry's declared recording binding. */
47
+ export function recordingTargetClaimKey(context) {
48
+ const validation = validateRecipeRecordingTarget(context.target);
49
+ if (!isNonEmptyString(context.backend) || validation.status !== 'valid')
50
+ throw new TypeError(`Invalid recording identity: ${validation.findings.map((finding) => finding.message).join('; ') || 'Backend must be non-empty.'}`);
51
+ return `recording/${context.backend}/${digestRecipeDocument(context.target)}`;
52
+ }
53
+ /** One policy for every recorded-evidence consumer (ADR-062). */
54
+ export const EVIDENCE_PADDING_MS = 1_000;
55
+ export const RECIPE_CLAIM_KINDS = ['acceptance', 'qa-case', 'qa-check'];
56
+ export const RECIPE_ASSERTION_ACTIONS = new Set([
57
+ 'assert_output',
58
+ 'assert_json',
59
+ 'ui.wait_for',
60
+ ]);
61
+ /** Declared retries retain failed attempts without turning a later successful occurrence into failure. */
62
+ export function hasUnresolvedRecipeFailure(entries) {
63
+ return entries.some((entry, index) => {
64
+ if (!isRecord(entry) || entry.ok !== false)
65
+ return false;
66
+ if (!isNonEmptyString(entry.retryGroup) || !RECIPE_ASSERTION_ACTIONS.has(String(entry.action)))
67
+ return true;
68
+ const later = entries
69
+ .slice(index + 1)
70
+ .filter(isRecord)
71
+ .filter((candidate) => candidate.nodeId === entry.nodeId && candidate.retryGroup === entry.retryGroup);
72
+ return later.at(-1)?.ok !== true;
73
+ });
74
+ }
75
+ export const RECIPE_CLAIM_VERDICTS = ACCEPTANCE_VERDICTS;
76
+ export const DEFAULT_RECORDED_EVIDENCE_POLICY = {
77
+ mode: 'auto',
78
+ maxFps: 15,
79
+ maxSize: 1_080,
80
+ maxDurationMs: 120 * 60 * 1_000,
81
+ maxBytes: 1_024 * 1_024 * 1_024,
82
+ };
83
+ export function normalizeRecipeClaimId(id) {
84
+ const match = /^AC-?([1-9][0-9]*)$/iu.exec(id);
85
+ return match ? `AC-${match[1]}` : id;
86
+ }
87
+ export function validateRecipeClaimDeclarations(value) {
88
+ const context = createContext();
89
+ const issue = (path, message) => addFinding(context, 'error', 'recipe.invalid_claim', path, message);
90
+ if (!Array.isArray(value)) {
91
+ issue('proofTargets', 'proofTargets must be an array.');
92
+ return finishResult(context);
93
+ }
94
+ const declarations = new Map();
95
+ for (const [index, target] of value.entries()) {
96
+ const path = `proofTargets[${index}]`;
97
+ if (!isRecord(target)) {
98
+ issue(path, 'A claim must be an object.');
99
+ continue;
100
+ }
101
+ for (const field of Object.keys(target)) {
102
+ if (!['id', 'claim', 'kind', 'parentId', 'proofMode'].includes(field))
103
+ issue(`${path}.${field}`, 'Unknown claim declaration field.');
104
+ }
105
+ if (!isNonEmptyString(target.id) || !isNonEmptyString(target.claim)) {
106
+ issue(path, 'A claim requires a non-empty id and expectation text.');
107
+ continue;
108
+ }
109
+ const id = normalizeRecipeClaimId(target.id);
110
+ if (declarations.has(id))
111
+ issue(`${path}.id`, `Duplicate registered claim ${id}.`);
112
+ else
113
+ declarations.set(id, typeof target.parentId === 'string' ? target.parentId : undefined);
114
+ if (target.kind !== undefined && !RECIPE_CLAIM_KINDS.some((kind) => kind === target.kind))
115
+ issue(`${path}.kind`, 'Unknown claim kind.');
116
+ if (target.parentId !== undefined && !isNonEmptyString(target.parentId))
117
+ issue(`${path}.parentId`, 'Parent claim id must be non-empty.');
118
+ if (target.proofMode !== undefined &&
119
+ !['state', 'visual', 'mixed'].includes(String(target.proofMode)))
120
+ issue(`${path}.proofMode`, 'Unknown claim proof mode.');
121
+ }
122
+ for (const [id, declaredParent] of declarations) {
123
+ const ancestors = new Set([id]);
124
+ let parent = declaredParent ? normalizeRecipeClaimId(declaredParent) : undefined;
125
+ while (parent) {
126
+ if (!declarations.has(parent)) {
127
+ issue(`proofTargets.${id}.parentId`, `Unknown parent claim ${parent}.`);
128
+ break;
129
+ }
130
+ if (ancestors.has(parent)) {
131
+ issue(`proofTargets.${id}.parentId`, 'Claim parent relationship is cyclic.');
132
+ break;
133
+ }
134
+ ancestors.add(parent);
135
+ const nextParent = declarations.get(parent);
136
+ parent = nextParent ? normalizeRecipeClaimId(nextParent) : undefined;
137
+ }
138
+ }
139
+ return finishResult(context);
140
+ }
141
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/recipe/evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /** Display limits apply after font layout, never by cutting authored copy. */
2
+ export declare const HUD_INTENT_MAX_LINES = 2;
3
+ export declare const HUD_INTENT_LINE_HEIGHT = 16;
4
+ export declare const RECIPE_INTENT_WARN_LENGTH = 80;
5
+ export declare const RECIPE_INTENT_MAX_LENGTH = 120;
6
+ export declare const HUD_PANEL_BOUNDS: {
7
+ readonly native: {
8
+ readonly maxWidth: 360;
9
+ readonly maxHeight: 88;
10
+ };
11
+ readonly card: {
12
+ readonly maxWidth: 360;
13
+ readonly maxHeight: 144;
14
+ };
15
+ readonly bar: {
16
+ readonly maxWidth: 960;
17
+ readonly maxHeight: 144;
18
+ };
19
+ };
20
+ export declare function hudIntentDisplay(value: string | number | null | undefined, platform?: keyof typeof HUD_PANEL_BOUNDS): {
21
+ text: string;
22
+ panel: {
23
+ readonly maxWidth: 360;
24
+ readonly maxHeight: 88;
25
+ } | {
26
+ readonly maxWidth: 360;
27
+ readonly maxHeight: 144;
28
+ } | {
29
+ readonly maxWidth: 960;
30
+ readonly maxHeight: 144;
31
+ };
32
+ nativeProps: {
33
+ numberOfLines: number;
34
+ ellipsizeMode: "tail";
35
+ allowFontScaling: boolean;
36
+ };
37
+ nativeStyle: {
38
+ lineHeight: number;
39
+ maxHeight: number;
40
+ fontSize: number;
41
+ };
42
+ webStyle: {
43
+ display: string;
44
+ WebkitBoxOrient: string;
45
+ WebkitLineClamp: string;
46
+ whiteSpace: string;
47
+ overflowWrap: string;
48
+ overflow: string;
49
+ textOverflow: string;
50
+ lineHeight: string;
51
+ maxHeight: string;
52
+ };
53
+ };
54
+ /** Existing metadata/error cap; intent always uses the uncut display model. */
55
+ export declare function hudSecondaryText(value: string | number | null | undefined, max?: number): string;
56
+ //# sourceMappingURL=hud-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud-intent.d.ts","sourceRoot":"","sources":["../../src/recipe/hud-intent.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;CAInB,CAAC;AAEX,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,GAAE,MAAM,OAAO,gBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BjD;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,SAAM,GAAG,MAAM,CAI7F"}
@@ -0,0 +1,46 @@
1
+ /** Display limits apply after font layout, never by cutting authored copy. */
2
+ export const HUD_INTENT_MAX_LINES = 2;
3
+ export const HUD_INTENT_LINE_HEIGHT = 16;
4
+ export const RECIPE_INTENT_WARN_LENGTH = 80;
5
+ export const RECIPE_INTENT_MAX_LENGTH = 120;
6
+ export const HUD_PANEL_BOUNDS = {
7
+ native: { maxWidth: 360, maxHeight: 88 },
8
+ card: { maxWidth: 360, maxHeight: 144 },
9
+ bar: { maxWidth: 960, maxHeight: 144 },
10
+ };
11
+ export function hudIntentDisplay(value, platform = 'card') {
12
+ return {
13
+ text: String(value ?? '')
14
+ .replace(/\s+/gu, ' ')
15
+ .trim(),
16
+ panel: HUD_PANEL_BOUNDS[platform],
17
+ nativeProps: {
18
+ numberOfLines: HUD_INTENT_MAX_LINES,
19
+ ellipsizeMode: 'tail',
20
+ allowFontScaling: false,
21
+ },
22
+ nativeStyle: {
23
+ lineHeight: HUD_INTENT_LINE_HEIGHT,
24
+ maxHeight: HUD_INTENT_LINE_HEIGHT * HUD_INTENT_MAX_LINES,
25
+ fontSize: 12,
26
+ },
27
+ webStyle: {
28
+ display: '-webkit-box',
29
+ WebkitBoxOrient: 'vertical',
30
+ WebkitLineClamp: String(HUD_INTENT_MAX_LINES),
31
+ whiteSpace: 'normal',
32
+ overflowWrap: 'anywhere',
33
+ overflow: 'hidden',
34
+ textOverflow: 'ellipsis',
35
+ lineHeight: `${HUD_INTENT_LINE_HEIGHT}px`,
36
+ maxHeight: `${HUD_INTENT_LINE_HEIGHT * HUD_INTENT_MAX_LINES}px`,
37
+ },
38
+ };
39
+ }
40
+ /** Existing metadata/error cap; intent always uses the uncut display model. */
41
+ export function hudSecondaryText(value, max = 180) {
42
+ const text = hudIntentDisplay(value).text;
43
+ const characters = Array.from(text);
44
+ return characters.length > max ? `${characters.slice(0, max - 1).join('')}…` : text;
45
+ }
46
+ //# sourceMappingURL=hud-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud-intent.js","sourceRoot":"","sources":["../../src/recipe/hud-intent.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AACzC,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IACxC,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE;IACvC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE;CAC9B,CAAC;AAEX,MAAM,UAAU,gBAAgB,CAC9B,KAAyC,EACzC,WAA0C,MAAM;IAEhD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,IAAI,EAAE;QACT,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACjC,WAAW,EAAE;YACX,aAAa,EAAE,oBAAoB;YACnC,aAAa,EAAE,MAAe;YAC9B,gBAAgB,EAAE,KAAK;SACxB;QACD,WAAW,EAAE;YACX,UAAU,EAAE,sBAAsB;YAClC,SAAS,EAAE,sBAAsB,GAAG,oBAAoB;YACxD,QAAQ,EAAE,EAAE;SACb;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,aAAa;YACtB,eAAe,EAAE,UAAU;YAC3B,eAAe,EAAE,MAAM,CAAC,oBAAoB,CAAC;YAC7C,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,UAAU;YACxB,UAAU,EAAE,GAAG,sBAAsB,IAAI;YACzC,SAAS,EAAE,GAAG,sBAAsB,GAAG,oBAAoB,IAAI;SAChE;KACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAyC,EAAE,GAAG,GAAG,GAAG;IACnF,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC"}
@@ -3,11 +3,13 @@ export { BUILT_IN_UI_OBSERVERS, type BuiltInUiObserverRef, isRecord, OFFICIAL_RE
3
3
  export { recipeProtocolSchemaUrlForVersion } from './common.js';
4
4
  export { canonicalRecipeJson, digestRecipeDocument, resolvedRecipeArtifactPath } from './digest.js';
5
5
  export { type RecipeDocumentValidationOptions, validateRecipeDocument, validateRecipeWithManifest, validateResolvedRecipeActionNode, } from './document.js';
6
+ export { DEFAULT_RECORDED_EVIDENCE_POLICY, EVIDENCE_PADDING_MS, type EvidenceMomentRef, hasUnresolvedRecipeFailure, normalizeRecipeClaimId, RECIPE_ASSERTION_ACTIONS, RECIPE_CLAIM_KINDS, RECIPE_CLAIM_VERDICTS, type RecipeClaimDeclaration, type RecipeClaimEvidence, type RecipeClaimKind, type RecipeClaimLedger, type RecipeClaimProofMode, type RecipeClaimVerdict, type RecipeRecordingTarget, type RecipeVisualJudgment, type RecordedEvidencePackageInput, type RecordedEvidencePolicy, type RecordedEvidenceState, type RecordingSegmentRef, recordingTargetClaimKey, validateRecipeClaimDeclarations, validateRecipeRecordingTarget, } from './evidence.js';
7
+ export { HUD_INTENT_LINE_HEIGHT, HUD_INTENT_MAX_LINES, HUD_PANEL_BOUNDS, hudIntentDisplay, hudSecondaryText, RECIPE_INTENT_MAX_LENGTH, RECIPE_INTENT_WARN_LENGTH, } from './hud-intent.js';
6
8
  export { getRecipeActionManifestActionNames, validateRecipeActionManifestDocument, } from './manifest.js';
7
9
  export { applyRecipeParamDefaults, validateRecipeParams, validateRecipeParamsSchema, } from './params.js';
8
- export { type RecipeRecordingMarker, type RecipeRecordingTimelineDocument, type RecipeVideoTiming, validateRecipeRecordingTimelineDocument, } from './recording.js';
10
+ export { type RecipeRecordingMarker, type RecipeRecordingTimelineBinding, type RecipeRecordingTimelineDocument, type RecipeVideoTiming, validateRecipeRecordingTimelineBinding, validateRecipeRecordingTimelineDocument, } from './recording.js';
9
11
  export { CAPTURE_EVIDENCE_INCOMPLETE, CAPTURE_INTERRUPTED_REASON, digestRecipeSuiteScope, RECIPE_SUITE_EVIDENCE_INCOMPLETE_REASONS, RECIPE_SUITE_NON_EXECUTION_REASONS, RECIPE_SUITE_RESULT_SCHEMA_URL, RECIPE_SUITE_SCOPE_SCHEMA_URL, type RecipeSuiteEvidenceIncomplete, type RecipeSuiteEvidenceIncompleteReason, type RecipeSuiteNonExecutionReason, type RecipeSuiteNonExecutionResolution, type RecipeSuitePackageInput, type RecipeSuiteResolution, type RecipeSuiteResultDocument, type RecipeSuiteScopeCase, type RecipeSuiteScopeDocument, type RecipeSuiteVerdictResolution, type RecipeSuiteVerdictStatus, validateRecipeSuitePackage, validateRecipeSuiteResultDocument, validateRecipeSuiteScopeDocument, } from './suite.js';
10
12
  export { findUnsupportedRecipeTemplates, parseRecipeTemplate, type RecipeTemplateReference, type RecipeTemplateSource, replaceRecipeTemplates, } from './template.js';
11
13
  export { DEFAULT_UNTRUSTED_RECIPE_BLOCKED_CAPABILITIES, officialRecipeActionCapabilities, RECIPE_EXECUTION_CAPABILITIES, type RecipeExecutionApproval, type RecipeExecutionCapability, type RecipeExecutionPlan, type RecipePlanNode, type RecipeSourceKind, type RecipeSourceProvenance, type RecipeSourceTrust, type RecipeTrustFailure, } from './trust.js';
12
- export { getRecipeCallRefs, getRecipeWorkflowActions, getRecipeWorkflowNodeIds, isDynamicRecipeRef, normalizeRecipeRef, } from './workflow.js';
14
+ export { getRecipeCallRefs, getRecipeWorkflowActionEntries, getRecipeWorkflowActions, getRecipeWorkflowNodeIds, isDynamicRecipeRef, normalizeRecipeRef, } from './workflow.js';
13
15
  //# sourceMappingURL=index.d.ts.map