@pikku/core 0.11.1 → 0.12.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 (363) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/error-handler.js +3 -3
  5. package/dist/errors/errors.d.ts +8 -0
  6. package/dist/errors/errors.js +16 -0
  7. package/dist/errors/index.d.ts +0 -1
  8. package/dist/errors/index.js +0 -1
  9. package/dist/function/function-runner.d.ts +10 -3
  10. package/dist/function/function-runner.js +136 -31
  11. package/dist/function/functions.types.d.ts +35 -12
  12. package/dist/function/functions.types.js +16 -6
  13. package/dist/function/index.d.ts +2 -2
  14. package/dist/function/index.js +1 -2
  15. package/dist/handle-error.js +1 -10
  16. package/dist/index.d.ts +30 -24
  17. package/dist/index.js +19 -27
  18. package/dist/middleware/auth-apikey.d.ts +1 -1
  19. package/dist/middleware/auth-apikey.js +3 -3
  20. package/dist/middleware/auth-bearer.d.ts +1 -1
  21. package/dist/middleware/auth-bearer.js +3 -6
  22. package/dist/middleware/auth-cookie.d.ts +1 -1
  23. package/dist/middleware/auth-cookie.js +6 -8
  24. package/dist/middleware/cors.d.ts +46 -0
  25. package/dist/middleware/cors.js +73 -0
  26. package/dist/middleware/index.d.ts +5 -3
  27. package/dist/middleware/index.js +5 -3
  28. package/dist/middleware/remote-auth.d.ts +5 -0
  29. package/dist/middleware/remote-auth.js +55 -0
  30. package/dist/middleware/timeout.d.ts +1 -1
  31. package/dist/middleware-runner.d.ts +3 -14
  32. package/dist/middleware-runner.js +14 -16
  33. package/dist/permissions.d.ts +3 -86
  34. package/dist/permissions.js +20 -80
  35. package/dist/pikku-state.d.ts +33 -104
  36. package/dist/pikku-state.js +150 -66
  37. package/dist/schema.d.ts +8 -6
  38. package/dist/schema.js +31 -18
  39. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  40. package/dist/services/ai-agent-runner-service.js +1 -0
  41. package/dist/services/ai-run-state-service.d.ts +13 -0
  42. package/dist/services/ai-run-state-service.js +1 -0
  43. package/dist/services/ai-storage-service.d.ts +18 -0
  44. package/dist/services/ai-storage-service.js +1 -0
  45. package/dist/services/deployment-service.d.ts +19 -0
  46. package/dist/services/deployment-service.js +1 -0
  47. package/dist/services/gopass-secrets.d.ts +47 -0
  48. package/dist/services/gopass-secrets.js +94 -0
  49. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  50. package/dist/services/in-memory-trigger-service.js +50 -0
  51. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  52. package/dist/services/in-memory-workflow-service.js +287 -0
  53. package/dist/services/index.d.ts +25 -11
  54. package/dist/services/index.js +10 -13
  55. package/dist/services/local-secrets.d.ts +23 -0
  56. package/dist/services/local-secrets.js +45 -0
  57. package/dist/services/local-variables.d.ts +5 -0
  58. package/dist/services/local-variables.js +18 -0
  59. package/dist/services/scheduler-service.d.ts +21 -1
  60. package/dist/services/scheduler-service.js +14 -0
  61. package/dist/services/schema-service.d.ts +6 -0
  62. package/dist/services/scoped-secret-service.d.ts +16 -0
  63. package/dist/services/scoped-secret-service.js +35 -0
  64. package/dist/services/secret-service.d.ts +25 -4
  65. package/dist/services/trigger-service.d.ts +23 -0
  66. package/dist/services/trigger-service.js +1 -0
  67. package/dist/services/typed-secret-service.d.ts +30 -0
  68. package/dist/services/typed-secret-service.js +40 -0
  69. package/dist/services/typed-variables-service.d.ts +27 -0
  70. package/dist/services/typed-variables-service.js +46 -0
  71. package/dist/services/user-session-service.d.ts +13 -0
  72. package/dist/services/user-session-service.js +17 -0
  73. package/dist/services/variables-service.d.ts +5 -0
  74. package/dist/services/workflow-service.d.ts +43 -0
  75. package/dist/services/workflow-service.js +1 -0
  76. package/dist/types/core.types.d.ts +54 -10
  77. package/dist/types/core.types.js +7 -0
  78. package/dist/types/state.types.d.ts +127 -0
  79. package/dist/types/state.types.js +1 -0
  80. package/dist/utils.d.ts +10 -1
  81. package/dist/utils.js +60 -3
  82. package/dist/version.d.ts +6 -0
  83. package/dist/version.js +19 -0
  84. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  85. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  86. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  87. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  88. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  89. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  90. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  91. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  92. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  93. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  94. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  95. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  96. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  97. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  98. package/dist/wirings/ai-agent/index.d.ts +5 -0
  99. package/dist/wirings/ai-agent/index.js +4 -0
  100. package/dist/wirings/channel/channel-common.d.ts +7 -4
  101. package/dist/wirings/channel/channel-common.js +15 -8
  102. package/dist/wirings/channel/channel-handler.js +13 -4
  103. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  104. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  105. package/dist/wirings/channel/channel-runner.js +12 -12
  106. package/dist/wirings/channel/channel.types.d.ts +5 -1
  107. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  108. package/dist/wirings/channel/define-channel-routes.js +23 -0
  109. package/dist/wirings/channel/index.d.ts +10 -8
  110. package/dist/wirings/channel/index.js +7 -8
  111. package/dist/wirings/channel/local/index.d.ts +3 -3
  112. package/dist/wirings/channel/local/index.js +3 -3
  113. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  114. package/dist/wirings/channel/log-channels.js +1 -1
  115. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  116. package/dist/wirings/channel/serverless/index.js +1 -1
  117. package/dist/wirings/channel/serverless/serverless-channel-runner.js +17 -6
  118. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
  119. package/dist/wirings/cli/channel/index.d.ts +1 -1
  120. package/dist/wirings/cli/channel/index.js +1 -1
  121. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  122. package/dist/wirings/cli/cli-runner.js +22 -18
  123. package/dist/wirings/cli/cli.types.d.ts +7 -6
  124. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  125. package/dist/wirings/cli/define-cli-commands.js +20 -0
  126. package/dist/wirings/cli/index.d.ts +2 -3
  127. package/dist/wirings/cli/index.js +1 -3
  128. package/dist/wirings/http/http-routes.d.ts +69 -0
  129. package/dist/wirings/http/http-routes.js +139 -0
  130. package/dist/wirings/http/http-runner.d.ts +2 -2
  131. package/dist/wirings/http/http-runner.js +62 -27
  132. package/dist/wirings/http/http.types.d.ts +77 -24
  133. package/dist/wirings/http/index.d.ts +5 -4
  134. package/dist/wirings/http/index.js +4 -3
  135. package/dist/wirings/http/log-http-routes.js +1 -1
  136. package/dist/wirings/http/routers/path-to-regex.js +2 -2
  137. package/dist/wirings/mcp/index.d.ts +4 -3
  138. package/dist/wirings/mcp/index.js +3 -3
  139. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  140. package/dist/wirings/mcp/mcp-runner.js +42 -56
  141. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  142. package/dist/wirings/node/index.d.ts +2 -0
  143. package/dist/wirings/node/index.js +1 -0
  144. package/dist/wirings/node/node.types.d.ts +20 -0
  145. package/dist/wirings/node/node.types.js +1 -0
  146. package/dist/wirings/oauth2/index.d.ts +3 -0
  147. package/dist/wirings/oauth2/index.js +2 -0
  148. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  149. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  150. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  151. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  152. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  153. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  154. package/dist/wirings/queue/index.d.ts +2 -2
  155. package/dist/wirings/queue/index.js +1 -1
  156. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  157. package/dist/wirings/queue/queue-runner.js +23 -12
  158. package/dist/wirings/queue/queue.types.d.ts +8 -2
  159. package/dist/wirings/rpc/index.d.ts +1 -1
  160. package/dist/wirings/rpc/index.js +1 -1
  161. package/dist/wirings/rpc/rpc-runner.d.ts +40 -13
  162. package/dist/wirings/rpc/rpc-runner.js +191 -25
  163. package/dist/wirings/rpc/rpc-types.d.ts +15 -4
  164. package/dist/wirings/scheduler/index.d.ts +3 -3
  165. package/dist/wirings/scheduler/index.js +2 -3
  166. package/dist/wirings/scheduler/log-schedulers.js +1 -1
  167. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  168. package/dist/wirings/scheduler/scheduler-runner.js +28 -10
  169. package/dist/wirings/secret/index.d.ts +3 -0
  170. package/dist/wirings/secret/index.js +2 -0
  171. package/dist/wirings/secret/secret.types.d.ts +27 -0
  172. package/dist/wirings/secret/secret.types.js +1 -0
  173. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  174. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  175. package/dist/wirings/trigger/index.d.ts +3 -0
  176. package/dist/wirings/trigger/index.js +2 -0
  177. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  178. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  179. package/dist/wirings/trigger/trigger-runner.d.ts +42 -0
  180. package/dist/wirings/trigger/trigger-runner.js +85 -0
  181. package/dist/wirings/trigger/trigger.types.d.ts +130 -0
  182. package/dist/wirings/trigger/trigger.types.js +40 -0
  183. package/dist/wirings/variable/index.d.ts +3 -0
  184. package/dist/wirings/variable/index.js +2 -0
  185. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  186. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  187. package/dist/wirings/variable/variable.types.d.ts +18 -0
  188. package/dist/wirings/variable/variable.types.js +1 -0
  189. package/dist/wirings/workflow/dsl/index.d.ts +5 -0
  190. package/dist/wirings/workflow/dsl/index.js +4 -0
  191. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +292 -0
  192. package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
  193. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
  194. package/dist/wirings/workflow/dsl/workflow-runner.js +23 -0
  195. package/dist/wirings/workflow/graph/graph-node.d.ts +117 -0
  196. package/dist/wirings/workflow/graph/graph-node.js +58 -0
  197. package/dist/wirings/workflow/graph/graph-runner.d.ts +9 -0
  198. package/dist/wirings/workflow/graph/graph-runner.js +540 -0
  199. package/dist/wirings/workflow/graph/index.d.ts +4 -0
  200. package/dist/wirings/workflow/graph/index.js +3 -0
  201. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  202. package/dist/wirings/workflow/graph/template.js +27 -0
  203. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  204. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  205. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +82 -0
  206. package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
  207. package/dist/wirings/workflow/index.d.ts +7 -12
  208. package/dist/wirings/workflow/index.js +8 -11
  209. package/dist/wirings/workflow/pikku-workflow-service.d.ts +114 -10
  210. package/dist/wirings/workflow/pikku-workflow-service.js +386 -115
  211. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  212. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  213. package/dist/wirings/workflow/workflow-utils.d.ts +1 -0
  214. package/dist/wirings/workflow/workflow-utils.js +1 -0
  215. package/dist/wirings/workflow/workflow.types.d.ts +83 -214
  216. package/package.json +13 -6
  217. package/run-tests.sh +4 -1
  218. package/src/crypto-utils.ts +99 -0
  219. package/src/errors/error-handler.ts +3 -3
  220. package/src/errors/errors.ts +17 -0
  221. package/src/errors/index.ts +0 -1
  222. package/src/factory-functions.test.ts +42 -2
  223. package/src/function/function-runner.test.ts +5 -12
  224. package/src/function/function-runner.ts +195 -40
  225. package/src/function/functions.types.ts +66 -14
  226. package/src/function/index.ts +5 -2
  227. package/src/handle-error.ts +2 -10
  228. package/src/index.ts +106 -27
  229. package/src/middleware/auth-apikey.test.ts +15 -12
  230. package/src/middleware/auth-apikey.ts +3 -3
  231. package/src/middleware/auth-bearer.test.ts +17 -14
  232. package/src/middleware/auth-bearer.ts +25 -27
  233. package/src/middleware/auth-cookie.test.ts +16 -13
  234. package/src/middleware/auth-cookie.ts +6 -8
  235. package/src/middleware/cors.ts +96 -0
  236. package/src/middleware/index.ts +5 -3
  237. package/src/middleware/remote-auth.ts +68 -0
  238. package/src/middleware-runner.test.ts +122 -0
  239. package/src/middleware-runner.ts +24 -17
  240. package/src/permissions.test.ts +102 -86
  241. package/src/permissions.ts +32 -93
  242. package/src/pikku-state.ts +168 -201
  243. package/src/run-tests-script.test.ts +49 -0
  244. package/src/schema.ts +50 -18
  245. package/src/services/ai-agent-runner-service.ts +29 -0
  246. package/src/services/ai-run-state-service.ts +20 -0
  247. package/src/services/ai-storage-service.ts +39 -0
  248. package/src/services/deployment-service.ts +22 -0
  249. package/src/services/gopass-secrets.ts +95 -0
  250. package/src/services/in-memory-trigger-service.ts +68 -0
  251. package/src/services/in-memory-workflow-service.ts +395 -0
  252. package/src/services/index.ts +49 -14
  253. package/src/services/local-secrets.ts +51 -0
  254. package/src/services/local-variables.ts +22 -0
  255. package/src/services/scheduler-service.ts +29 -1
  256. package/src/services/schema-service.ts +7 -0
  257. package/src/services/scoped-secret-service.ts +41 -0
  258. package/src/services/secret-service.ts +25 -4
  259. package/src/services/trigger-service.ts +38 -0
  260. package/src/services/typed-secret-service.ts +70 -0
  261. package/src/services/typed-variables-service.ts +81 -0
  262. package/src/services/user-session-service.ts +23 -0
  263. package/src/services/variables-service.ts +5 -0
  264. package/src/services/workflow-service.ts +94 -0
  265. package/src/types/core.types.ts +82 -8
  266. package/src/types/state.types.ts +169 -0
  267. package/src/utils.ts +74 -5
  268. package/src/version.test.ts +80 -0
  269. package/src/version.ts +25 -0
  270. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  271. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  272. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  273. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  274. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  275. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  276. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  277. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  278. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  279. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  280. package/src/wirings/ai-agent/index.ts +28 -0
  281. package/src/wirings/channel/channel-common.ts +32 -19
  282. package/src/wirings/channel/channel-handler.ts +18 -5
  283. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  284. package/src/wirings/channel/channel-runner.ts +14 -15
  285. package/src/wirings/channel/channel.types.ts +17 -1
  286. package/src/wirings/channel/define-channel-routes.ts +25 -0
  287. package/src/wirings/channel/index.ts +23 -8
  288. package/src/wirings/channel/local/index.ts +3 -3
  289. package/src/wirings/channel/local/local-channel-runner.test.ts +47 -2
  290. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  291. package/src/wirings/channel/log-channels.ts +1 -1
  292. package/src/wirings/channel/serverless/index.ts +5 -1
  293. package/src/wirings/channel/serverless/serverless-channel-runner.ts +22 -6
  294. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
  295. package/src/wirings/cli/channel/index.ts +1 -1
  296. package/src/wirings/cli/cli-runner.test.ts +28 -28
  297. package/src/wirings/cli/cli-runner.ts +27 -19
  298. package/src/wirings/cli/cli.types.ts +12 -11
  299. package/src/wirings/cli/command-parser.test.ts +8 -8
  300. package/src/wirings/cli/define-cli-commands.ts +24 -0
  301. package/src/wirings/cli/index.ts +10 -4
  302. package/src/wirings/http/http-routes.test.ts +322 -0
  303. package/src/wirings/http/http-routes.ts +198 -0
  304. package/src/wirings/http/http-runner.test.ts +5 -5
  305. package/src/wirings/http/http-runner.ts +80 -29
  306. package/src/wirings/http/http.types.ts +121 -23
  307. package/src/wirings/http/index.ts +16 -4
  308. package/src/wirings/http/log-http-routes.ts +1 -1
  309. package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
  310. package/src/wirings/http/routers/path-to-regex.ts +2 -2
  311. package/src/wirings/mcp/index.ts +27 -3
  312. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  313. package/src/wirings/mcp/mcp-runner.ts +56 -67
  314. package/src/wirings/mcp/mcp.types.ts +3 -3
  315. package/src/wirings/node/index.ts +2 -0
  316. package/src/wirings/node/node.types.ts +23 -0
  317. package/src/wirings/oauth2/index.ts +3 -0
  318. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  319. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  320. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  321. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  322. package/src/wirings/queue/index.ts +14 -2
  323. package/src/wirings/queue/queue-runner.test.ts +115 -73
  324. package/src/wirings/queue/queue-runner.ts +39 -13
  325. package/src/wirings/queue/queue.types.ts +12 -2
  326. package/src/wirings/rpc/index.ts +1 -1
  327. package/src/wirings/rpc/rpc-runner.ts +270 -34
  328. package/src/wirings/rpc/rpc-types.ts +21 -4
  329. package/src/wirings/scheduler/index.ts +7 -4
  330. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  331. package/src/wirings/scheduler/scheduler-runner.test.ts +97 -53
  332. package/src/wirings/scheduler/scheduler-runner.ts +50 -10
  333. package/src/wirings/secret/index.ts +9 -0
  334. package/src/wirings/secret/secret.types.ts +32 -0
  335. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  336. package/src/wirings/trigger/index.ts +10 -0
  337. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  338. package/src/wirings/trigger/trigger-runner.ts +138 -0
  339. package/src/wirings/trigger/trigger.types.ts +178 -0
  340. package/src/wirings/variable/index.ts +8 -0
  341. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  342. package/src/wirings/variable/variable.types.ts +22 -0
  343. package/src/wirings/workflow/dsl/index.ts +31 -0
  344. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +320 -0
  345. package/src/wirings/workflow/dsl/workflow-runner.ts +28 -0
  346. package/src/wirings/workflow/graph/graph-node.ts +222 -0
  347. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  348. package/src/wirings/workflow/graph/graph-runner.ts +816 -0
  349. package/src/wirings/workflow/graph/index.ts +14 -0
  350. package/src/wirings/workflow/graph/template.ts +42 -0
  351. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  352. package/src/wirings/workflow/graph/workflow-graph.types.ts +104 -0
  353. package/src/wirings/workflow/index.ts +64 -26
  354. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  355. package/src/wirings/workflow/pikku-workflow-service.ts +571 -136
  356. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  357. package/src/wirings/workflow/workflow-utils.ts +0 -0
  358. package/src/wirings/workflow/workflow.types.ts +123 -279
  359. package/tsconfig.tsbuildinfo +1 -1
  360. package/dist/wirings/workflow/workflow-runner.d.ts +0 -34
  361. package/dist/wirings/workflow/workflow-runner.js +0 -65
  362. package/src/function/function-runner.ts.bak +0 -188
  363. package/src/wirings/workflow/workflow-runner.ts +0 -72
