@pikku/core 0.12.0 → 0.12.2

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 (290) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/errors/errors.d.ts +6 -0
  3. package/dist/errors/errors.js +10 -0
  4. package/dist/errors/index.d.ts +1 -0
  5. package/dist/errors/index.js +1 -0
  6. package/dist/function/function-runner.d.ts +3 -3
  7. package/dist/function/function-runner.js +66 -44
  8. package/dist/function/functions.types.d.ts +1 -0
  9. package/dist/handle-error.d.ts +2 -2
  10. package/dist/handle-error.js +2 -2
  11. package/dist/index.d.ts +5 -3
  12. package/dist/index.js +2 -1
  13. package/dist/internal.d.ts +3 -0
  14. package/dist/internal.js +2 -0
  15. package/dist/middleware/auth-bearer.d.ts +1 -1
  16. package/dist/middleware/auth-bearer.js +1 -1
  17. package/dist/middleware/auth-cookie.d.ts +2 -2
  18. package/dist/middleware/auth-cookie.js +1 -1
  19. package/dist/middleware/cors.d.ts +2 -2
  20. package/dist/middleware/cors.js +45 -37
  21. package/dist/middleware-runner.d.ts +1 -1
  22. package/dist/middleware-runner.js +1 -0
  23. package/dist/permissions.d.ts +2 -2
  24. package/dist/permissions.js +1 -0
  25. package/dist/pikku-state.d.ts +9 -8
  26. package/dist/pikku-state.js +34 -17
  27. package/dist/schema.d.ts +4 -4
  28. package/dist/schema.js +9 -5
  29. package/dist/services/ai-agent-runner-service.d.ts +22 -3
  30. package/dist/services/ai-run-state-service.d.ts +1 -1
  31. package/dist/services/ai-storage-service.d.ts +1 -1
  32. package/dist/services/content-service.d.ts +6 -0
  33. package/dist/services/gateway-service.d.ts +19 -0
  34. package/dist/services/gopass-secrets.d.ts +1 -1
  35. package/dist/services/gopass-secrets.js +3 -0
  36. package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
  37. package/dist/services/in-memory-ai-run-state-service.js +44 -0
  38. package/dist/services/in-memory-trigger-service.d.ts +0 -1
  39. package/dist/services/in-memory-trigger-service.js +6 -8
  40. package/dist/services/index.d.ts +5 -2
  41. package/dist/services/index.js +2 -0
  42. package/dist/services/local-content.d.ts +2 -1
  43. package/dist/services/local-content.js +6 -1
  44. package/dist/services/local-gateway-service.d.ts +22 -0
  45. package/dist/services/local-gateway-service.js +51 -0
  46. package/dist/services/local-secrets.d.ts +2 -2
  47. package/dist/services/local-variables.d.ts +1 -1
  48. package/dist/services/logger-console.d.ts +2 -1
  49. package/dist/services/scheduler-service.d.ts +0 -12
  50. package/dist/services/scheduler-service.js +0 -6
  51. package/dist/services/scoped-secret-service.d.ts +1 -1
  52. package/dist/services/trigger-service.d.ts +0 -7
  53. package/dist/services/user-session-service.d.ts +3 -3
  54. package/dist/services/workflow-service.d.ts +2 -3
  55. package/dist/types/core.types.d.ts +27 -19
  56. package/dist/types/state.types.d.ts +22 -15
  57. package/dist/utils.d.ts +5 -5
  58. package/dist/utils.js +12 -9
  59. package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
  60. package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +168 -0
  61. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
  62. package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
  63. package/dist/wirings/ai-agent/ai-agent-memory.js +13 -2
  64. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +4 -5
  65. package/dist/wirings/ai-agent/ai-agent-prepare.js +80 -31
  66. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +1 -1
  67. package/dist/wirings/ai-agent/ai-agent-runner.js +107 -8
  68. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +2 -1
  69. package/dist/wirings/ai-agent/ai-agent-stream.js +263 -89
  70. package/dist/wirings/ai-agent/ai-agent.types.d.ts +96 -4
  71. package/dist/wirings/ai-agent/index.d.ts +3 -1
  72. package/dist/wirings/ai-agent/index.js +2 -0
  73. package/dist/wirings/channel/channel-common.d.ts +2 -2
  74. package/dist/wirings/channel/channel-handler.d.ts +7 -4
  75. package/dist/wirings/channel/channel-handler.js +15 -5
  76. package/dist/wirings/channel/channel-middleware-runner.js +1 -0
  77. package/dist/wirings/channel/channel-runner.d.ts +5 -5
  78. package/dist/wirings/channel/channel-runner.js +3 -2
  79. package/dist/wirings/channel/channel-store.d.ts +1 -1
  80. package/dist/wirings/channel/channel.types.d.ts +10 -6
  81. package/dist/wirings/channel/index.d.ts +1 -1
  82. package/dist/wirings/channel/local/local-channel-handler.d.ts +7 -0
  83. package/dist/wirings/channel/local/local-channel-handler.js +17 -0
  84. package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
  85. package/dist/wirings/channel/local/local-channel-runner.js +18 -4
  86. package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
  87. package/dist/wirings/channel/log-channels.d.ts +1 -1
  88. package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +2 -1
  89. package/dist/wirings/channel/pikku-abstract-channel-handler.js +1 -0
  90. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
  91. package/dist/wirings/channel/serverless/serverless-channel-runner.js +26 -20
  92. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
  93. package/dist/wirings/cli/cli-runner.d.ts +2 -2
  94. package/dist/wirings/cli/cli-runner.js +3 -0
  95. package/dist/wirings/cli/cli.types.d.ts +3 -3
  96. package/dist/wirings/cli/command-parser.d.ts +1 -1
  97. package/dist/wirings/gateway/gateway-runner.d.ts +24 -0
  98. package/dist/wirings/gateway/gateway-runner.js +325 -0
  99. package/dist/wirings/gateway/gateway.types.d.ts +127 -0
  100. package/dist/wirings/gateway/index.d.ts +2 -0
  101. package/dist/wirings/gateway/index.js +1 -0
  102. package/dist/wirings/http/http-runner.d.ts +9 -9
  103. package/dist/wirings/http/http-runner.js +36 -14
  104. package/dist/wirings/http/http.types.d.ts +2 -6
  105. package/dist/wirings/http/log-http-routes.d.ts +1 -1
  106. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
  107. package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
  108. package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
  109. package/dist/wirings/http/routers/http-router.d.ts +1 -1
  110. package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
  111. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
  112. package/dist/wirings/mcp/mcp-runner.d.ts +0 -3
  113. package/dist/wirings/mcp/mcp-runner.js +4 -2
  114. package/dist/wirings/mcp/mcp.types.d.ts +2 -2
  115. package/dist/wirings/oauth2/oauth2-client.d.ts +3 -3
  116. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +1 -1
  117. package/dist/wirings/queue/index.d.ts +1 -1
  118. package/dist/wirings/queue/index.js +1 -1
  119. package/dist/wirings/queue/queue-runner.d.ts +1 -12
  120. package/dist/wirings/queue/queue-runner.js +4 -12
  121. package/dist/wirings/queue/queue.types.d.ts +3 -9
  122. package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
  123. package/dist/wirings/queue/register-queue-helper.js +1 -1
  124. package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
  125. package/dist/wirings/rpc/index.d.ts +2 -0
  126. package/dist/wirings/rpc/index.js +1 -0
  127. package/dist/wirings/rpc/rpc-runner.d.ts +36 -14
  128. package/dist/wirings/rpc/rpc-runner.js +56 -28
  129. package/dist/wirings/rpc/rpc-types.d.ts +14 -2
  130. package/dist/wirings/rpc/wire-addon.d.ts +10 -0
  131. package/dist/wirings/rpc/wire-addon.js +9 -0
  132. package/dist/wirings/scheduler/index.d.ts +1 -1
  133. package/dist/wirings/scheduler/index.js +1 -1
  134. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
  135. package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -10
  136. package/dist/wirings/scheduler/scheduler-runner.js +4 -25
  137. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
  138. package/dist/wirings/trigger/pikku-trigger-service.d.ts +2 -6
  139. package/dist/wirings/trigger/pikku-trigger-service.js +11 -16
  140. package/dist/wirings/trigger/trigger-runner.d.ts +1 -5
  141. package/dist/wirings/trigger/trigger-runner.js +4 -3
  142. package/dist/wirings/workflow/pikku-workflow-service.d.ts +2 -6
  143. package/dist/wirings/workflow/pikku-workflow-service.js +20 -29
  144. package/dist/wirings/workflow/workflow.types.d.ts +2 -2
  145. package/package.json +4 -2
  146. package/src/crypto-utils.test.ts +116 -0
  147. package/src/errors/error.test.ts +143 -2
  148. package/src/errors/errors.ts +10 -0
  149. package/src/errors/index.ts +1 -0
  150. package/src/function/function-runner.test.ts +2 -2
  151. package/src/function/function-runner.ts +72 -49
  152. package/src/function/functions.types.ts +1 -0
  153. package/src/handle-error.test.ts +361 -0
  154. package/src/handle-error.ts +4 -4
  155. package/src/index.ts +3 -10
  156. package/src/internal.ts +6 -0
  157. package/src/middleware/auth-apikey.test.ts +1 -1
  158. package/src/middleware/auth-bearer.test.ts +1 -1
  159. package/src/middleware/auth-bearer.ts +2 -5
  160. package/src/middleware/auth-cookie.test.ts +1 -1
  161. package/src/middleware/auth-cookie.ts +3 -5
  162. package/src/middleware/cors.test.ts +424 -0
  163. package/src/middleware/cors.ts +14 -6
  164. package/src/middleware/remote-auth.test.ts +488 -0
  165. package/src/middleware-runner.test.ts +1 -1
  166. package/src/middleware-runner.ts +2 -1
  167. package/src/permissions.test.ts +2 -2
  168. package/src/permissions.ts +3 -2
  169. package/src/pikku-state.test.ts +224 -0
  170. package/src/pikku-state.ts +45 -28
  171. package/src/schema.test.ts +198 -6
  172. package/src/schema.ts +11 -7
  173. package/src/services/ai-agent-runner-service.ts +15 -3
  174. package/src/services/ai-run-state-service.ts +1 -1
  175. package/src/services/ai-storage-service.ts +1 -1
  176. package/src/services/content-service.ts +7 -0
  177. package/src/services/gateway-service.ts +20 -0
  178. package/src/services/gopass-secrets.ts +4 -1
  179. package/src/services/in-memory-ai-run-state-service.ts +73 -0
  180. package/src/services/in-memory-trigger-service.ts +6 -10
  181. package/src/services/in-memory-workflow-service.test.ts +351 -0
  182. package/src/services/index.ts +4 -1
  183. package/src/services/local-content.ts +9 -3
  184. package/src/services/local-gateway-service.ts +62 -0
  185. package/src/services/local-secrets.test.ts +80 -0
  186. package/src/services/local-secrets.ts +2 -2
  187. package/src/services/local-variables.test.ts +61 -0
  188. package/src/services/local-variables.ts +1 -1
  189. package/src/services/logger-console.test.ts +118 -0
  190. package/src/services/logger-console.ts +2 -1
  191. package/src/services/scheduler-service.ts +0 -18
  192. package/src/services/scoped-secret-service.test.ts +74 -0
  193. package/src/services/scoped-secret-service.ts +1 -1
  194. package/src/services/trigger-service.ts +0 -21
  195. package/src/services/typed-secret-service.test.ts +93 -0
  196. package/src/services/typed-variables-service.test.ts +73 -0
  197. package/src/services/user-session-service.test.ts +113 -0
  198. package/src/services/user-session-service.ts +3 -3
  199. package/src/services/workflow-service.ts +2 -12
  200. package/src/time-utils.test.ts +1 -1
  201. package/src/types/core.types.ts +28 -19
  202. package/src/types/state.types.ts +32 -15
  203. package/src/utils.test.ts +350 -0
  204. package/src/utils.ts +14 -13
  205. package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
  206. package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +238 -0
  207. package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
  208. package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
  209. package/src/wirings/ai-agent/ai-agent-memory.ts +10 -1
  210. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
  211. package/src/wirings/ai-agent/ai-agent-prepare.ts +98 -46
  212. package/src/wirings/ai-agent/ai-agent-registry.ts +1 -1
  213. package/src/wirings/ai-agent/ai-agent-runner.test.ts +245 -3
  214. package/src/wirings/ai-agent/ai-agent-runner.ts +121 -7
  215. package/src/wirings/ai-agent/ai-agent-stream.test.ts +430 -24
  216. package/src/wirings/ai-agent/ai-agent-stream.ts +390 -104
  217. package/src/wirings/ai-agent/ai-agent.types.ts +91 -4
  218. package/src/wirings/ai-agent/index.ts +13 -0
  219. package/src/wirings/channel/channel-common.ts +2 -2
  220. package/src/wirings/channel/channel-handler.ts +43 -11
  221. package/src/wirings/channel/channel-middleware-runner.ts +1 -0
  222. package/src/wirings/channel/channel-runner.ts +6 -6
  223. package/src/wirings/channel/channel-store.ts +1 -1
  224. package/src/wirings/channel/channel.types.ts +15 -8
  225. package/src/wirings/channel/index.ts +1 -0
  226. package/src/wirings/channel/local/local-channel-handler.ts +26 -0
  227. package/src/wirings/channel/local/local-channel-runner.test.ts +19 -12
  228. package/src/wirings/channel/local/local-channel-runner.ts +33 -14
  229. package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
  230. package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
  231. package/src/wirings/channel/log-channels.ts +1 -1
  232. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +2 -0
  233. package/src/wirings/channel/pikku-abstract-channel-handler.ts +8 -1
  234. package/src/wirings/channel/serverless/serverless-channel-runner.ts +38 -33
  235. package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
  236. package/src/wirings/cli/cli-runner.test.ts +1 -1
  237. package/src/wirings/cli/cli-runner.ts +14 -4
  238. package/src/wirings/cli/cli.types.ts +3 -3
  239. package/src/wirings/cli/command-parser.test.ts +1 -1
  240. package/src/wirings/cli/command-parser.ts +1 -1
  241. package/src/wirings/gateway/gateway-runner.test.ts +474 -0
  242. package/src/wirings/gateway/gateway-runner.ts +411 -0
  243. package/src/wirings/gateway/gateway.types.ts +149 -0
  244. package/src/wirings/gateway/index.ts +13 -0
  245. package/src/wirings/http/http-routes.test.ts +1 -1
  246. package/src/wirings/http/http-runner.test.ts +9 -17
  247. package/src/wirings/http/http-runner.ts +46 -27
  248. package/src/wirings/http/http.types.ts +1 -14
  249. package/src/wirings/http/log-http-routes.ts +1 -1
  250. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  251. package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
  252. package/src/wirings/http/routers/http-router.ts +1 -1
  253. package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
  254. package/src/wirings/http/routers/path-to-regex.ts +4 -3
  255. package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
  256. package/src/wirings/mcp/mcp-runner.ts +9 -15
  257. package/src/wirings/mcp/mcp.types.ts +2 -2
  258. package/src/wirings/oauth2/oauth2-client.ts +3 -3
  259. package/src/wirings/oauth2/wire-oauth2-credential.ts +1 -1
  260. package/src/wirings/queue/index.ts +0 -1
  261. package/src/wirings/queue/queue-runner.test.ts +52 -25
  262. package/src/wirings/queue/queue-runner.ts +8 -30
  263. package/src/wirings/queue/queue.types.ts +3 -13
  264. package/src/wirings/queue/register-queue-helper.ts +3 -5
  265. package/src/wirings/queue/validate-worker-config.test.ts +108 -0
  266. package/src/wirings/queue/validate-worker-config.ts +4 -1
  267. package/src/wirings/rpc/index.ts +2 -0
  268. package/src/wirings/rpc/rpc-runner.ts +92 -49
  269. package/src/wirings/rpc/rpc-types.ts +17 -2
  270. package/src/wirings/rpc/wire-addon.ts +20 -0
  271. package/src/wirings/scheduler/index.ts +0 -1
  272. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  273. package/src/wirings/scheduler/scheduler-runner.test.ts +49 -60
  274. package/src/wirings/scheduler/scheduler-runner.ts +9 -56
  275. package/src/wirings/scheduler/scheduler.types.ts +2 -2
  276. package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
  277. package/src/wirings/trigger/pikku-trigger-service.ts +17 -39
  278. package/src/wirings/trigger/trigger-runner.test.ts +79 -0
  279. package/src/wirings/trigger/trigger-runner.ts +8 -11
  280. package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
  281. package/src/wirings/workflow/graph/graph-runner.test.ts +14 -22
  282. package/src/wirings/workflow/graph/template.test.ts +49 -0
  283. package/src/wirings/workflow/pikku-workflow-service.test.ts +15 -27
  284. package/src/wirings/workflow/pikku-workflow-service.ts +29 -45
  285. package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
  286. package/src/wirings/workflow/workflow.types.ts +2 -2
  287. package/tsconfig.tsbuildinfo +1 -1
  288. package/src/wirings/workflow/workflow-utils.ts +0 -0
  289. /package/dist/{wirings/workflow/workflow-utils.d.ts → services/gateway-service.js} +0 -0
  290. /package/dist/wirings/{workflow/workflow-utils.js → gateway/gateway.types.js} +0 -0
