@pikku/core 0.12.2 → 0.12.4

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 (282) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/crypto-utils.d.ts +10 -0
  3. package/dist/crypto-utils.js +62 -0
  4. package/dist/function/function-runner.js +4 -4
  5. package/dist/function/functions.types.d.ts +26 -1
  6. package/dist/function/functions.types.js +16 -0
  7. package/dist/handle-error.d.ts +1 -1
  8. package/dist/handle-error.js +7 -3
  9. package/dist/index.d.ts +14 -2
  10. package/dist/index.js +1 -1
  11. package/dist/pikku-state.js +3 -1
  12. package/dist/schema.js +1 -1
  13. package/dist/services/in-memory-workflow-service.d.ts +22 -3
  14. package/dist/services/in-memory-workflow-service.js +77 -1
  15. package/dist/services/workflow-service.d.ts +8 -2
  16. package/dist/testing/index.d.ts +2 -0
  17. package/dist/testing/index.js +1 -0
  18. package/dist/testing/service-tests.d.ts +31 -0
  19. package/dist/testing/service-tests.js +598 -0
  20. package/dist/types/core.types.d.ts +9 -1
  21. package/dist/types/state.types.d.ts +4 -2
  22. package/dist/utils/hash.d.ts +2 -0
  23. package/dist/utils/hash.js +23 -0
  24. package/dist/wirings/ai-agent/agent-dynamic-workflow.d.ts +6 -0
  25. package/dist/wirings/ai-agent/agent-dynamic-workflow.js +348 -0
  26. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +1 -1
  27. package/dist/wirings/ai-agent/ai-agent-memory.js +6 -5
  28. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +10 -7
  29. package/dist/wirings/ai-agent/ai-agent-prepare.js +127 -47
  30. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +4 -0
  31. package/dist/wirings/ai-agent/ai-agent-runner.js +381 -27
  32. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +7 -2
  33. package/dist/wirings/ai-agent/ai-agent-stream.js +109 -46
  34. package/dist/wirings/ai-agent/ai-agent.types.d.ts +22 -1
  35. package/dist/wirings/ai-agent/index.d.ts +1 -2
  36. package/dist/wirings/ai-agent/index.js +1 -2
  37. package/dist/wirings/channel/channel-handler.js +5 -1
  38. package/dist/wirings/channel/channel.types.d.ts +1 -7
  39. package/dist/wirings/channel/local/local-channel-handler.d.ts +1 -1
  40. package/dist/wirings/channel/local/local-channel-handler.js +5 -3
  41. package/dist/wirings/channel/local/local-channel-runner.js +14 -4
  42. package/dist/wirings/channel/serverless/serverless-channel-runner.js +4 -1
  43. package/dist/wirings/cli/cli-runner.js +10 -2
  44. package/dist/wirings/cli/cli.types.d.ts +1 -0
  45. package/dist/wirings/http/http-routes.js +0 -1
  46. package/dist/wirings/http/http-runner.d.ts +1 -1
  47. package/dist/wirings/http/http-runner.js +25 -3
  48. package/dist/wirings/http/http.types.d.ts +3 -11
  49. package/dist/wirings/http/index.d.ts +2 -1
  50. package/dist/wirings/http/index.js +1 -0
  51. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -0
  52. package/dist/wirings/http/pikku-fetch-http-request.js +3 -0
  53. package/dist/wirings/http/pikku-fetch-http-response.d.ts +1 -0
  54. package/dist/wirings/http/pikku-fetch-http-response.js +4 -4
  55. package/dist/wirings/http/web-request.d.ts +12 -0
  56. package/dist/wirings/http/web-request.js +85 -0
  57. package/dist/wirings/mcp/mcp-endpoint-registry.js +1 -1
  58. package/dist/wirings/mcp/mcp-runner.js +13 -1
  59. package/dist/wirings/rpc/rpc-runner.d.ts +30 -6
  60. package/dist/wirings/rpc/rpc-runner.js +36 -14
  61. package/dist/wirings/rpc/rpc-types.d.ts +6 -1
  62. package/dist/wirings/rpc/wire-addon.d.ts +1 -0
  63. package/dist/wirings/rpc/wire-addon.js +1 -1
  64. package/dist/wirings/scheduler/scheduler-runner.js +1 -0
  65. package/dist/wirings/workflow/graph/graph-validation.d.ts +3 -0
  66. package/dist/wirings/workflow/graph/graph-validation.js +175 -0
  67. package/dist/wirings/workflow/graph/index.d.ts +1 -0
  68. package/dist/wirings/workflow/graph/index.js +1 -0
  69. package/dist/wirings/workflow/index.d.ts +1 -1
  70. package/dist/wirings/workflow/pikku-workflow-service.d.ts +8 -2
  71. package/dist/wirings/workflow/pikku-workflow-service.js +1 -2
  72. package/dist/wirings/workflow/workflow.types.d.ts +10 -1
  73. package/lcov.info +18891 -0
  74. package/package.json +4 -2
  75. package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +0 -5
  76. package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +0 -168
  77. package/src/crypto-utils.test.ts +0 -116
  78. package/src/crypto-utils.ts +0 -99
  79. package/src/errors/error-handler.ts +0 -62
  80. package/src/errors/error.test.ts +0 -195
  81. package/src/errors/errors.ts +0 -374
  82. package/src/errors/index.ts +0 -2
  83. package/src/factory-functions.test.ts +0 -109
  84. package/src/function/function-runner.test.ts +0 -536
  85. package/src/function/function-runner.ts +0 -365
  86. package/src/function/functions.types.ts +0 -267
  87. package/src/function/index.ts +0 -5
  88. package/src/handle-error.test.ts +0 -361
  89. package/src/handle-error.ts +0 -65
  90. package/src/index.ts +0 -104
  91. package/src/internal.ts +0 -6
  92. package/src/middleware/auth-apikey.test.ts +0 -363
  93. package/src/middleware/auth-apikey.ts +0 -47
  94. package/src/middleware/auth-bearer.test.ts +0 -450
  95. package/src/middleware/auth-bearer.ts +0 -72
  96. package/src/middleware/auth-cookie.test.ts +0 -528
  97. package/src/middleware/auth-cookie.ts +0 -80
  98. package/src/middleware/cors.test.ts +0 -424
  99. package/src/middleware/cors.ts +0 -104
  100. package/src/middleware/index.ts +0 -5
  101. package/src/middleware/remote-auth.test.ts +0 -488
  102. package/src/middleware/remote-auth.ts +0 -68
  103. package/src/middleware/timeout.ts +0 -15
  104. package/src/middleware-runner.test.ts +0 -418
  105. package/src/middleware-runner.ts +0 -234
  106. package/src/permissions.test.ts +0 -434
  107. package/src/permissions.ts +0 -319
  108. package/src/pikku-request.ts +0 -23
  109. package/src/pikku-response.ts +0 -5
  110. package/src/pikku-state.test.ts +0 -224
  111. package/src/pikku-state.ts +0 -214
  112. package/src/run-tests-script.test.ts +0 -49
  113. package/src/schema.test.ts +0 -249
  114. package/src/schema.ts +0 -151
  115. package/src/services/ai-agent-runner-service.ts +0 -41
  116. package/src/services/ai-run-state-service.ts +0 -20
  117. package/src/services/ai-storage-service.ts +0 -39
  118. package/src/services/content-service.ts +0 -76
  119. package/src/services/deployment-service.ts +0 -22
  120. package/src/services/gateway-service.ts +0 -20
  121. package/src/services/gopass-secrets.ts +0 -98
  122. package/src/services/in-memory-ai-run-state-service.ts +0 -73
  123. package/src/services/in-memory-trigger-service.ts +0 -64
  124. package/src/services/in-memory-workflow-service.test.ts +0 -351
  125. package/src/services/in-memory-workflow-service.ts +0 -395
  126. package/src/services/index.ts +0 -56
  127. package/src/services/jwt-service.ts +0 -30
  128. package/src/services/local-content.ts +0 -120
  129. package/src/services/local-gateway-service.ts +0 -62
  130. package/src/services/local-secrets.test.ts +0 -80
  131. package/src/services/local-secrets.ts +0 -94
  132. package/src/services/local-variables.test.ts +0 -61
  133. package/src/services/local-variables.ts +0 -39
  134. package/src/services/logger-console.test.ts +0 -118
  135. package/src/services/logger-console.ts +0 -98
  136. package/src/services/logger.ts +0 -57
  137. package/src/services/scheduler-service.ts +0 -86
  138. package/src/services/schema-service.ts +0 -33
  139. package/src/services/scoped-secret-service.test.ts +0 -74
  140. package/src/services/scoped-secret-service.ts +0 -41
  141. package/src/services/secret-service.ts +0 -38
  142. package/src/services/trigger-service.ts +0 -17
  143. package/src/services/typed-secret-service.test.ts +0 -93
  144. package/src/services/typed-secret-service.ts +0 -70
  145. package/src/services/typed-variables-service.test.ts +0 -73
  146. package/src/services/typed-variables-service.ts +0 -81
  147. package/src/services/user-session-service.test.ts +0 -113
  148. package/src/services/user-session-service.ts +0 -86
  149. package/src/services/variables-service.ts +0 -11
  150. package/src/services/workflow-service.ts +0 -84
  151. package/src/time-utils.test.ts +0 -56
  152. package/src/time-utils.ts +0 -107
  153. package/src/types/core.types.ts +0 -470
  154. package/src/types/state.types.ts +0 -186
  155. package/src/utils.test.ts +0 -350
  156. package/src/utils.ts +0 -129
  157. package/src/version.test.ts +0 -80
  158. package/src/version.ts +0 -25
  159. package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +0 -363
  160. package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +0 -238
  161. package/src/wirings/ai-agent/ai-agent-helpers.test.ts +0 -152
  162. package/src/wirings/ai-agent/ai-agent-helpers.ts +0 -76
  163. package/src/wirings/ai-agent/ai-agent-memory.ts +0 -309
  164. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +0 -115
  165. package/src/wirings/ai-agent/ai-agent-model-config.ts +0 -43
  166. package/src/wirings/ai-agent/ai-agent-prepare.ts +0 -522
  167. package/src/wirings/ai-agent/ai-agent-registry.test.ts +0 -37
  168. package/src/wirings/ai-agent/ai-agent-registry.ts +0 -82
  169. package/src/wirings/ai-agent/ai-agent-runner.test.ts +0 -317
  170. package/src/wirings/ai-agent/ai-agent-runner.ts +0 -251
  171. package/src/wirings/ai-agent/ai-agent-stream.test.ts +0 -652
  172. package/src/wirings/ai-agent/ai-agent-stream.ts +0 -1060
  173. package/src/wirings/ai-agent/ai-agent.types.ts +0 -360
  174. package/src/wirings/ai-agent/index.ts +0 -41
  175. package/src/wirings/channel/channel-common.ts +0 -90
  176. package/src/wirings/channel/channel-handler.ts +0 -241
  177. package/src/wirings/channel/channel-middleware-runner.ts +0 -120
  178. package/src/wirings/channel/channel-runner.ts +0 -166
  179. package/src/wirings/channel/channel-store.ts +0 -29
  180. package/src/wirings/channel/channel.types.ts +0 -178
  181. package/src/wirings/channel/define-channel-routes.ts +0 -25
  182. package/src/wirings/channel/eventhub-service.ts +0 -34
  183. package/src/wirings/channel/eventhub-store.ts +0 -13
  184. package/src/wirings/channel/index.ts +0 -24
  185. package/src/wirings/channel/local/index.ts +0 -3
  186. package/src/wirings/channel/local/local-channel-handler.ts +0 -79
  187. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -215
  188. package/src/wirings/channel/local/local-channel-runner.ts +0 -200
  189. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -95
  190. package/src/wirings/channel/local/local-eventhub-service.ts +0 -101
  191. package/src/wirings/channel/log-channels.ts +0 -20
  192. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -54
  193. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -45
  194. package/src/wirings/channel/serverless/index.ts +0 -5
  195. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -286
  196. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -136
  197. package/src/wirings/cli/channel/index.ts +0 -1
  198. package/src/wirings/cli/cli-runner.test.ts +0 -403
  199. package/src/wirings/cli/cli-runner.ts +0 -519
  200. package/src/wirings/cli/cli.types.ts +0 -357
  201. package/src/wirings/cli/command-parser.test.ts +0 -445
  202. package/src/wirings/cli/command-parser.ts +0 -504
  203. package/src/wirings/cli/define-cli-commands.ts +0 -24
  204. package/src/wirings/cli/index.ts +0 -19
  205. package/src/wirings/gateway/gateway-runner.test.ts +0 -474
  206. package/src/wirings/gateway/gateway-runner.ts +0 -411
  207. package/src/wirings/gateway/gateway.types.ts +0 -149
  208. package/src/wirings/gateway/index.ts +0 -13
  209. package/src/wirings/http/http-routes.test.ts +0 -322
  210. package/src/wirings/http/http-routes.ts +0 -198
  211. package/src/wirings/http/http-runner.test.ts +0 -144
  212. package/src/wirings/http/http-runner.ts +0 -563
  213. package/src/wirings/http/http.types.ts +0 -378
  214. package/src/wirings/http/index.ts +0 -25
  215. package/src/wirings/http/log-http-routes.ts +0 -22
  216. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -237
  217. package/src/wirings/http/pikku-fetch-http-request.ts +0 -166
  218. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -82
  219. package/src/wirings/http/pikku-fetch-http-response.ts +0 -147
  220. package/src/wirings/http/routers/http-router.ts +0 -13
  221. package/src/wirings/http/routers/path-to-regex.test.ts +0 -319
  222. package/src/wirings/http/routers/path-to-regex.ts +0 -126
  223. package/src/wirings/mcp/index.ts +0 -27
  224. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -389
  225. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  226. package/src/wirings/mcp/mcp-runner.ts +0 -305
  227. package/src/wirings/mcp/mcp.types.ts +0 -216
  228. package/src/wirings/node/index.ts +0 -2
  229. package/src/wirings/node/node.types.ts +0 -23
  230. package/src/wirings/oauth2/index.ts +0 -3
  231. package/src/wirings/oauth2/oauth2-client.test.ts +0 -929
  232. package/src/wirings/oauth2/oauth2-client.ts +0 -335
  233. package/src/wirings/oauth2/oauth2.types.ts +0 -69
  234. package/src/wirings/oauth2/wire-oauth2-credential.ts +0 -23
  235. package/src/wirings/queue/index.ts +0 -31
  236. package/src/wirings/queue/queue-runner.test.ts +0 -710
  237. package/src/wirings/queue/queue-runner.ts +0 -192
  238. package/src/wirings/queue/queue.types.ts +0 -189
  239. package/src/wirings/queue/register-queue-helper.ts +0 -60
  240. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  241. package/src/wirings/queue/validate-worker-config.ts +0 -116
  242. package/src/wirings/rpc/index.ts +0 -4
  243. package/src/wirings/rpc/rpc-runner.ts +0 -439
  244. package/src/wirings/rpc/rpc-types.ts +0 -51
  245. package/src/wirings/rpc/wire-addon.ts +0 -20
  246. package/src/wirings/scheduler/index.ts +0 -11
  247. package/src/wirings/scheduler/log-schedulers.ts +0 -20
  248. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -660
  249. package/src/wirings/scheduler/scheduler-runner.ts +0 -132
  250. package/src/wirings/scheduler/scheduler.types.ts +0 -53
  251. package/src/wirings/secret/index.ts +0 -9
  252. package/src/wirings/secret/secret.types.ts +0 -32
  253. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -140
  254. package/src/wirings/secret/validate-secret-definitions.ts +0 -82
  255. package/src/wirings/trigger/index.ts +0 -10
  256. package/src/wirings/trigger/pikku-trigger-service.ts +0 -112
  257. package/src/wirings/trigger/trigger-runner.test.ts +0 -79
  258. package/src/wirings/trigger/trigger-runner.ts +0 -135
  259. package/src/wirings/trigger/trigger.types.ts +0 -178
  260. package/src/wirings/variable/index.ts +0 -8
  261. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -91
  262. package/src/wirings/variable/validate-variable-definitions.ts +0 -69
  263. package/src/wirings/variable/variable.types.ts +0 -22
  264. package/src/wirings/workflow/dsl/index.ts +0 -31
  265. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -320
  266. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -28
  267. package/src/wirings/workflow/graph/graph-node.ts +0 -222
  268. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -487
  269. package/src/wirings/workflow/graph/graph-runner.ts +0 -816
  270. package/src/wirings/workflow/graph/index.ts +0 -14
  271. package/src/wirings/workflow/graph/template.test.ts +0 -49
  272. package/src/wirings/workflow/graph/template.ts +0 -42
  273. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -29
  274. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -104
  275. package/src/wirings/workflow/index.ts +0 -81
  276. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -200
  277. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1165
  278. package/src/wirings/workflow/workflow-helpers.test.ts +0 -129
  279. package/src/wirings/workflow/workflow-helpers.ts +0 -79
  280. package/src/wirings/workflow/workflow.types.ts +0 -266
  281. package/tsconfig.json +0 -14
  282. package/tsconfig.tsbuildinfo +0 -1