@@ -1,17 +1,38 @@
1
1
  /**
2
- * Interface for retrieving secrets.
2
+ * Interface for retrieving and managing secrets.
3
3
  */
4
4
  export interface SecretService {
5
5
  /**
6
- * Retrieves a secret by key.
6
+ * Retrieves a secret by key and parses it as JSON.
7
7
  * @param key - The key of the secret to retrieve.
8
- * @returns A promise that resolves to the secret value.
8
+ * @returns A promise that resolves to the parsed secret value.
9
+ * @throws If the secret is not found.
9
10
  */
10
11
  getSecretJSON<Return = {}>(key: string): Promise<Return>
11
12
  /**
12
- * Retrieves a secret by key.
13
+ * Retrieves a secret by key as a string.
13
14
  * @param key - The key of the secret to retrieve.
14
15
  * @returns A promise that resolves to the secret value.
16
+ * @throws If the secret is not found.
15
17
  */
16
18
  getSecret(key: string): Promise<string>
19
+ /**
20
+ * Checks if a secret exists without throwing.
21
+ * @param key - The key of the secret to check.
22
+ * @returns A promise that resolves to true if the secret exists, false otherwise.
23
+ */
24
+ hasSecret(key: string): Promise<boolean>
25
+ /**
26
+ * Stores a JSON value as a secret.
27
+ * @param key - The key to store the secret under.
28
+ * @param value - The JSON value to store.
29
+ * @returns A promise that resolves when the secret is stored.
30
+ */
31
+ setSecretJSON(key: string, value: unknown): Promise<void>
32
+ /**
33
+ * Deletes a secret by key.
34
+ * @param key - The key of the secret to delete.
35
+ * @returns A promise that resolves when the secret is deleted.
36
+ */
37
+ deleteSecret(key: string): Promise<void>
17
38
  }
