@ansible-flow/core 0.85.0 → 0.87.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 (96) hide show
  1. package/README.md +1 -1
  2. package/dist/ai/describe.js +4 -3
  3. package/dist/ai/handlers.js +17 -16
  4. package/dist/ai/handlers.js.map +1 -1
  5. package/dist/ai/ops.js +5 -4
  6. package/dist/ai/scenarios.js +9 -7
  7. package/dist/awx/import.js +6 -5
  8. package/dist/catalog/draft.d.ts +2 -0
  9. package/dist/catalog/draft.js +23 -4
  10. package/dist/catalog/draft.js.map +2 -2
  11. package/dist/chunks/{chunk-BXHI5EQM.js → chunk-2DT5DOSO.js} +43 -1
  12. package/dist/chunks/chunk-2DT5DOSO.js.map +7 -0
  13. package/dist/chunks/{chunk-CXVJWFGT.js → chunk-2MJKBPGG.js} +2 -2
  14. package/dist/chunks/{chunk-JTWR3TGG.js → chunk-2P3JEHLH.js} +4 -4
  15. package/dist/chunks/{chunk-6M3OG3E4.js → chunk-3Z4WABFK.js} +6 -6
  16. package/dist/chunks/{chunk-ZAYNYPCX.js → chunk-ARA3VJR2.js} +2 -2
  17. package/dist/chunks/{chunk-2HMLC2AO.js → chunk-BNMW6KWK.js} +6 -6
  18. package/dist/chunks/{chunk-CM23ODBB.js → chunk-DL4LYODQ.js} +2 -2
  19. package/dist/chunks/chunk-FIKPXL6E.js +23 -0
  20. package/dist/chunks/chunk-FIKPXL6E.js.map +7 -0
  21. package/dist/chunks/{chunk-ABYJBONR.js → chunk-FMCBTYUM.js} +3 -3
  22. package/dist/chunks/{chunk-J7KCGVHU.js → chunk-HPRG2672.js} +2 -2
  23. package/dist/chunks/{chunk-V2SPY2EI.js → chunk-IXW7A4M7.js} +2 -2
  24. package/dist/chunks/{chunk-22D2NC2L.js → chunk-IZJPLWDY.js} +5 -5
  25. package/dist/chunks/{chunk-MZ6IJWB2.js → chunk-KZALUEFT.js} +2 -2
  26. package/dist/chunks/{chunk-XOPGOWNQ.js → chunk-O5Y3AZ4X.js} +1 -1
  27. package/dist/chunks/chunk-O5Y3AZ4X.js.map +7 -0
  28. package/dist/chunks/{chunk-2QQC4IZ7.js → chunk-PNLY5IWM.js} +8 -8
  29. package/dist/chunks/chunk-PNLY5IWM.js.map +7 -0
  30. package/dist/chunks/{chunk-T5UB4MBB.js → chunk-TOTSB4HG.js} +41 -1
  31. package/dist/chunks/chunk-TOTSB4HG.js.map +7 -0
  32. package/dist/chunks/{chunk-7GLSXIZ3.js → chunk-W2CSOAIB.js} +2 -2
  33. package/dist/chunks/{chunk-UXIXXEIW.js → chunk-WSARMPYU.js} +2 -2
  34. package/dist/engine/bypass.js +4 -2
  35. package/dist/engine/engines.js +6 -4
  36. package/dist/engine/files.js +6 -4
  37. package/dist/engine/optionA.js +5 -3
  38. package/dist/engine/partial.js +3 -1
  39. package/dist/engine/partial.js.map +1 -1
  40. package/dist/engine/preview.js +6 -4
  41. package/dist/engine/preview.js.map +1 -1
  42. package/dist/engine/writePlan.js +9 -8
  43. package/dist/flow/commands.d.ts +10 -0
  44. package/dist/flow/commands.js +3 -1
  45. package/dist/flow/facts.d.ts +6 -0
  46. package/dist/flow/facts.js +13 -0
  47. package/dist/flow/facts.js.map +7 -0
  48. package/dist/flow/merge.d.ts +27 -0
  49. package/dist/flow/merge.js +422 -0
  50. package/dist/flow/merge.js.map +7 -0
  51. package/dist/flow/mergeText.d.ts +3 -0
  52. package/dist/flow/mergeText.js +71 -0
  53. package/dist/flow/mergeText.js.map +7 -0
  54. package/dist/flow/save.js +3 -1
  55. package/dist/flow/save.js.map +1 -1
  56. package/dist/flow/validate.js +3 -2
  57. package/dist/flow/valueText.d.ts +6 -0
  58. package/dist/flow/valueText.js +56 -0
  59. package/dist/flow/valueText.js.map +7 -0
  60. package/dist/import/outline.js +6 -5
  61. package/dist/import/playbook.js +5 -4
  62. package/dist/lens/caption.js +1 -1
  63. package/dist/lens/data.js +3 -1
  64. package/dist/lens/index.js +6 -4
  65. package/dist/lens/index.js.map +1 -1
  66. package/dist/lens/types.d.ts +2 -0
  67. package/dist/lens/types.js +1 -1
  68. package/dist/messageCheck.js +4 -0
  69. package/dist/messageCheck.js.map +2 -2
  70. package/dist/protocol.d.ts +45 -0
  71. package/dist/scenario/live.js +7 -5
  72. package/dist/scenario/simulate.js +6 -4
  73. package/dist/view/flowFacts.js +9 -8
  74. package/dist/view/flowFacts.js.map +1 -1
  75. package/dist/view/jinjaComplete.js +3 -3
  76. package/dist/view/serverChange.d.ts +23 -0
  77. package/dist/view/serverChange.js +48 -0
  78. package/dist/view/serverChange.js.map +7 -0
  79. package/package.json +1 -1
  80. package/dist/chunks/chunk-2QQC4IZ7.js.map +0 -7
  81. package/dist/chunks/chunk-BXHI5EQM.js.map +0 -7
  82. package/dist/chunks/chunk-T5UB4MBB.js.map +0 -7
  83. package/dist/chunks/chunk-XOPGOWNQ.js.map +0 -7
  84. /package/dist/chunks/{chunk-CXVJWFGT.js.map → chunk-2MJKBPGG.js.map} +0 -0
  85. /package/dist/chunks/{chunk-JTWR3TGG.js.map → chunk-2P3JEHLH.js.map} +0 -0
  86. /package/dist/chunks/{chunk-6M3OG3E4.js.map → chunk-3Z4WABFK.js.map} +0 -0
  87. /package/dist/chunks/{chunk-ZAYNYPCX.js.map → chunk-ARA3VJR2.js.map} +0 -0
  88. /package/dist/chunks/{chunk-2HMLC2AO.js.map → chunk-BNMW6KWK.js.map} +0 -0
  89. /package/dist/chunks/{chunk-CM23ODBB.js.map → chunk-DL4LYODQ.js.map} +0 -0
  90. /package/dist/chunks/{chunk-ABYJBONR.js.map → chunk-FMCBTYUM.js.map} +0 -0
  91. /package/dist/chunks/{chunk-J7KCGVHU.js.map → chunk-HPRG2672.js.map} +0 -0
  92. /package/dist/chunks/{chunk-V2SPY2EI.js.map → chunk-IXW7A4M7.js.map} +0 -0
  93. /package/dist/chunks/{chunk-22D2NC2L.js.map → chunk-IZJPLWDY.js.map} +0 -0
  94. /package/dist/chunks/{chunk-MZ6IJWB2.js.map → chunk-KZALUEFT.js.map} +0 -0
  95. /package/dist/chunks/{chunk-7GLSXIZ3.js.map → chunk-W2CSOAIB.js.map} +0 -0
  96. /package/dist/chunks/{chunk-UXIXXEIW.js.map → chunk-WSARMPYU.js.map} +0 -0
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-TH6ICGA5.js";
8
8
  import {
9
9
  optionA
10
- } from "./chunk-CXVJWFGT.js";
10
+ } from "./chunk-2MJKBPGG.js";
11
11
  import {
12
12
  resolvePattern
13
13
  } from "./chunk-LPBLGBDT.js";
