@pikku/cli 0.12.54 → 0.12.56

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 (267) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/{index-DYnbceYg.js → index-xN8LW0II.js} +155 -155
  3. package/console-app/index.html +1 -1
  4. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  5. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +3 -3
  6. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  7. package/dist/.pikku/cli/pikku-cli-channel.d.ts +6 -6
  8. package/dist/.pikku/cli/pikku-cli-channel.js +11 -1
  9. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  10. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  12. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.json +14 -0
  14. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  15. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  16. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  17. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +29 -0
  18. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  19. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  20. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  21. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  22. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  23. package/dist/.pikku/function/pikku-function-types.gen.d.ts +8 -31
  24. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  25. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  26. package/dist/.pikku/function/pikku-functions-meta.gen.json +1420 -1384
  27. package/dist/.pikku/function/pikku-functions.gen.js +3 -1
  28. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  29. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  30. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  31. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  32. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  33. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  34. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  35. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  36. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  37. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  38. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  39. package/dist/.pikku/pikku-services.gen.d.ts +4 -2
  40. package/dist/.pikku/pikku-services.gen.js +2 -0
  41. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  42. package/dist/.pikku/pikku-types.gen.js +1 -1
  43. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  44. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  45. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  46. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +0 -248
  47. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  48. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  49. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  50. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +69 -67
  51. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  52. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  53. package/dist/.pikku/schemas/register.gen.js +191 -185
  54. package/dist/.pikku/schemas/schemas/FabricAddonVerifyInput.schema.json +1 -0
  55. package/dist/.pikku/schemas/schemas/FabricAddonVerifyOutput.schema.json +1 -0
  56. package/dist/.pikku/schemas/schemas/PikkuAuthInput.schema.json +1 -0
  57. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  58. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  59. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  60. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  61. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  62. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  63. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  64. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  65. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  66. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  67. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  68. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +9 -3
  69. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  70. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  71. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  72. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  73. package/dist/bin/pikku-bin.mjs +2 -2
  74. package/dist/src/cli.wiring.js +15 -1
  75. package/dist/src/deploy/analyzer/analyzer.d.ts +6 -0
  76. package/dist/src/deploy/analyzer/analyzer.js +5 -4
  77. package/dist/src/deploy/build-pipeline.d.ts +5 -1
  78. package/dist/src/deploy/build-pipeline.js +5 -5
  79. package/dist/src/deploy/bundler/bun-bundler.d.ts +14 -0
  80. package/dist/src/deploy/bundler/bun-bundler.js +121 -0
  81. package/dist/src/deploy/bundler/bundler.d.ts +25 -30
  82. package/dist/src/deploy/bundler/bundler.interface.d.ts +54 -0
  83. package/dist/src/deploy/bundler/bundler.interface.js +11 -0
  84. package/dist/src/deploy/bundler/bundler.js +120 -190
  85. package/dist/src/deploy/bundler/dep-extractor.d.ts +11 -3
  86. package/dist/src/deploy/bundler/dep-extractor.js +12 -6
  87. package/dist/src/deploy/bundler/index.d.ts +5 -2
  88. package/dist/src/deploy/bundler/index.js +4 -2
  89. package/dist/src/deploy/bundler/node-bundler.d.ts +13 -0
  90. package/dist/src/deploy/bundler/node-bundler.js +80 -0
  91. package/dist/src/deploy/provider-adapter.d.ts +11 -0
  92. package/dist/src/deploy/server-entry.js +3 -1
  93. package/dist/src/fabric/fabric-commands.d.ts +109 -72
  94. package/dist/src/fabric/fabric-commands.js +8 -0
  95. package/dist/src/fabric/functions/add.function.d.ts +3 -3
  96. package/dist/src/fabric/functions/addon-verify.function.d.ts +54 -0
  97. package/dist/src/fabric/functions/addon-verify.function.js +153 -0
  98. package/dist/src/fabric/functions/db-schema.function.d.ts +3 -3
  99. package/dist/src/fabric/functions/deploy-list.function.d.ts +3 -3
  100. package/dist/src/fabric/functions/deploy-units.function.d.ts +3 -3
  101. package/dist/src/fabric/functions/deploy.function.d.ts +6 -6
  102. package/dist/src/fabric/functions/domains-add.function.d.ts +3 -3
  103. package/dist/src/fabric/functions/domains-list.function.d.ts +3 -3
  104. package/dist/src/fabric/functions/domains-remove.function.d.ts +3 -3
  105. package/dist/src/fabric/functions/errors.function.d.ts +3 -3
  106. package/dist/src/fabric/functions/init.function.d.ts +3 -3
  107. package/dist/src/fabric/functions/link.function.d.ts +3 -3
  108. package/dist/src/fabric/functions/llm-key.function.d.ts +3 -3
  109. package/dist/src/fabric/functions/llm-key.function.js +1 -1
  110. package/dist/src/fabric/functions/login.function.d.ts +3 -3
  111. package/dist/src/fabric/functions/logs.function.d.ts +3 -3
  112. package/dist/src/fabric/functions/metrics.function.d.ts +3 -3
  113. package/dist/src/fabric/functions/publish.function.d.ts +3 -3
  114. package/dist/src/fabric/functions/publish.function.js +8 -3
  115. package/dist/src/fabric/functions/rollback.function.d.ts +3 -3
  116. package/dist/src/fabric/functions/secrets-list.function.d.ts +3 -3
  117. package/dist/src/fabric/functions/secrets-set.function.d.ts +3 -3
  118. package/dist/src/fabric/functions/smoke.function.d.ts +3 -3
  119. package/dist/src/fabric/functions/status.function.d.ts +3 -3
  120. package/dist/src/fabric/functions/trace.function.d.ts +3 -3
  121. package/dist/src/fabric/functions/validate.function.d.ts +3 -3
  122. package/dist/src/functions/commands/all.d.ts +1 -1
  123. package/dist/src/functions/commands/all.js +19 -2
  124. package/dist/src/functions/commands/binary.d.ts +3 -3
  125. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  126. package/dist/src/functions/commands/bootstrap.js +3 -0
  127. package/dist/src/functions/commands/console.d.ts +3 -3
  128. package/dist/src/functions/commands/db-audit.d.ts +1 -1
  129. package/dist/src/functions/commands/db-generate.d.ts +1 -1
  130. package/dist/src/functions/commands/db-migrate.d.ts +1 -1
  131. package/dist/src/functions/commands/db-reset.d.ts +1 -1
  132. package/dist/src/functions/commands/db-seed.d.ts +1 -1
  133. package/dist/src/functions/commands/deploy-apply.d.ts +3 -3
  134. package/dist/src/functions/commands/deploy-apply.js +32 -1
  135. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  136. package/dist/src/functions/commands/deploy-plan.d.ts +3 -3
  137. package/dist/src/functions/commands/deploy-plan.js +3 -1
  138. package/dist/src/functions/commands/dev.d.ts +3 -3
  139. package/dist/src/functions/commands/dev.js +17 -45
  140. package/dist/src/functions/commands/emails-init.d.ts +1 -1
  141. package/dist/src/functions/commands/enable.d.ts +6 -5
  142. package/dist/src/functions/commands/enable.js +4 -0
  143. package/dist/src/functions/commands/info.d.ts +4 -4
  144. package/dist/src/functions/commands/login.d.ts +7 -7
  145. package/dist/src/functions/commands/meta.d.ts +31 -31
  146. package/dist/src/functions/commands/new-addon.d.ts +3 -3
  147. package/dist/src/functions/commands/new-function.d.ts +3 -3
  148. package/dist/src/functions/commands/new-middleware.d.ts +3 -3
  149. package/dist/src/functions/commands/new-permission.d.ts +3 -3
  150. package/dist/src/functions/commands/new-wiring.d.ts +3 -3
  151. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  152. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  153. package/dist/src/functions/commands/pikku-command-summary.js +6 -1
  154. package/dist/src/functions/commands/skills.d.ts +6 -6
  155. package/dist/src/functions/commands/tests-coverage.d.ts +3 -3
  156. package/dist/src/functions/commands/tests-init.d.ts +3 -3
  157. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  158. package/dist/src/functions/commands/versions-init.d.ts +3 -3
  159. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  160. package/dist/src/functions/commands/watch.d.ts +3 -3
  161. package/dist/src/functions/commands/workspace-validate.d.ts +3 -3
  162. package/dist/src/functions/db/db-codegen.js +14 -0
  163. package/dist/src/functions/db/sqlite/sqlite-runtime-bun.js +10 -0
  164. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  165. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  166. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
  167. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  168. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  169. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  170. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  171. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +7 -1
  172. package/dist/src/functions/wirings/auth/pikku-command-auth.js +14 -2
  173. package/dist/src/functions/wirings/auth/serialize-auth-types.d.ts +10 -0
  174. package/dist/src/functions/wirings/auth/serialize-auth-types.js +15 -0
  175. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  176. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  177. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  178. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  179. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  180. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
  181. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  182. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  183. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  184. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  185. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  186. package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
  187. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
  188. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +3 -3
  189. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +3 -3
  190. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +10 -3
  191. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  192. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +1 -1
  193. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  194. package/dist/src/functions/wirings/functions/serialize-function-types.js +6 -29
  195. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  196. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  197. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  198. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  199. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  200. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  201. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  202. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  203. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  204. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  205. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +2 -2
  206. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  207. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  208. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  209. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  210. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  211. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  212. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  213. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  214. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
  215. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
  216. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  217. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  218. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  219. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  220. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +2 -2
  221. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
  222. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  223. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  224. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  225. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +3 -3
  226. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  227. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  228. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  229. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
  230. package/dist/src/functions/workflows/all.workflow.js +6 -1
  231. package/dist/src/scaffold/rpc-remote.gen.d.ts +3 -3
  232. package/dist/src/scaffold/rpc-remote.gen.js +1 -1
  233. package/dist/src/server/bun-server-runner.d.ts +17 -0
  234. package/dist/src/server/bun-server-runner.js +25 -0
  235. package/dist/src/server/dev-server-runner.interface.d.ts +31 -0
  236. package/dist/src/server/dev-server-runner.interface.js +11 -0
  237. package/dist/src/server/node-server-runner.d.ts +12 -0
  238. package/dist/src/server/node-server-runner.js +30 -0
  239. package/dist/src/services/cli-logger.service.js +7 -1
  240. package/dist/src/services.js +18 -0
  241. package/dist/src/utils/detect-better-auth.d.ts +7 -0
  242. package/dist/src/utils/detect-better-auth.js +29 -0
  243. package/dist/src/utils/parse-cli-filters.d.ts +1 -0
  244. package/dist/src/utils/parse-cli-filters.js +1 -0
  245. package/dist/src/utils/pikku-cli-config.js +1 -1
  246. package/dist/src/utils/serialize-schemas.js +5 -1
  247. package/dist/tsconfig.tsbuildinfo +1 -1
  248. package/package.json +4 -4
  249. package/skills/pikku-addon/SKILL.md +25 -117
  250. package/skills/pikku-addon/references/addon-package-manifest.md +63 -0
  251. package/skills/pikku-cli/SKILL.md +7 -93
  252. package/skills/pikku-cli/references/complete-example.md +82 -0
  253. package/skills/pikku-concepts/SKILL.md +17 -69
  254. package/skills/pikku-concepts/references/concept-mapping.md +37 -13
  255. package/skills/pikku-concepts/references/packages.md +29 -0
  256. package/skills/pikku-http/SKILL.md +14 -105
  257. package/skills/pikku-http/references/http-options.md +57 -0
  258. package/skills/pikku-middleware/SKILL.md +11 -68
  259. package/skills/pikku-middleware/references/middleware-patterns.md +61 -0
  260. package/skills/pikku-realtime/SKILL.md +56 -105
  261. package/skills/pikku-realtime/references/other-routes.md +23 -0
  262. package/skills/pikku-services/SKILL.md +25 -108
  263. package/skills/pikku-services/references/audit-wire-service.md +34 -0
  264. package/skills/pikku-testing/SKILL.md +51 -359
  265. package/skills/pikku-testing/references/cucumber-bdd-testing.md +176 -0
  266. package/skills/pikku-workflow/SKILL.md +93 -259
  267. package/skills/pikku-workflow/references/workflow-reference.md +63 -0