@@ -0,0 +1,38 @@
1
+ import {
2
+ CoreSingletonServices,
3
+ CreateWireServices,
4
+ CoreServices,
5
+ CoreUserSession,
6
+ } from '../types/core.types.js'
7
+
8
+ /**
9
+ * Abstract TriggerService interface.
10
+ *
11
+ * Implementations manage trigger subscriptions — listening to external events
12
+ * and dispatching to RPC targets or workflow starts.
13
+ */
14
+ export interface TriggerService {
15
+ /**
16
+ * Set services needed for processing triggers.
17
+ * Called after construction since the trigger service is created before
18
+ * singletonServices are fully assembled.
19
+ */
20
+ setServices(
21
+ _singletonServices: CoreSingletonServices,
22
+ _createWireServices?: CreateWireServices<
23
+ CoreSingletonServices,
24
+ CoreServices,
25
+ CoreUserSession
26
+ >
27
+ ): void
28
+
29
+ /**
30
+ * Start all triggers
31
+ */
32
+ start(): Promise<void>
33
+
34
+ /**
35
+ * Stop all triggers
36
+ */
37
+ stop(): Promise<void>
38
+ }
@@ -0,0 +1,70 @@
1
+ import type { SecretService } from './secret-service.js'
2
+
3
+ export interface CredentialStatus {
4
+ secretId: string
5
+ name: string
6
+ displayName: string
7
+ isConfigured: boolean
8
+ oauth2?: { tokenSecretId: string }
9
+ }
10
+
11
+ export type CredentialMeta = {
12
+ name: string
13
+ displayName: string
14
+ oauth2?: { tokenSecretId: string }
15
+ }
16
+
17
+ export class TypedSecretService<TMap = Record<string, unknown>>
18
+ implements SecretService
19
+ {
20
+ constructor(
21
+ private secrets: SecretService,
22
+ private credentialsMeta: Record<string, CredentialMeta>
23
+ ) {}
24
+
25
+ async getSecretJSON<K extends keyof TMap & string>(key: K): Promise<TMap[K]>
26
+ async getSecretJSON<T = unknown>(key: string): Promise<T>
27
+ async getSecretJSON(key: string): Promise<unknown> {
28
+ return this.secrets.getSecretJSON(key)
29
+ }
30
+
31
+ async getSecret(key: string): Promise<string> {
32
+ return this.secrets.getSecret(key)
33
+ }
34
+
35
+ async hasSecret(key: string): Promise<boolean> {
36
+ return this.secrets.hasSecret(key)
37
+ }
38
+
39
+ async setSecretJSON<K extends string>(
40
+ key: K,
41
+ value: K extends keyof TMap ? TMap[K] : unknown
42
+ ): Promise<void> {
43
+ return this.secrets.setSecretJSON(key, value)
44
+ }
45
+
46
+ async deleteSecret(key: string): Promise<void> {
47
+ return this.secrets.deleteSecret(key)
48
+ }
49
+
50
+ async getAllStatus(): Promise<CredentialStatus[]> {
51
+ const results: CredentialStatus[] = []
52
+
53
+ for (const [secretId, meta] of Object.entries(this.credentialsMeta)) {
54
+ results.push({
55
+ secretId,
56
+ name: meta.name,
57
+ displayName: meta.displayName,
58
+ isConfigured: await this.secrets.hasSecret(secretId),
59
+ oauth2: meta.oauth2,
60
+ })
61
+ }
62
+
63
+ return results
64
+ }
65
+
66
+ async getMissing(): Promise<CredentialStatus[]> {
67
+ const all = await this.getAllStatus()
68
+ return all.filter((c) => !c.isConfigured)
69
+ }
70
+ }
@@ -0,0 +1,81 @@
1
+ import type { VariablesService } from './variables-service.js'
2
+
3
+ export interface VariableStatus {
4
+ variableId: string
5
+ name: string
6
+ displayName: string
7
+ isConfigured: boolean
8
+ }
9
+
10
+ export type VariableMeta = {
11
+ name: string
12
+ displayName: string
13
+ }
14
+
15
+ export class TypedVariablesService<TMap = Record<string, unknown>>
16
+ implements VariablesService
17
+ {
18
+ constructor(
19
+ private variables: VariablesService,
20
+ private variablesMeta: Record<string, VariableMeta>
21
+ ) {}
22
+
23
+ get(
24
+ name: keyof TMap & string
25
+ ): Promise<string | undefined> | string | undefined
26
+ get(name: string): Promise<string | undefined> | string | undefined
27
+ get(name: string): Promise<string | undefined> | string | undefined {
28
+ return this.variables.get(name)
29
+ }
30
+
31
+ getJSON<K extends keyof TMap & string>(
32
+ name: K
33
+ ): Promise<TMap[K] | undefined> | TMap[K] | undefined
34
+ getJSON<T = unknown>(name: string): Promise<T | undefined> | T | undefined
35
+ getJSON(name: string): Promise<unknown> | unknown {
36
+ return this.variables.getJSON(name)
37
+ }
38
+
39
+ getAll():
40
+ | Promise<Record<string, string | undefined>>
41
+ | Record<string, string | undefined> {
42
+ return this.variables.getAll()
43
+ }
44
+
45
+ set(name: string, value: string): Promise<void> | void {
46
+ return this.variables.set(name, value)
47
+ }
48
+
49
+ setJSON(name: string, value: unknown): Promise<void> | void {
50
+ return this.variables.setJSON(name, value)
51
+ }
52
+
53
+ has(name: string): Promise<boolean> | boolean {
54
+ return this.variables.has(name)
55
+ }
56
+
57
+ delete(name: string): Promise<void> | void {
58
+ return this.variables.delete(name)
59
+ }
60
+
61
+ async getAllStatus(): Promise<VariableStatus[]> {
62
+ const results: VariableStatus[] = []
63
+ const all = await this.variables.getAll()
64
+
65
+ for (const [variableId, meta] of Object.entries(this.variablesMeta)) {
66
+ results.push({
67
+ variableId,
68
+ name: meta.name,
69
+ displayName: meta.displayName,
70
+ isConfigured: all[variableId] !== undefined,
71
+ })
72
+ }
73
+
74
+ return results
75
+ }
76
+
77
+ async getMissing(): Promise<VariableStatus[]> {
78
+ const all = await this.getAllStatus()
79
+ return all.filter((v) => !v.isConfigured)
80
+ }
81
+ }
@@ -61,3 +61,26 @@ export class PikkuSessionService<UserSession extends CoreUserSession>
61
61
  return this.session