@@ -280,4 +280,4 @@ export {
280
280
  simulateRun,
281
281
  simulateScenario
282
282
  };
283
- //# sourceMappingURL=chunk-7GLSXIZ3.js.map
283
+ //# sourceMappingURL=chunk-W2CSOAIB.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CHECKSUM_PREFIX
3
- } from "./chunk-CXVJWFGT.js";
3
+ } from "./chunk-2MJKBPGG.js";
4
4
  import {
5
5
  checksum
6
6
  } from "./chunk-BAZIS67B.js";
@@ -22,4 +22,4 @@ export {
22
22
  GENERATED_MARK,
23
23
  generatedState
24
24
  };
25
- //# sourceMappingURL=chunk-UXIXXEIW.js.map
25
+ //# sourceMappingURL=chunk-WSARMPYU.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  withoutDisabled
3
- } from "../chunks/chunk-ZAYNYPCX.js";
4
- import "../chunks/chunk-T5UB4MBB.js";
3
+ } from "../chunks/chunk-ARA3VJR2.js";
4
+ import "../chunks/chunk-TOTSB4HG.js";
5
5
  import "../chunks/chunk-SN7X6FYV.js";
6
6
  import "../chunks/chunk-24G5UVEF.js";
7
7
  import "../chunks/chunk-CORZL72E.js";
@@ -11,6 +11,7 @@ import "../chunks/chunk-GK3SD3WE.js";
11
11
  import "../chunks/chunk-H6ARLMMI.js";
12
12
  import "../chunks/chunk-TG3C3GIL.js";
13
13
  import "../chunks/chunk-WISXIO3I.js";
14
+ import "../chunks/chunk-FIKPXL6E.js";
14
15
  import "../chunks/chunk-WG7O3OBV.js";
15
16
  import "../chunks/chunk-NUGJSYSP.js";
16
17
  import "../chunks/chunk-XRGZNPPO.js";
@@ -23,6 +24,7 @@ import "../chunks/chunk-HFHXHOBC.js";
23
24
  import "../chunks/chunk-RKLF3DLT.js";
24
25
  import "../chunks/chunk-GTHXWNCC.js";
25
26
  import "../chunks/chunk-OEQXGULI.js";
27
+ import "../chunks/chunk-T6SZLRDM.js";
26
28
  import "../chunks/chunk-BVEW6MKL.js";
27
29
  import "../chunks/chunk-BUPWGYNF.js";
28
30
  import "../chunks/chunk-WKETMTKT.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  engineFor
3
- } from "../chunks/chunk-J7KCGVHU.js";
4
- import "../chunks/chunk-CXVJWFGT.js";
3
+ } from "../chunks/chunk-HPRG2672.js";
4
+ import "../chunks/chunk-2MJKBPGG.js";
5
5
  import "../chunks/chunk-OEEHAY5X.js";
6
6
  import "../chunks/chunk-LPBLGBDT.js";
7
7
  import "../chunks/chunk-6MLYGFT6.js";
8
- import "../chunks/chunk-ZAYNYPCX.js";
8
+ import "../chunks/chunk-ARA3VJR2.js";
9
9
  import "../chunks/chunk-56VTJ6YF.js";
