@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
@@ -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,5 +1,5 @@
1
- export type * from './queue.types.js';
2
- export { wireQueueWorker, runQueueJob, getQueueWorkers, removeQueueWorker, QueueJobDiscardedError, QueueJobFailedError, } from './queue-runner.js';
1
+ export type { ConfigValidationResult, CoreQueueWorker, JobOptions, PikkuJobConfig, PikkuWorkerConfig, PikkuQueue, QueueJob, QueueJobStatus, QueueService, QueueWorkers, QueueWorkersMeta, } from './queue.types.js';
2
+ export { wireQueueWorker, runQueueJob, createQueueJobRunner, 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';
5
5
  export { registerQueueWorkers } from './register-queue-helper.js';
@@ -1,5 +1,5 @@
1
1
  // Queue processor management
2
- export { wireQueueWorker, runQueueJob, getQueueWorkers, removeQueueWorker, QueueJobDiscardedError, QueueJobFailedError, } from './queue-runner.js';
2
+ export { wireQueueWorker, runQueueJob, createQueueJobRunner, getQueueWorkers, removeQueueWorker, QueueJobDiscardedError, QueueJobFailedError, } from './queue-runner.js';
3
3
  // Configuration validation
4
4
  export { validateWorkerConfig } from './validate-worker-config.js';
5
5
  // Queue registration helper
@@ -36,3 +36,10 @@ export declare function runQueueJob({ singletonServices, createWireServices, job
36
36
  job: QueueJob;
37
37
  updateProgress?: (progress: number | string | object) => Promise<void>;
38
38
  }): Promise<void>;
39
+ export declare const createQueueJobRunner: ({ singletonServices, createWireServices, }: {
40
+ singletonServices: CoreServices;
41
+ createWireServices?: CreateWireServices;
42
+ }) => ({ job, updateProgress, }: {
43
+ job: QueueJob;
44
+ updateProgress?: (progress: number | string | object) => Promise<void>;
45
+ }) => Promise<void>;
@@ -1,4 +1,5 @@
1
1
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js';
2
+ import { PikkuMissingMetaError } from '../../errors/errors.js';
2
3
  import { pikkuState } from '../../pikku-state.js';
3
4
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
4
5
  /**
@@ -32,13 +33,13 @@ export class QueueJobDiscardedError extends PikkuError {
32
33
  */
33
34
  export const wireQueueWorker = (queueWorker) => {
34
35
  // Get processor metadata
35
- const meta = pikkuState('queue', 'meta');
36
- const processorMeta = meta[queueWorker.queueName];
36
+ const meta = pikkuState(null, 'queue', 'meta');
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,
@@ -46,20 +47,20 @@ export const wireQueueWorker = (queueWorker) => {
46
47
  tags: queueWorker.func.tags,
47
48
  });
48
49
  // Store processor definition in state - runtime adapters will pick this up
49
- const registrations = pikkuState('queue', 'registrations');
50
- registrations.set(queueWorker.queueName, queueWorker);
50
+ const registrations = pikkuState(null, 'queue', 'registrations');
51
+ registrations.set(queueWorker.name, queueWorker);
51
52
  };
52
53
  /**
53
54
  * Get all registered queue processors
54
55
  */
55
56
  export function getQueueWorkers() {
56
- return pikkuState('queue', 'registrations');
57
+ return pikkuState(null, 'queue', 'registrations');
57
58
  }
58
59
  /**
59
60
  * Stop and remove a queue processor
60
61
  */