@@ -0,0 +1,113 @@
1
+ import { describe, test } from 'node:test'
2
+ import assert from 'node:assert'
3
+ import {
4
+ PikkuSessionService,
5
+ createMiddlewareSessionWireProps,
6
+ createFunctionSessionWireProps,
7
+ } from './user-session-service.js'
8
+
9
+ describe('PikkuSessionService', () => {
10
+ test('should set and get session', () => {
11
+ const service = new PikkuSessionService()
12
+ service.setInitial({ userId: 'user-1' })
13
+ const session = service.get()
14
+ assert.deepStrictEqual(session, { userId: 'user-1' })
15
+ })
16
+
17
+ test('should return undefined when no session set', () => {
18
+ const service = new PikkuSessionService()
19
+ assert.strictEqual(service.get(), undefined)
20
+ })
21
+
22
+ test('should mark sessionChanged when set is called', () => {
23
+ const service = new PikkuSessionService()
24
+ assert.strictEqual(service.sessionChanged, false)
25
+ service.set({ userId: 'user-1' })
26
+ assert.strictEqual(service.sessionChanged, true)
27
+ })
28
+
29
+ test('should clear session', () => {
30
+ const service = new PikkuSessionService()
31
+ service.setInitial({ userId: 'user-1' })
32
+ service.clear()
33
+ assert.strictEqual(service.get(), undefined)
34
+ assert.strictEqual(service.sessionChanged, true)
35
+ })
36
+
37
+ test('should freeze initial session', () => {
38
+ const service = new PikkuSessionService()
39
+ service.setInitial({ userId: 'user-1' })
40
+ const frozen = service.freezeInitial()
41
+ assert.deepStrictEqual(frozen, { userId: 'user-1' })
42
+ })
43
+
44
+ test('should only freeze initial once', () => {
45
+ const service = new PikkuSessionService()
46
+ service.setInitial({ userId: 'user-1' })
47
+ service.freezeInitial()
48
+ service.set({ userId: 'user-2' })
49
+ const frozen2 = service.freezeInitial()
50
+ assert.deepStrictEqual(frozen2, { userId: 'user-1' })
51
+ })
52
+
53
+ test('should throw when channelStore provided without channelId', () => {
54
+ assert.throws(() => new PikkuSessionService({} as any), {
55
+ message: 'Channel ID is required when using channel store',
56
+ })
57
+ })
58
+
59
+ test('should use channelStore when provided', async () => {
60
+ let storedSession: any
61
+ const store = {
62
+ setUserSession: (id: string, session: any) => {
63
+ storedSession = session
64
+ },
65
+ getChannelAndSession: (id: string) => ({ session: { userId: 'stored' } }),
66
+ }
67
+ const service = new PikkuSessionService(store as any, 'ch-1')
68
+ service.set({ userId: 'new' })
69
+ assert.deepStrictEqual(storedSession, { userId: 'new' })
70
+
71
+ const session = service.get()
72
+ assert.deepStrictEqual(session, { userId: 'stored' })
73
+ })
74
+ })
75
+
76
+ describe('createMiddlewareSessionWireProps', () => {
77
+ test('should return session wire props', () => {
78
+ const service = new PikkuSessionService()
79
+ service.setInitial({ userId: 'user-1' })
80
+ const props = createMiddlewareSessionWireProps(service)
81
+ assert.ok('session' in props)
82
+ assert.ok('setSession' in props)
83
+ assert.ok('getSession' in props)
84
+ assert.ok('hasSessionChanged' in props)
85
+ })
86
+
87
+ test('setSession should call setInitial', () => {
88
+ const service = new PikkuSessionService()
89
+ const props = createMiddlewareSessionWireProps(service)
90
+ props.setSession({ userId: 'user-2' })
91
+ assert.deepStrictEqual(service.get(), { userId: 'user-2' })
92
+ })
93
+ })
94
+
95
+ describe('createFunctionSessionWireProps', () => {
96
+ test('should return function session wire props', () => {
97
+ const service = new PikkuSessionService()
98
+ service.setInitial({ userId: 'user-1' })
99
+ const props = createFunctionSessionWireProps(service)
100
+ assert.ok('session' in props)
101
+ assert.ok('setSession' in props)
102
+ assert.ok('clearSession' in props)
103
+ assert.ok('getSession' in props)
104
+ assert.ok('hasSessionChanged' in props)
105
+ })
106
+
107
+ test('session should be frozen initial', () => {
108
+ const service = new PikkuSessionService()
109
+ service.setInitial({ userId: 'user-1' })
110
+ const props = createFunctionSessionWireProps(service)
111
+ assert.deepStrictEqual(props.session, { userId: 'user-1' })
112
+ })
113
+ })
@@ -1,5 +1,5 @@
1
- import { ChannelStore } from '../wirings/channel/channel-store.js'
2
- import { CoreUserSession } from '../types/core.types.js'
1
+ import type { ChannelStore } from '../wirings/channel/channel-store.js'
2
+ import type { CoreUserSession } from '../types/core.types.js'
3
3
 
