@loxtep/sdk 0.2.3 → 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 (239) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +255 -4
  3. package/dist/authoring/agent.d.ts +164 -0
  4. package/dist/authoring/agent.d.ts.map +1 -0
  5. package/dist/authoring/agent.js +376 -0
  6. package/dist/authoring/agent.js.map +1 -0
  7. package/dist/authoring/compiler.d.ts +103 -0
  8. package/dist/authoring/compiler.d.ts.map +1 -0
  9. package/dist/authoring/compiler.js +305 -0
  10. package/dist/authoring/compiler.js.map +1 -0
  11. package/dist/authoring/define-data-workflow.d.ts +24 -0
  12. package/dist/authoring/define-data-workflow.d.ts.map +1 -0
  13. package/dist/authoring/define-data-workflow.js +93 -0
  14. package/dist/authoring/define-data-workflow.js.map +1 -0
  15. package/dist/authoring/index.d.ts +19 -0
  16. package/dist/authoring/index.d.ts.map +1 -0
  17. package/dist/authoring/index.js +15 -0
  18. package/dist/authoring/index.js.map +1 -0
  19. package/dist/authoring/toolbox.d.ts +133 -0
  20. package/dist/authoring/toolbox.d.ts.map +1 -0
  21. package/dist/authoring/toolbox.js +166 -0
  22. package/dist/authoring/toolbox.js.map +1 -0
  23. package/dist/authoring/triggers.d.ts +41 -0
  24. package/dist/authoring/triggers.d.ts.map +1 -0
  25. package/dist/authoring/triggers.js +60 -0
  26. package/dist/authoring/triggers.js.map +1 -0
  27. package/dist/authoring/types.d.ts +111 -0
  28. package/dist/authoring/types.d.ts.map +1 -0
  29. package/dist/authoring/types.js +9 -0
  30. package/dist/authoring/types.js.map +1 -0
  31. package/dist/cli/commands/activity-cmd.d.ts +28 -0
  32. package/dist/cli/commands/activity-cmd.d.ts.map +1 -0
  33. package/dist/cli/commands/activity-cmd.js +78 -0
  34. package/dist/cli/commands/activity-cmd.js.map +1 -0
  35. package/dist/cli/commands/attach-cmd.d.ts +38 -0
  36. package/dist/cli/commands/attach-cmd.d.ts.map +1 -0
  37. package/dist/cli/commands/attach-cmd.js +141 -0
  38. package/dist/cli/commands/attach-cmd.js.map +1 -0
  39. package/dist/cli/commands/data-contracts-cmd.d.ts +8 -0
  40. package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -1
  41. package/dist/cli/commands/data-contracts-cmd.js +11 -0
  42. package/dist/cli/commands/data-contracts-cmd.js.map +1 -1
  43. package/dist/cli/commands/data-products-cmd.d.ts +2 -0
  44. package/dist/cli/commands/data-products-cmd.d.ts.map +1 -1
  45. package/dist/cli/commands/data-products-cmd.js +35 -0
  46. package/dist/cli/commands/data-products-cmd.js.map +1 -1
  47. package/dist/cli/commands/deploy-cmd.d.ts +101 -0
  48. package/dist/cli/commands/deploy-cmd.d.ts.map +1 -0
  49. package/dist/cli/commands/deploy-cmd.js +461 -0
  50. package/dist/cli/commands/deploy-cmd.js.map +1 -0
  51. package/dist/cli/commands/generate-cmd.d.ts +35 -0
  52. package/dist/cli/commands/generate-cmd.d.ts.map +1 -0
  53. package/dist/cli/commands/generate-cmd.js +134 -0
  54. package/dist/cli/commands/generate-cmd.js.map +1 -0
  55. package/dist/cli/commands/improvements-cmd.d.ts +44 -0
  56. package/dist/cli/commands/improvements-cmd.d.ts.map +1 -0
  57. package/dist/cli/commands/improvements-cmd.js +215 -0
  58. package/dist/cli/commands/improvements-cmd.js.map +1 -0
  59. package/dist/cli/commands/init-cmd.d.ts +78 -0
  60. package/dist/cli/commands/init-cmd.d.ts.map +1 -0
  61. package/dist/cli/commands/init-cmd.js +250 -0
  62. package/dist/cli/commands/init-cmd.js.map +1 -0
  63. package/dist/cli/commands/instances-cmd.d.ts +37 -0
  64. package/dist/cli/commands/instances-cmd.d.ts.map +1 -0
  65. package/dist/cli/commands/instances-cmd.js +150 -0
  66. package/dist/cli/commands/instances-cmd.js.map +1 -0
  67. package/dist/cli/commands/test-cmd.d.ts +89 -0
  68. package/dist/cli/commands/test-cmd.d.ts.map +1 -0
  69. package/dist/cli/commands/test-cmd.js +378 -0
  70. package/dist/cli/commands/test-cmd.js.map +1 -0
  71. package/dist/cli/index.d.ts +5 -2
  72. package/dist/cli/index.d.ts.map +1 -1
  73. package/dist/cli/index.js +240 -8
  74. package/dist/cli/index.js.map +1 -1
  75. package/dist/cli/project-context.d.ts +153 -0
  76. package/dist/cli/project-context.d.ts.map +1 -0
  77. package/dist/cli/project-context.js +190 -0
  78. package/dist/cli/project-context.js.map +1 -0
  79. package/dist/client/activity-types.d.ts +66 -0
  80. package/dist/client/activity-types.d.ts.map +1 -0
  81. package/dist/client/activity-types.js +9 -0
  82. package/dist/client/activity-types.js.map +1 -0
  83. package/dist/client/activity.d.ts +22 -0
  84. package/dist/client/activity.d.ts.map +1 -0
  85. package/dist/client/activity.js +43 -0
  86. package/dist/client/activity.js.map +1 -0
  87. package/dist/client/data-products-types.d.ts +23 -0
  88. package/dist/client/data-products-types.d.ts.map +1 -1
  89. package/dist/client/data-products.d.ts +3 -1
  90. package/dist/client/data-products.d.ts.map +1 -1
  91. package/dist/client/data-products.js +20 -98
  92. package/dist/client/data-products.js.map +1 -1
  93. package/dist/client/{consumptions-types.d.ts → delivery-types.d.ts} +25 -8
  94. package/dist/client/delivery-types.d.ts.map +1 -0
  95. package/dist/client/delivery-types.js +10 -0
  96. package/dist/client/delivery-types.js.map +1 -0
  97. package/dist/client/delivery.d.ts +23 -0
  98. package/dist/client/delivery.d.ts.map +1 -0
  99. package/dist/client/delivery.js +105 -0
  100. package/dist/client/delivery.js.map +1 -0
  101. package/dist/client/flow-types.d.ts +4 -2
  102. package/dist/client/flow-types.d.ts.map +1 -1
  103. package/dist/client/flows.d.ts +1 -1
  104. package/dist/client/flows.d.ts.map +1 -1
  105. package/dist/client/flows.js +49 -124
  106. package/dist/client/flows.js.map +1 -1
  107. package/dist/client/improvements-types.d.ts +55 -0
  108. package/dist/client/improvements-types.d.ts.map +1 -0
  109. package/dist/client/improvements-types.js +9 -0
  110. package/dist/client/improvements-types.js.map +1 -0
  111. package/dist/client/improvements.d.ts +29 -0
  112. package/dist/client/improvements.d.ts.map +1 -0
  113. package/dist/client/improvements.js +50 -0
  114. package/dist/client/improvements.js.map +1 -0
  115. package/dist/client/index.d.ts +8 -3
  116. package/dist/client/index.d.ts.map +1 -1
  117. package/dist/client/index.js.map +1 -1
  118. package/dist/client/instances-types.d.ts +92 -0
  119. package/dist/client/instances-types.d.ts.map +1 -1
  120. package/dist/client/instances.d.ts +26 -4
  121. package/dist/client/instances.d.ts.map +1 -1
  122. package/dist/client/instances.js +94 -3
  123. package/dist/client/instances.js.map +1 -1
  124. package/dist/client/loxtep-client.d.ts +48 -3
  125. package/dist/client/loxtep-client.d.ts.map +1 -1
  126. package/dist/client/loxtep-client.js +73 -5
  127. package/dist/client/loxtep-client.js.map +1 -1
  128. package/dist/client/projects-types.d.ts +25 -0
  129. package/dist/client/projects-types.d.ts.map +1 -1
  130. package/dist/client/projects.d.ts +2 -1
  131. package/dist/client/projects.d.ts.map +1 -1
  132. package/dist/client/projects.js +17 -0
  133. package/dist/client/projects.js.map +1 -1
  134. package/dist/client/promises.d.ts +11 -0
  135. package/dist/client/promises.d.ts.map +1 -1
  136. package/dist/client/promises.js +11 -0
  137. package/dist/client/promises.js.map +1 -1
  138. package/dist/client/queue-types.d.ts +15 -2
  139. package/dist/client/queue-types.d.ts.map +1 -1
  140. package/dist/client/queues.d.ts.map +1 -1
  141. package/dist/client/queues.js +3 -14
  142. package/dist/client/queues.js.map +1 -1
  143. package/dist/client/schemas.d.ts +1 -0
  144. package/dist/client/schemas.d.ts.map +1 -1
  145. package/dist/client/schemas.js +4 -0
  146. package/dist/client/schemas.js.map +1 -1
  147. package/dist/client/thesaurus.d.ts +5 -0
  148. package/dist/client/thesaurus.d.ts.map +1 -1
  149. package/dist/client/thesaurus.js +12 -0
  150. package/dist/client/thesaurus.js.map +1 -1
  151. package/dist/codegen/emit.d.ts +25 -0
  152. package/dist/codegen/emit.d.ts.map +1 -0
  153. package/dist/codegen/emit.js +158 -0
  154. package/dist/codegen/emit.js.map +1 -0
  155. package/dist/codegen/index.d.ts +17 -0
  156. package/dist/codegen/index.d.ts.map +1 -0
  157. package/dist/codegen/index.js +16 -0
  158. package/dist/codegen/index.js.map +1 -0
  159. package/dist/codegen/load-workspace-context.d.ts +30 -0
  160. package/dist/codegen/load-workspace-context.d.ts.map +1 -0
  161. package/dist/codegen/load-workspace-context.js +127 -0
  162. package/dist/codegen/load-workspace-context.js.map +1 -0
  163. package/dist/codegen/normalize.d.ts +35 -0
  164. package/dist/codegen/normalize.d.ts.map +1 -0
  165. package/dist/codegen/normalize.js +77 -0
  166. package/dist/codegen/normalize.js.map +1 -0
  167. package/dist/codegen/types.d.ts +89 -0
  168. package/dist/codegen/types.d.ts.map +1 -0
  169. package/dist/codegen/types.js +9 -0
  170. package/dist/codegen/types.js.map +1 -0
  171. package/dist/codegen/write-artifact.d.ts +40 -0
  172. package/dist/codegen/write-artifact.d.ts.map +1 -0
  173. package/dist/codegen/write-artifact.js +74 -0
  174. package/dist/codegen/write-artifact.js.map +1 -0
  175. package/dist/config/index.d.ts +1 -0
  176. package/dist/config/index.d.ts.map +1 -1
  177. package/dist/config/index.js +1 -0
  178. package/dist/config/index.js.map +1 -1
  179. package/dist/config/workspace-config.d.ts +76 -0
  180. package/dist/config/workspace-config.d.ts.map +1 -0
  181. package/dist/config/workspace-config.js +129 -0
  182. package/dist/config/workspace-config.js.map +1 -0
  183. package/dist/index.d.ts +3 -0
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +3 -0
  186. package/dist/index.js.map +1 -1
  187. package/dist/rstreams/event-bridge.d.ts +16 -2
  188. package/dist/rstreams/event-bridge.d.ts.map +1 -1
  189. package/dist/rstreams/event-bridge.js +38 -5
  190. package/dist/rstreams/event-bridge.js.map +1 -1
  191. package/dist/skills/check-scope.d.ts +42 -0
  192. package/dist/skills/check-scope.d.ts.map +1 -0
  193. package/dist/skills/check-scope.js +84 -0
  194. package/dist/skills/check-scope.js.map +1 -0
  195. package/dist/skills/index.d.ts +14 -0
  196. package/dist/skills/index.d.ts.map +1 -0
  197. package/dist/skills/index.js +12 -0
  198. package/dist/skills/index.js.map +1 -0
  199. package/dist/skills/loader.d.ts +79 -0
  200. package/dist/skills/loader.d.ts.map +1 -0
  201. package/dist/skills/loader.js +102 -0
  202. package/dist/skills/loader.js.map +1 -0
  203. package/dist/skills/types.d.ts +55 -0
  204. package/dist/skills/types.d.ts.map +1 -0
  205. package/dist/skills/types.js +9 -0
  206. package/dist/skills/types.js.map +1 -0
  207. package/dist/skills/validate-references.d.ts +54 -0
  208. package/dist/skills/validate-references.d.ts.map +1 -0
  209. package/dist/skills/validate-references.js +80 -0
  210. package/dist/skills/validate-references.js.map +1 -0
  211. package/docs/getting-started.md +7 -0
  212. package/package.json +7 -5
  213. package/dist/cli/commands/data-assets-cmd.d.ts +0 -12
  214. package/dist/cli/commands/data-assets-cmd.d.ts.map +0 -1
  215. package/dist/cli/commands/data-assets-cmd.js +0 -75
  216. package/dist/cli/commands/data-assets-cmd.js.map +0 -1
  217. package/dist/cli/commands/pipelines-cmd.d.ts +0 -17
  218. package/dist/cli/commands/pipelines-cmd.d.ts.map +0 -1
  219. package/dist/cli/commands/pipelines-cmd.js +0 -52
  220. package/dist/cli/commands/pipelines-cmd.js.map +0 -1
  221. package/dist/cli/commands/promises-cmd.d.ts +0 -11
  222. package/dist/cli/commands/promises-cmd.d.ts.map +0 -1
  223. package/dist/cli/commands/promises-cmd.js +0 -53
  224. package/dist/cli/commands/promises-cmd.js.map +0 -1
  225. package/dist/client/consumptions-types.d.ts.map +0 -1
  226. package/dist/client/consumptions-types.js +0 -5
  227. package/dist/client/consumptions-types.js.map +0 -1
  228. package/dist/client/consumptions.d.ts +0 -14
  229. package/dist/client/consumptions.d.ts.map +0 -1
  230. package/dist/client/consumptions.js +0 -47
  231. package/dist/client/consumptions.js.map +0 -1
  232. package/dist/client/data-assets-types.d.ts +0 -150
  233. package/dist/client/data-assets-types.d.ts.map +0 -1
  234. package/dist/client/data-assets-types.js +0 -5
  235. package/dist/client/data-assets-types.js.map +0 -1
  236. package/dist/client/data-assets.d.ts +0 -31
  237. package/dist/client/data-assets.d.ts.map +0 -1
  238. package/dist/client/data-assets.js +0 -182
  239. package/dist/client/data-assets.js.map +0 -1
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Pure deploy compiler — `compileModule`
3
+ *
4
+ * Lowers a `DataWorkflowModule` into `GraphPatchOp[]` mirroring the backend's
5
+ * `graph-patch-apply.ts` shape. This is a pure function: no I/O, no network.
6
+ *
7
+ * Responsibilities:
8
+ * - Trigger → connection/ingestion node
9
+ * - Handler steps → transform node(s)
10
+ * - Sinks → data-product node(s)
11
+ * - Resolve `workflow_id` by name for in-place update (R3.5)
12
+ * - Collect `referencedResources` for pre-deploy existence validation (R1.8)
13
+ * - Compute removal set: modules on instance but absent from project (R3.7)
14
+ *
15
+ * Requirements: 3.4, 3.5, 3.7
16
+ */
17
+ // ────────────────────────────────────────────────────────────────────────────
18
+ // Internal helpers
19
+ // ────────────────────────────────────────────────────────────────────────────
20
+ /** Generate a deterministic node ID from module name + a suffix. */
21
+ function nodeId(workflowName, suffix) {
22
+ return `${workflowName}__${suffix}`;
23
+ }
24
+ /**
25
+ * Lower a single trigger into a connection/ingestion node + graph ops.
26
+ * Returns the entity_id of the created node so downstream nodes can connect.
27
+ */
28
+ function lowerTrigger(trigger, workflowName, index) {
29
+ const entityId = nodeId(workflowName, `trigger_${index}`);
30
+ const refs = [];
31
+ const entity = {
32
+ connection_id: entityId,
33
+ name: `${workflowName}_trigger_${index}`,
34
+ trigger_kind: trigger.kind,
35
+ };
36
+ if (trigger.ref) {
37
+ entity.source_id = trigger.ref.id;
38
+ entity.source_name = trigger.ref.name;
39
+ // Collect the resource reference
40
+ if (trigger.kind === 'queue') {
41
+ refs.push({ type: 'queue', id: trigger.ref.id, name: trigger.ref.name });
42
+ }
43
+ else if (trigger.kind === 'connector') {
44
+ refs.push({ type: 'connector', id: trigger.ref.id, name: trigger.ref.name });
45
+ }
46
+ }
47
+ if (trigger.schedule) {
48
+ entity.schedule = trigger.schedule;
49
+ }
50
+ if (trigger.path) {
51
+ entity.webhook_path = trigger.path;
52
+ }
53
+ const ops = [
54
+ { op: 'add_node', entity_type: 'connections', entity },
55
+ ];
56
+ return { ops, entityId, refs };
57
+ }
58
+ /**
59
+ * Lower the handler into a single transform node.
60
+ * The handler itself is stored as a reference (name-based) — the actual execution
61
+ * is handled at runtime by the deployed bot, not baked into the graph.
62
+ */
63
+ function lowerHandler(workflowName) {
64
+ const entityId = nodeId(workflowName, 'handler');
65
+ const entity = {
66
+ transformation_id: entityId,
67
+ name: `${workflowName}_handler`,
68
+ transform_type: 'code_handler',
69
+ module_name: workflowName,
70
+ };
71
+ const ops = [
72
+ { op: 'add_node', entity_type: 'transformations', entity },
73
+ ];
74
+ return { ops, entityId };
75
+ }
76
+ /**
77
+ * Resolve the `workflow_id` for a module by name from the NormalizedContext.
78
+ * If a workflow with the same name exists, returns its id for in-place update (R3.5).
79
+ */
80
+ function resolveWorkflowId(workflowName, ctx) {
81
+ const match = ctx.workflows.find((w) => w.data.name === workflowName);
82
+ return match?.data.id;
83
+ }
84
+ // ────────────────────────────────────────────────────────────────────────────
85
+ // Node compile-time validation (R10.3)
86
+ // ────────────────────────────────────────────────────────────────────────────
87
+ /**
88
+ * Validate declared nodes before lowering. Fail fast if:
89
+ * 1. Any node has an `upstream` that cannot be resolved to a known node name
90
+ * 2. Any ApprovalNodeSpec lacks at least one labeled downstream connection
91
+ *
92
+ * The `knownNames` map is seeded with trigger/handler names before this runs,
93
+ * and we also consider other declared node names as valid references.
94
+ */
95
+ function validateNodes(nodes, seedNames) {
96
+ // Build the full set of known names: seed names (triggers, handler) + all declared node names
97
+ const knownNames = new Set(seedNames.keys());
98
+ for (const node of nodes) {
99
+ knownNames.add(node.name);
100
+ }
101
+ for (const node of nodes) {
102
+ // Validate upstream is resolvable
103
+ if (!knownNames.has(node.upstream)) {
104
+ throw new Error(`Node "${node.name}" has upstream "${node.upstream}" which does not resolve to any known node.`);
105
+ }
106
+ // Validate ApprovalNodeSpec has at least one labeled downstream
107
+ if (node.kind === 'approval') {
108
+ if (!node.approved && !node.rejected) {
109
+ throw new Error(`Approval node "${node.name}" must have at least one labeled downstream connection (approved or rejected).`);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // ────────────────────────────────────────────────────────────────────────────
115
+ // Node lowering helpers
116
+ // ────────────────────────────────────────────────────────────────────────────
117
+ /**
118
+ * Lower the `nodes` array from a DataWorkflowModule into graph patch ops.
119
+ *
120
+ * For each declared node:
121
+ * - Emits an `add_node` op with the correct entity_type and config
122
+ * - Emits a `connect_nodes` op from the resolved upstream node
123
+ * - For ApprovalNodeSpec: emits `connect_nodes_labeled` for approved/rejected paths
124
+ * - For AgentNodeSpec: emits `connect_nodes_labeled` for error path
125
+ *
126
+ * The `nameToEntityId` map provides resolution of node names to entity_ids,
127
+ * seeded with trigger and handler entity ids before processing nodes.
128
+ */
129
+ function lowerNodes(nodes, workflowName, nameToEntityId) {
130
+ const ops = [];
131
+ // First pass: assign entity_ids for all declared nodes so cross-references resolve
132
+ for (const node of nodes) {
133
+ const entityId = nodeId(workflowName, `node_${node.name}`);
134
+ nameToEntityId.set(node.name, entityId);
135
+ }
136
+ // Second pass: emit ops for each node
137
+ for (const node of nodes) {
138
+ const entityId = nameToEntityId.get(node.name);
139
+ if (node.kind === 'approval') {
140
+ // Emit add_node for approval
141
+ const entity = {
142
+ approval_node_id: entityId,
143
+ name: node.name,
144
+ approval_channel: node.approvalChannel,
145
+ timeout_hours: node.timeoutHours,
146
+ };
147
+ if (node.description !== undefined) {
148
+ entity.description = node.description;
149
+ }
150
+ ops.push({ op: 'add_node', entity_type: 'approvals', entity });
151
+ // Emit connect_nodes from upstream
152
+ const upstreamId = nameToEntityId.get(node.upstream);
153
+ if (upstreamId) {
154
+ ops.push({ op: 'connect_nodes', from_entity_id: upstreamId, to_entity_id: entityId });
155
+ }
156
+ // Emit connect_nodes_labeled for approved path
157
+ if (node.approved) {
158
+ const approvedId = nameToEntityId.get(node.approved);
159
+ if (approvedId) {
160
+ ops.push({
161
+ op: 'connect_nodes_labeled',
162
+ from_entity_id: entityId,
163
+ to_entity_id: approvedId,
164
+ label: 'approved',
165
+ });
166
+ }
167
+ }
168
+ // Emit connect_nodes_labeled for rejected path
169
+ if (node.rejected) {
170
+ const rejectedId = nameToEntityId.get(node.rejected);
171
+ if (rejectedId) {
172
+ ops.push({
173
+ op: 'connect_nodes_labeled',
174
+ from_entity_id: entityId,
175
+ to_entity_id: rejectedId,
176
+ label: 'rejected',
177
+ });
178
+ }
179
+ }
180
+ }
181
+ else if (node.kind === 'agent') {
182
+ // Emit add_node for agent
183
+ const entity = {
184
+ agent_node_id: entityId,
185
+ name: node.name,
186
+ model_id: node.modelId,
187
+ prompt_template: node.promptTemplate,
188
+ timeout_seconds: node.timeoutSeconds ?? 30,
189
+ };
190
+ if (node.outputSchema !== undefined) {
191
+ entity.output_schema = node.outputSchema;
192
+ }
193
+ if (node.description !== undefined) {
194
+ entity.description = node.description;
195
+ }
196
+ ops.push({ op: 'add_node', entity_type: 'agents', entity });
197
+ // Emit connect_nodes from upstream
198
+ const upstreamId = nameToEntityId.get(node.upstream);
199
+ if (upstreamId) {
200
+ ops.push({ op: 'connect_nodes', from_entity_id: upstreamId, to_entity_id: entityId });
201
+ }
202
+ // Emit connect_nodes_labeled for error path
203
+ if (node.error) {
204
+ const errorId = nameToEntityId.get(node.error);
205
+ if (errorId) {
206
+ ops.push({
207
+ op: 'connect_nodes_labeled',
208
+ from_entity_id: entityId,
209
+ to_entity_id: errorId,
210
+ label: 'error',
211
+ });
212
+ }
213
+ }
214
+ }
215
+ }
216
+ return { ops };
217
+ }
218
+ // ────────────────────────────────────────────────────────────────────────────
219
+ // Public API
220
+ // ────────────────────────────────────────────────────────────────────────────
221
+ /**
222
+ * Compile a single `DataWorkflowModule` into a `CompiledWorkflow`.
223
+ *
224
+ * This is a **pure function**: it performs no I/O, no network calls. Given the
225
+ * same module and context, it always produces the same output.
226
+ *
227
+ * Graph lowering:
228
+ * - Each trigger → a `connections` (ingestion) node
229
+ * - The handler → a `transformations` node
230
+ * - All trigger nodes connect to the handler node
231
+ *
232
+ * @param mod - The data workflow module to compile
233
+ * @param ctx - The normalized workspace context (provides workflow identity lookup)
234
+ * @returns A `CompiledWorkflow` with ops, referencedResources, and optional workflow_id
235
+ */
236
+ export function compileModule(mod, ctx) {
237
+ const ops = [];
238
+ const referencedResources = [];
239
+ // Resolve workflow identity for in-place update (R3.5)
240
+ const workflow_id = resolveWorkflowId(mod.name, ctx);
241
+ // Lower each trigger into a connection/ingestion node
242
+ const triggerEntityIds = [];
243
+ for (let i = 0; i < mod.triggers.length; i++) {
244
+ const trigger = mod.triggers[i];
245
+ const result = lowerTrigger(trigger, mod.name, i);
246
+ ops.push(...result.ops);
247
+ triggerEntityIds.push(result.entityId);
248
+ referencedResources.push(...result.refs);
249
+ }
250
+ // Lower handler into a transform node
251
+ const handler = lowerHandler(mod.name);
252
+ ops.push(...handler.ops);
253
+ // Connect each trigger node to the handler node
254
+ for (const triggerId of triggerEntityIds) {
255
+ ops.push({
256
+ op: 'connect_nodes',
257
+ from_entity_id: triggerId,
258
+ to_entity_id: handler.entityId,
259
+ });
260
+ }
261
+ // Lower declarative nodes (approval gates, agent invocations) if present (R9.3, R9.4, R10.1, R10.2)
262
+ if (mod.nodes && mod.nodes.length > 0) {
263
+ // Build name-to-entityId map seeded with trigger/handler nodes
264
+ const nameToEntityId = new Map();
265
+ // Register trigger nodes by their constructed names (trigger_0, trigger_1, ...)
266
+ for (let i = 0; i < triggerEntityIds.length; i++) {
267
+ nameToEntityId.set(`trigger_${i}`, triggerEntityIds[i]);
268
+ }
269
+ // Register the handler node
270
+ nameToEntityId.set('handler', handler.entityId);
271
+ // Compile-time validation (R10.3): fail fast before emitting ops
272
+ validateNodes(mod.nodes, nameToEntityId);
273
+ const nodeResult = lowerNodes(mod.nodes, mod.name, nameToEntityId);
274
+ ops.push(...nodeResult.ops);
275
+ }
276
+ return {
277
+ name: mod.name,
278
+ ...(workflow_id !== undefined ? { workflow_id } : {}),
279
+ ops,
280
+ referencedResources,
281
+ };
282
+ }
283
+ /**
284
+ * Compute the removal set: workflows present on the instance but absent from
285
+ * the current set of project modules (R3.7).
286
+ *
287
+ * Returns `remove_node` operations for each workflow that should be deleted,
288
+ * along with the workflow identities (name + id) for reporting.
289
+ *
290
+ * @param projectModuleNames - The set of module names currently in the project
291
+ * @param ctx - The normalized workspace context (contains instance workflows)
292
+ * @returns An object with removal ops and the names/ids of removed workflows
293
+ */
294
+ export function computeRemovalSet(projectModuleNames, ctx) {
295
+ const removals = [];
296
+ const ops = [];
297
+ for (const wf of ctx.workflows) {
298
+ if (!projectModuleNames.has(wf.data.name)) {
299
+ removals.push({ name: wf.data.name, workflow_id: wf.data.id });
300
+ ops.push({ op: 'remove_node', entity_id: wf.data.id });
301
+ }
302
+ }
303
+ return { removals, ops };
304
+ }
305
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/authoring/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `defineDataWorkflow` factory — the core code-first authoring entry point.
3
+ *
4
+ * Validates the module specification synchronously using zod and throws a
5
+ * `ValidationError` naming the invalid argument on failure.
6
+ */
7
+ import type { DataWorkflowModule } from './types.js';
8
+ /**
9
+ * Validates a `DataWorkflowModule` specification and returns it unchanged.
10
+ *
11
+ * Throws `ValidationError` (from `@loxtep/sdk/errors`) with a `field_errors`
12
+ * entry naming the invalid argument when validation fails.
13
+ *
14
+ * Validation rules:
15
+ * - `name`: 1–64 characters (R3.1, R3.8)
16
+ * - `triggers`: at least 1 and at most 10 entries (R3.1, R3.8)
17
+ * - `requireApproval`: at most 100 entries, each 1–256 characters (R6.1)
18
+ *
19
+ * @param spec - The workflow module specification to validate.
20
+ * @returns The validated specification (unchanged).
21
+ * @throws {ValidationError} If any argument is invalid.
22
+ */
23
+ export declare function defineDataWorkflow(spec: DataWorkflowModule): DataWorkflowModule;
24
+ //# sourceMappingURL=define-data-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-data-workflow.d.ts","sourceRoot":"","sources":["../../src/authoring/define-data-workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAWrD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAiE/E"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * `defineDataWorkflow` factory — the core code-first authoring entry point.
3
+ *
4
+ * Validates the module specification synchronously using zod and throws a
5
+ * `ValidationError` naming the invalid argument on failure.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ValidationError } from '../errors/index.js';
9
+ /**
10
+ * Zod schema for the `requireApproval` array.
11
+ * Each entry is a non-empty string of 1–256 characters, with at most 100 entries.
12
+ */
13
+ const requireApprovalSchema = z
14
+ .array(z.string().min(1).max(256))
15
+ .max(100)
16
+ .optional();
17
+ /**
18
+ * Validates a `DataWorkflowModule` specification and returns it unchanged.
19
+ *
20
+ * Throws `ValidationError` (from `@loxtep/sdk/errors`) with a `field_errors`
21
+ * entry naming the invalid argument when validation fails.
22
+ *
23
+ * Validation rules:
24
+ * - `name`: 1–64 characters (R3.1, R3.8)
25
+ * - `triggers`: at least 1 and at most 10 entries (R3.1, R3.8)
26
+ * - `requireApproval`: at most 100 entries, each 1–256 characters (R6.1)
27
+ *
28
+ * @param spec - The workflow module specification to validate.
29
+ * @returns The validated specification (unchanged).
30
+ * @throws {ValidationError} If any argument is invalid.
31
+ */
32
+ export function defineDataWorkflow(spec) {
33
+ const errors = [];
34
+ // Validate name (1–64 characters)
35
+ if (typeof spec.name !== 'string' || spec.name.length < 1 || spec.name.length > 64) {
36
+ errors.push({
37
+ field: 'name',
38
+ message: `name must be between 1 and 64 characters, got ${typeof spec.name === 'string' ? spec.name.length : typeof spec.name}`,
39
+ });
40
+ }
41
+ // Validate triggers (1–10)
42
+ if (!Array.isArray(spec.triggers) || spec.triggers.length < 1 || spec.triggers.length > 10) {
43
+ const count = Array.isArray(spec.triggers) ? spec.triggers.length : 0;
44
+ errors.push({
45
+ field: 'triggers',
46
+ message: `triggers must contain between 1 and 10 entries, got ${count}`,
47
+ });
48
+ }
49
+ // Validate requireApproval (≤100 entries, each 1–256 chars)
50
+ if (spec.requireApproval !== undefined) {
51
+ const result = requireApprovalSchema.safeParse(spec.requireApproval);
52
+ if (!result.success) {
53
+ const zodIssues = result.error.issues;
54
+ // Provide a targeted message based on the zod failure
55
+ const issue = zodIssues[0];
56
+ if (issue) {
57
+ if (issue.code === 'too_big' && issue.path.length === 0) {
58
+ errors.push({
59
+ field: 'requireApproval',
60
+ message: `requireApproval must contain at most 100 entries, got ${spec.requireApproval.length}`,
61
+ });
62
+ }
63
+ else if (issue.code === 'too_small' && issue.path.length > 0) {
64
+ const idx = String(issue.path[0]);
65
+ errors.push({
66
+ field: 'requireApproval',
67
+ message: `requireApproval[${idx}] must be between 1 and 256 characters`,
68
+ });
69
+ }
70
+ else if (issue.code === 'too_big' && issue.path.length > 0) {
71
+ const idx = issue.path[0];
72
+ const idxStr = String(idx);
73
+ errors.push({
74
+ field: 'requireApproval',
75
+ message: `requireApproval[${idxStr}] must be between 1 and 256 characters, got ${spec.requireApproval[idx]?.length}`,
76
+ });
77
+ }
78
+ else {
79
+ errors.push({
80
+ field: 'requireApproval',
81
+ message: `requireApproval is invalid: ${issue.message}`,
82
+ });
83
+ }
84
+ }
85
+ }
86
+ }
87
+ if (errors.length > 0) {
88
+ const message = errors.map((e) => `${e.field}: ${e.message}`).join('; ');
89
+ throw new ValidationError(`Invalid defineDataWorkflow specification: ${message}`, errors);
90
+ }
91
+ return spec;
92
+ }
93
+ //# sourceMappingURL=define-data-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-data-workflow.js","sourceRoot":"","sources":["../../src/authoring/define-data-workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Code-first data workflow authoring surface.
3
+ *
4
+ * Entry points:
5
+ * - `defineDataWorkflow` — validates and returns a `DataWorkflowModule` spec
6
+ * - `on` — trigger builders (`queueEvent`, `connectorEvent`, `schedule`, `webhook`)
7
+ * - `createToolbox` — deterministic typed platform calls (no model in the loop)
8
+ * - `agent` — agentic operation entry point with scope enforcement and action trace
9
+ */
10
+ export { defineDataWorkflow } from './define-data-workflow.js';
11
+ export { on } from './triggers.js';
12
+ export { createToolbox, ToolboxOperationError } from './toolbox.js';
13
+ export { agent, validateAgentOptions, computeReachableScope, enforceAgentScope, createScopeGuardedToolbox, ActionTrace, AgentScopeError, } from './agent.js';
14
+ export type { DataWorkflowModule, TriggerSpec, QueueRef, ConnectorRef, HandlerContext, ApprovalNodeSpec, AgentNodeSpec, } from './types.js';
15
+ export { compileModule, computeRemovalSet } from './compiler.js';
16
+ export type { GraphPatchOp, ResourceRef, CompiledWorkflow, } from './compiler.js';
17
+ export type { Toolbox, ToolboxDataProducts, ToolboxQueues, ToolboxConnections, ToolboxWorkflows, CreateToolboxOptions, DataProductRef, WorkflowRef, WriteResult, QueryRows, } from './toolbox.js';
18
+ export type { SkillRef, AgentOptions, ActionOutcome, ActionTraceEntry, AgentResult, AgentExecutionContext, } from './agent.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,OAAO,EACP,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Code-first data workflow authoring surface.
3
+ *
4
+ * Entry points:
5
+ * - `defineDataWorkflow` — validates and returns a `DataWorkflowModule` spec
6
+ * - `on` — trigger builders (`queueEvent`, `connectorEvent`, `schedule`, `webhook`)
7
+ * - `createToolbox` — deterministic typed platform calls (no model in the loop)
8
+ * - `agent` — agentic operation entry point with scope enforcement and action trace
9
+ */
10
+ export { defineDataWorkflow } from './define-data-workflow.js';
11
+ export { on } from './triggers.js';
12
+ export { createToolbox, ToolboxOperationError } from './toolbox.js';
13
+ export { agent, validateAgentOptions, computeReachableScope, enforceAgentScope, createScopeGuardedToolbox, ActionTrace, AgentScopeError, } from './agent.js';
14
+ export { compileModule, computeRemovalSet } from './compiler.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authoring/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Deterministic `toolbox` namespace — direct, typed platform calls with no model
3
+ * in the loop (R4.1, R4.7).
4
+ *
5
+ * Each method is a thin wrapper over the corresponding `LoxtepClient` namespace
6
+ * method. On success, it returns a typed result. On failure, it throws a
7
+ * `ToolboxOperationError` identifying the failed operation — it never falls back
8
+ * to a model.
9
+ */
10
+ import type { LoxtepClient } from '../client/loxtep-client.js';
11
+ import type { DataProduct, DataProductQueryResult } from '../client/data-products-types.js';
12
+ import type { Connection, ConnectionTestResult } from '../client/connection-types.js';
13
+ import type { Flow } from '../client/flow-types.js';
14
+ import type { WorkflowGraph } from '../client/workflows-types.js';
15
+ import type { QueueRef } from './types.js';
16
+ import { LoxtepError } from '../errors/base.js';
17
+ /** Result of a data product write operation. */
18
+ export interface WriteResult {
19
+ /** Whether the write succeeded. */
20
+ success: true;
21
+ /** Number of events written. */
22
+ events_written: number;
23
+ }
24
+ /** Rows returned from a data product query. */
25
+ export interface QueryRows {
26
+ items: Record<string, unknown>[];
27
+ metadata: DataProductQueryResult['metadata'];
28
+ }
29
+ /**
30
+ * Error thrown when a deterministic toolbox operation fails.
31
+ * Identifies the failed operation and namespace so the caller can
32
+ * distinguish it from other errors.
33
+ *
34
+ * Per R4.7 — the SDK never falls back to a model on failure.
35
+ */
36
+ export declare class ToolboxOperationError extends LoxtepError {
37
+ /** The toolbox namespace where the failure occurred (e.g. 'dataProducts'). */
38
+ readonly namespace: string;
39
+ /** The operation that failed (e.g. 'write', 'query', 'list'). */
40
+ readonly operation: string;
41
+ constructor(namespace: string, operation: string, message: string, cause?: unknown);
42
+ }
43
+ /** Typed reference to a data product from the Generated_SDK_Artifact. */
44
+ export interface DataProductRef {
45
+ id: string;
46
+ name: string;
47
+ }
48
+ /** Typed reference to a workflow from the Generated_SDK_Artifact. */
49
+ export interface WorkflowRef {
50
+ id: string;
51
+ name: string;
52
+ }
53
+ export type { QueueRef, ConnectorRef } from './types.js';
54
+ /**
55
+ * Data products toolbox — deterministic operations on data products.
56
+ */
57
+ export interface ToolboxDataProducts {
58
+ /** Write an event to a data product's stream queue. */
59
+ write(ref: DataProductRef, event: unknown): Promise<WriteResult>;
60
+ /** Execute a SQL query against a data product. */
61
+ query(ref: DataProductRef, sql: string): Promise<QueryRows>;
62
+ /** Get a data product by reference. */
63
+ get(ref: DataProductRef): Promise<DataProduct>;
64
+ /** List data products (optionally filtered by domain). */
65
+ list(filters?: {
66
+ domain_id?: string;
67
+ }): Promise<DataProduct[]>;
68
+ }
69
+ /**
70
+ * Queues toolbox — deterministic operations on queues.
71
+ */
72
+ export interface ToolboxQueues {
73
+ /** Write an event to a queue. */
74
+ write(ref: QueueRef, event: unknown): Promise<void>;
75
+ /** Get queue metadata. */
76
+ getMetadata(ref: QueueRef): Promise<{
77
+ queue_name: string;
78
+ [key: string]: unknown;
79
+ }>;
80
+ }
81
+ /**
82
+ * Connections toolbox — deterministic operations on connections.
83
+ */
84
+ export interface ToolboxConnections {
85
+ /** List connections for the project. */
86
+ list(): Promise<Connection[]>;
87
+ /** Get a specific connection. */
88
+ get(connectionId: string): Promise<Connection>;
89
+ /** Test a connection. */
90
+ test(connectionId: string): Promise<ConnectionTestResult>;
91
+ }
92
+ /**
93
+ * Workflows toolbox — deterministic operations on workflows.
94
+ */
95
+ export interface ToolboxWorkflows {
96
+ /** List workflows for the project. */
97
+ list(): Promise<Flow[]>;
98
+ /** Get a workflow's graph. */
99
+ getGraph(ref: WorkflowRef): Promise<WorkflowGraph>;
100
+ }
101
+ /**
102
+ * The deterministic Toolbox namespace — thin typed wrappers over
103
+ * `LoxtepClient` namespaces. Each method returns typed results or throws a
104
+ * `ToolboxOperationError`. No model is ever invoked.
105
+ */
106
+ export interface Toolbox {
107
+ dataProducts: ToolboxDataProducts;
108
+ queues: ToolboxQueues;
109
+ connections: ToolboxConnections;
110
+ workflows: ToolboxWorkflows;
111
+ }
112
+ /**
113
+ * Options for creating a toolbox.
114
+ */
115
+ export interface CreateToolboxOptions {
116
+ /** The LoxtepClient instance to use for platform calls. */
117
+ client: LoxtepClient;
118
+ /** The project ID (used for project-scoped operations). */
119
+ projectId: string;
120
+ }
121
+ /**
122
+ * Create a `Toolbox` — deterministic, typed platform operations with no model
123
+ * in the loop.
124
+ *
125
+ * On success each method returns a typed result. On failure, a
126
+ * `ToolboxOperationError` is thrown identifying the failed operation.
127
+ * The toolbox never falls back to an AI model.
128
+ *
129
+ * @param options - Client and project configuration.
130
+ * @returns A `Toolbox` instance.
131
+ */
132
+ export declare function createToolbox(options: CreateToolboxOptions): Toolbox;
133
+ //# sourceMappingURL=toolbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbox.d.ts","sourceRoot":"","sources":["../../src/authoring/toolbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;CAC9C;AAID;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAGzB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO;CAmBlB;AAID,yEAAyE;AACzE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,kDAAkD;IAClD,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5D,uCAAuC;IACvC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,0DAA0D;IAC1D,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,0BAA0B;IAC1B,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9B,iCAAiC;IACjC,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,yBAAyB;IACzB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAID;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,MAAM,EAAE,YAAY,CAAC;IACrB,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CA0KpE"}