61
62
  export async function removeQueueWorker(name) {
62
- const registrations = pikkuState('queue', 'registrations');
63
+ const registrations = pikkuState(null, 'queue', 'registrations');
63
64
  const registration = registrations.get(name);
64
65
  if (!registration) {
65
66
  throw new QueueWorkerNotFoundError(name);
@@ -71,13 +72,13 @@ export async function removeQueueWorker(name) {
71
72
  */
72
73
  export async function runQueueJob({ singletonServices, createWireServices, job, updateProgress, }) {
73
74
  const logger = singletonServices.logger;
74
- const meta = pikkuState('queue', 'meta');
75
+ const meta = pikkuState(null, 'queue', 'meta');
75
76
  const processorMeta = meta[job.queueName];
76
77
  if (!processorMeta) {
77
- throw new Error(`Processor metadata not found for: ${job.queueName}`);
78
+ throw new PikkuMissingMetaError(`Missing generated metadata for queue worker '${job.queueName}'`);
78
79
  }
79
80
  // Get the queue worker registration to access middleware
80
- const registrations = pikkuState('queue', 'registrations');
81
+ const registrations = pikkuState(null, 'queue', 'registrations');
81
82
  const queueWorker = registrations.get(job.queueName);
82
83
  if (!queueWorker) {
83
84
  throw new Error(`Queue worker registration not found for: ${job.queueName}`);
@@ -104,7 +105,7 @@ export async function runQueueJob({ singletonServices, createWireServices, job,
104
105
  queue,
105
106
  };
106
107
  // Execute the pikku function with the job data
107
- const result = await runPikkuFunc('queue', job.queueName, processorMeta.pikkuFuncName, {
108
+ const result = await runPikkuFunc('queue', job.queueName, processorMeta.pikkuFuncId, {
108
109
  singletonServices,
109
110
  createWireServices,
110
111
  auth: false,
@@ -127,3 +128,13 @@ export async function runQueueJob({ singletonServices, createWireServices, job,
127
128
  throw error;
128
129
  }
129
130
  }
131
+ export const createQueueJobRunner = ({ singletonServices, createWireServices, }) => {
132
+ return async ({ job, updateProgress, }) => {
133
+ await runQueueJob({
134
+ singletonServices,
135
+ createWireServices,
136
+ job,
137
+ updateProgress,
138
+ });
139
+ };
140
+ };
@@ -1,6 +1,7 @@
1
1
  import { CommonWireMeta } from '../../types/core.types.js';
2
2
  import { CorePikkuFunctionConfig } from '../../function/functions.types.js';
3
3
  import { QueueConfigMapping } from './validate-worker-config.js';
4
+ import { Logger } from '../../services/logger.js';
4
5
  /**
5
6
  * Configuration for queue workers - how jobs are processed
6
7
  */
@@ -124,6 +125,11 @@ export interface QueueWorkers {
124
125
  supportsResults: boolean;
125
126
  /** Configuration mapping for validation */
126
127
  configMappings: QueueConfigMapping;
128
+ /** Set runtime queue job runner callback and logger */
129
+ setJobRunner(runJob: (params: {
130
+ job: QueueJob;
131
+ updateProgress?: (progress: number | string | object) => Promise<void>;
132
+ }) => Promise<void>, logger: Logger): void;
127
133
  /** Scan state and register all compatible processors */
128
134
  registerQueues(): Promise<Record<string, ConfigValidationResult[]>>;
129
135
  }
@@ -131,14 +137,14 @@ export interface QueueWorkers {
131
137
  * Queue processor metadata
132
138
  */
133
139
  export type QueueWorkersMeta = Record<string, CommonWireMeta & {
134
- queueName: string;
140
+ name: string;
135
141
  config?: PikkuWorkerConfig;
136
142
  }>;
137
143
  /**
138
144
  * Core queue processor definition
139
145
  */
140
146
  export type CoreQueueWorker<PikkuFunctionConfig extends CorePikkuFunctionConfig<any, any, any> = CorePikkuFunctionConfig<any, any, any>> = {
141
- queueName: string;
147
+ name: string;
142
148
  func: PikkuFunctionConfig;
143
149
  config?: PikkuWorkerConfig;
144
150
  errors?: string[];
@@ -1,2 +1,2 @@
1
- export { initialize, 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';
@@ -1 +1 @@
1
- export { initialize, PikkuRPCService, rpcService } from './rpc-runner.js';
1
+ export { PikkuRPCService, rpcService, RPCNotFoundError } from './rpc-runner.js';
@@ -1,32 +1,59 @@
1
- import { CoreServices, PikkuWire } from '../../types/core.types.js';
1
+ import { CoreServices, CoreSingletonServices, 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';
2
5
  import { PikkuRPC } from './rpc-types.js';
3
- type RPCServiceConfig = {
4
- coerceDataFromSchema: boolean;
5
- };
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';
6
11
  export declare class ContextAwareRPCService {
7
12
  private services;
8
13
  private wire;
9
14
  private options;
10
15
  constructor(services: CoreServices, wire: PikkuWire, options: {
11
- coerceDataFromSchema?: boolean;
12
16
  requiresAuth?: boolean;
17
+ sessionService?: SessionService<CoreUserSession>;
13
18
  });
14
19
  rpcExposed(funcName: string, data: any): Promise<any>;
15
20
  rpc<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
21
+ /**
22
+ * Invoke a function from an external package
23
+ * External packages register their functions in pikkuState under their package name.
24
+ * The function is executed using the parent services (shared singleton services).
25
+ * @private
26
+ */
27
+ private invokeExternalPackageFunction;
16
28
  rpcWithWire<In = any, Out = any>(rpcName: string, data: In, wire: PikkuWire): Promise<Out>;
17
- startWorkflow<In = any>(workflowName: string, input: In): Promise<{
29
+ startWorkflow<In = any>(workflowName: string, input: In, options?: {
30
+ startNode?: string;
31
+ wire?: {
32
+ type: string;
33
+ id?: string;
34
+ parentRunId?: string;
35
+ };
36
+ }): Promise<{
37
+ runId: string;
38
+ }>;
39
+ agent(agentName: string, input: AIAgentInput): Promise<{
18
40
  runId: string;
41
+ result: unknown;
42
+ usage: {
43
+ inputTokens: number;
44
+ outputTokens: number;
45
+ };
19
46
  }>;
47
+ remote<In = any, Out = any>(funcName: string, data: In): Promise<Out>;
20
48
  }
21
49
  export declare class PikkuRPCService<Services extends CoreServices, TypedRPC = PikkuRPC> {
22
- private config?;
23
- initialize(config: RPCServiceConfig): void;
24
- getContextRPCService(services: Services, wire: PikkuWire, requiresAuth?: boolean | undefined, depth?: number): TypedRPC;
50
+ getContextRPCService(services: Services, wire: PikkuWire, requiresAuthOrOptions?: boolean | {
51
+ requiresAuth?: boolean;
52
+ sessionService?: SessionService<CoreUserSession>;
53
+ } | undefined, depth?: number): TypedRPC;
25
54
  }
26
- export declare const rpcService: PikkuRPCService<import("../../types/core.types.js").CoreSingletonServices<{
27
- logLevel?: import("../../index.js").LogLevel;
55
+ export declare const rpcService: PikkuRPCService<CoreSingletonServices<{
56
+ logLevel?: import("../../services/logger.js").LogLevel;
28
57
  secrets?: {};
29
58
  workflow?: import("../workflow/workflow.types.js").WorkflowServiceConfig;
30
59
  }>, PikkuRPC>;
31
- export declare const initialize: (config: RPCServiceConfig) => void;
32
- export {};
@@ -1,11 +1,49 @@
1
1
  import { runPikkuFunc } from '../../function/function-runner.js';
2
2
  import { pikkuState } from '../../pikku-state.js';
3
3
  import { ForbiddenError } from '../../errors/errors.js';
4
+ import { PikkuError } from '../../errors/error-handler.js';
5
+ import { parseVersionedId } from '../../version.js';
6
+ import { encryptJSON } from '../../crypto-utils.js';
7
+ export class RPCNotFoundError extends PikkuError {
8
+ rpcName;
9
+ constructor(rpcName) {
10
+ super(`RPC function not found: ${rpcName}`);
11
+ this.rpcName = rpcName;
12
+ }
13
+ }
14
+ import { runAIAgent } from '../ai-agent/ai-agent-runner.js';
15
+ /**
16
+ * Resolve a namespaced function reference to package and function names
17
+ * Uses pikkuState to look up the namespace -> package mapping
18
+ */
19
+ const resolveNamespace = (namespacedFunction) => {
20
+ const colonIndex = namespacedFunction.indexOf(':');
21
+ if (colonIndex === -1) {
22
+ return null;
23
+ }
24
+ const namespace = namespacedFunction.substring(0, colonIndex);
25
+ const functionName = namespacedFunction.substring(colonIndex + 1);
26
+ const externalPackages = pikkuState(null, 'rpc', 'externalPackages');
27
+ const pkgConfig = externalPackages.get(namespace);
28
+ if (!pkgConfig) {
29
+ return null;
30
+ }
31
+ return {
32
+ package: pkgConfig.package,
33
+ function: functionName,
34
+ };
35
+ };
4
36
  const getPikkuFunctionName = (rpcName) => {
5
- const rpc = pikkuState('rpc', 'meta');
6
- const rpcMeta = rpc[rpcName];
37
+ const rpc = pikkuState(null, 'rpc', 'meta');
38
+ let rpcMeta = rpc[rpcName];
7
39
  if (!rpcMeta) {
8
- throw new Error(`RPC function not found: ${rpcName}`);
40
+ const { baseName, version } = parseVersionedId(rpcName);
41
+ if (version !== null) {
42
+ rpcMeta = rpc[baseName];
43
+ }
44
+ }
45
+ if (!rpcMeta) {
46
+ throw new RPCNotFoundError(rpcName);
9
47
  }
10
48
  return rpcMeta;
11
49
  };
@@ -20,7 +58,16 @@ export class ContextAwareRPCService {
20
58
  this.options = options;
21
59
  }
22
60
  async rpcExposed(funcName, data) {
23
- const functionMeta = pikkuState('function', 'meta')[funcName];
61
+ let functionMeta;
62
+ if (funcName.includes(':')) {
63
+ const resolved = resolveNamespace(funcName);
64
+ if (resolved) {
65
+ functionMeta = pikkuState(resolved.package, 'function', 'meta')[resolved.function];
66
+ }
67
+ }
68
+ else {
69
+ functionMeta = pikkuState(null, 'function', 'meta')[funcName];
70
+ }
24
71
  if (!functionMeta) {
25
72
  throw new Error(`Function not found: ${funcName}`);
26
73
  }
@@ -41,16 +88,52 @@ export class ContextAwareRPCService {
41
88
  }
42
89
  : undefined,
43
90
  };
91
+ // Check if it's a namespaced function call (e.g., 'stripe:createCharge')
92
+ if (funcName.includes(':')) {
93
+ return this.invokeExternalPackageFunction(funcName, data, updatedWire);
94
+ }
95
+ // Main package function
44
96
  return runPikkuFunc('rpc', funcName, getPikkuFunctionName(funcName), {
45
97
  auth: this.options.requiresAuth,
46
- // TODO: this is a hack since services have already been created
47
- // but is valid since we don't want to keep creating new wire services
48
98
  singletonServices: this.services,
49
99
  data: () => data,
50
- coerceDataFromSchema: this.options.coerceDataFromSchema,
51
100
  wire: updatedWire,
52
101
  });
53
102
  }
103
+ /**
104
+ * Invoke a function from an external package
105
+ * External packages register their functions in pikkuState under their package name.
106
+ * The function is executed using the parent services (shared singleton services).
107
+ * @private
108
+ */
109
+ async invokeExternalPackageFunction(namespacedFunction, data, wire) {
110
+ // Resolve namespace to package name
111
+ const resolved = resolveNamespace(namespacedFunction);
112
+ if (!resolved) {
113
+ throw new Error(`Unknown namespace in function reference: ${namespacedFunction}. ` +
114
+ `Make sure the package is registered in externalPackages config.`);
115
+ }
116
+ // Get the function meta from the external package
117
+ // External packages use function meta, not RPC meta
118
+ const externalFunctionMeta = pikkuState(resolved.package, 'function', 'meta');
119
+ const funcMeta = externalFunctionMeta[resolved.function];
120
+ if (!funcMeta) {
121
+ throw new Error(`Function '${resolved.function}' not found in package '${resolved.package}'. ` +
122
+ `Available functions: ${Object.keys(externalFunctionMeta).join(', ') || '(none)'}`);
123
+ }
124
+ const funcName = funcMeta.pikkuFuncId || resolved.function;
125
+ // Execute the function using runPikkuFunc with the external package's state
126
+ // We use the parent services (this.services) since external packages share services
127
+ // Pass the function's tags so tag-based middleware/permissions are applied
128
+ return runPikkuFunc('rpc', namespacedFunction, funcName, {
129
+ auth: this.options.requiresAuth,
130
+ singletonServices: this.services,
131
+ data: () => data,
132
+ wire,
133
+ packageName: resolved.package,
134
+ tags: funcMeta.tags,
135
+ });
136
+ }
54
137
  async rpcWithWire(rpcName, data, wire) {
55
138
  const rpcDepth = this.wire.rpc?.depth || 0;
56
139
  const mergedWire = {
@@ -68,43 +151,126 @@ export class ContextAwareRPCService {
68
151
  auth: this.options.requiresAuth,
69
152
  singletonServices: this.services,
70
153
  data: () => data,
71
- coerceDataFromSchema: this.options.coerceDataFromSchema,
72
154
  wire: mergedWire,
73
155
  });
74
156
  }
75
- async startWorkflow(workflowName, input) {
157
+ async startWorkflow(workflowName, input, options) {
76
158
  if (!this.services.workflowService) {
77
159
  throw new Error('WorkflowService service not available');
78
160
  }
79
- return this.services.workflowService.startWorkflow(workflowName, input, this);
161
+ const parentRunId = this.wire.workflowStep?.runId ?? this.wire.graph?.runId;
162
+ const wire = options?.wire ?? {
163
+ type: this.wire.wireType ?? 'unknown',
164
+ id: this.wire.wireId,
165
+ ...(parentRunId ? { parentRunId } : {}),
166
+ };
167
+ return this.services.workflowService.startWorkflow(workflowName, input, wire, this, options);
168
+ }
169
+ async agent(agentName, input) {
170
+ const result = await runAIAgent(agentName, input, {
171
+ singletonServices: this.services,
172
+ sessionService: this.options.sessionService,
173
+ });
174
+ return {
175
+ runId: result.runId,
176
+ result: result.object ?? result.text,
177
+ usage: result.usage,
178
+ };
179
+ }
180
+ async remote(funcName, data) {
181
+ let endpoint;
182
+ const headers = {
183
+ 'Content-Type': 'application/json',
184
+ };
185
+ const colonIndex = funcName.indexOf(':');
186
+ if (colonIndex !== -1) {
187
+ const namespace = funcName.substring(0, colonIndex);
188
+ const externalPackages = pikkuState(null, 'rpc', 'externalPackages');
189
+ const pkgConfig = externalPackages.get(namespace);
190
+ endpoint = pkgConfig?.rpcEndpoint;
191
+ }
192
+ if (!endpoint && this.services.deploymentService) {
193
+ const deployments = await this.services.deploymentService.findFunction(funcName);
194
+ if (deployments.length > 0) {
195
+ endpoint = deployments[0].endpoint;
196
+ }
197
+ }
198
+ if (!endpoint) {
199
+ throw new Error(`No endpoint configured for remote RPC: ${funcName}. ` +
200
+ `Configure rpcEndpoint in externalPackages config or set up a DeploymentService.`);
201
+ }
202
+ let secret;
203
+ if (this.services.secrets) {
204
+ try {
205
+ secret = await this.services.secrets.getSecret('PIKKU_REMOTE_SECRET');
206
+ }
207
+ catch { }
208
+ }
209
+ if (secret) {
210
+ if (!this.services.jwt) {
211
+ throw new Error('PIKKU_REMOTE_SECRET is set but JWT service is not available');
212
+ }
213
+ const session = this.wire.getSession && typeof this.wire.getSession === 'function'
214
+ ? await this.wire.getSession()
215
+ : this.wire.session;
216
+ const sessionEnc = session
217
+ ? await encryptJSON(secret, { session })
218
+ : undefined;
219
+ const token = await this.services.jwt.encode({ value: 5, unit: 'minute' }, {
220
+ aud: 'pikku-remote',
221
+ fn: funcName,
222
+ iat: Date.now(),
223
+ session: sessionEnc,
224
+ });
225
+ headers.Authorization = `Bearer ${token}`;
226
+ }
227
+ const url = `${endpoint}/rpc/${encodeURIComponent(funcName)}`;
228
+ const timeoutMs = 30_000;
229
+ const response = await fetch(url, {
230
+ method: 'POST',
231
+ headers,
232
+ body: JSON.stringify({ data }),
233
+ signal: AbortSignal.timeout(timeoutMs),
234
+ });
235
+ if (!response.ok) {
236
+ let errorBody;
237
+ try {
238
+ errorBody = JSON.stringify(await response.json());
239
+ }
240
+ catch {
241
+ errorBody = await response.text();
242
+ }
243
+ throw new Error(`Remote RPC call failed: ${response.status} ${response.statusText}. ${errorBody}`);
244
+ }
245
+ try {
246
+ return (await response.json());
247
+ }
248
+ catch {
249
+ const text = await response.text();
250
+ throw new Error(`Remote RPC call returned non-JSON response: ${response.status} ${response.statusText}. ${text}`);
251
+ }
80
252
  }
81
253
  }
82
254
  // RPC Service class for the global interface
83
255
  export class PikkuRPCService {
84
- config;
85
- // Initialize the RPC service with configuration
86
- initialize(config) {
87
- this.config = config;
88
- }
89
256
  // Convenience function for initializing
90
- getContextRPCService(services, wire, requiresAuth, depth = 0) {
91
- const serviceRPC = new ContextAwareRPCService(services, wire, {
92
- coerceDataFromSchema: this.config?.coerceDataFromSchema,
93
- requiresAuth,
94
- });
257
+ getContextRPCService(services, wire, requiresAuthOrOptions, depth = 0) {
258
+ const options = typeof requiresAuthOrOptions === 'object' &&
259
+ requiresAuthOrOptions !== null
260
+ ? requiresAuthOrOptions
261
+ : { requiresAuth: requiresAuthOrOptions };
262
+ const serviceRPC = new ContextAwareRPCService(services, wire, options);
95
263
  return {
96
264
  depth,
97
265
  global: false,
98
266
  invoke: serviceRPC.rpc.bind(serviceRPC),
99
- invokeExposed: serviceRPC.rpc.bind(serviceRPC),
267
+ remote: serviceRPC.remote.bind(serviceRPC),
268
+ exposed: serviceRPC.rpcExposed.bind(serviceRPC),
100
269
  startWorkflow: serviceRPC.startWorkflow.bind(serviceRPC),
270
+ agent: serviceRPC.agent.bind(serviceRPC),
101
271
  rpcWithWire: serviceRPC.rpcWithWire.bind(serviceRPC),
102
272
  };
103
273
  }
104
274
  }
105
275
  // Create a singleton instance
106
276
  export const rpcService = new PikkuRPCService();
107
- // Convenience function for initializing
108
- export const initialize = (config) => {
109
- rpcService.initialize(config);
110
- };
@@ -1,12 +1,16 @@
1
- export type PikkuRPC<invoke extends Function = any> = {
1
+ export type PikkuRPC<Invoke extends Function = any, Remote extends Function = any, startWorkflow extends Function = any, Agent extends Function = any> = {
2
2
  depth: number;
3
3
  global: boolean;
4
- invoke: invoke;
4
+ invoke: Invoke;
5
+ remote: Remote;
6
+ exposed: (name: string, data: any) => Promise<any>;
7
+ startWorkflow: startWorkflow;
8
+ agent: Agent;
5
9
  };
6
10
  export type RPCMeta = {
7
- pikkuFuncName: string;
11
+ pikkuFuncId: string;
8
12
  expose: boolean;
9
- internal?: boolean;
13
+ remote?: boolean;
10
14
  };
11
15
  /**
12
16
  * Type for RPC handlers
@@ -15,3 +19,10 @@ export interface RPCHandler<Input, Output> {
15
19
  input: Input;
16
20
  output: Output;
17
21
  }
22
+ /**
23
+ * Resolved function reference from namespace
24
+ */
25
+ export interface ResolvedFunction {
26
+ package: string;
27
+ function: string;
28
+ }
@@ -1,3 +1,3 @@
1
- export * from './scheduler.types.js';
2
- export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
1
+ export { runScheduledTask, createSchedulerRuntimeHandlers, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
2
+ export { logSchedulers } from './log-schedulers.js';
3
+ export type { CoreScheduledTask, ScheduledTasksMeta, PikkuScheduledTask, } from './scheduler.types.js';
@@ -1,3 +1,2 @@
1
- export * from './scheduler.types.js';
2
- export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
1
+ export { runScheduledTask, createSchedulerRuntimeHandlers, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
2
+ export { logSchedulers } from './log-schedulers.js';
@@ -4,7 +4,7 @@ import { pikkuState } from '../../pikku-state.js';
4
4
  * @param logger - A logger for logging information.
5
5
  */
6
6
  export const logSchedulers = (logger) => {
7
- const scheduledTasks = pikkuState('scheduler', 'tasks');
7
+ const scheduledTasks = pikkuState(null, 'scheduler', 'tasks');
8
8
  if (scheduledTasks.size === 0) {
9
9
  logger.info('No scheduled tasks added');
10
10
  return;
@@ -1,6 +1,7 @@
1
1
  import { type CoreServices, type CoreSingletonServices, type CoreUserSession, type CreateWireServices } from '../../types/core.types.js';
2
2
  import type { CoreScheduledTask } from './scheduler.types.js';
3
3
  import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
4
+ import { SchedulerRuntimeHandlers } from '../../services/scheduler-service.js';
4
5
  export type RunScheduledTasksParams = {
5
6
  name: string;
6
7
  session?: CoreUserSession;
@@ -10,3 +11,7 @@ export type RunScheduledTasksParams = {
10
11
  export declare const wireScheduler: <PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>>(scheduledTask: CoreScheduledTask<PikkuFunctionConfig>) => void;
11
12
  export declare function runScheduledTask({ name, session, singletonServices, createWireServices, }: RunScheduledTasksParams): Promise<void>;
12
13
  export declare const getScheduledTasks: () => Map<string, CoreScheduledTask>;
14
+ export declare const createSchedulerRuntimeHandlers: ({ singletonServices, createWireServices, }: {
15
+ singletonServices: CoreSingletonServices;
16
+ createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices<CoreSingletonServices>, CoreUserSession>;
17
+ }) => SchedulerRuntimeHandlers;