@ghchinoy/litflow 0.2.7 → 0.3.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 (158) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/breadboard/data/common.d.ts +35 -0
  3. package/dist/breadboard/engine/loader/capability.d.ts +21 -0
  4. package/dist/breadboard/engine/loader/loader.d.ts +29 -0
  5. package/dist/breadboard/engine/loader/resolve-graph-urls.d.ts +16 -0
  6. package/dist/breadboard/engine/runtime/bubble.d.ts +23 -0
  7. package/dist/breadboard/engine/runtime/graph-based-node-handler.d.ts +16 -0
  8. package/dist/breadboard/engine/runtime/handler.d.ts +27 -0
  9. package/dist/breadboard/engine/runtime/harness/events.d.ts +145 -0
  10. package/dist/breadboard/engine/runtime/harness/local.d.ts +10 -0
  11. package/dist/breadboard/engine/runtime/harness/plan-runner.d.ts +25 -0
  12. package/dist/breadboard/engine/runtime/run/invoke-graph.d.ts +12 -0
  13. package/dist/breadboard/engine/runtime/run/node-invoker.d.ts +12 -0
  14. package/dist/breadboard/engine/runtime/run/run-graph.d.ts +12 -0
  15. package/dist/breadboard/engine/runtime/run.d.ts +29 -0
  16. package/dist/breadboard/engine/runtime/sandbox/capabilities-manager.d.ts +15 -0
  17. package/dist/breadboard/engine/runtime/sandbox/file-system-handler-factory.d.ts +15 -0
  18. package/dist/breadboard/engine/runtime/sandbox/invoke-describer.d.ts +10 -0
  19. package/dist/breadboard/engine/runtime/static/create-plan.d.ts +14 -0
  20. package/dist/breadboard/engine/runtime/static/orchestrator.d.ts +72 -0
  21. package/dist/breadboard/engine/runtime/traversal/index.d.ts +20 -0
  22. package/dist/breadboard/engine/runtime/traversal/iterator.d.ts +12 -0
  23. package/dist/breadboard/engine/runtime/traversal/machine.d.ts +14 -0
  24. package/dist/breadboard/engine/runtime/traversal/representation.d.ts +27 -0
  25. package/dist/breadboard/engine/runtime/traversal/result.d.ts +24 -0
  26. package/dist/breadboard/engine/runtime/traversal/state.d.ts +34 -0
  27. package/dist/breadboard/lit-flow-runner.d.ts +13 -0
  28. package/dist/breadboard/lit-flow-runner.test.d.ts +1 -0
  29. package/dist/breadboard/runner.d.ts +13 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/lit-chiclet.d.ts +9 -0
  32. package/dist/lit-schema-node.d.ts +13 -0
  33. package/dist/lit-schema-node.test.d.ts +1 -0
  34. package/dist/litflow.js +708 -442
  35. package/dist/litflow.js.map +1 -1
  36. package/package.json +18 -4
  37. package/src/breadboard/data/common.ts +450 -0
  38. package/src/breadboard/data/file-system.ts +54 -0
  39. package/src/breadboard/data/inline-all-content.ts +126 -0
  40. package/src/breadboard/data/recent-boards.ts +118 -0
  41. package/src/breadboard/data/save-outputs-as-file.ts +104 -0
  42. package/src/breadboard/engine/add-run-module.ts +168 -0
  43. package/src/breadboard/engine/editor/blank.ts +65 -0
  44. package/src/breadboard/engine/editor/edge.ts +27 -0
  45. package/src/breadboard/engine/editor/events.ts +64 -0
  46. package/src/breadboard/engine/editor/graph.ts +383 -0
  47. package/src/breadboard/engine/editor/history.ts +98 -0
  48. package/src/breadboard/engine/editor/index.ts +8 -0
  49. package/src/breadboard/engine/editor/operations/add-asset.ts +45 -0
  50. package/src/breadboard/engine/editor/operations/add-edge.ts +142 -0
  51. package/src/breadboard/engine/editor/operations/add-graph.ts +47 -0
  52. package/src/breadboard/engine/editor/operations/add-module.ts +64 -0
  53. package/src/breadboard/engine/editor/operations/add-node.ts +86 -0
  54. package/src/breadboard/engine/editor/operations/change-asset-metadata.ts +70 -0
  55. package/src/breadboard/engine/editor/operations/change-configuration.ts +82 -0
  56. package/src/breadboard/engine/editor/operations/change-edge-metadata.ts +58 -0
  57. package/src/breadboard/engine/editor/operations/change-edge.ts +111 -0
  58. package/src/breadboard/engine/editor/operations/change-graph-metadata.ts +52 -0
  59. package/src/breadboard/engine/editor/operations/change-metadata.ts +92 -0
  60. package/src/breadboard/engine/editor/operations/change-module.ts +64 -0
  61. package/src/breadboard/engine/editor/operations/error.ts +21 -0
  62. package/src/breadboard/engine/editor/operations/remove-asset.ts +48 -0
  63. package/src/breadboard/engine/editor/operations/remove-edge.ts +89 -0
  64. package/src/breadboard/engine/editor/operations/remove-graph.ts +49 -0
  65. package/src/breadboard/engine/editor/operations/remove-integration.ts +54 -0
  66. package/src/breadboard/engine/editor/operations/remove-module.ts +69 -0
  67. package/src/breadboard/engine/editor/operations/remove-node.ts +86 -0
  68. package/src/breadboard/engine/editor/operations/replace-graph.ts +52 -0
  69. package/src/breadboard/engine/editor/operations/toggle-export.ts +72 -0
  70. package/src/breadboard/engine/editor/operations/upsert-integration.ts +43 -0
  71. package/src/breadboard/engine/editor/selection.ts +58 -0
  72. package/src/breadboard/engine/editor/transforms/configure-sidewire.ts +73 -0
  73. package/src/breadboard/engine/editor/transforms/isolate-selection.ts +54 -0
  74. package/src/breadboard/engine/editor/transforms/merge-graph.ts +58 -0
  75. package/src/breadboard/engine/editor/transforms/move-to-graph.ts +102 -0
  76. package/src/breadboard/engine/editor/transforms/move-to-new-graph.ts +72 -0
  77. package/src/breadboard/engine/editor/transforms/sidewire-to-new-graph.ts +82 -0
  78. package/src/breadboard/engine/file-system/blob-transform.ts +44 -0
  79. package/src/breadboard/engine/file-system/composed-peristent-backend.ts +140 -0
  80. package/src/breadboard/engine/file-system/ephemeral-blob-store.ts +46 -0
  81. package/src/breadboard/engine/file-system/in-memory-blob-store.ts +87 -0
  82. package/src/breadboard/engine/file-system/index.ts +723 -0
  83. package/src/breadboard/engine/file-system/partial-persistent-backend.ts +109 -0
  84. package/src/breadboard/engine/file-system/path.ts +125 -0
  85. package/src/breadboard/engine/file-system/persistent-file.ts +66 -0
  86. package/src/breadboard/engine/file-system/readable-stream-file.ts +61 -0
  87. package/src/breadboard/engine/file-system/stub-file-system.ts +47 -0
  88. package/src/breadboard/engine/file-system/utils.ts +40 -0
  89. package/src/breadboard/engine/inspector/graph/bubbled-node.ts +162 -0
  90. package/src/breadboard/engine/inspector/graph/describe-cache.ts +78 -0
  91. package/src/breadboard/engine/inspector/graph/describe-type-cache.ts +48 -0
  92. package/src/breadboard/engine/inspector/graph/edge-cache.ts +118 -0
  93. package/src/breadboard/engine/inspector/graph/edge.ts +133 -0
  94. package/src/breadboard/engine/inspector/graph/event.ts +35 -0
  95. package/src/breadboard/engine/inspector/graph/exports-describer.ts +45 -0
  96. package/src/breadboard/engine/inspector/graph/graph-cache.ts +54 -0
  97. package/src/breadboard/engine/inspector/graph/graph-describer-manager.ts +338 -0
  98. package/src/breadboard/engine/inspector/graph/graph-descriptor-handle.ts +73 -0
  99. package/src/breadboard/engine/inspector/graph/graph-node-type.ts +111 -0
  100. package/src/breadboard/engine/inspector/graph/graph-queries.ts +256 -0
  101. package/src/breadboard/engine/inspector/graph/graph.ts +163 -0
  102. package/src/breadboard/engine/inspector/graph/inspectable-asset.ts +36 -0
  103. package/src/breadboard/engine/inspector/graph/kits.ts +208 -0
  104. package/src/breadboard/engine/inspector/graph/module.ts +69 -0
  105. package/src/breadboard/engine/inspector/graph/mutable-graph.ts +150 -0
  106. package/src/breadboard/engine/inspector/graph/node-cache.ts +123 -0
  107. package/src/breadboard/engine/inspector/graph/node-describer-manager.ts +279 -0
  108. package/src/breadboard/engine/inspector/graph/node-type-describer-manager.ts +122 -0
  109. package/src/breadboard/engine/inspector/graph/node.ts +149 -0
  110. package/src/breadboard/engine/inspector/graph/port-cache.ts +80 -0
  111. package/src/breadboard/engine/inspector/graph/ports.ts +292 -0
  112. package/src/breadboard/engine/inspector/graph/schemas.ts +131 -0
  113. package/src/breadboard/engine/inspector/graph/virtual-node.ts +184 -0
  114. package/src/breadboard/engine/inspector/graph-store.ts +629 -0
  115. package/src/breadboard/engine/inspector/index.ts +13 -0
  116. package/src/breadboard/engine/inspector/utils.ts +20 -0
  117. package/src/breadboard/engine/loader/capability.ts +184 -0
  118. package/src/breadboard/engine/loader/index.ts +14 -0
  119. package/src/breadboard/engine/loader/loader.ts +244 -0
  120. package/src/breadboard/engine/loader/resolve-graph-urls.ts +111 -0
  121. package/src/breadboard/engine/runtime/bubble.ts +269 -0
  122. package/src/breadboard/engine/runtime/graph-based-node-handler.ts +174 -0
  123. package/src/breadboard/engine/runtime/handler.ts +166 -0
  124. package/src/breadboard/engine/runtime/harness/diagnostics.ts +22 -0
  125. package/src/breadboard/engine/runtime/harness/events.ts +217 -0
  126. package/src/breadboard/engine/runtime/harness/index.ts +14 -0
  127. package/src/breadboard/engine/runtime/harness/local.ts +48 -0
  128. package/src/breadboard/engine/runtime/harness/plan-runner.ts +759 -0
  129. package/src/breadboard/engine/runtime/index.ts +8 -0
  130. package/src/breadboard/engine/runtime/legacy.ts +28 -0
  131. package/src/breadboard/engine/runtime/run/invoke-graph.ts +79 -0
  132. package/src/breadboard/engine/runtime/run/node-invoker.ts +137 -0
  133. package/src/breadboard/engine/runtime/run/run-graph.ts +186 -0
  134. package/src/breadboard/engine/runtime/run.ts +111 -0
  135. package/src/breadboard/engine/runtime/sandbox/capabilities-manager.ts +253 -0
  136. package/src/breadboard/engine/runtime/sandbox/file-system-handler-factory.ts +53 -0
  137. package/src/breadboard/engine/runtime/sandbox/invoke-describer.ts +125 -0
  138. package/src/breadboard/engine/runtime/static/condense.ts +155 -0
  139. package/src/breadboard/engine/runtime/static/create-plan.ts +134 -0
  140. package/src/breadboard/engine/runtime/static/nodes-to-subgraph.ts +168 -0
  141. package/src/breadboard/engine/runtime/static/orchestrator.ts +664 -0
  142. package/src/breadboard/engine/runtime/static/types.ts +77 -0
  143. package/src/breadboard/engine/runtime/traversal/index.ts +58 -0
  144. package/src/breadboard/engine/runtime/traversal/iterator.ts +124 -0
  145. package/src/breadboard/engine/runtime/traversal/machine.ts +58 -0
  146. package/src/breadboard/engine/runtime/traversal/representation.ts +115 -0
  147. package/src/breadboard/engine/runtime/traversal/result.ts +72 -0
  148. package/src/breadboard/engine/runtime/traversal/state.ts +115 -0
  149. package/src/breadboard/engine/telemetry.ts +121 -0
  150. package/src/breadboard/engine/types.ts +32 -0
  151. package/src/breadboard/lit-flow-runner.test.ts +44 -0
  152. package/src/breadboard/lit-flow-runner.ts +98 -0
  153. package/src/breadboard/runner.ts +80 -0
  154. package/src/index.ts +2 -0
  155. package/src/lit-chiclet.ts +69 -0
  156. package/src/lit-flow.ts +17 -7
  157. package/src/lit-schema-node.test.ts +65 -0
  158. package/src/lit-schema-node.ts +194 -0