4
4
  export interface SessionService<UserSession extends CoreUserSession> {
5
5
  sessionChanged: boolean
@@ -66,7 +66,7 @@ export function createMiddlewareSessionWireProps<
66
66
  UserSession extends CoreUserSession,
67
67
  >(session: SessionService<UserSession>) {
68
68
  return {
69
- session: session.get(),
69
+ session: session.get() as UserSession | undefined,
70
70
  setSession: (s: UserSession) => session.setInitial(s),
71
71
  getSession: () => session.get(),
72
72
  hasSessionChanged: () => session.sessionChanged,
@@ -1,10 +1,5 @@
1
- import {
2
- SerializedError,
3
- CoreSingletonServices,
4
- CreateWireServices,
5
- CoreConfig,
6
- } from '../types/core.types.js'
7
- import {
1
+ import type { SerializedError } from '../types/core.types.js'
2
+ import type {
8
3
  WorkflowRun,
9
4
  WorkflowRunWire,
10
5
  StepState,
@@ -37,11 +32,6 @@ export interface WorkflowService {
37
32
 
38
33
  // Orchestration operations
39
34
  resumeWorkflow(runId: string): Promise<void>
40
- setServices(
41
- singletonServices: CoreSingletonServices,
42
- createWireServices: CreateWireServices | undefined,
43
- config: CoreConfig
44
- ): void
45
35
  startWorkflow<I>(
46
36
  name: string,
47
37
  input: I,
@@ -1,10 +1,10 @@
1
1
  import { describe, test } from 'node:test'
2
2
  import assert from 'node:assert/strict'
3
3
 
4
+ import type { RelativeTimeInput } from './time-utils'
4
5
  import {
5
6
  getRelativeTimeOffset,
6
7
  getRelativeTimeOffsetFromNow,
7
- RelativeTimeInput,
8
8
  } from './time-utils'
9
9
 
10
10
  const approxEqual = (a: number, b: number, delta: number = 10): boolean =>
@@ -1,33 +1,35 @@
1
1
  import type { Logger, LogLevel } from '../services/logger.js'
2
- import { VariablesService } from '../services/variables-service.js'
3
- import { SecretService } from '../services/secret-service.js'
4
- import { SchemaService } from '../services/schema-service.js'
5
- import { JWTService } from '../services/jwt-service.js'
6
- import { PikkuHTTP } from '../wirings/http/http.types.js'
7
- import {
2
+ import type { VariablesService } from '../services/variables-service.js'
3
+ import type { SecretService } from '../services/secret-service.js'
4
+ import type { SchemaService } from '../services/schema-service.js'
5
+ import type { JWTService } from '../services/jwt-service.js'
6
+ import type { PikkuHTTP } from '../wirings/http/http.types.js'
7
+ import type {
8
8
  PikkuChannel,
9
9
  CorePikkuChannelMiddleware,
10
10
  CorePikkuChannelMiddlewareFactory,
11
11
  } from '../wirings/channel/channel.types.js'
12
- import { PikkuRPC } from '../wirings/rpc/rpc-types.js'
13
- import { PikkuMCP } from '../wirings/mcp/mcp.types.js'
14
- import { PikkuScheduledTask } from '../wirings/scheduler/scheduler.types.js'
15
- import { PikkuQueue, QueueService } from '../wirings/queue/queue.types.js'
16
- import { PikkuCLI } from '../wirings/cli/cli.types.js'
17
- import {
12
+ import type { PikkuRPC } from '../wirings/rpc/rpc-types.js'
13
+ import type { PikkuMCP } from '../wirings/mcp/mcp.types.js'
14
+ import type { PikkuScheduledTask } from '../wirings/scheduler/scheduler.types.js'
15
+ import type { PikkuQueue, QueueService } from '../wirings/queue/queue.types.js'
16
+ import type { PikkuCLI } from '../wirings/cli/cli.types.js'
17
+ import type {
18
18
  PikkuWorkflowWire,
19
19
  WorkflowService,
20
20
  WorkflowServiceConfig,
21
21
  WorkflowStepWire,
22
22
  } from '../wirings/workflow/workflow.types.js'
23
23
  import type { PikkuGraphWire } from '../wirings/workflow/graph/workflow-graph.types.js'
24
- import { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
25
- import { SchedulerService } from '../services/scheduler-service.js'
26
- import { DeploymentService } from '../services/deployment-service.js'
27
- import { AIStorageService } from '../services/ai-storage-service.js'
28
-
29
- import { AIAgentRunnerService } from '../services/ai-agent-runner-service.js'
30
- import { AIRunStateService } from '../services/ai-run-state-service.js'
24
+ import type { PikkuTrigger } from '../wirings/trigger/trigger.types.js'
25
+ import type { PikkuGateway } from '../wirings/gateway/gateway.types.js'
26
+ import type { SchedulerService } from '../services/scheduler-service.js'
27
+ import type { DeploymentService } from '../services/deployment-service.js'
28
+ import type { AIStorageService } from '../services/ai-storage-service.js'
29
+
30
+ import type { ContentService } from '../services/content-service.js'
31
+ import type { AIAgentRunnerService } from '../services/ai-agent-runner-service.js'
32
+ import type { AIRunStateService } from '../services/ai-run-state-service.js'
31
33
  import type { PikkuAIMiddlewareHooks } from '../wirings/ai-agent/ai-agent.types.js'
32
34
 
33
35
  export type PikkuWiringTypes =
@@ -41,6 +43,7 @@ export type PikkuWiringTypes =
41
43
  | 'cli'
42
44
  | 'workflow'
43
45
  | 'agent'
46
+ | 'gateway'
44
47
 
45
48
  export interface FunctionServicesMeta {
46
49
  optimized: boolean
@@ -101,10 +104,13 @@ export type FunctionRuntimeMeta = {
101
104
  expose?: boolean
102
105
  remote?: boolean
103
106
  mcp?: boolean
107
+ readonly?: boolean
104
108
  sessionless?: boolean
105
109
  version?: number
106
110
  requiresApproval?: boolean
107
111
  contractHash?: string
112
+ inputHash?: string
113
+ outputHash?: string
108
114
  }
109
115
 
110
116
  export type FunctionMeta = FunctionRuntimeMeta &
@@ -208,6 +214,8 @@ export interface CoreSingletonServices<Config extends CoreConfig = CoreConfig> {
208
214
  /** AI agent storage service (threads, messages, working memory) */
209
215
  aiStorage?: AIStorageService
210
216
 
217
+ /** Content service for file storage and retrieval */
218
+ content?: ContentService
211
219
  /** AI agent runner service (model calls + tool loop) */
212
220
  aiAgentRunner?: AIAgentRunnerService
213
221
  /** AI run state service (run lifecycle + approval persistence) */
@@ -243,6 +251,7 @@ export type PikkuWire<
243
251
  workflowStep: WorkflowStepWire
244
252
  graph: PikkuGraphWire
245
253
  trigger: PikkuTrigger<TriggerOutput>
254
+ gateway: PikkuGateway
246
255
  session: HasInitialSession extends true
247
256
  ? UserSession
248
257
  : UserSession | undefined
@@ -1,44 +1,54 @@
1
- import { PikkuError, ErrorDetails } from '../errors/error-handler.js'
2
- import {
1
+ import type { PikkuError, ErrorDetails } from '../errors/error-handler.js'
2
+ import type {
3
3
  CorePikkuFunctionConfig,
4
4
  CorePermissionGroup,
5
5
  CorePikkuPermission,
6
6
  } from '../function/functions.types.js'
7
- import { CorePikkuTriggerFunctionConfig } from '../wirings/trigger/trigger.types.js'
8
- import { CoreChannel, ChannelsMeta } from '../wirings/channel/channel.types.js'
9
- import { CLIMeta, CLIProgramState } from '../wirings/cli/cli.types.js'
10
- import {
7
+ import type { CorePikkuTriggerFunctionConfig } from '../wirings/trigger/trigger.types.js'
8
+ import type {
9
+ CoreChannel,
10
+ ChannelsMeta,
11
+ } from '../wirings/channel/channel.types.js'
12
+ import type { CLIMeta, CLIProgramState } from '../wirings/cli/cli.types.js'
13
+ import type {
11
14
  HTTPMethod,
12
15
  CoreHTTPFunctionWiring,
13
16
  HTTPWiringsMeta,
14
17
  } from '../wirings/http/http.types.js'
15
- import {
18
+ import type {
16
19
  CoreMCPResource,
17
20
  MCPResourceMeta,
18
21
  MCPToolMeta,
19
22
  CoreMCPPrompt,
20
23
  MCPPromptMeta,
21
24
  } from '../wirings/mcp/mcp.types.js'
22
- import { CoreAIAgent, AIAgentMeta } from '../wirings/ai-agent/ai-agent.types.js'
23
- import {
25
+ import type {
26
+ CoreAIAgent,
27
+ AIAgentMeta,
28
+ } from '../wirings/ai-agent/ai-agent.types.js'
29
+ import type {
30
+ CoreGateway,
31
+ GatewaysMeta,
32
+ } from '../wirings/gateway/gateway.types.js'
33
+ import type {
24
34
  CoreQueueWorker,
25
35
  QueueWorkersMeta,
26
36
  } from '../wirings/queue/queue.types.js'
27
- import {
37
+ import type {
28
38
  CoreScheduledTask,
29
39
  ScheduledTasksMeta,
30
40
  } from '../wirings/scheduler/scheduler.types.js'
31
- import {
41
+ import type {
32
42
  CoreWorkflow,
33
43
  WorkflowsRuntimeMeta,
34
44
  } from '../wirings/workflow/workflow.types.js'
35
- import {
45
+ import type {
36
46
  CoreTrigger,
37
47
  CoreTriggerSource,
38
48
  TriggerMeta,
39
49
  TriggerSourceMeta,
40
50
  } from '../wirings/trigger/trigger.types.js'
41
- import {
51
+ import type {
42
52
  FunctionsMeta,
43
53
  CorePikkuMiddleware,
44
54
  CorePikkuMiddlewareGroup,
@@ -70,7 +80,10 @@ export interface PikkuPackageState {
70
80
  }
71
81
  >
72
82
  /** Maps namespace aliases to package config (e.g., 'ext' -> { package: '@pikku/...', rpcEndpoint: '...' }) */
73
- externalPackages: Map<string, { package: string; rpcEndpoint?: string }>
83
+ addons: Map<
84
+ string,
85
+ { package: string; rpcEndpoint?: string; auth?: boolean; tags?: string[] }
86
+ >
74
87
  }
75
88
  http: {
76
89
  middleware: Map<string, CorePikkuMiddleware<any, any>[]>
@@ -112,6 +125,10 @@ export interface PikkuPackageState {
112
125
  agents: Map<string, CoreAIAgent>
113
126
  agentsMeta: AIAgentMeta
114
127
  }
128
+ gateway: {
129
+ gateways: Map<string, CoreGateway>
130
+ meta: GatewaysMeta
131
+ }
115
132
  cli: {
116
133
  meta: CLIMeta | Record<string, any> // Backward compatible with old published CLI format
117
134
  programs: Record<string, CLIProgramState>
@@ -148,7 +165,7 @@ export interface PikkuPackageState {
148
165
  } | null
149
166
  }
150
167
  package: {
151
- /** Service factory functions for external packages */
168
+ /** Service factory functions for addon packages */
152
169
  factories: {
153
170
  createConfig?: CreateConfig<CoreConfig>
154
171
  createSingletonServices?: CreateSingletonServices<