@arke-institute/rhiza 0.1.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 (230) hide show
  1. package/README.md +106 -0
  2. package/dist/__tests__/fixtures/index.d.ts +9 -0
  3. package/dist/__tests__/fixtures/index.d.ts.map +1 -0
  4. package/dist/__tests__/fixtures/index.js +12 -0
  5. package/dist/__tests__/fixtures/index.js.map +1 -0
  6. package/dist/__tests__/fixtures/kladoi/index.d.ts +165 -0
  7. package/dist/__tests__/fixtures/kladoi/index.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/kladoi/index.js +270 -0
  9. package/dist/__tests__/fixtures/kladoi/index.js.map +1 -0
  10. package/dist/__tests__/fixtures/logs/index.d.ts +19 -0
  11. package/dist/__tests__/fixtures/logs/index.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/logs/index.js +545 -0
  13. package/dist/__tests__/fixtures/logs/index.js.map +1 -0
  14. package/dist/__tests__/fixtures/mock-client.d.ts +127 -0
  15. package/dist/__tests__/fixtures/mock-client.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/mock-client.js +415 -0
  17. package/dist/__tests__/fixtures/mock-client.js.map +1 -0
  18. package/dist/__tests__/fixtures/rhizai/index.d.ts +54 -0
  19. package/dist/__tests__/fixtures/rhizai/index.d.ts.map +1 -0
  20. package/dist/__tests__/fixtures/rhizai/index.js +283 -0
  21. package/dist/__tests__/fixtures/rhizai/index.js.map +1 -0
  22. package/dist/__tests__/unit/fixtures.test.d.ts +10 -0
  23. package/dist/__tests__/unit/fixtures.test.d.ts.map +1 -0
  24. package/dist/__tests__/unit/fixtures.test.js +275 -0
  25. package/dist/__tests__/unit/fixtures.test.js.map +1 -0
  26. package/dist/__tests__/unit/handoff/gather.test.d.ts +8 -0
  27. package/dist/__tests__/unit/handoff/gather.test.d.ts.map +1 -0
  28. package/dist/__tests__/unit/handoff/gather.test.js +176 -0
  29. package/dist/__tests__/unit/handoff/gather.test.js.map +1 -0
  30. package/dist/__tests__/unit/handoff/interpret.test.d.ts +9 -0
  31. package/dist/__tests__/unit/handoff/interpret.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit/handoff/interpret.test.js +370 -0
  33. package/dist/__tests__/unit/handoff/interpret.test.js.map +1 -0
  34. package/dist/__tests__/unit/handoff/route.test.d.ts +8 -0
  35. package/dist/__tests__/unit/handoff/route.test.d.ts.map +1 -0
  36. package/dist/__tests__/unit/handoff/route.test.js +271 -0
  37. package/dist/__tests__/unit/handoff/route.test.js.map +1 -0
  38. package/dist/__tests__/unit/handoff/scatter.test.d.ts +7 -0
  39. package/dist/__tests__/unit/handoff/scatter.test.d.ts.map +1 -0
  40. package/dist/__tests__/unit/handoff/scatter.test.js +54 -0
  41. package/dist/__tests__/unit/handoff/scatter.test.js.map +1 -0
  42. package/dist/__tests__/unit/resume.test.d.ts +8 -0
  43. package/dist/__tests__/unit/resume.test.d.ts.map +1 -0
  44. package/dist/__tests__/unit/resume.test.js +134 -0
  45. package/dist/__tests__/unit/resume.test.js.map +1 -0
  46. package/dist/__tests__/unit/status.test.d.ts +8 -0
  47. package/dist/__tests__/unit/status.test.d.ts.map +1 -0
  48. package/dist/__tests__/unit/status.test.js +164 -0
  49. package/dist/__tests__/unit/status.test.js.map +1 -0
  50. package/dist/__tests__/unit/target.test.d.ts +8 -0
  51. package/dist/__tests__/unit/target.test.d.ts.map +1 -0
  52. package/dist/__tests__/unit/target.test.js +116 -0
  53. package/dist/__tests__/unit/target.test.js.map +1 -0
  54. package/dist/__tests__/unit/traverse.test.d.ts +8 -0
  55. package/dist/__tests__/unit/traverse.test.d.ts.map +1 -0
  56. package/dist/__tests__/unit/traverse.test.js +143 -0
  57. package/dist/__tests__/unit/traverse.test.js.map +1 -0
  58. package/dist/__tests__/unit/validation/klados.test.d.ts +16 -0
  59. package/dist/__tests__/unit/validation/klados.test.d.ts.map +1 -0
  60. package/dist/__tests__/unit/validation/klados.test.js +275 -0
  61. package/dist/__tests__/unit/validation/klados.test.js.map +1 -0
  62. package/dist/__tests__/unit/validation/rhiza.test.d.ts +16 -0
  63. package/dist/__tests__/unit/validation/rhiza.test.d.ts.map +1 -0
  64. package/dist/__tests__/unit/validation/rhiza.test.js +612 -0
  65. package/dist/__tests__/unit/validation/rhiza.test.js.map +1 -0
  66. package/dist/__tests__/unit/validation/runtime.test.d.ts +11 -0
  67. package/dist/__tests__/unit/validation/runtime.test.d.ts.map +1 -0
  68. package/dist/__tests__/unit/validation/runtime.test.js +553 -0
  69. package/dist/__tests__/unit/validation/runtime.test.js.map +1 -0
  70. package/dist/__tests__/unit/worker/errors.test.d.ts +2 -0
  71. package/dist/__tests__/unit/worker/errors.test.d.ts.map +1 -0
  72. package/dist/__tests__/unit/worker/errors.test.js +226 -0
  73. package/dist/__tests__/unit/worker/errors.test.js.map +1 -0
  74. package/dist/__tests__/unit/worker/job.test.d.ts +2 -0
  75. package/dist/__tests__/unit/worker/job.test.d.ts.map +1 -0
  76. package/dist/__tests__/unit/worker/job.test.js +233 -0
  77. package/dist/__tests__/unit/worker/job.test.js.map +1 -0
  78. package/dist/client/index.d.ts +10 -0
  79. package/dist/client/index.d.ts.map +1 -0
  80. package/dist/client/index.js +8 -0
  81. package/dist/client/index.js.map +1 -0
  82. package/dist/client/interface.d.ts +142 -0
  83. package/dist/client/interface.d.ts.map +1 -0
  84. package/dist/client/interface.js +8 -0
  85. package/dist/client/interface.js.map +1 -0
  86. package/dist/client/mock.d.ts +95 -0
  87. package/dist/client/mock.d.ts.map +1 -0
  88. package/dist/client/mock.js +795 -0
  89. package/dist/client/mock.js.map +1 -0
  90. package/dist/client/types.d.ts +344 -0
  91. package/dist/client/types.d.ts.map +1 -0
  92. package/dist/client/types.js +8 -0
  93. package/dist/client/types.js.map +1 -0
  94. package/dist/handoff/gather-api.d.ts +60 -0
  95. package/dist/handoff/gather-api.d.ts.map +1 -0
  96. package/dist/handoff/gather-api.js +130 -0
  97. package/dist/handoff/gather-api.js.map +1 -0
  98. package/dist/handoff/gather.d.ts +59 -0
  99. package/dist/handoff/gather.d.ts.map +1 -0
  100. package/dist/handoff/gather.js +134 -0
  101. package/dist/handoff/gather.js.map +1 -0
  102. package/dist/handoff/index.d.ts +19 -0
  103. package/dist/handoff/index.d.ts.map +1 -0
  104. package/dist/handoff/index.js +25 -0
  105. package/dist/handoff/index.js.map +1 -0
  106. package/dist/handoff/interpret.d.ts +79 -0
  107. package/dist/handoff/interpret.d.ts.map +1 -0
  108. package/dist/handoff/interpret.js +197 -0
  109. package/dist/handoff/interpret.js.map +1 -0
  110. package/dist/handoff/invoke.d.ts +82 -0
  111. package/dist/handoff/invoke.d.ts.map +1 -0
  112. package/dist/handoff/invoke.js +196 -0
  113. package/dist/handoff/invoke.js.map +1 -0
  114. package/dist/handoff/route.d.ts +25 -0
  115. package/dist/handoff/route.d.ts.map +1 -0
  116. package/dist/handoff/route.js +65 -0
  117. package/dist/handoff/route.js.map +1 -0
  118. package/dist/handoff/scatter-api.d.ts +62 -0
  119. package/dist/handoff/scatter-api.d.ts.map +1 -0
  120. package/dist/handoff/scatter-api.js +81 -0
  121. package/dist/handoff/scatter-api.js.map +1 -0
  122. package/dist/handoff/scatter.d.ts +19 -0
  123. package/dist/handoff/scatter.d.ts.map +1 -0
  124. package/dist/handoff/scatter.js +27 -0
  125. package/dist/handoff/scatter.js.map +1 -0
  126. package/dist/handoff/target.d.ts +16 -0
  127. package/dist/handoff/target.d.ts.map +1 -0
  128. package/dist/handoff/target.js +51 -0
  129. package/dist/handoff/target.js.map +1 -0
  130. package/dist/index.d.ts +42 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +52 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/logging/index.d.ts +4 -0
  135. package/dist/logging/index.d.ts.map +1 -0
  136. package/dist/logging/index.js +3 -0
  137. package/dist/logging/index.js.map +1 -0
  138. package/dist/logging/logger.d.ts +52 -0
  139. package/dist/logging/logger.d.ts.map +1 -0
  140. package/dist/logging/logger.js +70 -0
  141. package/dist/logging/logger.js.map +1 -0
  142. package/dist/logging/writer.d.ts +63 -0
  143. package/dist/logging/writer.d.ts.map +1 -0
  144. package/dist/logging/writer.js +160 -0
  145. package/dist/logging/writer.js.map +1 -0
  146. package/dist/resume/index.d.ts +77 -0
  147. package/dist/resume/index.d.ts.map +1 -0
  148. package/dist/resume/index.js +110 -0
  149. package/dist/resume/index.js.map +1 -0
  150. package/dist/status/index.d.ts +54 -0
  151. package/dist/status/index.d.ts.map +1 -0
  152. package/dist/status/index.js +107 -0
  153. package/dist/status/index.js.map +1 -0
  154. package/dist/traverse/index.d.ts +53 -0
  155. package/dist/traverse/index.d.ts.map +1 -0
  156. package/dist/traverse/index.js +142 -0
  157. package/dist/traverse/index.js.map +1 -0
  158. package/dist/types/batch.d.ts +53 -0
  159. package/dist/types/batch.d.ts.map +1 -0
  160. package/dist/types/batch.js +2 -0
  161. package/dist/types/batch.js.map +1 -0
  162. package/dist/types/index.d.ts +10 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +2 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/types/klados.d.ts +63 -0
  167. package/dist/types/klados.d.ts.map +1 -0
  168. package/dist/types/klados.js +2 -0
  169. package/dist/types/klados.js.map +1 -0
  170. package/dist/types/log.d.ts +107 -0
  171. package/dist/types/log.d.ts.map +1 -0
  172. package/dist/types/log.js +2 -0
  173. package/dist/types/log.js.map +1 -0
  174. package/dist/types/refs.d.ts +58 -0
  175. package/dist/types/refs.d.ts.map +1 -0
  176. package/dist/types/refs.js +43 -0
  177. package/dist/types/refs.js.map +1 -0
  178. package/dist/types/request.d.ts +69 -0
  179. package/dist/types/request.d.ts.map +1 -0
  180. package/dist/types/request.js +2 -0
  181. package/dist/types/request.js.map +1 -0
  182. package/dist/types/response.d.ts +31 -0
  183. package/dist/types/response.d.ts.map +1 -0
  184. package/dist/types/response.js +2 -0
  185. package/dist/types/response.js.map +1 -0
  186. package/dist/types/rhiza.d.ts +100 -0
  187. package/dist/types/rhiza.d.ts.map +1 -0
  188. package/dist/types/rhiza.js +2 -0
  189. package/dist/types/rhiza.js.map +1 -0
  190. package/dist/types/status.d.ts +84 -0
  191. package/dist/types/status.d.ts.map +1 -0
  192. package/dist/types/status.js +2 -0
  193. package/dist/types/status.js.map +1 -0
  194. package/dist/utils/id.d.ts +15 -0
  195. package/dist/utils/id.d.ts.map +1 -0
  196. package/dist/utils/id.js +25 -0
  197. package/dist/utils/id.js.map +1 -0
  198. package/dist/utils/index.d.ts +2 -0
  199. package/dist/utils/index.d.ts.map +1 -0
  200. package/dist/utils/index.js +2 -0
  201. package/dist/utils/index.js.map +1 -0
  202. package/dist/validation/index.d.ts +9 -0
  203. package/dist/validation/index.d.ts.map +1 -0
  204. package/dist/validation/index.js +9 -0
  205. package/dist/validation/index.js.map +1 -0
  206. package/dist/validation/validate-klados.d.ts +38 -0
  207. package/dist/validation/validate-klados.d.ts.map +1 -0
  208. package/dist/validation/validate-klados.js +139 -0
  209. package/dist/validation/validate-klados.js.map +1 -0
  210. package/dist/validation/validate-rhiza.d.ts +29 -0
  211. package/dist/validation/validate-rhiza.d.ts.map +1 -0
  212. package/dist/validation/validate-rhiza.js +382 -0
  213. package/dist/validation/validate-rhiza.js.map +1 -0
  214. package/dist/validation/validate-runtime.d.ts +28 -0
  215. package/dist/validation/validate-runtime.d.ts.map +1 -0
  216. package/dist/validation/validate-runtime.js +212 -0
  217. package/dist/validation/validate-runtime.js.map +1 -0
  218. package/dist/worker/errors.d.ts +77 -0
  219. package/dist/worker/errors.d.ts.map +1 -0
  220. package/dist/worker/errors.js +143 -0
  221. package/dist/worker/errors.js.map +1 -0
  222. package/dist/worker/index.d.ts +8 -0
  223. package/dist/worker/index.d.ts.map +1 -0
  224. package/dist/worker/index.js +8 -0
  225. package/dist/worker/index.js.map +1 -0
  226. package/dist/worker/job.d.ts +150 -0
  227. package/dist/worker/job.d.ts.map +1 -0
  228. package/dist/worker/job.js +280 -0
  229. package/dist/worker/job.js.map +1 -0
  230. package/package.json +48 -0
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Mock Rhiza Fixtures
3
+ *
4
+ * Pre-configured rhiza workflows for testing:
5
+ * - linear: Simple A → B → C chain
6
+ * - scatterGather: Fan-out/fan-in pattern
7
+ * - conditional: Routing based on entity properties
8
+ * - subWorkflow: Nested rhiza invocation
9
+ * - invalid: Various invalid configurations
10
+ */
11
+ import { ref } from '../../../types';
12
+ // ============================================================================
13
+ // Linear Workflow
14
+ // ============================================================================
15
+ export const linearFlow = {
16
+ 'II01klados_a': { then: { pass: ref('II01klados_b', { type: 'klados' }) } },
17
+ 'II01klados_b': { then: { pass: ref('II01klados_c', { type: 'klados' }) } },
18
+ 'II01klados_c': { then: { done: true } },
19
+ };
20
+ export const linearRhizaProperties = {
21
+ label: 'Linear Workflow',
22
+ description: 'Simple A → B → C chain for testing basic flow',
23
+ version: '1.0.0',
24
+ entry: ref('II01klados_a', { type: 'klados' }),
25
+ flow: linearFlow,
26
+ status: 'active',
27
+ created_at: '2025-01-01T00:00:00Z',
28
+ updated_at: '2025-01-01T00:00:00Z',
29
+ };
30
+ export const linearRhiza = {
31
+ properties: linearRhizaProperties,
32
+ cid: 'cid_linear_rhiza_v1',
33
+ };
34
+ // ============================================================================
35
+ // Scatter-Gather Workflow
36
+ // ============================================================================
37
+ export const scatterGatherFlow = {
38
+ 'II01klados_producer': { then: { scatter: ref('II01klados_worker', { type: 'klados' }) } },
39
+ 'II01klados_worker': { then: { gather: ref('II01klados_aggregator', { type: 'klados' }) } },
40
+ 'II01klados_aggregator': { then: { done: true } },
41
+ };
42
+ export const scatterGatherRhizaProperties = {
43
+ label: 'Scatter-Gather Workflow',
44
+ description: 'Fan-out to workers, fan-in to aggregator',
45
+ version: '1.0.0',
46
+ entry: ref('II01klados_producer', { type: 'klados' }),
47
+ flow: scatterGatherFlow,
48
+ status: 'active',
49
+ created_at: '2025-01-01T00:00:00Z',
50
+ updated_at: '2025-01-01T00:00:00Z',
51
+ };
52
+ export const scatterGatherRhiza = {
53
+ properties: scatterGatherRhizaProperties,
54
+ cid: 'cid_scatter_gather_rhiza_v1',
55
+ };
56
+ // ============================================================================
57
+ // Conditional Routing Workflow
58
+ // ============================================================================
59
+ export const conditionalFlow = {
60
+ 'II01klados_classifier': {
61
+ then: {
62
+ pass: ref('II01klados_default_handler', { type: 'klados' }),
63
+ route: [
64
+ {
65
+ where: { property: 'content_type', equals: 'file/pdf' },
66
+ target: ref('II01klados_pdf_handler', { type: 'klados' }),
67
+ },
68
+ {
69
+ where: {
70
+ or: [
71
+ { property: 'content_type', equals: 'file/jpeg' },
72
+ { property: 'content_type', equals: 'file/png' },
73
+ ],
74
+ },
75
+ target: ref('II01klados_image_handler', { type: 'klados' }),
76
+ },
77
+ ],
78
+ },
79
+ },
80
+ 'II01klados_pdf_handler': { then: { done: true } },
81
+ 'II01klados_image_handler': { then: { done: true } },
82
+ 'II01klados_default_handler': { then: { done: true } },
83
+ };
84
+ export const conditionalRhizaProperties = {
85
+ label: 'Conditional Workflow',
86
+ description: 'Routes to different handlers based on content type',
87
+ version: '1.0.0',
88
+ entry: ref('II01klados_classifier', { type: 'klados' }),
89
+ flow: conditionalFlow,
90
+ status: 'active',
91
+ created_at: '2025-01-01T00:00:00Z',
92
+ updated_at: '2025-01-01T00:00:00Z',
93
+ };
94
+ export const conditionalRhiza = {
95
+ properties: conditionalRhizaProperties,
96
+ cid: 'cid_conditional_rhiza_v1',
97
+ };
98
+ // ============================================================================
99
+ // Complex Routing (AND/OR nested)
100
+ // ============================================================================
101
+ export const complexRoutingFlow = {
102
+ 'II01klados_classifier': {
103
+ then: {
104
+ pass: ref('II01klados_default_handler', { type: 'klados' }),
105
+ route: [
106
+ {
107
+ // AND condition: must be File type AND large size
108
+ where: {
109
+ and: [
110
+ { property: 'type', equals: 'File' },
111
+ { property: 'size_category', equals: 'large' },
112
+ ],
113
+ },
114
+ target: ref('II01klados_large_file_handler', { type: 'klados' }),
115
+ },
116
+ {
117
+ // OR condition nested in AND
118
+ where: {
119
+ and: [
120
+ { property: 'type', equals: 'File' },
121
+ {
122
+ or: [
123
+ { property: 'priority', equals: 'high' },
124
+ { property: 'priority', equals: 'critical' },
125
+ ],
126
+ },
127
+ ],
128
+ },
129
+ target: ref('II01klados_priority_handler', { type: 'klados' }),
130
+ },
131
+ ],
132
+ },
133
+ },
134
+ 'II01klados_large_file_handler': { then: { done: true } },
135
+ 'II01klados_priority_handler': { then: { done: true } },
136
+ 'II01klados_default_handler': { then: { done: true } },
137
+ };
138
+ export const complexRoutingRhizaProperties = {
139
+ label: 'Complex Routing Workflow',
140
+ description: 'Tests nested AND/OR routing conditions',
141
+ version: '1.0.0',
142
+ entry: ref('II01klados_classifier', { type: 'klados' }),
143
+ flow: complexRoutingFlow,
144
+ status: 'active',
145
+ };
146
+ // ============================================================================
147
+ // Invalid Rhiza Configurations
148
+ // ============================================================================
149
+ export const invalidRhizaProperties = {
150
+ /** Missing entry */
151
+ missingEntry: {
152
+ label: 'Missing Entry',
153
+ version: '1.0.0',
154
+ flow: {
155
+ 'II01klados_a': { then: { done: true } },
156
+ },
157
+ status: 'active',
158
+ },
159
+ /** Entry not in flow */
160
+ entryNotInFlow: {
161
+ label: 'Entry Not In Flow',
162
+ version: '1.0.0',
163
+ entry: ref('II01klados_nonexistent', { type: 'klados' }),
164
+ flow: {
165
+ 'II01klados_a': { then: { done: true } },
166
+ },
167
+ status: 'active',
168
+ },
169
+ /** Target not in flow */
170
+ targetNotInFlow: {
171
+ label: 'Target Not In Flow',
172
+ version: '1.0.0',
173
+ entry: ref('II01klados_a', { type: 'klados' }),
174
+ flow: {
175
+ 'II01klados_a': { then: { pass: ref('II01klados_nonexistent', { type: 'klados' }) } },
176
+ },
177
+ status: 'active',
178
+ },
179
+ /** Cycle detected */
180
+ cycleDetected: {
181
+ label: 'Cycle Detected',
182
+ version: '1.0.0',
183
+ entry: ref('II01klados_a', { type: 'klados' }),
184
+ flow: {
185
+ 'II01klados_a': { then: { pass: ref('II01klados_b', { type: 'klados' }) } },
186
+ 'II01klados_b': { then: { pass: ref('II01klados_c', { type: 'klados' }) } },
187
+ 'II01klados_c': { then: { pass: ref('II01klados_a', { type: 'klados' }) } }, // Cycle!
188
+ },
189
+ status: 'active',
190
+ },
191
+ /** No terminal (unterminated path) */
192
+ noTerminal: {
193
+ label: 'No Terminal',
194
+ version: '1.0.0',
195
+ entry: ref('II01klados_a', { type: 'klados' }),
196
+ flow: {
197
+ 'II01klados_a': { then: { pass: ref('II01klados_b', { type: 'klados' }) } },
198
+ 'II01klados_b': { then: { pass: ref('II01klados_a', { type: 'klados' }) } },
199
+ },
200
+ status: 'active',
201
+ },
202
+ /** Unreachable klados */
203
+ unreachableKlados: {
204
+ label: 'Unreachable Klados',
205
+ version: '1.0.0',
206
+ entry: ref('II01klados_a', { type: 'klados' }),
207
+ flow: {
208
+ 'II01klados_a': { then: { done: true } },
209
+ 'II01klados_orphan': { then: { done: true } }, // Never reached
210
+ },
211
+ status: 'active',
212
+ },
213
+ /** Missing then spec */
214
+ missingThen: {
215
+ label: 'Missing Then',
216
+ version: '1.0.0',
217
+ entry: ref('II01klados_a', { type: 'klados' }),
218
+ flow: {
219
+ 'II01klados_a': {}, // Missing then
220
+ },
221
+ status: 'active',
222
+ },
223
+ /** Invalid handoff type */
224
+ invalidHandoff: {
225
+ label: 'Invalid Handoff',
226
+ version: '1.0.0',
227
+ entry: ref('II01klados_a', { type: 'klados' }),
228
+ flow: {
229
+ 'II01klados_a': { then: { invalid: 'something' } },
230
+ },
231
+ status: 'active',
232
+ },
233
+ /** Route rule missing where */
234
+ routeMissingWhere: {
235
+ label: 'Route Missing Where',
236
+ version: '1.0.0',
237
+ entry: ref('II01klados_a', { type: 'klados' }),
238
+ flow: {
239
+ 'II01klados_a': {
240
+ then: {
241
+ pass: ref('II01klados_b', { type: 'klados' }),
242
+ route: [{ target: ref('II01klados_c', { type: 'klados' }) }],
243
+ },
244
+ },
245
+ 'II01klados_b': { then: { done: true } },
246
+ 'II01klados_c': { then: { done: true } },
247
+ },
248
+ status: 'active',
249
+ },
250
+ /** Route rule missing target */
251
+ routeMissingTarget: {
252
+ label: 'Route Missing Target',
253
+ version: '1.0.0',
254
+ entry: ref('II01klados_a', { type: 'klados' }),
255
+ flow: {
256
+ 'II01klados_a': {
257
+ then: {
258
+ pass: ref('II01klados_b', { type: 'klados' }),
259
+ route: [{ where: { property: 'type', equals: 'test' } }],
260
+ },
261
+ },
262
+ 'II01klados_b': { then: { done: true } },
263
+ },
264
+ status: 'active',
265
+ },
266
+ /** Empty flow */
267
+ emptyFlow: {
268
+ label: 'Empty Flow',
269
+ version: '1.0.0',
270
+ entry: ref('II01klados_a', { type: 'klados' }),
271
+ flow: {},
272
+ status: 'active',
273
+ },
274
+ };
275
+ // ============================================================================
276
+ // Pre-configured Maps
277
+ // ============================================================================
278
+ export const allMockRhizai = {
279
+ 'II01rhiza_linear': linearRhiza,
280
+ 'II01rhiza_scatter_gather': scatterGatherRhiza,
281
+ 'II01rhiza_conditional': conditionalRhiza,
282
+ };
283
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/__tests__/fixtures/rhizai/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Test Infrastructure Verification
3
+ *
4
+ * These tests verify that the test infrastructure is working correctly:
5
+ * - Mock client creates, reads, updates entities
6
+ * - Fixtures are properly typed and accessible
7
+ * - Error simulation works
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=fixtures.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/fixtures.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Test Infrastructure Verification
3
+ *
4
+ * These tests verify that the test infrastructure is working correctly:
5
+ * - Mock client creates, reads, updates entities
6
+ * - Fixtures are properly typed and accessible
7
+ * - Error simulation works
8
+ */
9
+ import { describe, it, expect, beforeEach } from 'vitest';
10
+ import { createMockClient, producerKlados, workerKlados, aggregatorKlados, scatterGatherKladoi, linearRhiza, scatterGatherRhiza, validKladosProperties, invalidKladosProperties, invalidRhizaProperties, successfulLinearLogs, partialErrorLogs, } from '../fixtures';
11
+ describe('Mock Client', () => {
12
+ let client;
13
+ beforeEach(() => {
14
+ client = createMockClient({
15
+ kladoi: scatterGatherKladoi,
16
+ rhizai: {
17
+ 'II01rhiza_linear': linearRhiza,
18
+ 'II01rhiza_scatter_gather': scatterGatherRhiza,
19
+ },
20
+ });
21
+ });
22
+ describe('GET operations', () => {
23
+ it('returns klados by ID', async () => {
24
+ const result = await client.api.GET('/kladoi/{id}', {
25
+ params: { path: { id: 'II01klados_producer' } },
26
+ });
27
+ expect(result.error).toBeUndefined();
28
+ expect(result.data).toBeDefined();
29
+ expect(result.data).toMatchObject({
30
+ id: 'II01klados_producer',
31
+ type: 'klados',
32
+ properties: producerKlados.properties,
33
+ });
34
+ });
35
+ it('returns rhiza by ID', async () => {
36
+ const result = await client.api.GET('/rhizai/{id}', {
37
+ params: { path: { id: 'II01rhiza_scatter_gather' } },
38
+ });
39
+ expect(result.error).toBeUndefined();
40
+ expect(result.data).toBeDefined();
41
+ expect(result.data).toMatchObject({
42
+ id: 'II01rhiza_scatter_gather',
43
+ type: 'rhiza',
44
+ properties: scatterGatherRhiza.properties,
45
+ });
46
+ });
47
+ it('returns 404 for unknown klados', async () => {
48
+ const result = await client.api.GET('/kladoi/{id}', {
49
+ params: { path: { id: 'nonexistent' } },
50
+ });
51
+ expect(result.error).toBeDefined();
52
+ expect(result.error?.code).toBe('404');
53
+ });
54
+ it('returns entity by ID (klados)', async () => {
55
+ const result = await client.api.GET('/entities/{id}', {
56
+ params: { path: { id: 'II01klados_worker' } },
57
+ });
58
+ expect(result.error).toBeUndefined();
59
+ expect(result.data).toBeDefined();
60
+ expect(result.data.type).toBe('klados');
61
+ });
62
+ it('returns tip for entity', async () => {
63
+ const result = await client.api.GET('/entities/{id}/tip', {
64
+ params: { path: { id: 'II01klados_producer' } },
65
+ });
66
+ expect(result.error).toBeUndefined();
67
+ expect(result.data).toBeDefined();
68
+ expect(result.data.cid).toBeDefined();
69
+ });
70
+ });
71
+ describe('POST operations', () => {
72
+ it('invokes klados and tracks invocation', async () => {
73
+ const result = await client.api.POST('/kladoi/{id}/invoke', {
74
+ params: { path: { id: 'II01klados_worker' } },
75
+ body: {
76
+ target: 'entity_123',
77
+ job_collection: 'job_col_1',
78
+ confirm: true,
79
+ },
80
+ });
81
+ expect(result.error).toBeUndefined();
82
+ expect(result.data).toMatchObject({
83
+ accepted: true,
84
+ status: 'started',
85
+ });
86
+ const invocations = client.getInvokedKladoi();
87
+ expect(invocations).toHaveLength(1);
88
+ expect(invocations[0].kladosId).toBe('II01klados_worker');
89
+ expect(invocations[0].request).toMatchObject({
90
+ target: 'entity_123',
91
+ confirm: true,
92
+ });
93
+ });
94
+ it('creates entity and tracks creation', async () => {
95
+ const result = await client.api.POST('/entities', {
96
+ body: {
97
+ type: 'batch',
98
+ collection: 'job_col_1',
99
+ properties: { total: 3, completed: 0 },
100
+ },
101
+ });
102
+ expect(result.error).toBeUndefined();
103
+ expect(result.data).toBeDefined();
104
+ expect(result.data.id).toBeDefined();
105
+ const created = client.getCreated();
106
+ expect(created).toHaveLength(1);
107
+ expect(created[0].type).toBe('batch');
108
+ });
109
+ });
110
+ describe('PUT operations', () => {
111
+ it('updates entity and tracks update', async () => {
112
+ // First create an entity
113
+ const createResult = await client.api.POST('/entities', {
114
+ body: { type: 'test', properties: { value: 1 } },
115
+ });
116
+ const entityId = createResult.data.id;
117
+ // Then update it
118
+ const result = await client.api.PUT('/entities/{id}', {
119
+ params: { path: { id: entityId } },
120
+ body: {
121
+ properties: { value: 2 },
122
+ expect_tip: 'some_cid',
123
+ },
124
+ });
125
+ expect(result.error).toBeUndefined();
126
+ const updated = client.getUpdated();
127
+ expect(updated).toHaveLength(1);
128
+ expect(updated[0].id).toBe(entityId);
129
+ });
130
+ });
131
+ describe('error simulation', () => {
132
+ it('returns 404 for configured not found entities', async () => {
133
+ const errorClient = createMockClient({
134
+ kladoi: scatterGatherKladoi,
135
+ errors: {
136
+ notFound: ['II01klados_producer'],
137
+ },
138
+ });
139
+ const result = await errorClient.api.GET('/kladoi/{id}', {
140
+ params: { path: { id: 'II01klados_producer' } },
141
+ });
142
+ expect(result.error).toBeDefined();
143
+ expect(result.error?.code).toBe('404');
144
+ });
145
+ it('simulates CAS conflicts on update', async () => {
146
+ const errorClient = createMockClient({
147
+ kladoi: scatterGatherKladoi,
148
+ errors: {
149
+ onUpdate: 2, // Fail first 2 updates
150
+ },
151
+ });
152
+ // First update should fail
153
+ const result1 = await errorClient.api.PUT('/entities/{id}', {
154
+ params: { path: { id: 'II01klados_producer' } },
155
+ body: { properties: { value: 1 } },
156
+ });
157
+ expect(result1.error).toBeDefined();
158
+ expect(result1.error?.code).toBe('409');
159
+ // Second update should also fail
160
+ const result2 = await errorClient.api.PUT('/entities/{id}', {
161
+ params: { path: { id: 'II01klados_producer' } },
162
+ body: { properties: { value: 2 } },
163
+ });
164
+ expect(result2.error).toBeDefined();
165
+ // Third update should succeed
166
+ const result3 = await errorClient.api.PUT('/entities/{id}', {
167
+ params: { path: { id: 'II01klados_producer' } },
168
+ body: { properties: { value: 3 } },
169
+ });
170
+ expect(result3.error).toBeUndefined();
171
+ });
172
+ it('simulates invoke errors', async () => {
173
+ const errorClient = createMockClient({
174
+ kladoi: scatterGatherKladoi,
175
+ errors: {
176
+ onInvoke: {
177
+ 'II01klados_worker': 'Service unavailable',
178
+ },
179
+ },
180
+ });
181
+ const result = await errorClient.api.POST('/kladoi/{id}/invoke', {
182
+ params: { path: { id: 'II01klados_worker' } },
183
+ body: { target: 'entity_123' },
184
+ });
185
+ expect(result.error).toBeDefined();
186
+ expect(result.error?.message).toBe('Service unavailable');
187
+ });
188
+ });
189
+ describe('reset', () => {
190
+ it('clears tracked mutations', async () => {
191
+ await client.api.POST('/kladoi/{id}/invoke', {
192
+ params: { path: { id: 'II01klados_worker' } },
193
+ body: { target: 'entity_123' },
194
+ });
195
+ expect(client.getInvokedKladoi()).toHaveLength(1);
196
+ client.reset();
197
+ expect(client.getInvokedKladoi()).toHaveLength(0);
198
+ expect(client.getCreated()).toHaveLength(0);
199
+ expect(client.getUpdated()).toHaveLength(0);
200
+ });
201
+ });
202
+ });
203
+ describe('Klados Fixtures', () => {
204
+ it('producer has correct cardinality for scatter', () => {
205
+ expect(producerKlados.properties.produces.cardinality).toBe('many');
206
+ expect(producerKlados.properties.accepts.cardinality).toBe('one');
207
+ });
208
+ it('worker has correct cardinality for scatter target', () => {
209
+ expect(workerKlados.properties.accepts.cardinality).toBe('one');
210
+ expect(workerKlados.properties.produces.cardinality).toBe('one');
211
+ });
212
+ it('aggregator has correct cardinality for gather', () => {
213
+ expect(aggregatorKlados.properties.accepts.cardinality).toBe('many');
214
+ expect(aggregatorKlados.properties.produces.cardinality).toBe('one');
215
+ });
216
+ it('valid klados properties pass basic checks', () => {
217
+ expect(validKladosProperties.endpoint).toMatch(/^https?:\/\//);
218
+ expect(validKladosProperties.actions_required.length).toBeGreaterThan(0);
219
+ expect(validKladosProperties.accepts.types.length).toBeGreaterThan(0);
220
+ expect(validKladosProperties.produces.types.length).toBeGreaterThan(0);
221
+ });
222
+ it('invalid klados properties have expected issues', () => {
223
+ expect(invalidKladosProperties.missingEndpoint).not.toHaveProperty('endpoint');
224
+ expect(invalidKladosProperties.invalidEndpoint.endpoint).not.toMatch(/^https?:\/\//);
225
+ expect(invalidKladosProperties.emptyAcceptsTypes.accepts.types).toHaveLength(0);
226
+ expect(invalidKladosProperties.emptyProducesTypes.produces.types).toHaveLength(0);
227
+ expect(invalidKladosProperties.emptyActionsRequired.actions_required).toHaveLength(0);
228
+ });
229
+ });
230
+ describe('Rhiza Fixtures', () => {
231
+ it('linear rhiza has correct entry', () => {
232
+ expect(linearRhiza.properties.entry).toBe('II01klados_a');
233
+ expect(linearRhiza.properties.flow['II01klados_a']).toBeDefined();
234
+ });
235
+ it('scatter-gather rhiza has correct flow structure', () => {
236
+ const flow = scatterGatherRhiza.properties.flow;
237
+ // Producer scatters to worker
238
+ expect(flow['II01klados_producer'].then).toHaveProperty('scatter');
239
+ expect(flow['II01klados_producer'].then.scatter).toBe('II01klados_worker');
240
+ // Worker gathers to aggregator
241
+ expect(flow['II01klados_worker'].then).toHaveProperty('gather');
242
+ expect(flow['II01klados_worker'].then.gather).toBe('II01klados_aggregator');
243
+ // Aggregator is terminal
244
+ expect(flow['II01klados_aggregator'].then).toHaveProperty('done');
245
+ });
246
+ it('invalid rhiza properties have expected issues', () => {
247
+ expect(invalidRhizaProperties.missingEntry).not.toHaveProperty('entry');
248
+ expect(invalidRhizaProperties.entryNotInFlow.entry).toBe('II01klados_nonexistent');
249
+ expect(invalidRhizaProperties.emptyFlow.flow).toEqual({});
250
+ });
251
+ });
252
+ describe('Log Fixtures', () => {
253
+ it('successful linear logs form a chain', () => {
254
+ const logs = successfulLinearLogs;
255
+ // Root has no from_logs
256
+ expect(logs[0].received.from_logs).toBeUndefined();
257
+ // Second log points to first
258
+ expect(logs[1].received.from_logs).toContain(logs[0].id);
259
+ // Third log points to second
260
+ expect(logs[2].received.from_logs).toContain(logs[1].id);
261
+ });
262
+ it('partial error logs contain one error', () => {
263
+ const errorLogs = partialErrorLogs.filter((l) => l.status === 'error');
264
+ expect(errorLogs).toHaveLength(1);
265
+ const errorLog = errorLogs[0];
266
+ expect(errorLog.error).toBeDefined();
267
+ expect(errorLog.error?.retryable).toBe(true);
268
+ });
269
+ it('error logs have invocation for resume', () => {
270
+ const errorLog = partialErrorLogs.find((l) => l.status === 'error');
271
+ expect(errorLog?.received.invocation).toBeDefined();
272
+ expect(errorLog?.received.invocation?.request).toBeDefined();
273
+ });
274
+ });
275
+ //# sourceMappingURL=fixtures.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/fixtures.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Gather Tests
3
+ *
4
+ * Tests for gather (fan-in) operations that collect scattered outputs
5
+ * and trigger the aggregator when complete.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=gather.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/unit/handoff/gather.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}