62
62
  }
63
63
  }
64
+
65
+ export function createMiddlewareSessionWireProps<
66
+ UserSession extends CoreUserSession,
67
+ >(session: SessionService<UserSession>) {
68
+ return {
69
+ session: session.get(),
70
+ setSession: (s: UserSession) => session.setInitial(s),
71
+ getSession: () => session.get(),
72
+ hasSessionChanged: () => session.sessionChanged,
73
+ }
74
+ }
75
+
76
+ export function createFunctionSessionWireProps<
77
+ UserSession extends CoreUserSession,
78
+ >(session: SessionService<UserSession>) {
79
+ return {
80
+ session: session.freezeInitial(),
81
+ setSession: (s: UserSession) => session.set(s),
82
+ clearSession: () => session.clear(),
83
+ getSession: () => session.get(),
84
+ hasSessionChanged: () => session.sessionChanged,
85
+ }
86
+ }
@@ -1,6 +1,11 @@
1
1
  export interface VariablesService {
2
2
  get: (name: string) => Promise<string | undefined> | string | undefined
3
+ getJSON: <T = unknown>(name: string) => Promise<T | undefined> | T | undefined
3
4
  getAll: () =>
4
5
  | Promise<Record<string, string | undefined>>
5
6
  | Record<string, string | undefined>
7
+ set: (name: string, value: string) => Promise<void> | void
8
+ setJSON: (name: string, value: unknown) => Promise<void> | void
9
+ has: (name: string) => Promise<boolean> | boolean
10
+ delete: (name: string) => Promise<void> | void
6
11
  }
