@pikku/core 0.11.2 → 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 (344) hide show
  1. package/CHANGELOG.md +33 -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 +8 -0
  5. package/dist/errors/errors.js +16 -0
  6. package/dist/errors/index.d.ts +0 -1
  7. package/dist/errors/index.js +0 -1
  8. package/dist/function/function-runner.d.ts +7 -1
  9. package/dist/function/function-runner.js +82 -23
  10. package/dist/function/functions.types.d.ts +31 -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.js +1 -10
  15. package/dist/index.d.ts +28 -26
  16. package/dist/index.js +18 -29
  17. package/dist/middleware/auth-apikey.d.ts +2 -2
  18. package/dist/middleware/auth-apikey.js +3 -3
  19. package/dist/middleware/auth-bearer.d.ts +2 -2
  20. package/dist/middleware/auth-bearer.js +3 -6
  21. package/dist/middleware/auth-cookie.d.ts +2 -2
  22. package/dist/middleware/auth-cookie.js +6 -8
  23. package/dist/middleware/cors.d.ts +46 -0
  24. package/dist/middleware/cors.js +73 -0
  25. package/dist/middleware/index.d.ts +5 -3
  26. package/dist/middleware/index.js +5 -3
  27. package/dist/middleware/remote-auth.d.ts +5 -0
  28. package/dist/middleware/remote-auth.js +55 -0
  29. package/dist/middleware/timeout.d.ts +2 -2
  30. package/dist/middleware-runner.js +8 -10
  31. package/dist/permissions.js +11 -15
  32. package/dist/pikku-state.d.ts +1 -0
  33. package/dist/pikku-state.js +18 -8
  34. package/dist/schema.js +12 -11
  35. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  36. package/dist/services/ai-agent-runner-service.js +1 -0
  37. package/dist/services/ai-run-state-service.d.ts +13 -0
  38. package/dist/services/ai-run-state-service.js +1 -0
  39. package/dist/services/ai-storage-service.d.ts +18 -0
  40. package/dist/services/ai-storage-service.js +1 -0
  41. package/dist/services/deployment-service.d.ts +19 -0
  42. package/dist/services/deployment-service.js +1 -0
  43. package/dist/services/gopass-secrets.d.ts +47 -0
  44. package/dist/services/gopass-secrets.js +94 -0
  45. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  46. package/dist/services/in-memory-trigger-service.js +50 -0
  47. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  48. package/dist/services/in-memory-workflow-service.js +287 -0
  49. package/dist/services/index.d.ts +25 -11
  50. package/dist/services/index.js +10 -13
  51. package/dist/services/local-secrets.d.ts +23 -0
  52. package/dist/services/local-secrets.js +45 -0
  53. package/dist/services/local-variables.d.ts +5 -0
  54. package/dist/services/local-variables.js +18 -0
  55. package/dist/services/scheduler-service.d.ts +21 -1
  56. package/dist/services/scheduler-service.js +14 -0
  57. package/dist/services/schema-service.d.ts +6 -0
  58. package/dist/services/scoped-secret-service.d.ts +16 -0
  59. package/dist/services/scoped-secret-service.js +35 -0
  60. package/dist/services/secret-service.d.ts +25 -4
  61. package/dist/services/trigger-service.d.ts +23 -0
  62. package/dist/services/trigger-service.js +1 -0
  63. package/dist/services/typed-secret-service.d.ts +30 -0
  64. package/dist/services/typed-secret-service.js +40 -0
  65. package/dist/services/typed-variables-service.d.ts +27 -0
  66. package/dist/services/typed-variables-service.js +46 -0
  67. package/dist/services/user-session-service.d.ts +13 -0
  68. package/dist/services/user-session-service.js +17 -0
  69. package/dist/services/variables-service.d.ts +5 -0
  70. package/dist/services/workflow-service.d.ts +9 -4
  71. package/dist/types/core.types.d.ts +48 -12
  72. package/dist/types/core.types.js +8 -1
  73. package/dist/types/state.types.d.ts +43 -51
  74. package/dist/utils.d.ts +3 -2
  75. package/dist/utils.js +15 -3
  76. package/dist/version.d.ts +6 -0
  77. package/dist/version.js +19 -0
  78. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  79. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  80. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  81. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  82. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  83. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  84. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  85. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  86. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  87. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  88. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  89. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  90. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  91. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  92. package/dist/wirings/ai-agent/index.d.ts +5 -0
  93. package/dist/wirings/ai-agent/index.js +4 -0
  94. package/dist/wirings/channel/channel-common.d.ts +7 -4
  95. package/dist/wirings/channel/channel-common.js +15 -8
  96. package/dist/wirings/channel/channel-handler.js +12 -3
  97. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  98. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  99. package/dist/wirings/channel/channel-runner.js +7 -7
  100. package/dist/wirings/channel/channel.types.d.ts +5 -1
  101. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  102. package/dist/wirings/channel/define-channel-routes.js +23 -0
  103. package/dist/wirings/channel/index.d.ts +10 -8
  104. package/dist/wirings/channel/index.js +7 -8
  105. package/dist/wirings/channel/local/index.d.ts +3 -3
  106. package/dist/wirings/channel/local/index.js +3 -3
  107. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  108. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  109. package/dist/wirings/channel/serverless/index.js +1 -1
  110. package/dist/wirings/channel/serverless/serverless-channel-runner.js +15 -4
  111. package/dist/wirings/cli/channel/index.d.ts +1 -1
  112. package/dist/wirings/cli/channel/index.js +1 -1
  113. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  114. package/dist/wirings/cli/cli-runner.js +12 -8
  115. package/dist/wirings/cli/cli.types.d.ts +6 -6
  116. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  117. package/dist/wirings/cli/define-cli-commands.js +20 -0
  118. package/dist/wirings/cli/index.d.ts +2 -3
  119. package/dist/wirings/cli/index.js +1 -3
  120. package/dist/wirings/http/http-routes.d.ts +69 -0
  121. package/dist/wirings/http/http-routes.js +139 -0
  122. package/dist/wirings/http/http-runner.js +49 -23
  123. package/dist/wirings/http/http.types.d.ts +78 -38
  124. package/dist/wirings/http/index.d.ts +5 -4
  125. package/dist/wirings/http/index.js +4 -3
  126. package/dist/wirings/mcp/index.d.ts +4 -3
  127. package/dist/wirings/mcp/index.js +3 -3
  128. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  129. package/dist/wirings/mcp/mcp-runner.js +25 -39
  130. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  131. package/dist/wirings/node/index.d.ts +2 -0
  132. package/dist/wirings/node/index.js +1 -0
  133. package/dist/wirings/node/node.types.d.ts +20 -0
  134. package/dist/wirings/node/node.types.js +1 -0
  135. package/dist/wirings/oauth2/index.d.ts +3 -0
  136. package/dist/wirings/oauth2/index.js +2 -0
  137. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  138. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  139. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  140. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  141. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  142. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  143. package/dist/wirings/queue/index.d.ts +2 -2
  144. package/dist/wirings/queue/index.js +1 -1
  145. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  146. package/dist/wirings/queue/queue-runner.js +17 -6
  147. package/dist/wirings/queue/queue.types.d.ts +8 -2
  148. package/dist/wirings/rpc/index.d.ts +1 -1
  149. package/dist/wirings/rpc/index.js +1 -1
  150. package/dist/wirings/rpc/rpc-runner.d.ts +33 -5
  151. package/dist/wirings/rpc/rpc-runner.js +134 -16
  152. package/dist/wirings/rpc/rpc-types.d.ts +8 -4
  153. package/dist/wirings/scheduler/index.d.ts +3 -3
  154. package/dist/wirings/scheduler/index.js +2 -3
  155. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  156. package/dist/wirings/scheduler/scheduler-runner.js +23 -5
  157. package/dist/wirings/secret/index.d.ts +3 -0
  158. package/dist/wirings/secret/index.js +2 -0
  159. package/dist/wirings/secret/secret.types.d.ts +27 -0
  160. package/dist/wirings/secret/secret.types.js +1 -0
  161. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  162. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  163. package/dist/wirings/trigger/index.d.ts +3 -2
  164. package/dist/wirings/trigger/index.js +2 -2
  165. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  166. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  167. package/dist/wirings/trigger/trigger-runner.d.ts +21 -8
  168. package/dist/wirings/trigger/trigger-runner.js +46 -18
  169. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  170. package/dist/wirings/trigger/trigger.types.js +40 -1
  171. package/dist/wirings/variable/index.d.ts +3 -0
  172. package/dist/wirings/variable/index.js +2 -0
  173. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  174. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  175. package/dist/wirings/variable/variable.types.d.ts +18 -0
  176. package/dist/wirings/variable/variable.types.js +1 -0
  177. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  178. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  179. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  180. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  181. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  182. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  183. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  184. package/dist/wirings/workflow/graph/index.js +3 -3
  185. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  186. package/dist/wirings/workflow/graph/template.js +27 -0
  187. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  188. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  189. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  190. package/dist/wirings/workflow/index.d.ts +6 -6
  191. package/dist/wirings/workflow/index.js +6 -4
  192. package/dist/wirings/workflow/pikku-workflow-service.d.ts +28 -14
  193. package/dist/wirings/workflow/pikku-workflow-service.js +200 -56
  194. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  195. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  196. package/dist/wirings/workflow/workflow-utils.d.ts +1 -23
  197. package/dist/wirings/workflow/workflow-utils.js +1 -66
  198. package/dist/wirings/workflow/workflow.types.d.ts +40 -93
  199. package/package.json +13 -15
  200. package/run-tests.sh +4 -1
  201. package/src/crypto-utils.ts +99 -0
  202. package/src/errors/errors.ts +17 -0
  203. package/src/errors/index.ts +0 -1
  204. package/src/factory-functions.test.ts +42 -2
  205. package/src/function/function-runner.test.ts +4 -11
  206. package/src/function/function-runner.ts +114 -29
  207. package/src/function/functions.types.ts +62 -132
  208. package/src/function/index.ts +5 -2
  209. package/src/handle-error.ts +2 -10
  210. package/src/index.ts +99 -25
  211. package/src/middleware/auth-apikey.test.ts +15 -12
  212. package/src/middleware/auth-apikey.ts +3 -3
  213. package/src/middleware/auth-bearer.test.ts +17 -14
  214. package/src/middleware/auth-bearer.ts +25 -27
  215. package/src/middleware/auth-cookie.test.ts +16 -13
  216. package/src/middleware/auth-cookie.ts +6 -8
  217. package/src/middleware/cors.ts +96 -0
  218. package/src/middleware/index.ts +5 -3
  219. package/src/middleware/remote-auth.ts +68 -0
  220. package/src/middleware-runner.test.ts +122 -0
  221. package/src/middleware-runner.ts +12 -12
  222. package/src/permissions.test.ts +81 -7
  223. package/src/permissions.ts +15 -17
  224. package/src/pikku-state.ts +20 -8
  225. package/src/run-tests-script.test.ts +49 -0
  226. package/src/schema.ts +18 -15
  227. package/src/services/ai-agent-runner-service.ts +29 -0
  228. package/src/services/ai-run-state-service.ts +20 -0
  229. package/src/services/ai-storage-service.ts +39 -0
  230. package/src/services/deployment-service.ts +22 -0
  231. package/src/services/gopass-secrets.ts +95 -0
  232. package/src/services/in-memory-trigger-service.ts +68 -0
  233. package/src/services/in-memory-workflow-service.ts +395 -0
  234. package/src/services/index.ts +49 -14
  235. package/src/services/local-secrets.ts +51 -0
  236. package/src/services/local-variables.ts +22 -0
  237. package/src/services/scheduler-service.ts +29 -1
  238. package/src/services/schema-service.ts +7 -0
  239. package/src/services/scoped-secret-service.ts +41 -0
  240. package/src/services/secret-service.ts +25 -4
  241. package/src/services/trigger-service.ts +38 -0
  242. package/src/services/typed-secret-service.ts +70 -0
  243. package/src/services/typed-variables-service.ts +81 -0
  244. package/src/services/user-session-service.ts +23 -0
  245. package/src/services/variables-service.ts +5 -0
  246. package/src/services/workflow-service.ts +22 -2
  247. package/src/types/core.types.ts +76 -11
  248. package/src/types/state.types.ts +37 -63
  249. package/src/utils.ts +20 -6
  250. package/src/version.test.ts +80 -0
  251. package/src/version.ts +25 -0
  252. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  253. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  254. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  255. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  256. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  257. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  258. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  259. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  260. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  261. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  262. package/src/wirings/ai-agent/index.ts +28 -0
  263. package/src/wirings/channel/channel-common.ts +32 -19
  264. package/src/wirings/channel/channel-handler.ts +17 -4
  265. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  266. package/src/wirings/channel/channel-runner.ts +9 -10
  267. package/src/wirings/channel/channel.types.ts +17 -1
  268. package/src/wirings/channel/define-channel-routes.ts +25 -0
  269. package/src/wirings/channel/index.ts +23 -8
  270. package/src/wirings/channel/local/index.ts +3 -3
  271. package/src/wirings/channel/local/local-channel-runner.test.ts +44 -1
  272. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  273. package/src/wirings/channel/serverless/index.ts +5 -1
  274. package/src/wirings/channel/serverless/serverless-channel-runner.ts +20 -4
  275. package/src/wirings/cli/channel/index.ts +1 -1
  276. package/src/wirings/cli/cli-runner.test.ts +9 -9
  277. package/src/wirings/cli/cli-runner.ts +17 -10
  278. package/src/wirings/cli/cli.types.ts +11 -11
  279. package/src/wirings/cli/command-parser.test.ts +8 -8
  280. package/src/wirings/cli/define-cli-commands.ts +24 -0
  281. package/src/wirings/cli/index.ts +10 -4
  282. package/src/wirings/http/http-routes.test.ts +322 -0
  283. package/src/wirings/http/http-routes.ts +198 -0
  284. package/src/wirings/http/http-runner.test.ts +3 -3
  285. package/src/wirings/http/http-runner.ts +63 -29
  286. package/src/wirings/http/http.types.ts +121 -37
  287. package/src/wirings/http/index.ts +16 -4
  288. package/src/wirings/mcp/index.ts +27 -3
  289. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  290. package/src/wirings/mcp/mcp-runner.ts +39 -50
  291. package/src/wirings/mcp/mcp.types.ts +3 -3
  292. package/src/wirings/node/index.ts +2 -0
  293. package/src/wirings/node/node.types.ts +23 -0
  294. package/src/wirings/oauth2/index.ts +3 -0
  295. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  296. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  297. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  298. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  299. package/src/wirings/queue/index.ts +14 -2
  300. package/src/wirings/queue/queue-runner.test.ts +97 -55
  301. package/src/wirings/queue/queue-runner.ts +33 -7
  302. package/src/wirings/queue/queue.types.ts +12 -2
  303. package/src/wirings/rpc/index.ts +1 -1
  304. package/src/wirings/rpc/rpc-runner.ts +187 -17
  305. package/src/wirings/rpc/rpc-types.ts +13 -4
  306. package/src/wirings/scheduler/index.ts +7 -4
  307. package/src/wirings/scheduler/scheduler-runner.test.ts +70 -26
  308. package/src/wirings/scheduler/scheduler-runner.ts +45 -5
  309. package/src/wirings/secret/index.ts +9 -0
  310. package/src/wirings/secret/secret.types.ts +32 -0
  311. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  312. package/src/wirings/trigger/index.ts +10 -2
  313. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  314. package/src/wirings/trigger/trigger-runner.ts +80 -38
  315. package/src/wirings/trigger/trigger.types.ts +144 -22
  316. package/src/wirings/variable/index.ts +8 -0
  317. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  318. package/src/wirings/variable/variable.types.ts +22 -0
  319. package/src/wirings/workflow/dsl/index.ts +1 -0
  320. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  321. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  322. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  323. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  324. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  325. package/src/wirings/workflow/graph/index.ts +14 -3
  326. package/src/wirings/workflow/graph/template.ts +42 -0
  327. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  328. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  329. package/src/wirings/workflow/index.ts +21 -10
  330. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  331. package/src/wirings/workflow/pikku-workflow-service.ts +285 -66
  332. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  333. package/src/wirings/workflow/workflow-utils.ts +0 -120
  334. package/src/wirings/workflow/workflow.types.ts +45 -90
  335. package/tsconfig.tsbuildinfo +1 -1
  336. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  337. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  338. package/dist/wirings/forge-node/index.d.ts +0 -1
  339. package/dist/wirings/forge-node/index.js +0 -1
  340. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  341. package/dist/wirings/workflow/wire-workflow.js +0 -53
  342. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  343. package/src/wirings/forge-node/index.ts +0 -1
  344. package/src/wirings/workflow/wire-workflow.ts +0 -94
