@pikku/core 0.11.2 → 0.12.1

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 (436) hide show
  1. package/CHANGELOG.md +57 -2
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/errors.d.ts +14 -0
  5. package/dist/errors/errors.js +26 -0
  6. package/dist/errors/index.d.ts +1 -1
  7. package/dist/errors/index.js +1 -1
  8. package/dist/function/function-runner.d.ts +10 -4
  9. package/dist/function/function-runner.js +126 -45
  10. package/dist/function/functions.types.d.ts +32 -87
  11. package/dist/function/functions.types.js +16 -46
  12. package/dist/function/index.d.ts +2 -2
  13. package/dist/function/index.js +1 -2
  14. package/dist/handle-error.d.ts +2 -2
  15. package/dist/handle-error.js +3 -12
  16. package/dist/index.d.ts +30 -26
  17. package/dist/index.js +19 -29
  18. package/dist/internal.d.ts +3 -0
  19. package/dist/internal.js +2 -0
  20. package/dist/middleware/auth-apikey.d.ts +2 -2
  21. package/dist/middleware/auth-apikey.js +3 -3
  22. package/dist/middleware/auth-bearer.d.ts +3 -3
  23. package/dist/middleware/auth-bearer.js +4 -7
  24. package/dist/middleware/auth-cookie.d.ts +4 -4
  25. package/dist/middleware/auth-cookie.js +7 -9
  26. package/dist/middleware/cors.d.ts +46 -0
  27. package/dist/middleware/cors.js +81 -0
  28. package/dist/middleware/index.d.ts +5 -3
  29. package/dist/middleware/index.js +5 -3
  30. package/dist/middleware/remote-auth.d.ts +5 -0
  31. package/dist/middleware/remote-auth.js +55 -0
  32. package/dist/middleware/timeout.d.ts +2 -2
  33. package/dist/middleware-runner.d.ts +1 -1
  34. package/dist/middleware-runner.js +8 -10
  35. package/dist/permissions.d.ts +2 -2
  36. package/dist/permissions.js +11 -15
  37. package/dist/pikku-state.d.ts +10 -8
  38. package/dist/pikku-state.js +48 -25
  39. package/dist/schema.d.ts +4 -4
  40. package/dist/schema.js +20 -15
  41. package/dist/services/ai-agent-runner-service.d.ts +43 -0
  42. package/dist/services/ai-agent-runner-service.js +1 -0
  43. package/dist/services/ai-run-state-service.d.ts +13 -0
  44. package/dist/services/ai-run-state-service.js +1 -0
  45. package/dist/services/ai-storage-service.d.ts +18 -0
  46. package/dist/services/ai-storage-service.js +1 -0
  47. package/dist/services/content-service.d.ts +6 -0
  48. package/dist/services/deployment-service.d.ts +19 -0
  49. package/dist/services/deployment-service.js +1 -0
  50. package/dist/services/gopass-secrets.d.ts +47 -0
  51. package/dist/services/gopass-secrets.js +97 -0
  52. package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
  53. package/dist/services/in-memory-ai-run-state-service.js +44 -0
  54. package/dist/services/in-memory-trigger-service.d.ts +22 -0
  55. package/dist/services/in-memory-trigger-service.js +48 -0
  56. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  57. package/dist/services/in-memory-workflow-service.js +287 -0
  58. package/dist/services/index.d.ts +26 -11
  59. package/dist/services/index.js +11 -13
  60. package/dist/services/local-content.d.ts +2 -1
  61. package/dist/services/local-content.js +6 -1
  62. package/dist/services/local-secrets.d.ts +25 -2
  63. package/dist/services/local-secrets.js +45 -0
  64. package/dist/services/local-variables.d.ts +6 -1
  65. package/dist/services/local-variables.js +18 -0
  66. package/dist/services/logger-console.d.ts +2 -1
  67. package/dist/services/scheduler-service.d.ts +9 -1
  68. package/dist/services/scheduler-service.js +8 -0
  69. package/dist/services/schema-service.d.ts +6 -0
  70. package/dist/services/scoped-secret-service.d.ts +16 -0
  71. package/dist/services/scoped-secret-service.js +35 -0
  72. package/dist/services/secret-service.d.ts +25 -4
  73. package/dist/services/trigger-service.d.ts +16 -0
  74. package/dist/services/trigger-service.js +1 -0
  75. package/dist/services/typed-secret-service.d.ts +30 -0
  76. package/dist/services/typed-secret-service.js +40 -0
  77. package/dist/services/typed-variables-service.d.ts +27 -0
  78. package/dist/services/typed-variables-service.js +46 -0
  79. package/dist/services/user-session-service.d.ts +15 -2
  80. package/dist/services/user-session-service.js +17 -0
  81. package/dist/services/variables-service.d.ts +5 -0
  82. package/dist/services/workflow-service.d.ts +9 -5
  83. package/dist/types/core.types.d.ts +67 -25
  84. package/dist/types/core.types.js +8 -1
  85. package/dist/types/state.types.d.ts +53 -59
  86. package/dist/utils.d.ts +7 -6
  87. package/dist/utils.js +27 -12
  88. package/dist/version.d.ts +6 -0
  89. package/dist/version.js +19 -0
  90. package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
  91. package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
  92. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
  93. package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
  94. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  95. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  96. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  97. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  98. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
  99. package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
  100. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  101. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  102. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  103. package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
  104. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
  105. package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
  106. package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
  107. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  108. package/dist/wirings/ai-agent/index.d.ts +7 -0
  109. package/dist/wirings/ai-agent/index.js +6 -0
  110. package/dist/wirings/channel/channel-common.d.ts +8 -5
  111. package/dist/wirings/channel/channel-common.js +15 -8
  112. package/dist/wirings/channel/channel-handler.d.ts +3 -3
  113. package/dist/wirings/channel/channel-handler.js +15 -6
  114. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  115. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  116. package/dist/wirings/channel/channel-runner.d.ts +5 -5
  117. package/dist/wirings/channel/channel-runner.js +10 -9
  118. package/dist/wirings/channel/channel-store.d.ts +1 -1
  119. package/dist/wirings/channel/channel.types.d.ts +9 -7
  120. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  121. package/dist/wirings/channel/define-channel-routes.js +23 -0
  122. package/dist/wirings/channel/index.d.ts +10 -8
  123. package/dist/wirings/channel/index.js +7 -8
  124. package/dist/wirings/channel/local/index.d.ts +3 -3
  125. package/dist/wirings/channel/local/index.js +3 -3
  126. package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
  127. package/dist/wirings/channel/local/local-channel-runner.js +22 -9
  128. package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
  129. package/dist/wirings/channel/log-channels.d.ts +1 -1
  130. package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
  131. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  132. package/dist/wirings/channel/serverless/index.js +1 -1
  133. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
  134. package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
  135. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
  136. package/dist/wirings/cli/channel/index.d.ts +1 -1
  137. package/dist/wirings/cli/channel/index.js +1 -1
  138. package/dist/wirings/cli/cli-runner.d.ts +3 -3
  139. package/dist/wirings/cli/cli-runner.js +12 -8
  140. package/dist/wirings/cli/cli.types.d.ts +9 -9
  141. package/dist/wirings/cli/command-parser.d.ts +1 -1
  142. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  143. package/dist/wirings/cli/define-cli-commands.js +20 -0
  144. package/dist/wirings/cli/index.d.ts +2 -3
  145. package/dist/wirings/cli/index.js +1 -3
  146. package/dist/wirings/http/http-routes.d.ts +69 -0
  147. package/dist/wirings/http/http-routes.js +139 -0
  148. package/dist/wirings/http/http-runner.d.ts +9 -9
  149. package/dist/wirings/http/http-runner.js +79 -34
  150. package/dist/wirings/http/http.types.d.ts +77 -41
  151. package/dist/wirings/http/index.d.ts +5 -4
  152. package/dist/wirings/http/index.js +4 -3
  153. package/dist/wirings/http/log-http-routes.d.ts +1 -1
  154. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
  155. package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
  156. package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
  157. package/dist/wirings/http/routers/http-router.d.ts +1 -1
  158. package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
  159. package/dist/wirings/mcp/index.d.ts +4 -3
  160. package/dist/wirings/mcp/index.js +3 -3
  161. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
  162. package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
  163. package/dist/wirings/mcp/mcp-runner.js +28 -40
  164. package/dist/wirings/mcp/mcp.types.d.ts +5 -5
  165. package/dist/wirings/node/index.d.ts +2 -0
  166. package/dist/wirings/node/index.js +1 -0
  167. package/dist/wirings/node/node.types.d.ts +20 -0
  168. package/dist/wirings/node/node.types.js +1 -0
  169. package/dist/wirings/oauth2/index.d.ts +3 -0
  170. package/dist/wirings/oauth2/index.js +2 -0
  171. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  172. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  173. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  174. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  175. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  176. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  177. package/dist/wirings/queue/index.d.ts +1 -1
  178. package/dist/wirings/queue/queue-runner.d.ts +1 -5
  179. package/dist/wirings/queue/queue-runner.js +11 -8
  180. package/dist/wirings/queue/queue.types.d.ts +5 -5
  181. package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
  182. package/dist/wirings/queue/register-queue-helper.js +1 -1
  183. package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
  184. package/dist/wirings/rpc/index.d.ts +3 -1
  185. package/dist/wirings/rpc/index.js +2 -1
  186. package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
  187. package/dist/wirings/rpc/rpc-runner.js +177 -31
  188. package/dist/wirings/rpc/rpc-types.d.ts +20 -4
  189. package/dist/wirings/rpc/wire-addon.d.ts +10 -0
  190. package/dist/wirings/rpc/wire-addon.js +9 -0
  191. package/dist/wirings/scheduler/index.d.ts +2 -2
  192. package/dist/wirings/scheduler/index.js +1 -2
  193. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
  194. package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
  195. package/dist/wirings/scheduler/scheduler-runner.js +11 -14
  196. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
  197. package/dist/wirings/secret/index.d.ts +3 -0
  198. package/dist/wirings/secret/index.js +2 -0
  199. package/dist/wirings/secret/secret.types.d.ts +27 -0
  200. package/dist/wirings/secret/secret.types.js +1 -0
  201. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  202. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  203. package/dist/wirings/trigger/index.d.ts +3 -2
  204. package/dist/wirings/trigger/index.js +2 -2
  205. package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
  206. package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
  207. package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
  208. package/dist/wirings/trigger/trigger-runner.js +48 -19
  209. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  210. package/dist/wirings/trigger/trigger.types.js +40 -1
  211. package/dist/wirings/variable/index.d.ts +3 -0
  212. package/dist/wirings/variable/index.js +2 -0
  213. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  214. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  215. package/dist/wirings/variable/variable.types.d.ts +18 -0
  216. package/dist/wirings/variable/variable.types.js +1 -0
  217. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  218. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  219. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  220. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  221. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  222. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  223. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  224. package/dist/wirings/workflow/graph/index.js +3 -3
  225. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  226. package/dist/wirings/workflow/graph/template.js +27 -0
  227. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  228. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  229. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  230. package/dist/wirings/workflow/index.d.ts +6 -6
  231. package/dist/wirings/workflow/index.js +6 -4
  232. package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
  233. package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
  234. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  235. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  236. package/dist/wirings/workflow/workflow.types.d.ts +42 -95
  237. package/package.json +14 -15
  238. package/run-tests.sh +4 -1
  239. package/src/crypto-utils.test.ts +116 -0
  240. package/src/crypto-utils.ts +99 -0
  241. package/src/errors/error.test.ts +143 -2
  242. package/src/errors/errors.ts +27 -0
  243. package/src/errors/index.ts +1 -1
  244. package/src/factory-functions.test.ts +42 -2
  245. package/src/function/function-runner.test.ts +6 -13
  246. package/src/function/function-runner.ts +161 -53
  247. package/src/function/functions.types.ts +63 -132
  248. package/src/function/index.ts +5 -2
  249. package/src/handle-error.test.ts +361 -0
  250. package/src/handle-error.ts +6 -14
  251. package/src/index.ts +97 -30
  252. package/src/internal.ts +6 -0
  253. package/src/middleware/auth-apikey.test.ts +16 -13
  254. package/src/middleware/auth-apikey.ts +3 -3
  255. package/src/middleware/auth-bearer.test.ts +18 -15
  256. package/src/middleware/auth-bearer.ts +27 -32
  257. package/src/middleware/auth-cookie.test.ts +17 -14
  258. package/src/middleware/auth-cookie.ts +9 -13
  259. package/src/middleware/cors.test.ts +424 -0
  260. package/src/middleware/cors.ts +104 -0
  261. package/src/middleware/index.ts +5 -3
  262. package/src/middleware/remote-auth.test.ts +488 -0
  263. package/src/middleware/remote-auth.ts +68 -0
  264. package/src/middleware-runner.test.ts +123 -1
  265. package/src/middleware-runner.ts +13 -13
  266. package/src/permissions.test.ts +83 -9
  267. package/src/permissions.ts +17 -19
  268. package/src/pikku-state.test.ts +224 -0
  269. package/src/pikku-state.ts +59 -35
  270. package/src/run-tests-script.test.ts +49 -0
  271. package/src/schema.test.ts +198 -6
  272. package/src/schema.ts +28 -21
  273. package/src/services/ai-agent-runner-service.ts +41 -0
  274. package/src/services/ai-run-state-service.ts +20 -0
  275. package/src/services/ai-storage-service.ts +39 -0
  276. package/src/services/content-service.ts +7 -0
  277. package/src/services/deployment-service.ts +22 -0
  278. package/src/services/gopass-secrets.ts +98 -0
  279. package/src/services/in-memory-ai-run-state-service.ts +73 -0
  280. package/src/services/in-memory-trigger-service.ts +64 -0
  281. package/src/services/in-memory-workflow-service.test.ts +351 -0
  282. package/src/services/in-memory-workflow-service.ts +395 -0
  283. package/src/services/index.ts +50 -14
  284. package/src/services/local-content.ts +9 -3
  285. package/src/services/local-secrets.test.ts +80 -0
  286. package/src/services/local-secrets.ts +53 -2
  287. package/src/services/local-variables.test.ts +61 -0
  288. package/src/services/local-variables.ts +23 -1
  289. package/src/services/logger-console.test.ts +118 -0
  290. package/src/services/logger-console.ts +2 -1
  291. package/src/services/scheduler-service.ts +11 -1
  292. package/src/services/schema-service.ts +7 -0
  293. package/src/services/scoped-secret-service.test.ts +74 -0
  294. package/src/services/scoped-secret-service.ts +41 -0
  295. package/src/services/secret-service.ts +25 -4
  296. package/src/services/trigger-service.ts +17 -0
  297. package/src/services/typed-secret-service.test.ts +93 -0
  298. package/src/services/typed-secret-service.ts +70 -0
  299. package/src/services/typed-variables-service.test.ts +73 -0
  300. package/src/services/typed-variables-service.ts +81 -0
  301. package/src/services/user-session-service.test.ts +113 -0
  302. package/src/services/user-session-service.ts +25 -2
  303. package/src/services/variables-service.ts +5 -0
  304. package/src/services/workflow-service.ts +23 -13
  305. package/src/time-utils.test.ts +1 -1
  306. package/src/types/core.types.ts +95 -24
  307. package/src/types/state.types.ts +56 -73
  308. package/src/utils.test.ts +350 -0
  309. package/src/utils.ts +33 -18
  310. package/src/version.test.ts +80 -0
  311. package/src/version.ts +25 -0
  312. package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
  313. package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
  314. package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
  315. package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
  316. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  317. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
  318. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  319. package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
  320. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  321. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  322. package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
  323. package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
  324. package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
  325. package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
  326. package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
  327. package/src/wirings/ai-agent/index.ts +39 -0
  328. package/src/wirings/channel/channel-common.ts +33 -20
  329. package/src/wirings/channel/channel-handler.ts +26 -9
  330. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  331. package/src/wirings/channel/channel-runner.ts +15 -16
  332. package/src/wirings/channel/channel-store.ts +1 -1
  333. package/src/wirings/channel/channel.types.ts +21 -9
  334. package/src/wirings/channel/define-channel-routes.ts +25 -0
  335. package/src/wirings/channel/index.ts +23 -8
  336. package/src/wirings/channel/local/index.ts +3 -3
  337. package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
  338. package/src/wirings/channel/local/local-channel-runner.ts +40 -19
  339. package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
  340. package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
  341. package/src/wirings/channel/log-channels.ts +1 -1
  342. package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
  343. package/src/wirings/channel/serverless/index.ts +5 -1
  344. package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
  345. package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
  346. package/src/wirings/cli/channel/index.ts +1 -1
  347. package/src/wirings/cli/cli-runner.test.ts +10 -10
  348. package/src/wirings/cli/cli-runner.ts +28 -14
  349. package/src/wirings/cli/cli.types.ts +14 -14
  350. package/src/wirings/cli/command-parser.test.ts +9 -9
  351. package/src/wirings/cli/command-parser.ts +1 -1
  352. package/src/wirings/cli/define-cli-commands.ts +24 -0
  353. package/src/wirings/cli/index.ts +10 -4
  354. package/src/wirings/http/http-routes.test.ts +322 -0
  355. package/src/wirings/http/http-routes.ts +198 -0
  356. package/src/wirings/http/http-runner.test.ts +12 -20
  357. package/src/wirings/http/http-runner.ts +101 -51
  358. package/src/wirings/http/http.types.ts +119 -48
  359. package/src/wirings/http/index.ts +16 -4
  360. package/src/wirings/http/log-http-routes.ts +1 -1
  361. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  362. package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
  363. package/src/wirings/http/routers/http-router.ts +1 -1
  364. package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
  365. package/src/wirings/http/routers/path-to-regex.ts +4 -3
  366. package/src/wirings/mcp/index.ts +27 -3
  367. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  368. package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
  369. package/src/wirings/mcp/mcp-runner.ts +48 -65
  370. package/src/wirings/mcp/mcp.types.ts +5 -5
  371. package/src/wirings/node/index.ts +2 -0
  372. package/src/wirings/node/node.types.ts +23 -0
  373. package/src/wirings/oauth2/index.ts +3 -0
  374. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  375. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  376. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  377. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  378. package/src/wirings/queue/index.ts +13 -2
  379. package/src/wirings/queue/queue-runner.test.ts +142 -73
  380. package/src/wirings/queue/queue-runner.ts +18 -14
  381. package/src/wirings/queue/queue.types.ts +5 -5
  382. package/src/wirings/queue/register-queue-helper.ts +3 -5
  383. package/src/wirings/queue/validate-worker-config.test.ts +108 -0
  384. package/src/wirings/queue/validate-worker-config.ts +4 -1
  385. package/src/wirings/rpc/index.ts +3 -1
  386. package/src/wirings/rpc/rpc-runner.ts +254 -41
  387. package/src/wirings/rpc/rpc-types.ts +28 -4
  388. package/src/wirings/rpc/wire-addon.ts +20 -0
  389. package/src/wirings/scheduler/index.ts +6 -4
  390. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  391. package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
  392. package/src/wirings/scheduler/scheduler-runner.ts +20 -27
  393. package/src/wirings/scheduler/scheduler.types.ts +2 -2
  394. package/src/wirings/secret/index.ts +9 -0
  395. package/src/wirings/secret/secret.types.ts +32 -0
  396. package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
  397. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  398. package/src/wirings/trigger/index.ts +10 -2
  399. package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
  400. package/src/wirings/trigger/trigger-runner.test.ts +79 -0
  401. package/src/wirings/trigger/trigger-runner.ts +80 -41
  402. package/src/wirings/trigger/trigger.types.ts +144 -22
  403. package/src/wirings/variable/index.ts +8 -0
  404. package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
  405. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  406. package/src/wirings/variable/variable.types.ts +22 -0
  407. package/src/wirings/workflow/dsl/index.ts +1 -0
  408. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  409. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  410. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  411. package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
  412. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  413. package/src/wirings/workflow/graph/index.ts +14 -3
  414. package/src/wirings/workflow/graph/template.test.ts +49 -0
  415. package/src/wirings/workflow/graph/template.ts +42 -0
  416. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  417. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  418. package/src/wirings/workflow/index.ts +21 -10
  419. package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
  420. package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
  421. package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
  422. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  423. package/src/wirings/workflow/workflow.types.ts +47 -92
  424. package/tsconfig.tsbuildinfo +1 -1
  425. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  426. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  427. package/dist/wirings/forge-node/index.d.ts +0 -1
  428. package/dist/wirings/forge-node/index.js +0 -1
  429. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  430. package/dist/wirings/workflow/wire-workflow.js +0 -53
  431. package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
  432. package/dist/wirings/workflow/workflow-utils.js +0 -66
  433. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  434. package/src/wirings/forge-node/index.ts +0 -1
  435. package/src/wirings/workflow/wire-workflow.ts +0 -94
  436. package/src/wirings/workflow/workflow-utils.ts +0 -120