10
10
  import "../chunks/chunk-BAZIS67B.js";
11
11
  import "../chunks/chunk-X3DEH47B.js";
12
- import "../chunks/chunk-T5UB4MBB.js";
12
+ import "../chunks/chunk-TOTSB4HG.js";
13
13
  import "../chunks/chunk-SN7X6FYV.js";
14
14
  import "../chunks/chunk-24G5UVEF.js";
15
15
  import "../chunks/chunk-CORZL72E.js";
@@ -20,6 +20,7 @@ import "../chunks/chunk-GK3SD3WE.js";
20
20
  import "../chunks/chunk-H6ARLMMI.js";
21
21
  import "../chunks/chunk-TG3C3GIL.js";
22
22
  import "../chunks/chunk-WISXIO3I.js";
23
+ import "../chunks/chunk-FIKPXL6E.js";
23
24
  import "../chunks/chunk-WG7O3OBV.js";
24
25
  import "../chunks/chunk-NUGJSYSP.js";
25
26
  import "../chunks/chunk-XRGZNPPO.js";
@@ -32,6 +33,7 @@ import "../chunks/chunk-HFHXHOBC.js";
32
33
  import "../chunks/chunk-RKLF3DLT.js";
33
34
  import "../chunks/chunk-GTHXWNCC.js";
34
35
  import "../chunks/chunk-OEQXGULI.js";
36
+ import "../chunks/chunk-T6SZLRDM.js";
35
37
  import "../chunks/chunk-AJRIS5VY.js";
36
38
  import "../chunks/chunk-GQ2W4RTY.js";
37
39
  import "../chunks/chunk-BVEW6MKL.js";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  GENERATED_MARK,
3
3
  generatedState
4
- } from "../chunks/chunk-UXIXXEIW.js";
5
- import "../chunks/chunk-CXVJWFGT.js";
4
+ } from "../chunks/chunk-WSARMPYU.js";
5
+ import "../chunks/chunk-2MJKBPGG.js";
6
6
  import "../chunks/chunk-OEEHAY5X.js";
7
7
  import "../chunks/chunk-LPBLGBDT.js";
8
8
  import "../chunks/chunk-6MLYGFT6.js";
9
- import "../chunks/chunk-ZAYNYPCX.js";
9
+ import "../chunks/chunk-ARA3VJR2.js";
10
10
  import "../chunks/chunk-56VTJ6YF.js";
11
11
  import "../chunks/chunk-BAZIS67B.js";
12
12
  import "../chunks/chunk-X3DEH47B.js";
13
- import "../chunks/chunk-T5UB4MBB.js";
13
+ import "../chunks/chunk-TOTSB4HG.js";
14
14
  import "../chunks/chunk-SN7X6FYV.js";
15
15
  import "../chunks/chunk-24G5UVEF.js";
16
16
  import "../chunks/chunk-CORZL72E.js";
@@ -21,6 +21,7 @@ import "../chunks/chunk-GK3SD3WE.js";
21
21
  import "../chunks/chunk-H6ARLMMI.js";
22
22
  import "../chunks/chunk-TG3C3GIL.js";
23
23
  import "../chunks/chunk-WISXIO3I.js";
24
+ import "../chunks/chunk-FIKPXL6E.js";
24
25
  import "../chunks/chunk-WG7O3OBV.js";
25
26
  import "../chunks/chunk-NUGJSYSP.js";
26
27
  import "../chunks/chunk-XRGZNPPO.js";
@@ -33,6 +34,7 @@ import "../chunks/chunk-HFHXHOBC.js";
33
34
  import "../chunks/chunk-RKLF3DLT.js";
34
35
  import "../chunks/chunk-GTHXWNCC.js";
35
36
  import "../chunks/chunk-OEQXGULI.js";
37
+ import "../chunks/chunk-T6SZLRDM.js";
36
38
  import "../chunks/chunk-AJRIS5VY.js";
37
39
  import "../chunks/chunk-GQ2W4RTY.js";
38
40
  import "../chunks/chunk-BVEW6MKL.js";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  CHECKSUM_PREFIX,
3
3
  optionA
4
- } from "../chunks/chunk-CXVJWFGT.js";
4
+ } from "../chunks/chunk-2MJKBPGG.js";
5
5
  import "../chunks/chunk-OEEHAY5X.js";
6
6
  import "../chunks/chunk-LPBLGBDT.js";
7
7
  import "../chunks/chunk-6MLYGFT6.js";
8
- import "../chunks/chunk-ZAYNYPCX.js";
8
+ import "../chunks/chunk-ARA3VJR2.js";
9
9
  import "../chunks/chunk-56VTJ6YF.js";
10
10
  import "../chunks/chunk-BAZIS67B.js";
11
11
  import "../chunks/chunk-X3DEH47B.js";
12
- import "../chunks/chunk-T5UB4MBB.js";
12
+ import "../chunks/chunk-TOTSB4HG.js";
13
13
  import "../chunks/chunk-SN7X6FYV.js";
14
14
  import "../chunks/chunk-24G5UVEF.js";
15
15
  import "../chunks/chunk-CORZL72E.js";
@@ -20,6 +20,7 @@ import "../chunks/chunk-GK3SD3WE.js";
20
20
  import "../chunks/chunk-H6ARLMMI.js";
21
21
  import "../chunks/chunk-TG3C3GIL.js";
22
22
  import "../chunks/chunk-WISXIO3I.js";
23
+ import "../chunks/chunk-FIKPXL6E.js";
23
24
  import "../chunks/chunk-WG7O3OBV.js";
24
25
  import "../chunks/chunk-NUGJSYSP.js";
