@polka-codes/core 0.10.13 → 0.10.16

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 (250) hide show
  1. package/dist/Agent/backoff.d.ts +7 -0
  2. package/dist/Agent/backoff.js +21 -0
  3. package/dist/Agent/backoff.js.map +1 -0
  4. package/dist/Agent/index.d.ts +2 -0
  5. package/dist/Agent/index.js +3 -0
  6. package/dist/Agent/index.js.map +1 -0
  7. package/dist/Agent/parseJsonFromMarkdown.d.ts +8 -0
  8. package/dist/Agent/parseJsonFromMarkdown.js +34 -0
  9. package/dist/Agent/parseJsonFromMarkdown.js.map +1 -0
  10. package/dist/Agent/parseJsonFromMarkdown.test.d.ts +1 -0
  11. package/dist/Agent/parseJsonFromMarkdown.test.js +70 -0
  12. package/dist/Agent/parseJsonFromMarkdown.test.js.map +1 -0
  13. package/dist/Agent/prompts.d.ts +9 -0
  14. package/dist/Agent/prompts.js +107 -0
  15. package/dist/Agent/prompts.js.map +1 -0
  16. package/dist/UsageMeter.d.ts +101 -0
  17. package/dist/UsageMeter.js +299 -0
  18. package/dist/UsageMeter.js.map +1 -0
  19. package/dist/UsageMeter.test.d.ts +4 -0
  20. package/dist/UsageMeter.test.js +556 -0
  21. package/dist/UsageMeter.test.js.map +1 -0
  22. package/dist/config/base.d.ts +68 -0
  23. package/dist/config/base.js +56 -0
  24. package/dist/config/base.js.map +1 -0
  25. package/dist/config/memory.d.ts +24 -0
  26. package/dist/config/memory.js +36 -0
  27. package/dist/config/memory.js.map +1 -0
  28. package/dist/config.d.ts +236 -0
  29. package/dist/config.js +184 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/errors/base.d.ts +31 -0
  32. package/dist/errors/base.js +60 -0
  33. package/dist/errors/base.js.map +1 -0
  34. package/dist/errors/index.d.ts +1 -0
  35. package/dist/errors/index.js +3 -0
  36. package/dist/errors/index.js.map +1 -0
  37. package/dist/fs/index.d.ts +2 -0
  38. package/dist/fs/index.js +3 -0
  39. package/dist/fs/index.js.map +1 -0
  40. package/dist/fs/node-provider.d.ts +16 -0
  41. package/dist/fs/node-provider.js +47 -0
  42. package/dist/fs/node-provider.js.map +1 -0
  43. package/dist/fs/provider.d.ts +61 -0
  44. package/dist/fs/provider.js +3 -0
  45. package/dist/fs/provider.js.map +1 -0
  46. package/dist/index.d.ts +20 -191
  47. package/dist/index.js +21 -4123
  48. package/dist/index.js.map +1 -0
  49. package/dist/memory/index.d.ts +1 -0
  50. package/dist/memory/index.js +2 -0
  51. package/dist/memory/index.js.map +1 -0
  52. package/dist/memory/types.d.ts +136 -0
  53. package/dist/memory/types.js +2 -0
  54. package/dist/memory/types.js.map +1 -0
  55. package/dist/path.d.ts +9 -0
  56. package/dist/path.js +68 -0
  57. package/dist/path.js.map +1 -0
  58. package/dist/path.test.d.ts +1 -0
  59. package/dist/path.test.js +82 -0
  60. package/dist/path.test.js.map +1 -0
  61. package/dist/pricing/converter.d.ts +6 -0
  62. package/dist/pricing/converter.js +13 -0
  63. package/dist/pricing/converter.js.map +1 -0
  64. package/dist/pricing/converter.test.d.ts +1 -0
  65. package/dist/pricing/converter.test.js +54 -0
  66. package/dist/pricing/converter.test.js.map +1 -0
  67. package/dist/pricing/index.d.ts +2 -0
  68. package/dist/pricing/index.js +2 -0
  69. package/dist/pricing/index.js.map +1 -0
  70. package/dist/pricing/portkey-client.d.ts +2 -0
  71. package/dist/pricing/portkey-client.js +57 -0
  72. package/dist/pricing/portkey-client.js.map +1 -0
  73. package/dist/pricing/pricing-service.d.ts +6 -0
  74. package/dist/pricing/pricing-service.js +125 -0
  75. package/dist/pricing/pricing-service.js.map +1 -0
  76. package/dist/pricing/pricing-service.test.d.ts +1 -0
  77. package/dist/pricing/pricing-service.test.js +141 -0
  78. package/dist/pricing/pricing-service.test.js.map +1 -0
  79. package/dist/pricing/types.d.ts +24 -0
  80. package/dist/pricing/types.js +2 -0
  81. package/dist/pricing/types.js.map +1 -0
  82. package/dist/skills/__tests__/discovery.test.d.ts +1 -0
  83. package/dist/skills/__tests__/discovery.test.js +254 -0
  84. package/dist/skills/__tests__/discovery.test.js.map +1 -0
  85. package/dist/skills/__tests__/validation.test.d.ts +1 -0
  86. package/dist/skills/__tests__/validation.test.js +221 -0
  87. package/dist/skills/__tests__/validation.test.js.map +1 -0
  88. package/dist/skills/constants.d.ts +32 -0
  89. package/dist/skills/constants.js +50 -0
  90. package/dist/skills/constants.js.map +1 -0
  91. package/dist/skills/discovery.d.ts +56 -0
  92. package/dist/skills/discovery.js +392 -0
  93. package/dist/skills/discovery.js.map +1 -0
  94. package/dist/skills/index.d.ts +4 -0
  95. package/dist/skills/index.js +6 -0
  96. package/dist/skills/index.js.map +1 -0
  97. package/dist/skills/tools/index.d.ts +3 -0
  98. package/dist/skills/tools/index.js +5 -0
  99. package/dist/skills/tools/index.js.map +1 -0
  100. package/dist/skills/tools/listSkills.d.ts +54 -0
  101. package/dist/skills/tools/listSkills.js +52 -0
  102. package/dist/skills/tools/listSkills.js.map +1 -0
  103. package/dist/skills/tools/loadSkill.d.ts +52 -0
  104. package/dist/skills/tools/loadSkill.js +86 -0
  105. package/dist/skills/tools/loadSkill.js.map +1 -0
  106. package/dist/skills/tools/readSkillFile.d.ts +43 -0
  107. package/dist/skills/tools/readSkillFile.js +68 -0
  108. package/dist/skills/tools/readSkillFile.js.map +1 -0
  109. package/dist/skills/types.d.ts +83 -0
  110. package/dist/skills/types.js +42 -0
  111. package/dist/skills/types.js.map +1 -0
  112. package/dist/skills/validation.d.ts +30 -0
  113. package/dist/skills/validation.js +133 -0
  114. package/dist/skills/validation.js.map +1 -0
  115. package/dist/tool.d.ts +51 -0
  116. package/dist/tool.js +2 -0
  117. package/dist/tool.js.map +1 -0
  118. package/dist/tools/askFollowupQuestion.d.ts +35 -0
  119. package/dist/tools/askFollowupQuestion.js +105 -0
  120. package/dist/tools/askFollowupQuestion.js.map +1 -0
  121. package/dist/tools/askFollowupQuestion.test.d.ts +1 -0
  122. package/dist/tools/askFollowupQuestion.test.js +80 -0
  123. package/dist/tools/askFollowupQuestion.test.js.map +1 -0
  124. package/dist/tools/executeCommand.d.ts +29 -0
  125. package/dist/tools/executeCommand.js +82 -0
  126. package/dist/tools/executeCommand.js.map +1 -0
  127. package/dist/tools/executeCommand.test.d.ts +1 -0
  128. package/dist/tools/executeCommand.test.js +60 -0
  129. package/dist/tools/executeCommand.test.js.map +1 -0
  130. package/dist/tools/fetchUrl.d.ts +26 -0
  131. package/dist/tools/fetchUrl.js +85 -0
  132. package/dist/tools/fetchUrl.js.map +1 -0
  133. package/dist/tools/index.d.ts +15 -0
  134. package/dist/tools/index.js +17 -0
  135. package/dist/tools/index.js.map +1 -0
  136. package/dist/tools/listFiles.d.ts +35 -0
  137. package/dist/tools/listFiles.js +61 -0
  138. package/dist/tools/listFiles.js.map +1 -0
  139. package/dist/tools/listFiles.test.d.ts +1 -0
  140. package/dist/tools/listFiles.test.js +59 -0
  141. package/dist/tools/listFiles.test.js.map +1 -0
  142. package/dist/tools/provider.d.ts +76 -0
  143. package/dist/tools/provider.js +60 -0
  144. package/dist/tools/provider.js.map +1 -0
  145. package/dist/tools/readBinaryFile.d.ts +26 -0
  146. package/dist/tools/readBinaryFile.js +52 -0
  147. package/dist/tools/readBinaryFile.js.map +1 -0
  148. package/dist/tools/readFile.d.ts +35 -0
  149. package/dist/tools/readFile.js +128 -0
  150. package/dist/tools/readFile.js.map +1 -0
  151. package/dist/tools/readFile.test.d.ts +1 -0
  152. package/dist/tools/readFile.test.js +37 -0
  153. package/dist/tools/readFile.test.js.map +1 -0
  154. package/dist/tools/removeFile.d.ts +26 -0
  155. package/dist/tools/removeFile.js +49 -0
  156. package/dist/tools/removeFile.js.map +1 -0
  157. package/dist/tools/removeFile.test.d.ts +1 -0
  158. package/dist/tools/removeFile.test.js +32 -0
  159. package/dist/tools/removeFile.test.js.map +1 -0
  160. package/dist/tools/renameFile.d.ts +29 -0
  161. package/dist/tools/renameFile.js +48 -0
  162. package/dist/tools/renameFile.js.map +1 -0
  163. package/dist/tools/renameFile.test.d.ts +1 -0
  164. package/dist/tools/renameFile.test.js +53 -0
  165. package/dist/tools/renameFile.test.js.map +1 -0
  166. package/dist/tools/replaceInFile.d.ts +29 -0
  167. package/dist/tools/replaceInFile.js +233 -0
  168. package/dist/tools/replaceInFile.js.map +1 -0
  169. package/dist/tools/replaceInFile.test.d.ts +1 -0
  170. package/dist/tools/replaceInFile.test.js +79 -0
  171. package/dist/tools/replaceInFile.test.js.map +1 -0
  172. package/dist/tools/response-builders.d.ts +64 -0
  173. package/dist/tools/response-builders.js +88 -0
  174. package/dist/tools/response-builders.js.map +1 -0
  175. package/dist/tools/search.d.ts +26 -0
  176. package/dist/tools/search.js +56 -0
  177. package/dist/tools/search.js.map +1 -0
  178. package/dist/tools/search.test.d.ts +1 -0
  179. package/dist/tools/search.test.js +22 -0
  180. package/dist/tools/search.test.js.map +1 -0
  181. package/dist/tools/searchFiles.d.ts +32 -0
  182. package/dist/tools/searchFiles.js +86 -0
  183. package/dist/tools/searchFiles.js.map +1 -0
  184. package/dist/tools/todo.d.ts +37 -0
  185. package/dist/tools/todo.js +41 -0
  186. package/dist/tools/todo.js.map +1 -0
  187. package/dist/tools/utils/index.d.ts +1 -0
  188. package/dist/tools/utils/index.js +2 -0
  189. package/dist/tools/utils/index.js.map +1 -0
  190. package/dist/tools/utils/replaceInFile.d.ts +7 -0
  191. package/dist/tools/utils/replaceInFile.js +133 -0
  192. package/dist/tools/utils/replaceInFile.js.map +1 -0
  193. package/dist/tools/utils/replaceInFile.test.d.ts +1 -0
  194. package/dist/tools/utils/replaceInFile.test.js +308 -0
  195. package/dist/tools/utils/replaceInFile.test.js.map +1 -0
  196. package/dist/tools/utils.d.ts +10 -0
  197. package/dist/tools/utils.js +27 -0
  198. package/dist/tools/utils.js.map +1 -0
  199. package/dist/tools/writeToFile.d.ts +29 -0
  200. package/dist/tools/writeToFile.js +85 -0
  201. package/dist/tools/writeToFile.js.map +1 -0
  202. package/dist/tools/writeToFile.test.d.ts +1 -0
  203. package/dist/tools/writeToFile.test.js +46 -0
  204. package/dist/tools/writeToFile.test.js.map +1 -0
  205. package/dist/utils/index.d.ts +1 -0
  206. package/dist/utils/index.js +3 -0
  207. package/dist/utils/index.js.map +1 -0
  208. package/dist/utils/merge.d.ts +26 -0
  209. package/dist/utils/merge.js +45 -0
  210. package/dist/utils/merge.js.map +1 -0
  211. package/dist/workflow/agent.workflow.d.ts +39 -0
  212. package/dist/workflow/agent.workflow.js +166 -0
  213. package/dist/workflow/agent.workflow.js.map +1 -0
  214. package/dist/workflow/agent.workflow.test.d.ts +1 -0
  215. package/dist/workflow/agent.workflow.test.js +175 -0
  216. package/dist/workflow/agent.workflow.test.js.map +1 -0
  217. package/dist/workflow/control-flow.test.d.ts +1 -0
  218. package/dist/workflow/control-flow.test.js +323 -0
  219. package/dist/workflow/control-flow.test.js.map +1 -0
  220. package/dist/workflow/dynamic-edge-cases.test.d.ts +1 -0
  221. package/dist/workflow/dynamic-edge-cases.test.js +486 -0
  222. package/dist/workflow/dynamic-edge-cases.test.js.map +1 -0
  223. package/dist/workflow/dynamic-types.d.ts +124 -0
  224. package/dist/workflow/dynamic-types.js +105 -0
  225. package/dist/workflow/dynamic-types.js.map +1 -0
  226. package/dist/workflow/dynamic.d.ts +118 -0
  227. package/dist/workflow/dynamic.js +999 -0
  228. package/dist/workflow/dynamic.js.map +1 -0
  229. package/dist/workflow/index.d.ts +6 -0
  230. package/dist/workflow/index.js +8 -0
  231. package/dist/workflow/index.js.map +1 -0
  232. package/dist/workflow/json-ai-types.d.ts +122 -0
  233. package/dist/workflow/json-ai-types.js +144 -0
  234. package/dist/workflow/json-ai-types.js.map +1 -0
  235. package/dist/workflow/json-schema-conversion.test.d.ts +1 -0
  236. package/dist/workflow/json-schema-conversion.test.js +371 -0
  237. package/dist/workflow/json-schema-conversion.test.js.map +1 -0
  238. package/dist/workflow/try-catch.test.d.ts +1 -0
  239. package/dist/workflow/try-catch.test.js +443 -0
  240. package/dist/workflow/try-catch.test.js.map +1 -0
  241. package/dist/workflow/types.d.ts +103 -0
  242. package/dist/workflow/types.js +17 -0
  243. package/dist/workflow/types.js.map +1 -0
  244. package/dist/workflow/workflow.d.ts +29 -0
  245. package/dist/workflow/workflow.js +57 -0
  246. package/dist/workflow/workflow.js.map +1 -0
  247. package/dist/workflow/workflow.test.d.ts +1 -0
  248. package/dist/workflow/workflow.test.js +189 -0
  249. package/dist/workflow/workflow.test.js.map +1 -0
  250. package/package.json +9 -1