@@ -0,0 +1,94 @@
1
+ import {
2
+ SerializedError,
3
+ CoreSingletonServices,
4
+ CreateWireServices,
5
+ CoreConfig,
6
+ } from '../types/core.types.js'
7
+ import {
8
+ WorkflowRun,
9
+ WorkflowRunWire,
10
+ StepState,
11
+ WorkflowStatus,
12
+ } from '../wirings/workflow/workflow.types.js'
13
+
14
+ /**
15
+ * Interface for workflow orchestration
16
+ * Handles workflow execution, replay, orchestration logic, and run-level state
17
+ */
18
+ export interface WorkflowService {
19
+ // Run-level state operations
20
+ createRun(
21
+ workflowName: string,
22
+ input: any,
23
+ inline: boolean,
24
+ graphHash: string,
25
+ wire: WorkflowRunWire
26
+ ): Promise<string>
27
+ getRun(id: string): Promise<WorkflowRun | null>
28
+ getRunHistory(runId: string): Promise<Array<StepState & { stepName: string }>>
29
+ updateRunStatus(
30
+ id: string,
31
+ status: WorkflowStatus,
32
+ output?: any,
33
+ error?: SerializedError
34
+ ): Promise<void>
35
+ withRunLock<T>(id: string, fn: () => Promise<T>): Promise<T>
36
+ close(): Promise<void>
37
+
38
+ // Orchestration operations
39
+ resumeWorkflow(runId: string): Promise<void>
40
+ setServices(
41
+ singletonServices: CoreSingletonServices,
42
+ createWireServices: CreateWireServices | undefined,
43
+ config: CoreConfig
44
+ ): void
45
+ startWorkflow<I>(
46
+ name: string,
47
+ input: I,
48
+ wire: WorkflowRunWire,
49
+ rpcService: any,
50
+ options?: { inline?: boolean; startNode?: string }
51
+ ): Promise<{ runId: string }>
52
+ runWorkflowJob(runId: string, rpcService: any): Promise<void>
53
+ orchestrateWorkflow(runId: string, rpcService: any): Promise<void>
54
+ executeWorkflowSleepCompleted(runId: string, stepId: string): Promise<void>
55
+
56
+ // Step-level state operations
57
+ insertStepState(
58
+ runId: string,
59
+ stepName: string,
60
+ rpcName: string,
61
+ data: any,
62
+ stepOptions?: { retries?: number; retryDelay?: string | number }
63
+ ): Promise<StepState>
64
+ getStepState(runId: string, stepName: string): Promise<StepState>
65
+ setStepRunning(stepId: string): Promise<void>
66
+ setStepScheduled(stepId: string): Promise<void>
67
+ setStepResult(stepId: string, result: any): Promise<void>
68
+ setStepError(stepId: string, error: Error): Promise<void>
69
+ createRetryAttempt(
70
+ stepId: string,
71
+ status: 'pending' | 'running'
72
+ ): Promise<StepState>
73
+
74
+ // Step execution
75
+ executeWorkflowStep(
76
+ runId: string,
77
+ stepName: string,
78
+ rpcName: string | null,
79
+ data: any,
80
+ rpcService: any
81
+ ): Promise<void>
82
+
83
+ // Version operations
84
+ upsertWorkflowVersion(
85
+ name: string,
86
+ graphHash: string,
87
+ graph: any,
88
+ source: string
89
+ ): Promise<void>
90
+ getWorkflowVersion(
91
+ name: string,
92
+ graphHash: string
93
+ ): Promise<{ graph: any; source: string } | null>
94
+ }
@@ -1,10 +1,14 @@
1
1
  import type { Logger, LogLevel } from '../services/logger.js'