@@ -1,17 +1,38 @@
1
1
  /**
2
- * Interface for retrieving secrets.
2
+ * Interface for retrieving and managing secrets.
3
3
  */
4
4
  export interface SecretService {
5
5
  /**
6
- * Retrieves a secret by key.
6
+ * Retrieves a secret by key and parses it as JSON.
7
7
  * @param key - The key of the secret to retrieve.
8
- * @returns A promise that resolves to the secret value.
8
+ * @returns A promise that resolves to the parsed secret value.
9
+ * @throws If the secret is not found.
9
10
  */
10
11
  getSecretJSON<Return = {}>(key: string): Promise<Return>;
11
12
  /**
12
- * Retrieves a secret by key.
13
+ * Retrieves a secret by key as a string.
13
14
  * @param key - The key of the secret to retrieve.
14
15
  * @returns A promise that resolves to the secret value.
16
+ * @throws If the secret is not found.
15
17
  */
16
18
  getSecret(key: string): Promise<string>;
19
+ /**
20
+ * Checks if a secret exists without throwing.
21
+ * @param key - The key of the secret to check.
22
+ * @returns A promise that resolves to true if the secret exists, false otherwise.
23
+ */
24
+ hasSecret(key: string): Promise<boolean>;
25
+ /**
26
+ * Stores a JSON value as a secret.
27
+ * @param key - The key to store the secret under.
28
+ * @param value - The JSON value to store.
29
+ * @returns A promise that resolves when the secret is stored.
30
+ */
31
+ setSecretJSON(key: string, value: unknown): Promise<void>;
32
+ /**
33
+ * Deletes a secret by key.
34
+ * @param key - The key of the secret to delete.
35
+ * @returns A promise that resolves when the secret is deleted.
36
+ */
37
+ deleteSecret(key: string): Promise<void>;
17
38
  }