25
26
  import "../chunks/chunk-XRGZNPPO.js";
@@ -32,6 +33,7 @@ import "../chunks/chunk-HFHXHOBC.js";
32
33
  import "../chunks/chunk-RKLF3DLT.js";
33
34
  import "../chunks/chunk-GTHXWNCC.js";
34
35
  import "../chunks/chunk-OEQXGULI.js";
36
+ import "../chunks/chunk-T6SZLRDM.js";
35
37
  import "../chunks/chunk-AJRIS5VY.js";
36
38
  import "../chunks/chunk-GQ2W4RTY.js";
37
39
  import "../chunks/chunk-BVEW6MKL.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  planCommand
3
- } from "../chunks/chunk-T5UB4MBB.js";
3
+ } from "../chunks/chunk-TOTSB4HG.js";
4
4
  import "../chunks/chunk-SN7X6FYV.js";
5
5
  import "../chunks/chunk-24G5UVEF.js";
6
6
  import "../chunks/chunk-CORZL72E.js";
@@ -12,6 +12,7 @@ import "../chunks/chunk-GK3SD3WE.js";
12
12
  import "../chunks/chunk-H6ARLMMI.js";
13
13
  import "../chunks/chunk-TG3C3GIL.js";
14
14
  import "../chunks/chunk-WISXIO3I.js";
15
+ import "../chunks/chunk-FIKPXL6E.js";
15
16
  import {
16
17
  CONTINUES_ON
17
18
  } from "../chunks/chunk-WG7O3OBV.js";
@@ -28,6 +29,7 @@ import "../chunks/chunk-HFHXHOBC.js";
28
29
  import "../chunks/chunk-RKLF3DLT.js";
29
30
  import "../chunks/chunk-GTHXWNCC.js";
30
31
  import "../chunks/chunk-OEQXGULI.js";
32
+ import "../chunks/chunk-T6SZLRDM.js";
31
33
  import "../chunks/chunk-BVEW6MKL.js";
32
34
  import "../chunks/chunk-BUPWGYNF.js";
33
35
  import "../chunks/chunk-WKETMTKT.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/core/engine/partial.ts"],