@@ -0,0 +1,134 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+
8
+ import {
9
+ Edge,
10
+ GraphDescriptor,
11
+ NodeDescriptor,
12
+ OrchestrationPlan,
13
+ PlanNodeInfo,
14
+ } from "@breadboard-ai/types";
15
+
16
+ export { createPlan };
17
+
18
+ /**
19
+ * Creates an execution plan from the provided GraphDescription.
20
+ * The graph is guaranteed to be condensed (no cycles), and each
21
+ * strongly connected component is represented with a single node
22
+ * that has a "folded" tag.
23
+ */
24
+ function createPlan(graph: GraphDescriptor): OrchestrationPlan {
25
+ const { nodes, edges } = graph;
26
+
27
+ if (!nodes || nodes.length === 0) {
28
+ return { stages: [] };
29
+ }
30
+
31
+ const nodeMap = new Map(nodes.map((node) => [node.id, node]));
32
+ const inDegree = new Map<string, number>();
33
+ const outEdges = new Map<string, Edge[]>();
34
+ const inEdges = new Map<string, Edge[]>();
35
+
36
+ nodes.forEach((node) => {
37
+ inDegree.set(node.id, 0);
38
+ outEdges.set(node.id, []);
39
+ inEdges.set(node.id, []);
40
+ });
41
+
42
+ if (edges) {
43
+ edges.forEach((edge) => {
44
+ const currentDegree = inDegree.get(edge.to) || 0;
45
+ inDegree.set(edge.to, currentDegree + 1);
46
+
47
+ const fromEdges = outEdges.get(edge.from) || [];
48
+ fromEdges.push({ ...edge });
49
+ outEdges.set(edge.from, fromEdges);
50
+
51
+ const toEdges = inEdges.get(edge.to) || [];
52
+ toEdges.push({ ...edge });
53
+ inEdges.set(edge.to, toEdges);
54
+ });
55
+ }
56
+
57
+ const stages: PlanNodeInfo[][] = [];
58
+ const entries = nodes.filter((node) => inDegree.get(node.id) === 0);
59
+
60
+ // Now, let's separate out all standalone steps and see if maybe we only
61
+ // have standalone nodes.
62
+ const standalone: NodeDescriptor[] = [];
63
+ const connected: NodeDescriptor[] = [];
64
+ let onlyStandalone = true;
65
+ entries.forEach((node) => {
66
+ const nodeTails = outEdges.get(node.id) || [];
67
+ if (nodeTails.length == 0) {
68
+ standalone.push(node);
69
+ } else {
70
+ onlyStandalone = false;
71
+ connected.push(node);
72
+ }
73
+ });
74
+ let queue: NodeDescriptor[];
75
+
76
+ // If there are no standalone nodes, return all entries as usual.
77
+ if (standalone.length === 0) {
78
+ queue = entries;
79
+ } else if (onlyStandalone) {
80
+ // This is the situation when we have a bunch of random nodes in graph
81
+ // and they are not connected, and there's no designated start node.
82
+
83
+ // Just return the first standalone node.
84
+ queue = [standalone[0]];
85
+ } else {
86
+ // If there are both standalone and connected nodes, we just ignore
87
+ // all standalone nodes.
88
+ queue = connected;
89
+ }
90
+
91
+ const processed = new Set<string>();
92
+
93
+ while (queue.length > 0) {
94
+ const stageNodes: PlanNodeInfo[] = [];
95
+ const nextQueue: typeof queue = [];
96
+
97
+ while (queue.length > 0) {
98
+ const node = queue.shift()!;
99
+
100
+ if (processed.has(node.id)) continue;
101
+ processed.add(node.id);
102
+
103
+ const downstream = outEdges.get(node.id) || [];
104
+
105
+ const upstream = inEdges.get(node.id) || [];
106
+
107
+ const planNodeInfo: PlanNodeInfo = {
108
+ node: nodeMap.get(node.id)!,
109
+ downstream,
110
+ upstream,
111
+ };
112
+ stageNodes.push(planNodeInfo);
113
+
114
+ (outEdges.get(node.id) || []).forEach((edge) => {
115
+ const targetDegree = inDegree.get(edge.to) || 0;
116
+ if (targetDegree > 0) {
117
+ inDegree.set(edge.to, targetDegree - 1);
118
+ if (targetDegree === 1) {
119
+ const targetNode = nodeMap.get(edge.to);
120
+ if (targetNode) nextQueue.push(targetNode);
121
+ }
122
+ }
123
+ });
124
+ }
125
+
126
+ if (stageNodes.length > 0) {
127
+ stages.push(stageNodes);
128
+ }
129
+
130
+ queue.push(...nextQueue);
131
+ }
132
+
133
+ return { stages };
134
+ }
@@ -0,0 +1,168 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+
8
+ import {
9
+ GraphDescriptor,
10
+ GraphIdentifier,
11
+ NodeDescriptor,
12
+ NodeIdentifier,
13
+ } from "@breadboard-ai/types";
14
+
15
+ export { nodesToSubgraph };
16
+
17
+ /**
18
+ * Moves a group of nodes within a graph into a subgraph, mutating
19
+ * the supplied graph.
20
+ *
21
+ * @param graph - The graph where the subgraph will be created.
22
+ * @param nodeGroup - The group of nodes to include in the subgraph.
23
+ * @param subgraphId - The unique identifier for the subgraph.
24
+ * @param title - An optional title for the subgraph.
25
+ * @param description - An optional description for the subgraph.
26
+ */
27
+ function nodesToSubgraph(
28
+ graph: GraphDescriptor,
29
+ nodeGroup: NodeIdentifier[],
30
+ subgraphId: GraphIdentifier,
31
+ title?: string,
32
+ description?: string
33
+ ) {
34
+ // Find all edges within the node group
35
+ const subgraph = createSubgraph(
36
+ graph,
37
+ nodeGroup,
38
+ subgraphId,
39
+ title,
40
+ description
41
+ );
42
+
43
+ graph.graphs ??= {};
44
+ graph.graphs[subgraphId] = subgraph;
45
+
46
+ const replacementNodeId = subgraphId;
47
+ const replacementNode: NodeDescriptor = {
48
+ id: replacementNodeId,
49
+ type: `#${subgraphId}`,
50
+ metadata: {
51
+ title: `Subgraph "${subgraphId}"`,
52
+ tags: ["folded"],
53
+ },
54
+ };
55
+
56
+ // Replace folded nodes with a replacement
57
+ graph.nodes =
58
+ graph.nodes?.filter((node) => !nodeGroup.includes(node.id)) || [];
59
+ graph.nodes.push(replacementNode);
60
+
61
+ // Update edges to point to/from condensed node
62
+ updateEdgeForFoldedNode(graph, nodeGroup, replacementNodeId);
63
+ }
64
+
65
+ function createSubgraph(
66
+ graph: GraphDescriptor,
67
+ nodeGroup: NodeIdentifier[],
68
+ subgraphId: GraphIdentifier,
69
+ title?: string,
70
+ description?: string
71
+ ): GraphDescriptor {
72
+ const internalEdges =
73
+ graph.edges?.filter(
74
+ (edge) => nodeGroup.includes(edge.from) && nodeGroup.includes(edge.to)
75
+ ) || [];
76
+
77
+ // Find incoming edges to the node group
78
+ const incomingEdges =
79
+ graph.edges?.filter(
80
+ (edge) => !nodeGroup.includes(edge.from) && nodeGroup.includes(edge.to)
81
+ ) || [];
82
+
83
+ // Find outgoing edges from the node group
84
+ const outgoingEdges =
85
+ graph.edges?.filter(
86
+ (edge) => nodeGroup.includes(edge.from) && !nodeGroup.includes(edge.to)
87
+ ) || [];
88
+
89
+ // Get nodes in the group
90
+ const groupNodes =
91
+ graph.nodes?.filter((node) => nodeGroup.includes(node.id)) || [];
92
+
93
+ // Create input node for capturing incoming edges
94
+ const inputNode: NodeDescriptor = {
95
+ id: `input_${subgraphId}`,
96
+ type: "input",
97
+ metadata: {
98
+ title: "Subgraph Input",
99
+ description: "Captures incoming edges to the subgraph",
100
+ },
101
+ };
102
+
103
+ // Create output node for capturing outgoing edges
104
+ const outputNode: NodeDescriptor = {
105
+ id: `output_${subgraphId}`,
106
+ type: "output",
107
+ metadata: {
108
+ title: "Subgraph Output",
109
+ description: "Captures outgoing edges from the subgraph",
110
+ },
111
+ };
112
+
113
+ // Create subgraph edges
114
+ const subgraphEdges = [...internalEdges];
115
+
116
+ // Add edges from input node to group entry points
117
+ incomingEdges.forEach((edge) => {
118
+ subgraphEdges.push({
119
+ from: `input_${subgraphId}`,
120
+ to: edge.to,
121
+ in: edge.in,
122
+ out: edge.in || "out",
123
+ });
124
+ });
125
+
126
+ // Add edges from group exit points to output node
127
+ outgoingEdges.forEach((edge) => {
128
+ subgraphEdges.push({
129
+ from: edge.from,
130
+ to: `output_${subgraphId}`,
131
+ in: edge.out || "in",
132
+ out: edge.out,
133
+ });
134
+ });
135
+
136
+ return {
137
+ title: title || `Subgraph ${subgraphId}`,
138
+ description: description || `Subgraph containing ${nodeGroup.length} nodes`,
139
+ nodes: [inputNode, ...groupNodes, outputNode],
140
+ edges: subgraphEdges,
141
+ };
142
+ }
143
+
144
+ function updateEdgeForFoldedNode(
145
+ graph: GraphDescriptor,
146
+ nodeGroup: string[],
147
+ nodeId: string
148
+ ) {
149
+ if (!graph.edges) return;
150
+
151
+ // Update edges that cross fold lines
152
+ graph.edges = graph.edges
153
+ .map((edge) => {
154
+ const from = nodeGroup.includes(edge.from);
155
+ const into = nodeGroup.includes(edge.to);
156
+
157
+ if (from && !into) {
158
+ return { ...edge, from: nodeId };
159
+ } else if (!from && into) {
160
+ return { ...edge, to: nodeId };
161
+ }
162
+ return edge;
163
+ })
164
+ // Remove internal edges (they're now in the subgraph)
165
+ .filter((edge) => {
166
+ return !(nodeGroup.includes(edge.from) && nodeGroup.includes(edge.to));
167
+ });
168
+ }