@@ -0,0 +1,23 @@
1
+ import { CoreSingletonServices, CreateWireServices, CoreServices, CoreUserSession } from '../types/core.types.js';
2
+ /**
3
+ * Abstract TriggerService interface.
4
+ *
5
+ * Implementations manage trigger subscriptions — listening to external events
6
+ * and dispatching to RPC targets or workflow starts.
7
+ */
8
+ export interface TriggerService {
9
+ /**
10
+ * Set services needed for processing triggers.
11
+ * Called after construction since the trigger service is created before
12
+ * singletonServices are fully assembled.
13
+ */
14
+ setServices(_singletonServices: CoreSingletonServices, _createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices, CoreUserSession>): void;
15
+ /**
16
+ * Start all triggers
17
+ */
18
+ start(): Promise<void>;
19
+ /**
20
+ * Stop all triggers
21
+ */
22
+ stop(): Promise<void>;
23
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { SecretService } from './secret-service.js';
2
+ export interface CredentialStatus {
3
+ secretId: string;
4
+ name: string;
5
+ displayName: string;
6
+ isConfigured: boolean;
7
+ oauth2?: {
8
+ tokenSecretId: string;
9
+ };
10
+ }
11
+ export type CredentialMeta = {
12
+ name: string;
13
+ displayName: string;
14
+ oauth2?: {
15
+ tokenSecretId: string;
16
+ };
17
+ };
18
+ export declare class TypedSecretService<TMap = Record<string, unknown>> implements SecretService {
19
+ private secrets;
20
+ private credentialsMeta;
21
+ constructor(secrets: SecretService, credentialsMeta: Record<string, CredentialMeta>);
22
+ getSecretJSON<K extends keyof TMap & string>(key: K): Promise<TMap[K]>;
23
+ getSecretJSON<T = unknown>(key: string): Promise<T>;
24
+ getSecret(key: string): Promise<string>;
25
+ hasSecret(key: string): Promise<boolean>;
26
+ setSecretJSON<K extends string>(key: K, value: K extends keyof TMap ? TMap[K] : unknown): Promise<void>;
27
+ deleteSecret(key: string): Promise<void>;
28
+ getAllStatus(): Promise<CredentialStatus[]>;
29
+ getMissing(): Promise<CredentialStatus[]>;
30
+ }
@@ -0,0 +1,40 @@
1
+ export class TypedSecretService {
2
+ secrets;
3
+ credentialsMeta;
4
+ constructor(secrets, credentialsMeta) {
5
+ this.secrets = secrets;
6
+ this.credentialsMeta = credentialsMeta;
7
+ }
8
+ async getSecretJSON(key) {
9
+ return this.secrets.getSecretJSON(key);
10
+ }
11
+ async getSecret(key) {
12
+ return this.secrets.getSecret(key);
13
+ }
14
+ async hasSecret(key) {
15
+ return this.secrets.hasSecret(key);
16
+ }
17
+ async setSecretJSON(key, value) {
18
+ return this.secrets.setSecretJSON(key, value);
19
+ }
20
+ async deleteSecret(key) {
21
+ return this.secrets.deleteSecret(key);
22
+ }
23
+ async getAllStatus() {
24
+ const results = [];
25
+ for (const [secretId, meta] of Object.entries(this.credentialsMeta)) {
26
+ results.push({
27
+ secretId,
28
+ name: meta.name,
29
+ displayName: meta.displayName,
30
+ isConfigured: await this.secrets.hasSecret(secretId),
31
+ oauth2: meta.oauth2,
32
+ });
33
+ }
34
+ return results;
35
+ }
36
+ async getMissing() {
37
+ const all = await this.getAllStatus();
38
+ return all.filter((c) => !c.isConfigured);
39
+ }
40
+ }
@@ -0,0 +1,27 @@
1
+ import type { VariablesService } from './variables-service.js';
2
+ export interface VariableStatus {
3
+ variableId: string;
4
+ name: string;
5
+ displayName: string;
6
+ isConfigured: boolean;
7
+ }
8
+ export type VariableMeta = {
9
+ name: string;
10
+ displayName: string;
11
+ };
12
+ export declare class TypedVariablesService<TMap = Record<string, unknown>> implements VariablesService {
13
+ private variables;
14
+ private variablesMeta;
15
+ constructor(variables: VariablesService, variablesMeta: Record<string, VariableMeta>);
16
+ get(name: keyof TMap & string): Promise<string | undefined> | string | undefined;
17
+ get(name: string): Promise<string | undefined> | string | undefined;
18
+ getJSON<K extends keyof TMap & string>(name: K): Promise<TMap[K] | undefined> | TMap[K] | undefined;
19
+ getJSON<T = unknown>(name: string): Promise<T | undefined> | T | undefined;
20
+ getAll(): Promise<Record<string, string | undefined>> | Record<string, string | undefined>;
21
+ set(name: string, value: string): Promise<void> | void;
22
+ setJSON(name: string, value: unknown): Promise<void> | void;
23
+ has(name: string): Promise<boolean> | boolean;
24
+ delete(name: string): Promise<void> | void;
25
+ getAllStatus(): Promise<VariableStatus[]>;
26
+ getMissing(): Promise<VariableStatus[]>;
27
+ }
@@ -0,0 +1,46 @@
1
+ export class TypedVariablesService {
2
+ variables;
3
+ variablesMeta;
4
+ constructor(variables, variablesMeta) {
5
+ this.variables = variables;
6
+ this.variablesMeta = variablesMeta;
7
+ }
8
+ get(name) {
9
+ return this.variables.get(name);
10
+ }
11
+ getJSON(name) {
12
+ return this.variables.getJSON(name);
13
+ }
14
+ getAll() {
15
+ return this.variables.getAll();
16
+ }
17
+ set(name, value) {
18
+ return this.variables.set(name, value);
19
+ }
20
+ setJSON(name, value) {
21
+ return this.variables.setJSON(name, value);
22
+ }
23
+ has(name) {
24
+ return this.variables.has(name);
25
+ }
26
+ delete(name) {
27
+ return this.variables.delete(name);
28
+ }
29
+ async getAllStatus() {
30
+ const results = [];
31
+ const all = await this.variables.getAll();
32
+ for (const [variableId, meta] of Object.entries(this.variablesMeta)) {
33
+ results.push({
34
+ variableId,
35
+ name: meta.name,
36
+ displayName: meta.displayName,
37
+ isConfigured: all[variableId] !== undefined,
38
+ });
39
+ }
40
+ return results;
41
+ }
42
+ async getMissing() {
43
+ const all = await this.getAllStatus();
44
+ return all.filter((v) => !v.isConfigured);
45
+ }
46
+ }
@@ -22,3 +22,16 @@ export declare class PikkuSessionService<UserSession extends CoreUserSession> im
22
22
  clear(): void | Promise<void> | undefined;
23
23
  get(): Promise<UserSession> | UserSession | undefined;
24
24
  }