2
2
  import { VariablesService } from '../services/variables-service.js'
3
+ import { SecretService } from '../services/secret-service.js'
3
4
  import { SchemaService } from '../services/schema-service.js'
4
5
  import { JWTService } from '../services/jwt-service.js'
5
6
  import { PikkuHTTP } from '../wirings/http/http.types.js'
6
- import { SessionService } from '../services/user-session-service.js'
7
- import { PikkuChannel } from '../wirings/channel/channel.types.js'
7
+ import {
8
+ PikkuChannel,
9
+ CorePikkuChannelMiddleware,
10
+ CorePikkuChannelMiddlewareFactory,
11
+ } from '../wirings/channel/channel.types.js'
8
12
  import { PikkuRPC } from '../wirings/rpc/rpc-types.js'
9
13
  import { PikkuMCP } from '../wirings/mcp/mcp.types.js'
10
14
  import { PikkuScheduledTask } from '../wirings/scheduler/scheduler.types.js'
@@ -16,23 +20,38 @@ import {
16
20
  WorkflowServiceConfig,
17
21
  WorkflowStepWire,
18
22
  } from '../wirings/workflow/workflow.types.js'
23
+ import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js'
24
+ import { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
19
25
  import { SchedulerService } from '../services/scheduler-service.js'
26
+ import { DeploymentService } from '../services/deployment-service.js'
27
+ import { AIStorageService } from '../services/ai-storage-service.js'
28
+
29
+ import { AIAgentRunnerService } from '../services/ai-agent-runner-service.js'
30
+ import { AIRunStateService } from '../services/ai-run-state-service.js'
31
+ import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
20
32
 
21
33
  export type PikkuWiringTypes =
22
34
  | 'http'
23
35
  | 'scheduler'
36
+ | 'trigger'
24
37
  | 'channel'
25
38
  | 'rpc'
26
39
  | 'queue'
27
40
  | 'mcp'
28
41
  | 'cli'
29
42
  | 'workflow'
43
+ | 'agent'
30
44
 
31
45
  export interface FunctionServicesMeta {
32
46
  optimized: boolean
33
47
  services: string[]
34
48
  }
35
49
 
50
+ export interface FunctionWiresMeta {
51
+ optimized: boolean
52
+ wires: string[]
53
+ }
54
+
36
55
  /**
37
56
  * Metadata for middleware at any level
38
57
  * - type: 'http' = HTTP route middleware group (references httpGroup in pikkuState)
@@ -76,19 +95,26 @@ export type PermissionMetadata =
76
95
  }
77
96
 
78
97
  export type FunctionRuntimeMeta = {
79
- pikkuFuncName: string
98
+ pikkuFuncId: string
80
99
  inputSchemaName: string | null
81
100
  outputSchemaName: string | null
82
101
  expose?: boolean
83
- internal?: boolean
102
+ remote?: boolean
103
+ mcp?: boolean
104
+ sessionless?: boolean
105
+ version?: number
106
+ requiresApproval?: boolean
107
+ contractHash?: string
84
108
  }
85
109
 
86
110
  export type FunctionMeta = FunctionRuntimeMeta &
87
111
  Partial<
88
112
  {
89
113
  name: string
114
+ functionType: 'user' | 'inline' | 'helper'
115
+ funcWrapper: string
90
116
  services: FunctionServicesMeta
91
- usedWires: string[]
117
+ wires: FunctionWiresMeta
92
118
  inputs: string[] | null
93
119
  outputs: string[] | null
94
120
  middleware: MiddlewareMetadata[]
@@ -169,12 +195,23 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
169
195
  logger: Logger
170
196
  /** The variable service to be used */
171
197
  variables: VariablesService
198
+ /** The secrets service to retrieve secrets */
199
+ secrets: SecretService
172
200
  /** The workflow orchestrator service */
173
201
  workflowService?: WorkflowService
174
202
  /** The queue service */
175
203
  queueService?: QueueService
176
204
  /** The scheduler service */
177
205
  schedulerService?: SchedulerService
206
+ /** The deployment service for service discovery */
207
+ deploymentService?: DeploymentService
208
+ /** AI agent storage service (threads, messages, working memory) */
209
+ aiStorage?: AIStorageService
210
+
211
+ /** AI agent runner service (model calls + tool loop) */
212
+ aiAgentRunner?: AIAgentRunnerService
213
+ /** AI run state service (run lifecycle + approval persistence) */
214
+ aiRunState?: AIRunStateService
178
215
  }
