@ghchinoy/litflow 0.2.8 → 0.4.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 (249) hide show
  1. package/CHANGELOG.md +12 -4
  2. package/dist/breadboard/data/common.d.ts +35 -0
  3. package/dist/breadboard/data/file-system.d.ts +9 -0
  4. package/dist/breadboard/data/inline-all-content.d.ts +8 -0
  5. package/dist/breadboard/data/recent-boards.d.ts +17 -0
  6. package/dist/breadboard/data/save-outputs-as-file.d.ts +9 -0
  7. package/dist/breadboard/engine/add-run-module.d.ts +9 -0
  8. package/dist/breadboard/engine/editor/blank.d.ts +15 -0
  9. package/dist/breadboard/engine/editor/edge.d.ts +8 -0
  10. package/dist/breadboard/engine/editor/events.d.ts +34 -0
  11. package/dist/breadboard/engine/editor/graph.d.ts +18 -0
  12. package/dist/breadboard/engine/editor/history.d.ts +21 -0
  13. package/dist/breadboard/engine/editor/index.d.ts +6 -0
  14. package/dist/breadboard/engine/editor/operations/add-asset.d.ts +10 -0
  15. package/dist/breadboard/engine/editor/operations/add-edge.d.ts +11 -0
  16. package/dist/breadboard/engine/editor/operations/add-graph.d.ts +10 -0
  17. package/dist/breadboard/engine/editor/operations/add-module.d.ts +10 -0
  18. package/dist/breadboard/engine/editor/operations/add-node.d.ts +10 -0
  19. package/dist/breadboard/engine/editor/operations/change-asset-metadata.d.ts +11 -0
  20. package/dist/breadboard/engine/editor/operations/change-configuration.d.ts +10 -0
  21. package/dist/breadboard/engine/editor/operations/change-edge-metadata.d.ts +10 -0
  22. package/dist/breadboard/engine/editor/operations/change-edge.d.ts +10 -0
  23. package/dist/breadboard/engine/editor/operations/change-graph-metadata.d.ts +9 -0
  24. package/dist/breadboard/engine/editor/operations/change-metadata.d.ts +11 -0
  25. package/dist/breadboard/engine/editor/operations/change-module.d.ts +10 -0
  26. package/dist/breadboard/engine/editor/operations/error.d.ts +9 -0
  27. package/dist/breadboard/engine/editor/operations/remove-asset.d.ts +10 -0
  28. package/dist/breadboard/engine/editor/operations/remove-edge.d.ts +10 -0
  29. package/dist/breadboard/engine/editor/operations/remove-graph.d.ts +10 -0
  30. package/dist/breadboard/engine/editor/operations/remove-integration.d.ts +10 -0
  31. package/dist/breadboard/engine/editor/operations/remove-module.d.ts +10 -0
  32. package/dist/breadboard/engine/editor/operations/remove-node.d.ts +10 -0
  33. package/dist/breadboard/engine/editor/operations/replace-graph.d.ts +9 -0
  34. package/dist/breadboard/engine/editor/operations/toggle-export.d.ts +9 -0
  35. package/dist/breadboard/engine/editor/operations/upsert-integration.d.ts +10 -0
  36. package/dist/breadboard/engine/editor/selection.d.ts +16 -0
  37. package/dist/breadboard/engine/editor/transforms/configure-sidewire.d.ts +15 -0
  38. package/dist/breadboard/engine/editor/transforms/isolate-selection.d.ts +12 -0
  39. package/dist/breadboard/engine/editor/transforms/merge-graph.d.ts +12 -0
  40. package/dist/breadboard/engine/editor/transforms/move-to-graph.d.ts +12 -0
  41. package/dist/breadboard/engine/editor/transforms/move-to-new-graph.d.ts +12 -0
  42. package/dist/breadboard/engine/editor/transforms/sidewire-to-new-graph.d.ts +72 -0
  43. package/dist/breadboard/engine/file-system/blob-transform.d.ts +8 -0
  44. package/dist/breadboard/engine/file-system/composed-peristent-backend.d.ts +8 -0
  45. package/dist/breadboard/engine/file-system/ephemeral-blob-store.d.ts +8 -0
  46. package/dist/breadboard/engine/file-system/in-memory-blob-store.d.ts +18 -0
  47. package/dist/breadboard/engine/file-system/index.d.ts +22 -0
  48. package/dist/breadboard/engine/file-system/partial-persistent-backend.d.ts +19 -0
  49. package/dist/breadboard/engine/file-system/path.d.ts +23 -0
  50. package/dist/breadboard/engine/file-system/persistent-file.d.ts +19 -0
  51. package/dist/breadboard/engine/file-system/readable-stream-file.d.ts +17 -0
  52. package/dist/breadboard/engine/file-system/stub-file-system.d.ts +18 -0
  53. package/dist/breadboard/engine/file-system/utils.d.ts +9 -0
  54. package/dist/breadboard/engine/inspector/graph/bubbled-node.d.ts +34 -0
  55. package/dist/breadboard/engine/inspector/graph/describe-cache.d.ts +15 -0
  56. package/dist/breadboard/engine/inspector/graph/describe-type-cache.d.ts +15 -0
  57. package/dist/breadboard/engine/inspector/graph/edge-cache.d.ts +22 -0
  58. package/dist/breadboard/engine/inspector/graph/edge.d.ts +40 -0
  59. package/dist/breadboard/engine/inspector/graph/event.d.ts +16 -0
  60. package/dist/breadboard/engine/inspector/graph/exports-describer.d.ts +13 -0
  61. package/dist/breadboard/engine/inspector/graph/graph-cache.d.ts +18 -0
  62. package/dist/breadboard/engine/inspector/graph/graph-describer-manager.d.ts +21 -0
  63. package/dist/breadboard/engine/inspector/graph/graph-descriptor-handle.d.ts +17 -0
  64. package/dist/breadboard/engine/inspector/graph/graph-node-type.d.ts +15 -0
  65. package/dist/breadboard/engine/inspector/graph/graph-queries.d.ts +31 -0
  66. package/dist/breadboard/engine/inspector/graph/graph.d.ts +37 -0
  67. package/dist/breadboard/engine/inspector/graph/inspectable-asset.d.ts +17 -0
  68. package/dist/breadboard/engine/inspector/graph/kits.d.ts +15 -0
  69. package/dist/breadboard/engine/inspector/graph/module.d.ts +14 -0
  70. package/dist/breadboard/engine/inspector/graph/mutable-graph.d.ts +26 -0
  71. package/dist/breadboard/engine/inspector/graph/node-cache.d.ts +20 -0
  72. package/dist/breadboard/engine/inspector/graph/node-describer-manager.d.ts +25 -0
  73. package/dist/breadboard/engine/inspector/graph/node-type-describer-manager.d.ts +19 -0
  74. package/dist/breadboard/engine/inspector/graph/node.d.ts +27 -0
  75. package/dist/breadboard/engine/inspector/graph/port-cache.d.ts +18 -0
  76. package/dist/breadboard/engine/inspector/graph/ports.d.ts +16 -0
  77. package/dist/breadboard/engine/inspector/graph/schemas.d.ts +24 -0
  78. package/dist/breadboard/engine/inspector/graph/virtual-node.d.ts +35 -0
  79. package/dist/breadboard/engine/inspector/graph-store.d.ts +45 -0
  80. package/dist/breadboard/engine/inspector/index.d.ts +7 -0
  81. package/dist/breadboard/engine/inspector/utils.d.ts +9 -0
  82. package/dist/breadboard/engine/loader/capability.d.ts +21 -0
  83. package/dist/breadboard/engine/loader/index.d.ts +7 -0
  84. package/dist/breadboard/engine/loader/loader.d.ts +29 -0
  85. package/dist/breadboard/engine/loader/resolve-graph-urls.d.ts +16 -0
  86. package/dist/breadboard/engine/runtime/bubble.d.ts +23 -0
  87. package/dist/breadboard/engine/runtime/graph-based-node-handler.d.ts +16 -0
  88. package/dist/breadboard/engine/runtime/handler.d.ts +27 -0
  89. package/dist/breadboard/engine/runtime/harness/diagnostics.d.ts +12 -0
  90. package/dist/breadboard/engine/runtime/harness/events.d.ts +145 -0
  91. package/dist/breadboard/engine/runtime/harness/index.d.ts +8 -0
  92. package/dist/breadboard/engine/runtime/harness/local.d.ts +10 -0
  93. package/dist/breadboard/engine/runtime/harness/plan-runner.d.ts +25 -0
  94. package/dist/breadboard/engine/runtime/index.d.ts +6 -0
  95. package/dist/breadboard/engine/runtime/legacy.d.ts +11 -0
  96. package/dist/breadboard/engine/runtime/run/invoke-graph.d.ts +12 -0
  97. package/dist/breadboard/engine/runtime/run/node-invoker.d.ts +12 -0
  98. package/dist/breadboard/engine/runtime/run/run-graph.d.ts +12 -0
  99. package/dist/breadboard/engine/runtime/run.d.ts +29 -0
  100. package/dist/breadboard/engine/runtime/sandbox/capabilities-manager.d.ts +15 -0
  101. package/dist/breadboard/engine/runtime/sandbox/file-system-handler-factory.d.ts +15 -0
  102. package/dist/breadboard/engine/runtime/sandbox/invoke-describer.d.ts +10 -0
  103. package/dist/breadboard/engine/runtime/static/condense.d.ts +25 -0
  104. package/dist/breadboard/engine/runtime/static/create-plan.d.ts +14 -0
  105. package/dist/breadboard/engine/runtime/static/nodes-to-subgraph.d.ts +18 -0
  106. package/dist/breadboard/engine/runtime/static/orchestrator.d.ts +72 -0
  107. package/dist/breadboard/engine/runtime/static/types.d.ts +72 -0
  108. package/dist/breadboard/engine/runtime/traversal/index.d.ts +20 -0
  109. package/dist/breadboard/engine/runtime/traversal/iterator.d.ts +12 -0
  110. package/dist/breadboard/engine/runtime/traversal/machine.d.ts +14 -0
  111. package/dist/breadboard/engine/runtime/traversal/representation.d.ts +27 -0
  112. package/dist/breadboard/engine/runtime/traversal/result.d.ts +24 -0
  113. package/dist/breadboard/engine/runtime/traversal/state.d.ts +34 -0
  114. package/dist/breadboard/engine/telemetry.d.ts +25 -0
  115. package/dist/breadboard/engine/types.d.ts +9 -0
  116. package/dist/breadboard/lit-flow-runner.d.ts +13 -0
  117. package/dist/breadboard/lit-flow-runner.test.d.ts +1 -0
  118. package/dist/breadboard/runner.d.ts +13 -0
  119. package/dist/index.d.ts +2 -0
  120. package/dist/lit-chiclet.d.ts +9 -0
  121. package/dist/lit-flow.d.ts +13 -0
  122. package/dist/lit-schema-node.d.ts +13 -0
  123. package/dist/lit-schema-node.test.d.ts +1 -0
  124. package/dist/litflow.js +6173 -658
  125. package/dist/litflow.js.map +1 -1
  126. package/package.json +33 -3
  127. package/src/breadboard/data/common.ts +450 -0
  128. package/src/breadboard/data/file-system.ts +54 -0
  129. package/src/breadboard/data/inline-all-content.ts +126 -0
  130. package/src/breadboard/data/recent-boards.ts +118 -0
  131. package/src/breadboard/data/save-outputs-as-file.ts +104 -0
  132. package/src/breadboard/engine/add-run-module.ts +168 -0
  133. package/src/breadboard/engine/editor/blank.ts +65 -0
  134. package/src/breadboard/engine/editor/edge.ts +27 -0
  135. package/src/breadboard/engine/editor/events.ts +64 -0
  136. package/src/breadboard/engine/editor/graph.ts +383 -0
  137. package/src/breadboard/engine/editor/history.ts +98 -0
  138. package/src/breadboard/engine/editor/index.ts +8 -0
  139. package/src/breadboard/engine/editor/operations/add-asset.ts +45 -0
  140. package/src/breadboard/engine/editor/operations/add-edge.ts +142 -0
  141. package/src/breadboard/engine/editor/operations/add-graph.ts +47 -0
  142. package/src/breadboard/engine/editor/operations/add-module.ts +64 -0
  143. package/src/breadboard/engine/editor/operations/add-node.ts +86 -0
  144. package/src/breadboard/engine/editor/operations/change-asset-metadata.ts +70 -0
  145. package/src/breadboard/engine/editor/operations/change-configuration.ts +82 -0
  146. package/src/breadboard/engine/editor/operations/change-edge-metadata.ts +58 -0
  147. package/src/breadboard/engine/editor/operations/change-edge.ts +111 -0
  148. package/src/breadboard/engine/editor/operations/change-graph-metadata.ts +52 -0
  149. package/src/breadboard/engine/editor/operations/change-metadata.ts +92 -0
  150. package/src/breadboard/engine/editor/operations/change-module.ts +64 -0
  151. package/src/breadboard/engine/editor/operations/error.ts +21 -0
  152. package/src/breadboard/engine/editor/operations/remove-asset.ts +48 -0
  153. package/src/breadboard/engine/editor/operations/remove-edge.ts +89 -0
  154. package/src/breadboard/engine/editor/operations/remove-graph.ts +49 -0
  155. package/src/breadboard/engine/editor/operations/remove-integration.ts +54 -0
  156. package/src/breadboard/engine/editor/operations/remove-module.ts +69 -0
  157. package/src/breadboard/engine/editor/operations/remove-node.ts +86 -0
  158. package/src/breadboard/engine/editor/operations/replace-graph.ts +52 -0
  159. package/src/breadboard/engine/editor/operations/toggle-export.ts +72 -0
  160. package/src/breadboard/engine/editor/operations/upsert-integration.ts +43 -0
  161. package/src/breadboard/engine/editor/selection.ts +58 -0
  162. package/src/breadboard/engine/editor/transforms/configure-sidewire.ts +73 -0
  163. package/src/breadboard/engine/editor/transforms/isolate-selection.ts +54 -0
  164. package/src/breadboard/engine/editor/transforms/merge-graph.ts +58 -0
  165. package/src/breadboard/engine/editor/transforms/move-to-graph.ts +102 -0
  166. package/src/breadboard/engine/editor/transforms/move-to-new-graph.ts +72 -0
  167. package/src/breadboard/engine/editor/transforms/sidewire-to-new-graph.ts +82 -0
  168. package/src/breadboard/engine/file-system/blob-transform.ts +44 -0
  169. package/src/breadboard/engine/file-system/composed-peristent-backend.ts +140 -0
  170. package/src/breadboard/engine/file-system/ephemeral-blob-store.ts +46 -0
  171. package/src/breadboard/engine/file-system/in-memory-blob-store.ts +87 -0
  172. package/src/breadboard/engine/file-system/index.ts +723 -0
  173. package/src/breadboard/engine/file-system/partial-persistent-backend.ts +109 -0
  174. package/src/breadboard/engine/file-system/path.ts +125 -0
  175. package/src/breadboard/engine/file-system/persistent-file.ts +66 -0
  176. package/src/breadboard/engine/file-system/readable-stream-file.ts +61 -0
  177. package/src/breadboard/engine/file-system/stub-file-system.ts +47 -0
  178. package/src/breadboard/engine/file-system/utils.ts +40 -0
  179. package/src/breadboard/engine/inspector/graph/bubbled-node.ts +162 -0
  180. package/src/breadboard/engine/inspector/graph/describe-cache.ts +78 -0
  181. package/src/breadboard/engine/inspector/graph/describe-type-cache.ts +48 -0
  182. package/src/breadboard/engine/inspector/graph/edge-cache.ts +118 -0
  183. package/src/breadboard/engine/inspector/graph/edge.ts +133 -0
  184. package/src/breadboard/engine/inspector/graph/event.ts +35 -0
  185. package/src/breadboard/engine/inspector/graph/exports-describer.ts +45 -0
  186. package/src/breadboard/engine/inspector/graph/graph-cache.ts +54 -0
  187. package/src/breadboard/engine/inspector/graph/graph-describer-manager.ts +338 -0
  188. package/src/breadboard/engine/inspector/graph/graph-descriptor-handle.ts +73 -0
  189. package/src/breadboard/engine/inspector/graph/graph-node-type.ts +111 -0
  190. package/src/breadboard/engine/inspector/graph/graph-queries.ts +256 -0
  191. package/src/breadboard/engine/inspector/graph/graph.ts +163 -0
  192. package/src/breadboard/engine/inspector/graph/inspectable-asset.ts +36 -0
  193. package/src/breadboard/engine/inspector/graph/kits.ts +208 -0
  194. package/src/breadboard/engine/inspector/graph/module.ts +69 -0
  195. package/src/breadboard/engine/inspector/graph/mutable-graph.ts +150 -0
  196. package/src/breadboard/engine/inspector/graph/node-cache.ts +123 -0
  197. package/src/breadboard/engine/inspector/graph/node-describer-manager.ts +279 -0
  198. package/src/breadboard/engine/inspector/graph/node-type-describer-manager.ts +122 -0
  199. package/src/breadboard/engine/inspector/graph/node.ts +149 -0
  200. package/src/breadboard/engine/inspector/graph/port-cache.ts +80 -0
  201. package/src/breadboard/engine/inspector/graph/ports.ts +292 -0
  202. package/src/breadboard/engine/inspector/graph/schemas.ts +131 -0
  203. package/src/breadboard/engine/inspector/graph/virtual-node.ts +184 -0
  204. package/src/breadboard/engine/inspector/graph-store.ts +629 -0
  205. package/src/breadboard/engine/inspector/index.ts +13 -0
  206. package/src/breadboard/engine/inspector/utils.ts +20 -0
  207. package/src/breadboard/engine/loader/capability.ts +184 -0
  208. package/src/breadboard/engine/loader/index.ts +14 -0
  209. package/src/breadboard/engine/loader/loader.ts +244 -0
  210. package/src/breadboard/engine/loader/resolve-graph-urls.ts +111 -0
  211. package/src/breadboard/engine/runtime/bubble.ts +269 -0
  212. package/src/breadboard/engine/runtime/graph-based-node-handler.ts +174 -0
  213. package/src/breadboard/engine/runtime/handler.ts +166 -0
  214. package/src/breadboard/engine/runtime/harness/diagnostics.ts +22 -0
  215. package/src/breadboard/engine/runtime/harness/events.ts +217 -0
  216. package/src/breadboard/engine/runtime/harness/index.ts +14 -0
  217. package/src/breadboard/engine/runtime/harness/local.ts +48 -0
  218. package/src/breadboard/engine/runtime/harness/plan-runner.ts +759 -0
  219. package/src/breadboard/engine/runtime/index.ts +8 -0
  220. package/src/breadboard/engine/runtime/legacy.ts +28 -0
  221. package/src/breadboard/engine/runtime/run/invoke-graph.ts +79 -0
  222. package/src/breadboard/engine/runtime/run/node-invoker.ts +137 -0
  223. package/src/breadboard/engine/runtime/run/run-graph.ts +186 -0
  224. package/src/breadboard/engine/runtime/run.ts +111 -0
  225. package/src/breadboard/engine/runtime/sandbox/capabilities-manager.ts +253 -0
  226. package/src/breadboard/engine/runtime/sandbox/file-system-handler-factory.ts +53 -0
  227. package/src/breadboard/engine/runtime/sandbox/invoke-describer.ts +125 -0
  228. package/src/breadboard/engine/runtime/static/condense.ts +155 -0
  229. package/src/breadboard/engine/runtime/static/create-plan.ts +134 -0
  230. package/src/breadboard/engine/runtime/static/nodes-to-subgraph.ts +168 -0
  231. package/src/breadboard/engine/runtime/static/orchestrator.ts +664 -0
  232. package/src/breadboard/engine/runtime/static/types.ts +77 -0
  233. package/src/breadboard/engine/runtime/traversal/index.ts +58 -0
  234. package/src/breadboard/engine/runtime/traversal/iterator.ts +124 -0
  235. package/src/breadboard/engine/runtime/traversal/machine.ts +58 -0
  236. package/src/breadboard/engine/runtime/traversal/representation.ts +115 -0
  237. package/src/breadboard/engine/runtime/traversal/result.ts +72 -0
  238. package/src/breadboard/engine/runtime/traversal/state.ts +115 -0
  239. package/src/breadboard/engine/telemetry.ts +121 -0
  240. package/src/breadboard/engine/types.ts +32 -0
  241. package/src/breadboard/lit-flow-runner.test.ts +44 -0
  242. package/src/breadboard/lit-flow-runner.ts +98 -0
  243. package/src/breadboard/runner.ts +80 -0
  244. package/src/index.ts +2 -0
  245. package/src/lit-chiclet.ts +69 -0
  246. package/src/lit-flow.ts +150 -9
  247. package/src/lit-node.ts +9 -2
  248. package/src/lit-schema-node.test.ts +65 -0
  249. package/src/lit-schema-node.ts +194 -0