25
+ export declare function createMiddlewareSessionWireProps<UserSession extends CoreUserSession>(session: SessionService<UserSession>): {
26
+ session: UserSession | Promise<UserSession> | undefined;
27
+ setSession: (s: UserSession) => void;
28
+ getSession: () => UserSession | Promise<UserSession> | undefined;
29
+ hasSessionChanged: () => boolean;
30
+ };
31
+ export declare function createFunctionSessionWireProps<UserSession extends CoreUserSession>(session: SessionService<UserSession>): {
32
+ session: UserSession | undefined;
33
+ setSession: (s: UserSession) => void | Promise<void>;
34
+ clearSession: () => void | Promise<void>;
35
+ getSession: () => UserSession | Promise<UserSession> | undefined;
36
+ hasSessionChanged: () => boolean;
37
+ };
@@ -43,3 +43,20 @@ export class PikkuSessionService {
43
43
  return this.session;
44
44
  }
45
45
  }
46
+ export function createMiddlewareSessionWireProps(session) {
47
+ return {
48
+ session: session.get(),
49
+ setSession: (s) => session.setInitial(s),
50
+ getSession: () => session.get(),
51
+ hasSessionChanged: () => session.sessionChanged,
52
+ };
53
+ }
54
+ export function createFunctionSessionWireProps(session) {
55
+ return {
56
+ session: session.freezeInitial(),
57
+ setSession: (s) => session.set(s),
58
+ clearSession: () => session.clear(),
59
+ getSession: () => session.get(),
60
+ hasSessionChanged: () => session.sessionChanged,
61
+ };
62
+ }
@@ -1,4 +1,9 @@
1
1
  export interface VariablesService {
2
2
  get: (name: string) => Promise<string | undefined> | string | undefined;
3
+ getJSON: <T = unknown>(name: string) => Promise<T | undefined> | T | undefined;
3
4
  getAll: () => Promise<Record<string, string | undefined>> | Record<string, string | undefined>;
5
+ set: (name: string, value: string) => Promise<void> | void;
6
+ setJSON: (name: string, value: unknown) => Promise<void> | void;
7
+ has: (name: string) => Promise<boolean> | boolean;
8
+ delete: (name: string) => Promise<void> | void;
4
9
  }