4
4
  "sourcesContent": ["// AFD-244: the flow a partial run executes. \"Run from Here\" starts the hosts at a top-level step\n// instead of the flow's first one; \"Run This Step\" runs that step alone. The flow is trimmed the\n// way Delete trims it (no healing: the steps before are not passed through, they are not there):\n// the start node is wired to the chosen step and the steps the run does not reach are taken out.\n// A step that read an output of a step taken out would find no value, so it runs as its TODO\n// stub, and the run says which steps those are. Skeleton runs only (product-owner decision): a\n// real run on part of a flow could act on data that was never made.\nimport { parse, stringify } from 'yaml';\nimport { type FlowCommand, planCommand } from '../flow/commands';\nimport { CONTINUES_ON } from '../flow/heal';\nimport { createIdFactory } from '../flow/ids';\nimport { buildModel, ROOT } from '../flow/model';\nimport type { FlowDocument, FlowNode, Ulid } from '../flow/types';\nimport { descendantIds } from '../flow/walk';\n\nexport interface PartialRun {\n /** The step the hosts start at. */\n node: Ulid;\n /** Run that step alone. */\n only: boolean;\n}\n\nexport interface PartialFlow {\n doc: FlowDocument;\n /** How many top-level steps the run leaves out. */\n skipped: number;\n /** Steps run as stubs because they read a step that is left out, with what they read. */\n stubbed: { node: Ulid; title: string; reads: string[] }[];\n}\n\n/** Why a partial run cannot start at this node, or undefined when it can. */\nexport function partialProblem(doc: FlowDocument, node: Ulid): string | undefined {\n const model = buildModel(doc);\n const entry = model.nodes.get(node);\n if (!entry) return 'No such node';\n if (entry.level !== ROOT) return 'A run starts at a step of the top level: open the top level';\n if (entry.node.type === 'start' || entry.node.type === 'end')\n return 'A run starts at a step, not at a start or end node';\n if (!(model.levels.get(ROOT)?.nodes ?? []).some((n) => n?.type === 'start'))\n return 'The flow has no start node';\n return undefined;\n}\n\n// IDs for the wires made for the run only; the flow file never sees them.\nconst noIds = { newId: createIdFactory() };\n\nexport function partialFlow(doc: FlowDocument, run: PartialRun): PartialFlow | { error: string } {\n const problem = partialProblem(doc, run.node);\n if (problem) return { error: problem };\n const model = buildModel(doc);\n const root = model.levels.get(ROOT);\n const nodes = (root?.nodes ?? []).filter((n): n is FlowNode => !!n?.id);\n const edges = (root?.edges ?? []).filter((e) => !!e?.from && !!e.to);\n const start = nodes.find((n) => n.type === 'start') as FlowNode;\n const target = model.nodes.get(run.node)?.node as FlowNode;\n\n // What the run reaches: the step alone, or everything after it.\n const reached = new Set<Ulid>([run.node]);\n if (!run.only)\n for (const stack = [run.node]; stack.length > 0; ) {\n const at = stack.pop() as Ulid;\n for (const e of edges)\n if (e.from.node === at && !reached.has(e.to.node)) {\n reached.add(e.to.node);\n stack.push(e.to.node);\n }\n }\n const skipped = nodes.filter((n) => n.id !== start.id && n.type !== 'end' && !reached.has(n.id));\n\n const cmds: FlowCommand[] = [];\n // The steps left out go first: the wire that is then made from Start cannot close a loop.\n if (skipped.length > 0) cmds.push({ kind: 'deleteNodes', ids: skipped.map((n) => n.id) });\n let text = stringify(doc);\n try {\n for (const c of cmds) text = planCommand(text, c, noIds).text;\n // Start now leads to the chosen step, and nowhere else.\n for (;;) {\n const now = buildModel(parse(text) as FlowDocument).levels.get(ROOT);\n const out = (now?.edges ?? []).find((e) => e?.from?.node === start.id);\n if (!out) break;\n if (out.to.node === run.node && out.to.port === 'in') break;\n text = planCommand(text, { kind: 'disconnect', edge: out.id }, noIds).text;\n }\n const wired = buildModel(parse(text) as FlowDocument).levels.get(ROOT);\n if (!(wired?.edges ?? []).some((e) => e?.from?.node === start.id)) {\n text = planCommand(\n text,\n {\n kind: 'connect',\n from: { node: start.id, port: 'ok_hosts' },\n to: { node: run.node, port: 'in' },\n },\n noIds,\n ).text;\n }\n // One step alone: its hosts go on to a successful end, when the flow has one.\n if (run.only) {\n const now = buildModel(parse(text) as FlowDocument).levels.get(ROOT);\n const port = CONTINUES_ON[target.type];\n const end = (now?.nodes ?? []).find((n) => n?.type === 'end' && n.outcome !== 'failed');\n const free =\n port && !(now?.edges ?? []).some((e) => e?.from?.node === run.node && e.from.port === port);\n if (port && end && free)\n text = planCommand(\n text,\n { kind: 'connect', from: { node: run.node, port }, to: { node: end.id, port: 'in' } },\n noIds,\n ).text;\n }\n } catch (e) {\n return {\n error: `The flow cannot be trimmed for this run: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n const out = parse(text) as FlowDocument;\n // A field that read a step left out has lost its `from` (deleteNodes): its step runs as a stub.\n const before = model;\n const after = buildModel(out);\n const stubbed: PartialFlow['stubbed'] = [];\n for (const { node } of after.nodes.values()) {\n const was = before.nodes.get(node.id)?.node;\n if (!was) continue;\n const reads = Object.entries(was.inputs ?? {})\n .filter(([name, f]) => !!f?.from && !node.inputs?.[name]?.from)\n .map(([, f]) => f?.from as string);\n if (reads.length === 0) continue;\n // A subflow hands its inputs to the steps inside it: they are stubs too.\n const inside = new Set([node.id, ...descendantIds(node)]);\n let any = false;\n for (const id of inside) {\n const n = after.nodes.get(id)?.node;\n if (n?.impl) {\n delete (n as { impl?: unknown }).impl;\n any = true;\n }\n }\n if (any) stubbed.push({ node: node.id, title: node.title, reads });\n }\n return { doc: out, skipped: skipped.length, stubbed };\n}\n\n/** \"from Validate\" or \"Validate alone\", with what was left out, for the run's panel. */\nexport function partialLine(title: string, only: boolean, flow: PartialFlow): string {\n const what = only ? `Ran \"${title}\" alone` : `Ran from \"${title}\"`;\n const left = flow.skipped\n ? `; ${flow.skipped} step${flow.skipped === 1 ? '' : 's'} before it did not run`\n : '';\n const stubs = flow.stubbed.length\n ? `. As stubs, since they read a step that did not run: ${flow.stubbed.map((s) => s.title).join(', ')}`\n : '';\n return `${what}${left}${stubs}`;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,SAAS,OAAO,iBAAiB;AAwB1B,SAAS,eAAe,KAAmB,MAAgC;AAChF,QAAM,QAAQ,WAAW,GAAG;AAC5B,QAAM,QAAQ,MAAM,MAAM,IAAI,IAAI;AAClC,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,MAAM,UAAU,KAAM,QAAO;AACjC,MAAI,MAAM,KAAK,SAAS,WAAW,MAAM,KAAK,SAAS;AACrD,WAAO;AACT,MAAI,EAAE,MAAM,OAAO,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,OAAO;AACxE,WAAO;AACT,SAAO;AACT;AAGA,IAAM,QAAQ,EAAE,OAAO,gBAAgB,EAAE;AAElC,SAAS,YAAY,KAAmB,KAAkD;AAC/F,QAAM,UAAU,eAAe,KAAK,IAAI,IAAI;AAC5C,MAAI,QAAS,QAAO,EAAE,OAAO,QAAQ;AACrC,QAAM,QAAQ,WAAW,GAAG;AAC5B,QAAM,OAAO,MAAM,OAAO,IAAI,IAAI;AAClC,QAAM,SAAS,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,MAAqB,CAAC,CAAC,GAAG,EAAE;AACtE,QAAM,SAAS,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE;AACnE,QAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO;AAClD,QAAM,SAAS,MAAM,MAAM,IAAI,IAAI,IAAI,GAAG;AAG1C,QAAM,UAAU,oBAAI,IAAU,CAAC,IAAI,IAAI,CAAC;AACxC,MAAI,CAAC,IAAI;AACP,eAAW,QAAQ,CAAC,IAAI,IAAI,GAAG,MAAM,SAAS,KAAK;AACjD,YAAM,KAAK,MAAM,IAAI;AACrB,iBAAW,KAAK;AACd,YAAI,EAAE,KAAK,SAAS,MAAM,CAAC,QAAQ,IAAI,EAAE,GAAG,IAAI,GAAG;AACjD,kBAAQ,IAAI,EAAE,GAAG,IAAI;AACrB,gBAAM,KAAK,EAAE,GAAG,IAAI;AAAA,QACtB;AAAA,IACJ;AACF,QAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,SAAS,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAE/F,QAAM,OAAsB,CAAC;AAE7B,MAAI,QAAQ,SAAS,EAAG,MAAK,KAAK,EAAE,MAAM,eAAe,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;AACxF,MAAI,OAAO,UAAU,GAAG;AACxB,MAAI;AACF,eAAW,KAAK,KAAM,QAAO,YAAY,MAAM,GAAG,KAAK,EAAE;AAEzD,eAAS;AACP,YAAM,MAAM,WAAW,MAAM,IAAI,CAAiB,EAAE,OAAO,IAAI,IAAI;AACnE,YAAMA,QAAO,KAAK,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,SAAS,MAAM,EAAE;AACrE,UAAI,CAACA,KAAK;AACV,UAAIA,KAAI,GAAG,SAAS,IAAI,QAAQA,KAAI,GAAG,SAAS,KAAM;AACtD,aAAO,YAAY,MAAM,EAAE,MAAM,cAAc,MAAMA,KAAI,GAAG,GAAG,KAAK,EAAE;AAAA,IACxE;AACA,UAAM,QAAQ,WAAW,MAAM,IAAI,CAAiB,EAAE,OAAO,IAAI,IAAI;AACrE,QAAI,EAAE,OAAO,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,SAAS,MAAM,EAAE,GAAG;AACjE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM,EAAE,MAAM,MAAM,IAAI,MAAM,WAAW;AAAA,UACzC,IAAI,EAAE,MAAM,IAAI,MAAM,MAAM,KAAK;AAAA,QACnC;AAAA,QACA;AAAA,MACF,EAAE;AAAA,IACJ;AAEA,QAAI,IAAI,MAAM;AACZ,YAAM,MAAM,WAAW,MAAM,IAAI,CAAiB,EAAE,OAAO,IAAI,IAAI;AACnE,YAAM,OAAO,aAAa,OAAO,IAAI;AACrC,YAAM,OAAO,KAAK,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,SAAS,EAAE,YAAY,QAAQ;AACtF,YAAM,OACJ,QAAQ,EAAE,KAAK,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,SAAS,IAAI,QAAQ,EAAE,KAAK,SAAS,IAAI;AAC5F,UAAI,QAAQ,OAAO;AACjB,eAAO;AAAA,UACL;AAAA,UACA,EAAE,MAAM,WAAW,MAAM,EAAE,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,MAAM,KAAK,EAAE;AAAA,UACpF;AAAA,QACF,EAAE;AAAA,IACN;AAAA,EACF,SAAS,GAAG;AACV,WAAO;AAAA,MACL,OAAO,4CAA4C,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC;AAAA,IAC/F;AAAA,EACF;AAEA,QAAM,MAAM,MAAM,IAAI;AAEtB,QAAM,SAAS;AACf,QAAM,QAAQ,WAAW,GAAG;AAC5B,QAAM,UAAkC,CAAC;AACzC,aAAW,EAAE,KAAK,KAAK,MAAM,MAAM,OAAO,GAAG;AAC3C,UAAM,MAAM,OAAO,MAAM,IAAI,KAAK,EAAE,GAAG;AACvC,QAAI,CAAC,IAAK;AACV,UAAM,QAAQ,OAAO,QAAQ,IAAI,UAAU,CAAC,CAAC,EAC1C,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,SAAS,IAAI,GAAG,IAAI,EAC7D,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,IAAc;AACnC,QAAI,MAAM,WAAW,EAAG;AAExB,UAAM,SAAS,oBAAI,IAAI,CAAC,KAAK,IAAI,GAAG,cAAc,IAAI,CAAC,CAAC;AACxD,QAAI,MAAM;AACV,eAAW,MAAM,QAAQ;AACvB,YAAM,IAAI,MAAM,MAAM,IAAI,EAAE,GAAG;AAC/B,UAAI,GAAG,MAAM;AACX,eAAQ,EAAyB;AACjC,cAAM;AAAA,MACR;AAAA,IACF;AACA,QAAI,IAAK,SAAQ,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC;AAAA,EACnE;AACA,SAAO,EAAE,KAAK,KAAK,SAAS,QAAQ,QAAQ,QAAQ;AACtD;AAGO,SAAS,YAAY,OAAe,MAAe,MAA2B;AACnF,QAAM,OAAO,OAAO,QAAQ,KAAK,YAAY,aAAa,KAAK;AAC/D,QAAM,OAAO,KAAK,UACd,KAAK,KAAK,OAAO,QAAQ,KAAK,YAAY,IAAI,KAAK,GAAG,2BACtD;AACJ,QAAM,QAAQ,KAAK,QAAQ,SACvB,wDAAwD,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,KACnG;AACJ,SAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK;AAC/B;",
5
+ "mappings": "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",
6
6
  "names": ["out"]
7
7
  }
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  engineFor
3
- } from "../chunks/chunk-J7KCGVHU.js";
4
- import "../chunks/chunk-CXVJWFGT.js";
3
+ } from "../chunks/chunk-HPRG2672.js";
4
+ import "../chunks/chunk-2MJKBPGG.js";
5
5
  import "../chunks/chunk-OEEHAY5X.js";