@@ -0,0 +1,629 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @license
4
+ * Copyright 2024 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+
8
+ import type {
9
+ AddResult,
10
+ EditableGraph,
11
+ EditableGraphOptions,
12
+ FileSystem,
13
+ FileSystemEntry,
14
+ GraphDescriptor,
15
+ GraphIdentifier,
16
+ GraphLoader,
17
+ GraphLoaderContext,
18
+ GraphLoaderResult,
19
+ GraphStoreArgs,
20
+ GraphStoreEntry,
21
+ GraphStoreEventTarget,
22
+ InspectableDescriberResultTypeCache,
23
+ InspectableGraph,
24
+ InspectableGraphOptions,
25
+ Kit,
26
+ KitDescriptor,
27
+ MainGraphIdentifier,
28
+ MainGraphStoreEntry,
29
+ MainGraphStoreExport,
30
+ MutableGraph,
31
+ MutableGraphStore,
32
+ NodeHandlerContext,
33
+ NodeHandlerMetadata,
34
+ Result,
35
+ RuntimeFlagManager,
36
+ } from "@breadboard-ai/types";
37
+ import {
38
+ filterEmptyValues,
39
+ graphUrlLike,
40
+ hash,
41
+ SnapshotUpdater,
42
+ } from "@breadboard-ai/utils";
43
+ import { Graph as GraphEditor } from "../editor/graph.js";
44
+ import { DescribeResultTypeCache } from "./graph/describe-type-cache.js";
45
+ import { UpdateEvent } from "./graph/event.js";
46
+ import { createBuiltInKit } from "./graph/kits.js";
47
+ import { MutableGraphImpl } from "./graph/mutable-graph.js";
48
+ import { NodeTypeDescriberManager } from "./graph/node-type-describer-manager.js";
49
+ import { RunnableModuleFactory } from "@breadboard-ai/types/sandbox.js";
50
+ import { createLoader } from "../loader/index.js";
51
+ import { urlComponentsFromString } from "../loader/loader.js";
52
+
53
+ export {
54
+ contextFromMutableGraph,
55
+ contextFromMutableGraphStore,
56
+ GraphStore,
57
+ makeTerribleOptions,
58
+ };
59
+
60
+ function contextFromMutableGraph(mutable: MutableGraph): NodeHandlerContext {
61
+ const store = mutable.store;
62
+ return {
63
+ kits: [...store.kits],
64
+ loader: store.loader,
65
+ sandbox: store.sandbox,
66
+ graphStore: store,
67
+ outerGraph: mutable.graph,
68
+ };
69
+ }
70
+
71
+ function contextFromMutableGraphStore(
72
+ store: MutableGraphStore
73
+ ): NodeHandlerContext {
74
+ return {
75
+ kits: [...store.kits],
76
+ loader: store.loader,
77
+ sandbox: store.sandbox,
78
+ graphStore: store,
79
+ };
80
+ }
81
+
82
+ // TODO: Deprecate and remove.
83
+ function makeTerribleOptions(
84
+ options: InspectableGraphOptions = {}
85
+ ): Required<InspectableGraphOptions> {
86
+ return {
87
+ kits: options.kits || [],
88
+ sandbox: options.sandbox || {
89
+ createRunnableModule() {
90
+ throw new Error("Non-existent sandbox: Terrible Options were used.");
91
+ },
92
+ },
93
+ loader: createLoader(),
94
+ fileSystem: {
95
+ read() {
96
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
97
+ },
98
+ write() {
99
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
100
+ },
101
+ query() {
102
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
103
+ },
104
+ addStream() {
105
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
106
+ },
107
+ close: function (): Promise<void> {
108
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
109
+ },
110
+ updateRunFileSystem: function (): FileSystem {
111
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
112
+ },
113
+ createRunFileSystem: function (): FileSystem {
114
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
115
+ },
116
+ createModuleFileSystem: function (): FileSystem {
117
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
118
+ },
119
+ env: function (): FileSystemEntry[] {
120
+ throw new Error("Non-existent filesystem: Terrible Options were used.");
121
+ },
122
+ },
123
+ };
124
+ }
125
+
126
+ class GraphStore
127
+ extends (EventTarget as GraphStoreEventTarget)
128
+ implements MutableGraphStore
129
+ {
130
+ readonly kits: readonly Kit[];
131
+ readonly sandbox: RunnableModuleFactory;
132
+ readonly loader: GraphLoader;
133
+ readonly fileSystem: FileSystem;
134
+ readonly flags: RuntimeFlagManager;
135
+
136
+ #legacyKits: GraphStoreEntry[];
137
+
138
+ #mainGraphIds: Map<string, MainGraphIdentifier> = new Map();
139
+ #mutables: Map<MainGraphIdentifier, SnapshotUpdater<MutableGraph>> =
140
+ new Map();
141
+ #dependencies: Map<MainGraphIdentifier, Set<MainGraphIdentifier>> = new Map();
142
+
143
+ /**
144
+ * The cache of type describer results. These are currently
145
+ * entirely static: they are only loaded once and exist
146
+ * for the lifetime of the GraphStore. At the moment, this
147
+ * is ok, since the only graph that ever changes is the main
148
+ * graph, and we don't need its type. This will change
149
+ * probably, so we need to be on look out for when.
150
+ */
151
+ public readonly types: InspectableDescriberResultTypeCache;
152
+
153
+ constructor(args: GraphStoreArgs) {
154
+ super();
155
+ this.kits = args.kits;
156
+ this.sandbox = args.sandbox;
157
+ this.loader = args.loader;
158
+ this.fileSystem = args.fileSystem;
159
+ this.flags = args.flags;
160
+ this.types = new DescribeResultTypeCache(
161
+ new NodeTypeDescriberManager(this)
162
+ );
163
+
164
+ this.#legacyKits = this.#populateLegacyKits(args.kits);
165
+ }
166
+
167
+ getEntryByDescriptor(
168
+ descriptor: GraphDescriptor,
169
+ graphId: GraphIdentifier
170
+ ): GraphStoreEntry | undefined {
171
+ const getting = this.getOrAdd(descriptor);
172
+ if (!getting.success) {
173
+ return;
174
+ }
175
+ const mutable = getting.result;
176
+ const mainGraphMetadata = filterEmptyValues({
177
+ title: descriptor.title,
178
+ description: descriptor.description,
179
+ icon: descriptor.metadata?.icon,
180
+ url: descriptor.url,
181
+ tags: descriptor.metadata?.tags,
182
+ help: descriptor.metadata?.help,
183
+ id: mutable.id,
184
+ });
185
+ let metadata;
186
+ if (graphId) {
187
+ metadata = entryFromExport(mutable, `#${graphId}`, mutable.id);
188
+ } else {
189
+ metadata = mainGraphMetadata;
190
+ }
191
+ return {
192
+ updating: false,
193
+ mainGraph: mainGraphMetadata,
194
+ ...metadata,
195
+ };
196
+ }
197
+
198
+ mainGraphs(): MainGraphStoreEntry[] {
199
+ const graphs = [...this.#mutables.entries()].map(
200
+ ([mainGraphId, snapshot]) => {
201
+ const current = snapshot.current();
202
+ const updating = snapshot.updating();
203
+ const descriptor = current.graph;
204
+ const mainGraphMetadata = filterEmptyValues({
205
+ title: descriptor.title,
206
+ description: descriptor.description,
207
+ icon: descriptor.metadata?.icon,
208
+ url: descriptor.url,
209
+ tags: descriptor.metadata?.tags,
210
+ help: descriptor.metadata?.help,
211
+ id: mainGraphId,
212
+ });
213
+ return {
214
+ ...mainGraphMetadata,
215
+ ...getExports(current),
216
+ updating,
217
+ };
218
+ }
219
+ );
220
+ return graphs;
221
+ }
222
+
223
+ graphs(): GraphStoreEntry[] {
224
+ const graphs = [...this.#mutables.entries()]
225
+ .flatMap(([mainGraphId, snapshot]) => {
226
+ const mutable = snapshot.current();
227
+ const descriptor = mutable.graph;
228
+ const mainGraphMetadata = filterEmptyValues({
229
+ title: descriptor.title,
230
+ description: descriptor.description,
231
+ icon: descriptor.metadata?.icon,
232
+ url: descriptor.url,
233
+ tags: descriptor.metadata?.tags,
234
+ help: descriptor.metadata?.help,
235
+ id: mainGraphId,
236
+ });
237
+ const exports: GraphStoreEntry[] = [];
238
+ if (descriptor.exports) {
239
+ for (const e of descriptor.exports) {
240
+ const metadata = entryFromExport(mutable, e, mainGraphId);
241
+ exports.push({
242
+ mainGraph: mainGraphMetadata,
243
+ updating: false,
244
+ ...metadata,
245
+ });
246
+ }
247
+ } else {
248
+ exports.push({
249
+ updating: false,
250
+ mainGraph:
251
+ (mutable.legacyKitMetadata as KitDescriptor & {
252
+ id: MainGraphIdentifier;
253
+ }) || mainGraphMetadata,
254
+ ...mainGraphMetadata,
255
+ });
256
+ }
257
+ return exports;
258
+ })
259
+ .filter(Boolean) as GraphStoreEntry[];
260
+ return [...this.#legacyKits, ...graphs];
261
+ }
262
+
263
+ async load(
264
+ path: string,
265
+ context: GraphLoaderContext
266
+ ): Promise<GraphLoaderResult> {
267
+ // Add loading graph as a dependency.
268
+ const dependencies: MainGraphIdentifier[] = [];
269
+ if (context) {
270
+ const url = context.outerGraph?.url;
271
+ if (url) {
272
+ const outerMutable = this.addByURL(url, [], context);
273
+ dependencies.push(outerMutable.mutable.id);
274
+ }
275
+ }
276
+
277
+ const result = this.addByURL(path, dependencies, context);
278
+ try {
279
+ const mutable = await this.getLatest(result.mutable);
280
+ return {
281
+ success: true,
282
+ graph: mutable.graph,
283
+ subGraphId: result.graphId,
284
+ moduleId: result.moduleId,
285
+ };
286
+ } catch (e) {
287
+ return {
288
+ success: false,
289
+ error: (e as Error).message,
290
+ };
291
+ }
292
+ }
293
+
294
+ #populateLegacyKits(kits: Kit[]) {
295
+ kits = [...kits, createBuiltInKit()];
296
+ const all = kits.flatMap((kit) =>
297
+ Object.entries(kit.handlers).map(([type, handler]) => {
298
+ let metadata: NodeHandlerMetadata =
299
+ "metadata" in handler ? handler.metadata || {} : {};
300
+ const mainGraphTags = [...(kit.tags || [])];
301
+ if (metadata.deprecated) {
302
+ mainGraphTags.push("deprecated");
303
+ metadata = { ...metadata };
304
+ delete metadata.deprecated;
305
+ }
306
+ const tags = [...(metadata.tags || []), "component"];
307
+ return [
308
+ type,
309
+ {
310
+ url: type,
311
+ mainGraph: filterEmptyValues({
312
+ title: kit.title,
313
+ description: kit.description,
314
+ tags: mainGraphTags,
315
+ }),
316
+ ...metadata,
317
+ tags,
318
+ },
319
+ ] as [type: string, info: GraphStoreEntry];
320
+ })
321
+ );
322
+ return Object.values(
323
+ all.reduce(
324
+ (collated, [type, info]) => {
325
+ // Intentionally do the reverse of what goes on
326
+ // in `handlersFromKits`: last info wins,
327
+ // because here, we're collecting info, rather
328
+ // than handlers and the last info is the one
329
+ // that typically has the right stuff.
330
+ return { ...collated, [type]: info };
331
+ },
332
+ {} as Record<string, GraphStoreEntry>
333
+ )
334
+ );
335
+ }
336
+
337
+ registerKit(kit: Kit, dependences: MainGraphIdentifier[]): void {
338
+ Object.keys(kit.handlers).forEach((type) => {
339
+ if (graphUrlLike(type)) {
340
+ const mutable = this.addByURL(type, dependences, {}).mutable;
341
+ mutable.legacyKitMetadata = filterEmptyValues({
342
+ url: kit.url,
343
+ title: kit.title,
344
+ description: kit.description,
345
+ tags: kit.tags,
346
+ id: mutable.id,
347
+ });
348
+ } else {
349
+ throw new Error(
350
+ `The type "${type}" is not Graph URL-like, unable to add this kit`
351
+ );
352
+ }
353
+ });
354
+ }
355
+
356
+ addByDescriptor(graph: GraphDescriptor): Result<MainGraphIdentifier> {
357
+ const getting = this.getOrAdd(graph);
358
+ if (!getting.success) {
359
+ return getting;
360
+ }
361
+ return { success: true, result: getting.result.id };
362
+ }
363
+
364
+ getByDescriptor(graph: GraphDescriptor): Result<MainGraphIdentifier> {
365
+ const getting = this.getOrAdd(graph);
366
+ if (!getting.success) {
367
+ return getting;
368
+ }
369
+ return { success: true, result: getting.result.id };
370
+ }
371
+
372
+ editByDescriptor(
373
+ graph: GraphDescriptor,
374
+ options: EditableGraphOptions = {}
375
+ ): EditableGraph | undefined {
376
+ const result = this.getOrAdd(graph);
377
+ if (!result.success) {
378
+ console.error(`Failed to edityByDescriptor: ${result.error}`);
379
+ return undefined;
380
+ }
381
+ return this.edit(result.result.id, options);
382
+ }
383
+
384
+ edit(
385
+ id: MainGraphIdentifier,
386
+ options: EditableGraphOptions = {}
387
+ ): EditableGraph | undefined {
388
+ const mutable = this.get(id);
389
+ if (!mutable) return undefined;
390
+
391
+ return new GraphEditor(mutable, options);
392
+ }
393
+
394
+ inspect(
395
+ id: MainGraphIdentifier,
396
+ graphId: GraphIdentifier
397
+ ): InspectableGraph | undefined {
398
+ const mutable = this.get(id);
399
+ if (!mutable) return undefined;
400
+
401
+ return mutable.graphs.get(graphId);
402
+ }
403
+
404
+ inspectSnapshot(
405
+ graph: GraphDescriptor,
406
+ graphId: GraphIdentifier
407
+ ): InspectableGraph | undefined {
408
+ const immutable = this.#snapshotFromGraphDescriptor(graph).current();
409
+ return immutable.graphs.get(graphId);
410
+ }
411
+
412
+ addByURL(
413
+ path: string,
414
+ dependencies: MainGraphIdentifier[],
415
+ context: GraphLoaderContext = {}
416
+ ): AddResult {
417
+ const { mainGraphUrl, graphId, moduleId } = urlComponentsFromString(
418
+ path,
419
+ context
420
+ );
421
+ const id = this.#mainGraphIds.get(mainGraphUrl);
422
+ if (id) {
423
+ this.#addDependencies(id, dependencies);
424
+ const snapshot = this.#mutables.get(id)!;
425
+ return {
426
+ mutable: snapshot.current(),
427
+ graphId,
428
+ moduleId,
429
+ updating: snapshot.updating(),
430
+ };
431
+ }
432
+ const snapshot = this.#snapshotFromUrl(mainGraphUrl, context);
433
+ const mutable = snapshot.current();
434
+ this.#mutables.set(mutable.id, snapshot);
435
+ this.#mainGraphIds.set(mainGraphUrl, mutable.id);
436
+ this.#addDependencies(mutable.id, dependencies);
437
+ return {
438
+ mutable,
439
+ graphId,
440
+ moduleId,
441
+ updating: snapshot.updating(),
442
+ };
443
+ }
444
+
445
+ async getLatest(mutable: MutableGraph): Promise<MutableGraph> {
446
+ const snapshot = this.#mutables.get(mutable.id);
447
+ if (!snapshot) {
448
+ return mutable;
449
+ }
450
+ return snapshot.latest();
451
+ }
452
+
453
+ #addDependencies(
454
+ id: MainGraphIdentifier,
455
+ dependencies: MainGraphIdentifier[]
456
+ ) {
457
+ if (!dependencies.length) return;
458
+
459
+ let deps: Set<MainGraphIdentifier> | undefined = this.#dependencies.get(id);
460
+ if (!deps) {
461
+ deps = new Set();
462
+ this.#dependencies.set(id, deps);
463
+ }
464
+ dependencies.forEach((dependency) => {
465
+ deps.add(dependency);
466
+ });
467
+ }
468
+
469
+ getOrAdd(graph: GraphDescriptor): Result<MutableGraph> {
470
+ let url = graph.url;
471
+ let graphHash: number | null = null;
472
+ if (!url) {
473
+ graphHash = hash(graph);
474
+ url = `hash:${graphHash}`;
475
+ }
476
+
477
+ // Find graph by URL.
478
+ const { mainGraphUrl } = urlComponentsFromString(url);
479
+ const id = this.#mainGraphIds.get(mainGraphUrl);
480
+ if (id) {
481
+ const existing = this.#mutables.get(id)?.current();
482
+ if (!existing) {
483
+ return error(`Integrity error: main graph "${id}" not found in store.`);
484
+ }
485
+ return { success: true, result: existing };
486
+ } else {
487
+ // Brand new graph
488
+ const snapshot = this.#snapshotFromGraphDescriptor(graph);
489
+ const mutable = snapshot.current();
490
+ this.#mutables.set(mutable.id, snapshot);
491
+ this.#mainGraphIds.set(url, mutable.id);
492
+ return { success: true, result: mutable };
493
+ }
494
+ }
495
+
496
+ #snapshotFromGraphDescriptor(
497
+ graph: GraphDescriptor
498
+ ): SnapshotUpdater<MutableGraph> {
499
+ // Create a simple static snapshot
500
+ const mutable = new MutableGraphImpl(graph, this);
501
+ return new SnapshotUpdater({
502
+ initial() {
503
+ return mutable;
504
+ },
505
+ latest() {
506
+ return Promise.resolve(mutable);
507
+ },
508
+ });
509
+ }
510
+
511
+ #snapshotFromUrl(
512
+ url: string,
513
+ options: GraphLoaderContext
514
+ ): SnapshotUpdater<MutableGraph> {
515
+ const mutable = new MutableGraphImpl(emptyGraph(), this);
516
+ let graphId = "";
517
+ return new SnapshotUpdater({
518
+ initial: () => mutable,
519
+ latest: async () => {
520
+ const loader = this.loader;
521
+ if (!loader) {
522
+ throw new Error(`Unable to load "${url}": no loader provided`);
523
+ }
524
+ const loading = await loader.load(url, options);
525
+ if (!loading.success) {
526
+ throw new Error(loading.error);
527
+ }
528
+ mutable.rebuild(loading.graph);
529
+ graphId = loading.subGraphId || "";
530
+ return mutable;
531
+ },
532
+ updated: () => {
533
+ this.dispatchEvent(
534
+ new UpdateEvent(
535
+ mutable.id,
536
+ graphId,
537
+ "",
538
+ [...(this.#dependencies.get(mutable.id) || [])],
539
+ true
540
+ )
541
+ );
542
+ },
543
+ });
544
+ }
545
+
546
+ get(id: MainGraphIdentifier): MutableGraph | undefined {
547
+ return this.#mutables.get(id)?.current();
548
+ }
549
+ }
550
+
551
+ function error<T>(message: string): Result<T> {
552
+ return {
553
+ success: false,
554
+ error: message,
555
+ };
556
+ }
557
+
558
+ function emptyGraph(): GraphDescriptor {
559
+ return {
560
+ edges: [],
561
+ nodes: [],
562
+ };
563
+ }
564
+
565
+ const MODULE_EXPORT_PREFIX = "#module:";
566
+
567
+ function entryFromExport(
568
+ mutable: MutableGraph,
569
+ id: string,
570
+ mainGraphId: MainGraphIdentifier
571
+ ): (NodeHandlerMetadata & { updating: boolean }) | null {
572
+ const graph = mutable.graph;
573
+ const url = `${graph.url}${id}`;
574
+ const { current, updating } = mutable.store.types.get(url);
575
+ const {
576
+ title,
577
+ description,
578
+ metadata: { icon, help, tags = [], order } = {},
579
+ } = updating ? {} : current || {};
580
+ if (id.startsWith(MODULE_EXPORT_PREFIX)) {
581
+ const moduleId = id.slice(MODULE_EXPORT_PREFIX.length);
582
+ const module = graph.modules?.[moduleId];
583
+ if (!module) return null;
584
+ return filterEmptyValues({
585
+ title: title ?? module.metadata?.title,
586
+ description: description ?? module.metadata?.description,
587
+ icon: icon ?? module.metadata?.icon,
588
+ url,
589
+ tags: ["component", ...tags],
590
+ help: help ?? module.metadata?.help,
591
+ order,
592
+ id: mainGraphId,
593
+ updating,
594
+ });
595
+ } else {
596
+ const graphId = id.slice(1);
597
+ const descriptor = graphId ? graph.graphs?.[graphId] : graph;
598
+ if (!descriptor) return null;
599
+ return filterEmptyValues({
600
+ title: title ?? descriptor.title,
601
+ description: description ?? descriptor.description,
602
+ icon: icon ?? descriptor.metadata?.icon,
603
+ url,
604
+ tags: ["component", ...tags],
605
+ help: help ?? descriptor.metadata?.help,
606
+ order,
607
+ id: mainGraphId,
608
+ updating,
609
+ });
610
+ }
611
+ }
612
+
613
+ function getExports(mutable: MutableGraph): {
614
+ exports: MainGraphStoreExport[];
615
+ exportTags: string[];
616
+ } {
617
+ const result: MainGraphStoreExport[] = [];
618
+ const tags: Set<string> = new Set();
619
+ const { exports = [] } = mutable.graph;
620
+
621
+ for (const id of exports) {
622
+ const entry = entryFromExport(mutable, id, mutable.id);
623
+ if (!entry) continue;
624
+ result.push(entry);
625
+ (entry.tags || []).forEach((tag) => tags.add(tag));
626
+ }
627
+
628
+ return { exports: result, exportTags: Array.from(tags.values()) };
629
+ }
@@ -0,0 +1,13 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @license
4
+ * Copyright 2024 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+
8
+ import type { GraphStoreArgs, MutableGraphStore } from "@breadboard-ai/types";
9
+ import { GraphStore } from "./graph-store.js";
10
+
11
+ export function createGraphStore(args: GraphStoreArgs): MutableGraphStore {
12
+ return new GraphStore(args);
13
+ }
@@ -0,0 +1,20 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+
8
+ import { GraphIdentifier } from "@breadboard-ai/types";
9
+
10
+ export { isModule, getModuleId };
11
+
12
+ const MODULE_EXPORT_PREFIX = "#module:";
13
+
14
+ function isModule(graphId: GraphIdentifier) {
15
+ return graphId.startsWith(MODULE_EXPORT_PREFIX);
16
+ }
17
+
18
+ function getModuleId(graphId: GraphIdentifier) {
19
+ return graphId.slice(MODULE_EXPORT_PREFIX.length);
20
+ }