@@ -1,11 +1,11 @@
1
1
  import { SerializedError, CoreSingletonServices, CreateWireServices, CoreConfig } from '../types/core.types.js';
2
- import { WorkflowRun, StepState, WorkflowStatus } from '../wirings/workflow/workflow.types.js';
2
+ import { WorkflowRun, WorkflowRunWire, StepState, WorkflowStatus } from '../wirings/workflow/workflow.types.js';
3
3
  /**
4
4
  * Interface for workflow orchestration
5
5
  * Handles workflow execution, replay, orchestration logic, and run-level state
6
6
  */
7
7
  export interface WorkflowService {
8
- createRun(workflowName: string, input: any, inline?: boolean): Promise<string>;
8
+ createRun(workflowName: string, input: any, inline: boolean, graphHash: string, wire: WorkflowRunWire): Promise<string>;
9
9
  getRun(id: string): Promise<WorkflowRun | null>;
10
10
  getRunHistory(runId: string): Promise<Array<StepState & {
11
11
  stepName: string;
@@ -14,8 +14,8 @@ export interface WorkflowService {
14
14
  withRunLock<T>(id: string, fn: () => Promise<T>): Promise<T>;
15
15
  close(): Promise<void>;
16
16
  resumeWorkflow(runId: string): Promise<void>;
17
- setServices(singletonServices: CoreSingletonServices, createWireServices: CreateWireServices, config: CoreConfig): void;
18
- startWorkflow<I>(name: string, input: I, rpcService: any, options?: {
17
+ setServices(singletonServices: CoreSingletonServices, createWireServices: CreateWireServices | undefined, config: CoreConfig): void;
18
+ startWorkflow<I>(name: string, input: I, wire: WorkflowRunWire, rpcService: any, options?: {
19
19
  inline?: boolean;
20
20
  startNode?: string;
21
21
  }): Promise<{
@@ -35,4 +35,9 @@ export interface WorkflowService {
35
35
  setStepError(stepId: string, error: Error): Promise<void>;
36
36
  createRetryAttempt(stepId: string, status: 'pending' | 'running'): Promise<StepState>;
37
37
  executeWorkflowStep(runId: string, stepName: string, rpcName: string | null, data: any, rpcService: any): Promise<void>;
38
+ upsertWorkflowVersion(name: string, graphHash: string, graph: any, source: string): Promise<void>;
39
+ getWorkflowVersion(name: string, graphHash: string): Promise<{
40
+ graph: any;
41
+ source: string;
42
+ } | null>;
38
43
  }
@@ -4,8 +4,7 @@ import { SecretService } from '../services/secret-service.js';
4
4
  import { SchemaService } from '../services/schema-service.js';
5
5
  import { JWTService } from '../services/jwt-service.js';
6
6
  import { PikkuHTTP } from '../wirings/http/http.types.js';
7
- import { SessionService } from '../services/user-session-service.js';
8
- import { PikkuChannel } from '../wirings/channel/channel.types.js';
7
+ import { PikkuChannel, CorePikkuChannelMiddleware, CorePikkuChannelMiddlewareFactory } from '../wirings/channel/channel.types.js';
9
8
  import { PikkuRPC } from '../wirings/rpc/rpc-types.js';
10
9
  import { PikkuMCP } from '../wirings/mcp/mcp.types.js';
11
10
  import { PikkuScheduledTask } from '../wirings/scheduler/scheduler.types.js';
@@ -15,11 +14,20 @@ import { PikkuWorkflowWire, WorkflowService, WorkflowServiceConfig, WorkflowStep
15
14
  import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js';
16
15
  import { PikkuTrigger } from '../wirings/trigger/trigger.types.js';
17
16
  import { SchedulerService } from '../services/scheduler-service.js';
18
- export type PikkuWiringTypes = 'http' | 'scheduler' | 'channel' | 'rpc' | 'queue' | 'mcp' | 'cli' | 'workflow';
17
+ import { DeploymentService } from '../services/deployment-service.js';
18
+ import { AIStorageService } from '../services/ai-storage-service.js';
19
+ import { AIAgentRunnerService } from '../services/ai-agent-runner-service.js';
20
+ import { AIRunStateService } from '../services/ai-run-state-service.js';
21
+ import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js';
22
+ export type PikkuWiringTypes = 'http' | 'scheduler' | 'trigger' | 'channel' | 'rpc' | 'queue' | 'mcp' | 'cli' | 'workflow' | 'agent';
19
23
  export interface FunctionServicesMeta {
20
24
  optimized: boolean;
21
25
  services: string[];
22
26
  }
27
+ export interface FunctionWiresMeta {
28
+ optimized: boolean;
29
+ wires: string[];
30
+ }
23
31
  /**
24
32
  * Metadata for middleware at any level
25
33
  * - type: 'http' = HTTP route middleware group (references httpGroup in pikkuState)
@@ -55,16 +63,23 @@ export type PermissionMetadata = {
55
63
  inline?: boolean;
56
64
  };
57
65
  export type FunctionRuntimeMeta = {
58
- pikkuFuncName: string;
66
+ pikkuFuncId: string;
59
67
  inputSchemaName: string | null;
60
68
  outputSchemaName: string | null;
61
69
  expose?: boolean;
62
- internal?: boolean;
70
+ remote?: boolean;
71
+ mcp?: boolean;
72
+ sessionless?: boolean;
73
+ version?: number;
74
+ requiresApproval?: boolean;
75
+ contractHash?: string;
63
76
  };
64
77
  export type FunctionMeta = FunctionRuntimeMeta & Partial<{
65
78
  name: string;
79
+ functionType: 'user' | 'inline' | 'helper';
80
+ funcWrapper: string;
66
81
  services: FunctionServicesMeta;
67
- usedWires: string[];
82
+ wires: FunctionWiresMeta;
68
83
  inputs: string[] | null;
69
84
  outputs: string[] | null;
70
85
  middleware: MiddlewareMetadata[];
@@ -135,11 +150,21 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
135
150
  queueService?: QueueService;
136
151
  /** The scheduler service */
137
152
  schedulerService?: SchedulerService;
153
+ /** The deployment service for service discovery */
154
+ deploymentService?: DeploymentService;
155
+ /** AI agent storage service (threads, messages, working memory) */
156
+ aiStorage?: AIStorageService;
157
+ /** AI agent runner service (model calls + tool loop) */
158
+ aiAgentRunner?: AIAgentRunnerService;
159
+ /** AI run state service (run lifecycle + approval persistence) */
160
+ aiRunState?: AIRunStateService;
138
161
  }
139
162
  /**
140
163
  * Represents different forms of wire within Pikku and the outside world.
141
164
  */
142
165
  export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boolean = false, UserSession extends CoreUserSession = CoreUserSession, TypedRPC extends PikkuRPC = PikkuRPC, IsChannel extends true | null = null, MCPTools extends string | never = never, TypedWorkflow extends PikkuWorkflowWire | never = PikkuWorkflowWire, TriggerOutput = unknown> = Partial<{
166
+ wireType: PikkuWiringTypes;
167
+ wireId: string;
143
168
  http: PikkuHTTP<In>;
144
169
  mcp: PikkuMCP<MCPTools>;
145
170
  rpc: TypedRPC;
@@ -151,8 +176,15 @@ export type PikkuWire<In = unknown, Out = unknown, HasInitialSession extends boo
151
176
  workflowStep: WorkflowStepWire;
152
177
  graph: PikkuGraphWire;
153
178
  trigger: PikkuTrigger<TriggerOutput>;
154
- initialSession: HasInitialSession extends true ? UserSession : UserSession | undefined;
155
- session: SessionService<UserSession>;
179
+ session: HasInitialSession extends true ? UserSession : UserSession | undefined;
180
+ /** Update and persist the current session */
181
+ setSession: (session: CoreUserSession) => Promise<void> | void;
182
+ /** Clear and persist the current session */
183
+ clearSession: () => Promise<void> | void;
184
+ /** Fetch the latest session (may read from backing store) */
185
+ getSession: () => Promise<UserSession> | UserSession | undefined;
186
+ /** Whether the session was modified during this run */
187
+ hasSessionChanged: () => boolean;
156
188
  }>;
157
189
  /**
158
190
  * A function that can wrap an wire and be called before or after
@@ -167,8 +199,8 @@ export type CorePikkuMiddleware<SingletonServices extends CoreSingletonServices
167
199
  export type CorePikkuMiddlewareConfig<SingletonServices extends CoreSingletonServices = CoreSingletonServices, UserSession extends CoreUserSession = CoreUserSession> = {
168
200
  /** The middleware function */
169
201
  func: CorePikkuMiddleware<SingletonServices, UserSession>;
170
- /** Optional human-readable title for the middleware */
171
- title?: string;
202
+ /** Optional human-readable name for the middleware */
203
+ name?: string;
172
204
  /** Optional description of what the middleware does */
173
205
  description?: string;
174
206
  };
@@ -198,7 +230,7 @@ export type CorePikkuMiddlewareGroup<SingletonServices extends CoreSingletonServ
198
230
  *
199
231
  * // Configuration object syntax with metadata
200
232
  * export const logMiddleware = pikkuMiddleware({
201
- * title: 'Request Logger',
233
+ * name: 'Request Logger',
202
234
  * description: 'Logs request information',
203
235
  * func: async ({ logger }, next) => {
204
236
  * logger.info('Request started')
@@ -226,6 +258,10 @@ export declare const pikkuMiddleware: <SingletonServices extends CoreSingletonSe
226
258
  * ```
227
259
  */
228
260
  export declare const pikkuMiddlewareFactory: <In = any>(factory: CorePikkuMiddlewareFactory<In>) => CorePikkuMiddlewareFactory<In>;
261
+ export declare const pikkuChannelMiddleware: <SingletonServices extends CoreSingletonServices = CoreSingletonServices, Event = unknown>(middleware: CorePikkuChannelMiddleware<SingletonServices, Event>) => CorePikkuChannelMiddleware<SingletonServices, Event>;
262
+ export declare const pikkuChannelMiddlewareFactory: <In = any>(factory: CorePikkuChannelMiddlewareFactory<In>) => CorePikkuChannelMiddlewareFactory<In>;
263
+ export type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js';
264
+ export declare const pikkuAIMiddleware: <State extends Record<string, unknown> = Record<string, unknown>, SingletonServices extends CoreSingletonServices = CoreSingletonServices>(hooks: PikkuAIMiddlewareHooks<State, SingletonServices>) => PikkuAIMiddlewareHooks<State, SingletonServices>;
229
265
  /**
230
266
  * Represents the core services used by Pikku, including singleton services.
231
267
  */
@@ -247,7 +283,7 @@ export type CreateConfig<Config extends CoreConfig, RemainingArgs extends any[]
247
283
  * Represents the documentation for a route, including summary, description, tags, and errors.
248
284
  */
249
285
  export type CommonWireMeta = {
250
- pikkuFuncName: string;
286
+ pikkuFuncId: string;
251
287
  title?: string;
252
288
  tags?: string[];
253
289
  summary?: string;
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * // Configuration object syntax with metadata
16
16
  * export const logMiddleware = pikkuMiddleware({
17
- * title: 'Request Logger',
17
+ * name: 'Request Logger',
18
18
  * description: 'Logs request information',
19
19
  * func: async ({ logger }, next) => {
20
20
  * logger.info('Request started')
@@ -46,3 +46,10 @@ export const pikkuMiddleware = (middleware) => {
46
46
  export const pikkuMiddlewareFactory = (factory) => {
47
47
  return factory;
48
48
  };
49
+ export const pikkuChannelMiddleware = (middleware) => {
50
+ return middleware;
51
+ };
52
+ export const pikkuChannelMiddlewareFactory = (factory) => {
53
+ return factory;
54
+ };
55
+ export const pikkuAIMiddleware = (hooks) => hooks;
@@ -1,15 +1,17 @@
1
1
  import { PikkuError, ErrorDetails } from '../errors/error-handler.js';
2
2
  import { CorePikkuFunctionConfig, CorePermissionGroup, CorePikkuPermission } from '../function/functions.types.js';
3
+ import { CorePikkuTriggerFunctionConfig } from '../wirings/trigger/trigger.types.js';
3
4
  import { CoreChannel, ChannelsMeta } from '../wirings/channel/channel.types.js';
4
5
  import { CLIMeta, CLIProgramState } from '../wirings/cli/cli.types.js';
5
6
  import { HTTPMethod, CoreHTTPFunctionWiring, HTTPWiringsMeta } from '../wirings/http/http.types.js';
6
- import { CoreMCPResource, MCPResourceMeta, CoreMCPTool, MCPToolMeta, CoreMCPPrompt, MCPPromptMeta } from '../wirings/mcp/mcp.types.js';
7
+ import { CoreMCPResource, MCPResourceMeta, MCPToolMeta, CoreMCPPrompt, MCPPromptMeta } from '../wirings/mcp/mcp.types.js';
8
+ import { CoreAIAgent, AIAgentMeta } from '../wirings/ai-agent/ai-agent.types.js';
7
9
  import { CoreQueueWorker, QueueWorkersMeta } from '../wirings/queue/queue.types.js';
8
10
  import { CoreScheduledTask, ScheduledTasksMeta } from '../wirings/scheduler/scheduler.types.js';
9
- import { CoreWorkflow, WorkflowsRuntimeMeta, WorkflowWires } from '../wirings/workflow/workflow.types.js';
10
- import type { WorkflowGraphDefinition, GraphNodeConfig } from '../wirings/workflow/graph/workflow-graph.types.js';
11
- import { CoreTrigger, TriggerMeta } from '../wirings/trigger/trigger.types.js';
12
- import { FunctionsMeta, CorePikkuMiddleware, CorePikkuMiddlewareGroup, FunctionServicesMeta, CreateConfig, CreateSingletonServices, CreateWireServices, CoreConfig, CoreSingletonServices, CoreServices, CoreUserSession } from './core.types.js';
11
+ import { CoreWorkflow, WorkflowsRuntimeMeta } from '../wirings/workflow/workflow.types.js';
12
+ import { CoreTrigger, CoreTriggerSource, TriggerMeta, TriggerSourceMeta } from '../wirings/trigger/trigger.types.js';
13
+ import { FunctionsMeta, CorePikkuMiddleware, CorePikkuMiddlewareGroup, CreateConfig, CreateSingletonServices, CreateWireServices, CoreConfig, CoreSingletonServices, CoreServices, CoreUserSession } from './core.types.js';
14
+ import type { CorePikkuChannelMiddleware } from '../wirings/channel/channel.types.js';
13
15
  /**
14
16
  * State structure for an individual package
15
17
  */
@@ -24,8 +26,11 @@ export interface PikkuPackageState {
24
26
  exportedName: string;
25
27
  path: string;
26
28
  }>;
27
- /** Maps namespace aliases to package names (e.g., 'ext' -> '@pikku/templates-function-external') */
28
- externalPackages: Map<string, string>;
29
+ /** Maps namespace aliases to package config (e.g., 'ext' -> { package: '@pikku/...', rpcEndpoint: '...' }) */
30
+ externalPackages: Map<string, {
31
+ package: string;
32
+ rpcEndpoint?: string;
33
+ }>;
29
34
  };
30
35
  http: {
31
36
  middleware: Map<string, CorePikkuMiddleware<any, any>[]>;
@@ -47,31 +52,26 @@ export interface PikkuPackageState {
47
52
  };
48
53
  workflows: {
49
54
  registrations: Map<string, CoreWorkflow>;
50
- graphRegistrations: Map<string, WorkflowGraphDefinition<any>>;
51
- /** DSL workflow wirings (from wireWorkflow({ func: ... })) */
52
- wirings: Map<any, {
53
- wires: WorkflowWires;
54
- func: any;
55
- }>;
56
- /** Graph workflow wirings (from wireWorkflow({ graph: ... })) */
57
- graphWirings: Map<any, {
58
- wires: WorkflowWires;
59
- graph: Record<string, GraphNodeConfig<string>>;
60
- }>;
61
55
  meta: WorkflowsRuntimeMeta;
62
56
  };
63
57
  trigger: {
58
+ functions: Map<string, CorePikkuTriggerFunctionConfig<any, any>>;
64
59
  triggers: Map<string, CoreTrigger>;
60
+ triggerSources: Map<string, CoreTriggerSource>;
65
61
  meta: TriggerMeta;
62
+ sourceMeta: TriggerSourceMeta;
66
63
  };
67
64
  mcp: {
68
65
  resources: Map<string, CoreMCPResource>;
69
66
  resourcesMeta: MCPResourceMeta;
70
- tools: Map<string, CoreMCPTool>;
71
67
  toolsMeta: MCPToolMeta;
72
68
  prompts: Map<string, CoreMCPPrompt>;
73
69
  promptsMeta: MCPPromptMeta;
74
70
  };
71
+ agent: {
72
+ agents: Map<string, CoreAIAgent>;
73
+ agentsMeta: AIAgentMeta;
74
+ };
75
75
  cli: {
76
76
  meta: CLIMeta | Record<string, any>;
77
77
  programs: Record<string, CLIProgramState>;
@@ -79,49 +79,39 @@ export interface PikkuPackageState {
79
79
  middleware: {
80
80
  tagGroup: Record<string, CorePikkuMiddlewareGroup>;
81
81
  httpGroup: Record<string, CorePikkuMiddlewareGroup>;
82
- tagGroupMeta: Record<string, {
83
- exportName: string | null;
84
- sourceFile: string;
85
- position: number;
86
- services: FunctionServicesMeta;
87
- middlewareCount: number;
88
- isFactory: boolean;
89
- }>;
90
- httpGroupMeta: Record<string, {
91
- exportName: string | null;
92
- sourceFile: string;
93
- position: number;
94
- services: FunctionServicesMeta;
95
- middlewareCount: number;
96
- isFactory: boolean;
97
- }>;
82
+ };
83
+ channelMiddleware: {
84
+ tagGroup: Record<string, CorePikkuChannelMiddleware[]>;
98
85
  };
99
86
  permissions: {
100
87
  tagGroup: Record<string, CorePermissionGroup | CorePikkuPermission[]>;
101
88
  httpGroup: Record<string, CorePermissionGroup | CorePikkuPermission[]>;
102
- tagGroupMeta: Record<string, {
103
- exportName: string | null;
104
- sourceFile: string;
105
- position: number;
106
- services: FunctionServicesMeta;
107
- permissionCount: number;
108
- isFactory: boolean;
109
- }>;
110
- httpGroupMeta: Record<string, {
111
- exportName: string | null;
112
- sourceFile: string;
113
- position: number;
114
- services: FunctionServicesMeta;
115
- permissionCount: number;
116
- isFactory: boolean;
117
- }>;
118
89
  };
119
90
  misc: {
120
91
  errors: Map<PikkuError, ErrorDetails>;
121
92
  schemas: Map<string, any>;
122
93
  middleware: Record<string, CorePikkuMiddleware[]>;
94
+ channelMiddleware: Record<string, CorePikkuChannelMiddleware[]>;
123
95
  permissions: Record<string, CorePermissionGroup | CorePikkuPermission[]>;
124
96
  };
97
+ models: {
98
+ config: {
99
+ models?: Record<string, string | {
100
+ model: string;
101
+ temperature?: number;
102
+ maxSteps?: number;
103
+ }>;
104
+ agentDefaults?: {
105
+ temperature?: number;
106
+ maxSteps?: number;
107
+ };
108
+ agentOverrides?: Record<string, {
109
+ model?: string;
110
+ temperature?: number;
111
+ maxSteps?: number;
112
+ }>;
113
+ } | null;
114
+ };
125
115
  package: {
126
116
  /** Service factory functions for external packages */
127
117
  factories: {
@@ -131,5 +121,7 @@ export interface PikkuPackageState {
131
121
  } | null;
132
122
  /** Cached singleton services for this package */
133
123
  singletonServices: CoreSingletonServices | null;
124
+ /** Absolute path to this package's .pikku directory */
125
+ metaDir: string | null;
134
126
  };
135
127
  }
package/dist/utils.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { Logger } from './services/logger.js';
2
- import { CoreSingletonServices } from './types/core.types.js';
3
- export declare const closeWireServices: (logger: Logger, wireServices: Record<string, any>) => Promise<void>;
2
+ import { CoreSingletonServices, WireServices } from './types/core.types.js';
3
+ export declare const closeWireServices: (logger: Logger, wireServices: WireServices) => Promise<void>;
4
4
  export declare const createWeakUID: () => string;
5
5
  export declare const isSerializable: (data: any) => boolean;
6
+ export declare const getTagGroups: <T>(tagGroups: Record<string, T>, tag: string) => T[];
6
7
  export declare const freezeDedupe: <T>(arr?: readonly T[] | T[] | undefined) => readonly T[];
7
8
  /**
8
9
  * Stop all singleton services, including external package services.
package/dist/utils.js CHANGED
@@ -1,6 +1,3 @@
1
- // TODO: WireServices probably needs it's own type
2
- // but is an issue for the future and will be tackled
3
- // with dependency injection
4
1
  export const closeWireServices = async (logger, wireServices) => {
5
2
  await Promise.all(Object.values(wireServices).map(async (service) => {
6
3
  if (service?.close) {
@@ -28,6 +25,21 @@ export const isSerializable = (data) => {
28
25
  data instanceof Float32Array ||
29
26
  data instanceof Float64Array);
30
27
  };
28
+ export const getTagGroups = (tagGroups, tag) => {
29
+ const results = [];
30
+ const exact = tagGroups[tag];
31
+ if (exact)
32
+ results.push(exact);
33
+ let colonIdx = tag.lastIndexOf(':');
34
+ while (colonIdx !== -1) {
35
+ const parent = tag.slice(0, colonIdx);
36
+ const group = tagGroups[parent];
37
+ if (group)
38
+ results.push(group);
39
+ colonIdx = parent.lastIndexOf(':');
40
+ }
41
+ return results;
42
+ };
31
43
  const EMPTY_ARRAY = Object.freeze([]);
32
44
  export const freezeDedupe = (arr) => {
33
45
  if (!arr || arr.length === 0)