179
216
 
180
217
  /**
@@ -189,7 +226,10 @@ export type PikkuWire<
189
226
  IsChannel extends true | null = null,
190
227
  MCPTools extends string | never = never,
191
228
  TypedWorkflow extends PikkuWorkflowWire | never = PikkuWorkflowWire,
229
+ TriggerOutput = unknown,
192
230
  > = Partial<{
231
+ wireType: PikkuWiringTypes
232
+ wireId: string
193
233
  http: PikkuHTTP<In>
194
234
  mcp: PikkuMCP<MCPTools>
195
235
  rpc: TypedRPC
@@ -201,10 +241,19 @@ export type PikkuWire<
201
241
  cli: PikkuCLI
202
242
  workflow: TypedWorkflow
203
243
  workflowStep: WorkflowStepWire
204
- initialSession: HasInitialSession extends true
244
+ graph: PikkuGraphWire
245
+ trigger: PikkuTrigger<TriggerOutput>
246
+ session: HasInitialSession extends true
205
247
  ? UserSession
206
248
  : UserSession | undefined
207
- session: SessionService<UserSession>
249
+ /** Update and persist the current session */
250
+ setSession: (session: CoreUserSession) => Promise<void> | void
251
+ /** Clear and persist the current session */
252
+ clearSession: () => Promise<void> | void
253
+ /** Fetch the latest session (may read from backing store) */
254
+ getSession: () => Promise<UserSession> | UserSession | undefined
255
+ /** Whether the session was modified during this run */
256
+ hasSessionChanged: () => boolean
208
257
  }>