@@ -1,320 +0,0 @@
1
- /**
2
- * DSL (Domain Specific Language) workflow types
3
- * These types define the step-based workflow format extracted by the inspector
4
- */
5
-
6
- import type { WorkflowRun } from '../workflow.types.js'
7
-
8
- /**
9
- * Workflow step options
10
- */
11
- export interface WorkflowStepOptions {
12
- /** Display name for logs/UI (optional, doesn't affect execution) */
13
- description?: string
14
- /** Number of retry attempts for failed steps (only applies to local execution) */
15
- retries?: number
16
- /** Delay between retry attempts (e.g., '1s', '2s', '2min') */
17
- retryDelay?: string | number
18
- // Future: timeout, failFast, priority
19
- }
20
-
21
- /**
22
- * Type signature for workflow.do() RPC form - used by inspector
23
- */
24
- export type WorkflowWireDoRPC = <TOutput = any, TInput = any>(
25
- stepName: string,
26
- rpcName: string,
27
- data: TInput,
28
- options?: WorkflowStepOptions
29
- ) => Promise<TOutput>
30
-
31
- /**
32
- * Type signature for workflow.do() inline form - used by inspector
33
- */
34
- export type WorkflowWireDoInline = <T>(
35
- stepName: string,
36
- fn: () => Promise<T> | T,
37
- options?: WorkflowStepOptions
38
- ) => Promise<T>
39
-
40
- /**
41
- * Type signature for workflow.sleep() - used by inspector
42
- */
43
- export type WorkflowWireSleep = (
44
- stepName: string,
45
- duration: string
46
- ) => Promise<void>
47
-
48
- /**
49
- * Type signature for workflow.suspend() - used by inspector
50
- */
51
- export type WorkflowWireSuspend = (reason: string) => Promise<void>
52
-
53
- /**
54
- * Input source for step arguments in DSL workflows
55
- */
56
- export type InputSource =
57
- | { from: 'input'; path: string }
58
- | { from: 'outputVar'; name: string; path?: string }
59
- | { from: 'item'; path: string }
60
- | { from: 'literal'; value: unknown }
61
- | { from: 'template'; parts: string[]; expressions: InputSource[] }
62
-
63
- /**
64
- * Output binding for return statements in DSL workflows
65
- */
66
- export type OutputBinding =
67
- | { from: 'outputVar'; name: string; path?: string }
68
- | { from: 'stateVar'; name: string; path?: string }
69
- | { from: 'input'; path: string }
70
- | { from: 'literal'; value: unknown }
71
- | { from: 'expression'; expression: string }
72
-
73
- /**
74
- * RPC step metadata (base form)
75
- */
76
- export interface RpcStepMeta {
77
- /** RPC form - generates queue worker */
78
- type: 'rpc'
79
- /** Cache key (stepName from workflow.do) */
80
- stepName: string
81
- /** RPC to invoke */
82
- rpcName: string
83
- /** Output variable name (if assigned) */
84
- outputVar?: string
85
- /** Input source mappings, or 'passthrough' when entire data is passed */
86
- inputs?: Record<string, InputSource> | 'passthrough'
87
- /** Step options */
88
- options?: WorkflowStepOptions
89
- }
90
-
91
- /**
92
- * Simple condition expression (leaf node)
93
- */
94
- export interface SimpleCondition {
95
- type: 'simple'
96
- expression: string
97
- }
98
-
99
- /**
100
- * Nested condition structure supporting AND/OR operations
101
- */
102
- export type Condition =
103
- | SimpleCondition
104
- | { type: 'and'; conditions: Condition[] }
105
- | { type: 'or'; conditions: Condition[] }
106
-
107
- /**
108
- * A single branch in an if/else-if chain
109
- */
110
- export interface BranchCase {
111
- /** Condition for this branch */
112
- condition: Condition
113
- /** Steps to execute when condition is true */
114
- steps: WorkflowStepMeta[]
115
- }
116
-
117
- /**
118
- * Branch step metadata (if/else-if/else control flow)
119
- */
120
- export interface BranchStepMeta {
121
- type: 'branch'
122
- /** Branches in order: first is "if", rest are "else if" */
123
- branches: BranchCase[]
124
- /** Else branch steps (when no conditions match) */
125
- elseSteps?: WorkflowStepMeta[]
126
- }
127
-
128
- /**
129
- * Parallel group step metadata (Promise.all with multiple steps)
130
- */
131
- export interface ParallelGroupStepMeta {
132
- type: 'parallel'
133
- /** Child steps to execute in parallel */
134
- children: RpcStepMeta[]
135
- }
136
-
137
- /**
138
- * Fanout step metadata (parallel or sequential iteration)
139
- */
140
- export interface FanoutStepMeta {
141
- type: 'fanout'
142
- /** Step name for this fanout */
143
- stepName: string
144
- /** Source array variable name */
145
- sourceVar: string
146
- /** Iterator variable name */
147
- itemVar: string
148
- /** Execution mode */
149
- mode: 'parallel' | 'sequential'
150
- /** Child step to execute per iteration */
151
- child: RpcStepMeta
152
- /** Time between iterations (sequential mode only) */
153
- timeBetween?: string
154
- }
155
-
156
- /**
157
- * Return step metadata (workflow output)
158
- */
159
- export interface ReturnStepMeta {
160
- type: 'return'
161
- /** Output bindings */
162
- outputs: Record<string, OutputBinding>
163
- }
164
-
165
- /**
166
- * Inline step metadata (legacy support)
167
- */
168
- export interface InlineStepMeta {
169
- /** Inline form - local execution */
170
- type: 'inline'
171
- /** Cache key (stepName from workflow.do) */
172
- stepName: string
173
- /** Display name */
174
- description?: string
175
- /** Step options */
176
- options?: WorkflowStepOptions
177
- }
178
-
179
- /**
180
- * Sleep step metadata
181
- */
182
- export interface SleepStepMeta {
183
- /** Sleep step */
184
- type: 'sleep'
185
- /** Cache key (stepName from workflow.sleep) */
186
- stepName: string
187
- /** Sleep duration */
188
- duration: string | number
189
- }
190
-
191
- /**
192
- * Cancel step metadata
193
- */
194
- export interface CancelStepMeta {
195
- /** Cancel step */
196
- type: 'cancel'
197
- /** Optional cancellation reason */
198
- reason?: string
199
- }
200
-
201
- /**
202
- * Set step metadata (context variable assignment)
203
- */
204
- export interface SetStepMeta {
205
- /** Set step */
206
- type: 'set'
207
- /** Variable name to set (must be in context) */
208
- variable: string
209
- /** Value to assign (literal or expression) */
210
- value: unknown
211
- }
212
-
213
- /**
214
- * Switch case metadata
215
- */
216
- export interface SwitchCaseMeta {
217
- /** Case value (literal) or expression */
218
- value?: string | number | boolean | null
219
- /** Case expression (for complex cases) */
220
- expression?: string
221
- /** Steps to execute for this case */
222
- steps: WorkflowStepMeta[]
223
- }
224
-
225
- /**
226
- * Switch step metadata (switch/case control flow)
227
- */
228
- export interface SwitchStepMeta {
229
- type: 'switch'
230
- /** Expression being switched on */
231
- expression: string
232
- /** Case branches */
233
- cases: SwitchCaseMeta[]
234
- /** Default case steps (optional) */
235
- defaultSteps?: WorkflowStepMeta[]
236
- }
237
-
238
- /**
239
- * Filter step metadata (array.filter)
240
- */
241
- export interface FilterStepMeta {
242
- type: 'filter'
243
- /** Source array variable name */
244
- sourceVar: string
245
- /** Iterator variable name */
246
- itemVar: string
247
- /** Filter condition */
248
- condition: Condition
249
- /** Output variable name (if assigned) */
250
- outputVar?: string
251
- }
252
-
253
- /**
254
- * Array predicate step metadata (array.some, array.every)
255
- */
256
- export interface ArrayPredicateStepMeta {
257
- type: 'arrayPredicate'
258
- /** Predicate mode */
259
- mode: 'some' | 'every'
260
- /** Source array variable name */
261
- sourceVar: string
262
- /** Iterator variable name */
263
- itemVar: string
264
- /** Predicate condition */
265
- condition: Condition
266
- /** Output variable name (if assigned) */
267
- outputVar?: string
268
- }
269
-
270
- /**
271
- * Workflow step metadata (extracted by inspector)
272
- */
273
- export type WorkflowStepMeta =
274
- | RpcStepMeta
275
- | BranchStepMeta
276
- | ParallelGroupStepMeta
277
- | FanoutStepMeta
278
- | ReturnStepMeta
279
- | InlineStepMeta
280
- | SleepStepMeta
281
- | CancelStepMeta
282
- | SwitchStepMeta
283
- | FilterStepMeta
284
- | ArrayPredicateStepMeta
285
- | SetStepMeta
286
-
287
- /**
288
- * Workflow step wire context for RPC functions
289
- * Provides step-level metadata including retry attempt tracking
290
- */
291
- export interface WorkflowStepWire {
292
- /** The workflow run ID */
293
- runId: string
294
- /** The unique step ID */
295
- stepId: string
296
- /** Current attempt number (1-indexed, increments on retry) */
297
- attemptCount: number
298
- }
299
-
300
- /**
301
- * Workflow wire object for DSL workflows
302
- * Provides workflow-specific capabilities to function execution
303
- */
304
- export interface PikkuWorkflowWire {
305
- /** The workflow name */
306
- name: string
307
- /** The current run ID */
308
- runId: string
309
- /** Get the current workflow run */
310
- getRun: () => Promise<WorkflowRun>
311
-
312
- /** Execute a workflow step (overloaded - RPC or inline form) */
313
- do: WorkflowWireDoRPC & WorkflowWireDoInline
314
-
315
- /** Sleep for a duration */
316
- sleep: WorkflowWireSleep
317
-
318
- /** Suspend workflow until explicitly resumed */
319
- suspend: WorkflowWireSuspend
320
- }
@@ -1,28 +0,0 @@
1
- import { pikkuState } from '../../../pikku-state.js'
2
- import { addFunction } from '../../../function/function-runner.js'
3
- import { PikkuMissingMetaError } from '../../../errors/errors.js'
4
-
5
- /**
6
- * Add a workflow to the system
7
- * This is called by the generated workflow wirings
8
- */
9
- export const addWorkflow = (workflowName: string, workflowFunc: any) => {
10
- // Get workflow metadata from inspector
11
- const meta = pikkuState(null, 'workflows', 'meta')
12
- const workflowMeta = meta[workflowName]
13
- if (!workflowMeta) {
14
- throw new PikkuMissingMetaError(
15
- `Missing generated metadata for workflow '${workflowName}'`
16
- )
17
- }
18
-
19
- // Store workflow definition in state
20
- const registrations = pikkuState(null, 'workflows', 'registrations')
21
- registrations.set(workflowName, {
22
- name: workflowName,
23
- func: workflowFunc,
24
- })
25
-
26
- // Register the function with pikku
27
- addFunction(workflowMeta.pikkuFuncId, workflowFunc)
28
- }
@@ -1,222 +0,0 @@
1
- import type {
2
- GraphNodeConfig,
3
- NextConfig,
4
- RefValue,
5
- } from './workflow-graph.types.js'
6
-
7
- /**
8
- * Standard RPC handler interface (matches generated FlattenedRPCMap entries)
9
- */
10
- export interface RPCHandler<I = any, O = any> {
11
- input: I
12
- output: O
13
- }
14
-
15
- /**
16
- * Compute output types for all nodes based on their func (RPC name)
17
- */
18
- export type NodeOutputMap<
19
- Nodes extends Record<string, { func: string }>,
20
- RPCMap extends Record<string, RPCHandler>,
21
- > = {
22
- [K in keyof Nodes]: Nodes[K]['func'] extends keyof RPCMap
23
- ? RPCMap[Nodes[K]['func']]['output']
24
- : unknown
25
- }
26
-
27
- /**
28
- * Node definition with RPC name reference
29
- */
30
- export interface GraphNodeDef<
31
- RPCMap extends Record<string, RPCHandler>,
32
- NodeIds extends string = string,
33
- NodeOutputs extends Record<string, any> = Record<string, any>,
34
- > {
35
- /** RPC function name (must be a key in RPCMap) */
36
- func: keyof RPCMap & string
37
- /** Input mapping - reference outputs from other nodes with autocomplete */
38
- input?: (
39
- ref: <N extends keyof NodeOutputs & string>(
40
- nodeId: N,
41
- path: keyof NodeOutputs[N] & string
42
- ) => RefValue
43
- ) => Record<string, unknown>
44
- /** Next node(s) to execute */
45
- next?: NextConfig<NodeIds>
46
- /** Error handling - node(s) to execute on error */
47
- onError?: NodeIds | NodeIds[]
48
- }
49
-
50
- /**
51
- * Helper to create a type-safe graph definition with RPC autocomplete.
52
- * Pass node IDs as first type parameter for type-safe next/ref/output key completion.
53
- *
54
- * @example
55
- * ```typescript
56
- * // Import the typed graph from generated types
57
- * import { pikkuWorkflowGraph } from './.pikku/workflow/pikku-workflow-types.gen.js'
58
- *
59
- * export const myGraph = pikkuWorkflowGraph({
60
- * name: 'myWorkflow',
61
- * nodes: {
62
- * entry: 'createUserProfile', // autocompletes RPC names
63
- * sendWelcome: 'sendEmail',
64
- * },
65
- * config: {
66
- * entry: { next: 'sendWelcome' },
67
- * sendWelcome: {
68
- * input: (ref) => ({
69
- * to: ref('entry', 'email'), // 'entry' and 'email' both autocomplete
70
- * }),
71
- * },
72
- * },
73
- * })
74
- * ```
75
- */
76
- /**
77
- * Type to compute output types for all nodes based on their func mapping
78
- */
79
- type ComputeNodeOutputs<
80
- FuncMap extends Record<string, string>,
81
- RPCMap extends Record<string, RPCHandler>,
82
- > = {
83
- [K in keyof FuncMap]: FuncMap[K] extends keyof RPCMap
84
- ? RPCMap[FuncMap[K]]['output']
85
- : unknown
86
- }
87
-
88
- /**
89
- * Type to compute input types for all nodes based on their func mapping
90
- */
91
- type ComputeNodeInputs<
92
- FuncMap extends Record<string, string>,
93
- RPCMap extends Record<string, RPCHandler>,
94
- > = {
95
- [K in keyof FuncMap]: FuncMap[K] extends keyof RPCMap
96
- ? RPCMap[FuncMap[K]]['input']
97
- : unknown
98
- }
99
-
100
- /**
101
- * Typed ref value - carries the type of the referenced field as a phantom type.
102
- * At runtime this is just RefValue, but TypeScript tracks the type T.
103
- */
104
- export type TypedRef<T> = RefValue & { __phantomType?: T }
105
-
106
- /**
107
- * Map input type fields to allow TypedRef of matching type as an alternative
108
- */
109
- type InputWithRefs<T> = {
110
- [K in keyof T]: T[K] | TypedRef<T[K]>
111
- }
112
-
113
- export function createGraph<RPCMap extends Record<string, RPCHandler>>() {
114
- return <const FuncMap extends Record<string, keyof RPCMap & string>>(
115
- funcMap: FuncMap,
116
- nodesOrBuilder?:
117
- | GraphNodeConfigMap<FuncMap, RPCMap>
118
- | ((nodes: FuncMap) => GraphNodeConfigMap<FuncMap, RPCMap>)
119
- ): Record<
120
- Extract<keyof FuncMap, string>,
121
- GraphNodeConfig<Extract<keyof FuncMap, string>>
122
- > => {
123
- type NodeIds = Extract<keyof FuncMap, string>
124
-
125
- // If no nodes provided, return just the funcMap converted to graph nodes
126
- if (!nodesOrBuilder) {
127
- const result: Record<string, GraphNodeConfig<string>> = {}
128
- for (const [nodeId, rpcName] of Object.entries(funcMap)) {
129
- result[nodeId] = {
130
- func: rpcName as string,
131
- }
132
- }
133
- return result as Record<NodeIds, GraphNodeConfig<NodeIds>>
134
- }
135
-
136
- const nodes =
137
- typeof nodesOrBuilder === 'function'
138
- ? nodesOrBuilder(funcMap)
139
- : nodesOrBuilder
140
-
141
- const result: Record<string, GraphNodeConfig<string>> = {}
142
-
143
- for (const [nodeId, def] of Object.entries(nodes) as [string, any][]) {
144
- result[nodeId] = {
145
- func: funcMap[nodeId] as string,
146
- input: def?.input as any,
147
- next: def?.next,
148
- onError: def?.onError,
149
- }
150
- }
151
-
152
- return result as Record<NodeIds, GraphNodeConfig<NodeIds>>
153
- }
154
- }
155
-
156
- /**
157
- * Type helper for node configuration map
158
- */
159
- type GraphNodeConfigMap<
160
- FuncMap extends Record<string, string>,
161
- RPCMap extends Record<string, RPCHandler>,
162
- > = {
163
- [K in Extract<keyof FuncMap, string>]?: {
164
- next?: NextConfig<Extract<keyof FuncMap, string>>
165
- input?: (
166
- ref: <
167
- N extends Extract<keyof FuncMap, string>,
168
- P extends keyof ComputeNodeOutputs<FuncMap, RPCMap>[N] & string,
169
- >(
170
- nodeId: N,
171
- path: P
172
- ) => TypedRef<ComputeNodeOutputs<FuncMap, RPCMap>[N][P]>
173
- ) => InputWithRefs<ComputeNodeInputs<FuncMap, RPCMap>[K]>
174
- onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[]
175
- }
176
- }
177
-
178
- /**
179
- * Untyped graph for use without RPC map.
180
- * Pass node IDs as type parameter for type-safe next/ref, or omit for untyped usage.
181
- *
182
- * @example
183
- * ```typescript
184
- * // Typed usage - next and ref are type-checked
185
- * graph<'entry' | 'sendWelcome'>({
186
- * entry: { func: 'createUserProfile', next: 'sendWelcome' },
187
- * sendWelcome: { func: 'sendEmail', input: (ref) => ({ to: ref('entry', 'email') }) },
188
- * })
189
- *
190
- * // Untyped usage - no type checking on next/ref
191
- * graph({
192
- * entry: { func: 'createUserProfile', next: 'sendWelcome' },
193
- * sendWelcome: { func: 'sendEmail' },
194
- * })
195
- * ```
196
- */
197
- export function graph<NodeIds extends string = string>(
198
- nodes: Record<
199
- NodeIds,
200
- {
201
- func: string
202
- next?: NextConfig<NodeIds>
203
- input?: (
204
- ref: (nodeId: NodeIds, path: string) => RefValue
205
- ) => Record<string, unknown>
206
- onError?: NodeIds | NodeIds[]
207
- }
208
- >
209
- ): Record<NodeIds, GraphNodeConfig<NodeIds>> {
210
- const result: Record<string, GraphNodeConfig<string>> = {}
211
-
212
- for (const [nodeId, def] of Object.entries(nodes) as [string, any][]) {
213
- result[nodeId] = {
214
- func: def.func,
215
- input: def.input as any,
216
- next: def.next,
217
- onError: def.onError,
218
- }
219
- }
220
-
221
- return result as Record<NodeIds, GraphNodeConfig<NodeIds>>
222
- }