6
6
  import "../chunks/chunk-LPBLGBDT.js";
7
7
  import "../chunks/chunk-6MLYGFT6.js";
8
- import "../chunks/chunk-ZAYNYPCX.js";
8
+ import "../chunks/chunk-ARA3VJR2.js";
9
9
  import "../chunks/chunk-56VTJ6YF.js";
10
10
  import "../chunks/chunk-BAZIS67B.js";
11
11
  import "../chunks/chunk-X3DEH47B.js";
12
- import "../chunks/chunk-T5UB4MBB.js";
12
+ import "../chunks/chunk-TOTSB4HG.js";
13
13
  import "../chunks/chunk-SN7X6FYV.js";
14
14
  import "../chunks/chunk-24G5UVEF.js";
15
15
  import "../chunks/chunk-CORZL72E.js";
@@ -20,6 +20,7 @@ import "../chunks/chunk-GK3SD3WE.js";
20
20
  import "../chunks/chunk-H6ARLMMI.js";
21
21
  import "../chunks/chunk-TG3C3GIL.js";
22
22
  import "../chunks/chunk-WISXIO3I.js";
23
+ import "../chunks/chunk-FIKPXL6E.js";
23
24
  import "../chunks/chunk-WG7O3OBV.js";
24
25
  import "../chunks/chunk-NUGJSYSP.js";