209
258
 
210
259
  /**
@@ -318,6 +367,30 @@ export const pikkuMiddlewareFactory = <In = any>(
318
367
  return factory
319
368
  }
320
369
 
370
+ export const pikkuChannelMiddleware = <
371
+ SingletonServices extends CoreSingletonServices = CoreSingletonServices,
372
+ Event = unknown,
373
+ >(
374
+ middleware: CorePikkuChannelMiddleware<SingletonServices, Event>
375
+ ): CorePikkuChannelMiddleware<SingletonServices, Event> => {
376
+ return middleware
377
+ }
378
+
379
+ export const pikkuChannelMiddlewareFactory = <In = any>(
380
+ factory: CorePikkuChannelMiddlewareFactory<In>
381
+ ): CorePikkuChannelMiddlewareFactory<In> => {
382
+ return factory
383
+ }
384
+
385
+ export type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
386
+
387
+ export const pikkuAIMiddleware = <
388
+ State extends Record<string, unknown> = Record<string, unknown>,
389
+ SingletonServices extends CoreSingletonServices = CoreSingletonServices,
390
+ >(
391
+ hooks: PikkuAIMiddlewareHooks<State, SingletonServices>
392
+ ): PikkuAIMiddlewareHooks<State, SingletonServices> => hooks
393
+
321
394
  /**
322
395
  * Represents the core services used by Pikku, including singleton services.
323
396
  */
@@ -365,8 +438,9 @@ export type CreateConfig<
365
438
  * Represents the documentation for a route, including summary, description, tags, and errors.
366
439
  */
367
440
  export type CommonWireMeta = {
368
- pikkuFuncName: string
441
+ pikkuFuncId: string
369
442
 
443
+ title?: string
370
444
  tags?: string[]
371
445
  summary?: string
372
446
  description?: string