@@ -0,0 +1,486 @@
1
+ import { describe, expect, it } from 'bun:test';
2
+ import { createDynamicWorkflow, parseDynamicWorkflowDefinition, validateWorkflowFile } from './dynamic';
3
+ function asValidationFailure(result) {
4
+ if (result.success) {
5
+ throw new Error('Expected validation failure but got success');
6
+ }
7
+ return result;
8
+ }
9
+ function asParseFailure(result) {
10
+ if (result.success) {
11
+ throw new Error('Expected parse failure but got success');
12
+ }
13
+ return result;
14
+ }
15
+ describe('Dynamic Workflow Edge Cases', () => {
16
+ const mockToolInfo = [
17
+ {
18
+ name: 'testTool',
19
+ description: 'A test tool',
20
+ parameters: { type: 'object' },
21
+ handler: async () => ({ success: true, message: { type: 'text', value: 'Test result' } }),
22
+ },
23
+ ];
24
+ describe('validation edge cases', () => {
25
+ it('should reject workflow with no steps', () => {
26
+ const workflowDef = {
27
+ workflows: {
28
+ empty: {
29
+ task: 'Empty workflow',
30
+ steps: [],
31
+ },
32
+ },
33
+ };
34
+ const result = validateWorkflowFile(workflowDef);
35
+ const failure = asValidationFailure(result);
36
+ expect(failure.errors).toContain("Workflow 'empty' has no steps");
37
+ });
38
+ it('should reject break statement outside loop', () => {
39
+ const workflowDef = {
40
+ workflows: {
41
+ invalidBreak: {
42
+ task: 'Invalid break',
43
+ steps: [
44
+ {
45
+ id: 'invalidStep',
46
+ break: true,
47
+ },
48
+ ],
49
+ },
50
+ },
51
+ };
52
+ const result = validateWorkflowFile(workflowDef);
53
+ const failure = asValidationFailure(result);
54
+ expect(failure.errors[0]).toContain('break/continue outside of a loop');
55
+ });
56
+ it('should reject continue statement outside loop', () => {
57
+ const workflowDef = {
58
+ workflows: {
59
+ invalidContinue: {
60
+ task: 'Invalid continue',
61
+ steps: [
62
+ {
63
+ id: 'invalidStep',
64
+ continue: true,
65
+ },
66
+ ],
67
+ },
68
+ },
69
+ };
70
+ const result = validateWorkflowFile(workflowDef);
71
+ const failure = asValidationFailure(result);
72
+ expect(failure.errors[0]).toContain('break/continue outside of a loop');
73
+ });
74
+ it('should accept break inside while loop', () => {
75
+ const workflowDef = {
76
+ workflows: {
77
+ validBreak: {
78
+ task: 'Valid break',
79
+ steps: [
80
+ {
81
+ id: 'loopWithBreak',
82
+ while: {
83
+ condition: 'true',
84
+ steps: [{ break: true }],
85
+ },
86
+ },
87
+ ],
88
+ },
89
+ },
90
+ };
91
+ const result = validateWorkflowFile(workflowDef);
92
+ expect(result.success).toBe(true);
93
+ });
94
+ it('should accept continue inside while loop', () => {
95
+ const workflowDef = {
96
+ workflows: {
97
+ validContinue: {
98
+ task: 'Valid continue',
99
+ steps: [
100
+ {
101
+ id: 'loopWithContinue',
102
+ while: {
103
+ condition: 'true',
104
+ steps: [{ continue: true }],
105
+ },
106
+ },
107
+ ],
108
+ },
109
+ },
110
+ };
111
+ const result = validateWorkflowFile(workflowDef);
112
+ expect(result.success).toBe(true);
113
+ });
114
+ it('should reject break inside if/else branch (not in loop)', () => {
115
+ const workflowDef = {
116
+ workflows: {
117
+ breakInIf: {
118
+ task: 'Break in if',
119
+ steps: [
120
+ {
121
+ id: 'check',
122
+ if: {
123
+ condition: 'true',
124
+ thenBranch: [{ break: true }],
125
+ },
126
+ },
127
+ ],
128
+ },
129
+ },
130
+ };
131
+ const result = validateWorkflowFile(workflowDef);
132
+ const failure = asValidationFailure(result);
133
+ expect(failure.errors[0]).toContain('break/continue outside of a loop');
134
+ });
135
+ it('should accept break inside if/else inside while loop', () => {
136
+ const workflowDef = {
137
+ workflows: {
138
+ breakInIfInLoop: {
139
+ task: 'Valid break in if in loop',
140
+ steps: [
141
+ {
142
+ id: 'loop',
143
+ while: {
144
+ condition: 'true',
145
+ steps: [
146
+ {
147
+ id: 'check',
148
+ if: {
149
+ condition: 'true',
150
+ thenBranch: [{ break: true }],
151
+ },
152
+ },
153
+ ],
154
+ },
155
+ },
156
+ ],
157
+ },
158
+ },
159
+ };
160
+ const result = validateWorkflowFile(workflowDef);
161
+ expect(result.success).toBe(true);
162
+ });
163
+ });
164
+ describe('parse errors', () => {
165
+ it('should reject invalid YAML syntax', () => {
166
+ const invalidYaml = `
167
+ workflows:
168
+ test:
169
+ task: Test
170
+ steps: [
171
+ id: step1
172
+ invalid yaml here
173
+ `;
174
+ const result = parseDynamicWorkflowDefinition(invalidYaml);
175
+ const failure = asParseFailure(result);
176
+ expect(failure.error).toBeDefined();
177
+ });
178
+ it('should reject workflow with missing required fields', () => {
179
+ const invalidWorkflow = `
180
+ workflows:
181
+ test:
182
+ steps: []
183
+ `;
184
+ const result = parseDynamicWorkflowDefinition(invalidWorkflow);
185
+ const failure = asParseFailure(result);
186
+ expect(failure.error).toContain('task');
187
+ });
188
+ });
189
+ describe('condition evaluation edge cases', () => {
190
+ it('should handle undefined variables in conditions gracefully', () => {
191
+ const workflowDef = {
192
+ workflows: {
193
+ test: {
194
+ task: 'Test undefined variable',
195
+ steps: [
196
+ {
197
+ id: 'checkUndefined',
198
+ task: 'Check undefined',
199
+ },
200
+ ],
201
+ output: 'result',
202
+ },
203
+ },
204
+ };
205
+ const workflow = createDynamicWorkflow(workflowDef, {
206
+ toolInfo: mockToolInfo,
207
+ });
208
+ // This should not throw during creation, but would throw during execution
209
+ expect(workflow).toBeDefined();
210
+ });
211
+ it('should handle complex boolean expressions', () => {
212
+ const workflowDef = {
213
+ workflows: {
214
+ test: {
215
+ task: 'Complex boolean',
216
+ steps: [
217
+ {
218
+ id: 'check',
219
+ if: {
220
+ condition: 'state.a && state.b || state.c',
221
+ thenBranch: [{ id: 'then', task: 'Then' }],
222
+ },
223
+ },
224
+ ],
225
+ },
226
+ },
227
+ };
228
+ const workflow = createDynamicWorkflow(workflowDef, {
229
+ toolInfo: mockToolInfo,
230
+ });
231
+ expect(workflow).toBeDefined();
232
+ });
233
+ });
234
+ describe('input validation edge cases', () => {
235
+ it('should validate that required inputs without defaults are checked', () => {
236
+ const workflowDef = {
237
+ workflows: {
238
+ test: {
239
+ task: 'Test required input',
240
+ inputs: [
241
+ {
242
+ id: 'required',
243
+ description: 'Required input',
244
+ },
245
+ ],
246
+ steps: [
247
+ {
248
+ id: 'step1',
249
+ task: 'Step 1',
250
+ },
251
+ ],
252
+ },
253
+ },
254
+ };
255
+ // Workflow creation should succeed
256
+ const workflow = createDynamicWorkflow(workflowDef, {
257
+ toolInfo: mockToolInfo,
258
+ });
259
+ expect(workflow).toBeDefined();
260
+ });
261
+ it('should handle inputs with defaults', () => {
262
+ const workflowDef = {
263
+ workflows: {
264
+ test: {
265
+ task: 'Test default input',
266
+ inputs: [
267
+ {
268
+ id: 'value',
269
+ description: 'Value with default',
270
+ default: 42,
271
+ },
272
+ ],
273
+ steps: [
274
+ {
275
+ id: 'step1',
276
+ task: 'Step 1',
277
+ },
278
+ ],
279
+ output: 'value',
280
+ },
281
+ },
282
+ };
283
+ const workflow = createDynamicWorkflow(workflowDef, {
284
+ toolInfo: mockToolInfo,
285
+ });
286
+ expect(workflow).toBeDefined();
287
+ });
288
+ it('should handle multiple inputs with mixed defaults', () => {
289
+ const workflowDef = {
290
+ workflows: {
291
+ test: {
292
+ task: 'Test mixed inputs',
293
+ inputs: [
294
+ {
295
+ id: 'required1',
296
+ description: 'Required input 1',
297
+ },
298
+ {
299
+ id: 'optional1',
300
+ description: 'Optional input',
301
+ default: 'default-value',
302
+ },
303
+ {
304
+ id: 'required2',
305
+ description: 'Required input 2',
306
+ },
307
+ ],
308
+ steps: [
309
+ {
310
+ id: 'step1',
311
+ task: 'Step 1',
312
+ },
313
+ ],
314
+ },
315
+ },
316
+ };
317
+ const workflow = createDynamicWorkflow(workflowDef, {
318
+ toolInfo: mockToolInfo,
319
+ });
320
+ expect(workflow).toBeDefined();
321
+ });
322
+ });
323
+ describe('nested control flow edge cases', () => {
324
+ it('should handle deeply nested while loops', () => {
325
+ const workflowDef = {
326
+ workflows: {
327
+ test: {
328
+ task: 'Deeply nested loops',
329
+ steps: [
330
+ {
331
+ id: 'outer',
332
+ while: {
333
+ condition: 'state.i < 2',
334
+ steps: [
335
+ {
336
+ id: 'middle',
337
+ while: {
338
+ condition: 'state.j < 2',
339
+ steps: [
340
+ {
341
+ id: 'inner',
342
+ while: {
343
+ condition: 'state.k < 2',
344
+ steps: [{ id: 'work', task: 'Work' }],
345
+ },
346
+ },
347
+ ],
348
+ },
349
+ },
350
+ ],
351
+ },
352
+ },
353
+ ],
354
+ },
355
+ },
356
+ };
357
+ const result = validateWorkflowFile(workflowDef);
358
+ expect(result.success).toBe(true);
359
+ });
360
+ it('should handle if/else with nested try/catch', () => {
361
+ const workflowDef = {
362
+ workflows: {
363
+ test: {
364
+ task: 'Nested try/catch in if',
365
+ steps: [
366
+ {
367
+ id: 'check',
368
+ if: {
369
+ condition: 'true',
370
+ thenBranch: [
371
+ {
372
+ id: 'tryBlock',
373
+ try: {
374
+ trySteps: [{ id: 'attempt', task: 'Try' }],
375
+ catchSteps: [{ id: 'recover', task: 'Catch' }],
376
+ },
377
+ },
378
+ ],
379
+ },
380
+ },
381
+ ],
382
+ },
383
+ },
384
+ };
385
+ const result = validateWorkflowFile(workflowDef);
386
+ expect(result.success).toBe(true);
387
+ });
388
+ });
389
+ describe('workflow not found errors', () => {
390
+ it('should throw error for non-existent workflow', async () => {
391
+ const workflowDef = {
392
+ workflows: {
393
+ existing: {
394
+ task: 'Existing workflow',
395
+ steps: [{ id: 'step1', task: 'Step 1' }],
396
+ },
397
+ },
398
+ };
399
+ const workflow = createDynamicWorkflow(workflowDef, {
400
+ toolInfo: mockToolInfo,
401
+ });
402
+ const mockStep = async (_name, optionsOrFn, fn) => {
403
+ const actualFn = fn || optionsOrFn;
404
+ if (typeof actualFn === 'function') {
405
+ return await actualFn();
406
+ }
407
+ throw new Error('Expected function');
408
+ };
409
+ const mockContext = {
410
+ tools: {},
411
+ logger: {
412
+ info: (_msg) => { },
413
+ debug: (_msg) => { },
414
+ warn: (_msg) => { },
415
+ error: (_msg) => { },
416
+ },
417
+ step: mockStep,
418
+ };
419
+ await expect(workflow('nonexistent', {}, mockContext)).rejects.toThrow("Workflow 'nonexistent' not found");
420
+ });
421
+ });
422
+ describe('state management edge cases', () => {
423
+ it('should handle state mutation in loops', () => {
424
+ const workflowDef = {
425
+ workflows: {
426
+ test: {
427
+ task: 'State mutation',
428
+ steps: [
429
+ {
430
+ id: 'loop',
431
+ while: {
432
+ condition: 'state.count < 3',
433
+ steps: [
434
+ {
435
+ id: 'increment',
436
+ task: 'Increment',
437
+ output: 'count',
438
+ },
439
+ ],
440
+ },
441
+ },
442
+ ],
443
+ },
444
+ },
445
+ };
446
+ const workflow = createDynamicWorkflow(workflowDef, {
447
+ toolInfo: mockToolInfo,
448
+ });
449
+ expect(workflow).toBeDefined();
450
+ });
451
+ it('should propagate state through nested structures', () => {
452
+ const workflowDef = {
453
+ workflows: {
454
+ test: {
455
+ task: 'State propagation',
456
+ steps: [
457
+ {
458
+ id: 'first',
459
+ task: 'First step',
460
+ output: 'value1',
461
+ },
462
+ {
463
+ id: 'conditional',
464
+ if: {
465
+ condition: 'true',
466
+ thenBranch: [
467
+ {
468
+ id: 'second',
469
+ task: 'Second step',
470
+ output: 'value2',
471
+ },
472
+ ],
473
+ },
474
+ },
475
+ ],
476
+ },
477
+ },
478
+ };
479
+ const workflow = createDynamicWorkflow(workflowDef, {
480
+ toolInfo: mockToolInfo,
481
+ });
482
+ expect(workflow).toBeDefined();
483
+ });
484
+ });
485
+ });
486
+ //# sourceMappingURL=dynamic-edge-cases.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-edge-cases.test.js","sourceRoot":"","sources":["../../src/workflow/dynamic-edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import { z } from 'zod';
2
+ export type ValidationResult = {
3
+ success: true;
4
+ } | {
5
+ success: false;
6
+ errors: string[];
7
+ };
8
+ export interface WhileLoopStep {
9
+ id: string;
10
+ while: {
11
+ condition: string;
12
+ steps: WorkflowControlFlowStep[];
13
+ };
14
+ output?: string | null;
15
+ }
16
+ export interface IfElseStep {
17
+ id: string;
18
+ if: {
19
+ condition: string;
20
+ thenBranch: WorkflowControlFlowStep[];
21
+ elseBranch?: WorkflowControlFlowStep[];
22
+ };
23
+ output?: string | null;
24
+ }
25
+ export interface BreakStep {
26
+ break: true;
27
+ }
28
+ export interface ContinueStep {
29
+ continue: true;
30
+ }
31
+ export interface TryCatchStep {
32
+ id: string;
33
+ try: {
34
+ trySteps: WorkflowControlFlowStep[];
35
+ catchSteps: WorkflowControlFlowStep[];
36
+ };
37
+ output?: string | null;
38
+ }
39
+ export type WorkflowControlFlowStep = z.infer<typeof WorkflowStepDefinitionSchema> | WhileLoopStep | IfElseStep | BreakStep | ContinueStep | TryCatchStep;
40
+ export declare const WorkflowInputDefinitionSchema: z.ZodObject<{
41
+ id: z.ZodString;
42
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ default: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
44
+ }, z.core.$strip>;
45
+ /**
46
+ * Basic workflow step - executes a task
47
+ */
48
+ export declare const WorkflowStepDefinitionSchema: z.ZodObject<{
49
+ id: z.ZodString;
50
+ tools: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
51
+ task: z.ZodString;
52
+ output: z.ZodOptional<z.ZodNullable<z.ZodString>>;
53
+ expected_outcome: z.ZodOptional<z.ZodNullable<z.ZodString>>;
54
+ outputSchema: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
55
+ timeout: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
56
+ }, z.core.$strip>;
57
+ /**
58
+ * Control flow step types
59
+ */
60
+ /**
61
+ * While loop - repeats steps while condition is true
62
+ */
63
+ export declare const WhileLoopStepSchema: z.ZodType<WhileLoopStep>;
64
+ /**
65
+ * If/else branch - conditionally executes steps
66
+ */
67
+ export declare const IfElseStepSchema: z.ZodType<IfElseStep>;
68
+ /**
69
+ * Break statement - exits the nearest enclosing loop
70
+ */
71
+ export declare const BreakStepSchema: z.ZodObject<{
72
+ break: z.ZodLiteral<true>;
73
+ }, z.core.$strip>;
74
+ /**
75
+ * Continue statement - skips to next iteration of nearest enclosing loop
76
+ */
77
+ export declare const ContinueStepSchema: z.ZodObject<{
78
+ continue: z.ZodLiteral<true>;
79
+ }, z.core.$strip>;
80
+ /**
81
+ * Try/catch block - error handling
82
+ */
83
+ export declare const TryCatchStepSchema: z.ZodObject<{
84
+ id: z.ZodString;
85
+ try: z.ZodObject<{
86
+ trySteps: z.ZodArray<z.ZodLazy<z.ZodType<WorkflowControlFlowStep, unknown, z.core.$ZodTypeInternals<WorkflowControlFlowStep, unknown>>>>;
87
+ catchSteps: z.ZodArray<z.ZodLazy<z.ZodType<WorkflowControlFlowStep, unknown, z.core.$ZodTypeInternals<WorkflowControlFlowStep, unknown>>>>;
88
+ }, z.core.$strip>;
89
+ output: z.ZodOptional<z.ZodNullable<z.ZodString>>;
90
+ }, z.core.$strip>;
91
+ /**
92
+ * Any step that can appear in a workflow's steps array
93
+ * Can be a basic step, control flow, or jump statement
94
+ */
95
+ export declare const WorkflowControlFlowStepSchema: z.ZodType<WorkflowControlFlowStep>;
96
+ /**
97
+ * Workflow definition - now supports control flow in steps
98
+ */
99
+ export declare const WorkflowDefinitionSchema: z.ZodObject<{
100
+ task: z.ZodString;
101
+ inputs: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
102
+ id: z.ZodString;
103
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
104
+ default: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
105
+ }, z.core.$strip>>>>;
106
+ steps: z.ZodArray<z.ZodType<WorkflowControlFlowStep, unknown, z.core.$ZodTypeInternals<WorkflowControlFlowStep, unknown>>>;
107
+ output: z.ZodOptional<z.ZodNullable<z.ZodString>>;
108
+ }, z.core.$strip>;
109
+ export declare const WorkflowFileSchema: z.ZodObject<{
110
+ workflows: z.ZodRecord<z.ZodString, z.ZodObject<{
111
+ task: z.ZodString;
112
+ inputs: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
113
+ id: z.ZodString;
114
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
115
+ default: z.ZodOptional<z.ZodNullable<z.ZodUnknown>>;
116
+ }, z.core.$strip>>>>;
117
+ steps: z.ZodArray<z.ZodType<WorkflowControlFlowStep, unknown, z.core.$ZodTypeInternals<WorkflowControlFlowStep, unknown>>>;
118
+ output: z.ZodOptional<z.ZodNullable<z.ZodString>>;
119
+ }, z.core.$strip>>;
120
+ }, z.core.$strip>;
121
+ export type WorkflowInputDefinition = z.infer<typeof WorkflowInputDefinitionSchema>;
122
+ export type WorkflowStepDefinition = z.infer<typeof WorkflowStepDefinitionSchema>;
123
+ export type WorkflowDefinition = z.infer<typeof WorkflowDefinitionSchema>;
124
+ export type WorkflowFile = z.infer<typeof WorkflowFileSchema>;