25
26
  import "../chunks/chunk-XRGZNPPO.js";
@@ -32,6 +33,7 @@ import "../chunks/chunk-HFHXHOBC.js";
32
33
  import "../chunks/chunk-RKLF3DLT.js";
33
34
  import "../chunks/chunk-GTHXWNCC.js";
34
35
  import "../chunks/chunk-OEQXGULI.js";
36
+ import "../chunks/chunk-T6SZLRDM.js";
35
37
  import "../chunks/chunk-AJRIS5VY.js";
36
38
  import "../chunks/chunk-GQ2W4RTY.js";
37
39
  import "../chunks/chunk-BVEW6MKL.js";
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/core/engine/preview.ts"],
4
4
  "sourcesContent": ["// What a node compiles to, for the inspector (mockup 03), plus the engine's findings for the canvas.\nimport type { FlowDocument, Ulid } from '../flow/types';\nimport type { Finding } from '../flow/validate';\nimport { engineFor } from './engines';\n\nexport interface CodePreview {\n /** Generated play text per node (its own lines from its level file). */\n plays: Record<Ulid, string>;\n /** Engine findings the validator does not already report. */\n findings: Finding[];\n}\n\nexport function codePreview(doc: FlowDocument, source: string): CodePreview {\n const result = engineFor(doc).generate(doc, { source });\n const plays: Record<Ulid, string> = {};\n for (const [node, range] of Object.entries(result.plays)) {\n const file = result.files.find((f) => f.name === range.file);\n if (file) plays[node] = file.text.split('\\n').slice(range.start, range.end).join('\\n');\n }\n return {\n plays,\n findings: result.findings.filter((f) => f.code !== 'codegen-no-targets'),\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,SAAS,YAAY,KAAmB,QAA6B;AAC1E,QAAM,SAAS,UAAU,GAAG,EAAE,SAAS,KAAK,EAAE,OAAO,CAAC;AACtD,QAAM,QAA8B,CAAC;AACrC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACxD,UAAM,OAAO,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,IAAI;AAC3D,QAAI,KAAM,OAAM,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE,MAAM,MAAM,OAAO,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EACvF;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU,OAAO,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,oBAAoB;AAAA,EACzE;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,SAAS,YAAY,KAAmB,QAA6B;AAC1E,QAAM,SAAS,UAAU,GAAG,EAAE,SAAS,KAAK,EAAE,OAAO,CAAC;AACtD,QAAM,QAA8B,CAAC;AACrC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACxD,UAAM,OAAO,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,IAAI;AAC3D,QAAI,KAAM,OAAM,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE,MAAM,MAAM,OAAO,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,EACvF;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU,OAAO,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,oBAAoB;AAAA,EACzE;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,31 +1,31 @@
1
1
  import {
2
2
  planGenerated
3
- } from "../chunks/chunk-JTWR3TGG.js";
4
- import "../chunks/chunk-J7KCGVHU.js";
5
- import "../chunks/chunk-UXIXXEIW.js";
6
- import "../chunks/chunk-CXVJWFGT.js";
3
+ } from "../chunks/chunk-2P3JEHLH.js";
4
+ import "../chunks/chunk-HPRG2672.js";
5
+ import "../chunks/chunk-WSARMPYU.js";
6
+ import "../chunks/chunk-2MJKBPGG.js";
7
7
  import "../chunks/chunk-OEEHAY5X.js";
8
8
  import "../chunks/chunk-LPBLGBDT.js";
9
9
  import "../chunks/chunk-6MLYGFT6.js";
10
- import "../chunks/chunk-ZAYNYPCX.js";
10
+ import "../chunks/chunk-ARA3VJR2.js";
11
11
  import "../chunks/chunk-56VTJ6YF.js";
12
12
  import "../chunks/chunk-BAZIS67B.js";
13
13
  import "../chunks/chunk-X3DEH47B.js";
14
- import "../chunks/chunk-T5UB4MBB.js";
14
+ import "../chunks/chunk-TOTSB4HG.js";
15
15
  import "../chunks/chunk-SN7X6FYV.js";
16
16
  import "../chunks/chunk-24G5UVEF.js";
17
17
  import "../chunks/chunk-CORZL72E.js";
18
18
  import "../chunks/chunk-75QLJHZ5.js";
19
19
  import "../chunks/chunk-LMTTJDCC.js";
20
- import "../chunks/chunk-2QQC4IZ7.js";
20
+ import "../chunks/chunk-PNLY5IWM.js";
21
21
  import "../chunks/chunk-OREXQ4IZ.js";
22
22
  import "../chunks/chunk-KSM4O2XL.js";
23
- import "../chunks/chunk-T6SZLRDM.js";
24
23
  import "../chunks/chunk-7D55CRGU.js";
25
24
  import "../chunks/chunk-GK3SD3WE.js";
26
25
  import "../chunks/chunk-H6ARLMMI.js";
27
26
  import "../chunks/chunk-TG3C3GIL.js";