@@ -26,7 +26,7 @@ export declare const FabricPublish: import("../../../.pikku/pikku-types.gen.js")
26
26
  name: string;
27
27
  version: string;
28
28
  publisher: string | null;
29
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
29
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
30
30
  dir?: string | undefined;
31
31
  apiUrl?: string | undefined;
32
32
  }, {
@@ -34,7 +34,7 @@ export declare const FabricPublish: import("../../../.pikku/pikku-types.gen.js")
34
34
  name: string;
35
35
  version: string;
36
36
  publisher: string | null;
37
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
37
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
38
38
  dir?: string | undefined;
39
39
  apiUrl?: string | undefined;
40
40
  }, {
@@ -42,4 +42,4 @@ export declare const FabricPublish: import("../../../.pikku/pikku-types.gen.js")
42
42
  name: string;
43
43
  version: string;
44
44
  publisher: string | null;
45
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
45
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
@@ -29,7 +29,12 @@ export const FabricPublish = pikkuSessionlessFunc({
29
29
  description: 'Publish a package directory to the Fabric community registry.',
30
30
  input: FabricPublishInput,
31
31
  output: FabricPublishOutput,
32
- func: async (_services, { dir, apiUrl: apiUrlOverride }) => {
32
+ func: async (_services, { dir, apiUrl: apiUrlOverride }, { rpc, cli }) => {
33
+ const verification = await rpc.invoke('FabricAddonVerify', { dir });
34
+ await cli?.channel.send(verification);
35
+ if (!verification.ok) {
36
+ throw new Error('Addon verification failed — fix the errors above before publishing.');
37
+ }
33
38
  const ctx = await resolveApiContext({ apiUrlOverride });
34
39
  if (!ctx.token)
35
40
  throw new Error('Not logged in. Run `pikku fabric login` first.');
@@ -64,14 +69,14 @@ export const FabricPublish = pikkuSessionlessFunc({
64
69
  return r.json();
65
70
  };
66
71
  // 1. presigned upload URL (short-lived)
67
- const { uploadUrl, artifactKey } = await post('/registry/packages/publish-url', { packageName: pkg.name, version: pkg.version });
72
+ const { uploadUrl, artifactKey } = await post('/registry/addons/publish-url', { packageName: pkg.name, version: pkg.version });
68
73
  // 2. PUT the artifact to the exact signed URL (no extra headers — the URL
69
74
  // is signed over host only; mismatched headers break the signature).
70
75
  const put = await fetch(uploadUrl, { method: 'PUT', body: artifact });
71
76
  if (!put.ok)
72
77
  throw new Error(`upload failed → ${put.status}: ${await put.text()}`);
73
78
  // 3. finalize — server reads the artifact back, extracts meta, indexes it
74
- const entry = await post('/registry/packages/publish', { artifactKey });
79
+ const entry = await post('/registry/addons/publish', { artifactKey });
75
80
  const publisher = entry.publisher?.name ?? null;
76
81
  console.log(`[fabric] published ${entry.name}@${entry.version} (id=${entry.id})` +
77
82
  (publisher ? ` as ${publisher}` : ''));
@@ -37,7 +37,7 @@ export declare const FabricRollback: import("../../../.pikku/pikku-types.gen.js"
37
37
  }[];
38
38
  deploymentId?: string | undefined;
39
39
  rolledBackToDeploymentId?: string | undefined;
40
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
40
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
41
41
  branch: string;
42
42
  target?: string | undefined;
43
43
  list?: boolean | undefined;
@@ -55,7 +55,7 @@ export declare const FabricRollback: import("../../../.pikku/pikku-types.gen.js"
55
55
  }[];
56
56
  deploymentId?: string | undefined;
57
57
  rolledBackToDeploymentId?: string | undefined;
58
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
58
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
59
59
  branch: string;
60
60
  target?: string | undefined;
61
61
  list?: boolean | undefined;
@@ -73,4 +73,4 @@ export declare const FabricRollback: import("../../../.pikku/pikku-types.gen.js"
73
73
  }[];
74
74
  deploymentId?: string | undefined;
75
75
  rolledBackToDeploymentId?: string | undefined;
76
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
76
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
@@ -11,14 +11,14 @@ export declare const FabricSecretsList: import("../../../.pikku/pikku-types.gen.
11
11
  json?: boolean | undefined;
12
12
  }, {
13
13
  names: string[];
14
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
14
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
15
15
  branch: string;
16
16
  json?: boolean | undefined;
17
17
  }, {
18
18
  names: string[];
19
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
19
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
20
20
  branch: string;
21
21
  json?: boolean | undefined;
22
22
  }, {
23
23
  names: string[];
24
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
24
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
@@ -15,18 +15,18 @@ export declare const FabricSecretsSet: import("../../../.pikku/pikku-types.gen.j
15
15
  force?: boolean | undefined;
16
16
  }, {
17
17
  ok: boolean;
18
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
18
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
19
19
  name: string;
20
20
  branch: string;
21
21
  value?: string | undefined;
22
22
  force?: boolean | undefined;
23
23
  }, {
24
24
  ok: boolean;
25
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
25
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
26
26
  name: string;
27
27
  branch: string;
28
28
  value?: string | undefined;
29
29
  force?: boolean | undefined;
30
30
  }, {
31
31
  ok: boolean;
32
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
32
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
@@ -47,7 +47,7 @@ export declare const FabricSmoke: import("../../../.pikku/pikku-types.gen.js").P
47
47
  }[];
48
48
  failure?: string | undefined;
49
49
  logTail?: string | undefined;
50
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
50
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
51
51
  keepTemp?: boolean | undefined;
52
52
  timeoutSeconds?: number | undefined;
53
53
  startupTimeoutSeconds?: number | undefined;
@@ -68,7 +68,7 @@ export declare const FabricSmoke: import("../../../.pikku/pikku-types.gen.js").P
68
68
  }[];
69
69
  failure?: string | undefined;
70
70
  logTail?: string | undefined;
71
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
71
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
72
72
  keepTemp?: boolean | undefined;
73
73
  timeoutSeconds?: number | undefined;
74
74
  startupTimeoutSeconds?: number | undefined;
@@ -89,5 +89,5 @@ export declare const FabricSmoke: import("../../../.pikku/pikku-types.gen.js").P
89
89
  }[];
90
90
  failure?: string | undefined;
91
91
  logTail?: string | undefined;
92
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
92
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
93
93
  export declare const renderSmoke: (_services: unknown, output: z.infer<typeof FabricSmokeOutput>) => void;
@@ -7,13 +7,13 @@ export declare const FabricStatusOutput: z.ZodObject<{
7
7
  export declare const FabricStatus: import("../../../.pikku/pikku-types.gen.js").PikkuFunctionConfig<Record<string, never>, {
8
8
  projectId: string;
9
9
  status: any;
10
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<Record<string, never>, {
10
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<Record<string, never>, {
11
11
  projectId: string;
12
12
  status: any;
13
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<Record<string, never>, {
13
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<Record<string, never>, {
14
14
  projectId: string;
15
15
  status: any;
16
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
16
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
17
17
  type StageState = {
18
18
  stageBranch: string;
19
19
  gitSha?: string | null;
@@ -13,16 +13,16 @@ export declare const FabricTrace: import("../../../.pikku/pikku-types.gen.js").P
13
13
  json?: boolean | undefined;
14
14
  }, {
15
15
  count: number;
16
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
16
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<{
17
17
  branch: string;
18
18
  traceId: string;
19
19
  json?: boolean | undefined;
20
20
  }, {
21
21
  count: number;
22
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
22
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<{
23
23
  branch: string;
24
24
  traceId: string;
25
25
  json?: boolean | undefined;
26
26
  }, {
27
27
  count: number;
28
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
28
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
@@ -26,7 +26,7 @@ export declare const FabricValidate: import("../../../.pikku/pikku-types.gen.js"
26
26
  path: string;
27
27
  fixHint: string;
28
28
  }[];
29
- }, "session" | "rpc", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<Record<string, never>, {
29
+ }, "rpc" | "session", import("../../../.pikku/pikku-types.gen.js").PikkuFunctionSessionless<Record<string, never>, {
30
30
  ok: boolean;
31
31
  root: string;
32
32
  findings: {
@@ -36,7 +36,7 @@ export declare const FabricValidate: import("../../../.pikku/pikku-types.gen.js"
36
36
  path: string;
37
37
  fixHint: string;
38
38
  }[];
39
- }, "session" | "rpc", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<Record<string, never>, {
39
+ }, "rpc" | "session", import("../../../types/application-types.js").Services> | import("../../../.pikku/pikku-types.gen.js").PikkuFunction<Record<string, never>, {
40
40
  ok: boolean;
41
41
  root: string;
42
42
  findings: {
@@ -46,5 +46,5 @@ export declare const FabricValidate: import("../../../.pikku/pikku-types.gen.js"
46
46
  path: string;
47
47
  fixHint: string;
48
48
  }[];
49
- }, "session" | "rpc", import("../../../types/application-types.js").Services>, undefined, undefined>;
49
+ }, "rpc" | "session", import("../../../types/application-types.js").Services>, undefined, undefined>;
50
50
  export declare const renderValidate: (_s: unknown, { ok, root, findings }: z.infer<typeof FabricValidateOutput>) => void;
@@ -1 +1 @@
1
- export declare const all: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const all: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1,7 +1,24 @@
1
1
  import { pikkuVoidFunc } from '#pikku';
2
2
  export const all = pikkuVoidFunc({
3
3
  remote: true,
4
- func: async ({ workflowService }, _data, { rpc }) => {
5
- await workflowService.runToCompletion('allWorkflow', {}, rpc);
4
+ func: async ({ workflowService, logger }, _data, { rpc }) => {
5
+ // Drive the run directly (the CLI is always inline — no queueService) so we
6
+ // can read back the per-step durations already recorded on each step's
7
+ // state. startWorkflow runs the job to completion before returning in inline
8
+ // mode and re-throws on failure, matching runToCompletion's behaviour.
9
+ const { runId } = await workflowService.startWorkflow('allWorkflow', {}, { type: 'internal' }, rpc, { inline: true });
10
+ // Per-step timing breakdown for debugging slow runs (e.g. which inspector
11
+ // re-runs dominate). Opt-in via PIKKU_TIMING so normal runs stay quiet.
12
+ if (typeof process !== 'undefined' && process.env?.PIKKU_TIMING) {
13
+ const status = await workflowService.getRunStatus(runId);
14
+ const rows = (status?.steps ?? [])
15
+ .filter((s) => typeof s.duration === 'number')
16
+ .sort((a, b) => (b.duration ?? 0) - (a.duration ?? 0));
17
+ const total = rows.reduce((sum, s) => sum + (s.duration ?? 0), 0);
18
+ logger.info(`[TIMING] pikku all — ${rows.length} steps, ${total}ms total (slowest first):`);
19
+ for (const s of rows) {
20
+ logger.info(`[TIMING] ${String(s.duration).padStart(7)}ms ${s.name}`);
21
+ }
22
+ }
6
23
  },
7
24
  });
@@ -1,7 +1,7 @@
1
1
  export declare const binary: import("#pikku").PikkuFunctionConfig<{
2
2
  compileTarget?: string;
3
- }, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
3
+ }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  compileTarget?: string;
5
- }, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
6
6
  compileTarget?: string;
7
- }, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const bootstrap: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const bootstrap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -4,6 +4,9 @@ export const bootstrap = pikkuVoidFunc({
4
4
  func: async ({ logger, getInspectorState }, _data, { rpc }) => {
5
5
  await getInspectorState(false, true, true);
6
6
  await rpc.invoke('pikkuFunctionTypesSplit', { bootstrap: true });
7
+ // Stub auth.types.ts (if better-auth is used) so the pikkuBetterAuth
8
+ // re-export resolves before any user file is imported.
9
+ await rpc.invoke('pikkuAuth', { bootstrap: true });
7
10
  await rpc.invoke('pikkuFunctionTypes', { bootstrap: true });
8
11
  await rpc.invoke('pikkuHTTPTypes');
9
12
  await rpc.invoke('pikkuChannelTypes');
@@ -2,12 +2,12 @@ export declare const consoleCommand: import("#pikku").PikkuFunctionConfig<{
2
2
  port?: string;
3
3
  open?: string;
4
4
  hmr?: boolean;
5
- }, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
5
+ }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
6
6
  port?: string;
7
7
  open?: string;
8
8
  hmr?: boolean;
9
- }, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
9
+ }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
10
10
  port?: string;
11
11
  open?: string;
12
12
  hmr?: boolean;
13
- }, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
13
+ }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const dbAudit: import("#pikku").PikkuFunctionConfig<{}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const dbAudit: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const dbGenerate: import("#pikku").PikkuFunctionConfig<{}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const dbGenerate: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const dbMigrate: import("#pikku").PikkuFunctionConfig<{}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const dbMigrate: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const dbReset: import("#pikku").PikkuFunctionConfig<{}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const dbReset: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const dbSeed: import("#pikku").PikkuFunctionConfig<{}, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{}, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const dbSeed: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -15,16 +15,16 @@ export declare const deployApply: import("#pikku").PikkuFunctionConfig<{
15
15
  runtime?: string;
16
16
  resultFile?: string;
17
17
  debugArtifacts?: boolean;
18
- }, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
18
+ }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
19
19
  fromPlan?: boolean;
20
20
  provider?: string;
21
21
  runtime?: string;
22
22
  resultFile?: string;
23
23
  debugArtifacts?: boolean;
24
- }, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
24
+ }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
25
25
  fromPlan?: boolean;
26
26
  provider?: string;
27
27
  runtime?: string;
28
28
  resultFile?: string;
29
29
  debugArtifacts?: boolean;
30
- }, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
30
+ }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -1,5 +1,6 @@
1
1
  import { basename, join, relative } from 'node:path';
2
2
  import { readFile } from 'node:fs/promises';
3
+ import { existsSync, readFileSync } from 'node:fs';
3
4
  import { pikkuSessionlessFunc } from '#pikku';
4
5
  import { runBuildPipeline } from '../../deploy/build-pipeline.js';
5
6
  function toRelativeImport(fromDir, toFile) {
@@ -25,6 +26,32 @@ export function getEntryContext(unitDir, pikkuDir, unit, inspectorState) {
25
26
  const servicesType = singletonServicesType
26
27
  ? `Partial<${singletonServicesType.type}>`
27
28
  : 'Record<string, unknown>';
29
+ // MCP: when the unit's .pikku has a non-empty mcp.gen.json, import it and pass
30
+ // it to the generated server so PikkuNodeHTTPServer mounts /mcp. Without this
31
+ // the deployed bundle never serves MCP even though the dev server does.
32
+ let mcpImport = '';
33
+ let mcpServerOption = '';
34
+ const mcpJsonAbs = join(pikkuDir, 'mcp', 'mcp.gen.json');
35
+ if (existsSync(mcpJsonAbs)) {
36
+ let hasMcp = false;
37
+ try {
38
+ const parsed = JSON.parse(readFileSync(mcpJsonAbs, 'utf-8'));
39
+ hasMcp =
40
+ (parsed.tools?.length ?? 0) +
41
+ (parsed.resources?.length ?? 0) +
42
+ (parsed.prompts?.length ?? 0) >
43
+ 0;
44
+ }
45
+ catch (err) {
46
+ console.warn(`[pikku] could not parse ${mcpJsonAbs} — skipping MCP mount: ${err instanceof Error ? err.message : String(err)}`);
47
+ }
48
+ if (hasMcp) {
49
+ const rel = relative(unitDir, mcpJsonAbs).replace(/\\/g, '/');
50
+ const relImport = rel.startsWith('.') ? rel : `./${rel}`;
51
+ mcpImport = `import mcpJson from '${relImport}' with { type: 'json' }`;
52
+ mcpServerOption = 'mcpJson, ';
53
+ }
54
+ }
28
55
  return {
29
56
  unit,
30
57
  unitDir,
@@ -35,6 +62,8 @@ export function getEntryContext(unitDir, pikkuDir, unit, inspectorState) {
35
62
  servicesVar: singletonServicesFactory.variable,
36
63
  singletonServicesImport,
37
64
  servicesType,
65
+ mcpImport,
66
+ mcpServerOption,
38
67
  };
39
68
  }
40
69
  function sanitizeProjectId(raw) {
@@ -147,7 +176,7 @@ async function runDeploy(provider, providerDir, logger, resultFile) {
147
176
  }
148
177
  }
149
178
  export const deployApply = pikkuSessionlessFunc({
150
- func: async ({ logger, config, getInspectorState }, data) => {
179
+ func: async ({ logger, config, getInspectorState, bundler }, data) => {
151
180
  const projectDir = config.rootDir;
152
181
  const provider = await resolveProvider(config, data?.provider, {
153
182
  runtime: data?.runtime,
@@ -180,10 +209,12 @@ export const deployApply = pikkuSessionlessFunc({
180
209
  provider,
181
210
  inspectorState,
182
211
  serverlessIncompatible: config.deploy?.serverlessIncompatible,
212
+ defaultTarget: config.deploy?.defaultTarget,
183
213
  getEntryContext,
184
214
  outDir: config.outDir,
185
215
  debugArtifacts: data?.debugArtifacts ?? false,
186
216
  logger,
217
+ bundler,
187
218
  });
188
219
  if (buildResult.manifest.units.length === 0) {
189
220
  logger.info('No deployment units found. Nothing to deploy.');
@@ -1 +1 @@
1
- export declare const deployInfo: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const deployInfo: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -3,14 +3,14 @@ export declare const deployPlan: import("#pikku").PikkuFunctionConfig<{
3
3
  provider?: string;
4
4
  runtime?: string;
5
5
  debugArtifacts?: boolean;
6
- }, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
6
+ }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
7
7
  resultFile?: string;
8
8
  provider?: string;
9
9
  runtime?: string;
10
10
  debugArtifacts?: boolean;
11
- }, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
11
+ }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
12
12
  resultFile?: string;
13
13
  provider?: string;
14
14
  runtime?: string;
15
15
  debugArtifacts?: boolean;
16
- }, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
16
+ }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -43,7 +43,7 @@ function createEmptyProvider() {
43
43
  };
44
44
  }
45
45
  export const deployPlan = pikkuSessionlessFunc({
46
- func: async ({ logger, config, getInspectorState }, data) => {
46
+ func: async ({ logger, config, getInspectorState, bundler }, data) => {
47
47
  const projectDir = config.rootDir;
48
48
  const inspectorState = await getInspectorState(true);
49
49
  const projectId = await resolveProjectId(projectDir);
@@ -56,10 +56,12 @@ export const deployPlan = pikkuSessionlessFunc({
56
56
  provider,
57
57
  inspectorState,
58
58
  serverlessIncompatible: config.deploy?.serverlessIncompatible,
59
+ defaultTarget: config.deploy?.defaultTarget,
59
60
  getEntryContext,
60
61
  outDir: config.outDir,
61
62
  debugArtifacts: data?.debugArtifacts ?? false,
62
63
  logger,
64
+ bundler,
63
65
  });
64
66
  if (result.manifest.units.length === 0) {
65
67
  logger.info('No deployment units found.');
@@ -2,12 +2,12 @@ export declare const dev: import("#pikku").PikkuFunctionConfig<{
2
2
  port?: string;
3
3
  watch?: boolean;
4
4
  hmr?: boolean;
5
- }, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<{
5
+ }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
6
6
  port?: string;
7
7
  watch?: boolean;
8
8
  hmr?: boolean;
9
- }, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<{
9
+ }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
10
10
  port?: string;
11
11
  watch?: boolean;
12
12
  hmr?: boolean;
13
- }, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
13
+ }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -7,20 +7,22 @@ import { KyselyAIStorageService, KyselyAIRunStateService, KyselyAgentRunService,
7
7
  import { stopSingletonServices } from '@pikku/core';
8
8
  import { pikkuState } from '@pikku/core/internal';
9
9
  import { LocalMetaService } from '@pikku/core/services/local-meta';
10
- import { LocalEventHubService } from '@pikku/core/channel/local';
11
10
  import { LocalContent, } from '@pikku/core/services/local-content';
12
- import { pikkuWebsocketHandler } from '@pikku/ws';
13
- import { PikkuNodeHTTPServer } from '@pikku/node-http-server';
14
- import { WebSocketServer } from 'ws';
15
11
  import { InMemorySchedulerService } from '@pikku/schedule';
16
12
  import { resolveDb, createKysely, parseDatabaseUrl, } from '../db/local-db.js';
17
13
  import { loadUserBootstrap, loadUserModule } from './load-user-project.js';
18
14
  import { createDevAIAgentRunner } from './dev-ai-runner.js';
19
15
  export const dev = pikkuSessionlessFunc({
20
16
  remote: true,
21
- func: async ({ logger, config, getInspectorState, variables }, { port, watch, hmr }, { rpc }) => {
17
+ func: async ({ logger, config, getInspectorState, variables, devServerRunner }, { port, watch, hmr }, { rpc }) => {
22
18
  const resolvedPort = parseInt(port || '3000', 10);
23
19
  const hostname = 'localhost';
20
+ // Bind on IPv4 loopback explicitly. Under Bun, hostname 'localhost' resolves
21
+ // to IPv6 [::1] only, so a 127.0.0.1 proxy (e.g. the sandbox Caddy) can't
22
+ // reach it. '127.0.0.1' binds IPv4 on both Node and Bun (Node otherwise
23
+ // relies on --dns-result-order=ipv4first for the same effect). `hostname`
24
+ // stays 'localhost' for the user-facing content URL below.
25
+ const bindHostname = '127.0.0.1';
24
26
  const enableWatch = watch !== false;
25
27
  const enableHmr = hmr !== false;
26
28
  const watchDirectories = [
@@ -168,20 +170,10 @@ export const dev = pikkuSessionlessFunc({
168
170
  variables,
169
171
  })
170
172
  : undefined;
171
- // When the CLI itself runs under bun (e.g. the compiled brew binary), serve
172
- // over @pikku/bun-server (native Bun.serve WebSockets) instead of the node
173
- // http server + ws package. The bun runtime is dynamically imported so a
174
- // node-run CLI never loads it. The same BunEventHubService instance is
175
- // shared with the singleton services so function-side broadcasts reach the
176
- // sockets the transport holds.
177
- const isBun = typeof globalThis.Bun !== 'undefined';
178
- const bun = isBun
179
- ? await (async () => {
180
- const mod = await import('@pikku/bun-server');
181
- return { mod, eventHub: new mod.BunEventHubService() };
182
- })()
183
- : null;
184
- const eventHub = bun ? bun.eventHub : new LocalEventHubService();
173
+ // The dev server runner (node http+ws, or bun-server) is resolved by DI in
174
+ // services.ts. Its EventHub is shared into the singleton services so
175
+ // function-side broadcasts reach the sockets the transport holds.
176
+ const eventHub = await devServerRunner.createEventHub();
185
177
  const inMemoryServices = {
186
178
  logger: devLogger,
187
179
  ...(aiAgentRunner ? { aiAgentRunner } : {}),
@@ -207,29 +199,12 @@ export const dev = pikkuSessionlessFunc({
207
199
  ...singletonServices,
208
200
  getInspectorState,
209
201
  });
210
- let wss;
211
- let pikkuServer;
212
- if (bun) {
213
- pikkuServer = new bun.mod.PikkuBunServer({
214
- ...userConfig,
215
- hostname,
216
- port: resolvedPort,
217
- content: localContentConfig,
218
- }, logger, { eventHub: bun.eventHub });
219
- }
220
- else {
221
- wss = new WebSocketServer({ noServer: true });
222
- pikkuServer = new PikkuNodeHTTPServer({
223
- ...userConfig,
224
- hostname,
225
- port: resolvedPort,
226
- content: localContentConfig,
227
- }, logger, {
228
- configureServer: (httpServer) => {
229
- pikkuWebsocketHandler({ server: httpServer, wss: wss, logger });
230
- },
231
- });
232
- }
202
+ const pikkuServer = devServerRunner.createServer({
203
+ ...userConfig,
204
+ hostname: bindHostname,
205
+ port: resolvedPort,
206
+ content: localContentConfig,
207
+ }, logger);
233
208
  await pikkuServer.init();
234
209
  await schedulerService.start();
235
210
  await pikkuServer.start();
@@ -241,9 +216,6 @@ export const dev = pikkuSessionlessFunc({
241
216
  await stopSingletonServices();
242
217
  await configWatcher?.close();
243
218
  await watcher?.close();
244
- if (wss) {
245
- await new Promise((resolve, reject) => wss.close((err) => (err ? reject(err) : resolve())));
246
- }
247
219
  await pikkuServer.stop();
248
220
  }
249
221
  finally {
@@ -1,5 +1,5 @@
1
1
  type EmailsInitInput = {
2
2
  force?: boolean;
3
3
  };
4
- export declare const pikkuEmailsInit: import("#pikku").PikkuFunctionConfig<EmailsInitInput, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<EmailsInitInput, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<EmailsInitInput, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuEmailsInit: import("#pikku").PikkuFunctionConfig<EmailsInitInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<EmailsInitInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<EmailsInitInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
5
5
  export {};
@@ -1,5 +1,6 @@
1
- export declare const enableRpc: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
2
- export declare const enableConsole: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
3
- export declare const enableAgent: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
4
- export declare const enableWorkflow: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
5
- export declare const enableEvents: import("#pikku").PikkuFunctionConfig<void, void, "session" | "rpc", import("#pikku").PikkuFunctionSessionless<void, void, "session" | "rpc", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "session" | "rpc", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const enableRpc: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
2
+ export declare const enableConsole: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
3
+ export declare const enableAgent: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const enableWorkflow: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
5
+ export declare const enableEvents: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
6
+ export declare const enableRemoteRpc: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;