@@ -0,0 +1,267 @@
1
+ /**
2
+ * OAuth2 client that acts as a service.
3
+ * Created once in createSingletonServices, handles token caching and refresh internally.
4
+ * Functions use it directly via oauth.request().
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // In services.ts
9
+ * export const createSingletonServices = async (config, { secrets }) => {
10
+ * return {
11
+ * slackOAuth: new OAuth2Client(
12
+ * { tokenSecretId: 'SLACK_TOKENS', authorizationUrl: '...', tokenUrl: '...', scopes: [] },
13
+ * 'SLACK_APP_CREDS',
14
+ * secrets
15
+ * ),
16
+ * }
17
+ * }
18
+ *
19
+ * // In function
20
+ * export const postMessage = pikkuFunc(async ({ slackOAuth }, { channel, text }) => {
21
+ * const response = await slackOAuth.request('https://slack.com/api/chat.postMessage', {
22
+ * method: 'POST',
23
+ * body: JSON.stringify({ channel, text }),
24
+ * })
25
+ * return response.json()
26
+ * })
27
+ * ```
28
+ */
29
+ const DEFAULT_TIMEOUT_MS = 30000;
30
+ /**
31
+ * Helper to fetch with a timeout using AbortController.
32
+ */
33
+ async function fetchWithTimeout(url, options, timeoutMs = DEFAULT_TIMEOUT_MS) {
34
+ const controller = new AbortController();
35
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
36
+ try {
37
+ return await fetch(url, {
38
+ ...options,
39
+ signal: controller.signal,
40
+ });
41
+ }
42
+ finally {
43
+ clearTimeout(timeoutId);
44
+ }
45
+ }
46
+ export class OAuth2Client {
47
+ oauth2Config;
48
+ appCredentialSecretId;
49
+ secrets;
50
+ cachedToken = null;
51
+ cachedAppCredential = null;
52
+ refreshPromise = null;
53
+ constructor(oauth2Config, appCredentialSecretId, secrets) {
54
+ this.oauth2Config = oauth2Config;
55
+ this.appCredentialSecretId = appCredentialSecretId;
56
+ this.secrets = secrets;
57
+ }
58
+ /**
59
+ * Make an authenticated request. Handles token caching and 401 refresh.
60
+ */
61
+ async request(url, options, timeoutMs = DEFAULT_TIMEOUT_MS) {
62
+ const token = await this.getAccessToken();
63
+ const response = await fetchWithTimeout(url, {
64
+ ...options,
65
+ headers: {
66
+ ...options?.headers,
67
+ Authorization: `Bearer ${token}`,
68
+ },
69
+ }, timeoutMs);
70
+ // Auto-retry on 401 after refresh
71
+ if (response.status === 401) {
72
+ const newToken = await this.refreshAndGetToken();
73
+ return fetchWithTimeout(url, {
74
+ ...options,
75
+ headers: {
76
+ ...options?.headers,
77
+ Authorization: `Bearer ${newToken}`,
78
+ },
79
+ }, timeoutMs);
80
+ }
81
+ return response;
82
+ }
83
+ /**
84
+ * Get cached token or load from secrets.
85
+ */
86
+ async getAccessToken() {
87
+ // Return cached token if valid
88
+ if (this.cachedToken) {
89
+ if (this.isTokenValid(this.cachedToken)) {
90
+ return this.cachedToken.accessToken;
91
+ }
92
+ // Token expired, try to refresh
93
+ if (this.cachedToken.refreshToken) {
94
+ return this.refreshAndGetToken();
95
+ }
96
+ // Token expired and no refresh token available
97
+ throw new Error('OAuth2 token expired and no refresh token available');
98
+ }
99
+ // Load from secrets
100
+ const token = await this.secrets.getSecretJSON(this.oauth2Config.tokenSecretId);
101
+ this.cachedToken = token;
102
+ // Check if loaded token is expired and needs refresh
103
+ if (!this.isTokenValid(token)) {
104
+ if (token.refreshToken) {
105
+ return this.refreshAndGetToken();
106
+ }
107
+ // Token expired and no refresh token available
108
+ throw new Error('OAuth2 token expired and no refresh token available');
109
+ }
110
+ return token.accessToken;
111
+ }
112
+ /**
113
+ * Refresh token and update cache.
114
+ * Uses a promise lock to prevent concurrent refresh attempts.
115
+ */
116
+ async refreshAndGetToken() {
117
+ // If already refreshing, wait for that to complete
118
+ if (this.refreshPromise) {
119
+ const token = await this.refreshPromise;
120
+ return token.accessToken;
121
+ }
122
+ // Start refresh
123
+ this.refreshPromise = this.doRefreshToken();
124
+ try {
125
+ const token = await this.refreshPromise;
126
+ this.cachedToken = token;
127
+ return token.accessToken;
128
+ }
129
+ finally {
130
+ this.refreshPromise = null;
131
+ }
132
+ }
133
+ /**
134
+ * Perform the actual token refresh.
135
+ */
136
+ async doRefreshToken() {
137
+ if (!this.cachedToken?.refreshToken) {
138
+ throw new Error('No refresh token available');
139
+ }
140
+ const appCredential = await this.getAppCredential();
141
+ const params = new URLSearchParams({
142
+ grant_type: 'refresh_token',
143
+ refresh_token: this.cachedToken.refreshToken,
144
+ client_id: appCredential.clientId,
145
+ });
146
+ if (appCredential.clientSecret) {
147
+ params.set('client_secret', appCredential.clientSecret);
148
+ }
149
+ const response = await fetchWithTimeout(this.oauth2Config.tokenUrl, {
150
+ method: 'POST',
151
+ headers: {
152
+ 'Content-Type': 'application/x-www-form-urlencoded',
153
+ },
154
+ body: params.toString(),
155
+ });
156
+ if (!response.ok) {
157
+ throw new Error(`Token refresh failed: ${response.status}`);
158
+ }
159
+ const data = await response.json();
160
+ if (!data.access_token || typeof data.access_token !== 'string') {
161
+ throw new Error('Invalid token response: missing access_token');
162
+ }
163
+ const token = {
164
+ accessToken: data.access_token,
165
+ refreshToken: data.refresh_token || this.cachedToken.refreshToken,
166
+ expiresAt: data.expires_in
167
+ ? Date.now() + data.expires_in * 1000
168
+ : undefined,
169
+ tokenType: data.token_type || 'Bearer',
170
+ scope: data.scope,
171
+ };
172
+ // Cache and persist the refreshed token
173
+ this.cachedToken = token;
174
+ await this.secrets.setSecretJSON(this.oauth2Config.tokenSecretId, token);
175
+ return token;
176
+ }
177
+ /**
178
+ * Check if token is valid (not expired).
179
+ */
180
+ isTokenValid(token) {
181
+ if (!token.expiresAt) {
182
+ return true; // No expiry info, assume valid
183
+ }
184
+ // Add 60 second buffer to account for clock skew
185
+ return token.expiresAt > Date.now() + 60000;
186
+ }
187
+ /**
188
+ * Get app credentials (cached).
189
+ */
190
+ async getAppCredential() {
191
+ if (this.cachedAppCredential) {
192
+ return this.cachedAppCredential;
193
+ }
194
+ this.cachedAppCredential =
195
+ await this.secrets.getSecretJSON(this.appCredentialSecretId);
196
+ return this.cachedAppCredential;
197
+ }
198
+ // ========================================
199
+ // CLI-only methods (for pikku oauth connect)
200
+ // ========================================
201
+ /**
202
+ * Generate OAuth2 authorization URL.
203
+ * Used by CLI during `pikku oauth connect`.
204
+ */
205
+ async getAuthorizationUrl(state, redirectUri) {
206
+ const appCredential = await this.getAppCredential();
207
+ const params = new URLSearchParams({
208
+ response_type: 'code',
209
+ client_id: appCredential.clientId,
210
+ redirect_uri: redirectUri,
211
+ scope: this.oauth2Config.scopes.join(' '),
212
+ state,
213
+ });
214
+ // Add PKCE if enabled
215
+ // Note: code_verifier should be stored and passed to exchangeCode
216
+ // For now, PKCE implementation is simplified
217
+ // Add any additional params
218
+ if (this.oauth2Config.additionalParams) {
219
+ for (const [key, value] of Object.entries(this.oauth2Config.additionalParams)) {
220
+ params.set(key, value);
221
+ }
222
+ }
223
+ return `${this.oauth2Config.authorizationUrl}?${params.toString()}`;
224
+ }
225
+ /**
226
+ * Exchange authorization code for tokens.
227
+ * Used by CLI during `pikku oauth connect`.
228
+ */
229
+ async exchangeCode(code, redirectUri) {
230
+ const appCredential = await this.getAppCredential();
231
+ const params = new URLSearchParams({
232
+ grant_type: 'authorization_code',
233
+ code,
234
+ redirect_uri: redirectUri,
235
+ client_id: appCredential.clientId,
236
+ });
237
+ if (appCredential.clientSecret) {
238
+ params.set('client_secret', appCredential.clientSecret);
239
+ }
240
+ const response = await fetchWithTimeout(this.oauth2Config.tokenUrl, {
241
+ method: 'POST',
242
+ headers: {
243
+ 'Content-Type': 'application/x-www-form-urlencoded',
244
+ },
245
+ body: params.toString(),
246
+ });
247
+ if (!response.ok) {
248
+ throw new Error(`Token exchange failed: ${response.status}`);
249
+ }
250
+ const data = await response.json();
251
+ if (!data.access_token || typeof data.access_token !== 'string') {
252
+ throw new Error('Invalid token response: missing access_token');
253
+ }
254
+ const token = {
255
+ accessToken: data.access_token,
256
+ refreshToken: data.refresh_token,
257
+ expiresAt: data.expires_in
258
+ ? Date.now() + data.expires_in * 1000
259
+ : undefined,
260
+ tokenType: data.token_type || 'Bearer',
261
+ scope: data.scope,
262
+ };
263
+ // Cache the token
264
+ this.cachedToken = token;
265
+ return token;
266
+ }
267
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * OAuth2 credential and token types.
3
+ */
4
+ /**
5
+ * App credentials for OAuth2 (client ID and secret).
6
+ * These are typically set once and stored in the secret service.
7
+ */
8
+ export type OAuth2AppCredential = {
9
+ clientId: string;
10
+ clientSecret?: string;
11
+ };
12
+ /**
13
+ * OAuth2 token data returned from token endpoint.
14
+ */
15
+ export type OAuth2Token = {
16
+ accessToken: string;
17
+ refreshToken?: string;
18
+ expiresAt?: number;
19
+ tokenType: string;
20
+ scope?: string;
21
+ };
22
+ /**
23
+ * OAuth2-specific configuration that extends a credential.
24
+ * This is stored in SecretDefinitionMeta.oauth2 field.
25
+ */
26
+ export type OAuth2Config = {
27
+ /** Where access/refresh tokens are stored */
28
+ tokenSecretId: string;
29
+ /** OAuth2 authorization URL */
30
+ authorizationUrl: string;
31
+ /** OAuth2 token exchange URL */
32
+ tokenUrl: string;
33
+ /** Required scopes */
34
+ scopes: string[];
35
+ /** Use PKCE flow */
36
+ pkce?: boolean;
37
+ /** Additional query parameters for authorization URL */
38
+ additionalParams?: Record<string, string>;
39
+ };
40
+ /**
41
+ * Configuration for wireOAuth2Credential.
42
+ * Combines standard credential fields with OAuth2-specific config.
43
+ */
44
+ export type CoreOAuth2Credential = {
45
+ /** Unique identifier for this credential */
46
+ name: string;
47
+ /** Human-readable name for UI display */
48
+ displayName: string;
49
+ /** Optional description for UI */
50
+ description?: string;
51
+ /** Key used with SecretService to retrieve app credentials (clientId/clientSecret) */
52
+ secretId: string;
53
+ /** Where access/refresh tokens are stored */
54
+ tokenSecretId: string;
55
+ /** OAuth2 authorization URL */
56
+ authorizationUrl: string;
57
+ /** OAuth2 token exchange URL */
58
+ tokenUrl: string;
59
+ /** Required scopes */
60
+ scopes: string[];
61
+ /** Use PKCE flow */
62
+ pkce?: boolean;
63
+ /** Additional query parameters for authorization URL */
64
+ additionalParams?: Record<string, string>;
65
+ };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * OAuth2 credential and token types.
3
+ */
4
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { CoreOAuth2Credential } from './oauth2.types.js';
2
+ /**
3
+ * No-op function for declaring OAuth2 credentials.
4
+ * This exists purely for TypeScript type checking and will be tree-shaken.
5
+ * The CLI extracts metadata via AST parsing.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * wireOAuth2Credential({
10
+ * name: 'slackOAuth',
11
+ * displayName: 'Slack OAuth',
12
+ * secretId: 'SLACK_OAUTH_APP',
13
+ * tokenSecretId: 'SLACK_OAUTH_TOKENS',
14
+ * authorizationUrl: 'https://slack.com/oauth/v2/authorize',
15
+ * tokenUrl: 'https://slack.com/api/oauth.v2.access',
16
+ * scopes: ['chat:write', 'channels:read'],
17
+ * })
18
+ * ```
19
+ */
20
+ export declare const wireOAuth2Credential: (_config: CoreOAuth2Credential) => void;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * No-op function for declaring OAuth2 credentials.
3
+ * This exists purely for TypeScript type checking and will be tree-shaken.
4
+ * The CLI extracts metadata via AST parsing.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * wireOAuth2Credential({
9
+ * name: 'slackOAuth',
10
+ * displayName: 'Slack OAuth',
11
+ * secretId: 'SLACK_OAUTH_APP',
12
+ * tokenSecretId: 'SLACK_OAUTH_TOKENS',
13
+ * authorizationUrl: 'https://slack.com/oauth/v2/authorize',
14
+ * tokenUrl: 'https://slack.com/api/oauth.v2.access',
15
+ * scopes: ['chat:write', 'channels:read'],
16
+ * })
17
+ * ```
18
+ */
19
+ export const wireOAuth2Credential = (_config) => {
20
+ // No-op - metadata only, extracted by CLI via AST
21
+ };
@@ -1,4 +1,4 @@
1
- export type * from './queue.types.js';
1
+ export type { ConfigValidationResult, CoreQueueWorker, JobOptions, PikkuJobConfig, PikkuWorkerConfig, PikkuQueue, QueueJob, QueueJobStatus, QueueService, QueueWorkers, QueueWorkersMeta, } from './queue.types.js';
2
2
  export { wireQueueWorker, runQueueJob, getQueueWorkers, removeQueueWorker, QueueJobDiscardedError, QueueJobFailedError, } from './queue-runner.js';
3
3
  export { validateWorkerConfig } from './validate-worker-config.js';
4
4
  export type { QueueConfigMapping } from './validate-worker-config.js';
@@ -1,8 +1,6 @@
1
- import type { CoreServices } from '../../types/core.types.js';
2
1
  import type { CoreQueueWorker, QueueJob } from './queue.types.js';
3
2
  import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
4
3
  import { PikkuError } from '../../errors/error-handler.js';
5
- import { CreateWireServices } from '../../types/core.types.js';
6
4
  /**
7
5
  * Error class for when a queue job is explicitly failed
8
6
  */
@@ -30,9 +28,7 @@ export declare function removeQueueWorker(name: string): Promise<void>;
30
28
  /**
31
29
  * Process a single queue job - this function is called by queue consumers
32
30
  */
33
- export declare function runQueueJob({ singletonServices, createWireServices, job, updateProgress, }: {
34
- singletonServices: CoreServices;
35
- createWireServices?: CreateWireServices;
31
+ export declare function runQueueJob({ job, updateProgress, }: {
36
32
  job: QueueJob;
37
33
  updateProgress?: (progress: number | string | object) => Promise<void>;
38
34
  }): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js';
2
- import { pikkuState } from '../../pikku-state.js';
2
+ import { PikkuMissingMetaError } from '../../errors/errors.js';
3
+ import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../pikku-state.js';
3
4
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
4
5
  /**
5
6
  * Error class for queue processor not found
@@ -33,12 +34,12 @@ export class QueueJobDiscardedError extends PikkuError {
33
34
  export const wireQueueWorker = (queueWorker) => {
34
35
  // Get processor metadata
35
36
  const meta = pikkuState(null, 'queue', 'meta');
36
- const processorMeta = meta[queueWorker.queueName];
37
+ const processorMeta = meta[queueWorker.name];
37
38
  if (!processorMeta) {
38
- throw new Error(`Queue processor metadata not found for '${queueWorker.queueName}'. Make sure to run the CLI to generate metadata.`);
39
+ throw new PikkuMissingMetaError(`Missing generated metadata for queue worker '${queueWorker.name}'`);
39
40
  }
40
41
  // Register the function with pikku
41
- addFunction(processorMeta.pikkuFuncName, {
42
+ addFunction(processorMeta.pikkuFuncId, {
42
43
  func: queueWorker.func.func,
43
44
  auth: queueWorker.func.auth,
44
45
  permissions: queueWorker.func.permissions,
@@ -47,7 +48,7 @@ export const wireQueueWorker = (queueWorker) => {
47
48
  });
48
49
  // Store processor definition in state - runtime adapters will pick this up
49
50
  const registrations = pikkuState(null, 'queue', 'registrations');
50
- registrations.set(queueWorker.queueName, queueWorker);
51
+ registrations.set(queueWorker.name, queueWorker);
51
52
  };
52
53
  /**
53
54
  * Get all registered queue processors
@@ -69,12 +70,14 @@ export async function removeQueueWorker(name) {
69
70
  /**
70
71
  * Process a single queue job - this function is called by queue consumers
71
72
  */
72
- export async function runQueueJob({ singletonServices, createWireServices, job, updateProgress, }) {
73
+ export async function runQueueJob({ job, updateProgress, }) {
74
+ const singletonServices = getSingletonServices();
75
+ const createWireServices = getCreateWireServices();
73
76
  const logger = singletonServices.logger;
74
77
  const meta = pikkuState(null, 'queue', 'meta');
75
78
  const processorMeta = meta[job.queueName];
76
79
  if (!processorMeta) {
77
- throw new Error(`Processor metadata not found for: ${job.queueName}`);
80
+ throw new PikkuMissingMetaError(`Missing generated metadata for queue worker '${job.queueName}'`);
78
81
  }
79
82
  // Get the queue worker registration to access middleware
80
83
  const registrations = pikkuState(null, 'queue', 'registrations');
@@ -104,7 +107,7 @@ export async function runQueueJob({ singletonServices, createWireServices, job,
104
107
  queue,
105
108
  };
106
109
  // Execute the pikku function with the job data
107
- const result = await runPikkuFunc('queue', job.queueName, processorMeta.pikkuFuncName, {
110
+ const result = await runPikkuFunc('queue', job.queueName, processorMeta.pikkuFuncId, {
108
111
  singletonServices,
109
112
  createWireServices,
110
113
  auth: false,
@@ -1,6 +1,6 @@
1
- import { CommonWireMeta } from '../../types/core.types.js';
2
- import { CorePikkuFunctionConfig } from '../../function/functions.types.js';
3
- import { QueueConfigMapping } from './validate-worker-config.js';
1
+ import type { CommonWireMeta } from '../../types/core.types.js';
2
+ import type { CorePikkuFunctionConfig } from '../../function/functions.types.js';
3
+ import type { QueueConfigMapping } from './validate-worker-config.js';
4
4
  /**
5
5
  * Configuration for queue workers - how jobs are processed
6
6
  */
@@ -131,14 +131,14 @@ export interface QueueWorkers {
131
131
  * Queue processor metadata
132
132
  */
133
133
  export type QueueWorkersMeta = Record<string, CommonWireMeta & {
134
- queueName: string;
134
+ name: string;
135
135
  config?: PikkuWorkerConfig;
136
136
  }>;
137
137
  /**
138
138
  * Core queue processor definition
139
139
  */
140
140
  export type CoreQueueWorker<PikkuFunctionConfig extends CorePikkuFunctionConfig<any, any, any> = CorePikkuFunctionConfig<any, any, any>> = {
141
- queueName: string;
141
+ name: string;
142
142
  func: PikkuFunctionConfig;
143
143
  config?: PikkuWorkerConfig;
144
144
  errors?: string[];
@@ -1,6 +1,6 @@
1
1
  import type { ConfigValidationResult, CoreQueueWorker } from './queue.types.js';
2
- import { QueueConfigMapping } from './validate-worker-config.js';
3
- import { Logger } from '../../services/logger.js';
2
+ import type { QueueConfigMapping } from './validate-worker-config.js';
3
+ import type { Logger } from '../../services/logger.js';
4
4
  /**
5
5
  * Queue processor registration callback
6
6
  */
@@ -1,5 +1,5 @@
1
1
  import { getQueueWorkers } from './queue-runner.js';
2
- import { validateWorkerConfig, } from './validate-worker-config.js';
2
+ import { validateWorkerConfig } from './validate-worker-config.js';
3
3
  /**
4
4
  * Helper function to register queue processors with validation
5
5
  * This centralizes the common logic for looping over processors and validating configs
@@ -1,4 +1,4 @@
1
- import { PikkuWorkerConfig, ConfigValidationResult } from './queue.types.js';
1
+ import type { PikkuWorkerConfig, ConfigValidationResult } from './queue.types.js';
2
2
  /**
3
3
  * Configuration mapping structure for queue implementations
4
4
  */
@@ -1,2 +1,4 @@
1
- export { PikkuRPCService, rpcService } from './rpc-runner.js';
1
+ export { PikkuRPCService, rpcService, RPCNotFoundError } from './rpc-runner.js';
2
2
  export type { PikkuRPC, RPCMeta } from './rpc-types.js';
3
+ export { wireAddon } from './wire-addon.js';
4
+ export type { WireAddonConfig } from './wire-addon.js';
@@ -1 +1,2 @@
1
- export { PikkuRPCService, rpcService } from './rpc-runner.js';
1
+ export { PikkuRPCService, rpcService, RPCNotFoundError } from './rpc-runner.js';
2
+ export { wireAddon } from './wire-addon.js';
@@ -1,31 +1,81 @@
1
- import { CoreServices, PikkuWire } from '../../types/core.types.js';
2
- import { PikkuRPC } from './rpc-types.js';
1
+ import type { CoreServices, PikkuWire } from '../../types/core.types.js';
2
+ import type { SessionService } from '../../services/user-session-service.js';
3
+ import type { CoreUserSession } from '../../types/core.types.js';
4
+ import { PikkuError } from '../../errors/error-handler.js';
5
+ import type { PikkuRPC } from './rpc-types.js';
6
+ export declare class RPCNotFoundError extends PikkuError {
7
+ readonly rpcName: string;
8
+ constructor(rpcName: string);
9
+ }
10
+ import type { AIAgentInput } from '../ai-agent/ai-agent.types.js';
11
+ import type { StreamAIAgentOptions } from '../ai-agent/ai-agent-prepare.js';
3
12
  export declare class ContextAwareRPCService {
4
13
  private services;
5
14
  private wire;
6
15
  private options;
7
16
  constructor(services: CoreServices, wire: PikkuWire, options: {
8
17
  requiresAuth?: boolean;
18
+ sessionService?: SessionService<CoreUserSession>;
9
19
  });
10
20
  rpcExposed(funcName: string, data: any): Promise<any>;
11
21
  rpc<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
12
22
  /**
13
- * Invoke a function from an external package
14
- * External packages register their functions in pikkuState under their package name.
23
+ * Invoke a function from an addon package
24
+ * Addon packages register their functions in pikkuState under their package name.
15
25
  * The function is executed using the parent services (shared singleton services).
16
26
  * @private
17
27
  */
18
- private invokeExternalPackageFunction;
28
+ private invokeAddonFunction;
19
29
  rpcWithWire<In = any, Out = any>(rpcName: string, data: In, wire: PikkuWire): Promise<Out>;
20
- startWorkflow<In = any>(workflowName: string, input: In): Promise<{
30
+ startWorkflow<In = any>(workflowName: string, input: In, options?: {
31
+ startNode?: string;
32
+ wire?: {
33
+ type: string;
34
+ id?: string;
35
+ parentRunId?: string;
36
+ };
37
+ }): Promise<{
21
38
  runId: string;
22
39
  }>;
40
+ get agent(): {
41
+ run: (agentName: string, input: AIAgentInput) => Promise<{
42
+ runId: string;
43
+ result: {};
44
+ usage: {
45
+ inputTokens: number;
46
+ outputTokens: number;
47
+ };
48
+ }>;
49
+ stream: (agentName: string, input: {
50
+ message: string;
51
+ threadId: string;
52
+ resourceId: string;
53
+ } | Record<string, unknown>, options?: StreamAIAgentOptions) => Promise<void>;
54
+ resume: (runId: string, input: {
55
+ toolCallId: string;
56
+ approved: boolean;
57
+ }, options?: StreamAIAgentOptions) => Promise<void>;
58
+ approve: (runId: string, approvals: {
59
+ toolCallId: string;
60
+ approved: boolean;
61
+ }[], expectedAgentName?: string) => Promise<{
62
+ status: "resumed" | "suspended";
63
+ runId: string;
64
+ approved: string[];
65
+ rejected: string[];
66
+ remainingApprovals: number;
67
+ }>;
68
+ };
69
+ remote<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
23
70
  }
24
71
  export declare class PikkuRPCService<Services extends CoreServices, TypedRPC = PikkuRPC> {
25
- getContextRPCService(services: Services, wire: PikkuWire, requiresAuth?: boolean | undefined, depth?: number): TypedRPC;
72
+ getContextRPCService(services: Services, wire: PikkuWire, requiresAuthOrOptions?: boolean | {
73
+ requiresAuth?: boolean;
74
+ sessionService?: SessionService<CoreUserSession>;
75
+ } | undefined, depth?: number): TypedRPC;
26
76
  }
27
77
  export declare const rpcService: PikkuRPCService<import("../../types/core.types.js").CoreSingletonServices<{
28
- logLevel?: import("../../index.js").LogLevel;
78
+ logLevel?: import("../../services/logger.js").LogLevel;
29
79
  secrets?: {};
30
80
  workflow?: import("../workflow/workflow.types.js").WorkflowServiceConfig;
31
81
  }>, PikkuRPC>;