28
27
  import "../chunks/chunk-WISXIO3I.js";
28
+ import "../chunks/chunk-FIKPXL6E.js";
29
29
  import "../chunks/chunk-WG7O3OBV.js";
30
30
  import "../chunks/chunk-NUGJSYSP.js";
31
31
  import "../chunks/chunk-XRGZNPPO.js";
@@ -38,6 +38,7 @@ import "../chunks/chunk-HFHXHOBC.js";
38
38
  import "../chunks/chunk-RKLF3DLT.js";
39
39
  import "../chunks/chunk-GTHXWNCC.js";
40
40
  import "../chunks/chunk-OEQXGULI.js";
41
+ import "../chunks/chunk-T6SZLRDM.js";
41
42
  import "../chunks/chunk-AJRIS5VY.js";
42
43
  import "../chunks/chunk-GQ2W4RTY.js";
43
44
  import "../chunks/chunk-BVEW6MKL.js";
@@ -152,6 +152,16 @@ export type FlowCommand = {
152
152
  field: ContractField | null;
153
153
  /** New name for the field (rename keeps the definition). */
154
154
  rename?: string;
155
+ }
156
+ /**
157
+ * AFD-287: a fact an earlier step sets (set_fact) read by `reader`: an output of that name on
158
+ * the setter (a fact needs no `from:`) and an input of the reader from it, in one edit.
159
+ */
160
+ | {
161
+ kind: 'useFact';
162
+ reader: Ulid;
163
+ setter: Ulid;
164
+ name: string;
155
165
  } | {
156
166
  kind: 'updateFlow';
157
167
  patch: FlowPatch;
@@ -6,7 +6,7 @@ import {
6
6
  planCommand,
7
7
  shadowedKeys,
8
8
  testedFinding
9
- } from "../chunks/chunk-T5UB4MBB.js";
9
+ } from "../chunks/chunk-TOTSB4HG.js";
10
10
  import "../chunks/chunk-SN7X6FYV.js";
11
11
  import "../chunks/chunk-24G5UVEF.js";
12
12
  import "../chunks/chunk-CORZL72E.js";
@@ -16,6 +16,7 @@ import "../chunks/chunk-GK3SD3WE.js";
16
16
  import "../chunks/chunk-H6ARLMMI.js";
17
17
  import "../chunks/chunk-TG3C3GIL.js";
18
18
  import "../chunks/chunk-WISXIO3I.js";
19
+ import "../chunks/chunk-FIKPXL6E.js";
19
20
  import "../chunks/chunk-WG7O3OBV.js";
20
21
  import "../chunks/chunk-NUGJSYSP.js";
21
22
  import "../chunks/chunk-XRGZNPPO.js";
@@ -28,6 +29,7 @@ import "../chunks/chunk-HFHXHOBC.js";
28
29
  import "../chunks/chunk-RKLF3DLT.js";
29
30
  import "../chunks/chunk-GTHXWNCC.js";
30
31
  import "../chunks/chunk-OEQXGULI.js";
32
+ import "../chunks/chunk-T6SZLRDM.js";
31
33
  import "../chunks/chunk-BVEW6MKL.js";
32
34
  import "../chunks/chunk-BUPWGYNF.js";
33
35
  import "../chunks/chunk-WKETMTKT.js";
@@ -0,0 +1,6 @@
1
+ import type { FlowModel } from './model';
2
+ import type { FlowNode } from './types';
3
+ /** The facts a set_fact step sets: its parameters' keys (`cacheable` is an option). */
4
+ export declare function setFactNames(impl: FlowNode['impl']): string[];
5
+ /** The nearest step that runs before `reader` and sets `name` with set_fact. */
6
+ export declare function factSetter(model: FlowModel, reader: FlowNode, name: string): FlowNode | undefined;
@@ -0,0 +1,13 @@
1
+ import {
2
+ factSetter,
3
+ setFactNames
4
+ } from "../chunks/chunk-FIKPXL6E.js";
5
+ import "../chunks/chunk-T6SZLRDM.js";
6
+ import "../chunks/chunk-BUPWGYNF.js";
7
+ import "../chunks/chunk-WKETMTKT.js";
8
+ import "../chunks/chunk-2OD7UZ7V.js";
9
+ export {
10
+ factSetter,
11
+ setFactNames
12
+ };
13
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ import type { FlowDocument, Ulid } from './types';
2
+ export type MergeSide = 'ours' | 'theirs';
3
+ export interface MergeConflict {
4
+ /** Stable across merges of the same versions: choices are given by it. */
5
+ id: string;
6
+ kind: 'value' | 'removed' | 'wire' | 'format';
7
+ /** Where and what, in words: "Say hello: settings.timeout". */
8
+ label: string;
9
+ node?: Ulid;
10
+ annotation?: Ulid;
11
+ edge?: Ulid;
12
+ /** The field, dotted (`settings.timeout`); absent for a whole step, wire or the format. */
13
+ field?: string;
14
+ base?: unknown;
15
+ ours?: unknown;
16
+ theirs?: unknown;
17
+ }
18
+ export interface FlowMerge {
19
+ /** The merged flow, each conflict as its choice says (ours until chosen). */
20
+ doc: FlowDocument;
21
+ conflicts: MergeConflict[];
22
+ }
23
+ /**
24
+ * Merges what `ours` and `theirs` changed since `base`. `choices` settle conflicts by id (ours
25
+ * when not given). Flows without IDs are matched by the IDs their keys give (Complete IDs).
26
+ */
27
+ export declare function mergeFlows(baseDoc: FlowDocument, oursDoc: FlowDocument, theirsDoc: FlowDocument, choices?: Record<string, MergeSide>): FlowMerge;